aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dist/settings-apps-view-4529.js4
-rw-r--r--dist/settings-apps-view-4529.js.map2
-rw-r--r--dist/settings-vue-settings-apps-users-management.js4
-rw-r--r--dist/settings-vue-settings-apps-users-management.js.map2
4 files changed, 6 insertions, 6 deletions
diff --git a/dist/settings-apps-view-4529.js b/dist/settings-apps-view-4529.js
index 7909bf89884..5343449bc6f 100644
--- a/dist/settings-apps-view-4529.js
+++ b/dist/settings-apps-view-4529.js
@@ -1,3 +1,3 @@
/*! For license information please see settings-apps-view-4529.js.LICENSE.txt */
-"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[4529],{92973:(t,e,a)=>{a.d(e,{l:()=>s});var n=a(53334);const s=Object.freeze({discover:(0,n.Tl)("settings","Discover"),installed:(0,n.Tl)("settings","Your apps"),enabled:(0,n.Tl)("settings","Active apps"),disabled:(0,n.Tl)("settings","Disabled apps"),updates:(0,n.Tl)("settings","Updates"),"app-bundles":(0,n.Tl)("settings","App bundles"),featured:(0,n.Tl)("settings","Featured apps"),supported:(0,n.Tl)("settings","Supported apps")})},45834:(e,a,n)=>{n.d(a,{A:()=>l});var s=n(85168),i=n(26287),o=n(99498),r=n(61338);const p=()=>i.A.get((0,o.KT)("core/navigation",2)+"/apps?format=json").then((t=>{let{data:e}=t;200===e.ocs.meta.statuscode&&((0,r.Ic)("nextcloud:app-menu.refresh",{apps:e.ocs.data}),window.dispatchEvent(new Event("resize")))})),l={computed:{appGroups(){return this.app.groups.map((t=>({id:t,name:t})))},installing(){return this.$store.getters.loading("install")},isLoading(){return this.app&&this.$store.getters.loading(this.app.id)},enableButtonText(){return this.app.needsDownload?t("settings","Download and enable"):t("settings","Enable")},forceEnableButtonText(){return this.app.needsDownload,t("settings","Allow untested app")},enableButtonTooltip(){return this.app.needsDownload?t("settings","The app will be downloaded from the App Store"):null},forceEnableButtonTooltip(){const e=t("settings","This app is not marked as compatible with your Nextcloud version. If you continue you will still be able to install the app. Note that the app might not work as expected.");return this.app.needsDownload?e+" "+t("settings","The app will be downloaded from the App Store"):e}},data:()=>({groupCheckedAppsData:!1}),mounted(){this.app&&this.app.groups&&this.app.groups.length>0&&(this.groupCheckedAppsData=!0)},methods:{asyncFindGroup(t){return this.$store.dispatch("getGroups",{search:t,limit:5,offset:0})},isLimitedToGroups(t){return!(!this.app.groups.length&&!this.groupCheckedAppsData)},setGroupLimit(){this.groupCheckedAppsData||this.$store.dispatch("enableApp",{appId:this.app.id,groups:[]})},canLimitToGroups:t=>!(t.types&&t.types.includes("filesystem")||t.types.includes("prelogin")||t.types.includes("authentication")||t.types.includes("logging")||t.types.includes("prevent_group_restriction")),addGroupLimitation(t){const e=t.pop(),a=this.app.groups.concat([]).concat([e.id]);this.$store.dispatch("enableApp",{appId:this.app.id,groups:a})},removeGroupLimitation(t){const e=this.app.groups.concat([]),a=e.indexOf(t.id);a>-1&&e.splice(a,1),this.$store.dispatch("enableApp",{appId:this.app.id,groups:e})},forceEnable(t){this.$store.dispatch("forceEnableApp",{appId:t,groups:[]}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))},enable(t){this.$store.dispatch("enableApp",{appId:t,groups:[]}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))},disable(t){this.$store.dispatch("disableApp",{appId:t}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))},remove(t){this.$store.dispatch("uninstallApp",{appId:t}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))},install(t){this.$store.dispatch("enableApp",{appId:t}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))},update(t){this.$store.dispatch("updateApp",{appId:t}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))}}}},86438:(t,e,a)=>{a.d(e,{A:()=>s});var n=a(9165);const s=Object.freeze({discover:n.tZc,installed:n.Gbn,enabled:n.Tfj,disabled:n.hyP,bundles:n.nSK,supported:n.Yk,featured:n.ZL5,updates:n.XCd,auth:n.EYN,customization:n.CZ3,dashboard:n.edW,files:n.fEr,games:n.FeJ,integration:n.bur,monitoring:n.y48,multimedia:n.WI,office:n.Ku3,organization:n.TO3,search:n.U4M,security:n.JiW,social:n.Krx,tools:n.QKT,workflow:n.Dgm})},846:(t,e,a)=>{a.d(e,{T:()=>A});var n=a(85168),s=a(38613),i=a(53334),o=a(99498),r=a(65899),p=a(26287),l=a(36620),c=a(86438);const d=()=>(0,n.Qg)((0,i.Tl)("settings","An error occurred during the request. Unable to proceed.")),A=(0,r.nY)("settings-apps",{state:()=>({apps:[],categories:[],updateCount:(0,s.C)("settings","appstoreUpdateCount",0),loading:{apps:!1,categories:!1},loadingList:!1,gettingCategoriesPromise:null}),actions:{async loadCategories(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!(this.categories.length>0)||t)try{this.loading.categories=!0;const{data:t}=await p.A.get((0,o.Jv)("settings/apps/categories"));for(const a of t){var e;a.icon=null!==(e=c.A[a.id])&&void 0!==e?e:""}this.$patch({categories:t})}catch(t){l.A.error(t),d()}finally{this.loading.categories=!1}},async loadApps(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!(this.apps.length>0)||t)try{this.loading.apps=!0;const{data:t}=await p.A.get((0,o.Jv)("settings/apps/list"));this.$patch({apps:t.apps})}catch(t){l.A.error(t),d()}finally{this.loading.apps=!1}},getCategoryById(t){var e;return null!==(e=this.categories.find((e=>{let{id:a}=e;return a===t})))&&void 0!==e?e:null},getAppById(t){var e;return null!==(e=this.apps.find((e=>{let{id:a}=e;return a===t})))&&void 0!==e?e:null}}})},94025:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".apps-list[data-v-73184220]{display:flex;flex-wrap:wrap;align-content:flex-start}.apps-list--move[data-v-73184220]{transition:transform 1s}.apps-list #app-list-update-all[data-v-73184220]{margin-left:10px}.apps-list__toolbar[data-v-73184220]{height:60px;padding:8px;padding-left:60px;width:100%;background-color:var(--color-main-background);position:sticky;top:0;z-index:1;display:flex;align-items:center}.apps-list--list-view[data-v-73184220]{margin-bottom:100px;position:relative}.apps-list__list-container[data-v-73184220]{width:100%}.apps-list__store-container[data-v-73184220]{display:flex;flex-wrap:wrap}.apps-list__bundle-heading[data-v-73184220]{display:flex;align-items:center;margin:20px 10px 20px 0}.apps-list__bundle-header[data-v-73184220]{margin:0 10px 0 50px;font-weight:bold;font-size:20px;line-height:30px;color:var(--color-text-light)}#apps-list-search .app-item h2[data-v-73184220]{margin-bottom:0}","",{version:3,sources:["webpack://./apps/settings/src/components/AppList.vue"],names:[],mappings:"AAIA,4BACC,YAAA,CACA,cAAA,CACA,wBAAA,CAGA,kCACC,uBAAA,CAGD,iDACC,gBAAA,CAGD,qCACC,WAjBe,CAkBf,WAnBgB,CAqBhB,iBApBe,CAqBf,UAAA,CACA,6CAAA,CACA,eAAA,CACA,KAAA,CACA,SAAA,CACA,YAAA,CACA,kBAAA,CAGD,uCACC,mBAAA,CAEA,iBAAA,CAGD,4CACC,UAAA,CAGD,6CACC,YAAA,CACA,cAAA,CAGD,4CACC,YAAA,CACA,kBAAA,CACA,uBAAA,CAGD,2CACC,oBAAA,CACA,gBAAA,CACA,cAAA,CACA,gBAAA,CACA,6BAAA,CAMA,gDACC,eAAA",sourcesContent:["\n$toolbar-padding: 8px;\n$toolbar-height: 44px + $toolbar-padding * 2;\n\n.apps-list {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-content: flex-start;\n\n\t// For transition group\n\t&--move {\n\t\ttransition: transform 1s;\n\t}\n\n\t#app-list-update-all {\n\t\tmargin-left: 10px;\n\t}\n\n\t&__toolbar {\n\t\theight: $toolbar-height;\n\t\tpadding: $toolbar-padding;\n\t\t// Leave room for app-navigation-toggle\n\t\tpadding-left: $toolbar-height;\n\t\twidth: 100%;\n\t\tbackground-color: var(--color-main-background);\n\t\tposition: sticky;\n\t\ttop: 0;\n\t\tz-index: 1;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\n\t&--list-view {\n\t\tmargin-bottom: 100px;\n\t\t// For positioning link overlay on rows\n\t\tposition: relative;\n\t}\n\n\t&__list-container {\n\t\twidth: 100%;\n\t}\n\n\t&__store-container {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t}\n\n\t&__bundle-heading {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmargin: 20px 10px 20px 0;\n\t}\n\n\t&__bundle-header {\n\t\tmargin: 0 10px 0 50px;\n\t\tfont-weight: bold;\n\t\tfont-size: 20px;\n\t\tline-height: 30px;\n\t\tcolor: var(--color-text-light);\n\t}\n}\n\n#apps-list-search {\n\t.app-item {\n\t\th2 {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const r=o},94892:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,'.app-item[data-v-0dbcb644]{position:relative}.app-item[data-v-0dbcb644]:hover{background-color:var(--color-background-dark)}.app-item--list-view[data-v-0dbcb644]{--app-item-padding: calc(var(--default-grid-baseline) * 2);--app-item-height: calc(var(--default-clickable-area) + var(--app-item-padding) * 2)}.app-item--list-view.app-item--selected[data-v-0dbcb644]{background-color:var(--color-background-dark)}.app-item--list-view>*[data-v-0dbcb644]{vertical-align:middle;border-bottom:1px solid var(--color-border);padding:var(--app-item-padding);height:var(--app-item-height)}.app-item--list-view .app-image[data-v-0dbcb644]{width:var(--default-clickable-area);height:auto;text-align:right}.app-item--list-view .app-image-icon svg[data-v-0dbcb644],.app-item--list-view .app-image-icon .icon-settings-dark[data-v-0dbcb644]{margin-top:5px;width:20px;height:20px;opacity:.5;background-size:cover;display:inline-block}.app-item--list-view .app-name[data-v-0dbcb644]{padding:0 var(--app-item-padding)}.app-item--list-view .app-name--link[data-v-0dbcb644]{height:var(--app-item-height);display:flex;align-items:center}.app-item--list-view .app-name--link[data-v-0dbcb644]::after{content:"";position:absolute;left:0;right:0;height:var(--app-item-height)}.app-item--list-view .app-actions[data-v-0dbcb644]{display:flex;gap:var(--app-item-padding);flex-wrap:wrap;justify-content:end}.app-item--list-view .app-actions .icon-loading-small[data-v-0dbcb644]{display:inline-block;top:4px;margin-right:10px}@media only screen and (max-width: 900px){.app-item--list-view .app-version[data-v-0dbcb644],.app-item--list-view .app-level[data-v-0dbcb644]{display:none}}@media only screen and (max-width: 512px){.app-item--list-view .app-actions[data-v-0dbcb644]{display:none}}.app-item--store-view[data-v-0dbcb644]{padding:30px}.app-item--store-view .app-image-icon .icon-settings-dark[data-v-0dbcb644]{width:100%;height:150px;background-size:45px;opacity:.5}.app-item--store-view .app-image-icon svg[data-v-0dbcb644]{position:absolute;bottom:43px;width:64px;height:64px;opacity:.1}.app-item--store-view .app-name[data-v-0dbcb644]{margin:5px 0}.app-item--store-view .app-name--link[data-v-0dbcb644]::after{content:"";position:absolute;top:0;left:0;right:0;bottom:0}.app-item--store-view .app-actions[data-v-0dbcb644]{margin:10px 0}@media only screen and (min-width: 1601px){.app-item--store-view[data-v-0dbcb644]{width:25%}.app-item--store-view.app-item--with-sidebar[data-v-0dbcb644]{width:33%}}@media only screen and (max-width: 1600px){.app-item--store-view[data-v-0dbcb644]{width:25%}.app-item--store-view.app-item--with-sidebar[data-v-0dbcb644]{width:33%}}@media only screen and (max-width: 1400px){.app-item--store-view[data-v-0dbcb644]{width:33%}.app-item--store-view.app-item--with-sidebar[data-v-0dbcb644]{width:50%}}@media only screen and (max-width: 900px){.app-item--store-view[data-v-0dbcb644]{width:50%}.app-item--store-view.app-item--with-sidebar[data-v-0dbcb644]{width:100%}}@media only screen and (max-width: 1024px){.app-item--store-view[data-v-0dbcb644]{width:50%}}@media only screen and (max-width: 480px){.app-item--store-view[data-v-0dbcb644]{width:100%}}.app-icon[data-v-0dbcb644]{filter:var(--background-invert-if-bright)}.app-image[data-v-0dbcb644]{position:relative;height:150px;opacity:1;overflow:hidden}.app-image img[data-v-0dbcb644]{width:100%}.app-version[data-v-0dbcb644]{color:var(--color-text-maxcontrast)}',"",{version:3,sources:["webpack://./apps/settings/src/components/AppList/AppItem.vue"],names:[],mappings:"AAIA,2BACC,iBAAA,CAEA,iCACC,6CAAA,CAGD,sCACC,0DAAA,CACA,oFAAA,CAEA,yDACC,6CAAA,CAGD,wCACC,qBAAA,CACA,2CAAA,CACA,+BAAA,CACA,6BAAA,CAGD,iDACC,mCAAA,CACA,WAAA,CACA,gBAAA,CAGD,oIAEC,cAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CACA,qBAAA,CACA,oBAAA,CAGD,gDACC,iCAAA,CAGD,sDACC,6BAAA,CACA,YAAA,CACA,kBAAA,CAMD,6DACC,UAAA,CACA,iBAAA,CACA,MAAA,CACA,OAAA,CACA,6BAAA,CAGD,mDACC,YAAA,CACA,2BAAA,CACA,cAAA,CACA,mBAAA,CAEA,uEACC,oBAAA,CACA,OAAA,CACA,iBAAA,CAKF,0CACC,oGAEC,YAAA,CAAA,CAKF,0CACC,mDACC,YAAA,CAAA,CAKH,uCACC,YAAA,CAEA,2EACC,UAAA,CACA,YAAA,CACA,oBAAA,CACA,UAAA,CAGD,2DACC,iBAAA,CACA,WAAA,CAEA,UAAA,CACA,WAAA,CACA,UAAA,CAGD,iDACC,YAAA,CAGD,8DACC,UAAA,CACA,iBAAA,CACA,KAAA,CACA,MAAA,CACA,OAAA,CACA,QAAA,CAGD,oDACC,aAAA,CAGD,2CApCD,uCAqCE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,2CA5CD,uCA6CE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,2CApDD,uCAqDE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,0CA5DD,uCA6DE,SAAA,CAEA,8DACC,UAAA,CAAA,CAIF,2CApED,uCAqEE,SAAA,CAAA,CAGD,0CAxED,uCAyEE,UAAA,CAAA,CAKH,2BACC,yCAAA,CAGD,4BACC,iBAAA,CACA,YAAA,CACA,SAAA,CACA,eAAA,CAEA,gCACC,UAAA,CAIF,8BACC,mCAAA",sourcesContent:["\n@use '../../../../../core/css/variables.scss' as variables;\n@use 'sass:math';\n\n.app-item {\n\tposition: relative;\n\n\t&:hover {\n\t\tbackground-color: var(--color-background-dark);\n\t}\n\n\t&--list-view {\n\t\t--app-item-padding: calc(var(--default-grid-baseline) * 2);\n\t\t--app-item-height: calc(var(--default-clickable-area) + var(--app-item-padding) * 2);\n\n\t\t&.app-item--selected {\n\t\t\tbackground-color: var(--color-background-dark);\n\t\t}\n\n\t\t> * {\n\t\t\tvertical-align: middle;\n\t\t\tborder-bottom: 1px solid var(--color-border);\n\t\t\tpadding: var(--app-item-padding);\n\t\t\theight: var(--app-item-height);\n\t\t}\n\n\t\t.app-image {\n\t\t\twidth: var(--default-clickable-area);\n\t\t\theight: auto;\n\t\t\ttext-align: right;\n\t\t}\n\n\t\t.app-image-icon svg,\n\t\t.app-image-icon .icon-settings-dark {\n\t\t\tmargin-top: 5px;\n\t\t\twidth: 20px;\n\t\t\theight: 20px;\n\t\t\topacity: .5;\n\t\t\tbackground-size: cover;\n\t\t\tdisplay: inline-block;\n\t\t}\n\n\t\t.app-name {\n\t\t\tpadding: 0 var(--app-item-padding);\n\t\t}\n\n\t\t.app-name--link {\n\t\t\theight: var(--app-item-height);\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t// Note: because of Safari bug, we cannot position link overlay relative to the table row\n\t\t// So we need to manually position it relative to the table container and cell\n\t\t// See: https://bugs.webkit.org/show_bug.cgi?id=240961\n\t\t.app-name--link::after {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\theight: var(--app-item-height);\n\t\t}\n\n\t\t.app-actions {\n\t\t\tdisplay: flex;\n\t\t\tgap: var(--app-item-padding);\n\t\t\tflex-wrap: wrap;\n\t\t\tjustify-content: end;\n\n\t\t\t.icon-loading-small {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\ttop: 4px;\n\t\t\t\tmargin-right: 10px;\n\t\t\t}\n\t\t}\n\n\t\t/* hide app version and level on narrower screens */\n\t\t@media only screen and (max-width: 900px) {\n\t\t\t.app-version,\n\t\t\t.app-level {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\n\t\t/* Hide actions on a small screen. Click on app opens fill-screen sidebar with the buttons */\n\t\t@media only screen and (max-width: math.div(variables.$breakpoint-mobile, 2)) {\n\t\t\t.app-actions {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t&--store-view {\n\t\tpadding: 30px;\n\n\t\t.app-image-icon .icon-settings-dark {\n\t\t\twidth: 100%;\n\t\t\theight: 150px;\n\t\t\tbackground-size: 45px;\n\t\t\topacity: 0.5;\n\t\t}\n\n\t\t.app-image-icon svg {\n\t\t\tposition: absolute;\n\t\t\tbottom: 43px;\n\t\t\t/* position halfway vertically */\n\t\t\twidth: 64px;\n\t\t\theight: 64px;\n\t\t\topacity: .1;\n\t\t}\n\n\t\t.app-name {\n\t\t\tmargin: 5px 0;\n\t\t}\n\n\t\t.app-name--link::after {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\tbottom: 0;\n\t\t}\n\n\t\t.app-actions {\n\t\t\tmargin: 10px 0;\n\t\t}\n\n\t\t@media only screen and (min-width: 1601px) {\n\t\t\twidth: 25%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 33%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: 1600px) {\n\t\t\twidth: 25%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 33%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: 1400px) {\n\t\t\twidth: 33%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 50%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: 900px) {\n\t\t\twidth: 50%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: variables.$breakpoint-mobile) {\n\t\t\twidth: 50%;\n\t\t}\n\n\t\t@media only screen and (max-width: 480px) {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n}\n\n.app-icon {\n\tfilter: var(--background-invert-if-bright);\n}\n\n.app-image {\n\tposition: relative;\n\theight: 150px;\n\topacity: 1;\n\toverflow: hidden;\n\n\timg {\n\t\twidth: 100%;\n\t}\n}\n\n.app-version {\n\tcolor: var(--color-text-maxcontrast);\n}\n"],sourceRoot:""}]);const r=o},30993:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".app-level-badge[data-v-3590dbeb]{color:var(--color-text-maxcontrast);background-color:rgba(0,0,0,0);border:1px solid var(--color-text-maxcontrast);border-radius:var(--border-radius);display:flex;flex-direction:row;gap:6px;padding:3px 6px;width:fit-content}.app-level-badge--supported[data-v-3590dbeb]{border-color:var(--color-success);color:var(--color-success)}","",{version:3,sources:["webpack://./apps/settings/src/components/AppList/AppLevelBadge.vue"],names:[],mappings:"AACA,kCACC,mCAAA,CACA,8BAAA,CACA,8CAAA,CACA,kCAAA,CAEA,YAAA,CACA,kBAAA,CACA,OAAA,CACA,eAAA,CACA,iBAAA,CAEA,6CACC,iCAAA,CACA,0BAAA",sourcesContent:["\n.app-level-badge {\n\tcolor: var(--color-text-maxcontrast);\n\tbackground-color: transparent;\n\tborder: 1px solid var(--color-text-maxcontrast);\n\tborder-radius: var(--border-radius);\n\n\tdisplay: flex;\n\tflex-direction: row;\n\tgap: 6px;\n\tpadding: 3px 6px;\n\twidth: fit-content;\n\n\t&--supported {\n\t\tborder-color: var(--color-success);\n\t\tcolor: var(--color-success);\n\t}\n}\n"],sourceRoot:""}]);const r=o},84260:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".app-discover[data-v-262838ca]{max-width:1008px;margin-inline:auto;padding-inline:54px;padding-block-end:var(--default-clickable-area, 44px);display:flex;flex-direction:column;gap:var(--default-clickable-area, 44px)}","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue"],names:[],mappings:"AACA,+BACC,gBAAA,CACA,kBAAA,CACA,mBAAA,CAEA,qDAAA,CAEA,YAAA,CACA,qBAAA,CACA,uCAAA",sourcesContent:["\n.app-discover {\n\tmax-width: 1008px; /* 900px + 2x 54px padding for the carousel controls */\n\tmargin-inline: auto;\n\tpadding-inline: 54px;\n\t/* Padding required to make last element not bound to the bottom */\n\tpadding-block-end: var(--default-clickable-area, 44px);\n\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--default-clickable-area, 44px);\n}\n"],sourceRoot:""}]);const r=o},10321:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".app-description[data-v-fccce5ae]{padding:12px}","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue"],names:[],mappings:"AACA,kCACC,YAAA",sourcesContent:["\n.app-description {\n\tpadding: 12px;\n}\n"],sourceRoot:""}]);const r=o},8007:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,'.app-details[data-v-24864562]{padding:20px}.app-details__actions-manage[data-v-24864562]{display:flex}.app-details__actions-manage input[data-v-24864562]{flex:0 1 auto;min-width:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.app-details__authors[data-v-24864562]{color:var(--color-text-maxcontrast)}.app-details__section[data-v-24864562]{margin-top:15px}.app-details__section h4[data-v-24864562]{font-size:16px;font-weight:bold;margin-block-end:5px}.app-details__interact[data-v-24864562]{display:flex;flex-direction:row;flex-wrap:wrap;gap:12px}.app-details__documentation a[data-v-24864562]{text-decoration:underline}.app-details__documentation li[data-v-24864562]{padding-inline-start:20px}.app-details__documentation li[data-v-24864562]::before{width:5px;height:5px;border-radius:100%;background-color:var(--color-main-text);content:"";float:inline-start;margin-inline-start:-13px;position:relative;top:10px}.force[data-v-24864562]{color:var(--color-error);border-color:var(--color-error);background:var(--color-main-background)}.force[data-v-24864562]:hover,.force[data-v-24864562]:active{color:var(--color-main-background);border-color:var(--color-error) !important;background:var(--color-error)}.missing-dependencies[data-v-24864562]{list-style:initial;list-style-type:initial;list-style-position:inside}',"",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue"],names:[],mappings:"AACA,8BACC,YAAA,CAIC,8CAEC,YAAA,CACA,oDACC,aAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,eAAA,CAIH,uCACC,mCAAA,CAGD,uCACC,eAAA,CAEA,0CACC,cAAA,CACA,gBAAA,CACA,oBAAA,CAIF,wCACC,YAAA,CACA,kBAAA,CACA,cAAA,CACA,QAAA,CAIA,+CACC,yBAAA,CAED,gDACC,yBAAA,CAEA,wDACC,SAAA,CACA,UAAA,CACA,kBAAA,CACA,uCAAA,CACA,UAAA,CACA,kBAAA,CACA,yBAAA,CACA,iBAAA,CACA,QAAA,CAMJ,wBACC,wBAAA,CACA,+BAAA,CACA,uCAAA,CAED,6DAEC,kCAAA,CACA,0CAAA,CACA,6BAAA,CAGD,uCACC,kBAAA,CACA,uBAAA,CACA,0BAAA",sourcesContent:['\n.app-details {\n\tpadding: 20px;\n\n\t&__actions {\n\t\t// app management\n\t\t&-manage {\n\t\t\t// if too many, shrink them and ellipsis\n\t\t\tdisplay: flex;\n\t\t\tinput {\n\t\t\t\tflex: 0 1 auto;\n\t\t\t\tmin-width: 0;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\t}\n\t&__authors {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__section {\n\t\tmargin-top: 15px;\n\n\t\th4 {\n\t\t\tfont-size: 16px;\n\t\t\tfont-weight: bold;\n\t\t\tmargin-block-end: 5px;\n\t\t}\n\t}\n\n\t&__interact {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tflex-wrap: wrap;\n\t\tgap: 12px;\n\t}\n\n\t&__documentation {\n\t\ta {\n\t\t\ttext-decoration: underline;\n\t\t}\n\t\tli {\n\t\t\tpadding-inline-start: 20px;\n\n\t\t\t&::before {\n\t\t\t\twidth: 5px;\n\t\t\t\theight: 5px;\n\t\t\t\tborder-radius: 100%;\n\t\t\t\tbackground-color: var(--color-main-text);\n\t\t\t\tcontent: "";\n\t\t\t\tfloat: inline-start;\n\t\t\t\tmargin-inline-start: -13px;\n\t\t\t\tposition: relative;\n\t\t\t\ttop: 10px;\n\t\t\t}\n\t\t}\n\t}\n}\n\n.force {\n\tcolor: var(--color-error);\n\tborder-color: var(--color-error);\n\tbackground: var(--color-main-background);\n}\n.force:hover,\n.force:active {\n\tcolor: var(--color-main-background);\n\tborder-color: var(--color-error) !important;\n\tbackground: var(--color-error);\n}\n\n.missing-dependencies {\n\tlist-style: initial;\n\tlist-style-type: initial;\n\tlist-style-position: inside;\n}\n'],sourceRoot:""}]);const r=o},99992:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".app-sidebar-tabs__release h2[data-v-2261a93d]{border-bottom:1px solid var(--color-border);font-size:24px}.app-sidebar-tabs__release-text[data-v-2261a93d] h3{font-size:20px}.app-sidebar-tabs__release-text[data-v-2261a93d] h4{font-size:17px}","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue"],names:[],mappings:"AAEC,+CACC,2CAAA,CACA,cAAA,CAKA,oDACC,cAAA,CAED,oDACC,cAAA",sourcesContent:["\n.app-sidebar-tabs__release {\n\th2 {\n\t\tborder-bottom: 1px solid var(--color-border);\n\t\tfont-size: 24px;\n\t}\n\n\t&-text {\n\t\t// Overwrite changelog heading styles\n\t\t:deep(h3) {\n\t\t\tfont-size: 20px;\n\t\t}\n\t\t:deep(h4) {\n\t\t\tfont-size: 17px;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const r=o},3323:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".settings-markdown[data-v-7c5c8e59] h1,.settings-markdown[data-v-7c5c8e59] h2,.settings-markdown[data-v-7c5c8e59] h3,.settings-markdown[data-v-7c5c8e59] h4,.settings-markdown[data-v-7c5c8e59] h5,.settings-markdown[data-v-7c5c8e59] h6{font-weight:600;line-height:120%;margin-top:24px;margin-bottom:12px;color:var(--color-main-text)}.settings-markdown[data-v-7c5c8e59] h1{font-size:36px;margin-top:48px}.settings-markdown[data-v-7c5c8e59] h2{font-size:28px;margin-top:48px}.settings-markdown[data-v-7c5c8e59] h3{font-size:24px}.settings-markdown[data-v-7c5c8e59] h4{font-size:21px}.settings-markdown[data-v-7c5c8e59] h5{font-size:17px}.settings-markdown[data-v-7c5c8e59] h6{font-size:var(--default-font-size)}.settings-markdown[data-v-7c5c8e59] pre{white-space:pre;overflow-x:auto;background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:1em 1.3em;margin-bottom:1em}.settings-markdown[data-v-7c5c8e59] p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}.settings-markdown[data-v-7c5c8e59] li{position:relative}.settings-markdown[data-v-7c5c8e59] ul,.settings-markdown[data-v-7c5c8e59] ol{padding-left:10px;margin-left:10px}.settings-markdown[data-v-7c5c8e59] ul li{list-style-type:disc}.settings-markdown[data-v-7c5c8e59] ul>li>ul>li{list-style-type:circle}.settings-markdown[data-v-7c5c8e59] ul>li>ul>li ul li{list-style-type:square}.settings-markdown[data-v-7c5c8e59] blockquote{padding-left:1em;border-left:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-left:0;margin-right:0}","",{version:3,sources:["webpack://./apps/settings/src/components/Markdown.vue"],names:[],mappings:"AAGA,0OAMC,eAAA,CACA,gBAAA,CACA,eAAA,CACA,kBAAA,CACA,4BAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,kCAAA,CAGD,wCACC,eAAA,CACA,eAAA,CACA,6CAAA,CACA,kCAAA,CACA,iBAAA,CACA,iBAAA,CAGD,2CACC,6CAAA,CACA,kCAAA,CACA,iBAAA,CAGD,uCACC,iBAAA,CAGD,8EACC,iBAAA,CACA,gBAAA,CAGD,0CACC,oBAAA,CAGD,gDACC,sBAAA,CAGD,sDACC,sBAAA,CAGD,+CACC,gBAAA,CACA,kDAAA,CACA,mCAAA,CACA,aAAA,CACA,cAAA",sourcesContent:["\n.settings-markdown::v-deep {\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n\tfont-weight: 600;\n\tline-height: 120%;\n\tmargin-top: 24px;\n\tmargin-bottom: 12px;\n\tcolor: var(--color-main-text);\n}\n\nh1 {\n\tfont-size: 36px;\n\tmargin-top: 48px;\n}\n\nh2 {\n\tfont-size: 28px;\n\tmargin-top: 48px;\n}\n\nh3 {\n\tfont-size: 24px;\n}\n\nh4 {\n\tfont-size: 21px;\n}\n\nh5 {\n\tfont-size: 17px;\n}\n\nh6 {\n\tfont-size: var(--default-font-size);\n}\n\npre {\n\twhite-space: pre;\n\toverflow-x: auto;\n\tbackground-color: var(--color-background-dark);\n\tborder-radius: var(--border-radius);\n\tpadding: 1em 1.3em;\n\tmargin-bottom: 1em;\n}\n\np code {\n\tbackground-color: var(--color-background-dark);\n\tborder-radius: var(--border-radius);\n\tpadding: .1em .3em;\n}\n\nli {\n\tposition: relative;\n}\n\nul, ol {\n\tpadding-left: 10px;\n\tmargin-left: 10px;\n}\n\nul li {\n\tlist-style-type: disc;\n}\n\nul > li > ul > li {\n\tlist-style-type: circle;\n}\n\nul > li > ul > li ul li {\n\tlist-style-type: square;\n}\n\nblockquote {\n\tpadding-left: 1em;\n\tborder-left: 4px solid var(--color-primary-element);\n\tcolor: var(--color-text-maxcontrast);\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n\n}\n"],sourceRoot:""}]);const r=o},47275:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".app-sidebar--with-screenshot[data-v-31ecb666] .app-sidebar-header__figure{background-size:cover}.app-sidebar__fallback-icon[data-v-31ecb666]{width:100%;height:100%}.app-sidebar__badges[data-v-31ecb666]{display:flex;flex-direction:row;gap:12px}.app-sidebar__version[data-v-31ecb666]{color:var(--color-text-maxcontrast)}","",{version:3,sources:["webpack://./apps/settings/src/views/AppStoreSidebar.vue"],names:[],mappings:"AAIE,2EACC,qBAAA,CAIF,6CAEC,UAAA,CACA,WAAA,CAGD,sCACC,YAAA,CACA,kBAAA,CACA,QAAA,CAGD,uCACC,mCAAA",sourcesContent:["\n.app-sidebar {\n\t// If a screenshot is available it should cover the whole figure\n\t&--with-screenshot {\n\t\t:deep(.app-sidebar-header__figure) {\n\t\t\tbackground-size: cover;\n\t\t}\n\t}\n\n\t&__fallback-icon {\n\t\t// both 100% to center the icon\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n\n\t&__badges {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tgap: 12px;\n\t}\n\n\t&__version {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\n"],sourceRoot:""}]);const r=o},20922:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,"\n.app-score__wrapper[data-v-7d015114] {\n\tdisplay: inline-flex;\n\tcolor: var(--color-favorite, #a08b00);\n> *[data-v-7d015114] {\n\t\tvertical-align: text-bottom;\n}\n}\n","",{version:3,sources:["webpack://./apps/settings/src/components/AppList/AppScore.vue"],names:[],mappings:";AAiFA;CACA,oBAAA;CACA,qCAAA;AAEA;EACA,2BAAA;AACA;AACA",sourcesContent:['\x3c!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n - @author Ferdinand Thiessen <opensource@fthiessen.de>\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 --\x3e\n\n<template>\n\t<span role="img"\n\t\t:aria-label="title"\n\t\t:title="title"\n\t\tclass="app-score__wrapper">\n\t\t<NcIconSvgWrapper v-for="index in fullStars"\n\t\t\t:key="`full-star-${index}`"\n\t\t\t:path="mdiStar"\n\t\t\tinline />\n\t\t<NcIconSvgWrapper v-if="hasHalfStar" :path="mdiStarHalfFull" inline />\n\t\t<NcIconSvgWrapper v-for="index in emptyStars"\n\t\t\t:key="`empty-star-${index}`"\n\t\t\t:path="mdiStarOutline"\n\t\t\tinline />\n\t</span>\n</template>\n<script lang="ts">\nimport NcIconSvgWrapper from \'@nextcloud/vue/dist/Components/NcIconSvgWrapper.js\'\nimport { mdiStar, mdiStarHalfFull, mdiStarOutline } from \'@mdi/js\'\nimport { translate as t } from \'@nextcloud/l10n\'\nimport { defineComponent } from \'vue\'\n\nexport default defineComponent({\n\tname: \'AppScore\',\n\tcomponents: {\n\t\tNcIconSvgWrapper,\n\t},\n\tprops: {\n\t\tscore: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tsetup() {\n\t\treturn {\n\t\t\tmdiStar,\n\t\t\tmdiStarHalfFull,\n\t\t\tmdiStarOutline,\n\t\t}\n\t},\n\tcomputed: {\n\t\ttitle() {\n\t\t\tconst appScore = (this.score * 5).toFixed(1)\n\t\t\treturn t(\'settings\', \'Community rating: {score}/5\', { score: appScore })\n\t\t},\n\t\tfullStars() {\n\t\t\treturn Math.floor(this.score * 5 + 0.25)\n\t\t},\n\t\temptyStars() {\n\t\t\treturn Math.min(Math.floor((1 - this.score) * 5 + 0.25), 5 - this.fullStars)\n\t\t},\n\t\thasHalfStar() {\n\t\t\treturn (this.fullStars + this.emptyStars) < 5\n\t\t},\n\t},\n})\n<\/script>\n<style scoped>\n.app-score__wrapper {\n\tdisplay: inline-flex;\n\tcolor: var(--color-favorite, #a08b00);\n\n\t> * {\n\t\tvertical-align: text-bottom;\n\t}\n}\n</style>\n'],sourceRoot:""}]);const r=o},34707:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,"\n.empty-content__loading[data-v-a75d4530] {\n\theight: 100%;\n}\n.app-settings-content__label[data-v-a75d4530] {\n\tmargin-block-start: var(--app-navigation-padding);\n\tmargin-inline-start: calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2);\n\tmin-height: var(--default-clickable-area);\n\tline-height: var(--default-clickable-area);\n\tvertical-align: center;\n}\n","",{version:3,sources:["webpack://./apps/settings/src/views/AppStore.vue"],names:[],mappings:";AAoFA;CACA,YAAA;AACA;AAEA;CACA,iDAAA;CACA,4FAAA;CACA,yCAAA;CACA,0CAAA;CACA,sBAAA;AACA",sourcesContent:["\x3c!--\n\t- @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n\t-\n\t- @author Julius Härtl <jus@bitgrid.net>\n\t- @author Ferdinand Thiessen <opensource@fthiessen.de>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n\t--\x3e\n\n<template>\n\t\x3c!-- Apps list --\x3e\n\t<NcAppContent class=\"app-settings-content\"\n\t\t:page-heading=\"appStoreLabel\">\n\t\t<h2 class=\"app-settings-content__label\" v-text=\"viewLabel\" />\n\n\t\t<AppStoreDiscoverSection v-if=\"currentCategory === 'discover'\" />\n\t\t<NcEmptyContent v-else-if=\"isLoading\"\n\t\t\tclass=\"empty-content__loading\"\n\t\t\t:name=\"t('settings', 'Loading app list')\">\n\t\t\t<template #icon>\n\t\t\t\t<NcLoadingIcon :size=\"64\" />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\t\t<AppList v-else :category=\"currentCategory\" />\n\t</NcAppContent>\n</template>\n\n<script setup lang=\"ts\">\nimport { translate as t } from '@nextcloud/l10n'\nimport { computed, getCurrentInstance, onBeforeMount, watchEffect } from 'vue'\nimport { useRoute } from 'vue-router/composables'\n\nimport { useAppsStore } from '../store/apps-store'\nimport { APPS_SECTION_ENUM } from '../constants/AppsConstants'\n\nimport NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent.js'\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\nimport AppList from '../components/AppList.vue'\nimport AppStoreDiscoverSection from '../components/AppStoreDiscover/AppStoreDiscoverSection.vue'\n\nconst route = useRoute()\nconst store = useAppsStore()\n\n/**\n * ID of the current active category, default is `discover`\n */\nconst currentCategory = computed(() => route.params?.category ?? 'discover')\n\nconst appStoreLabel = t('settings', 'App Store')\nconst viewLabel = computed(() => APPS_SECTION_ENUM[currentCategory.value] ?? store.getCategoryById(currentCategory.value)?.displayName ?? appStoreLabel)\n\nwatchEffect(() => {\n\twindow.document.title = `${viewLabel.value} - ${appStoreLabel} - Nextcloud`\n})\n\n// TODO this part should be migrated to pinia\nconst instance = getCurrentInstance()\n/** Is the app list loading */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isLoading = computed(() => (instance?.proxy as any).$store.getters.loading('list'))\nonBeforeMount(() => {\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t(instance?.proxy as any).$store.dispatch('getCategories', { shouldRefetchCategories: true });\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t(instance?.proxy as any).$store.dispatch('getAllApps')\n})\n<\/script>\n\n<style scoped>\n.empty-content__loading {\n\theight: 100%;\n}\n\n.app-settings-content__label {\n\tmargin-block-start: var(--app-navigation-padding);\n\tmargin-inline-start: calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2);\n\tmin-height: var(--default-clickable-area);\n\tline-height: var(--default-clickable-area);\n\tvertical-align: center;\n}\n</style>\n"],sourceRoot:""}]);const r=o},23921:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,"\n/* The categories-loading indicator */\n.categories--loading[data-v-d15221f2] {\n\tflex: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n","",{version:3,sources:["webpack://./apps/settings/src/views/AppStoreNavigation.vue"],names:[],mappings:";AAsIA,qCAAA;AACA;CACA,OAAA;CACA,aAAA;CACA,mBAAA;CACA,uBAAA;AACA",sourcesContent:['<template>\n\t\x3c!-- Categories & filters --\x3e\n\t<NcAppNavigation :aria-label="t(\'settings\', \'Apps\')">\n\t\t<template #list>\n\t\t\t<NcAppNavigationItem id="app-category-discover"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'discover\'} }"\n\t\t\t\t:name="APPS_SECTION_ENUM.discover">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.discover" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\t\t\t<NcAppNavigationItem id="app-category-installed"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'installed\'} }"\n\t\t\t\t:name="APPS_SECTION_ENUM.installed">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.installed" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\t\t\t<NcAppNavigationItem id="app-category-enabled"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'enabled\' } }"\n\t\t\t\t:name="APPS_SECTION_ENUM.enabled">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.enabled" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\t\t\t<NcAppNavigationItem id="app-category-disabled"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'disabled\' } }"\n\t\t\t\t:name="APPS_SECTION_ENUM.disabled">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.disabled" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\t\t\t<NcAppNavigationItem v-if="updateCount > 0"\n\t\t\t\tid="app-category-updates"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'updates\' } }"\n\t\t\t\t:name="APPS_SECTION_ENUM.updates">\n\t\t\t\t<template #counter>\n\t\t\t\t\t<NcCounterBubble>{{ updateCount }}</NcCounterBubble>\n\t\t\t\t</template>\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.updates" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\t\t\t<NcAppNavigationItem id="app-category-your-bundles"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'app-bundles\' } }"\n\t\t\t\t:name="APPS_SECTION_ENUM[\'app-bundles\']">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.bundles" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\n\t\t\t<NcAppNavigationSpacer />\n\n\t\t\t\x3c!-- App store categories --\x3e\n\t\t\t<li v-if="appstoreEnabled && categoriesLoading" class="categories--loading">\n\t\t\t\t<NcLoadingIcon :size="20" :aria-label="t(\'settings\', \'Loading categories\')" />\n\t\t\t</li>\n\t\t\t<template v-else-if="appstoreEnabled && !categoriesLoading">\n\t\t\t\t<NcAppNavigationItem v-if="isSubscribed"\n\t\t\t\t\tid="app-category-supported"\n\t\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'supported\' } }"\n\t\t\t\t\t:name="APPS_SECTION_ENUM.supported">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.supported" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t\t<NcAppNavigationItem id="app-category-featured"\n\t\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'featured\' } }"\n\t\t\t\t\t:name="APPS_SECTION_ENUM.featured">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.featured" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcAppNavigationItem>\n\n\t\t\t\t<NcAppNavigationItem v-for="category in categories"\n\t\t\t\t\t:id="`app-category-${category.id}`"\n\t\t\t\t\t:key="category.id"\n\t\t\t\t\t:name="category.displayName"\n\t\t\t\t\t:to="{\n\t\t\t\t\t\tname: \'apps-category\',\n\t\t\t\t\t\tparams: { category: category.id },\n\t\t\t\t\t}">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path="category.icon" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t</template>\n\n\t\t\t<NcAppNavigationItem id="app-developer-docs"\n\t\t\t\t:name="t(\'settings\', \'Developer documentation ↗\')"\n\t\t\t\t:href="developerDocsUrl" />\n\t\t</template>\n\t</NcAppNavigation>\n</template>\n\n<script setup lang="ts">\nimport { loadState } from \'@nextcloud/initial-state\'\nimport { translate as t } from \'@nextcloud/l10n\'\nimport { computed, onBeforeMount } from \'vue\'\nimport { APPS_SECTION_ENUM } from \'../constants/AppsConstants\'\nimport { useAppsStore } from \'../store/apps-store\'\n\nimport NcAppNavigation from \'@nextcloud/vue/dist/Components/NcAppNavigation.js\'\nimport NcAppNavigationItem from \'@nextcloud/vue/dist/Components/NcAppNavigationItem.js\'\nimport NcAppNavigationSpacer from \'@nextcloud/vue/dist/Components/NcAppNavigationSpacer.js\'\nimport NcCounterBubble from \'@nextcloud/vue/dist/Components/NcCounterBubble.js\'\nimport NcIconSvgWrapper from \'@nextcloud/vue/dist/Components/NcIconSvgWrapper.js\'\nimport NcLoadingIcon from \'@nextcloud/vue/dist/Components/NcLoadingIcon.js\'\n\nimport APPSTORE_CATEGORY_ICONS from \'../constants/AppstoreCategoryIcons.ts\'\n\nconst updateCount = loadState<number>(\'settings\', \'appstoreUpdateCount\', 0)\nconst appstoreEnabled = loadState<boolean>(\'settings\', \'appstoreEnabled\', true)\nconst developerDocsUrl = loadState<string>(\'settings\', \'appstoreDeveloperDocs\', \'\')\n\nconst store = useAppsStore()\nconst categories = computed(() => store.categories)\nconst categoriesLoading = computed(() => store.loading.categories)\n\n/**\n * Check if the current instance has a support subscription from the Nextcloud GmbH\n *\n * For customers of the Nextcloud GmbH the app level will be set to `300` for apps that are supported in their subscription\n */\nconst isSubscribed = computed(() => store.apps.find(({ level }) => level === 300) !== undefined)\n\n// load categories when component is mounted\nonBeforeMount(() => {\n\tstore.loadCategories()\n\tstore.loadApps()\n})\n<\/script>\n\n<style scoped>\n/* The categories-loading indicator */\n.categories--loading {\n\tflex: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n</style>\n'],sourceRoot:""}]);const r=o},63358:(t,e,a)=>{a.d(e,{A:()=>y});var n=a(85471),s=a(6695),i=a(9165),o=a(53334);const r=(0,n.pM)({__name:"AppLevelBadge",props:{level:null},setup(t){const e=t,a=(0,n.EW)((()=>300===e.level)),r=(0,n.EW)((()=>200===e.level)),p=(0,n.EW)((()=>a.value?i.Yk:i.Tfj)),l=(0,n.EW)((()=>a.value?(0,o.Tl)("settings","Supported"):(0,o.Tl)("settings","Featured"))),c=(0,n.EW)((()=>a.value?(0,o.Tl)("settings","This app is supported via your current Nextcloud subscription."):(0,o.Tl)("settings","Featured apps are developed by and within the community. They offer central functionality and are ready for production use.")));return{__sfc:!0,props:e,isSupported:a,isFeatured:r,badgeIcon:p,badgeText:l,badgeTitle:c,NcIconSvgWrapper:s.A}}});var p=a(85072),l=a.n(p),c=a(97825),d=a.n(c),A=a(77659),u=a.n(A),g=a(55056),v=a.n(g),m=a(10540),h=a.n(m),C=a(41113),b=a.n(C),f=a(30993),_={};_.styleTagTransform=b(),_.setAttributes=v(),_.insert=u().bind(null,"head"),_.domAPI=d(),_.insertStyleElement=h(),l()(f.A,_),f.A&&f.A.locals&&f.A.locals;const y=(0,a(14486).A)(r,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return a.isSupported||a.isFeatured?e("span",{staticClass:"app-level-badge",class:{"app-level-badge--supported":a.isSupported},attrs:{title:a.badgeTitle}},[e(a.NcIconSvgWrapper,{attrs:{path:a.badgeIcon,size:20,inline:""}}),t._v("\n\t"+t._s(a.badgeText)+"\n")],1):t._e()}),[],!1,null,"3590dbeb",null).exports},15769:(t,e,a)=>{a.d(e,{A:()=>_});var n=a(6695),s=a(9165),i=a(53334);const o=(0,a(85471).pM)({name:"AppScore",components:{NcIconSvgWrapper:n.A},props:{score:{type:Number,required:!0}},setup:()=>({mdiStar:s.ZL5,mdiStarHalfFull:s.tdF,mdiStarOutline:s.dF}),computed:{title(){const t=(5*this.score).toFixed(1);return(0,i.Tl)("settings","Community rating: {score}/5",{score:t})},fullStars(){return Math.floor(5*this.score+.25)},emptyStars(){return Math.min(Math.floor(5*(1-this.score)+.25),5-this.fullStars)},hasHalfStar(){return this.fullStars+this.emptyStars<5}}});var r=a(85072),p=a.n(r),l=a(97825),c=a.n(l),d=a(77659),A=a.n(d),u=a(55056),g=a.n(u),v=a(10540),m=a.n(v),h=a(41113),C=a.n(h),b=a(20922),f={};f.styleTagTransform=C(),f.setAttributes=g(),f.insert=A().bind(null,"head"),f.domAPI=c(),f.insertStyleElement=m(),p()(b.A,f),b.A&&b.A.locals&&b.A.locals;const _=(0,a(14486).A)(o,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("span",{staticClass:"app-score__wrapper",attrs:{role:"img","aria-label":t.title,title:t.title}},[t._l(t.fullStars,(function(a){return e("NcIconSvgWrapper",{key:"full-star-".concat(a),attrs:{path:t.mdiStar,inline:""}})})),t._v(" "),t.hasHalfStar?e("NcIconSvgWrapper",{attrs:{path:t.mdiStarHalfFull,inline:""}}):t._e(),t._v(" "),t._l(t.emptyStars,(function(a){return e("NcIconSvgWrapper",{key:"empty-star-".concat(a),attrs:{path:t.mdiStarOutline,inline:""}})}))],2)}),[],!1,null,"7d015114",null).exports},83780:(e,a,n)=>{n.r(a),n.d(a,{default:()=>nt});var s=n(85471),i=n(53334),o=n(24387),r=n(846),p=n(92973),l=n(18195),c=n(10833),d=n(46222),A=n(61338),u=n(15769),g=n(63358),v=n(45834);const m={name:"SvgFilterMixin",data:()=>({filterId:""}),computed:{filterUrl(){return"url(#".concat(this.filterId,")")}},mounted(){this.filterId="invertIconApps-"+Math.random().toString(36).substring(2)}};var h=n(14486);const C=(0,h.A)(m,void 0,void 0,!1,null,null,null).exports;var b=n(9518);const f={name:"AppItem",components:{AppLevelBadge:g.A,AppScore:u.A,NcButton:b.A},mixins:[v.A,C],props:{app:{type:Object,required:!0},category:{},listView:{type:Boolean,default:!0},useBundleView:{type:Boolean,default:!1},headers:{type:String,default:null}},data:()=>({isSelected:!1,scrolled:!1,screenshotLoaded:!1}),computed:{hasRating(){return this.app.appstoreData&&this.app.appstoreData.ratingNumOverall>5},dataItemTag(){return this.listView?"td":"div"},withSidebar(){return!!this.$route.params.id}},watch:{"$route.params.id"(t){this.isSelected=this.app.id===t}},mounted(){if(this.isSelected=this.app.id===this.$route.params.id,this.app.releases&&this.app.screenshot){const t=new Image;t.onload=()=>{this.screenshotLoaded=!0},t.src=this.app.screenshot}},watchers:{},methods:{prefix:(t,e)=>t+"_"+e,getDataItemHeaders(t){return this.useBundleView?[this.headers,t].join(" "):null}}};var _=n(85072),y=n.n(_),x=n(97825),w=n.n(x),S=n(77659),N=n.n(S),k=n(55056),I=n.n(k),T=n(10540),E=n.n(T),B=n(41113),D=n.n(B),P=n(94892),L={};L.styleTagTransform=D(),L.setAttributes=I(),L.insert=N().bind(null,"head"),L.domAPI=w(),L.insertStyleElement=E(),y()(P.A,L),P.A&&P.A.locals&&P.A.locals;const O=(0,h.A)(f,(function(){var t=this,e=t._self._c;return e(t.listView?"tr":"li",{tag:"component",staticClass:"app-item",class:{"app-item--list-view":t.listView,"app-item--store-view":!t.listView,"app-item--selected":t.isSelected,"app-item--with-sidebar":t.withSidebar}},[e(t.dataItemTag,{tag:"component",staticClass:"app-image app-image-icon",attrs:{headers:t.getDataItemHeaders("app-table-col-icon")}},[t.listView&&!t.app.preview||!t.listView&&!t.screenshotLoaded?e("div",{staticClass:"icon-settings-dark"}):t.listView&&t.app.preview?e("svg",{attrs:{width:"32",height:"32",viewBox:"0 0 32 32"}},[e("image",{staticClass:"app-icon",attrs:{x:"0",y:"0",width:"32",height:"32",preserveAspectRatio:"xMinYMin meet","xlink:href":t.app.preview}})]):t._e(),t._v(" "),!t.listView&&t.app.screenshot&&t.screenshotLoaded?e("img",{attrs:{src:t.app.screenshot,alt:""}}):t._e()]),t._v(" "),e(t.dataItemTag,{tag:"component",staticClass:"app-name",attrs:{headers:t.getDataItemHeaders("app-table-col-name")}},[e("router-link",{staticClass:"app-name--link",attrs:{to:{name:"apps-details",params:{category:t.category,id:t.app.id}},"aria-label":t.t("settings","Show details for {appName} app",{appName:t.app.name})}},[t._v("\n\t\t\t"+t._s(t.app.name)+"\n\t\t")])],1),t._v(" "),t.listView?t._e():e(t.dataItemTag,{tag:"component",staticClass:"app-summary",attrs:{headers:t.getDataItemHeaders("app-version")}},[t._v("\n\t\t"+t._s(t.app.summary)+"\n\t")]),t._v(" "),t.listView?e(t.dataItemTag,{tag:"component",staticClass:"app-version",attrs:{headers:t.getDataItemHeaders("app-table-col-version")}},[t.app.version?e("span",[t._v(t._s(t.app.version))]):t.app.appstoreData.releases[0].version?e("span",[t._v(t._s(t.app.appstoreData.releases[0].version))]):t._e()]):t._e(),t._v(" "),e(t.dataItemTag,{tag:"component",staticClass:"app-level",attrs:{headers:t.getDataItemHeaders("app-table-col-level")}},[e("AppLevelBadge",{attrs:{level:t.app.level}}),t._v(" "),t.hasRating&&!t.listView?e("AppScore",{attrs:{score:t.app.score}}):t._e()],1),t._v(" "),e(t.dataItemTag,{tag:"component",staticClass:"app-actions",attrs:{headers:t.getDataItemHeaders("app-table-col-actions")}},[t.app.error?e("div",{staticClass:"warning"},[t._v("\n\t\t\t"+t._s(t.app.error)+"\n\t\t")]):t._e(),t._v(" "),t.isLoading?e("div",{staticClass:"icon icon-loading-small"}):t._e(),t._v(" "),t.app.update?e("NcButton",{attrs:{type:"primary",disabled:t.installing||t.isLoading},on:{click:function(e){return e.stopPropagation(),t.update(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Update to {update}",{update:t.app.update}))+"\n\t\t")]):t._e(),t._v(" "),t.app.canUnInstall?e("NcButton",{staticClass:"uninstall",attrs:{type:"tertiary",disabled:t.installing||t.isLoading},on:{click:function(e){return e.stopPropagation(),t.remove(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Remove"))+"\n\t\t")]):t._e(),t._v(" "),t.app.active?e("NcButton",{attrs:{disabled:t.installing||t.isLoading},on:{click:function(e){return e.stopPropagation(),t.disable(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Disable"))+"\n\t\t")]):t._e(),t._v(" "),t.app.active||!t.app.canInstall&&!t.app.isCompatible?t.app.active?t._e():e("NcButton",{attrs:{title:t.forceEnableButtonTooltip,"aria-label":t.forceEnableButtonTooltip,type:"secondary",disabled:t.installing||t.isLoading},on:{click:function(e){return e.stopPropagation(),t.forceEnable(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.forceEnableButtonText)+"\n\t\t")]):e("NcButton",{attrs:{title:t.enableButtonTooltip,"aria-label":t.enableButtonTooltip,type:"primary",disabled:!t.app.canInstall||t.installing||t.isLoading},on:{click:function(e){return e.stopPropagation(),t.enable(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.enableButtonText)+"\n\t\t")])],1)],1)}),[],!1,null,"0dbcb644",null).exports;var R=n(98959);function G(t){if(!Number.isInteger(t)&&t!==Number.POSITIVE_INFINITY||!(t>0))throw new TypeError("Expected `concurrency` to be a number from 1 and up");const e=new R.A;let a=0;const n=async(t,n,s)=>{a++;const i=(async()=>t(...s))();n(i);try{await i}catch{}a--,e.size>0&&e.dequeue()()},s=function(s){for(var i=arguments.length,o=new Array(i>1?i-1:0),r=1;r<i;r++)o[r-1]=arguments[r];return new Promise((i=>{((s,i,o)=>{e.enqueue(n.bind(void 0,s,i,o)),(async()=>{await Promise.resolve(),a<t&&e.size>0&&e.dequeue()()})()})(s,i,o)}))};return Object.defineProperties(s,{activeCount:{get:()=>a},pendingCount:{get:()=>e.size},clearQueue:{value:()=>{e.clear()}}}),s}var W=n(96763);const U={name:"AppList",components:{AppItem:O,NcButton:b.A},props:{category:{type:String,required:!0}},data:()=>({search:""}),computed:{counter(){return this.apps.filter((t=>t.update)).length},loading(){return this.$store.getters.loading("list")},hasPendingUpdate(){return this.apps.filter((t=>t.update)).length>0},showUpdateAll(){return this.hasPendingUpdate&&this.useListView},apps(){const t=this.$store.getters.getAllApps.filter((t=>-1!==t.name.toLowerCase().search(this.search.toLowerCase()))).sort((function(t,e){const a=""+(t.active?0:1)+(t.update?0:1)+t.name,n=""+(e.active?0:1)+(e.update?0:1)+e.name;return OC.Util.naturalSortCompare(a,n)}));return"installed"===this.category?t.filter((t=>t.installed)):"enabled"===this.category?t.filter((t=>t.active&&t.installed)):"disabled"===this.category?t.filter((t=>!t.active&&t.installed)):"app-bundles"===this.category?t.filter((t=>t.bundles)):"updates"===this.category?t.filter((t=>t.update)):"supported"===this.category?t.filter((t=>300===t.level)):"featured"===this.category?t.filter((t=>200===t.level)):t.filter((t=>t.appstore&&void 0!==t.category&&(t.category===this.category||t.category.indexOf(this.category)>-1)))},bundles(){return this.$store.getters.getAppBundles.filter((t=>this.bundleApps(t.id).length>0))},bundleApps:()=>function(t){return this.$store.getters.getAllApps.filter((e=>void 0!==e.bundleIds&&e.bundleIds.includes(t)))},searchApps(){return""===this.search?[]:this.$store.getters.getAllApps.filter((t=>-1!==t.name.toLowerCase().search(this.search.toLowerCase())&&!this.apps.find((e=>e.id===t.id))))},useAppStoreView(){return!this.useListView&&!this.useBundleView},useListView(){return"installed"===this.category||"enabled"===this.category||"disabled"===this.category||"updates"===this.category||"featured"===this.category||"supported"===this.category},useBundleView(){return"app-bundles"===this.category},allBundlesEnabled(){return t=>0===this.bundleApps(t).filter((t=>!t.active)).length},bundleToggleText(){return e=>this.allBundlesEnabled(e)?t("settings","Disable all"):t("settings","Download and enable all")}},beforeDestroy(){(0,A.al)("nextcloud:unified-search.search",this.setSearch),(0,A.al)("nextcloud:unified-search.reset",this.resetSearch)},mounted(){(0,A.B1)("nextcloud:unified-search.search",this.setSearch),(0,A.B1)("nextcloud:unified-search.reset",this.resetSearch)},methods:{setSearch(t){let{query:e}=t;this.search=e},resetSearch(){this.search=""},toggleBundle(t){return this.allBundlesEnabled(t)?this.disableBundle(t):this.enableBundle(t)},enableBundle(t){const e=this.bundleApps(t).map((t=>t.id));this.$store.dispatch("enableApp",{appId:e,groups:[]}).catch((t=>{W.error(t),OC.Notification.show(t)}))},disableBundle(t){const e=this.bundleApps(t).map((t=>t.id));this.$store.dispatch("disableApp",{appId:e,groups:[]}).catch((t=>{OC.Notification.show(t)}))},updateAll(){const t=G(1);this.apps.filter((t=>t.update)).map((e=>t((()=>this.$store.dispatch("updateApp",{appId:e.id})))))}}};var M=n(94025),F={};F.styleTagTransform=D(),F.setAttributes=I(),F.insert=N().bind(null,"head"),F.domAPI=w(),F.insertStyleElement=E(),y()(M.A,F),M.A&&M.A.locals&&M.A.locals;const Y=(0,h.A)(U,(function(){var t=this,e=t._self._c;return e("div",{attrs:{id:"app-content-inner"}},[e("div",{staticClass:"apps-list",class:{"apps-list--list-view":t.useBundleView||t.useListView,"apps-list--store-view":t.useAppStoreView},attrs:{id:"apps-list"}},[t.useListView?[t.showUpdateAll?e("div",{staticClass:"apps-list__toolbar"},[t._v("\n\t\t\t\t"+t._s(t.n("settings","%n app has an update available","%n apps have an update available",t.counter))+"\n\t\t\t\t"),t.showUpdateAll?e("NcButton",{attrs:{id:"app-list-update-all",type:"primary"},on:{click:t.updateAll}},[t._v("\n\t\t\t\t\t"+t._s(t.n("settings","Update","Update all",t.counter))+"\n\t\t\t\t")]):t._e()],1):t._e(),t._v(" "),t.showUpdateAll?t._e():e("div",{staticClass:"apps-list__toolbar"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","All apps are up-to-date."))+"\n\t\t\t")]),t._v(" "),e("TransitionGroup",{staticClass:"apps-list__list-container",attrs:{name:"apps-list",tag:"table"}},[e("tr",{key:"app-list-view-header"},[e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Icon")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Name")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Version")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Level")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Actions")))])])]),t._v(" "),t._l(t.apps,(function(a){return e("AppItem",{key:a.id,attrs:{app:a,category:t.category}})}))],2)]:t._e(),t._v(" "),t.useBundleView?e("table",{staticClass:"apps-list__list-container"},[e("tr",{key:"app-list-view-header"},[e("th",{attrs:{id:"app-table-col-icon"}},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Icon")))])]),t._v(" "),e("th",{attrs:{id:"app-table-col-name"}},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Name")))])]),t._v(" "),e("th",{attrs:{id:"app-table-col-version"}},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Version")))])]),t._v(" "),e("th",{attrs:{id:"app-table-col-level"}},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Level")))])]),t._v(" "),e("th",{attrs:{id:"app-table-col-actions"}},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Actions")))])])]),t._v(" "),t._l(t.bundles,(function(a){return[e("tr",{key:a.id},[e("th",{attrs:{id:"app-table-rowgroup-".concat(a.id),colspan:"5",scope:"rowgroup"}},[e("div",{staticClass:"apps-list__bundle-heading"},[e("span",{staticClass:"apps-list__bundle-header"},[t._v("\n\t\t\t\t\t\t\t\t"+t._s(a.name)+"\n\t\t\t\t\t\t\t")]),t._v(" "),e("NcButton",{attrs:{type:"secondary"},on:{click:function(e){return t.toggleBundle(a.id)}}},[t._v("\n\t\t\t\t\t\t\t\t"+t._s(t.t("settings",t.bundleToggleText(a.id)))+"\n\t\t\t\t\t\t\t")])],1)])]),t._v(" "),t._l(t.bundleApps(a.id),(function(n){return e("AppItem",{key:a.id+n.id,attrs:{"use-bundle-view":!0,headers:"app-table-rowgroup-".concat(a.id),app:n,category:t.category}})}))]}))],2):t._e(),t._v(" "),t.useAppStoreView?e("ul",{staticClass:"apps-list__store-container"},t._l(t.apps,(function(a){return e("AppItem",{key:a.id,attrs:{app:a,category:t.category,"list-view":!1}})})),1):t._e()],2),t._v(" "),e("div",{staticClass:"apps-list apps-list--list-view",attrs:{id:"apps-list-search"}},[e("div",{staticClass:"apps-list__list-container"},[""!==t.search&&t.searchApps.length>0?e("table",{staticClass:"apps-list__list-container"},[e("caption",{staticClass:"apps-list__bundle-header"},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Results from other categories"))+"\n\t\t\t\t")]),t._v(" "),e("tr",{key:"app-list-view-header"},[e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Icon")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Name")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Version")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Level")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Actions")))])])]),t._v(" "),t._l(t.searchApps,(function(a){return e("AppItem",{key:a.id,attrs:{app:a,category:t.category}})}))],2):t._e()])]),t._v(" "),""===t.search||t.loading||0!==t.searchApps.length||0!==t.apps.length?t._e():e("div",{staticClass:"emptycontent emptycontent-search",attrs:{id:"apps-list-empty"}},[e("div",{staticClass:"icon-settings-dark",attrs:{id:"app-list-empty-icon"}}),t._v(" "),e("h2",[t._v(t._s(t.t("settings","No apps found for your version")))])])])}),[],!1,null,"73184220",null).exports;var z=n(9165),$=n(85168),V=n(99498),q=n(26287),H=n(6695),j=n(36620);const K=t=>{var e;const a={...t};if(a.date&&(a.date=Date.parse(a.date)),a.expiryDate&&(a.expiryDate=Date.parse(a.expiryDate)),"post"===a.type)return a;if("showcase"===a.type)return a;if("carousel"===a.type)return a;throw new Error("Invalid argument, app discover element with type ".concat(null!==(e=t.type)&&void 0!==e?e:"unknown"," is unknown"))},Q=(0,s.pM)({__name:"AppStoreDiscoverSection",setup(t){const e=(0,s.$V)((()=>n.e(9923).then(n.bind(n,99923)))),a=(0,s.$V)((()=>n.e(3865).then(n.bind(n,73865)))),o=(0,s.KR)(!1),r=(0,s.KR)([]),p=t=>{for(let e=t.length-1;e>0;e--){const a=Math.floor(Math.random()*(e+1));[t[e],t[a]]=[t[a],t[e]]}return t};return(0,s.KC)((async()=>{try{const{data:t}=await q.A.get((0,V.Jv)("/settings/api/apps/discover")),e=t.map(K);r.value=p(e)}catch(t){o.value=!0,j.A.error(t),(0,$.Qg)((0,i.Tl)("settings","Could not load app discover section"))}})),{__sfc:!0,PostType:e,CarouselType:a,hasError:o,elements:r,shuffleArray:p,getComponent:t=>"post"===t?e:"carousel"===t?a:(0,s.pM)({mounted:()=>j.A.error("Unknown component requested ",t),render:t=>t("div",(0,i.Tl)("settings","Could not render element"))}),mdiEyeOff:z.Bk0,t:i.Tl,NcEmptyContent:c.A,NcIconSvgWrapper:H.A,NcLoadingIcon:d.A}}});var J=n(84260),Z={};Z.styleTagTransform=D(),Z.setAttributes=I(),Z.insert=N().bind(null,"head"),Z.domAPI=w(),Z.insertStyleElement=E(),y()(J.A,Z),J.A&&J.A.locals&&J.A.locals;const X=(0,h.A)(Q,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return e("div",{staticClass:"app-discover"},[a.hasError?e(a.NcEmptyContent,{attrs:{name:a.t("settings","Nothing to show"),description:a.t("settings","Could not load section content from app store.")},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.mdiEyeOff,size:64}})]},proxy:!0}],null,!1,638098482)}):0===a.elements.length?e(a.NcEmptyContent,{attrs:{name:a.t("settings","Loading"),description:a.t("settings","Fetching the latest news…")},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcLoadingIcon,{attrs:{size:64}})]},proxy:!0}])}):t._l(a.elements,(function(n,s){var i;return e(a.getComponent(n.type),t._b({key:null!==(i=n.id)&&void 0!==i?i:s,tag:"component"},"component",n,!1))}))],2)}),[],!1,null,"262838ca",null).exports,tt=(0,s.pM)({__name:"AppStore",setup(t){const e=(0,o.lq)(),a=(0,r.T)(),n=(0,s.EW)((()=>{var t,a;return null!==(t=null===(a=e.params)||void 0===a?void 0:a.category)&&void 0!==t?t:"discover"})),A=(0,i.Tl)("settings","App Store"),u=(0,s.EW)((()=>{var t,e,s;return null!==(t=null!==(e=p.l[n.value])&&void 0!==e?e:null===(s=a.getCategoryById(n.value))||void 0===s?void 0:s.displayName)&&void 0!==t?t:A}));(0,s.nT)((()=>{window.document.title="".concat(u.value," - ").concat(A," - Nextcloud")}));const g=(0,s.nI)(),v=(0,s.EW)((()=>(null==g?void 0:g.proxy).$store.getters.loading("list")));return(0,s.KC)((()=>{(null==g?void 0:g.proxy).$store.dispatch("getCategories",{shouldRefetchCategories:!0}),(null==g?void 0:g.proxy).$store.dispatch("getAllApps")})),{__sfc:!0,route:e,store:a,currentCategory:n,appStoreLabel:A,viewLabel:u,instance:g,isLoading:v,t:i.Tl,NcAppContent:l.A,NcEmptyContent:c.A,NcLoadingIcon:d.A,AppList:Y,AppStoreDiscoverSection:X}}});var et=n(34707),at={};at.styleTagTransform=D(),at.setAttributes=I(),at.insert=N().bind(null,"head"),at.domAPI=w(),at.insertStyleElement=E(),y()(et.A,at),et.A&&et.A.locals&&et.A.locals;const nt=(0,h.A)(tt,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return e(a.NcAppContent,{staticClass:"app-settings-content",attrs:{"page-heading":a.appStoreLabel}},[e("h2",{staticClass:"app-settings-content__label",domProps:{textContent:t._s(a.viewLabel)}}),t._v(" "),"discover"===a.currentCategory?e(a.AppStoreDiscoverSection):a.isLoading?e(a.NcEmptyContent,{staticClass:"empty-content__loading",attrs:{name:a.t("settings","Loading app list")},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcLoadingIcon,{attrs:{size:64}})]},proxy:!0}])}):e(a.AppList,{attrs:{category:a.currentCategory}})],1)}),[],!1,null,"a75d4530",null).exports},12336:(t,e,a)=>{a.r(e),a.d(e,{default:()=>E});var n=a(85471),s=a(38613),i=a(53334),o=a(92973),r=a(846),p=a(42530),l=a(52439),c=a(14645),d=a(70563),A=a(6695),u=a(46222),g=a(86438);const v=(0,n.pM)({__name:"AppStoreNavigation",setup(t){const e=(0,s.C)("settings","appstoreUpdateCount",0),a=(0,s.C)("settings","appstoreEnabled",!0),v=(0,s.C)("settings","appstoreDeveloperDocs",""),m=(0,r.T)(),h=(0,n.EW)((()=>m.categories)),C=(0,n.EW)((()=>m.loading.categories)),b=(0,n.EW)((()=>void 0!==m.apps.find((t=>{let{level:e}=t;return 300===e}))));return(0,n.KC)((()=>{m.loadCategories(),m.loadApps()})),{__sfc:!0,updateCount:e,appstoreEnabled:a,developerDocsUrl:v,store:m,categories:h,categoriesLoading:C,isSubscribed:b,t:i.Tl,APPS_SECTION_ENUM:o.l,NcAppNavigation:p.A,NcAppNavigationItem:l.A,NcAppNavigationSpacer:c.A,NcCounterBubble:d.A,NcIconSvgWrapper:A.A,NcLoadingIcon:u.A,APPSTORE_CATEGORY_ICONS:g.A}}});var m=a(85072),h=a.n(m),C=a(97825),b=a.n(C),f=a(77659),_=a.n(f),y=a(55056),x=a.n(y),w=a(10540),S=a.n(w),N=a(41113),k=a.n(N),I=a(23921),T={};T.styleTagTransform=k(),T.setAttributes=x(),T.insert=_().bind(null,"head"),T.domAPI=b(),T.insertStyleElement=S(),h()(I.A,T),I.A&&I.A.locals&&I.A.locals;const E=(0,a(14486).A)(v,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return e(a.NcAppNavigation,{attrs:{"aria-label":a.t("settings","Apps")},scopedSlots:t._u([{key:"list",fn:function(){return[e(a.NcAppNavigationItem,{attrs:{id:"app-category-discover",to:{name:"apps-category",params:{category:"discover"}},name:a.APPS_SECTION_ENUM.discover},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.discover}})]},proxy:!0}])}),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-category-installed",to:{name:"apps-category",params:{category:"installed"}},name:a.APPS_SECTION_ENUM.installed},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.installed}})]},proxy:!0}])}),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-category-enabled",to:{name:"apps-category",params:{category:"enabled"}},name:a.APPS_SECTION_ENUM.enabled},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.enabled}})]},proxy:!0}])}),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-category-disabled",to:{name:"apps-category",params:{category:"disabled"}},name:a.APPS_SECTION_ENUM.disabled},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.disabled}})]},proxy:!0}])}),t._v(" "),a.updateCount>0?e(a.NcAppNavigationItem,{attrs:{id:"app-category-updates",to:{name:"apps-category",params:{category:"updates"}},name:a.APPS_SECTION_ENUM.updates},scopedSlots:t._u([{key:"counter",fn:function(){return[e(a.NcCounterBubble,[t._v(t._s(a.updateCount))])]},proxy:!0},{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.updates}})]},proxy:!0}],null,!1,2824895104)}):t._e(),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-category-your-bundles",to:{name:"apps-category",params:{category:"app-bundles"}},name:a.APPS_SECTION_ENUM["app-bundles"]},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.bundles}})]},proxy:!0}])}),t._v(" "),e(a.NcAppNavigationSpacer),t._v(" "),a.appstoreEnabled&&a.categoriesLoading?e("li",{staticClass:"categories--loading"},[e(a.NcLoadingIcon,{attrs:{size:20,"aria-label":a.t("settings","Loading categories")}})],1):a.appstoreEnabled&&!a.categoriesLoading?[a.isSubscribed?e(a.NcAppNavigationItem,{attrs:{id:"app-category-supported",to:{name:"apps-category",params:{category:"supported"}},name:a.APPS_SECTION_ENUM.supported},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.supported}})]},proxy:!0}],null,!1,613663011)}):t._e(),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-category-featured",to:{name:"apps-category",params:{category:"featured"}},name:a.APPS_SECTION_ENUM.featured},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.featured}})]},proxy:!0}])}),t._v(" "),t._l(a.categories,(function(n){return e(a.NcAppNavigationItem,{key:n.id,attrs:{id:"app-category-".concat(n.id),name:n.displayName,to:{name:"apps-category",params:{category:n.id}}},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:n.icon}})]},proxy:!0}],null,!0)})}))]:t._e(),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-developer-docs",name:a.t("settings","Developer documentation ↗"),href:a.developerDocsUrl}})]},proxy:!0}])})}),[],!1,null,"d15221f2",null).exports},83625:(e,a,n)=>{n.r(a),n.d(a,{default:()=>at});var s=n(85471),i=n(53334),o=n(24387),r=n(846),p=n(62182),l=n(6695),c=n(15769),d=n(9165),A=n(18503),u=n(60023),g=n(42838),v=n.n(g);const m={name:"Markdown",props:{text:{type:String,default:""},minHeading:{type:Number,default:1}},computed:{renderMarkdown(){const t=new u.xI.Renderer;return t.link=function(t,e,a){let n;try{n=decodeURIComponent(unescape(t)).replace(/[^\w:]/g,"").toLowerCase()}catch(t){return""}if(0!==n.indexOf("http:")&&0!==n.indexOf("https:"))return"";let s='<a href="'+t+'" rel="noreferrer noopener"';return e&&(s+=' title="'+e+'"'),s+=">"+a+"</a>",s},t.heading=(t,e)=>(e=Math.min(6,e+(this.minHeading-1)),"<h".concat(e,">").concat(t,"</h").concat(e,">")),t.image=function(t,e,a){return a||e},t.blockquote=function(t){return t},v().sanitize((0,u.xI)(this.text.trim(),{renderer:t,gfm:!1,highlight:!1,tables:!1,breaks:!1,pedantic:!1,sanitize:!0,smartLists:!0,smartypants:!1}),{SAFE_FOR_JQUERY:!0,ALLOWED_TAGS:["h1","h2","h3","h4","h5","h6","strong","p","a","ul","ol","li","em","del","blockquote"]})}}};var h=n(85072),C=n.n(h),b=n(97825),f=n.n(b),_=n(77659),y=n.n(_),x=n(55056),w=n.n(x),S=n(10540),N=n.n(S),k=n(41113),I=n.n(k),T=n(3323),E={};E.styleTagTransform=I(),E.setAttributes=w(),E.insert=y().bind(null,"head"),E.domAPI=f(),E.insertStyleElement=N(),C()(T.A,E),T.A&&T.A.locals&&T.A.locals;var B=n(14486);const D=(0,B.A)(m,(function(){var t=this;return(0,t._self._c)("div",{staticClass:"settings-markdown",domProps:{innerHTML:t._s(t.renderMarkdown)}})}),[],!1,null,"7c5c8e59",null).exports,P=(0,s.pM)({__name:"AppDescriptionTab",props:{app:null},setup:t=>({__sfc:!0,mdiTextShort:d.azb,t:i.Tl,NcAppSidebarTab:A.A,NcIconSvgWrapper:l.A,Markdown:D})});var L=n(10321),O={};O.styleTagTransform=I(),O.setAttributes=w(),O.insert=y().bind(null,"head"),O.domAPI=f(),O.insertStyleElement=N(),C()(L.A,O),L.A&&L.A.locals&&L.A.locals;const R=(0,B.A)(P,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return e(a.NcAppSidebarTab,{attrs:{id:"desc",name:a.t("settings","Description"),order:0},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.mdiTextShort}})]},proxy:!0}])},[t._v(" "),e("div",{staticClass:"app-description"},[e(a.Markdown,{attrs:{text:t.app.description,"min-heading":4}})],1)])}),[],!1,null,"fccce5ae",null).exports;var G=n(9518),W=n(4604),U=n(67607),M=n(45834),F=n(96763);const Y={name:"AppDetailsTab",components:{NcAppSidebarTab:A.A,NcButton:G.A,NcDateTime:W.A,NcIconSvgWrapper:l.A,NcSelect:U.A},mixins:[M.A],props:{app:{type:Object,required:!0}},setup:()=>({store:(0,r.T)(),mdiBug:d.xhV,mdiFeatureSearch:d.NZe,mdiStar:d.ZL5,mdiTextBox:d.n1r,mdiTooltipQuestion:d.iNF}),data:()=>({groupCheckedAppsData:!1}),computed:{lastModified(){var t,e,a;return null!==(t=(null!==(e=null===(a=this.app.appstoreData)||void 0===a?void 0:a.releases)&&void 0!==e?e:[]).map((t=>{let{lastModified:e}=t;return Date.parse(e)})).sort().at(0))&&void 0!==t?t:null},appAuthors(){if(F.warn(this.app),!this.app)return"";const t=t=>t["@value"]?t["@value"]:t;return(Array.isArray(this.app.author)?this.app.author.map(t):[t(this.app.author)]).sort(((t,e)=>t.split(" ").at(-1).localeCompare(e.split(" ").at(-1)))).join(", ")},appstoreUrl(){return"https://apps.nextcloud.com/apps/".concat(this.app.id)},externalResources(){const e=[];return this.app.internal||e.push({id:"appstore",href:this.appstoreUrl,label:t("settings","View in store")}),this.app.website&&e.push({id:"website",href:this.app.website,label:t("settings","Visit website")}),this.app.documentation&&(this.app.documentation.user&&e.push({id:"doc-user",href:this.app.documentation.user,label:t("settings","Usage documentation")}),this.app.documentation.admin&&e.push({id:"doc-admin",href:this.app.documentation.admin,label:t("settings","Admin documentation")}),this.app.documentation.developer&&e.push({id:"doc-developer",href:this.app.documentation.developer,label:t("settings","Developer documentation")})),e},appCategories(){return[this.app.category].flat().map((t=>{var e,a;return null!==(e=null===(a=this.store.getCategoryById(t))||void 0===a?void 0:a.displayName)&&void 0!==e?e:t})).join(", ")},rateAppUrl(){return"".concat(this.appstoreUrl,"#comments")},appGroups(){return this.app.groups.map((t=>({id:t,name:t})))},groups(){return this.$store.getters.getGroups.filter((t=>"disabled"!==t.id)).sort(((t,e)=>t.name.localeCompare(e.name)))}},mounted(){this.app.groups.length>0&&(this.groupCheckedAppsData=!0)}};var z=n(8007),$={};$.styleTagTransform=I(),$.setAttributes=w(),$.insert=y().bind(null,"head"),$.domAPI=f(),$.insertStyleElement=N(),C()(z.A,$),z.A&&z.A.locals&&z.A.locals;const V=(0,B.A)(Y,(function(){var t,e,a,n=this,s=n._self._c;return s("NcAppSidebarTab",{attrs:{id:"details",name:n.t("settings","Details"),order:1},scopedSlots:n._u([{key:"icon",fn:function(){return[s("NcIconSvgWrapper",{attrs:{path:n.mdiTextBox}})]},proxy:!0}])},[n._v(" "),s("div",{staticClass:"app-details"},[s("div",{staticClass:"app-details__actions"},[n.app.active&&n.canLimitToGroups(n.app)?s("div",{staticClass:"app-details__actions-groups"},[s("input",{directives:[{name:"model",rawName:"v-model",value:n.groupCheckedAppsData,expression:"groupCheckedAppsData"}],staticClass:"groups-enable__checkbox checkbox",attrs:{id:"groups_enable_".concat(n.app.id),type:"checkbox"},domProps:{value:n.app.id,checked:Array.isArray(n.groupCheckedAppsData)?n._i(n.groupCheckedAppsData,n.app.id)>-1:n.groupCheckedAppsData},on:{change:[function(t){var e=n.groupCheckedAppsData,a=t.target,s=!!a.checked;if(Array.isArray(e)){var i=n.app.id,o=n._i(e,i);a.checked?o<0&&(n.groupCheckedAppsData=e.concat([i])):o>-1&&(n.groupCheckedAppsData=e.slice(0,o).concat(e.slice(o+1)))}else n.groupCheckedAppsData=s},n.setGroupLimit]}}),n._v(" "),s("label",{attrs:{for:"groups_enable_".concat(n.app.id)}},[n._v(n._s(n.t("settings","Limit to groups")))]),n._v(" "),s("input",{staticClass:"group_select",attrs:{type:"hidden",title:n.t("settings","All"),value:""}}),n._v(" "),s("br"),n._v(" "),s("label",{attrs:{for:"limitToGroups"}},[s("span",[n._v(n._s(n.t("settings","Limit app usage to groups")))])]),n._v(" "),n.isLimitedToGroups(n.app)?s("NcSelect",{attrs:{"input-id":"limitToGroups",options:n.groups,value:n.appGroups,limit:5,label:"name",multiple:!0,"close-on-select":!1},on:{"option:selected":n.addGroupLimitation,"option:deselected":n.removeGroupLimitation,search:n.asyncFindGroup}},[s("span",{attrs:{slot:"noResult"},slot:"noResult"},[n._v(n._s(n.t("settings","No results")))])]):n._e()],1):n._e(),n._v(" "),s("div",{staticClass:"app-details__actions-manage"},[n.app.update?s("input",{staticClass:"update primary",attrs:{type:"button",value:n.t("settings","Update to {version}",{version:n.app.update}),disabled:n.installing||n.isLoading},on:{click:function(t){return n.update(n.app.id)}}}):n._e(),n._v(" "),n.app.canUnInstall?s("input",{staticClass:"uninstall",attrs:{type:"button",value:n.t("settings","Remove"),disabled:n.installing||n.isLoading},on:{click:function(t){return n.remove(n.app.id)}}}):n._e(),n._v(" "),n.app.active?s("input",{staticClass:"enable",attrs:{type:"button",value:n.t("settings","Disable"),disabled:n.installing||n.isLoading},on:{click:function(t){return n.disable(n.app.id)}}}):n._e(),n._v(" "),n.app.active||!n.app.canInstall&&!n.app.isCompatible?n.app.active||n.app.canInstall?n._e():s("input",{staticClass:"enable force",attrs:{title:n.forceEnableButtonTooltip,"aria-label":n.forceEnableButtonTooltip,type:"button",value:n.forceEnableButtonText,disabled:n.installing||n.isLoading},on:{click:function(t){return n.forceEnable(n.app.id)}}}):s("input",{staticClass:"enable primary",attrs:{title:n.enableButtonTooltip,"aria-label":n.enableButtonTooltip,type:"button",value:n.enableButtonText,disabled:!n.app.canInstall||n.installing||n.isLoading},on:{click:function(t){return n.enable(n.app.id)}}})])]),n._v(" "),s("ul",{staticClass:"app-details__dependencies"},[n.app.missingMinOwnCloudVersion?s("li",[n._v("\n\t\t\t\t"+n._s(n.t("settings","This app has no minimum Nextcloud version assigned. This will be an error in the future."))+"\n\t\t\t")]):n._e(),n._v(" "),n.app.missingMaxOwnCloudVersion?s("li",[n._v("\n\t\t\t\t"+n._s(n.t("settings","This app has no maximum Nextcloud version assigned. This will be an error in the future."))+"\n\t\t\t")]):n._e(),n._v(" "),n.app.canInstall?n._e():s("li",[n._v("\n\t\t\t\t"+n._s(n.t("settings","This app cannot be installed because the following dependencies are not fulfilled:"))+"\n\t\t\t\t"),s("ul",{staticClass:"missing-dependencies"},n._l(n.app.missingDependencies,(function(t,e){return s("li",{key:e},[n._v("\n\t\t\t\t\t\t"+n._s(t)+"\n\t\t\t\t\t")])})),0)])]),n._v(" "),n.lastModified?s("div",{staticClass:"app-details__section"},[s("h4",[n._v("\n\t\t\t\t"+n._s(n.t("settings","Latest updated"))+"\n\t\t\t")]),n._v(" "),s("NcDateTime",{attrs:{timestamp:n.lastModified}})],1):n._e(),n._v(" "),s("div",{staticClass:"app-details__section"},[s("h4",[n._v("\n\t\t\t\t"+n._s(n.t("settings","Author"))+"\n\t\t\t")]),n._v(" "),s("p",{staticClass:"app-details__authors"},[n._v("\n\t\t\t\t"+n._s(n.appAuthors)+"\n\t\t\t")])]),n._v(" "),s("div",{staticClass:"app-details__section"},[s("h4",[n._v("\n\t\t\t\t"+n._s(n.t("settings","Categories"))+"\n\t\t\t")]),n._v(" "),s("p",[n._v("\n\t\t\t\t"+n._s(n.appCategories)+"\n\t\t\t")])]),n._v(" "),n.externalResources.length>0?s("div",{staticClass:"app-details__section"},[s("h4",[n._v(n._s(n.t("settings","Resources")))]),n._v(" "),s("ul",{staticClass:"app-details__documentation",attrs:{"aria-label":n.t("settings","Documentation")}},n._l(n.externalResources,(function(t){return s("li",{key:t.id},[s("a",{staticClass:"appslink",attrs:{href:t.href,target:"_blank",rel:"noreferrer noopener"}},[n._v("\n\t\t\t\t\t\t"+n._s(t.label)+" ↗\n\t\t\t\t\t")])])})),0)]):n._e(),n._v(" "),s("div",{staticClass:"app-details__section"},[s("h4",[n._v(n._s(n.t("settings","Interact")))]),n._v(" "),s("div",{staticClass:"app-details__interact"},[s("NcButton",{attrs:{disabled:!n.app.bugs,href:null!==(t=n.app.bugs)&&void 0!==t?t:"#","aria-label":n.t("settings","Report a bug"),title:n.t("settings","Report a bug")},scopedSlots:n._u([{key:"icon",fn:function(){return[s("NcIconSvgWrapper",{attrs:{path:n.mdiBug}})]},proxy:!0}])}),n._v(" "),s("NcButton",{attrs:{disabled:!n.app.bugs,href:null!==(e=n.app.bugs)&&void 0!==e?e:"#","aria-label":n.t("settings","Request feature"),title:n.t("settings","Request feature")},scopedSlots:n._u([{key:"icon",fn:function(){return[s("NcIconSvgWrapper",{attrs:{path:n.mdiFeatureSearch}})]},proxy:!0}])}),n._v(" "),null!==(a=n.app.appstoreData)&&void 0!==a&&a.discussion?s("NcButton",{attrs:{href:n.app.appstoreData.discussion,"aria-label":n.t("settings","Ask questions or discuss"),title:n.t("settings","Ask questions or discuss")},scopedSlots:n._u([{key:"icon",fn:function(){return[s("NcIconSvgWrapper",{attrs:{path:n.mdiTooltipQuestion}})]},proxy:!0}],null,!1,1288192462)}):n._e(),n._v(" "),n.app.internal?n._e():s("NcButton",{attrs:{href:n.rateAppUrl,"aria-label":n.t("settings","Rate the app"),title:n.t("settings","Rate")},scopedSlots:n._u([{key:"icon",fn:function(){return[s("NcIconSvgWrapper",{attrs:{path:n.mdiStar}})]},proxy:!0}],null,!1,422450625)})],1)])])])}),[],!1,null,"24864562",null).exports,q=(0,s.pM)({__name:"AppReleasesTab",props:{app:null},setup(t){const e=t,a=(0,s.EW)((()=>{var t,a;return Object.values(null!==(t=null===(a=e.app.releases)||void 0===a||null===(a=a[0])||void 0===a?void 0:a.translations)&&void 0!==t?t:{}).some((t=>{let{changelog:e}=t;return!!e}))}));return{__sfc:!0,props:e,hasChangelog:a,createChangelogFromRelease:t=>{var e,a,n,s;return null!==(e=null!==(a=null===(n=t.translations)||void 0===n||null===(n=n[(0,i.Z0)()])||void 0===n?void 0:n.changelog)&&void 0!==a?a:null===(s=t.translations)||void 0===s||null===(s=s.en)||void 0===s?void 0:s.changelog)&&void 0!==e?e:""},mdiClockFast:d.NWU,t:i.Tl,NcAppSidebarTab:A.A,NcIconSvgWrapper:l.A,Markdown:D}}});var H=n(99992),j={};j.styleTagTransform=I(),j.setAttributes=w(),j.insert=y().bind(null,"head"),j.domAPI=f(),j.insertStyleElement=N(),C()(H.A,j),H.A&&H.A.locals&&H.A.locals;const K=(0,B.A)(q,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return a.hasChangelog?e(a.NcAppSidebarTab,{attrs:{id:"changelog",name:a.t("settings","Changelog"),order:2},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.mdiClockFast,size:24}})]},proxy:!0}],null,!1,1849836872)},[t._v(" "),t._l(t.app.releases,(function(n){return e("div",{key:n.version,staticClass:"app-sidebar-tabs__release"},[e("h2",[t._v(t._s(n.version))]),t._v(" "),e(a.Markdown,{staticClass:"app-sidebar-tabs__release-text",attrs:{text:a.createChangelogFromRelease(n)}})],1)}))],2):t._e()}),[],!1,null,"2261a93d",null).exports;var Q=n(63358),J=n(86438),Z=n(36620);const X=(0,s.pM)({__name:"AppStoreSidebar",setup(t){const e=(0,o.lq)(),a=(0,o.rd)(),n=(0,r.T)(),A=(0,s.EW)((()=>{var t;return null!==(t=e.params.id)&&void 0!==t?t:""})),u=(0,s.EW)((()=>n.getAppById(A.value))),g=(0,s.EW)((()=>{var t;return(null===(t=u.value.appstoreData)||void 0===t?void 0:t.ratingNumOverall)>5})),v=(0,s.EW)((()=>{var t,e,a;return(null===(t=u.value.appstoreData)||void 0===t?void 0:t.ratingNumRecent)>5?u.value.appstoreData.ratingRecent:null!==(e=null===(a=u.value.appstoreData)||void 0===a?void 0:a.ratingOverall)&&void 0!==e?e:.5})),m=(0,s.EW)((()=>null!==u.value)),{appIcon:h}=function(t){const e=(0,s.KR)(null),a=(0,s.EW)((()=>{var e,a,n;const s=null!==(e=[null!==(a=null===(n=t.value)||void 0===n?void 0:n.category)&&void 0!==a?a:[]].flat().map((t=>J.A[t])).filter((t=>!!t)).at(0))&&void 0!==e?e:d.CZ3;return s?'<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="'.concat(s,'" /></svg>'):null}));return(0,s.nT)((async()=>{var n;if(null!==(n=t.value)&&void 0!==n&&n.preview){e.value=null;try{const a=await window.fetch(t.value.preview),n=await a.blob(),s=await n.text();e.value=s.replaceAll(/fill="#(fff|ffffff)([a-z0-9]{1,2})?"/gi,'fill="currentColor"')}catch(t){e.value=a.value,Z.A.error("Could not load app icon",{error:t})}}else e.value=a.value})),{appIcon:e}}(u),C=(0,s.EW)((()=>u.value?(0,i.Tl)("settings","Version {version}, {license}-licensed",{version:u.value.version,license:u.value.licence.toString().toUpperCase()}):"")),b=(0,s.KR)("details");(0,s.wB)([u],(()=>{b.value="details"}));const f=(0,s.KR)(!1),_=(0,s.EW)((()=>{var t;return(null===(t=u.value)||void 0===t?void 0:t.screenshot)&&f.value})),y=()=>{var t,e;if(null!==(t=u.value)&&void 0!==t&&t.releases&&null!==(e=u.value)&&void 0!==e&&e.screenshot){const t=new Image;t.onload=()=>{f.value=!0},t.src=u.value.screenshot}};return(0,s.wB)([u],y),(0,s.sV)(y),{__sfc:!0,route:e,router:a,store:n,appId:A,app:u,hasRating:g,rating:v,showSidebar:m,appIcon:h,licenseText:C,activeTab:b,hideAppDetails:()=>{a.push({name:"apps-category",params:{category:e.params.category}})},screenshotLoaded:f,hasScreenshot:_,loadScreenshot:y,NcAppSidebar:p.N,NcIconSvgWrapper:l.A,AppScore:c.A,AppDescriptionTab:R,AppDetailsTab:V,AppReleasesTab:K,AppLevelBadge:Q.A}}});var tt=n(47275),et={};et.styleTagTransform=I(),et.setAttributes=w(),et.insert=y().bind(null,"head"),et.domAPI=f(),et.insertStyleElement=N(),C()(tt.A,et),tt.A&&tt.A.locals&&tt.A.locals;const at=(0,B.A)(X,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return a.showSidebar?e(a.NcAppSidebar,{staticClass:"app-sidebar",class:{"app-sidebar--with-screenshot":a.hasScreenshot},attrs:{active:a.activeTab,background:a.hasScreenshot?a.app.screenshot:void 0,compact:!a.hasScreenshot,name:a.app.name,title:a.app.name,subname:a.licenseText,subtitle:a.licenseText},on:{"update:active":function(t){a.activeTab=t},close:a.hideAppDetails},scopedSlots:t._u([a.hasScreenshot?null:{key:"header",fn:function(){var t;return[e(a.NcIconSvgWrapper,{staticClass:"app-sidebar__fallback-icon",attrs:{svg:null!==(t=a.appIcon)&&void 0!==t?t:"",size:64}})]},proxy:!0},{key:"description",fn:function(){return[e("div",{staticClass:"app-sidebar__badges"},[e(a.AppLevelBadge,{attrs:{level:a.app.level}}),t._v(" "),a.hasRating?e(a.AppScore,{attrs:{score:a.rating}}):t._e()],1)]},proxy:!0}],null,!0)},[t._v(" "),t._v(" "),e(a.AppDescriptionTab,{attrs:{app:a.app}}),t._v(" "),e(a.AppDetailsTab,{attrs:{app:a.app}}),t._v(" "),e(a.AppReleasesTab,{attrs:{app:a.app}})],1):t._e()}),[],!1,null,"31ecb666",null).exports}}]);
-//# sourceMappingURL=settings-apps-view-4529.js.map?v=cbb831939e1ecf715716 \ No newline at end of file
+"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[4529],{92973:(t,e,a)=>{a.d(e,{l:()=>s});var n=a(53334);const s=Object.freeze({discover:(0,n.Tl)("settings","Discover"),installed:(0,n.Tl)("settings","Your apps"),enabled:(0,n.Tl)("settings","Active apps"),disabled:(0,n.Tl)("settings","Disabled apps"),updates:(0,n.Tl)("settings","Updates"),"app-bundles":(0,n.Tl)("settings","App bundles"),featured:(0,n.Tl)("settings","Featured apps"),supported:(0,n.Tl)("settings","Supported apps")})},45834:(e,a,n)=>{n.d(a,{A:()=>l});var s=n(85168),i=n(26287),o=n(99498),r=n(61338);const p=()=>i.A.get((0,o.KT)("core/navigation",2)+"/apps?format=json").then((t=>{let{data:e}=t;200===e.ocs.meta.statuscode&&((0,r.Ic)("nextcloud:app-menu.refresh",{apps:e.ocs.data}),window.dispatchEvent(new Event("resize")))})),l={computed:{appGroups(){return this.app.groups.map((t=>({id:t,name:t})))},installing(){return this.$store.getters.loading("install")},isLoading(){return this.app&&this.$store.getters.loading(this.app.id)},enableButtonText(){return this.app.needsDownload?t("settings","Download and enable"):t("settings","Enable")},forceEnableButtonText(){return this.app.needsDownload,t("settings","Allow untested app")},enableButtonTooltip(){return this.app.needsDownload?t("settings","The app will be downloaded from the App Store"):null},forceEnableButtonTooltip(){const e=t("settings","This app is not marked as compatible with your Nextcloud version. If you continue you will still be able to install the app. Note that the app might not work as expected.");return this.app.needsDownload?e+" "+t("settings","The app will be downloaded from the App Store"):e}},data:()=>({groupCheckedAppsData:!1}),mounted(){this.app&&this.app.groups&&this.app.groups.length>0&&(this.groupCheckedAppsData=!0)},methods:{asyncFindGroup(t){return this.$store.dispatch("getGroups",{search:t,limit:5,offset:0})},isLimitedToGroups(t){return!(!this.app.groups.length&&!this.groupCheckedAppsData)},setGroupLimit(){this.groupCheckedAppsData||this.$store.dispatch("enableApp",{appId:this.app.id,groups:[]})},canLimitToGroups:t=>!(t.types&&t.types.includes("filesystem")||t.types.includes("prelogin")||t.types.includes("authentication")||t.types.includes("logging")||t.types.includes("prevent_group_restriction")),addGroupLimitation(t){const e=t.pop(),a=this.app.groups.concat([]).concat([e.id]);this.$store.dispatch("enableApp",{appId:this.app.id,groups:a})},removeGroupLimitation(t){const e=this.app.groups.concat([]),a=e.indexOf(t.id);a>-1&&e.splice(a,1),this.$store.dispatch("enableApp",{appId:this.app.id,groups:e})},forceEnable(t){this.$store.dispatch("forceEnableApp",{appId:t,groups:[]}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))},enable(t){this.$store.dispatch("enableApp",{appId:t,groups:[]}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))},disable(t){this.$store.dispatch("disableApp",{appId:t}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))},remove(t){this.$store.dispatch("uninstallApp",{appId:t}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))},install(t){this.$store.dispatch("enableApp",{appId:t}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))},update(t){this.$store.dispatch("updateApp",{appId:t}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))}}}},86438:(t,e,a)=>{a.d(e,{A:()=>s});var n=a(9165);const s=Object.freeze({discover:n.tZc,installed:n.Gbn,enabled:n.Tfj,disabled:n.hyP,bundles:n.nSK,supported:n.Yk,featured:n.ZL5,updates:n.XCd,auth:n.EYN,customization:n.CZ3,dashboard:n.edW,files:n.fEr,games:n.FeJ,integration:n.bur,monitoring:n.y48,multimedia:n.WI,office:n.Ku3,organization:n.TO3,search:n.U4M,security:n.JiW,social:n.Krx,tools:n.QKT,workflow:n.Dgm})},846:(t,e,a)=>{a.d(e,{T:()=>A});var n=a(85168),s=a(38613),i=a(53334),o=a(99498),r=a(65899),p=a(26287),l=a(36620),c=a(86438);const d=()=>(0,n.Qg)((0,i.Tl)("settings","An error occurred during the request. Unable to proceed.")),A=(0,r.nY)("settings-apps",{state:()=>({apps:[],categories:[],updateCount:(0,s.C)("settings","appstoreUpdateCount",0),loading:{apps:!1,categories:!1},loadingList:!1,gettingCategoriesPromise:null}),actions:{async loadCategories(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!(this.categories.length>0)||t)try{this.loading.categories=!0;const{data:t}=await p.A.get((0,o.Jv)("settings/apps/categories"));for(const a of t){var e;a.icon=null!==(e=c.A[a.id])&&void 0!==e?e:""}this.$patch({categories:t})}catch(t){l.A.error(t),d()}finally{this.loading.categories=!1}},async loadApps(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!(this.apps.length>0)||t)try{this.loading.apps=!0;const{data:t}=await p.A.get((0,o.Jv)("settings/apps/list"));this.$patch({apps:t.apps})}catch(t){l.A.error(t),d()}finally{this.loading.apps=!1}},getCategoryById(t){var e;return null!==(e=this.categories.find((e=>{let{id:a}=e;return a===t})))&&void 0!==e?e:null},getAppById(t){var e;return null!==(e=this.apps.find((e=>{let{id:a}=e;return a===t})))&&void 0!==e?e:null}}})},94025:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".apps-list[data-v-73184220]{display:flex;flex-wrap:wrap;align-content:flex-start}.apps-list--move[data-v-73184220]{transition:transform 1s}.apps-list #app-list-update-all[data-v-73184220]{margin-left:10px}.apps-list__toolbar[data-v-73184220]{height:60px;padding:8px;padding-left:60px;width:100%;background-color:var(--color-main-background);position:sticky;top:0;z-index:1;display:flex;align-items:center}.apps-list--list-view[data-v-73184220]{margin-bottom:100px;position:relative}.apps-list__list-container[data-v-73184220]{width:100%}.apps-list__store-container[data-v-73184220]{display:flex;flex-wrap:wrap}.apps-list__bundle-heading[data-v-73184220]{display:flex;align-items:center;margin:20px 10px 20px 0}.apps-list__bundle-header[data-v-73184220]{margin:0 10px 0 50px;font-weight:bold;font-size:20px;line-height:30px;color:var(--color-text-light)}#apps-list-search .app-item h2[data-v-73184220]{margin-bottom:0}","",{version:3,sources:["webpack://./apps/settings/src/components/AppList.vue"],names:[],mappings:"AAIA,4BACC,YAAA,CACA,cAAA,CACA,wBAAA,CAGA,kCACC,uBAAA,CAGD,iDACC,gBAAA,CAGD,qCACC,WAjBe,CAkBf,WAnBgB,CAqBhB,iBApBe,CAqBf,UAAA,CACA,6CAAA,CACA,eAAA,CACA,KAAA,CACA,SAAA,CACA,YAAA,CACA,kBAAA,CAGD,uCACC,mBAAA,CAEA,iBAAA,CAGD,4CACC,UAAA,CAGD,6CACC,YAAA,CACA,cAAA,CAGD,4CACC,YAAA,CACA,kBAAA,CACA,uBAAA,CAGD,2CACC,oBAAA,CACA,gBAAA,CACA,cAAA,CACA,gBAAA,CACA,6BAAA,CAMA,gDACC,eAAA",sourcesContent:["\n$toolbar-padding: 8px;\n$toolbar-height: 44px + $toolbar-padding * 2;\n\n.apps-list {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-content: flex-start;\n\n\t// For transition group\n\t&--move {\n\t\ttransition: transform 1s;\n\t}\n\n\t#app-list-update-all {\n\t\tmargin-left: 10px;\n\t}\n\n\t&__toolbar {\n\t\theight: $toolbar-height;\n\t\tpadding: $toolbar-padding;\n\t\t// Leave room for app-navigation-toggle\n\t\tpadding-left: $toolbar-height;\n\t\twidth: 100%;\n\t\tbackground-color: var(--color-main-background);\n\t\tposition: sticky;\n\t\ttop: 0;\n\t\tz-index: 1;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\n\t&--list-view {\n\t\tmargin-bottom: 100px;\n\t\t// For positioning link overlay on rows\n\t\tposition: relative;\n\t}\n\n\t&__list-container {\n\t\twidth: 100%;\n\t}\n\n\t&__store-container {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t}\n\n\t&__bundle-heading {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmargin: 20px 10px 20px 0;\n\t}\n\n\t&__bundle-header {\n\t\tmargin: 0 10px 0 50px;\n\t\tfont-weight: bold;\n\t\tfont-size: 20px;\n\t\tline-height: 30px;\n\t\tcolor: var(--color-text-light);\n\t}\n}\n\n#apps-list-search {\n\t.app-item {\n\t\th2 {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const r=o},94892:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,'.app-item[data-v-0dbcb644]{position:relative}.app-item[data-v-0dbcb644]:hover{background-color:var(--color-background-dark)}.app-item--list-view[data-v-0dbcb644]{--app-item-padding: calc(var(--default-grid-baseline) * 2);--app-item-height: calc(var(--default-clickable-area) + var(--app-item-padding) * 2)}.app-item--list-view.app-item--selected[data-v-0dbcb644]{background-color:var(--color-background-dark)}.app-item--list-view>*[data-v-0dbcb644]{vertical-align:middle;border-bottom:1px solid var(--color-border);padding:var(--app-item-padding);height:var(--app-item-height)}.app-item--list-view .app-image[data-v-0dbcb644]{width:var(--default-clickable-area);height:auto;text-align:right}.app-item--list-view .app-image-icon svg[data-v-0dbcb644],.app-item--list-view .app-image-icon .icon-settings-dark[data-v-0dbcb644]{margin-top:5px;width:20px;height:20px;opacity:.5;background-size:cover;display:inline-block}.app-item--list-view .app-name[data-v-0dbcb644]{padding:0 var(--app-item-padding)}.app-item--list-view .app-name--link[data-v-0dbcb644]{height:var(--app-item-height);display:flex;align-items:center}.app-item--list-view .app-name--link[data-v-0dbcb644]::after{content:"";position:absolute;left:0;right:0;height:var(--app-item-height)}.app-item--list-view .app-actions[data-v-0dbcb644]{display:flex;gap:var(--app-item-padding);flex-wrap:wrap;justify-content:end}.app-item--list-view .app-actions .icon-loading-small[data-v-0dbcb644]{display:inline-block;top:4px;margin-right:10px}@media only screen and (max-width: 900px){.app-item--list-view .app-version[data-v-0dbcb644],.app-item--list-view .app-level[data-v-0dbcb644]{display:none}}@media only screen and (max-width: 512px){.app-item--list-view .app-actions[data-v-0dbcb644]{display:none}}.app-item--store-view[data-v-0dbcb644]{padding:30px}.app-item--store-view .app-image-icon .icon-settings-dark[data-v-0dbcb644]{width:100%;height:150px;background-size:45px;opacity:.5}.app-item--store-view .app-image-icon svg[data-v-0dbcb644]{position:absolute;bottom:43px;width:64px;height:64px;opacity:.1}.app-item--store-view .app-name[data-v-0dbcb644]{margin:5px 0}.app-item--store-view .app-name--link[data-v-0dbcb644]::after{content:"";position:absolute;top:0;left:0;right:0;bottom:0}.app-item--store-view .app-actions[data-v-0dbcb644]{margin:10px 0}@media only screen and (min-width: 1601px){.app-item--store-view[data-v-0dbcb644]{width:25%}.app-item--store-view.app-item--with-sidebar[data-v-0dbcb644]{width:33%}}@media only screen and (max-width: 1600px){.app-item--store-view[data-v-0dbcb644]{width:25%}.app-item--store-view.app-item--with-sidebar[data-v-0dbcb644]{width:33%}}@media only screen and (max-width: 1400px){.app-item--store-view[data-v-0dbcb644]{width:33%}.app-item--store-view.app-item--with-sidebar[data-v-0dbcb644]{width:50%}}@media only screen and (max-width: 900px){.app-item--store-view[data-v-0dbcb644]{width:50%}.app-item--store-view.app-item--with-sidebar[data-v-0dbcb644]{width:100%}}@media only screen and (max-width: 1024px){.app-item--store-view[data-v-0dbcb644]{width:50%}}@media only screen and (max-width: 480px){.app-item--store-view[data-v-0dbcb644]{width:100%}}.app-icon[data-v-0dbcb644]{filter:var(--background-invert-if-bright)}.app-image[data-v-0dbcb644]{position:relative;height:150px;opacity:1;overflow:hidden}.app-image img[data-v-0dbcb644]{width:100%}.app-version[data-v-0dbcb644]{color:var(--color-text-maxcontrast)}',"",{version:3,sources:["webpack://./apps/settings/src/components/AppList/AppItem.vue"],names:[],mappings:"AAIA,2BACC,iBAAA,CAEA,iCACC,6CAAA,CAGD,sCACC,0DAAA,CACA,oFAAA,CAEA,yDACC,6CAAA,CAGD,wCACC,qBAAA,CACA,2CAAA,CACA,+BAAA,CACA,6BAAA,CAGD,iDACC,mCAAA,CACA,WAAA,CACA,gBAAA,CAGD,oIAEC,cAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CACA,qBAAA,CACA,oBAAA,CAGD,gDACC,iCAAA,CAGD,sDACC,6BAAA,CACA,YAAA,CACA,kBAAA,CAMD,6DACC,UAAA,CACA,iBAAA,CACA,MAAA,CACA,OAAA,CACA,6BAAA,CAGD,mDACC,YAAA,CACA,2BAAA,CACA,cAAA,CACA,mBAAA,CAEA,uEACC,oBAAA,CACA,OAAA,CACA,iBAAA,CAKF,0CACC,oGAEC,YAAA,CAAA,CAKF,0CACC,mDACC,YAAA,CAAA,CAKH,uCACC,YAAA,CAEA,2EACC,UAAA,CACA,YAAA,CACA,oBAAA,CACA,UAAA,CAGD,2DACC,iBAAA,CACA,WAAA,CAEA,UAAA,CACA,WAAA,CACA,UAAA,CAGD,iDACC,YAAA,CAGD,8DACC,UAAA,CACA,iBAAA,CACA,KAAA,CACA,MAAA,CACA,OAAA,CACA,QAAA,CAGD,oDACC,aAAA,CAGD,2CApCD,uCAqCE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,2CA5CD,uCA6CE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,2CApDD,uCAqDE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,0CA5DD,uCA6DE,SAAA,CAEA,8DACC,UAAA,CAAA,CAIF,2CApED,uCAqEE,SAAA,CAAA,CAGD,0CAxED,uCAyEE,UAAA,CAAA,CAKH,2BACC,yCAAA,CAGD,4BACC,iBAAA,CACA,YAAA,CACA,SAAA,CACA,eAAA,CAEA,gCACC,UAAA,CAIF,8BACC,mCAAA",sourcesContent:["\n@use '../../../../../core/css/variables.scss' as variables;\n@use 'sass:math';\n\n.app-item {\n\tposition: relative;\n\n\t&:hover {\n\t\tbackground-color: var(--color-background-dark);\n\t}\n\n\t&--list-view {\n\t\t--app-item-padding: calc(var(--default-grid-baseline) * 2);\n\t\t--app-item-height: calc(var(--default-clickable-area) + var(--app-item-padding) * 2);\n\n\t\t&.app-item--selected {\n\t\t\tbackground-color: var(--color-background-dark);\n\t\t}\n\n\t\t> * {\n\t\t\tvertical-align: middle;\n\t\t\tborder-bottom: 1px solid var(--color-border);\n\t\t\tpadding: var(--app-item-padding);\n\t\t\theight: var(--app-item-height);\n\t\t}\n\n\t\t.app-image {\n\t\t\twidth: var(--default-clickable-area);\n\t\t\theight: auto;\n\t\t\ttext-align: right;\n\t\t}\n\n\t\t.app-image-icon svg,\n\t\t.app-image-icon .icon-settings-dark {\n\t\t\tmargin-top: 5px;\n\t\t\twidth: 20px;\n\t\t\theight: 20px;\n\t\t\topacity: .5;\n\t\t\tbackground-size: cover;\n\t\t\tdisplay: inline-block;\n\t\t}\n\n\t\t.app-name {\n\t\t\tpadding: 0 var(--app-item-padding);\n\t\t}\n\n\t\t.app-name--link {\n\t\t\theight: var(--app-item-height);\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t// Note: because of Safari bug, we cannot position link overlay relative to the table row\n\t\t// So we need to manually position it relative to the table container and cell\n\t\t// See: https://bugs.webkit.org/show_bug.cgi?id=240961\n\t\t.app-name--link::after {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\theight: var(--app-item-height);\n\t\t}\n\n\t\t.app-actions {\n\t\t\tdisplay: flex;\n\t\t\tgap: var(--app-item-padding);\n\t\t\tflex-wrap: wrap;\n\t\t\tjustify-content: end;\n\n\t\t\t.icon-loading-small {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\ttop: 4px;\n\t\t\t\tmargin-right: 10px;\n\t\t\t}\n\t\t}\n\n\t\t/* hide app version and level on narrower screens */\n\t\t@media only screen and (max-width: 900px) {\n\t\t\t.app-version,\n\t\t\t.app-level {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\n\t\t/* Hide actions on a small screen. Click on app opens fill-screen sidebar with the buttons */\n\t\t@media only screen and (max-width: math.div(variables.$breakpoint-mobile, 2)) {\n\t\t\t.app-actions {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t&--store-view {\n\t\tpadding: 30px;\n\n\t\t.app-image-icon .icon-settings-dark {\n\t\t\twidth: 100%;\n\t\t\theight: 150px;\n\t\t\tbackground-size: 45px;\n\t\t\topacity: 0.5;\n\t\t}\n\n\t\t.app-image-icon svg {\n\t\t\tposition: absolute;\n\t\t\tbottom: 43px;\n\t\t\t/* position halfway vertically */\n\t\t\twidth: 64px;\n\t\t\theight: 64px;\n\t\t\topacity: .1;\n\t\t}\n\n\t\t.app-name {\n\t\t\tmargin: 5px 0;\n\t\t}\n\n\t\t.app-name--link::after {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\tbottom: 0;\n\t\t}\n\n\t\t.app-actions {\n\t\t\tmargin: 10px 0;\n\t\t}\n\n\t\t@media only screen and (min-width: 1601px) {\n\t\t\twidth: 25%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 33%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: 1600px) {\n\t\t\twidth: 25%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 33%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: 1400px) {\n\t\t\twidth: 33%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 50%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: 900px) {\n\t\t\twidth: 50%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: variables.$breakpoint-mobile) {\n\t\t\twidth: 50%;\n\t\t}\n\n\t\t@media only screen and (max-width: 480px) {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n}\n\n.app-icon {\n\tfilter: var(--background-invert-if-bright);\n}\n\n.app-image {\n\tposition: relative;\n\theight: 150px;\n\topacity: 1;\n\toverflow: hidden;\n\n\timg {\n\t\twidth: 100%;\n\t}\n}\n\n.app-version {\n\tcolor: var(--color-text-maxcontrast);\n}\n"],sourceRoot:""}]);const r=o},30993:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".app-level-badge[data-v-3590dbeb]{color:var(--color-text-maxcontrast);background-color:rgba(0,0,0,0);border:1px solid var(--color-text-maxcontrast);border-radius:var(--border-radius);display:flex;flex-direction:row;gap:6px;padding:3px 6px;width:fit-content}.app-level-badge--supported[data-v-3590dbeb]{border-color:var(--color-success);color:var(--color-success)}","",{version:3,sources:["webpack://./apps/settings/src/components/AppList/AppLevelBadge.vue"],names:[],mappings:"AACA,kCACC,mCAAA,CACA,8BAAA,CACA,8CAAA,CACA,kCAAA,CAEA,YAAA,CACA,kBAAA,CACA,OAAA,CACA,eAAA,CACA,iBAAA,CAEA,6CACC,iCAAA,CACA,0BAAA",sourcesContent:["\n.app-level-badge {\n\tcolor: var(--color-text-maxcontrast);\n\tbackground-color: transparent;\n\tborder: 1px solid var(--color-text-maxcontrast);\n\tborder-radius: var(--border-radius);\n\n\tdisplay: flex;\n\tflex-direction: row;\n\tgap: 6px;\n\tpadding: 3px 6px;\n\twidth: fit-content;\n\n\t&--supported {\n\t\tborder-color: var(--color-success);\n\t\tcolor: var(--color-success);\n\t}\n}\n"],sourceRoot:""}]);const r=o},40916:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".app-discover[data-v-3efdd423]{max-width:1008px;margin-inline:auto;padding-inline:54px;padding-block-end:var(--default-clickable-area, 44px);display:flex;flex-direction:column;gap:var(--default-clickable-area, 44px)}","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue"],names:[],mappings:"AACA,+BACC,gBAAA,CACA,kBAAA,CACA,mBAAA,CAEA,qDAAA,CAEA,YAAA,CACA,qBAAA,CACA,uCAAA",sourcesContent:["\n.app-discover {\n\tmax-width: 1008px; /* 900px + 2x 54px padding for the carousel controls */\n\tmargin-inline: auto;\n\tpadding-inline: 54px;\n\t/* Padding required to make last element not bound to the bottom */\n\tpadding-block-end: var(--default-clickable-area, 44px);\n\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--default-clickable-area, 44px);\n}\n"],sourceRoot:""}]);const r=o},10321:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".app-description[data-v-fccce5ae]{padding:12px}","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue"],names:[],mappings:"AACA,kCACC,YAAA",sourcesContent:["\n.app-description {\n\tpadding: 12px;\n}\n"],sourceRoot:""}]);const r=o},8007:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,'.app-details[data-v-24864562]{padding:20px}.app-details__actions-manage[data-v-24864562]{display:flex}.app-details__actions-manage input[data-v-24864562]{flex:0 1 auto;min-width:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.app-details__authors[data-v-24864562]{color:var(--color-text-maxcontrast)}.app-details__section[data-v-24864562]{margin-top:15px}.app-details__section h4[data-v-24864562]{font-size:16px;font-weight:bold;margin-block-end:5px}.app-details__interact[data-v-24864562]{display:flex;flex-direction:row;flex-wrap:wrap;gap:12px}.app-details__documentation a[data-v-24864562]{text-decoration:underline}.app-details__documentation li[data-v-24864562]{padding-inline-start:20px}.app-details__documentation li[data-v-24864562]::before{width:5px;height:5px;border-radius:100%;background-color:var(--color-main-text);content:"";float:inline-start;margin-inline-start:-13px;position:relative;top:10px}.force[data-v-24864562]{color:var(--color-error);border-color:var(--color-error);background:var(--color-main-background)}.force[data-v-24864562]:hover,.force[data-v-24864562]:active{color:var(--color-main-background);border-color:var(--color-error) !important;background:var(--color-error)}.missing-dependencies[data-v-24864562]{list-style:initial;list-style-type:initial;list-style-position:inside}',"",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue"],names:[],mappings:"AACA,8BACC,YAAA,CAIC,8CAEC,YAAA,CACA,oDACC,aAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,eAAA,CAIH,uCACC,mCAAA,CAGD,uCACC,eAAA,CAEA,0CACC,cAAA,CACA,gBAAA,CACA,oBAAA,CAIF,wCACC,YAAA,CACA,kBAAA,CACA,cAAA,CACA,QAAA,CAIA,+CACC,yBAAA,CAED,gDACC,yBAAA,CAEA,wDACC,SAAA,CACA,UAAA,CACA,kBAAA,CACA,uCAAA,CACA,UAAA,CACA,kBAAA,CACA,yBAAA,CACA,iBAAA,CACA,QAAA,CAMJ,wBACC,wBAAA,CACA,+BAAA,CACA,uCAAA,CAED,6DAEC,kCAAA,CACA,0CAAA,CACA,6BAAA,CAGD,uCACC,kBAAA,CACA,uBAAA,CACA,0BAAA",sourcesContent:['\n.app-details {\n\tpadding: 20px;\n\n\t&__actions {\n\t\t// app management\n\t\t&-manage {\n\t\t\t// if too many, shrink them and ellipsis\n\t\t\tdisplay: flex;\n\t\t\tinput {\n\t\t\t\tflex: 0 1 auto;\n\t\t\t\tmin-width: 0;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\t}\n\t&__authors {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__section {\n\t\tmargin-top: 15px;\n\n\t\th4 {\n\t\t\tfont-size: 16px;\n\t\t\tfont-weight: bold;\n\t\t\tmargin-block-end: 5px;\n\t\t}\n\t}\n\n\t&__interact {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tflex-wrap: wrap;\n\t\tgap: 12px;\n\t}\n\n\t&__documentation {\n\t\ta {\n\t\t\ttext-decoration: underline;\n\t\t}\n\t\tli {\n\t\t\tpadding-inline-start: 20px;\n\n\t\t\t&::before {\n\t\t\t\twidth: 5px;\n\t\t\t\theight: 5px;\n\t\t\t\tborder-radius: 100%;\n\t\t\t\tbackground-color: var(--color-main-text);\n\t\t\t\tcontent: "";\n\t\t\t\tfloat: inline-start;\n\t\t\t\tmargin-inline-start: -13px;\n\t\t\t\tposition: relative;\n\t\t\t\ttop: 10px;\n\t\t\t}\n\t\t}\n\t}\n}\n\n.force {\n\tcolor: var(--color-error);\n\tborder-color: var(--color-error);\n\tbackground: var(--color-main-background);\n}\n.force:hover,\n.force:active {\n\tcolor: var(--color-main-background);\n\tborder-color: var(--color-error) !important;\n\tbackground: var(--color-error);\n}\n\n.missing-dependencies {\n\tlist-style: initial;\n\tlist-style-type: initial;\n\tlist-style-position: inside;\n}\n'],sourceRoot:""}]);const r=o},99992:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".app-sidebar-tabs__release h2[data-v-2261a93d]{border-bottom:1px solid var(--color-border);font-size:24px}.app-sidebar-tabs__release-text[data-v-2261a93d] h3{font-size:20px}.app-sidebar-tabs__release-text[data-v-2261a93d] h4{font-size:17px}","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue"],names:[],mappings:"AAEC,+CACC,2CAAA,CACA,cAAA,CAKA,oDACC,cAAA,CAED,oDACC,cAAA",sourcesContent:["\n.app-sidebar-tabs__release {\n\th2 {\n\t\tborder-bottom: 1px solid var(--color-border);\n\t\tfont-size: 24px;\n\t}\n\n\t&-text {\n\t\t// Overwrite changelog heading styles\n\t\t:deep(h3) {\n\t\t\tfont-size: 20px;\n\t\t}\n\t\t:deep(h4) {\n\t\t\tfont-size: 17px;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const r=o},3323:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".settings-markdown[data-v-7c5c8e59] h1,.settings-markdown[data-v-7c5c8e59] h2,.settings-markdown[data-v-7c5c8e59] h3,.settings-markdown[data-v-7c5c8e59] h4,.settings-markdown[data-v-7c5c8e59] h5,.settings-markdown[data-v-7c5c8e59] h6{font-weight:600;line-height:120%;margin-top:24px;margin-bottom:12px;color:var(--color-main-text)}.settings-markdown[data-v-7c5c8e59] h1{font-size:36px;margin-top:48px}.settings-markdown[data-v-7c5c8e59] h2{font-size:28px;margin-top:48px}.settings-markdown[data-v-7c5c8e59] h3{font-size:24px}.settings-markdown[data-v-7c5c8e59] h4{font-size:21px}.settings-markdown[data-v-7c5c8e59] h5{font-size:17px}.settings-markdown[data-v-7c5c8e59] h6{font-size:var(--default-font-size)}.settings-markdown[data-v-7c5c8e59] pre{white-space:pre;overflow-x:auto;background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:1em 1.3em;margin-bottom:1em}.settings-markdown[data-v-7c5c8e59] p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}.settings-markdown[data-v-7c5c8e59] li{position:relative}.settings-markdown[data-v-7c5c8e59] ul,.settings-markdown[data-v-7c5c8e59] ol{padding-left:10px;margin-left:10px}.settings-markdown[data-v-7c5c8e59] ul li{list-style-type:disc}.settings-markdown[data-v-7c5c8e59] ul>li>ul>li{list-style-type:circle}.settings-markdown[data-v-7c5c8e59] ul>li>ul>li ul li{list-style-type:square}.settings-markdown[data-v-7c5c8e59] blockquote{padding-left:1em;border-left:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-left:0;margin-right:0}","",{version:3,sources:["webpack://./apps/settings/src/components/Markdown.vue"],names:[],mappings:"AAGA,0OAMC,eAAA,CACA,gBAAA,CACA,eAAA,CACA,kBAAA,CACA,4BAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,kCAAA,CAGD,wCACC,eAAA,CACA,eAAA,CACA,6CAAA,CACA,kCAAA,CACA,iBAAA,CACA,iBAAA,CAGD,2CACC,6CAAA,CACA,kCAAA,CACA,iBAAA,CAGD,uCACC,iBAAA,CAGD,8EACC,iBAAA,CACA,gBAAA,CAGD,0CACC,oBAAA,CAGD,gDACC,sBAAA,CAGD,sDACC,sBAAA,CAGD,+CACC,gBAAA,CACA,kDAAA,CACA,mCAAA,CACA,aAAA,CACA,cAAA",sourcesContent:["\n.settings-markdown::v-deep {\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n\tfont-weight: 600;\n\tline-height: 120%;\n\tmargin-top: 24px;\n\tmargin-bottom: 12px;\n\tcolor: var(--color-main-text);\n}\n\nh1 {\n\tfont-size: 36px;\n\tmargin-top: 48px;\n}\n\nh2 {\n\tfont-size: 28px;\n\tmargin-top: 48px;\n}\n\nh3 {\n\tfont-size: 24px;\n}\n\nh4 {\n\tfont-size: 21px;\n}\n\nh5 {\n\tfont-size: 17px;\n}\n\nh6 {\n\tfont-size: var(--default-font-size);\n}\n\npre {\n\twhite-space: pre;\n\toverflow-x: auto;\n\tbackground-color: var(--color-background-dark);\n\tborder-radius: var(--border-radius);\n\tpadding: 1em 1.3em;\n\tmargin-bottom: 1em;\n}\n\np code {\n\tbackground-color: var(--color-background-dark);\n\tborder-radius: var(--border-radius);\n\tpadding: .1em .3em;\n}\n\nli {\n\tposition: relative;\n}\n\nul, ol {\n\tpadding-left: 10px;\n\tmargin-left: 10px;\n}\n\nul li {\n\tlist-style-type: disc;\n}\n\nul > li > ul > li {\n\tlist-style-type: circle;\n}\n\nul > li > ul > li ul li {\n\tlist-style-type: square;\n}\n\nblockquote {\n\tpadding-left: 1em;\n\tborder-left: 4px solid var(--color-primary-element);\n\tcolor: var(--color-text-maxcontrast);\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n\n}\n"],sourceRoot:""}]);const r=o},47275:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".app-sidebar--with-screenshot[data-v-31ecb666] .app-sidebar-header__figure{background-size:cover}.app-sidebar__fallback-icon[data-v-31ecb666]{width:100%;height:100%}.app-sidebar__badges[data-v-31ecb666]{display:flex;flex-direction:row;gap:12px}.app-sidebar__version[data-v-31ecb666]{color:var(--color-text-maxcontrast)}","",{version:3,sources:["webpack://./apps/settings/src/views/AppStoreSidebar.vue"],names:[],mappings:"AAIE,2EACC,qBAAA,CAIF,6CAEC,UAAA,CACA,WAAA,CAGD,sCACC,YAAA,CACA,kBAAA,CACA,QAAA,CAGD,uCACC,mCAAA",sourcesContent:["\n.app-sidebar {\n\t// If a screenshot is available it should cover the whole figure\n\t&--with-screenshot {\n\t\t:deep(.app-sidebar-header__figure) {\n\t\t\tbackground-size: cover;\n\t\t}\n\t}\n\n\t&__fallback-icon {\n\t\t// both 100% to center the icon\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n\n\t&__badges {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tgap: 12px;\n\t}\n\n\t&__version {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\n"],sourceRoot:""}]);const r=o},20922:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,"\n.app-score__wrapper[data-v-7d015114] {\n\tdisplay: inline-flex;\n\tcolor: var(--color-favorite, #a08b00);\n> *[data-v-7d015114] {\n\t\tvertical-align: text-bottom;\n}\n}\n","",{version:3,sources:["webpack://./apps/settings/src/components/AppList/AppScore.vue"],names:[],mappings:";AAiFA;CACA,oBAAA;CACA,qCAAA;AAEA;EACA,2BAAA;AACA;AACA",sourcesContent:['\x3c!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n - @author Ferdinand Thiessen <opensource@fthiessen.de>\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 --\x3e\n\n<template>\n\t<span role="img"\n\t\t:aria-label="title"\n\t\t:title="title"\n\t\tclass="app-score__wrapper">\n\t\t<NcIconSvgWrapper v-for="index in fullStars"\n\t\t\t:key="`full-star-${index}`"\n\t\t\t:path="mdiStar"\n\t\t\tinline />\n\t\t<NcIconSvgWrapper v-if="hasHalfStar" :path="mdiStarHalfFull" inline />\n\t\t<NcIconSvgWrapper v-for="index in emptyStars"\n\t\t\t:key="`empty-star-${index}`"\n\t\t\t:path="mdiStarOutline"\n\t\t\tinline />\n\t</span>\n</template>\n<script lang="ts">\nimport NcIconSvgWrapper from \'@nextcloud/vue/dist/Components/NcIconSvgWrapper.js\'\nimport { mdiStar, mdiStarHalfFull, mdiStarOutline } from \'@mdi/js\'\nimport { translate as t } from \'@nextcloud/l10n\'\nimport { defineComponent } from \'vue\'\n\nexport default defineComponent({\n\tname: \'AppScore\',\n\tcomponents: {\n\t\tNcIconSvgWrapper,\n\t},\n\tprops: {\n\t\tscore: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tsetup() {\n\t\treturn {\n\t\t\tmdiStar,\n\t\t\tmdiStarHalfFull,\n\t\t\tmdiStarOutline,\n\t\t}\n\t},\n\tcomputed: {\n\t\ttitle() {\n\t\t\tconst appScore = (this.score * 5).toFixed(1)\n\t\t\treturn t(\'settings\', \'Community rating: {score}/5\', { score: appScore })\n\t\t},\n\t\tfullStars() {\n\t\t\treturn Math.floor(this.score * 5 + 0.25)\n\t\t},\n\t\temptyStars() {\n\t\t\treturn Math.min(Math.floor((1 - this.score) * 5 + 0.25), 5 - this.fullStars)\n\t\t},\n\t\thasHalfStar() {\n\t\t\treturn (this.fullStars + this.emptyStars) < 5\n\t\t},\n\t},\n})\n<\/script>\n<style scoped>\n.app-score__wrapper {\n\tdisplay: inline-flex;\n\tcolor: var(--color-favorite, #a08b00);\n\n\t> * {\n\t\tvertical-align: text-bottom;\n\t}\n}\n</style>\n'],sourceRoot:""}]);const r=o},34707:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,"\n.empty-content__loading[data-v-a75d4530] {\n\theight: 100%;\n}\n.app-settings-content__label[data-v-a75d4530] {\n\tmargin-block-start: var(--app-navigation-padding);\n\tmargin-inline-start: calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2);\n\tmin-height: var(--default-clickable-area);\n\tline-height: var(--default-clickable-area);\n\tvertical-align: center;\n}\n","",{version:3,sources:["webpack://./apps/settings/src/views/AppStore.vue"],names:[],mappings:";AAoFA;CACA,YAAA;AACA;AAEA;CACA,iDAAA;CACA,4FAAA;CACA,yCAAA;CACA,0CAAA;CACA,sBAAA;AACA",sourcesContent:["\x3c!--\n\t- @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n\t-\n\t- @author Julius Härtl <jus@bitgrid.net>\n\t- @author Ferdinand Thiessen <opensource@fthiessen.de>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n\t--\x3e\n\n<template>\n\t\x3c!-- Apps list --\x3e\n\t<NcAppContent class=\"app-settings-content\"\n\t\t:page-heading=\"appStoreLabel\">\n\t\t<h2 class=\"app-settings-content__label\" v-text=\"viewLabel\" />\n\n\t\t<AppStoreDiscoverSection v-if=\"currentCategory === 'discover'\" />\n\t\t<NcEmptyContent v-else-if=\"isLoading\"\n\t\t\tclass=\"empty-content__loading\"\n\t\t\t:name=\"t('settings', 'Loading app list')\">\n\t\t\t<template #icon>\n\t\t\t\t<NcLoadingIcon :size=\"64\" />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\t\t<AppList v-else :category=\"currentCategory\" />\n\t</NcAppContent>\n</template>\n\n<script setup lang=\"ts\">\nimport { translate as t } from '@nextcloud/l10n'\nimport { computed, getCurrentInstance, onBeforeMount, watchEffect } from 'vue'\nimport { useRoute } from 'vue-router/composables'\n\nimport { useAppsStore } from '../store/apps-store'\nimport { APPS_SECTION_ENUM } from '../constants/AppsConstants'\n\nimport NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent.js'\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\nimport AppList from '../components/AppList.vue'\nimport AppStoreDiscoverSection from '../components/AppStoreDiscover/AppStoreDiscoverSection.vue'\n\nconst route = useRoute()\nconst store = useAppsStore()\n\n/**\n * ID of the current active category, default is `discover`\n */\nconst currentCategory = computed(() => route.params?.category ?? 'discover')\n\nconst appStoreLabel = t('settings', 'App Store')\nconst viewLabel = computed(() => APPS_SECTION_ENUM[currentCategory.value] ?? store.getCategoryById(currentCategory.value)?.displayName ?? appStoreLabel)\n\nwatchEffect(() => {\n\twindow.document.title = `${viewLabel.value} - ${appStoreLabel} - Nextcloud`\n})\n\n// TODO this part should be migrated to pinia\nconst instance = getCurrentInstance()\n/** Is the app list loading */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isLoading = computed(() => (instance?.proxy as any).$store.getters.loading('list'))\nonBeforeMount(() => {\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t(instance?.proxy as any).$store.dispatch('getCategories', { shouldRefetchCategories: true });\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t(instance?.proxy as any).$store.dispatch('getAllApps')\n})\n<\/script>\n\n<style scoped>\n.empty-content__loading {\n\theight: 100%;\n}\n\n.app-settings-content__label {\n\tmargin-block-start: var(--app-navigation-padding);\n\tmargin-inline-start: calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2);\n\tmin-height: var(--default-clickable-area);\n\tline-height: var(--default-clickable-area);\n\tvertical-align: center;\n}\n</style>\n"],sourceRoot:""}]);const r=o},23921:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,"\n/* The categories-loading indicator */\n.categories--loading[data-v-d15221f2] {\n\tflex: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n","",{version:3,sources:["webpack://./apps/settings/src/views/AppStoreNavigation.vue"],names:[],mappings:";AAsIA,qCAAA;AACA;CACA,OAAA;CACA,aAAA;CACA,mBAAA;CACA,uBAAA;AACA",sourcesContent:['<template>\n\t\x3c!-- Categories & filters --\x3e\n\t<NcAppNavigation :aria-label="t(\'settings\', \'Apps\')">\n\t\t<template #list>\n\t\t\t<NcAppNavigationItem id="app-category-discover"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'discover\'} }"\n\t\t\t\t:name="APPS_SECTION_ENUM.discover">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.discover" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\t\t\t<NcAppNavigationItem id="app-category-installed"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'installed\'} }"\n\t\t\t\t:name="APPS_SECTION_ENUM.installed">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.installed" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\t\t\t<NcAppNavigationItem id="app-category-enabled"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'enabled\' } }"\n\t\t\t\t:name="APPS_SECTION_ENUM.enabled">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.enabled" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\t\t\t<NcAppNavigationItem id="app-category-disabled"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'disabled\' } }"\n\t\t\t\t:name="APPS_SECTION_ENUM.disabled">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.disabled" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\t\t\t<NcAppNavigationItem v-if="updateCount > 0"\n\t\t\t\tid="app-category-updates"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'updates\' } }"\n\t\t\t\t:name="APPS_SECTION_ENUM.updates">\n\t\t\t\t<template #counter>\n\t\t\t\t\t<NcCounterBubble>{{ updateCount }}</NcCounterBubble>\n\t\t\t\t</template>\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.updates" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\t\t\t<NcAppNavigationItem id="app-category-your-bundles"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'app-bundles\' } }"\n\t\t\t\t:name="APPS_SECTION_ENUM[\'app-bundles\']">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.bundles" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\n\t\t\t<NcAppNavigationSpacer />\n\n\t\t\t\x3c!-- App store categories --\x3e\n\t\t\t<li v-if="appstoreEnabled && categoriesLoading" class="categories--loading">\n\t\t\t\t<NcLoadingIcon :size="20" :aria-label="t(\'settings\', \'Loading categories\')" />\n\t\t\t</li>\n\t\t\t<template v-else-if="appstoreEnabled && !categoriesLoading">\n\t\t\t\t<NcAppNavigationItem v-if="isSubscribed"\n\t\t\t\t\tid="app-category-supported"\n\t\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'supported\' } }"\n\t\t\t\t\t:name="APPS_SECTION_ENUM.supported">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.supported" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t\t<NcAppNavigationItem id="app-category-featured"\n\t\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'featured\' } }"\n\t\t\t\t\t:name="APPS_SECTION_ENUM.featured">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.featured" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcAppNavigationItem>\n\n\t\t\t\t<NcAppNavigationItem v-for="category in categories"\n\t\t\t\t\t:id="`app-category-${category.id}`"\n\t\t\t\t\t:key="category.id"\n\t\t\t\t\t:name="category.displayName"\n\t\t\t\t\t:to="{\n\t\t\t\t\t\tname: \'apps-category\',\n\t\t\t\t\t\tparams: { category: category.id },\n\t\t\t\t\t}">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path="category.icon" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t</template>\n\n\t\t\t<NcAppNavigationItem id="app-developer-docs"\n\t\t\t\t:name="t(\'settings\', \'Developer documentation ↗\')"\n\t\t\t\t:href="developerDocsUrl" />\n\t\t</template>\n\t</NcAppNavigation>\n</template>\n\n<script setup lang="ts">\nimport { loadState } from \'@nextcloud/initial-state\'\nimport { translate as t } from \'@nextcloud/l10n\'\nimport { computed, onBeforeMount } from \'vue\'\nimport { APPS_SECTION_ENUM } from \'../constants/AppsConstants\'\nimport { useAppsStore } from \'../store/apps-store\'\n\nimport NcAppNavigation from \'@nextcloud/vue/dist/Components/NcAppNavigation.js\'\nimport NcAppNavigationItem from \'@nextcloud/vue/dist/Components/NcAppNavigationItem.js\'\nimport NcAppNavigationSpacer from \'@nextcloud/vue/dist/Components/NcAppNavigationSpacer.js\'\nimport NcCounterBubble from \'@nextcloud/vue/dist/Components/NcCounterBubble.js\'\nimport NcIconSvgWrapper from \'@nextcloud/vue/dist/Components/NcIconSvgWrapper.js\'\nimport NcLoadingIcon from \'@nextcloud/vue/dist/Components/NcLoadingIcon.js\'\n\nimport APPSTORE_CATEGORY_ICONS from \'../constants/AppstoreCategoryIcons.ts\'\n\nconst updateCount = loadState<number>(\'settings\', \'appstoreUpdateCount\', 0)\nconst appstoreEnabled = loadState<boolean>(\'settings\', \'appstoreEnabled\', true)\nconst developerDocsUrl = loadState<string>(\'settings\', \'appstoreDeveloperDocs\', \'\')\n\nconst store = useAppsStore()\nconst categories = computed(() => store.categories)\nconst categoriesLoading = computed(() => store.loading.categories)\n\n/**\n * Check if the current instance has a support subscription from the Nextcloud GmbH\n *\n * For customers of the Nextcloud GmbH the app level will be set to `300` for apps that are supported in their subscription\n */\nconst isSubscribed = computed(() => store.apps.find(({ level }) => level === 300) !== undefined)\n\n// load categories when component is mounted\nonBeforeMount(() => {\n\tstore.loadCategories()\n\tstore.loadApps()\n})\n<\/script>\n\n<style scoped>\n/* The categories-loading indicator */\n.categories--loading {\n\tflex: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n</style>\n'],sourceRoot:""}]);const r=o},63358:(t,e,a)=>{a.d(e,{A:()=>y});var n=a(85471),s=a(6695),i=a(9165),o=a(53334);const r=(0,n.pM)({__name:"AppLevelBadge",props:{level:null},setup(t){const e=t,a=(0,n.EW)((()=>300===e.level)),r=(0,n.EW)((()=>200===e.level)),p=(0,n.EW)((()=>a.value?i.Yk:i.Tfj)),l=(0,n.EW)((()=>a.value?(0,o.Tl)("settings","Supported"):(0,o.Tl)("settings","Featured"))),c=(0,n.EW)((()=>a.value?(0,o.Tl)("settings","This app is supported via your current Nextcloud subscription."):(0,o.Tl)("settings","Featured apps are developed by and within the community. They offer central functionality and are ready for production use.")));return{__sfc:!0,props:e,isSupported:a,isFeatured:r,badgeIcon:p,badgeText:l,badgeTitle:c,NcIconSvgWrapper:s.A}}});var p=a(85072),l=a.n(p),c=a(97825),d=a.n(c),A=a(77659),u=a.n(A),g=a(55056),v=a.n(g),m=a(10540),h=a.n(m),C=a(41113),b=a.n(C),f=a(30993),_={};_.styleTagTransform=b(),_.setAttributes=v(),_.insert=u().bind(null,"head"),_.domAPI=d(),_.insertStyleElement=h(),l()(f.A,_),f.A&&f.A.locals&&f.A.locals;const y=(0,a(14486).A)(r,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return a.isSupported||a.isFeatured?e("span",{staticClass:"app-level-badge",class:{"app-level-badge--supported":a.isSupported},attrs:{title:a.badgeTitle}},[e(a.NcIconSvgWrapper,{attrs:{path:a.badgeIcon,size:20,inline:""}}),t._v("\n\t"+t._s(a.badgeText)+"\n")],1):t._e()}),[],!1,null,"3590dbeb",null).exports},15769:(t,e,a)=>{a.d(e,{A:()=>_});var n=a(6695),s=a(9165),i=a(53334);const o=(0,a(85471).pM)({name:"AppScore",components:{NcIconSvgWrapper:n.A},props:{score:{type:Number,required:!0}},setup:()=>({mdiStar:s.ZL5,mdiStarHalfFull:s.tdF,mdiStarOutline:s.dF}),computed:{title(){const t=(5*this.score).toFixed(1);return(0,i.Tl)("settings","Community rating: {score}/5",{score:t})},fullStars(){return Math.floor(5*this.score+.25)},emptyStars(){return Math.min(Math.floor(5*(1-this.score)+.25),5-this.fullStars)},hasHalfStar(){return this.fullStars+this.emptyStars<5}}});var r=a(85072),p=a.n(r),l=a(97825),c=a.n(l),d=a(77659),A=a.n(d),u=a(55056),g=a.n(u),v=a(10540),m=a.n(v),h=a(41113),C=a.n(h),b=a(20922),f={};f.styleTagTransform=C(),f.setAttributes=g(),f.insert=A().bind(null,"head"),f.domAPI=c(),f.insertStyleElement=m(),p()(b.A,f),b.A&&b.A.locals&&b.A.locals;const _=(0,a(14486).A)(o,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("span",{staticClass:"app-score__wrapper",attrs:{role:"img","aria-label":t.title,title:t.title}},[t._l(t.fullStars,(function(a){return e("NcIconSvgWrapper",{key:"full-star-".concat(a),attrs:{path:t.mdiStar,inline:""}})})),t._v(" "),t.hasHalfStar?e("NcIconSvgWrapper",{attrs:{path:t.mdiStarHalfFull,inline:""}}):t._e(),t._v(" "),t._l(t.emptyStars,(function(a){return e("NcIconSvgWrapper",{key:"empty-star-".concat(a),attrs:{path:t.mdiStarOutline,inline:""}})}))],2)}),[],!1,null,"7d015114",null).exports},5046:(e,a,n)=>{n.r(a),n.d(a,{default:()=>st});var s=n(85471),i=n(53334),o=n(24387),r=n(846),p=n(92973),l=n(18195),c=n(10833),d=n(46222),A=n(61338),u=n(15769),g=n(63358),v=n(45834);const m={name:"SvgFilterMixin",data:()=>({filterId:""}),computed:{filterUrl(){return"url(#".concat(this.filterId,")")}},mounted(){this.filterId="invertIconApps-"+Math.random().toString(36).substring(2)}};var h=n(14486);const C=(0,h.A)(m,void 0,void 0,!1,null,null,null).exports;var b=n(9518);const f={name:"AppItem",components:{AppLevelBadge:g.A,AppScore:u.A,NcButton:b.A},mixins:[v.A,C],props:{app:{type:Object,required:!0},category:{},listView:{type:Boolean,default:!0},useBundleView:{type:Boolean,default:!1},headers:{type:String,default:null}},data:()=>({isSelected:!1,scrolled:!1,screenshotLoaded:!1}),computed:{hasRating(){return this.app.appstoreData&&this.app.appstoreData.ratingNumOverall>5},dataItemTag(){return this.listView?"td":"div"},withSidebar(){return!!this.$route.params.id}},watch:{"$route.params.id"(t){this.isSelected=this.app.id===t}},mounted(){if(this.isSelected=this.app.id===this.$route.params.id,this.app.releases&&this.app.screenshot){const t=new Image;t.onload=()=>{this.screenshotLoaded=!0},t.src=this.app.screenshot}},watchers:{},methods:{prefix:(t,e)=>t+"_"+e,getDataItemHeaders(t){return this.useBundleView?[this.headers,t].join(" "):null}}};var _=n(85072),y=n.n(_),x=n(97825),w=n.n(x),S=n(77659),N=n.n(S),k=n(55056),I=n.n(k),T=n(10540),E=n.n(T),B=n(41113),D=n.n(B),P=n(94892),L={};L.styleTagTransform=D(),L.setAttributes=I(),L.insert=N().bind(null,"head"),L.domAPI=w(),L.insertStyleElement=E(),y()(P.A,L),P.A&&P.A.locals&&P.A.locals;const O=(0,h.A)(f,(function(){var t=this,e=t._self._c;return e(t.listView?"tr":"li",{tag:"component",staticClass:"app-item",class:{"app-item--list-view":t.listView,"app-item--store-view":!t.listView,"app-item--selected":t.isSelected,"app-item--with-sidebar":t.withSidebar}},[e(t.dataItemTag,{tag:"component",staticClass:"app-image app-image-icon",attrs:{headers:t.getDataItemHeaders("app-table-col-icon")}},[t.listView&&!t.app.preview||!t.listView&&!t.screenshotLoaded?e("div",{staticClass:"icon-settings-dark"}):t.listView&&t.app.preview?e("svg",{attrs:{width:"32",height:"32",viewBox:"0 0 32 32"}},[e("image",{staticClass:"app-icon",attrs:{x:"0",y:"0",width:"32",height:"32",preserveAspectRatio:"xMinYMin meet","xlink:href":t.app.preview}})]):t._e(),t._v(" "),!t.listView&&t.app.screenshot&&t.screenshotLoaded?e("img",{attrs:{src:t.app.screenshot,alt:""}}):t._e()]),t._v(" "),e(t.dataItemTag,{tag:"component",staticClass:"app-name",attrs:{headers:t.getDataItemHeaders("app-table-col-name")}},[e("router-link",{staticClass:"app-name--link",attrs:{to:{name:"apps-details",params:{category:t.category,id:t.app.id}},"aria-label":t.t("settings","Show details for {appName} app",{appName:t.app.name})}},[t._v("\n\t\t\t"+t._s(t.app.name)+"\n\t\t")])],1),t._v(" "),t.listView?t._e():e(t.dataItemTag,{tag:"component",staticClass:"app-summary",attrs:{headers:t.getDataItemHeaders("app-version")}},[t._v("\n\t\t"+t._s(t.app.summary)+"\n\t")]),t._v(" "),t.listView?e(t.dataItemTag,{tag:"component",staticClass:"app-version",attrs:{headers:t.getDataItemHeaders("app-table-col-version")}},[t.app.version?e("span",[t._v(t._s(t.app.version))]):t.app.appstoreData.releases[0].version?e("span",[t._v(t._s(t.app.appstoreData.releases[0].version))]):t._e()]):t._e(),t._v(" "),e(t.dataItemTag,{tag:"component",staticClass:"app-level",attrs:{headers:t.getDataItemHeaders("app-table-col-level")}},[e("AppLevelBadge",{attrs:{level:t.app.level}}),t._v(" "),t.hasRating&&!t.listView?e("AppScore",{attrs:{score:t.app.score}}):t._e()],1),t._v(" "),e(t.dataItemTag,{tag:"component",staticClass:"app-actions",attrs:{headers:t.getDataItemHeaders("app-table-col-actions")}},[t.app.error?e("div",{staticClass:"warning"},[t._v("\n\t\t\t"+t._s(t.app.error)+"\n\t\t")]):t._e(),t._v(" "),t.isLoading?e("div",{staticClass:"icon icon-loading-small"}):t._e(),t._v(" "),t.app.update?e("NcButton",{attrs:{type:"primary",disabled:t.installing||t.isLoading},on:{click:function(e){return e.stopPropagation(),t.update(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Update to {update}",{update:t.app.update}))+"\n\t\t")]):t._e(),t._v(" "),t.app.canUnInstall?e("NcButton",{staticClass:"uninstall",attrs:{type:"tertiary",disabled:t.installing||t.isLoading},on:{click:function(e){return e.stopPropagation(),t.remove(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Remove"))+"\n\t\t")]):t._e(),t._v(" "),t.app.active?e("NcButton",{attrs:{disabled:t.installing||t.isLoading},on:{click:function(e){return e.stopPropagation(),t.disable(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Disable"))+"\n\t\t")]):t._e(),t._v(" "),t.app.active||!t.app.canInstall&&!t.app.isCompatible?t.app.active?t._e():e("NcButton",{attrs:{title:t.forceEnableButtonTooltip,"aria-label":t.forceEnableButtonTooltip,type:"secondary",disabled:t.installing||t.isLoading},on:{click:function(e){return e.stopPropagation(),t.forceEnable(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.forceEnableButtonText)+"\n\t\t")]):e("NcButton",{attrs:{title:t.enableButtonTooltip,"aria-label":t.enableButtonTooltip,type:"primary",disabled:!t.app.canInstall||t.installing||t.isLoading},on:{click:function(e){return e.stopPropagation(),t.enable(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.enableButtonText)+"\n\t\t")])],1)],1)}),[],!1,null,"0dbcb644",null).exports;var R=n(98959);function G(t){if(!Number.isInteger(t)&&t!==Number.POSITIVE_INFINITY||!(t>0))throw new TypeError("Expected `concurrency` to be a number from 1 and up");const e=new R.A;let a=0;const n=async(t,n,s)=>{a++;const i=(async()=>t(...s))();n(i);try{await i}catch{}a--,e.size>0&&e.dequeue()()},s=function(s){for(var i=arguments.length,o=new Array(i>1?i-1:0),r=1;r<i;r++)o[r-1]=arguments[r];return new Promise((i=>{((s,i,o)=>{e.enqueue(n.bind(void 0,s,i,o)),(async()=>{await Promise.resolve(),a<t&&e.size>0&&e.dequeue()()})()})(s,i,o)}))};return Object.defineProperties(s,{activeCount:{get:()=>a},pendingCount:{get:()=>e.size},clearQueue:{value:()=>{e.clear()}}}),s}var W=n(96763);const U={name:"AppList",components:{AppItem:O,NcButton:b.A},props:{category:{type:String,required:!0}},data:()=>({search:""}),computed:{counter(){return this.apps.filter((t=>t.update)).length},loading(){return this.$store.getters.loading("list")},hasPendingUpdate(){return this.apps.filter((t=>t.update)).length>0},showUpdateAll(){return this.hasPendingUpdate&&this.useListView},apps(){const t=this.$store.getters.getAllApps.filter((t=>-1!==t.name.toLowerCase().search(this.search.toLowerCase()))).sort((function(t,e){const a=""+(t.active?0:1)+(t.update?0:1)+t.name,n=""+(e.active?0:1)+(e.update?0:1)+e.name;return OC.Util.naturalSortCompare(a,n)}));return"installed"===this.category?t.filter((t=>t.installed)):"enabled"===this.category?t.filter((t=>t.active&&t.installed)):"disabled"===this.category?t.filter((t=>!t.active&&t.installed)):"app-bundles"===this.category?t.filter((t=>t.bundles)):"updates"===this.category?t.filter((t=>t.update)):"supported"===this.category?t.filter((t=>300===t.level)):"featured"===this.category?t.filter((t=>200===t.level)):t.filter((t=>t.appstore&&void 0!==t.category&&(t.category===this.category||t.category.indexOf(this.category)>-1)))},bundles(){return this.$store.getters.getAppBundles.filter((t=>this.bundleApps(t.id).length>0))},bundleApps:()=>function(t){return this.$store.getters.getAllApps.filter((e=>void 0!==e.bundleIds&&e.bundleIds.includes(t)))},searchApps(){return""===this.search?[]:this.$store.getters.getAllApps.filter((t=>-1!==t.name.toLowerCase().search(this.search.toLowerCase())&&!this.apps.find((e=>e.id===t.id))))},useAppStoreView(){return!this.useListView&&!this.useBundleView},useListView(){return"installed"===this.category||"enabled"===this.category||"disabled"===this.category||"updates"===this.category||"featured"===this.category||"supported"===this.category},useBundleView(){return"app-bundles"===this.category},allBundlesEnabled(){return t=>0===this.bundleApps(t).filter((t=>!t.active)).length},bundleToggleText(){return e=>this.allBundlesEnabled(e)?t("settings","Disable all"):t("settings","Download and enable all")}},beforeDestroy(){(0,A.al)("nextcloud:unified-search.search",this.setSearch),(0,A.al)("nextcloud:unified-search.reset",this.resetSearch)},mounted(){(0,A.B1)("nextcloud:unified-search.search",this.setSearch),(0,A.B1)("nextcloud:unified-search.reset",this.resetSearch)},methods:{setSearch(t){let{query:e}=t;this.search=e},resetSearch(){this.search=""},toggleBundle(t){return this.allBundlesEnabled(t)?this.disableBundle(t):this.enableBundle(t)},enableBundle(t){const e=this.bundleApps(t).map((t=>t.id));this.$store.dispatch("enableApp",{appId:e,groups:[]}).catch((t=>{W.error(t),OC.Notification.show(t)}))},disableBundle(t){const e=this.bundleApps(t).map((t=>t.id));this.$store.dispatch("disableApp",{appId:e,groups:[]}).catch((t=>{OC.Notification.show(t)}))},updateAll(){const t=G(1);this.apps.filter((t=>t.update)).map((e=>t((()=>this.$store.dispatch("updateApp",{appId:e.id})))))}}};var M=n(94025),F={};F.styleTagTransform=D(),F.setAttributes=I(),F.insert=N().bind(null,"head"),F.domAPI=w(),F.insertStyleElement=E(),y()(M.A,F),M.A&&M.A.locals&&M.A.locals;const Y=(0,h.A)(U,(function(){var t=this,e=t._self._c;return e("div",{attrs:{id:"app-content-inner"}},[e("div",{staticClass:"apps-list",class:{"apps-list--list-view":t.useBundleView||t.useListView,"apps-list--store-view":t.useAppStoreView},attrs:{id:"apps-list"}},[t.useListView?[t.showUpdateAll?e("div",{staticClass:"apps-list__toolbar"},[t._v("\n\t\t\t\t"+t._s(t.n("settings","%n app has an update available","%n apps have an update available",t.counter))+"\n\t\t\t\t"),t.showUpdateAll?e("NcButton",{attrs:{id:"app-list-update-all",type:"primary"},on:{click:t.updateAll}},[t._v("\n\t\t\t\t\t"+t._s(t.n("settings","Update","Update all",t.counter))+"\n\t\t\t\t")]):t._e()],1):t._e(),t._v(" "),t.showUpdateAll?t._e():e("div",{staticClass:"apps-list__toolbar"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","All apps are up-to-date."))+"\n\t\t\t")]),t._v(" "),e("TransitionGroup",{staticClass:"apps-list__list-container",attrs:{name:"apps-list",tag:"table"}},[e("tr",{key:"app-list-view-header"},[e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Icon")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Name")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Version")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Level")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Actions")))])])]),t._v(" "),t._l(t.apps,(function(a){return e("AppItem",{key:a.id,attrs:{app:a,category:t.category}})}))],2)]:t._e(),t._v(" "),t.useBundleView?e("table",{staticClass:"apps-list__list-container"},[e("tr",{key:"app-list-view-header"},[e("th",{attrs:{id:"app-table-col-icon"}},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Icon")))])]),t._v(" "),e("th",{attrs:{id:"app-table-col-name"}},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Name")))])]),t._v(" "),e("th",{attrs:{id:"app-table-col-version"}},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Version")))])]),t._v(" "),e("th",{attrs:{id:"app-table-col-level"}},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Level")))])]),t._v(" "),e("th",{attrs:{id:"app-table-col-actions"}},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Actions")))])])]),t._v(" "),t._l(t.bundles,(function(a){return[e("tr",{key:a.id},[e("th",{attrs:{id:"app-table-rowgroup-".concat(a.id),colspan:"5",scope:"rowgroup"}},[e("div",{staticClass:"apps-list__bundle-heading"},[e("span",{staticClass:"apps-list__bundle-header"},[t._v("\n\t\t\t\t\t\t\t\t"+t._s(a.name)+"\n\t\t\t\t\t\t\t")]),t._v(" "),e("NcButton",{attrs:{type:"secondary"},on:{click:function(e){return t.toggleBundle(a.id)}}},[t._v("\n\t\t\t\t\t\t\t\t"+t._s(t.t("settings",t.bundleToggleText(a.id)))+"\n\t\t\t\t\t\t\t")])],1)])]),t._v(" "),t._l(t.bundleApps(a.id),(function(n){return e("AppItem",{key:a.id+n.id,attrs:{"use-bundle-view":!0,headers:"app-table-rowgroup-".concat(a.id),app:n,category:t.category}})}))]}))],2):t._e(),t._v(" "),t.useAppStoreView?e("ul",{staticClass:"apps-list__store-container"},t._l(t.apps,(function(a){return e("AppItem",{key:a.id,attrs:{app:a,category:t.category,"list-view":!1}})})),1):t._e()],2),t._v(" "),e("div",{staticClass:"apps-list apps-list--list-view",attrs:{id:"apps-list-search"}},[e("div",{staticClass:"apps-list__list-container"},[""!==t.search&&t.searchApps.length>0?e("table",{staticClass:"apps-list__list-container"},[e("caption",{staticClass:"apps-list__bundle-header"},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Results from other categories"))+"\n\t\t\t\t")]),t._v(" "),e("tr",{key:"app-list-view-header"},[e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Icon")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Name")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Version")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Level")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Actions")))])])]),t._v(" "),t._l(t.searchApps,(function(a){return e("AppItem",{key:a.id,attrs:{app:a,category:t.category}})}))],2):t._e()])]),t._v(" "),""===t.search||t.loading||0!==t.searchApps.length||0!==t.apps.length?t._e():e("div",{staticClass:"emptycontent emptycontent-search",attrs:{id:"apps-list-empty"}},[e("div",{staticClass:"icon-settings-dark",attrs:{id:"app-list-empty-icon"}}),t._v(" "),e("h2",[t._v(t._s(t.t("settings","No apps found for your version")))])])])}),[],!1,null,"73184220",null).exports;var z=n(9165),$=n(85168),V=n(99498),q=n(26287),H=n(6695),j=n(36620);const K=t=>{var e;const a={...t};if(a.date&&(a.date=Date.parse(a.date)),a.expiryDate&&(a.expiryDate=Date.parse(a.expiryDate)),"post"===a.type)return a;if("showcase"===a.type)return a;if("carousel"===a.type)return a;throw new Error("Invalid argument, app discover element with type ".concat(null!==(e=t.type)&&void 0!==e?e:"unknown"," is unknown"))},Q=t=>{const e=Date.now();return!(t.date&&t.date>e||t.expiryDate&&t.expiryDate<e)},J=(0,s.pM)({__name:"AppStoreDiscoverSection",setup(t){const e=(0,s.$V)((()=>n.e(9923).then(n.bind(n,99923)))),a=(0,s.$V)((()=>n.e(3865).then(n.bind(n,73865)))),o=(0,s.KR)(!1),r=(0,s.KR)([]),p=t=>{for(let e=t.length-1;e>0;e--){const a=Math.floor(Math.random()*(e+1));[t[e],t[a]]=[t[a],t[e]]}return t};return(0,s.KC)((async()=>{try{const{data:t}=await q.A.get((0,V.Jv)("/settings/api/apps/discover")),e=t.map(K).filter(Q),a=p(e);a.sort(((t,e)=>{var a,n;return(null!==(a=t.order)&&void 0!==a?a:1/0)<(null!==(n=e.order)&&void 0!==n?n:1/0)?-1:1})),r.value=a}catch(t){o.value=!0,j.A.error(t),(0,$.Qg)((0,i.Tl)("settings","Could not load app discover section"))}})),{__sfc:!0,PostType:e,CarouselType:a,hasError:o,elements:r,shuffleArray:p,getComponent:t=>"post"===t?e:"carousel"===t?a:(0,s.pM)({mounted:()=>j.A.error("Unknown component requested ",t),render:t=>t("div",(0,i.Tl)("settings","Could not render element"))}),mdiEyeOff:z.Bk0,t:i.Tl,NcEmptyContent:c.A,NcIconSvgWrapper:H.A,NcLoadingIcon:d.A}}});var Z=n(40916),X={};X.styleTagTransform=D(),X.setAttributes=I(),X.insert=N().bind(null,"head"),X.domAPI=w(),X.insertStyleElement=E(),y()(Z.A,X),Z.A&&Z.A.locals&&Z.A.locals;const tt=(0,h.A)(J,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return e("div",{staticClass:"app-discover"},[a.hasError?e(a.NcEmptyContent,{attrs:{name:a.t("settings","Nothing to show"),description:a.t("settings","Could not load section content from app store.")},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.mdiEyeOff,size:64}})]},proxy:!0}],null,!1,638098482)}):0===a.elements.length?e(a.NcEmptyContent,{attrs:{name:a.t("settings","Loading"),description:a.t("settings","Fetching the latest news…")},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcLoadingIcon,{attrs:{size:64}})]},proxy:!0}])}):t._l(a.elements,(function(n,s){var i;return e(a.getComponent(n.type),t._b({key:null!==(i=n.id)&&void 0!==i?i:s,tag:"component"},"component",n,!1))}))],2)}),[],!1,null,"3efdd423",null).exports,et=(0,s.pM)({__name:"AppStore",setup(t){const e=(0,o.lq)(),a=(0,r.T)(),n=(0,s.EW)((()=>{var t,a;return null!==(t=null===(a=e.params)||void 0===a?void 0:a.category)&&void 0!==t?t:"discover"})),A=(0,i.Tl)("settings","App Store"),u=(0,s.EW)((()=>{var t,e,s;return null!==(t=null!==(e=p.l[n.value])&&void 0!==e?e:null===(s=a.getCategoryById(n.value))||void 0===s?void 0:s.displayName)&&void 0!==t?t:A}));(0,s.nT)((()=>{window.document.title="".concat(u.value," - ").concat(A," - Nextcloud")}));const g=(0,s.nI)(),v=(0,s.EW)((()=>(null==g?void 0:g.proxy).$store.getters.loading("list")));return(0,s.KC)((()=>{(null==g?void 0:g.proxy).$store.dispatch("getCategories",{shouldRefetchCategories:!0}),(null==g?void 0:g.proxy).$store.dispatch("getAllApps")})),{__sfc:!0,route:e,store:a,currentCategory:n,appStoreLabel:A,viewLabel:u,instance:g,isLoading:v,t:i.Tl,NcAppContent:l.A,NcEmptyContent:c.A,NcLoadingIcon:d.A,AppList:Y,AppStoreDiscoverSection:tt}}});var at=n(34707),nt={};nt.styleTagTransform=D(),nt.setAttributes=I(),nt.insert=N().bind(null,"head"),nt.domAPI=w(),nt.insertStyleElement=E(),y()(at.A,nt),at.A&&at.A.locals&&at.A.locals;const st=(0,h.A)(et,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return e(a.NcAppContent,{staticClass:"app-settings-content",attrs:{"page-heading":a.appStoreLabel}},[e("h2",{staticClass:"app-settings-content__label",domProps:{textContent:t._s(a.viewLabel)}}),t._v(" "),"discover"===a.currentCategory?e(a.AppStoreDiscoverSection):a.isLoading?e(a.NcEmptyContent,{staticClass:"empty-content__loading",attrs:{name:a.t("settings","Loading app list")},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcLoadingIcon,{attrs:{size:64}})]},proxy:!0}])}):e(a.AppList,{attrs:{category:a.currentCategory}})],1)}),[],!1,null,"a75d4530",null).exports},12336:(t,e,a)=>{a.r(e),a.d(e,{default:()=>E});var n=a(85471),s=a(38613),i=a(53334),o=a(92973),r=a(846),p=a(42530),l=a(52439),c=a(14645),d=a(70563),A=a(6695),u=a(46222),g=a(86438);const v=(0,n.pM)({__name:"AppStoreNavigation",setup(t){const e=(0,s.C)("settings","appstoreUpdateCount",0),a=(0,s.C)("settings","appstoreEnabled",!0),v=(0,s.C)("settings","appstoreDeveloperDocs",""),m=(0,r.T)(),h=(0,n.EW)((()=>m.categories)),C=(0,n.EW)((()=>m.loading.categories)),b=(0,n.EW)((()=>void 0!==m.apps.find((t=>{let{level:e}=t;return 300===e}))));return(0,n.KC)((()=>{m.loadCategories(),m.loadApps()})),{__sfc:!0,updateCount:e,appstoreEnabled:a,developerDocsUrl:v,store:m,categories:h,categoriesLoading:C,isSubscribed:b,t:i.Tl,APPS_SECTION_ENUM:o.l,NcAppNavigation:p.A,NcAppNavigationItem:l.A,NcAppNavigationSpacer:c.A,NcCounterBubble:d.A,NcIconSvgWrapper:A.A,NcLoadingIcon:u.A,APPSTORE_CATEGORY_ICONS:g.A}}});var m=a(85072),h=a.n(m),C=a(97825),b=a.n(C),f=a(77659),_=a.n(f),y=a(55056),x=a.n(y),w=a(10540),S=a.n(w),N=a(41113),k=a.n(N),I=a(23921),T={};T.styleTagTransform=k(),T.setAttributes=x(),T.insert=_().bind(null,"head"),T.domAPI=b(),T.insertStyleElement=S(),h()(I.A,T),I.A&&I.A.locals&&I.A.locals;const E=(0,a(14486).A)(v,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return e(a.NcAppNavigation,{attrs:{"aria-label":a.t("settings","Apps")},scopedSlots:t._u([{key:"list",fn:function(){return[e(a.NcAppNavigationItem,{attrs:{id:"app-category-discover",to:{name:"apps-category",params:{category:"discover"}},name:a.APPS_SECTION_ENUM.discover},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.discover}})]},proxy:!0}])}),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-category-installed",to:{name:"apps-category",params:{category:"installed"}},name:a.APPS_SECTION_ENUM.installed},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.installed}})]},proxy:!0}])}),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-category-enabled",to:{name:"apps-category",params:{category:"enabled"}},name:a.APPS_SECTION_ENUM.enabled},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.enabled}})]},proxy:!0}])}),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-category-disabled",to:{name:"apps-category",params:{category:"disabled"}},name:a.APPS_SECTION_ENUM.disabled},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.disabled}})]},proxy:!0}])}),t._v(" "),a.updateCount>0?e(a.NcAppNavigationItem,{attrs:{id:"app-category-updates",to:{name:"apps-category",params:{category:"updates"}},name:a.APPS_SECTION_ENUM.updates},scopedSlots:t._u([{key:"counter",fn:function(){return[e(a.NcCounterBubble,[t._v(t._s(a.updateCount))])]},proxy:!0},{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.updates}})]},proxy:!0}],null,!1,2824895104)}):t._e(),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-category-your-bundles",to:{name:"apps-category",params:{category:"app-bundles"}},name:a.APPS_SECTION_ENUM["app-bundles"]},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.bundles}})]},proxy:!0}])}),t._v(" "),e(a.NcAppNavigationSpacer),t._v(" "),a.appstoreEnabled&&a.categoriesLoading?e("li",{staticClass:"categories--loading"},[e(a.NcLoadingIcon,{attrs:{size:20,"aria-label":a.t("settings","Loading categories")}})],1):a.appstoreEnabled&&!a.categoriesLoading?[a.isSubscribed?e(a.NcAppNavigationItem,{attrs:{id:"app-category-supported",to:{name:"apps-category",params:{category:"supported"}},name:a.APPS_SECTION_ENUM.supported},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.supported}})]},proxy:!0}],null,!1,613663011)}):t._e(),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-category-featured",to:{name:"apps-category",params:{category:"featured"}},name:a.APPS_SECTION_ENUM.featured},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.featured}})]},proxy:!0}])}),t._v(" "),t._l(a.categories,(function(n){return e(a.NcAppNavigationItem,{key:n.id,attrs:{id:"app-category-".concat(n.id),name:n.displayName,to:{name:"apps-category",params:{category:n.id}}},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:n.icon}})]},proxy:!0}],null,!0)})}))]:t._e(),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-developer-docs",name:a.t("settings","Developer documentation ↗"),href:a.developerDocsUrl}})]},proxy:!0}])})}),[],!1,null,"d15221f2",null).exports},83625:(e,a,n)=>{n.r(a),n.d(a,{default:()=>at});var s=n(85471),i=n(53334),o=n(24387),r=n(846),p=n(62182),l=n(6695),c=n(15769),d=n(9165),A=n(18503),u=n(60023),g=n(42838),v=n.n(g);const m={name:"Markdown",props:{text:{type:String,default:""},minHeading:{type:Number,default:1}},computed:{renderMarkdown(){const t=new u.xI.Renderer;return t.link=function(t,e,a){let n;try{n=decodeURIComponent(unescape(t)).replace(/[^\w:]/g,"").toLowerCase()}catch(t){return""}if(0!==n.indexOf("http:")&&0!==n.indexOf("https:"))return"";let s='<a href="'+t+'" rel="noreferrer noopener"';return e&&(s+=' title="'+e+'"'),s+=">"+a+"</a>",s},t.heading=(t,e)=>(e=Math.min(6,e+(this.minHeading-1)),"<h".concat(e,">").concat(t,"</h").concat(e,">")),t.image=function(t,e,a){return a||e},t.blockquote=function(t){return t},v().sanitize((0,u.xI)(this.text.trim(),{renderer:t,gfm:!1,highlight:!1,tables:!1,breaks:!1,pedantic:!1,sanitize:!0,smartLists:!0,smartypants:!1}),{SAFE_FOR_JQUERY:!0,ALLOWED_TAGS:["h1","h2","h3","h4","h5","h6","strong","p","a","ul","ol","li","em","del","blockquote"]})}}};var h=n(85072),C=n.n(h),b=n(97825),f=n.n(b),_=n(77659),y=n.n(_),x=n(55056),w=n.n(x),S=n(10540),N=n.n(S),k=n(41113),I=n.n(k),T=n(3323),E={};E.styleTagTransform=I(),E.setAttributes=w(),E.insert=y().bind(null,"head"),E.domAPI=f(),E.insertStyleElement=N(),C()(T.A,E),T.A&&T.A.locals&&T.A.locals;var B=n(14486);const D=(0,B.A)(m,(function(){var t=this;return(0,t._self._c)("div",{staticClass:"settings-markdown",domProps:{innerHTML:t._s(t.renderMarkdown)}})}),[],!1,null,"7c5c8e59",null).exports,P=(0,s.pM)({__name:"AppDescriptionTab",props:{app:null},setup:t=>({__sfc:!0,mdiTextShort:d.azb,t:i.Tl,NcAppSidebarTab:A.A,NcIconSvgWrapper:l.A,Markdown:D})});var L=n(10321),O={};O.styleTagTransform=I(),O.setAttributes=w(),O.insert=y().bind(null,"head"),O.domAPI=f(),O.insertStyleElement=N(),C()(L.A,O),L.A&&L.A.locals&&L.A.locals;const R=(0,B.A)(P,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return e(a.NcAppSidebarTab,{attrs:{id:"desc",name:a.t("settings","Description"),order:0},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.mdiTextShort}})]},proxy:!0}])},[t._v(" "),e("div",{staticClass:"app-description"},[e(a.Markdown,{attrs:{text:t.app.description,"min-heading":4}})],1)])}),[],!1,null,"fccce5ae",null).exports;var G=n(9518),W=n(4604),U=n(67607),M=n(45834),F=n(96763);const Y={name:"AppDetailsTab",components:{NcAppSidebarTab:A.A,NcButton:G.A,NcDateTime:W.A,NcIconSvgWrapper:l.A,NcSelect:U.A},mixins:[M.A],props:{app:{type:Object,required:!0}},setup:()=>({store:(0,r.T)(),mdiBug:d.xhV,mdiFeatureSearch:d.NZe,mdiStar:d.ZL5,mdiTextBox:d.n1r,mdiTooltipQuestion:d.iNF}),data:()=>({groupCheckedAppsData:!1}),computed:{lastModified(){var t,e,a;return null!==(t=(null!==(e=null===(a=this.app.appstoreData)||void 0===a?void 0:a.releases)&&void 0!==e?e:[]).map((t=>{let{lastModified:e}=t;return Date.parse(e)})).sort().at(0))&&void 0!==t?t:null},appAuthors(){if(F.warn(this.app),!this.app)return"";const t=t=>t["@value"]?t["@value"]:t;return(Array.isArray(this.app.author)?this.app.author.map(t):[t(this.app.author)]).sort(((t,e)=>t.split(" ").at(-1).localeCompare(e.split(" ").at(-1)))).join(", ")},appstoreUrl(){return"https://apps.nextcloud.com/apps/".concat(this.app.id)},externalResources(){const e=[];return this.app.internal||e.push({id:"appstore",href:this.appstoreUrl,label:t("settings","View in store")}),this.app.website&&e.push({id:"website",href:this.app.website,label:t("settings","Visit website")}),this.app.documentation&&(this.app.documentation.user&&e.push({id:"doc-user",href:this.app.documentation.user,label:t("settings","Usage documentation")}),this.app.documentation.admin&&e.push({id:"doc-admin",href:this.app.documentation.admin,label:t("settings","Admin documentation")}),this.app.documentation.developer&&e.push({id:"doc-developer",href:this.app.documentation.developer,label:t("settings","Developer documentation")})),e},appCategories(){return[this.app.category].flat().map((t=>{var e,a;return null!==(e=null===(a=this.store.getCategoryById(t))||void 0===a?void 0:a.displayName)&&void 0!==e?e:t})).join(", ")},rateAppUrl(){return"".concat(this.appstoreUrl,"#comments")},appGroups(){return this.app.groups.map((t=>({id:t,name:t})))},groups(){return this.$store.getters.getGroups.filter((t=>"disabled"!==t.id)).sort(((t,e)=>t.name.localeCompare(e.name)))}},mounted(){this.app.groups.length>0&&(this.groupCheckedAppsData=!0)}};var z=n(8007),$={};$.styleTagTransform=I(),$.setAttributes=w(),$.insert=y().bind(null,"head"),$.domAPI=f(),$.insertStyleElement=N(),C()(z.A,$),z.A&&z.A.locals&&z.A.locals;const V=(0,B.A)(Y,(function(){var t,e,a,n=this,s=n._self._c;return s("NcAppSidebarTab",{attrs:{id:"details",name:n.t("settings","Details"),order:1},scopedSlots:n._u([{key:"icon",fn:function(){return[s("NcIconSvgWrapper",{attrs:{path:n.mdiTextBox}})]},proxy:!0}])},[n._v(" "),s("div",{staticClass:"app-details"},[s("div",{staticClass:"app-details__actions"},[n.app.active&&n.canLimitToGroups(n.app)?s("div",{staticClass:"app-details__actions-groups"},[s("input",{directives:[{name:"model",rawName:"v-model",value:n.groupCheckedAppsData,expression:"groupCheckedAppsData"}],staticClass:"groups-enable__checkbox checkbox",attrs:{id:"groups_enable_".concat(n.app.id),type:"checkbox"},domProps:{value:n.app.id,checked:Array.isArray(n.groupCheckedAppsData)?n._i(n.groupCheckedAppsData,n.app.id)>-1:n.groupCheckedAppsData},on:{change:[function(t){var e=n.groupCheckedAppsData,a=t.target,s=!!a.checked;if(Array.isArray(e)){var i=n.app.id,o=n._i(e,i);a.checked?o<0&&(n.groupCheckedAppsData=e.concat([i])):o>-1&&(n.groupCheckedAppsData=e.slice(0,o).concat(e.slice(o+1)))}else n.groupCheckedAppsData=s},n.setGroupLimit]}}),n._v(" "),s("label",{attrs:{for:"groups_enable_".concat(n.app.id)}},[n._v(n._s(n.t("settings","Limit to groups")))]),n._v(" "),s("input",{staticClass:"group_select",attrs:{type:"hidden",title:n.t("settings","All"),value:""}}),n._v(" "),s("br"),n._v(" "),s("label",{attrs:{for:"limitToGroups"}},[s("span",[n._v(n._s(n.t("settings","Limit app usage to groups")))])]),n._v(" "),n.isLimitedToGroups(n.app)?s("NcSelect",{attrs:{"input-id":"limitToGroups",options:n.groups,value:n.appGroups,limit:5,label:"name",multiple:!0,"close-on-select":!1},on:{"option:selected":n.addGroupLimitation,"option:deselected":n.removeGroupLimitation,search:n.asyncFindGroup}},[s("span",{attrs:{slot:"noResult"},slot:"noResult"},[n._v(n._s(n.t("settings","No results")))])]):n._e()],1):n._e(),n._v(" "),s("div",{staticClass:"app-details__actions-manage"},[n.app.update?s("input",{staticClass:"update primary",attrs:{type:"button",value:n.t("settings","Update to {version}",{version:n.app.update}),disabled:n.installing||n.isLoading},on:{click:function(t){return n.update(n.app.id)}}}):n._e(),n._v(" "),n.app.canUnInstall?s("input",{staticClass:"uninstall",attrs:{type:"button",value:n.t("settings","Remove"),disabled:n.installing||n.isLoading},on:{click:function(t){return n.remove(n.app.id)}}}):n._e(),n._v(" "),n.app.active?s("input",{staticClass:"enable",attrs:{type:"button",value:n.t("settings","Disable"),disabled:n.installing||n.isLoading},on:{click:function(t){return n.disable(n.app.id)}}}):n._e(),n._v(" "),n.app.active||!n.app.canInstall&&!n.app.isCompatible?n.app.active||n.app.canInstall?n._e():s("input",{staticClass:"enable force",attrs:{title:n.forceEnableButtonTooltip,"aria-label":n.forceEnableButtonTooltip,type:"button",value:n.forceEnableButtonText,disabled:n.installing||n.isLoading},on:{click:function(t){return n.forceEnable(n.app.id)}}}):s("input",{staticClass:"enable primary",attrs:{title:n.enableButtonTooltip,"aria-label":n.enableButtonTooltip,type:"button",value:n.enableButtonText,disabled:!n.app.canInstall||n.installing||n.isLoading},on:{click:function(t){return n.enable(n.app.id)}}})])]),n._v(" "),s("ul",{staticClass:"app-details__dependencies"},[n.app.missingMinOwnCloudVersion?s("li",[n._v("\n\t\t\t\t"+n._s(n.t("settings","This app has no minimum Nextcloud version assigned. This will be an error in the future."))+"\n\t\t\t")]):n._e(),n._v(" "),n.app.missingMaxOwnCloudVersion?s("li",[n._v("\n\t\t\t\t"+n._s(n.t("settings","This app has no maximum Nextcloud version assigned. This will be an error in the future."))+"\n\t\t\t")]):n._e(),n._v(" "),n.app.canInstall?n._e():s("li",[n._v("\n\t\t\t\t"+n._s(n.t("settings","This app cannot be installed because the following dependencies are not fulfilled:"))+"\n\t\t\t\t"),s("ul",{staticClass:"missing-dependencies"},n._l(n.app.missingDependencies,(function(t,e){return s("li",{key:e},[n._v("\n\t\t\t\t\t\t"+n._s(t)+"\n\t\t\t\t\t")])})),0)])]),n._v(" "),n.lastModified?s("div",{staticClass:"app-details__section"},[s("h4",[n._v("\n\t\t\t\t"+n._s(n.t("settings","Latest updated"))+"\n\t\t\t")]),n._v(" "),s("NcDateTime",{attrs:{timestamp:n.lastModified}})],1):n._e(),n._v(" "),s("div",{staticClass:"app-details__section"},[s("h4",[n._v("\n\t\t\t\t"+n._s(n.t("settings","Author"))+"\n\t\t\t")]),n._v(" "),s("p",{staticClass:"app-details__authors"},[n._v("\n\t\t\t\t"+n._s(n.appAuthors)+"\n\t\t\t")])]),n._v(" "),s("div",{staticClass:"app-details__section"},[s("h4",[n._v("\n\t\t\t\t"+n._s(n.t("settings","Categories"))+"\n\t\t\t")]),n._v(" "),s("p",[n._v("\n\t\t\t\t"+n._s(n.appCategories)+"\n\t\t\t")])]),n._v(" "),n.externalResources.length>0?s("div",{staticClass:"app-details__section"},[s("h4",[n._v(n._s(n.t("settings","Resources")))]),n._v(" "),s("ul",{staticClass:"app-details__documentation",attrs:{"aria-label":n.t("settings","Documentation")}},n._l(n.externalResources,(function(t){return s("li",{key:t.id},[s("a",{staticClass:"appslink",attrs:{href:t.href,target:"_blank",rel:"noreferrer noopener"}},[n._v("\n\t\t\t\t\t\t"+n._s(t.label)+" ↗\n\t\t\t\t\t")])])})),0)]):n._e(),n._v(" "),s("div",{staticClass:"app-details__section"},[s("h4",[n._v(n._s(n.t("settings","Interact")))]),n._v(" "),s("div",{staticClass:"app-details__interact"},[s("NcButton",{attrs:{disabled:!n.app.bugs,href:null!==(t=n.app.bugs)&&void 0!==t?t:"#","aria-label":n.t("settings","Report a bug"),title:n.t("settings","Report a bug")},scopedSlots:n._u([{key:"icon",fn:function(){return[s("NcIconSvgWrapper",{attrs:{path:n.mdiBug}})]},proxy:!0}])}),n._v(" "),s("NcButton",{attrs:{disabled:!n.app.bugs,href:null!==(e=n.app.bugs)&&void 0!==e?e:"#","aria-label":n.t("settings","Request feature"),title:n.t("settings","Request feature")},scopedSlots:n._u([{key:"icon",fn:function(){return[s("NcIconSvgWrapper",{attrs:{path:n.mdiFeatureSearch}})]},proxy:!0}])}),n._v(" "),null!==(a=n.app.appstoreData)&&void 0!==a&&a.discussion?s("NcButton",{attrs:{href:n.app.appstoreData.discussion,"aria-label":n.t("settings","Ask questions or discuss"),title:n.t("settings","Ask questions or discuss")},scopedSlots:n._u([{key:"icon",fn:function(){return[s("NcIconSvgWrapper",{attrs:{path:n.mdiTooltipQuestion}})]},proxy:!0}],null,!1,1288192462)}):n._e(),n._v(" "),n.app.internal?n._e():s("NcButton",{attrs:{href:n.rateAppUrl,"aria-label":n.t("settings","Rate the app"),title:n.t("settings","Rate")},scopedSlots:n._u([{key:"icon",fn:function(){return[s("NcIconSvgWrapper",{attrs:{path:n.mdiStar}})]},proxy:!0}],null,!1,422450625)})],1)])])])}),[],!1,null,"24864562",null).exports,q=(0,s.pM)({__name:"AppReleasesTab",props:{app:null},setup(t){const e=t,a=(0,s.EW)((()=>{var t,a;return Object.values(null!==(t=null===(a=e.app.releases)||void 0===a||null===(a=a[0])||void 0===a?void 0:a.translations)&&void 0!==t?t:{}).some((t=>{let{changelog:e}=t;return!!e}))}));return{__sfc:!0,props:e,hasChangelog:a,createChangelogFromRelease:t=>{var e,a,n,s;return null!==(e=null!==(a=null===(n=t.translations)||void 0===n||null===(n=n[(0,i.Z0)()])||void 0===n?void 0:n.changelog)&&void 0!==a?a:null===(s=t.translations)||void 0===s||null===(s=s.en)||void 0===s?void 0:s.changelog)&&void 0!==e?e:""},mdiClockFast:d.NWU,t:i.Tl,NcAppSidebarTab:A.A,NcIconSvgWrapper:l.A,Markdown:D}}});var H=n(99992),j={};j.styleTagTransform=I(),j.setAttributes=w(),j.insert=y().bind(null,"head"),j.domAPI=f(),j.insertStyleElement=N(),C()(H.A,j),H.A&&H.A.locals&&H.A.locals;const K=(0,B.A)(q,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return a.hasChangelog?e(a.NcAppSidebarTab,{attrs:{id:"changelog",name:a.t("settings","Changelog"),order:2},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.mdiClockFast,size:24}})]},proxy:!0}],null,!1,1849836872)},[t._v(" "),t._l(t.app.releases,(function(n){return e("div",{key:n.version,staticClass:"app-sidebar-tabs__release"},[e("h2",[t._v(t._s(n.version))]),t._v(" "),e(a.Markdown,{staticClass:"app-sidebar-tabs__release-text",attrs:{text:a.createChangelogFromRelease(n)}})],1)}))],2):t._e()}),[],!1,null,"2261a93d",null).exports;var Q=n(63358),J=n(86438),Z=n(36620);const X=(0,s.pM)({__name:"AppStoreSidebar",setup(t){const e=(0,o.lq)(),a=(0,o.rd)(),n=(0,r.T)(),A=(0,s.EW)((()=>{var t;return null!==(t=e.params.id)&&void 0!==t?t:""})),u=(0,s.EW)((()=>n.getAppById(A.value))),g=(0,s.EW)((()=>{var t;return(null===(t=u.value.appstoreData)||void 0===t?void 0:t.ratingNumOverall)>5})),v=(0,s.EW)((()=>{var t,e,a;return(null===(t=u.value.appstoreData)||void 0===t?void 0:t.ratingNumRecent)>5?u.value.appstoreData.ratingRecent:null!==(e=null===(a=u.value.appstoreData)||void 0===a?void 0:a.ratingOverall)&&void 0!==e?e:.5})),m=(0,s.EW)((()=>null!==u.value)),{appIcon:h}=function(t){const e=(0,s.KR)(null),a=(0,s.EW)((()=>{var e,a,n;const s=null!==(e=[null!==(a=null===(n=t.value)||void 0===n?void 0:n.category)&&void 0!==a?a:[]].flat().map((t=>J.A[t])).filter((t=>!!t)).at(0))&&void 0!==e?e:d.CZ3;return s?'<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="'.concat(s,'" /></svg>'):null}));return(0,s.nT)((async()=>{var n;if(null!==(n=t.value)&&void 0!==n&&n.preview){e.value=null;try{const a=await window.fetch(t.value.preview),n=await a.blob(),s=await n.text();e.value=s.replaceAll(/fill="#(fff|ffffff)([a-z0-9]{1,2})?"/gi,'fill="currentColor"')}catch(t){e.value=a.value,Z.A.error("Could not load app icon",{error:t})}}else e.value=a.value})),{appIcon:e}}(u),C=(0,s.EW)((()=>u.value?(0,i.Tl)("settings","Version {version}, {license}-licensed",{version:u.value.version,license:u.value.licence.toString().toUpperCase()}):"")),b=(0,s.KR)("details");(0,s.wB)([u],(()=>{b.value="details"}));const f=(0,s.KR)(!1),_=(0,s.EW)((()=>{var t;return(null===(t=u.value)||void 0===t?void 0:t.screenshot)&&f.value})),y=()=>{var t,e;if(null!==(t=u.value)&&void 0!==t&&t.releases&&null!==(e=u.value)&&void 0!==e&&e.screenshot){const t=new Image;t.onload=()=>{f.value=!0},t.src=u.value.screenshot}};return(0,s.wB)([u],y),(0,s.sV)(y),{__sfc:!0,route:e,router:a,store:n,appId:A,app:u,hasRating:g,rating:v,showSidebar:m,appIcon:h,licenseText:C,activeTab:b,hideAppDetails:()=>{a.push({name:"apps-category",params:{category:e.params.category}})},screenshotLoaded:f,hasScreenshot:_,loadScreenshot:y,NcAppSidebar:p.N,NcIconSvgWrapper:l.A,AppScore:c.A,AppDescriptionTab:R,AppDetailsTab:V,AppReleasesTab:K,AppLevelBadge:Q.A}}});var tt=n(47275),et={};et.styleTagTransform=I(),et.setAttributes=w(),et.insert=y().bind(null,"head"),et.domAPI=f(),et.insertStyleElement=N(),C()(tt.A,et),tt.A&&tt.A.locals&&tt.A.locals;const at=(0,B.A)(X,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return a.showSidebar?e(a.NcAppSidebar,{staticClass:"app-sidebar",class:{"app-sidebar--with-screenshot":a.hasScreenshot},attrs:{active:a.activeTab,background:a.hasScreenshot?a.app.screenshot:void 0,compact:!a.hasScreenshot,name:a.app.name,title:a.app.name,subname:a.licenseText,subtitle:a.licenseText},on:{"update:active":function(t){a.activeTab=t},close:a.hideAppDetails},scopedSlots:t._u([a.hasScreenshot?null:{key:"header",fn:function(){var t;return[e(a.NcIconSvgWrapper,{staticClass:"app-sidebar__fallback-icon",attrs:{svg:null!==(t=a.appIcon)&&void 0!==t?t:"",size:64}})]},proxy:!0},{key:"description",fn:function(){return[e("div",{staticClass:"app-sidebar__badges"},[e(a.AppLevelBadge,{attrs:{level:a.app.level}}),t._v(" "),a.hasRating?e(a.AppScore,{attrs:{score:a.rating}}):t._e()],1)]},proxy:!0}],null,!0)},[t._v(" "),t._v(" "),e(a.AppDescriptionTab,{attrs:{app:a.app}}),t._v(" "),e(a.AppDetailsTab,{attrs:{app:a.app}}),t._v(" "),e(a.AppReleasesTab,{attrs:{app:a.app}})],1):t._e()}),[],!1,null,"31ecb666",null).exports}}]);
+//# sourceMappingURL=settings-apps-view-4529.js.map?v=1b1723a987a17d0d479e \ No newline at end of file
diff --git a/dist/settings-apps-view-4529.js.map b/dist/settings-apps-view-4529.js.map
index 97229d1ce7c..d6beda68158 100644
--- a/dist/settings-apps-view-4529.js.map
+++ b/dist/settings-apps-view-4529.js.map
@@ -1 +1 @@
-{"version":3,"file":"settings-apps-view-4529.js?v=cbb831939e1ecf715716","mappings":"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","sources":["webpack:///nextcloud/apps/settings/src/constants/AppsConstants.js","webpack:///nextcloud/apps/settings/src/service/rebuild-navigation.js","webpack:///nextcloud/apps/settings/src/mixins/AppManagement.js","webpack:///nextcloud/apps/settings/src/constants/AppstoreCategoryIcons.ts","webpack:///nextcloud/apps/settings/src/store/apps-store.ts","webpack:///nextcloud/apps/settings/src/components/AppList.vue?vue&type=style&index=0&id=73184220&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue?vue&type=style&index=0&id=0dbcb644&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppList/AppLevelBadge.vue?vue&type=style&index=0&id=3590dbeb&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue?vue&type=style&index=0&id=262838ca&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue?vue&type=style&index=0&id=fccce5ae&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?vue&type=style&index=0&id=24864562&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue?vue&type=style&index=0&id=2261a93d&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/Markdown.vue?vue&type=style&index=0&id=7c5c8e59&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/views/AppStoreSidebar.vue?vue&type=style&index=0&id=31ecb666&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue?vue&type=style&index=0&id=7d015114&prod&scoped=true&lang=css","webpack:///nextcloud/apps/settings/src/views/AppStore.vue?vue&type=style&index=0&id=a75d4530&prod&scoped=true&lang=css","webpack:///nextcloud/apps/settings/src/views/AppStoreNavigation.vue?vue&type=style&index=0&id=d15221f2&prod&scoped=true&lang=css","webpack:///nextcloud/apps/settings/src/components/AppList/AppLevelBadge.vue","webpack:///nextcloud/apps/settings/src/components/AppList/AppLevelBadge.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppList/AppLevelBadge.vue?d837","webpack://nextcloud/./apps/settings/src/components/AppList/AppLevelBadge.vue?74e8","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue?vue&type=script&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppList/AppScore.vue?4d91","webpack://nextcloud/./apps/settings/src/components/AppList/AppScore.vue?26fd","webpack:///nextcloud/apps/settings/src/views/AppStore.vue","webpack:///nextcloud/apps/settings/src/components/SvgFilterMixin.vue","webpack:///nextcloud/apps/settings/src/components/SvgFilterMixin.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/SvgFilterMixin.vue?5bcd","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?2f45","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?a9a1","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?af1e","webpack:///nextcloud/node_modules/p-limit/index.js","webpack:///nextcloud/apps/settings/src/components/AppList.vue","webpack:///nextcloud/apps/settings/src/components/AppList.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/AppList.vue?9f90","webpack://nextcloud/./apps/settings/src/components/AppList.vue?8acf","webpack://nextcloud/./apps/settings/src/components/AppList.vue?ee21","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue","webpack:///nextcloud/apps/settings/src/utils/appDiscoverTypeParser.ts","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue?677b","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue?0759","webpack:///nextcloud/apps/settings/src/views/AppStore.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/views/AppStore.vue?9deb","webpack://nextcloud/./apps/settings/src/views/AppStore.vue?47b2","webpack:///nextcloud/apps/settings/src/views/AppStoreNavigation.vue","webpack:///nextcloud/apps/settings/src/views/AppStoreNavigation.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/views/AppStoreNavigation.vue?b382","webpack://nextcloud/./apps/settings/src/views/AppStoreNavigation.vue?6e6f","webpack:///nextcloud/apps/settings/src/views/AppStoreSidebar.vue","webpack:///nextcloud/apps/settings/src/components/Markdown.vue","webpack:///nextcloud/apps/settings/src/components/Markdown.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/Markdown.vue?c49c","webpack://nextcloud/./apps/settings/src/components/Markdown.vue?26cf","webpack://nextcloud/./apps/settings/src/components/Markdown.vue?d299","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue?vue&type=script&setup=true&lang=ts","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue?4cfb","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue?311d","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?9ed4","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?b564","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?d4df","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue?vue&type=script&setup=true&lang=ts","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue?c0dd","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue?d492","webpack:///nextcloud/apps/settings/src/views/AppStoreSidebar.vue?vue&type=script&setup=true&lang=ts","webpack:///nextcloud/apps/settings/src/composables/useAppIcon.ts","webpack://nextcloud/./apps/settings/src/views/AppStoreSidebar.vue?99b3","webpack://nextcloud/./apps/settings/src/views/AppStoreSidebar.vue?5373"],"sourcesContent":["/**\n * @copyright 2022, Julia Kirschenheuter <julia.kirschenheuter@nextcloud.com>\n *\n * @author Julia Kirschenheuter <julia.kirschenheuter@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t } from '@nextcloud/l10n'\n\n/** Enum of verification constants, according to Apps */\nexport const APPS_SECTION_ENUM = Object.freeze({\n\tdiscover: t('settings', 'Discover'),\n\tinstalled: t('settings', 'Your apps'),\n\tenabled: t('settings', 'Active apps'),\n\tdisabled: t('settings', 'Disabled apps'),\n\tupdates: t('settings', 'Updates'),\n\t'app-bundles': t('settings', 'App bundles'),\n\tfeatured: t('settings', 'Featured apps'),\n\tsupported: t('settings', 'Supported apps'), // From subscription\n})\n","import axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { emit } from '@nextcloud/event-bus'\n\nexport default () => {\n\treturn axios.get(generateOcsUrl('core/navigation', 2) + '/apps?format=json')\n\t\t.then(({ data }) => {\n\t\t\tif (data.ocs.meta.statuscode !== 200) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\temit('nextcloud:app-menu.refresh', { apps: data.ocs.data })\n\t\t\twindow.dispatchEvent(new Event('resize'))\n\t\t})\n}\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { showError } from '@nextcloud/dialogs'\nimport rebuildNavigation from '../service/rebuild-navigation.js'\n\nexport default {\n\tcomputed: {\n\t\tappGroups() {\n\t\t\treturn this.app.groups.map(group => { return { id: group, name: group } })\n\t\t},\n\t\tinstalling() {\n\t\t\treturn this.$store.getters.loading('install')\n\t\t},\n\t\tisLoading() {\n\t\t\treturn this.app && this.$store.getters.loading(this.app.id)\n\t\t},\n\t\tenableButtonText() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'Download and enable')\n\t\t\t}\n\t\t\treturn t('settings', 'Enable')\n\t\t},\n\t\tforceEnableButtonText() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'Allow untested app')\n\t\t\t}\n\t\t\treturn t('settings', 'Allow untested app')\n\t\t},\n\t\tenableButtonTooltip() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'The app will be downloaded from the App Store')\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\t\tforceEnableButtonTooltip() {\n\t\t\tconst base = t('settings', 'This app is not marked as compatible with your Nextcloud version. If you continue you will still be able to install the app. Note that the app might not work as expected.')\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn base + ' ' + t('settings', 'The app will be downloaded from the App Store')\n\t\t\t}\n\t\t\treturn base\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tgroupCheckedAppsData: false,\n\t\t}\n\t},\n\n\tmounted() {\n\t\tif (this.app && this.app.groups && this.app.groups.length > 0) {\n\t\t\tthis.groupCheckedAppsData = true\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasyncFindGroup(query) {\n\t\t\treturn this.$store.dispatch('getGroups', { search: query, limit: 5, offset: 0 })\n\t\t},\n\t\tisLimitedToGroups(app) {\n\t\t\tif (this.app.groups.length || this.groupCheckedAppsData) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tsetGroupLimit() {\n\t\t\tif (!this.groupCheckedAppsData) {\n\t\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups: [] })\n\t\t\t}\n\t\t},\n\t\tcanLimitToGroups(app) {\n\t\t\tif ((app.types && app.types.includes('filesystem'))\n\t\t\t\t\t|| app.types.includes('prelogin')\n\t\t\t\t\t|| app.types.includes('authentication')\n\t\t\t\t\t|| app.types.includes('logging')\n\t\t\t\t\t|| app.types.includes('prevent_group_restriction')) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\t\taddGroupLimitation(groupArray) {\n\t\t\tconst group = groupArray.pop()\n\t\t\tconst groups = this.app.groups.concat([]).concat([group.id])\n\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups })\n\t\t},\n\t\tremoveGroupLimitation(group) {\n\t\t\tconst currentGroups = this.app.groups.concat([])\n\t\t\tconst index = currentGroups.indexOf(group.id)\n\t\t\tif (index > -1) {\n\t\t\t\tcurrentGroups.splice(index, 1)\n\t\t\t}\n\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups: currentGroups })\n\t\t},\n\t\tforceEnable(appId) {\n\t\t\tthis.$store.dispatch('forceEnableApp', { appId, groups: [] })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tenable(appId) {\n\t\t\tthis.$store.dispatch('enableApp', { appId, groups: [] })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tdisable(appId) {\n\t\t\tthis.$store.dispatch('disableApp', { appId })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tremove(appId) {\n\t\t\tthis.$store.dispatch('uninstallApp', { appId })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tinstall(appId) {\n\t\t\tthis.$store.dispatch('enableApp', { appId })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tupdate(appId) {\n\t\t\tthis.$store.dispatch('updateApp', { appId })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { mdiAccount, mdiAccountMultiple, mdiArchive, mdiCheck, mdiClipboardFlow, mdiClose, mdiCog, mdiControllerClassic, mdiDownload, mdiFileDocumentEdit, mdiFolder, mdiKey, mdiMagnify, mdiMonitorEye, mdiMultimedia, mdiOfficeBuilding, mdiOpenInApp, mdiSecurity, mdiStar, mdiStarCircleOutline, mdiStarShooting, mdiTools, mdiViewDashboard, } from '@mdi/js';\n/**\n * SVG paths used for appstore category icons\n */\nexport default Object.freeze({\n // system special categories\n discover: mdiStarCircleOutline,\n installed: mdiAccount,\n enabled: mdiCheck,\n disabled: mdiClose,\n bundles: mdiArchive,\n supported: mdiStarShooting,\n featured: mdiStar,\n updates: mdiDownload,\n // generic categories\n auth: mdiKey,\n customization: mdiCog,\n dashboard: mdiViewDashboard,\n files: mdiFolder,\n games: mdiControllerClassic,\n integration: mdiOpenInApp,\n monitoring: mdiMonitorEye,\n multimedia: mdiMultimedia,\n office: mdiFileDocumentEdit,\n organization: mdiOfficeBuilding,\n search: mdiMagnify,\n security: mdiSecurity,\n social: mdiAccountMultiple,\n tools: mdiTools,\n workflow: mdiClipboardFlow,\n});\n","/**\n * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { showError } from '@nextcloud/dialogs';\nimport { loadState } from '@nextcloud/initial-state';\nimport { translate as t } from '@nextcloud/l10n';\nimport { generateUrl } from '@nextcloud/router';\nimport { defineStore } from 'pinia';\nimport axios from '@nextcloud/axios';\nimport logger from '../logger';\nimport APPSTORE_CATEGORY_ICONS from '../constants/AppstoreCategoryIcons.ts';\nconst showApiError = () => showError(t('settings', 'An error occurred during the request. Unable to proceed.'));\nexport const useAppsStore = defineStore('settings-apps', {\n state: () => ({\n apps: [],\n categories: [],\n updateCount: loadState('settings', 'appstoreUpdateCount', 0),\n loading: {\n apps: false,\n categories: false,\n },\n loadingList: false,\n gettingCategoriesPromise: null,\n }),\n actions: {\n async loadCategories(force = false) {\n if (this.categories.length > 0 && !force) {\n return;\n }\n try {\n this.loading.categories = true;\n const { data: categories } = await axios.get(generateUrl('settings/apps/categories'));\n for (const category of categories) {\n category.icon = APPSTORE_CATEGORY_ICONS[category.id] ?? '';\n }\n this.$patch({\n categories,\n });\n }\n catch (error) {\n logger.error(error);\n showApiError();\n }\n finally {\n this.loading.categories = false;\n }\n },\n async loadApps(force = false) {\n if (this.apps.length > 0 && !force) {\n return;\n }\n try {\n this.loading.apps = true;\n const { data } = await axios.get(generateUrl('settings/apps/list'));\n this.$patch({\n apps: data.apps,\n });\n }\n catch (error) {\n logger.error(error);\n showApiError();\n }\n finally {\n this.loading.apps = false;\n }\n },\n getCategoryById(categoryId) {\n return this.categories.find(({ id }) => id === categoryId) ?? null;\n },\n getAppById(appId) {\n return this.apps.find(({ id }) => id === appId) ?? null;\n },\n },\n});\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.apps-list[data-v-73184220]{display:flex;flex-wrap:wrap;align-content:flex-start}.apps-list--move[data-v-73184220]{transition:transform 1s}.apps-list #app-list-update-all[data-v-73184220]{margin-left:10px}.apps-list__toolbar[data-v-73184220]{height:60px;padding:8px;padding-left:60px;width:100%;background-color:var(--color-main-background);position:sticky;top:0;z-index:1;display:flex;align-items:center}.apps-list--list-view[data-v-73184220]{margin-bottom:100px;position:relative}.apps-list__list-container[data-v-73184220]{width:100%}.apps-list__store-container[data-v-73184220]{display:flex;flex-wrap:wrap}.apps-list__bundle-heading[data-v-73184220]{display:flex;align-items:center;margin:20px 10px 20px 0}.apps-list__bundle-header[data-v-73184220]{margin:0 10px 0 50px;font-weight:bold;font-size:20px;line-height:30px;color:var(--color-text-light)}#apps-list-search .app-item h2[data-v-73184220]{margin-bottom:0}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppList.vue\"],\"names\":[],\"mappings\":\"AAIA,4BACC,YAAA,CACA,cAAA,CACA,wBAAA,CAGA,kCACC,uBAAA,CAGD,iDACC,gBAAA,CAGD,qCACC,WAjBe,CAkBf,WAnBgB,CAqBhB,iBApBe,CAqBf,UAAA,CACA,6CAAA,CACA,eAAA,CACA,KAAA,CACA,SAAA,CACA,YAAA,CACA,kBAAA,CAGD,uCACC,mBAAA,CAEA,iBAAA,CAGD,4CACC,UAAA,CAGD,6CACC,YAAA,CACA,cAAA,CAGD,4CACC,YAAA,CACA,kBAAA,CACA,uBAAA,CAGD,2CACC,oBAAA,CACA,gBAAA,CACA,cAAA,CACA,gBAAA,CACA,6BAAA,CAMA,gDACC,eAAA\",\"sourcesContent\":[\"\\n$toolbar-padding: 8px;\\n$toolbar-height: 44px + $toolbar-padding * 2;\\n\\n.apps-list {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\talign-content: flex-start;\\n\\n\\t// For transition group\\n\\t&--move {\\n\\t\\ttransition: transform 1s;\\n\\t}\\n\\n\\t#app-list-update-all {\\n\\t\\tmargin-left: 10px;\\n\\t}\\n\\n\\t&__toolbar {\\n\\t\\theight: $toolbar-height;\\n\\t\\tpadding: $toolbar-padding;\\n\\t\\t// Leave room for app-navigation-toggle\\n\\t\\tpadding-left: $toolbar-height;\\n\\t\\twidth: 100%;\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t\\tposition: sticky;\\n\\t\\ttop: 0;\\n\\t\\tz-index: 1;\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t}\\n\\n\\t&--list-view {\\n\\t\\tmargin-bottom: 100px;\\n\\t\\t// For positioning link overlay on rows\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t&__list-container {\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t&__store-container {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-wrap: wrap;\\n\\t}\\n\\n\\t&__bundle-heading {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\tmargin: 20px 10px 20px 0;\\n\\t}\\n\\n\\t&__bundle-header {\\n\\t\\tmargin: 0 10px 0 50px;\\n\\t\\tfont-weight: bold;\\n\\t\\tfont-size: 20px;\\n\\t\\tline-height: 30px;\\n\\t\\tcolor: var(--color-text-light);\\n\\t}\\n}\\n\\n#apps-list-search {\\n\\t.app-item {\\n\\t\\th2 {\\n\\t\\t\\tmargin-bottom: 0;\\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, `.app-item[data-v-0dbcb644]{position:relative}.app-item[data-v-0dbcb644]:hover{background-color:var(--color-background-dark)}.app-item--list-view[data-v-0dbcb644]{--app-item-padding: calc(var(--default-grid-baseline) * 2);--app-item-height: calc(var(--default-clickable-area) + var(--app-item-padding) * 2)}.app-item--list-view.app-item--selected[data-v-0dbcb644]{background-color:var(--color-background-dark)}.app-item--list-view>*[data-v-0dbcb644]{vertical-align:middle;border-bottom:1px solid var(--color-border);padding:var(--app-item-padding);height:var(--app-item-height)}.app-item--list-view .app-image[data-v-0dbcb644]{width:var(--default-clickable-area);height:auto;text-align:right}.app-item--list-view .app-image-icon svg[data-v-0dbcb644],.app-item--list-view .app-image-icon .icon-settings-dark[data-v-0dbcb644]{margin-top:5px;width:20px;height:20px;opacity:.5;background-size:cover;display:inline-block}.app-item--list-view .app-name[data-v-0dbcb644]{padding:0 var(--app-item-padding)}.app-item--list-view .app-name--link[data-v-0dbcb644]{height:var(--app-item-height);display:flex;align-items:center}.app-item--list-view .app-name--link[data-v-0dbcb644]::after{content:\"\";position:absolute;left:0;right:0;height:var(--app-item-height)}.app-item--list-view .app-actions[data-v-0dbcb644]{display:flex;gap:var(--app-item-padding);flex-wrap:wrap;justify-content:end}.app-item--list-view .app-actions .icon-loading-small[data-v-0dbcb644]{display:inline-block;top:4px;margin-right:10px}@media only screen and (max-width: 900px){.app-item--list-view .app-version[data-v-0dbcb644],.app-item--list-view .app-level[data-v-0dbcb644]{display:none}}@media only screen and (max-width: 512px){.app-item--list-view .app-actions[data-v-0dbcb644]{display:none}}.app-item--store-view[data-v-0dbcb644]{padding:30px}.app-item--store-view .app-image-icon .icon-settings-dark[data-v-0dbcb644]{width:100%;height:150px;background-size:45px;opacity:.5}.app-item--store-view .app-image-icon svg[data-v-0dbcb644]{position:absolute;bottom:43px;width:64px;height:64px;opacity:.1}.app-item--store-view .app-name[data-v-0dbcb644]{margin:5px 0}.app-item--store-view .app-name--link[data-v-0dbcb644]::after{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0}.app-item--store-view .app-actions[data-v-0dbcb644]{margin:10px 0}@media only screen and (min-width: 1601px){.app-item--store-view[data-v-0dbcb644]{width:25%}.app-item--store-view.app-item--with-sidebar[data-v-0dbcb644]{width:33%}}@media only screen and (max-width: 1600px){.app-item--store-view[data-v-0dbcb644]{width:25%}.app-item--store-view.app-item--with-sidebar[data-v-0dbcb644]{width:33%}}@media only screen and (max-width: 1400px){.app-item--store-view[data-v-0dbcb644]{width:33%}.app-item--store-view.app-item--with-sidebar[data-v-0dbcb644]{width:50%}}@media only screen and (max-width: 900px){.app-item--store-view[data-v-0dbcb644]{width:50%}.app-item--store-view.app-item--with-sidebar[data-v-0dbcb644]{width:100%}}@media only screen and (max-width: 1024px){.app-item--store-view[data-v-0dbcb644]{width:50%}}@media only screen and (max-width: 480px){.app-item--store-view[data-v-0dbcb644]{width:100%}}.app-icon[data-v-0dbcb644]{filter:var(--background-invert-if-bright)}.app-image[data-v-0dbcb644]{position:relative;height:150px;opacity:1;overflow:hidden}.app-image img[data-v-0dbcb644]{width:100%}.app-version[data-v-0dbcb644]{color:var(--color-text-maxcontrast)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppList/AppItem.vue\"],\"names\":[],\"mappings\":\"AAIA,2BACC,iBAAA,CAEA,iCACC,6CAAA,CAGD,sCACC,0DAAA,CACA,oFAAA,CAEA,yDACC,6CAAA,CAGD,wCACC,qBAAA,CACA,2CAAA,CACA,+BAAA,CACA,6BAAA,CAGD,iDACC,mCAAA,CACA,WAAA,CACA,gBAAA,CAGD,oIAEC,cAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CACA,qBAAA,CACA,oBAAA,CAGD,gDACC,iCAAA,CAGD,sDACC,6BAAA,CACA,YAAA,CACA,kBAAA,CAMD,6DACC,UAAA,CACA,iBAAA,CACA,MAAA,CACA,OAAA,CACA,6BAAA,CAGD,mDACC,YAAA,CACA,2BAAA,CACA,cAAA,CACA,mBAAA,CAEA,uEACC,oBAAA,CACA,OAAA,CACA,iBAAA,CAKF,0CACC,oGAEC,YAAA,CAAA,CAKF,0CACC,mDACC,YAAA,CAAA,CAKH,uCACC,YAAA,CAEA,2EACC,UAAA,CACA,YAAA,CACA,oBAAA,CACA,UAAA,CAGD,2DACC,iBAAA,CACA,WAAA,CAEA,UAAA,CACA,WAAA,CACA,UAAA,CAGD,iDACC,YAAA,CAGD,8DACC,UAAA,CACA,iBAAA,CACA,KAAA,CACA,MAAA,CACA,OAAA,CACA,QAAA,CAGD,oDACC,aAAA,CAGD,2CApCD,uCAqCE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,2CA5CD,uCA6CE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,2CApDD,uCAqDE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,0CA5DD,uCA6DE,SAAA,CAEA,8DACC,UAAA,CAAA,CAIF,2CApED,uCAqEE,SAAA,CAAA,CAGD,0CAxED,uCAyEE,UAAA,CAAA,CAKH,2BACC,yCAAA,CAGD,4BACC,iBAAA,CACA,YAAA,CACA,SAAA,CACA,eAAA,CAEA,gCACC,UAAA,CAIF,8BACC,mCAAA\",\"sourcesContent\":[\"\\n@use '../../../../../core/css/variables.scss' as variables;\\n@use 'sass:math';\\n\\n.app-item {\\n\\tposition: relative;\\n\\n\\t&:hover {\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t}\\n\\n\\t&--list-view {\\n\\t\\t--app-item-padding: calc(var(--default-grid-baseline) * 2);\\n\\t\\t--app-item-height: calc(var(--default-clickable-area) + var(--app-item-padding) * 2);\\n\\n\\t\\t&.app-item--selected {\\n\\t\\t\\tbackground-color: var(--color-background-dark);\\n\\t\\t}\\n\\n\\t\\t> * {\\n\\t\\t\\tvertical-align: middle;\\n\\t\\t\\tborder-bottom: 1px solid var(--color-border);\\n\\t\\t\\tpadding: var(--app-item-padding);\\n\\t\\t\\theight: var(--app-item-height);\\n\\t\\t}\\n\\n\\t\\t.app-image {\\n\\t\\t\\twidth: var(--default-clickable-area);\\n\\t\\t\\theight: auto;\\n\\t\\t\\ttext-align: right;\\n\\t\\t}\\n\\n\\t\\t.app-image-icon svg,\\n\\t\\t.app-image-icon .icon-settings-dark {\\n\\t\\t\\tmargin-top: 5px;\\n\\t\\t\\twidth: 20px;\\n\\t\\t\\theight: 20px;\\n\\t\\t\\topacity: .5;\\n\\t\\t\\tbackground-size: cover;\\n\\t\\t\\tdisplay: inline-block;\\n\\t\\t}\\n\\n\\t\\t.app-name {\\n\\t\\t\\tpadding: 0 var(--app-item-padding);\\n\\t\\t}\\n\\n\\t\\t.app-name--link {\\n\\t\\t\\theight: var(--app-item-height);\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\talign-items: center;\\n\\t\\t}\\n\\n\\t\\t// Note: because of Safari bug, we cannot position link overlay relative to the table row\\n\\t\\t// So we need to manually position it relative to the table container and cell\\n\\t\\t// See: https://bugs.webkit.org/show_bug.cgi?id=240961\\n\\t\\t.app-name--link::after {\\n\\t\\t\\tcontent: '';\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tleft: 0;\\n\\t\\t\\tright: 0;\\n\\t\\t\\theight: var(--app-item-height);\\n\\t\\t}\\n\\n\\t\\t.app-actions {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tgap: var(--app-item-padding);\\n\\t\\t\\tflex-wrap: wrap;\\n\\t\\t\\tjustify-content: end;\\n\\n\\t\\t\\t.icon-loading-small {\\n\\t\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\t\\ttop: 4px;\\n\\t\\t\\t\\tmargin-right: 10px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t/* hide app version and level on narrower screens */\\n\\t\\t@media only screen and (max-width: 900px) {\\n\\t\\t\\t.app-version,\\n\\t\\t\\t.app-level {\\n\\t\\t\\t\\tdisplay: none;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t/* Hide actions on a small screen. Click on app opens fill-screen sidebar with the buttons */\\n\\t\\t@media only screen and (max-width: math.div(variables.$breakpoint-mobile, 2)) {\\n\\t\\t\\t.app-actions {\\n\\t\\t\\t\\tdisplay: none;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&--store-view {\\n\\t\\tpadding: 30px;\\n\\n\\t\\t.app-image-icon .icon-settings-dark {\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\theight: 150px;\\n\\t\\t\\tbackground-size: 45px;\\n\\t\\t\\topacity: 0.5;\\n\\t\\t}\\n\\n\\t\\t.app-image-icon svg {\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tbottom: 43px;\\n\\t\\t\\t/* position halfway vertically */\\n\\t\\t\\twidth: 64px;\\n\\t\\t\\theight: 64px;\\n\\t\\t\\topacity: .1;\\n\\t\\t}\\n\\n\\t\\t.app-name {\\n\\t\\t\\tmargin: 5px 0;\\n\\t\\t}\\n\\n\\t\\t.app-name--link::after {\\n\\t\\t\\tcontent: '';\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\ttop: 0;\\n\\t\\t\\tleft: 0;\\n\\t\\t\\tright: 0;\\n\\t\\t\\tbottom: 0;\\n\\t\\t}\\n\\n\\t\\t.app-actions {\\n\\t\\t\\tmargin: 10px 0;\\n\\t\\t}\\n\\n\\t\\t@media only screen and (min-width: 1601px) {\\n\\t\\t\\twidth: 25%;\\n\\n\\t\\t\\t&.app-item--with-sidebar {\\n\\t\\t\\t\\twidth: 33%;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t@media only screen and (max-width: 1600px) {\\n\\t\\t\\twidth: 25%;\\n\\n\\t\\t\\t&.app-item--with-sidebar {\\n\\t\\t\\t\\twidth: 33%;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t@media only screen and (max-width: 1400px) {\\n\\t\\t\\twidth: 33%;\\n\\n\\t\\t\\t&.app-item--with-sidebar {\\n\\t\\t\\t\\twidth: 50%;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t@media only screen and (max-width: 900px) {\\n\\t\\t\\twidth: 50%;\\n\\n\\t\\t\\t&.app-item--with-sidebar {\\n\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t@media only screen and (max-width: variables.$breakpoint-mobile) {\\n\\t\\t\\twidth: 50%;\\n\\t\\t}\\n\\n\\t\\t@media only screen and (max-width: 480px) {\\n\\t\\t\\twidth: 100%;\\n\\t\\t}\\n\\t}\\n}\\n\\n.app-icon {\\n\\tfilter: var(--background-invert-if-bright);\\n}\\n\\n.app-image {\\n\\tposition: relative;\\n\\theight: 150px;\\n\\topacity: 1;\\n\\toverflow: hidden;\\n\\n\\timg {\\n\\t\\twidth: 100%;\\n\\t}\\n}\\n\\n.app-version {\\n\\tcolor: var(--color-text-maxcontrast);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-level-badge[data-v-3590dbeb]{color:var(--color-text-maxcontrast);background-color:rgba(0,0,0,0);border:1px solid var(--color-text-maxcontrast);border-radius:var(--border-radius);display:flex;flex-direction:row;gap:6px;padding:3px 6px;width:fit-content}.app-level-badge--supported[data-v-3590dbeb]{border-color:var(--color-success);color:var(--color-success)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppList/AppLevelBadge.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,mCAAA,CACA,8BAAA,CACA,8CAAA,CACA,kCAAA,CAEA,YAAA,CACA,kBAAA,CACA,OAAA,CACA,eAAA,CACA,iBAAA,CAEA,6CACC,iCAAA,CACA,0BAAA\",\"sourcesContent\":[\"\\n.app-level-badge {\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tbackground-color: transparent;\\n\\tborder: 1px solid var(--color-text-maxcontrast);\\n\\tborder-radius: var(--border-radius);\\n\\n\\tdisplay: flex;\\n\\tflex-direction: row;\\n\\tgap: 6px;\\n\\tpadding: 3px 6px;\\n\\twidth: fit-content;\\n\\n\\t&--supported {\\n\\t\\tborder-color: var(--color-success);\\n\\t\\tcolor: var(--color-success);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-discover[data-v-262838ca]{max-width:1008px;margin-inline:auto;padding-inline:54px;padding-block-end:var(--default-clickable-area, 44px);display:flex;flex-direction:column;gap:var(--default-clickable-area, 44px)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue\"],\"names\":[],\"mappings\":\"AACA,+BACC,gBAAA,CACA,kBAAA,CACA,mBAAA,CAEA,qDAAA,CAEA,YAAA,CACA,qBAAA,CACA,uCAAA\",\"sourcesContent\":[\"\\n.app-discover {\\n\\tmax-width: 1008px; /* 900px + 2x 54px padding for the carousel controls */\\n\\tmargin-inline: auto;\\n\\tpadding-inline: 54px;\\n\\t/* Padding required to make last element not bound to the bottom */\\n\\tpadding-block-end: var(--default-clickable-area, 44px);\\n\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: var(--default-clickable-area, 44px);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-description[data-v-fccce5ae]{padding:12px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,YAAA\",\"sourcesContent\":[\"\\n.app-description {\\n\\tpadding: 12px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-details[data-v-24864562]{padding:20px}.app-details__actions-manage[data-v-24864562]{display:flex}.app-details__actions-manage input[data-v-24864562]{flex:0 1 auto;min-width:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.app-details__authors[data-v-24864562]{color:var(--color-text-maxcontrast)}.app-details__section[data-v-24864562]{margin-top:15px}.app-details__section h4[data-v-24864562]{font-size:16px;font-weight:bold;margin-block-end:5px}.app-details__interact[data-v-24864562]{display:flex;flex-direction:row;flex-wrap:wrap;gap:12px}.app-details__documentation a[data-v-24864562]{text-decoration:underline}.app-details__documentation li[data-v-24864562]{padding-inline-start:20px}.app-details__documentation li[data-v-24864562]::before{width:5px;height:5px;border-radius:100%;background-color:var(--color-main-text);content:\"\";float:inline-start;margin-inline-start:-13px;position:relative;top:10px}.force[data-v-24864562]{color:var(--color-error);border-color:var(--color-error);background:var(--color-main-background)}.force[data-v-24864562]:hover,.force[data-v-24864562]:active{color:var(--color-main-background);border-color:var(--color-error) !important;background:var(--color-error)}.missing-dependencies[data-v-24864562]{list-style:initial;list-style-type:initial;list-style-position:inside}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue\"],\"names\":[],\"mappings\":\"AACA,8BACC,YAAA,CAIC,8CAEC,YAAA,CACA,oDACC,aAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,eAAA,CAIH,uCACC,mCAAA,CAGD,uCACC,eAAA,CAEA,0CACC,cAAA,CACA,gBAAA,CACA,oBAAA,CAIF,wCACC,YAAA,CACA,kBAAA,CACA,cAAA,CACA,QAAA,CAIA,+CACC,yBAAA,CAED,gDACC,yBAAA,CAEA,wDACC,SAAA,CACA,UAAA,CACA,kBAAA,CACA,uCAAA,CACA,UAAA,CACA,kBAAA,CACA,yBAAA,CACA,iBAAA,CACA,QAAA,CAMJ,wBACC,wBAAA,CACA,+BAAA,CACA,uCAAA,CAED,6DAEC,kCAAA,CACA,0CAAA,CACA,6BAAA,CAGD,uCACC,kBAAA,CACA,uBAAA,CACA,0BAAA\",\"sourcesContent\":[\"\\n.app-details {\\n\\tpadding: 20px;\\n\\n\\t&__actions {\\n\\t\\t// app management\\n\\t\\t&-manage {\\n\\t\\t\\t// if too many, shrink them and ellipsis\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tinput {\\n\\t\\t\\t\\tflex: 0 1 auto;\\n\\t\\t\\t\\tmin-width: 0;\\n\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t&__authors {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&__section {\\n\\t\\tmargin-top: 15px;\\n\\n\\t\\th4 {\\n\\t\\t\\tfont-size: 16px;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tmargin-block-end: 5px;\\n\\t\\t}\\n\\t}\\n\\n\\t&__interact {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: row;\\n\\t\\tflex-wrap: wrap;\\n\\t\\tgap: 12px;\\n\\t}\\n\\n\\t&__documentation {\\n\\t\\ta {\\n\\t\\t\\ttext-decoration: underline;\\n\\t\\t}\\n\\t\\tli {\\n\\t\\t\\tpadding-inline-start: 20px;\\n\\n\\t\\t\\t&::before {\\n\\t\\t\\t\\twidth: 5px;\\n\\t\\t\\t\\theight: 5px;\\n\\t\\t\\t\\tborder-radius: 100%;\\n\\t\\t\\t\\tbackground-color: var(--color-main-text);\\n\\t\\t\\t\\tcontent: \\\"\\\";\\n\\t\\t\\t\\tfloat: inline-start;\\n\\t\\t\\t\\tmargin-inline-start: -13px;\\n\\t\\t\\t\\tposition: relative;\\n\\t\\t\\t\\ttop: 10px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\n.force {\\n\\tcolor: var(--color-error);\\n\\tborder-color: var(--color-error);\\n\\tbackground: var(--color-main-background);\\n}\\n.force:hover,\\n.force:active {\\n\\tcolor: var(--color-main-background);\\n\\tborder-color: var(--color-error) !important;\\n\\tbackground: var(--color-error);\\n}\\n\\n.missing-dependencies {\\n\\tlist-style: initial;\\n\\tlist-style-type: initial;\\n\\tlist-style-position: inside;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-sidebar-tabs__release h2[data-v-2261a93d]{border-bottom:1px solid var(--color-border);font-size:24px}.app-sidebar-tabs__release-text[data-v-2261a93d] h3{font-size:20px}.app-sidebar-tabs__release-text[data-v-2261a93d] h4{font-size:17px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue\"],\"names\":[],\"mappings\":\"AAEC,+CACC,2CAAA,CACA,cAAA,CAKA,oDACC,cAAA,CAED,oDACC,cAAA\",\"sourcesContent\":[\"\\n.app-sidebar-tabs__release {\\n\\th2 {\\n\\t\\tborder-bottom: 1px solid var(--color-border);\\n\\t\\tfont-size: 24px;\\n\\t}\\n\\n\\t&-text {\\n\\t\\t// Overwrite changelog heading styles\\n\\t\\t:deep(h3) {\\n\\t\\t\\tfont-size: 20px;\\n\\t\\t}\\n\\t\\t:deep(h4) {\\n\\t\\t\\tfont-size: 17px;\\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, `.settings-markdown[data-v-7c5c8e59] h1,.settings-markdown[data-v-7c5c8e59] h2,.settings-markdown[data-v-7c5c8e59] h3,.settings-markdown[data-v-7c5c8e59] h4,.settings-markdown[data-v-7c5c8e59] h5,.settings-markdown[data-v-7c5c8e59] h6{font-weight:600;line-height:120%;margin-top:24px;margin-bottom:12px;color:var(--color-main-text)}.settings-markdown[data-v-7c5c8e59] h1{font-size:36px;margin-top:48px}.settings-markdown[data-v-7c5c8e59] h2{font-size:28px;margin-top:48px}.settings-markdown[data-v-7c5c8e59] h3{font-size:24px}.settings-markdown[data-v-7c5c8e59] h4{font-size:21px}.settings-markdown[data-v-7c5c8e59] h5{font-size:17px}.settings-markdown[data-v-7c5c8e59] h6{font-size:var(--default-font-size)}.settings-markdown[data-v-7c5c8e59] pre{white-space:pre;overflow-x:auto;background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:1em 1.3em;margin-bottom:1em}.settings-markdown[data-v-7c5c8e59] p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}.settings-markdown[data-v-7c5c8e59] li{position:relative}.settings-markdown[data-v-7c5c8e59] ul,.settings-markdown[data-v-7c5c8e59] ol{padding-left:10px;margin-left:10px}.settings-markdown[data-v-7c5c8e59] ul li{list-style-type:disc}.settings-markdown[data-v-7c5c8e59] ul>li>ul>li{list-style-type:circle}.settings-markdown[data-v-7c5c8e59] ul>li>ul>li ul li{list-style-type:square}.settings-markdown[data-v-7c5c8e59] blockquote{padding-left:1em;border-left:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-left:0;margin-right:0}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/Markdown.vue\"],\"names\":[],\"mappings\":\"AAGA,0OAMC,eAAA,CACA,gBAAA,CACA,eAAA,CACA,kBAAA,CACA,4BAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,kCAAA,CAGD,wCACC,eAAA,CACA,eAAA,CACA,6CAAA,CACA,kCAAA,CACA,iBAAA,CACA,iBAAA,CAGD,2CACC,6CAAA,CACA,kCAAA,CACA,iBAAA,CAGD,uCACC,iBAAA,CAGD,8EACC,iBAAA,CACA,gBAAA,CAGD,0CACC,oBAAA,CAGD,gDACC,sBAAA,CAGD,sDACC,sBAAA,CAGD,+CACC,gBAAA,CACA,kDAAA,CACA,mCAAA,CACA,aAAA,CACA,cAAA\",\"sourcesContent\":[\"\\n.settings-markdown::v-deep {\\n\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6 {\\n\\tfont-weight: 600;\\n\\tline-height: 120%;\\n\\tmargin-top: 24px;\\n\\tmargin-bottom: 12px;\\n\\tcolor: var(--color-main-text);\\n}\\n\\nh1 {\\n\\tfont-size: 36px;\\n\\tmargin-top: 48px;\\n}\\n\\nh2 {\\n\\tfont-size: 28px;\\n\\tmargin-top: 48px;\\n}\\n\\nh3 {\\n\\tfont-size: 24px;\\n}\\n\\nh4 {\\n\\tfont-size: 21px;\\n}\\n\\nh5 {\\n\\tfont-size: 17px;\\n}\\n\\nh6 {\\n\\tfont-size: var(--default-font-size);\\n}\\n\\npre {\\n\\twhite-space: pre;\\n\\toverflow-x: auto;\\n\\tbackground-color: var(--color-background-dark);\\n\\tborder-radius: var(--border-radius);\\n\\tpadding: 1em 1.3em;\\n\\tmargin-bottom: 1em;\\n}\\n\\np code {\\n\\tbackground-color: var(--color-background-dark);\\n\\tborder-radius: var(--border-radius);\\n\\tpadding: .1em .3em;\\n}\\n\\nli {\\n\\tposition: relative;\\n}\\n\\nul, ol {\\n\\tpadding-left: 10px;\\n\\tmargin-left: 10px;\\n}\\n\\nul li {\\n\\tlist-style-type: disc;\\n}\\n\\nul > li > ul > li {\\n\\tlist-style-type: circle;\\n}\\n\\nul > li > ul > li ul li {\\n\\tlist-style-type: square;\\n}\\n\\nblockquote {\\n\\tpadding-left: 1em;\\n\\tborder-left: 4px solid var(--color-primary-element);\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tmargin-left: 0;\\n\\tmargin-right: 0;\\n}\\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, `.app-sidebar--with-screenshot[data-v-31ecb666] .app-sidebar-header__figure{background-size:cover}.app-sidebar__fallback-icon[data-v-31ecb666]{width:100%;height:100%}.app-sidebar__badges[data-v-31ecb666]{display:flex;flex-direction:row;gap:12px}.app-sidebar__version[data-v-31ecb666]{color:var(--color-text-maxcontrast)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/AppStoreSidebar.vue\"],\"names\":[],\"mappings\":\"AAIE,2EACC,qBAAA,CAIF,6CAEC,UAAA,CACA,WAAA,CAGD,sCACC,YAAA,CACA,kBAAA,CACA,QAAA,CAGD,uCACC,mCAAA\",\"sourcesContent\":[\"\\n.app-sidebar {\\n\\t// If a screenshot is available it should cover the whole figure\\n\\t&--with-screenshot {\\n\\t\\t:deep(.app-sidebar-header__figure) {\\n\\t\\t\\tbackground-size: cover;\\n\\t\\t}\\n\\t}\\n\\n\\t&__fallback-icon {\\n\\t\\t// both 100% to center the icon\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t}\\n\\n\\t&__badges {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: row;\\n\\t\\tgap: 12px;\\n\\t}\\n\\n\\t&__version {\\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, `\n.app-score__wrapper[data-v-7d015114] {\n\tdisplay: inline-flex;\n\tcolor: var(--color-favorite, #a08b00);\n> *[data-v-7d015114] {\n\t\tvertical-align: text-bottom;\n}\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppList/AppScore.vue\"],\"names\":[],\"mappings\":\";AAiFA;CACA,oBAAA;CACA,qCAAA;AAEA;EACA,2BAAA;AACA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n - @author Ferdinand Thiessen <opensource@fthiessen.de>\\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<span role=\\\"img\\\"\\n\\t\\t:aria-label=\\\"title\\\"\\n\\t\\t:title=\\\"title\\\"\\n\\t\\tclass=\\\"app-score__wrapper\\\">\\n\\t\\t<NcIconSvgWrapper v-for=\\\"index in fullStars\\\"\\n\\t\\t\\t:key=\\\"`full-star-${index}`\\\"\\n\\t\\t\\t:path=\\\"mdiStar\\\"\\n\\t\\t\\tinline />\\n\\t\\t<NcIconSvgWrapper v-if=\\\"hasHalfStar\\\" :path=\\\"mdiStarHalfFull\\\" inline />\\n\\t\\t<NcIconSvgWrapper v-for=\\\"index in emptyStars\\\"\\n\\t\\t\\t:key=\\\"`empty-star-${index}`\\\"\\n\\t\\t\\t:path=\\\"mdiStarOutline\\\"\\n\\t\\t\\tinline />\\n\\t</span>\\n</template>\\n<script lang=\\\"ts\\\">\\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'\\nimport { mdiStar, mdiStarHalfFull, mdiStarOutline } from '@mdi/js'\\nimport { translate as t } from '@nextcloud/l10n'\\nimport { defineComponent } from 'vue'\\n\\nexport default defineComponent({\\n\\tname: 'AppScore',\\n\\tcomponents: {\\n\\t\\tNcIconSvgWrapper,\\n\\t},\\n\\tprops: {\\n\\t\\tscore: {\\n\\t\\t\\ttype: Number,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t},\\n\\tsetup() {\\n\\t\\treturn {\\n\\t\\t\\tmdiStar,\\n\\t\\t\\tmdiStarHalfFull,\\n\\t\\t\\tmdiStarOutline,\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\ttitle() {\\n\\t\\t\\tconst appScore = (this.score * 5).toFixed(1)\\n\\t\\t\\treturn t('settings', 'Community rating: {score}/5', { score: appScore })\\n\\t\\t},\\n\\t\\tfullStars() {\\n\\t\\t\\treturn Math.floor(this.score * 5 + 0.25)\\n\\t\\t},\\n\\t\\temptyStars() {\\n\\t\\t\\treturn Math.min(Math.floor((1 - this.score) * 5 + 0.25), 5 - this.fullStars)\\n\\t\\t},\\n\\t\\thasHalfStar() {\\n\\t\\t\\treturn (this.fullStars + this.emptyStars) < 5\\n\\t\\t},\\n\\t},\\n})\\n</script>\\n<style scoped>\\n.app-score__wrapper {\\n\\tdisplay: inline-flex;\\n\\tcolor: var(--color-favorite, #a08b00);\\n\\n\\t> * {\\n\\t\\tvertical-align: text-bottom;\\n\\t}\\n}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.empty-content__loading[data-v-a75d4530] {\n\theight: 100%;\n}\n.app-settings-content__label[data-v-a75d4530] {\n\tmargin-block-start: var(--app-navigation-padding);\n\tmargin-inline-start: calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2);\n\tmin-height: var(--default-clickable-area);\n\tline-height: var(--default-clickable-area);\n\tvertical-align: center;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/AppStore.vue\"],\"names\":[],\"mappings\":\";AAoFA;CACA,YAAA;AACA;AAEA;CACA,iDAAA;CACA,4FAAA;CACA,yCAAA;CACA,0CAAA;CACA,sBAAA;AACA\",\"sourcesContent\":[\"<!--\\n\\t- @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\\n\\t-\\n\\t- @author Julius Härtl <jus@bitgrid.net>\\n\\t- @author Ferdinand Thiessen <opensource@fthiessen.de>\\n\\t-\\n\\t- @license AGPL-3.0-or-later\\n\\t-\\n\\t- This program is free software: you can redistribute it and/or modify\\n\\t- it under the terms of the GNU Affero General Public License as\\n\\t- published by the Free Software Foundation, either version 3 of the\\n\\t- License, or (at your option) any later version.\\n\\t-\\n\\t- This program is distributed in the hope that it will be useful,\\n\\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\\n\\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n\\t- GNU Affero General Public License for more details.\\n\\t-\\n\\t- You should have received a copy of the GNU Affero General Public License\\n\\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\\n\\t-\\n\\t-->\\n\\n<template>\\n\\t<!-- Apps list -->\\n\\t<NcAppContent class=\\\"app-settings-content\\\"\\n\\t\\t:page-heading=\\\"appStoreLabel\\\">\\n\\t\\t<h2 class=\\\"app-settings-content__label\\\" v-text=\\\"viewLabel\\\" />\\n\\n\\t\\t<AppStoreDiscoverSection v-if=\\\"currentCategory === 'discover'\\\" />\\n\\t\\t<NcEmptyContent v-else-if=\\\"isLoading\\\"\\n\\t\\t\\tclass=\\\"empty-content__loading\\\"\\n\\t\\t\\t:name=\\\"t('settings', 'Loading app list')\\\">\\n\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t<NcLoadingIcon :size=\\\"64\\\" />\\n\\t\\t\\t</template>\\n\\t\\t</NcEmptyContent>\\n\\t\\t<AppList v-else :category=\\\"currentCategory\\\" />\\n\\t</NcAppContent>\\n</template>\\n\\n<script setup lang=\\\"ts\\\">\\nimport { translate as t } from '@nextcloud/l10n'\\nimport { computed, getCurrentInstance, onBeforeMount, watchEffect } from 'vue'\\nimport { useRoute } from 'vue-router/composables'\\n\\nimport { useAppsStore } from '../store/apps-store'\\nimport { APPS_SECTION_ENUM } from '../constants/AppsConstants'\\n\\nimport NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent.js'\\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\\nimport AppList from '../components/AppList.vue'\\nimport AppStoreDiscoverSection from '../components/AppStoreDiscover/AppStoreDiscoverSection.vue'\\n\\nconst route = useRoute()\\nconst store = useAppsStore()\\n\\n/**\\n * ID of the current active category, default is `discover`\\n */\\nconst currentCategory = computed(() => route.params?.category ?? 'discover')\\n\\nconst appStoreLabel = t('settings', 'App Store')\\nconst viewLabel = computed(() => APPS_SECTION_ENUM[currentCategory.value] ?? store.getCategoryById(currentCategory.value)?.displayName ?? appStoreLabel)\\n\\nwatchEffect(() => {\\n\\twindow.document.title = `${viewLabel.value} - ${appStoreLabel} - Nextcloud`\\n})\\n\\n// TODO this part should be migrated to pinia\\nconst instance = getCurrentInstance()\\n/** Is the app list loading */\\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\\nconst isLoading = computed(() => (instance?.proxy as any).$store.getters.loading('list'))\\nonBeforeMount(() => {\\n\\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\\n\\t(instance?.proxy as any).$store.dispatch('getCategories', { shouldRefetchCategories: true });\\n\\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\\n\\t(instance?.proxy as any).$store.dispatch('getAllApps')\\n})\\n</script>\\n\\n<style scoped>\\n.empty-content__loading {\\n\\theight: 100%;\\n}\\n\\n.app-settings-content__label {\\n\\tmargin-block-start: var(--app-navigation-padding);\\n\\tmargin-inline-start: calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2);\\n\\tmin-height: var(--default-clickable-area);\\n\\tline-height: var(--default-clickable-area);\\n\\tvertical-align: center;\\n}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n/* The categories-loading indicator */\n.categories--loading[data-v-d15221f2] {\n\tflex: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/AppStoreNavigation.vue\"],\"names\":[],\"mappings\":\";AAsIA,qCAAA;AACA;CACA,OAAA;CACA,aAAA;CACA,mBAAA;CACA,uBAAA;AACA\",\"sourcesContent\":[\"<template>\\n\\t<!-- Categories & filters -->\\n\\t<NcAppNavigation :aria-label=\\\"t('settings', 'Apps')\\\">\\n\\t\\t<template #list>\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-discover\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'discover'} }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.discover\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.discover\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-installed\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'installed'} }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.installed\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.installed\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-enabled\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'enabled' } }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.enabled\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.enabled\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-disabled\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'disabled' } }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.disabled\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.disabled\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t<NcAppNavigationItem v-if=\\\"updateCount > 0\\\"\\n\\t\\t\\t\\tid=\\\"app-category-updates\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'updates' } }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.updates\\\">\\n\\t\\t\\t\\t<template #counter>\\n\\t\\t\\t\\t\\t<NcCounterBubble>{{ updateCount }}</NcCounterBubble>\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.updates\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-your-bundles\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'app-bundles' } }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM['app-bundles']\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.bundles\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\n\\t\\t\\t<NcAppNavigationSpacer />\\n\\n\\t\\t\\t<!-- App store categories -->\\n\\t\\t\\t<li v-if=\\\"appstoreEnabled && categoriesLoading\\\" class=\\\"categories--loading\\\">\\n\\t\\t\\t\\t<NcLoadingIcon :size=\\\"20\\\" :aria-label=\\\"t('settings', 'Loading categories')\\\" />\\n\\t\\t\\t</li>\\n\\t\\t\\t<template v-else-if=\\\"appstoreEnabled && !categoriesLoading\\\">\\n\\t\\t\\t\\t<NcAppNavigationItem v-if=\\\"isSubscribed\\\"\\n\\t\\t\\t\\t\\tid=\\\"app-category-supported\\\"\\n\\t\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'supported' } }\\\"\\n\\t\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.supported\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.supported\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-featured\\\"\\n\\t\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'featured' } }\\\"\\n\\t\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.featured\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.featured\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t</NcAppNavigationItem>\\n\\n\\t\\t\\t\\t<NcAppNavigationItem v-for=\\\"category in categories\\\"\\n\\t\\t\\t\\t\\t:id=\\\"`app-category-${category.id}`\\\"\\n\\t\\t\\t\\t\\t:key=\\\"category.id\\\"\\n\\t\\t\\t\\t\\t:name=\\\"category.displayName\\\"\\n\\t\\t\\t\\t\\t:to=\\\"{\\n\\t\\t\\t\\t\\t\\tname: 'apps-category',\\n\\t\\t\\t\\t\\t\\tparams: { category: category.id },\\n\\t\\t\\t\\t\\t}\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"category.icon\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t</template>\\n\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-developer-docs\\\"\\n\\t\\t\\t\\t:name=\\\"t('settings', 'Developer documentation ↗')\\\"\\n\\t\\t\\t\\t:href=\\\"developerDocsUrl\\\" />\\n\\t\\t</template>\\n\\t</NcAppNavigation>\\n</template>\\n\\n<script setup lang=\\\"ts\\\">\\nimport { loadState } from '@nextcloud/initial-state'\\nimport { translate as t } from '@nextcloud/l10n'\\nimport { computed, onBeforeMount } from 'vue'\\nimport { APPS_SECTION_ENUM } from '../constants/AppsConstants'\\nimport { useAppsStore } from '../store/apps-store'\\n\\nimport NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js'\\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\\nimport NcAppNavigationSpacer from '@nextcloud/vue/dist/Components/NcAppNavigationSpacer.js'\\nimport NcCounterBubble from '@nextcloud/vue/dist/Components/NcCounterBubble.js'\\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'\\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\\n\\nimport APPSTORE_CATEGORY_ICONS from '../constants/AppstoreCategoryIcons.ts'\\n\\nconst updateCount = loadState<number>('settings', 'appstoreUpdateCount', 0)\\nconst appstoreEnabled = loadState<boolean>('settings', 'appstoreEnabled', true)\\nconst developerDocsUrl = loadState<string>('settings', 'appstoreDeveloperDocs', '')\\n\\nconst store = useAppsStore()\\nconst categories = computed(() => store.categories)\\nconst categoriesLoading = computed(() => store.loading.categories)\\n\\n/**\\n * Check if the current instance has a support subscription from the Nextcloud GmbH\\n *\\n * For customers of the Nextcloud GmbH the app level will be set to `300` for apps that are supported in their subscription\\n */\\nconst isSubscribed = computed(() => store.apps.find(({ level }) => level === 300) !== undefined)\\n\\n// load categories when component is mounted\\nonBeforeMount(() => {\\n\\tstore.loadCategories()\\n\\tstore.loadApps()\\n})\\n</script>\\n\\n<style scoped>\\n/* The categories-loading indicator */\\n.categories--loading {\\n\\tflex: 1;\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return (_setup.isSupported || _setup.isFeatured)?_c('span',{staticClass:\"app-level-badge\",class:{ 'app-level-badge--supported': _setup.isSupported },attrs:{\"title\":_setup.badgeTitle}},[_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.badgeIcon,\"size\":20,\"inline\":\"\"}}),_vm._v(\"\\n\\t\"+_vm._s(_setup.badgeText)+\"\\n\")],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLevelBadge.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLevelBadge.vue?vue&type=script&setup=true&lang=ts\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLevelBadge.vue?vue&type=style&index=0&id=3590dbeb&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!./AppLevelBadge.vue?vue&type=style&index=0&id=3590dbeb&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppLevelBadge.vue?vue&type=template&id=3590dbeb&scoped=true\"\nimport script from \"./AppLevelBadge.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppLevelBadge.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppLevelBadge.vue?vue&type=style&index=0&id=3590dbeb&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 \"3590dbeb\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('span',{staticClass:\"app-score__wrapper\",attrs:{\"role\":\"img\",\"aria-label\":_vm.title,\"title\":_vm.title}},[_vm._l((_vm.fullStars),function(index){return _c('NcIconSvgWrapper',{key:`full-star-${index}`,attrs:{\"path\":_vm.mdiStar,\"inline\":\"\"}})}),_vm._v(\" \"),(_vm.hasHalfStar)?_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiStarHalfFull,\"inline\":\"\"}}):_vm._e(),_vm._v(\" \"),_vm._l((_vm.emptyStars),function(index){return _c('NcIconSvgWrapper',{key:`empty-star-${index}`,attrs:{\"path\":_vm.mdiStarOutline,\"inline\":\"\"}})})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=script&lang=ts\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=style&index=0&id=7d015114&prod&scoped=true&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=style&index=0&id=7d015114&prod&scoped=true&lang=css\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppScore.vue?vue&type=template&id=7d015114&scoped=true\"\nimport script from \"./AppScore.vue?vue&type=script&lang=ts\"\nexport * from \"./AppScore.vue?vue&type=script&lang=ts\"\nimport style0 from \"./AppScore.vue?vue&type=style&index=0&id=7d015114&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7d015114\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_setup.NcAppContent,{staticClass:\"app-settings-content\",attrs:{\"page-heading\":_setup.appStoreLabel}},[_c('h2',{staticClass:\"app-settings-content__label\",domProps:{\"textContent\":_vm._s(_setup.viewLabel)}}),_vm._v(\" \"),(_setup.currentCategory === 'discover')?_c(_setup.AppStoreDiscoverSection):(_setup.isLoading)?_c(_setup.NcEmptyContent,{staticClass:\"empty-content__loading\",attrs:{\"name\":_setup.t('settings', 'Loading app list')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcLoadingIcon,{attrs:{\"size\":64}})]},proxy:true}])}):_c(_setup.AppList,{attrs:{\"category\":_setup.currentCategory}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<script>\nexport default {\n\tname: 'SvgFilterMixin',\n\tdata() {\n\t\treturn {\n\t\t\tfilterId: '',\n\t\t}\n\t},\n\tcomputed: {\n\t\tfilterUrl() {\n\t\t\treturn `url(#${this.filterId})`\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.filterId = 'invertIconApps-' + Math.random().toString(36).substring(2)\n\t},\n}\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SvgFilterMixin.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SvgFilterMixin.vue?vue&type=script&lang=js\"","var render, staticRenderFns\nimport script from \"./SvgFilterMixin.vue?vue&type=script&lang=js\"\nexport * from \"./SvgFilterMixin.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<component :is=\"listView ? `tr` : `li`\"\n\t\tclass=\"app-item\"\n\t\t:class=\"{\n\t\t\t'app-item--list-view': listView,\n\t\t\t'app-item--store-view': !listView,\n\t\t\t'app-item--selected': isSelected,\n\t\t\t'app-item--with-sidebar': withSidebar,\n\t\t}\">\n\t\t<component :is=\"dataItemTag\"\n\t\t\tclass=\"app-image app-image-icon\"\n\t\t\t:headers=\"getDataItemHeaders(`app-table-col-icon`)\">\n\t\t\t<div v-if=\"(listView && !app.preview) || (!listView && !screenshotLoaded)\" class=\"icon-settings-dark\" />\n\n\t\t\t<svg v-else-if=\"listView && app.preview\"\n\t\t\t\twidth=\"32\"\n\t\t\t\theight=\"32\"\n\t\t\t\tviewBox=\"0 0 32 32\">\n\t\t\t\t<image x=\"0\"\n\t\t\t\t\ty=\"0\"\n\t\t\t\t\twidth=\"32\"\n\t\t\t\t\theight=\"32\"\n\t\t\t\t\tpreserveAspectRatio=\"xMinYMin meet\"\n\t\t\t\t\t:xlink:href=\"app.preview\"\n\t\t\t\t\tclass=\"app-icon\" />\n\t\t\t</svg>\n\n\t\t\t<img v-if=\"!listView && app.screenshot && screenshotLoaded\" :src=\"app.screenshot\" alt=\"\">\n\t\t</component>\n\t\t<component :is=\"dataItemTag\"\n\t\t\tclass=\"app-name\"\n\t\t\t:headers=\"getDataItemHeaders(`app-table-col-name`)\">\n\t\t\t<router-link class=\"app-name--link\"\n\t\t\t\t:to=\"{\n\t\t\t\t\tname: 'apps-details',\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tcategory: category,\n\t\t\t\t\t\tid: app.id\n\t\t\t\t\t},\n\t\t\t\t}\"\n\t\t\t\t:aria-label=\"t('settings', 'Show details for {appName} app', { appName:app.name })\">\n\t\t\t\t{{ app.name }}\n\t\t\t</router-link>\n\t\t</component>\n\t\t<component :is=\"dataItemTag\"\n\t\t\tv-if=\"!listView\"\n\t\t\tclass=\"app-summary\"\n\t\t\t:headers=\"getDataItemHeaders(`app-version`)\">\n\t\t\t{{ app.summary }}\n\t\t</component>\n\t\t<component :is=\"dataItemTag\"\n\t\t\tv-if=\"listView\"\n\t\t\tclass=\"app-version\"\n\t\t\t:headers=\"getDataItemHeaders(`app-table-col-version`)\">\n\t\t\t<span v-if=\"app.version\">{{ app.version }}</span>\n\t\t\t<span v-else-if=\"app.appstoreData.releases[0].version\">{{ app.appstoreData.releases[0].version }}</span>\n\t\t</component>\n\n\t\t<component :is=\"dataItemTag\" :headers=\"getDataItemHeaders(`app-table-col-level`)\" class=\"app-level\">\n\t\t\t<AppLevelBadge :level=\"app.level\" />\n\t\t\t<AppScore v-if=\"hasRating && !listView\" :score=\"app.score\" />\n\t\t</component>\n\t\t<component :is=\"dataItemTag\" :headers=\"getDataItemHeaders(`app-table-col-actions`)\" class=\"app-actions\">\n\t\t\t<div v-if=\"app.error\" class=\"warning\">\n\t\t\t\t{{ app.error }}\n\t\t\t</div>\n\t\t\t<div v-if=\"isLoading\" class=\"icon icon-loading-small\" />\n\t\t\t<NcButton v-if=\"app.update\"\n\t\t\t\ttype=\"primary\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"update(app.id)\">\n\t\t\t\t{{ t('settings', 'Update to {update}', {update:app.update}) }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"app.canUnInstall\"\n\t\t\t\tclass=\"uninstall\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"remove(app.id)\">\n\t\t\t\t{{ t('settings', 'Remove') }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"app.active\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"disable(app.id)\">\n\t\t\t\t{{ t('settings','Disable') }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"!app.active && (app.canInstall || app.isCompatible)\"\n\t\t\t\t:title=\"enableButtonTooltip\"\n\t\t\t\t:aria-label=\"enableButtonTooltip\"\n\t\t\t\ttype=\"primary\"\n\t\t\t\t:disabled=\"!app.canInstall || installing || isLoading\"\n\t\t\t\t@click.stop=\"enable(app.id)\">\n\t\t\t\t{{ enableButtonText }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-else-if=\"!app.active\"\n\t\t\t\t:title=\"forceEnableButtonTooltip\"\n\t\t\t\t:aria-label=\"forceEnableButtonTooltip\"\n\t\t\t\ttype=\"secondary\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"forceEnable(app.id)\">\n\t\t\t\t{{ forceEnableButtonText }}\n\t\t\t</NcButton>\n\t\t</component>\n\t</component>\n</template>\n\n<script>\nimport AppScore from './AppScore.vue'\nimport AppLevelBadge from './AppLevelBadge.vue'\nimport AppManagement from '../../mixins/AppManagement.js'\nimport SvgFilterMixin from '../SvgFilterMixin.vue'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\n\nexport default {\n\tname: 'AppItem',\n\tcomponents: {\n\t\tAppLevelBadge,\n\t\tAppScore,\n\t\tNcButton,\n\t},\n\tmixins: [AppManagement, SvgFilterMixin],\n\tprops: {\n\t\tapp: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tcategory: {},\n\t\tlistView: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tuseBundleView: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\theaders: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisSelected: false,\n\t\t\tscrolled: false,\n\t\t\tscreenshotLoaded: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\thasRating() {\n\t\t\treturn this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5\n\t\t},\n\t\tdataItemTag() {\n\t\t\treturn this.listView ? 'td' : 'div'\n\t\t},\n\t\twithSidebar() {\n\t\t\treturn !!this.$route.params.id\n\t\t},\n\t},\n\twatch: {\n\t\t'$route.params.id'(id) {\n\t\t\tthis.isSelected = (this.app.id === id)\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.isSelected = (this.app.id === this.$route.params.id)\n\t\tif (this.app.releases && this.app.screenshot) {\n\t\t\tconst image = new Image()\n\t\t\timage.onload = () => {\n\t\t\t\tthis.screenshotLoaded = true\n\t\t\t}\n\t\t\timage.src = this.app.screenshot\n\t\t}\n\t},\n\twatchers: {\n\n\t},\n\tmethods: {\n\t\tprefix(prefix, content) {\n\t\t\treturn prefix + '_' + content\n\t\t},\n\n\t\tgetDataItemHeaders(columnName) {\n\t\t\treturn this.useBundleView ? [this.headers, columnName].join(' ') : null\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n@use '../../../../../core/css/variables.scss' as variables;\n@use 'sass:math';\n\n.app-item {\n\tposition: relative;\n\n\t&:hover {\n\t\tbackground-color: var(--color-background-dark);\n\t}\n\n\t&--list-view {\n\t\t--app-item-padding: calc(var(--default-grid-baseline) * 2);\n\t\t--app-item-height: calc(var(--default-clickable-area) + var(--app-item-padding) * 2);\n\n\t\t&.app-item--selected {\n\t\t\tbackground-color: var(--color-background-dark);\n\t\t}\n\n\t\t> * {\n\t\t\tvertical-align: middle;\n\t\t\tborder-bottom: 1px solid var(--color-border);\n\t\t\tpadding: var(--app-item-padding);\n\t\t\theight: var(--app-item-height);\n\t\t}\n\n\t\t.app-image {\n\t\t\twidth: var(--default-clickable-area);\n\t\t\theight: auto;\n\t\t\ttext-align: right;\n\t\t}\n\n\t\t.app-image-icon svg,\n\t\t.app-image-icon .icon-settings-dark {\n\t\t\tmargin-top: 5px;\n\t\t\twidth: 20px;\n\t\t\theight: 20px;\n\t\t\topacity: .5;\n\t\t\tbackground-size: cover;\n\t\t\tdisplay: inline-block;\n\t\t}\n\n\t\t.app-name {\n\t\t\tpadding: 0 var(--app-item-padding);\n\t\t}\n\n\t\t.app-name--link {\n\t\t\theight: var(--app-item-height);\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t// Note: because of Safari bug, we cannot position link overlay relative to the table row\n\t\t// So we need to manually position it relative to the table container and cell\n\t\t// See: https://bugs.webkit.org/show_bug.cgi?id=240961\n\t\t.app-name--link::after {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\theight: var(--app-item-height);\n\t\t}\n\n\t\t.app-actions {\n\t\t\tdisplay: flex;\n\t\t\tgap: var(--app-item-padding);\n\t\t\tflex-wrap: wrap;\n\t\t\tjustify-content: end;\n\n\t\t\t.icon-loading-small {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\ttop: 4px;\n\t\t\t\tmargin-right: 10px;\n\t\t\t}\n\t\t}\n\n\t\t/* hide app version and level on narrower screens */\n\t\t@media only screen and (max-width: 900px) {\n\t\t\t.app-version,\n\t\t\t.app-level {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\n\t\t/* Hide actions on a small screen. Click on app opens fill-screen sidebar with the buttons */\n\t\t@media only screen and (max-width: math.div(variables.$breakpoint-mobile, 2)) {\n\t\t\t.app-actions {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t&--store-view {\n\t\tpadding: 30px;\n\n\t\t.app-image-icon .icon-settings-dark {\n\t\t\twidth: 100%;\n\t\t\theight: 150px;\n\t\t\tbackground-size: 45px;\n\t\t\topacity: 0.5;\n\t\t}\n\n\t\t.app-image-icon svg {\n\t\t\tposition: absolute;\n\t\t\tbottom: 43px;\n\t\t\t/* position halfway vertically */\n\t\t\twidth: 64px;\n\t\t\theight: 64px;\n\t\t\topacity: .1;\n\t\t}\n\n\t\t.app-name {\n\t\t\tmargin: 5px 0;\n\t\t}\n\n\t\t.app-name--link::after {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\tbottom: 0;\n\t\t}\n\n\t\t.app-actions {\n\t\t\tmargin: 10px 0;\n\t\t}\n\n\t\t@media only screen and (min-width: 1601px) {\n\t\t\twidth: 25%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 33%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: 1600px) {\n\t\t\twidth: 25%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 33%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: 1400px) {\n\t\t\twidth: 33%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 50%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: 900px) {\n\t\t\twidth: 50%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: variables.$breakpoint-mobile) {\n\t\t\twidth: 50%;\n\t\t}\n\n\t\t@media only screen and (max-width: 480px) {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n}\n\n.app-icon {\n\tfilter: var(--background-invert-if-bright);\n}\n\n.app-image {\n\tposition: relative;\n\theight: 150px;\n\topacity: 1;\n\toverflow: hidden;\n\n\timg {\n\t\twidth: 100%;\n\t}\n}\n\n.app-version {\n\tcolor: var(--color-text-maxcontrast);\n}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=script&lang=js\"","\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!./AppItem.vue?vue&type=style&index=0&id=0dbcb644&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!./AppItem.vue?vue&type=style&index=0&id=0dbcb644&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppItem.vue?vue&type=template&id=0dbcb644&scoped=true\"\nimport script from \"./AppItem.vue?vue&type=script&lang=js\"\nexport * from \"./AppItem.vue?vue&type=script&lang=js\"\nimport style0 from \"./AppItem.vue?vue&type=style&index=0&id=0dbcb644&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 \"0dbcb644\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.listView ? `tr` : `li`,{tag:\"component\",staticClass:\"app-item\",class:{\n\t\t'app-item--list-view': _vm.listView,\n\t\t'app-item--store-view': !_vm.listView,\n\t\t'app-item--selected': _vm.isSelected,\n\t\t'app-item--with-sidebar': _vm.withSidebar,\n\t}},[_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-image app-image-icon\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-table-col-icon`)}},[((_vm.listView && !_vm.app.preview) || (!_vm.listView && !_vm.screenshotLoaded))?_c('div',{staticClass:\"icon-settings-dark\"}):(_vm.listView && _vm.app.preview)?_c('svg',{attrs:{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"0 0 32 32\"}},[_c('image',{staticClass:\"app-icon\",attrs:{\"x\":\"0\",\"y\":\"0\",\"width\":\"32\",\"height\":\"32\",\"preserveAspectRatio\":\"xMinYMin meet\",\"xlink:href\":_vm.app.preview}})]):_vm._e(),_vm._v(\" \"),(!_vm.listView && _vm.app.screenshot && _vm.screenshotLoaded)?_c('img',{attrs:{\"src\":_vm.app.screenshot,\"alt\":\"\"}}):_vm._e()]),_vm._v(\" \"),_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-name\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-table-col-name`)}},[_c('router-link',{staticClass:\"app-name--link\",attrs:{\"to\":{\n\t\t\t\tname: 'apps-details',\n\t\t\t\tparams: {\n\t\t\t\t\tcategory: _vm.category,\n\t\t\t\t\tid: _vm.app.id\n\t\t\t\t},\n\t\t\t},\"aria-label\":_vm.t('settings', 'Show details for {appName} app', { appName:_vm.app.name })}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.app.name)+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(!_vm.listView)?_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-summary\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-version`)}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.app.summary)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.listView)?_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-version\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-table-col-version`)}},[(_vm.app.version)?_c('span',[_vm._v(_vm._s(_vm.app.version))]):(_vm.app.appstoreData.releases[0].version)?_c('span',[_vm._v(_vm._s(_vm.app.appstoreData.releases[0].version))]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-level\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-table-col-level`)}},[_c('AppLevelBadge',{attrs:{\"level\":_vm.app.level}}),_vm._v(\" \"),(_vm.hasRating && !_vm.listView)?_c('AppScore',{attrs:{\"score\":_vm.app.score}}):_vm._e()],1),_vm._v(\" \"),_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-actions\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-table-col-actions`)}},[(_vm.app.error)?_c('div',{staticClass:\"warning\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.app.error)+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.isLoading)?_c('div',{staticClass:\"icon icon-loading-small\"}):_vm._e(),_vm._v(\" \"),(_vm.app.update)?_c('NcButton',{attrs:{\"type\":\"primary\",\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.update(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Update to {update}', {update:_vm.app.update}))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.app.canUnInstall)?_c('NcButton',{staticClass:\"uninstall\",attrs:{\"type\":\"tertiary\",\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.remove(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Remove'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.app.active)?_c('NcButton',{attrs:{\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.disable(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings','Disable'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(!_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible))?_c('NcButton',{attrs:{\"title\":_vm.enableButtonTooltip,\"aria-label\":_vm.enableButtonTooltip,\"type\":\"primary\",\"disabled\":!_vm.app.canInstall || _vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.enable(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.enableButtonText)+\"\\n\\t\\t\")]):(!_vm.app.active)?_c('NcButton',{attrs:{\"title\":_vm.forceEnableButtonTooltip,\"aria-label\":_vm.forceEnableButtonTooltip,\"type\":\"secondary\",\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.forceEnable(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.forceEnableButtonText)+\"\\n\\t\\t\")]):_vm._e()],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tif (queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t}\n\t};\n\n\tconst run = async (fn, resolve, args) => {\n\t\tactiveCount++;\n\n\t\tconst result = (async () => fn(...args))();\n\n\t\tresolve(result);\n\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\tnext();\n\t};\n\n\tconst enqueue = (fn, resolve, args) => {\n\t\tqueue.enqueue(run.bind(undefined, fn, resolve, args));\n\n\t\t(async () => {\n\t\t\t// This function needs to wait until the next microtask before comparing\n\t\t\t// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously\n\t\t\t// when the run function is dequeued and called. The comparison in the if-statement\n\t\t\t// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.\n\t\t\tawait Promise.resolve();\n\n\t\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\t\tqueue.dequeue()();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (fn, ...args) => new Promise(resolve => {\n\t\tenqueue(fn, resolve, args);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue: () => {\n\t\t\t\tqueue.clear();\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div id=\"app-content-inner\">\n\t\t<div id=\"apps-list\"\n\t\t\tclass=\"apps-list\"\n\t\t\t:class=\"{\n\t\t\t\t'apps-list--list-view': (useBundleView || useListView),\n\t\t\t\t'apps-list--store-view': useAppStoreView,\n\t\t\t}\">\n\t\t\t<template v-if=\"useListView\">\n\t\t\t\t<div v-if=\"showUpdateAll\" class=\"apps-list__toolbar\">\n\t\t\t\t\t{{ n('settings', '%n app has an update available', '%n apps have an update available', counter) }}\n\t\t\t\t\t<NcButton v-if=\"showUpdateAll\"\n\t\t\t\t\t\tid=\"app-list-update-all\"\n\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\t@click=\"updateAll\">\n\t\t\t\t\t\t{{ n('settings', 'Update', 'Update all', counter) }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\n\t\t\t\t<div v-if=\"!showUpdateAll\" class=\"apps-list__toolbar\">\n\t\t\t\t\t{{ t('settings', 'All apps are up-to-date.') }}\n\t\t\t\t</div>\n\n\t\t\t\t<TransitionGroup name=\"apps-list\" tag=\"table\" class=\"apps-list__list-container\">\n\t\t\t\t\t<tr key=\"app-list-view-header\">\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Icon') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Name') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Version') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Level') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Actions') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<AppItem v-for=\"app in apps\"\n\t\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\" />\n\t\t\t\t</TransitionGroup>\n\t\t\t</template>\n\n\t\t\t<table v-if=\"useBundleView\"\n\t\t\t\tclass=\"apps-list__list-container\">\n\t\t\t\t<tr key=\"app-list-view-header\">\n\t\t\t\t\t<th id=\"app-table-col-icon\">\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Icon') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t\t<th id=\"app-table-col-name\">\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Name') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t\t<th id=\"app-table-col-version\">\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Version') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t\t<th id=\"app-table-col-level\">\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Level') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t\t<th id=\"app-table-col-actions\">\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Actions') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t</tr>\n\t\t\t\t<template v-for=\"bundle in bundles\">\n\t\t\t\t\t<tr :key=\"bundle.id\">\n\t\t\t\t\t\t<th :id=\"`app-table-rowgroup-${bundle.id}`\" colspan=\"5\" scope=\"rowgroup\">\n\t\t\t\t\t\t\t<div class=\"apps-list__bundle-heading\">\n\t\t\t\t\t\t\t\t<span class=\"apps-list__bundle-header\">\n\t\t\t\t\t\t\t\t\t{{ bundle.name }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<NcButton type=\"secondary\" @click=\"toggleBundle(bundle.id)\">\n\t\t\t\t\t\t\t\t\t{{ t('settings', bundleToggleText(bundle.id)) }}\n\t\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<AppItem v-for=\"app in bundleApps(bundle.id)\"\n\t\t\t\t\t\t:key=\"bundle.id + app.id\"\n\t\t\t\t\t\t:use-bundle-view=\"true\"\n\t\t\t\t\t\t:headers=\"`app-table-rowgroup-${bundle.id}`\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\" />\n\t\t\t\t</template>\n\t\t\t</table>\n\t\t\t<ul v-if=\"useAppStoreView\" class=\"apps-list__store-container\">\n\t\t\t\t<AppItem v-for=\"app in apps\"\n\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t:category=\"category\"\n\t\t\t\t\t:list-view=\"false\" />\n\t\t\t</ul>\n\t\t</div>\n\n\t\t<div id=\"apps-list-search\" class=\"apps-list apps-list--list-view\">\n\t\t\t<div class=\"apps-list__list-container\">\n\t\t\t\t<table v-if=\"search !== '' && searchApps.length > 0\" class=\"apps-list__list-container\">\n\t\t\t\t\t<caption class=\"apps-list__bundle-header\">\n\t\t\t\t\t\t{{ t('settings', 'Results from other categories') }}\n\t\t\t\t\t</caption>\n\t\t\t\t\t<tr key=\"app-list-view-header\">\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Icon') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Name') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Version') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Level') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Actions') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<AppItem v-for=\"app in searchApps\"\n\t\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\" />\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div v-if=\"search !== '' && !loading && searchApps.length === 0 && apps.length === 0\" id=\"apps-list-empty\" class=\"emptycontent emptycontent-search\">\n\t\t\t<div id=\"app-list-empty-icon\" class=\"icon-settings-dark\" />\n\t\t\t<h2>{{ t('settings', 'No apps found for your version') }}</h2>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport AppItem from './AppList/AppItem.vue'\nimport pLimit from 'p-limit'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\n\nexport default {\n\tname: 'AppList',\n\tcomponents: {\n\t\tAppItem,\n\t\tNcButton,\n\t},\n\n\tprops: {\n\t\tcategory: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsearch: '',\n\t\t}\n\t},\n\tcomputed: {\n\t\tcounter() {\n\t\t\treturn this.apps.filter(app => app.update).length\n\t\t},\n\t\tloading() {\n\t\t\treturn this.$store.getters.loading('list')\n\t\t},\n\t\thasPendingUpdate() {\n\t\t\treturn this.apps.filter(app => app.update).length > 0\n\t\t},\n\t\tshowUpdateAll() {\n\t\t\treturn this.hasPendingUpdate && this.useListView\n\t\t},\n\t\tapps() {\n\t\t\tconst apps = this.$store.getters.getAllApps\n\t\t\t\t.filter(app => app.name.toLowerCase().search(this.search.toLowerCase()) !== -1)\n\t\t\t\t.sort(function(a, b) {\n\t\t\t\t\tconst sortStringA = '' + (a.active ? 0 : 1) + (a.update ? 0 : 1) + a.name\n\t\t\t\t\tconst sortStringB = '' + (b.active ? 0 : 1) + (b.update ? 0 : 1) + b.name\n\t\t\t\t\treturn OC.Util.naturalSortCompare(sortStringA, sortStringB)\n\t\t\t\t})\n\n\t\t\tif (this.category === 'installed') {\n\t\t\t\treturn apps.filter(app => app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'enabled') {\n\t\t\t\treturn apps.filter(app => app.active && app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'disabled') {\n\t\t\t\treturn apps.filter(app => !app.active && app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'app-bundles') {\n\t\t\t\treturn apps.filter(app => app.bundles)\n\t\t\t}\n\t\t\tif (this.category === 'updates') {\n\t\t\t\treturn apps.filter(app => app.update)\n\t\t\t}\n\t\t\tif (this.category === 'supported') {\n\t\t\t\t// For customers of the Nextcloud GmbH the app level will be set to `300` for apps that are supported in their subscription\n\t\t\t\treturn apps.filter(app => app.level === 300)\n\t\t\t}\n\t\t\tif (this.category === 'featured') {\n\t\t\t\t// An app level of `200` will be set for apps featured on the app store\n\t\t\t\treturn apps.filter(app => app.level === 200)\n\t\t\t}\n\n\t\t\t// filter app store categories\n\t\t\treturn apps.filter(app => {\n\t\t\t\treturn app.appstore && app.category !== undefined\n\t\t\t\t\t&& (app.category === this.category || app.category.indexOf(this.category) > -1)\n\t\t\t})\n\t\t},\n\t\tbundles() {\n\t\t\treturn this.$store.getters.getAppBundles.filter(bundle => this.bundleApps(bundle.id).length > 0)\n\t\t},\n\t\tbundleApps() {\n\t\t\treturn function(bundle) {\n\t\t\t\treturn this.$store.getters.getAllApps\n\t\t\t\t\t.filter(app => {\n\t\t\t\t\t\treturn app.bundleIds !== undefined && app.bundleIds.includes(bundle)\n\t\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\tsearchApps() {\n\t\t\tif (this.search === '') {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn this.$store.getters.getAllApps\n\t\t\t\t.filter(app => {\n\t\t\t\t\tif (app.name.toLowerCase().search(this.search.toLowerCase()) !== -1) {\n\t\t\t\t\t\treturn (!this.apps.find(_app => _app.id === app.id))\n\t\t\t\t\t}\n\t\t\t\t\treturn false\n\t\t\t\t})\n\t\t},\n\t\tuseAppStoreView() {\n\t\t\treturn !this.useListView && !this.useBundleView\n\t\t},\n\t\tuseListView() {\n\t\t\treturn (this.category === 'installed' || this.category === 'enabled' || this.category === 'disabled' || this.category === 'updates' || this.category === 'featured' || this.category === 'supported')\n\t\t},\n\t\tuseBundleView() {\n\t\t\treturn (this.category === 'app-bundles')\n\t\t},\n\t\tallBundlesEnabled() {\n\t\t\treturn (id) => {\n\t\t\t\treturn this.bundleApps(id).filter(app => !app.active).length === 0\n\t\t\t}\n\t\t},\n\t\tbundleToggleText() {\n\t\t\treturn (id) => {\n\t\t\t\tif (this.allBundlesEnabled(id)) {\n\t\t\t\t\treturn t('settings', 'Disable all')\n\t\t\t\t}\n\t\t\t\treturn t('settings', 'Download and enable all')\n\t\t\t}\n\t\t},\n\t},\n\n\tbeforeDestroy() {\n\t\tunsubscribe('nextcloud:unified-search.search', this.setSearch)\n\t\tunsubscribe('nextcloud:unified-search.reset', this.resetSearch)\n\t},\n\n\tmounted() {\n\t\tsubscribe('nextcloud:unified-search.search', this.setSearch)\n\t\tsubscribe('nextcloud:unified-search.reset', this.resetSearch)\n\t},\n\n\tmethods: {\n\t\tsetSearch({ query }) {\n\t\t\tthis.search = query\n\t\t},\n\t\tresetSearch() {\n\t\t\tthis.search = ''\n\t\t},\n\t\ttoggleBundle(id) {\n\t\t\tif (this.allBundlesEnabled(id)) {\n\t\t\t\treturn this.disableBundle(id)\n\t\t\t}\n\t\t\treturn this.enableBundle(id)\n\t\t},\n\t\tenableBundle(id) {\n\t\t\tconst apps = this.bundleApps(id).map(app => app.id)\n\t\t\tthis.$store.dispatch('enableApp', { appId: apps, groups: [] })\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error)\n\t\t\t\t\tOC.Notification.show(error)\n\t\t\t\t})\n\t\t},\n\t\tdisableBundle(id) {\n\t\t\tconst apps = this.bundleApps(id).map(app => app.id)\n\t\t\tthis.$store.dispatch('disableApp', { appId: apps, groups: [] })\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tOC.Notification.show(error)\n\t\t\t\t})\n\t\t},\n\t\tupdateAll() {\n\t\t\tconst limit = pLimit(1)\n\t\t\tthis.apps\n\t\t\t\t.filter(app => app.update)\n\t\t\t\t.map(app => limit(() => this.$store.dispatch('updateApp', { appId: app.id })),\n\t\t\t\t)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$toolbar-padding: 8px;\n$toolbar-height: 44px + $toolbar-padding * 2;\n\n.apps-list {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-content: flex-start;\n\n\t// For transition group\n\t&--move {\n\t\ttransition: transform 1s;\n\t}\n\n\t#app-list-update-all {\n\t\tmargin-left: 10px;\n\t}\n\n\t&__toolbar {\n\t\theight: $toolbar-height;\n\t\tpadding: $toolbar-padding;\n\t\t// Leave room for app-navigation-toggle\n\t\tpadding-left: $toolbar-height;\n\t\twidth: 100%;\n\t\tbackground-color: var(--color-main-background);\n\t\tposition: sticky;\n\t\ttop: 0;\n\t\tz-index: 1;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\n\t&--list-view {\n\t\tmargin-bottom: 100px;\n\t\t// For positioning link overlay on rows\n\t\tposition: relative;\n\t}\n\n\t&__list-container {\n\t\twidth: 100%;\n\t}\n\n\t&__store-container {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t}\n\n\t&__bundle-heading {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmargin: 20px 10px 20px 0;\n\t}\n\n\t&__bundle-header {\n\t\tmargin: 0 10px 0 50px;\n\t\tfont-weight: bold;\n\t\tfont-size: 20px;\n\t\tline-height: 30px;\n\t\tcolor: var(--color-text-light);\n\t}\n}\n\n#apps-list-search {\n\t.app-item {\n\t\th2 {\n\t\t\tmargin-bottom: 0;\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!./AppList.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.vue?vue&type=script&lang=js\"","\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!./AppList.vue?vue&type=style&index=0&id=73184220&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!./AppList.vue?vue&type=style&index=0&id=73184220&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppList.vue?vue&type=template&id=73184220&scoped=true\"\nimport script from \"./AppList.vue?vue&type=script&lang=js\"\nexport * from \"./AppList.vue?vue&type=script&lang=js\"\nimport style0 from \"./AppList.vue?vue&type=style&index=0&id=73184220&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 \"73184220\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"app-content-inner\"}},[_c('div',{staticClass:\"apps-list\",class:{\n\t\t\t'apps-list--list-view': (_vm.useBundleView || _vm.useListView),\n\t\t\t'apps-list--store-view': _vm.useAppStoreView,\n\t\t},attrs:{\"id\":\"apps-list\"}},[(_vm.useListView)?[(_vm.showUpdateAll)?_c('div',{staticClass:\"apps-list__toolbar\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.n('settings', '%n app has an update available', '%n apps have an update available', _vm.counter))+\"\\n\\t\\t\\t\\t\"),(_vm.showUpdateAll)?_c('NcButton',{attrs:{\"id\":\"app-list-update-all\",\"type\":\"primary\"},on:{\"click\":_vm.updateAll}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.n('settings', 'Update', 'Update all', _vm.counter))+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1):_vm._e(),_vm._v(\" \"),(!_vm.showUpdateAll)?_c('div',{staticClass:\"apps-list__toolbar\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'All apps are up-to-date.'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('TransitionGroup',{staticClass:\"apps-list__list-container\",attrs:{\"name\":\"apps-list\",\"tag\":\"table\"}},[_c('tr',{key:\"app-list-view-header\"},[_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Icon')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Name')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Version')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Level')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Actions')))])])]),_vm._v(\" \"),_vm._l((_vm.apps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category}})})],2)]:_vm._e(),_vm._v(\" \"),(_vm.useBundleView)?_c('table',{staticClass:\"apps-list__list-container\"},[_c('tr',{key:\"app-list-view-header\"},[_c('th',{attrs:{\"id\":\"app-table-col-icon\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Icon')))])]),_vm._v(\" \"),_c('th',{attrs:{\"id\":\"app-table-col-name\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Name')))])]),_vm._v(\" \"),_c('th',{attrs:{\"id\":\"app-table-col-version\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Version')))])]),_vm._v(\" \"),_c('th',{attrs:{\"id\":\"app-table-col-level\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Level')))])]),_vm._v(\" \"),_c('th',{attrs:{\"id\":\"app-table-col-actions\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Actions')))])])]),_vm._v(\" \"),_vm._l((_vm.bundles),function(bundle){return [_c('tr',{key:bundle.id},[_c('th',{attrs:{\"id\":`app-table-rowgroup-${bundle.id}`,\"colspan\":\"5\",\"scope\":\"rowgroup\"}},[_c('div',{staticClass:\"apps-list__bundle-heading\"},[_c('span',{staticClass:\"apps-list__bundle-header\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(bundle.name)+\"\\n\\t\\t\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcButton',{attrs:{\"type\":\"secondary\"},on:{\"click\":function($event){return _vm.toggleBundle(bundle.id)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', _vm.bundleToggleText(bundle.id)))+\"\\n\\t\\t\\t\\t\\t\\t\\t\")])],1)])]),_vm._v(\" \"),_vm._l((_vm.bundleApps(bundle.id)),function(app){return _c('AppItem',{key:bundle.id + app.id,attrs:{\"use-bundle-view\":true,\"headers\":`app-table-rowgroup-${bundle.id}`,\"app\":app,\"category\":_vm.category}})})]})],2):_vm._e(),_vm._v(\" \"),(_vm.useAppStoreView)?_c('ul',{staticClass:\"apps-list__store-container\"},_vm._l((_vm.apps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category,\"list-view\":false}})}),1):_vm._e()],2),_vm._v(\" \"),_c('div',{staticClass:\"apps-list apps-list--list-view\",attrs:{\"id\":\"apps-list-search\"}},[_c('div',{staticClass:\"apps-list__list-container\"},[(_vm.search !== '' && _vm.searchApps.length > 0)?_c('table',{staticClass:\"apps-list__list-container\"},[_c('caption',{staticClass:\"apps-list__bundle-header\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Results from other categories'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('tr',{key:\"app-list-view-header\"},[_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Icon')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Name')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Version')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Level')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Actions')))])])]),_vm._v(\" \"),_vm._l((_vm.searchApps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category}})})],2):_vm._e()])]),_vm._v(\" \"),(_vm.search !== '' && !_vm.loading && _vm.searchApps.length === 0 && _vm.apps.length === 0)?_c('div',{staticClass:\"emptycontent emptycontent-search\",attrs:{\"id\":\"apps-list-empty\"}},[_c('div',{staticClass:\"icon-settings-dark\",attrs:{\"id\":\"app-list-empty-icon\"}}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'No apps found for your version')))])]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"app-discover\"},[(_setup.hasError)?_c(_setup.NcEmptyContent,{attrs:{\"name\":_setup.t('settings', 'Nothing to show'),\"description\":_setup.t('settings', 'Could not load section content from app store.')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiEyeOff,\"size\":64}})]},proxy:true}],null,false,638098482)}):(_setup.elements.length === 0)?_c(_setup.NcEmptyContent,{attrs:{\"name\":_setup.t('settings', 'Loading'),\"description\":_setup.t('settings', 'Fetching the latest news…')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcLoadingIcon,{attrs:{\"size\":64}})]},proxy:true}])}):_vm._l((_setup.elements),function(entry,index){return _c(_setup.getComponent(entry.type),_vm._b({key:entry.id ?? index,tag:\"component\"},'component',entry,false))})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\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 * Helper to transform the JSON API results to proper frontend objects (app discover section elements)\n *\n * @param element The JSON API element to transform\n */\nexport const apiTypeParser = (element) => {\n const appElement = { ...element };\n if (appElement.date) {\n appElement.date = Date.parse(appElement.date);\n }\n if (appElement.expiryDate) {\n appElement.expiryDate = Date.parse(appElement.expiryDate);\n }\n if (appElement.type === 'post') {\n return appElement;\n }\n else if (appElement.type === 'showcase') {\n return appElement;\n }\n else if (appElement.type === 'carousel') {\n return appElement;\n }\n throw new Error(`Invalid argument, app discover element with type ${element.type ?? 'unknown'} is unknown`);\n};\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreDiscoverSection.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreDiscoverSection.vue?vue&type=script&setup=true&lang=ts\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreDiscoverSection.vue?vue&type=style&index=0&id=262838ca&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!./AppStoreDiscoverSection.vue?vue&type=style&index=0&id=262838ca&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppStoreDiscoverSection.vue?vue&type=template&id=262838ca&scoped=true\"\nimport script from \"./AppStoreDiscoverSection.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStoreDiscoverSection.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppStoreDiscoverSection.vue?vue&type=style&index=0&id=262838ca&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 \"262838ca\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStore.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStore.vue?vue&type=script&setup=true&lang=ts\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStore.vue?vue&type=style&index=0&id=a75d4530&prod&scoped=true&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStore.vue?vue&type=style&index=0&id=a75d4530&prod&scoped=true&lang=css\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppStore.vue?vue&type=template&id=a75d4530&scoped=true\"\nimport script from \"./AppStore.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStore.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppStore.vue?vue&type=style&index=0&id=a75d4530&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a75d4530\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_setup.NcAppNavigation,{attrs:{\"aria-label\":_setup.t('settings', 'Apps')},scopedSlots:_vm._u([{key:\"list\",fn:function(){return [_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-discover\",\"to\":{ name: 'apps-category', params: { category: 'discover'} },\"name\":_setup.APPS_SECTION_ENUM.discover},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.discover}})]},proxy:true}])}),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-installed\",\"to\":{ name: 'apps-category', params: { category: 'installed'} },\"name\":_setup.APPS_SECTION_ENUM.installed},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.installed}})]},proxy:true}])}),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-enabled\",\"to\":{ name: 'apps-category', params: { category: 'enabled' } },\"name\":_setup.APPS_SECTION_ENUM.enabled},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.enabled}})]},proxy:true}])}),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-disabled\",\"to\":{ name: 'apps-category', params: { category: 'disabled' } },\"name\":_setup.APPS_SECTION_ENUM.disabled},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.disabled}})]},proxy:true}])}),_vm._v(\" \"),(_setup.updateCount > 0)?_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-updates\",\"to\":{ name: 'apps-category', params: { category: 'updates' } },\"name\":_setup.APPS_SECTION_ENUM.updates},scopedSlots:_vm._u([{key:\"counter\",fn:function(){return [_c(_setup.NcCounterBubble,[_vm._v(_vm._s(_setup.updateCount))])]},proxy:true},{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.updates}})]},proxy:true}],null,false,2824895104)}):_vm._e(),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-your-bundles\",\"to\":{ name: 'apps-category', params: { category: 'app-bundles' } },\"name\":_setup.APPS_SECTION_ENUM['app-bundles']},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.bundles}})]},proxy:true}])}),_vm._v(\" \"),_c(_setup.NcAppNavigationSpacer),_vm._v(\" \"),(_setup.appstoreEnabled && _setup.categoriesLoading)?_c('li',{staticClass:\"categories--loading\"},[_c(_setup.NcLoadingIcon,{attrs:{\"size\":20,\"aria-label\":_setup.t('settings', 'Loading categories')}})],1):(_setup.appstoreEnabled && !_setup.categoriesLoading)?[(_setup.isSubscribed)?_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-supported\",\"to\":{ name: 'apps-category', params: { category: 'supported' } },\"name\":_setup.APPS_SECTION_ENUM.supported},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.supported}})]},proxy:true}],null,false,613663011)}):_vm._e(),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-featured\",\"to\":{ name: 'apps-category', params: { category: 'featured' } },\"name\":_setup.APPS_SECTION_ENUM.featured},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.featured}})]},proxy:true}])}),_vm._v(\" \"),_vm._l((_setup.categories),function(category){return _c(_setup.NcAppNavigationItem,{key:category.id,attrs:{\"id\":`app-category-${category.id}`,\"name\":category.displayName,\"to\":{\n\t\t\t\t\tname: 'apps-category',\n\t\t\t\t\tparams: { category: category.id },\n\t\t\t\t}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":category.icon}})]},proxy:true}],null,true)})})]:_vm._e(),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-developer-docs\",\"name\":_setup.t('settings', 'Developer documentation ↗'),\"href\":_setup.developerDocsUrl}})]},proxy:true}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreNavigation.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreNavigation.vue?vue&type=script&setup=true&lang=ts\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreNavigation.vue?vue&type=style&index=0&id=d15221f2&prod&scoped=true&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreNavigation.vue?vue&type=style&index=0&id=d15221f2&prod&scoped=true&lang=css\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppStoreNavigation.vue?vue&type=template&id=d15221f2&scoped=true\"\nimport script from \"./AppStoreNavigation.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStoreNavigation.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppStoreNavigation.vue?vue&type=style&index=0&id=d15221f2&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d15221f2\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return (_setup.showSidebar)?_c(_setup.NcAppSidebar,{staticClass:\"app-sidebar\",class:{ 'app-sidebar--with-screenshot': _setup.hasScreenshot },attrs:{\"active\":_setup.activeTab,\"background\":_setup.hasScreenshot ? _setup.app.screenshot : undefined,\"compact\":!_setup.hasScreenshot,\"name\":_setup.app.name,\"title\":_setup.app.name,\"subname\":_setup.licenseText,\"subtitle\":_setup.licenseText},on:{\"update:active\":function($event){_setup.activeTab=$event},\"close\":_setup.hideAppDetails},scopedSlots:_vm._u([(!_setup.hasScreenshot)?{key:\"header\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{staticClass:\"app-sidebar__fallback-icon\",attrs:{\"svg\":_setup.appIcon ?? '',\"size\":64}})]},proxy:true}:null,{key:\"description\",fn:function(){return [_c('div',{staticClass:\"app-sidebar__badges\"},[_c(_setup.AppLevelBadge,{attrs:{\"level\":_setup.app.level}}),_vm._v(\" \"),(_setup.hasRating)?_c(_setup.AppScore,{attrs:{\"score\":_setup.rating}}):_vm._e()],1)]},proxy:true}],null,true)},[_vm._v(\" \"),_vm._v(\" \"),_c(_setup.AppDescriptionTab,{attrs:{\"app\":_setup.app}}),_vm._v(\" \"),_c(_setup.AppDetailsTab,{attrs:{\"app\":_setup.app}}),_vm._v(\" \"),_c(_setup.AppReleasesTab,{attrs:{\"app\":_setup.app}})],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"settings-markdown\" v-html=\"renderMarkdown\" />\n</template>\n\n<script>\nimport { marked } from 'marked'\nimport dompurify from 'dompurify'\n\nexport default {\n\tname: 'Markdown',\n\tprops: {\n\t\ttext: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tminHeading: {\n\t\t\ttype: Number,\n\t\t\tdefault: 1,\n\t\t},\n\t},\n\tcomputed: {\n\t\trenderMarkdown() {\n\t\t\tconst renderer = new marked.Renderer()\n\t\t\trenderer.link = function(href, title, text) {\n\t\t\t\tlet prot\n\t\t\t\ttry {\n\t\t\t\t\tprot = decodeURIComponent(unescape(href))\n\t\t\t\t\t\t.replace(/[^\\w:]/g, '')\n\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tif (prot.indexOf('http:') !== 0 && prot.indexOf('https:') !== 0) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tlet out = '<a href=\"' + href + '\" rel=\"noreferrer noopener\"'\n\t\t\t\tif (title) {\n\t\t\t\t\tout += ' title=\"' + title + '\"'\n\t\t\t\t}\n\t\t\t\tout += '>' + text + '</a>'\n\t\t\t\treturn out\n\t\t\t}\n\t\t\trenderer.heading = (text, level) => {\n\t\t\t\tlevel = Math.min(6, level + (this.minHeading - 1))\n\t\t\t\treturn `<h${level}>${text}</h${level}>`\n\t\t\t}\n\t\t\trenderer.image = function(href, title, text) {\n\t\t\t\tif (text) {\n\t\t\t\t\treturn text\n\t\t\t\t}\n\t\t\t\treturn title\n\t\t\t}\n\t\t\trenderer.blockquote = function(quote) {\n\t\t\t\treturn quote\n\t\t\t}\n\t\t\treturn dompurify.sanitize(\n\t\t\t\tmarked(this.text.trim(), {\n\t\t\t\t\trenderer,\n\t\t\t\t\tgfm: false,\n\t\t\t\t\thighlight: false,\n\t\t\t\t\ttables: false,\n\t\t\t\t\tbreaks: false,\n\t\t\t\t\tpedantic: false,\n\t\t\t\t\tsanitize: true,\n\t\t\t\t\tsmartLists: true,\n\t\t\t\t\tsmartypants: false,\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\tSAFE_FOR_JQUERY: true,\n\t\t\t\t\tALLOWED_TAGS: [\n\t\t\t\t\t\t'h1',\n\t\t\t\t\t\t'h2',\n\t\t\t\t\t\t'h3',\n\t\t\t\t\t\t'h4',\n\t\t\t\t\t\t'h5',\n\t\t\t\t\t\t'h6',\n\t\t\t\t\t\t'strong',\n\t\t\t\t\t\t'p',\n\t\t\t\t\t\t'a',\n\t\t\t\t\t\t'ul',\n\t\t\t\t\t\t'ol',\n\t\t\t\t\t\t'li',\n\t\t\t\t\t\t'em',\n\t\t\t\t\t\t'del',\n\t\t\t\t\t\t'blockquote',\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.settings-markdown::v-deep {\n\n\th1,\n\th2,\n\th3,\n\th4,\n\th5,\n\th6 {\n\t\tfont-weight: 600;\n\t\tline-height: 120%;\n\t\tmargin-top: 24px;\n\t\tmargin-bottom: 12px;\n\t\tcolor: var(--color-main-text);\n\t}\n\n\th1 {\n\t\tfont-size: 36px;\n\t\tmargin-top: 48px;\n\t}\n\n\th2 {\n\t\tfont-size: 28px;\n\t\tmargin-top: 48px;\n\t}\n\n\th3 {\n\t\tfont-size: 24px;\n\t}\n\n\th4 {\n\t\tfont-size: 21px;\n\t}\n\n\th5 {\n\t\tfont-size: 17px;\n\t}\n\n\th6 {\n\t\tfont-size: var(--default-font-size);\n\t}\n\n\tpre {\n\t\twhite-space: pre;\n\t\toverflow-x: auto;\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: 1em 1.3em;\n\t\tmargin-bottom: 1em;\n\t}\n\n\tp code {\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: .1em .3em;\n\t}\n\n\tli {\n\t\tposition: relative;\n\t}\n\n\tul, ol {\n\t\tpadding-left: 10px;\n\t\tmargin-left: 10px;\n\t}\n\n\tul li {\n\t\tlist-style-type: disc;\n\t}\n\n\tul > li > ul > li {\n\t\tlist-style-type: circle;\n\t}\n\n\tul > li > ul > li ul li {\n\t\tlist-style-type: square;\n\t}\n\n\tblockquote {\n\t\tpadding-left: 1em;\n\t\tborder-left: 4px solid var(--color-primary-element);\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tmargin-left: 0;\n\t\tmargin-right: 0;\n\t}\n\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=script&lang=js\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=style&index=0&id=7c5c8e59&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!./Markdown.vue?vue&type=style&index=0&id=7c5c8e59&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Markdown.vue?vue&type=template&id=7c5c8e59&scoped=true\"\nimport script from \"./Markdown.vue?vue&type=script&lang=js\"\nexport * from \"./Markdown.vue?vue&type=script&lang=js\"\nimport style0 from \"./Markdown.vue?vue&type=style&index=0&id=7c5c8e59&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 \"7c5c8e59\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"settings-markdown\",domProps:{\"innerHTML\":_vm._s(_vm.renderMarkdown)}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDescriptionTab.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDescriptionTab.vue?vue&type=script&setup=true&lang=ts\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_setup.NcAppSidebarTab,{attrs:{\"id\":\"desc\",\"name\":_setup.t('settings', 'Description'),\"order\":0},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiTextShort}})]},proxy:true}])},[_vm._v(\" \"),_c('div',{staticClass:\"app-description\"},[_c(_setup.Markdown,{attrs:{\"text\":_vm.app.description,\"min-heading\":4}})],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDescriptionTab.vue?vue&type=style&index=0&id=fccce5ae&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!./AppDescriptionTab.vue?vue&type=style&index=0&id=fccce5ae&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppDescriptionTab.vue?vue&type=template&id=fccce5ae&scoped=true\"\nimport script from \"./AppDescriptionTab.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppDescriptionTab.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppDescriptionTab.vue?vue&type=style&index=0&id=fccce5ae&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 \"fccce5ae\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppSidebarTab',{attrs:{\"id\":\"details\",\"name\":_vm.t('settings', 'Details'),\"order\":1},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiTextBox}})]},proxy:true}])},[_vm._v(\" \"),_c('div',{staticClass:\"app-details\"},[_c('div',{staticClass:\"app-details__actions\"},[(_vm.app.active && _vm.canLimitToGroups(_vm.app))?_c('div',{staticClass:\"app-details__actions-groups\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.groupCheckedAppsData),expression:\"groupCheckedAppsData\"}],staticClass:\"groups-enable__checkbox checkbox\",attrs:{\"id\":`groups_enable_${_vm.app.id}`,\"type\":\"checkbox\"},domProps:{\"value\":_vm.app.id,\"checked\":Array.isArray(_vm.groupCheckedAppsData)?_vm._i(_vm.groupCheckedAppsData,_vm.app.id)>-1:(_vm.groupCheckedAppsData)},on:{\"change\":[function($event){var $$a=_vm.groupCheckedAppsData,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=_vm.app.id,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.groupCheckedAppsData=$$a.concat([$$v]))}else{$$i>-1&&(_vm.groupCheckedAppsData=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.groupCheckedAppsData=$$c}},_vm.setGroupLimit]}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":`groups_enable_${_vm.app.id}`}},[_vm._v(_vm._s(_vm.t('settings', 'Limit to groups')))]),_vm._v(\" \"),_c('input',{staticClass:\"group_select\",attrs:{\"type\":\"hidden\",\"title\":_vm.t('settings', 'All'),\"value\":\"\"}}),_vm._v(\" \"),_c('br'),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"limitToGroups\"}},[_c('span',[_vm._v(_vm._s(_vm.t('settings', 'Limit app usage to groups')))])]),_vm._v(\" \"),(_vm.isLimitedToGroups(_vm.app))?_c('NcSelect',{attrs:{\"input-id\":\"limitToGroups\",\"options\":_vm.groups,\"value\":_vm.appGroups,\"limit\":5,\"label\":\"name\",\"multiple\":true,\"close-on-select\":false},on:{\"option:selected\":_vm.addGroupLimitation,\"option:deselected\":_vm.removeGroupLimitation,\"search\":_vm.asyncFindGroup}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])]):_vm._e()],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-details__actions-manage\"},[(_vm.app.update)?_c('input',{staticClass:\"update primary\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings', 'Update to {version}', { version: _vm.app.update }),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.update(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.canUnInstall)?_c('input',{staticClass:\"uninstall\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings', 'Remove'),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.remove(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.active)?_c('input',{staticClass:\"enable\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings','Disable'),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.disable(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(!_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible))?_c('input',{staticClass:\"enable primary\",attrs:{\"title\":_vm.enableButtonTooltip,\"aria-label\":_vm.enableButtonTooltip,\"type\":\"button\",\"value\":_vm.enableButtonText,\"disabled\":!_vm.app.canInstall || _vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.enable(_vm.app.id)}}}):(!_vm.app.active && !_vm.app.canInstall)?_c('input',{staticClass:\"enable force\",attrs:{\"title\":_vm.forceEnableButtonTooltip,\"aria-label\":_vm.forceEnableButtonTooltip,\"type\":\"button\",\"value\":_vm.forceEnableButtonText,\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.forceEnable(_vm.app.id)}}}):_vm._e()])]),_vm._v(\" \"),_c('ul',{staticClass:\"app-details__dependencies\"},[(_vm.app.missingMinOwnCloudVersion)?_c('li',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app has no minimum Nextcloud version assigned. This will be an error in the future.'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.app.missingMaxOwnCloudVersion)?_c('li',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app has no maximum Nextcloud version assigned. This will be an error in the future.'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(!_vm.app.canInstall)?_c('li',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app cannot be installed because the following dependencies are not fulfilled:'))+\"\\n\\t\\t\\t\\t\"),_c('ul',{staticClass:\"missing-dependencies\"},_vm._l((_vm.app.missingDependencies),function(dep,index){return _c('li',{key:index},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(dep)+\"\\n\\t\\t\\t\\t\\t\")])}),0)]):_vm._e()]),_vm._v(\" \"),(_vm.lastModified)?_c('div',{staticClass:\"app-details__section\"},[_c('h4',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Latest updated'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcDateTime',{attrs:{\"timestamp\":_vm.lastModified}})],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-details__section\"},[_c('h4',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Author'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('p',{staticClass:\"app-details__authors\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.appAuthors)+\"\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"app-details__section\"},[_c('h4',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Categories'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.appCategories)+\"\\n\\t\\t\\t\")])]),_vm._v(\" \"),(_vm.externalResources.length > 0)?_c('div',{staticClass:\"app-details__section\"},[_c('h4',[_vm._v(_vm._s(_vm.t('settings', 'Resources')))]),_vm._v(\" \"),_c('ul',{staticClass:\"app-details__documentation\",attrs:{\"aria-label\":_vm.t('settings', 'Documentation')}},_vm._l((_vm.externalResources),function(resource){return _c('li',{key:resource.id},[_c('a',{staticClass:\"appslink\",attrs:{\"href\":resource.href,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(resource.label)+\" ↗\\n\\t\\t\\t\\t\\t\")])])}),0)]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-details__section\"},[_c('h4',[_vm._v(_vm._s(_vm.t('settings', 'Interact')))]),_vm._v(\" \"),_c('div',{staticClass:\"app-details__interact\"},[_c('NcButton',{attrs:{\"disabled\":!_vm.app.bugs,\"href\":_vm.app.bugs ?? '#',\"aria-label\":_vm.t('settings', 'Report a bug'),\"title\":_vm.t('settings', 'Report a bug')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiBug}})]},proxy:true}])}),_vm._v(\" \"),_c('NcButton',{attrs:{\"disabled\":!_vm.app.bugs,\"href\":_vm.app.bugs ?? '#',\"aria-label\":_vm.t('settings', 'Request feature'),\"title\":_vm.t('settings', 'Request feature')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiFeatureSearch}})]},proxy:true}])}),_vm._v(\" \"),(_vm.app.appstoreData?.discussion)?_c('NcButton',{attrs:{\"href\":_vm.app.appstoreData.discussion,\"aria-label\":_vm.t('settings', 'Ask questions or discuss'),\"title\":_vm.t('settings', 'Ask questions or discuss')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiTooltipQuestion}})]},proxy:true}],null,false,1288192462)}):_vm._e(),_vm._v(\" \"),(!_vm.app.internal)?_c('NcButton',{attrs:{\"href\":_vm.rateAppUrl,\"aria-label\":_vm.t('settings', 'Rate the app'),\"title\":_vm.t('settings', 'Rate')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiStar}})]},proxy:true}],null,false,422450625)}):_vm._e()],1)])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<NcAppSidebarTab id=\"details\"\n\t\t:name=\"t('settings', 'Details')\"\n\t\t:order=\"1\">\n\t\t<template #icon>\n\t\t\t<NcIconSvgWrapper :path=\"mdiTextBox\" />\n\t\t</template>\n\t\t<div class=\"app-details\">\n\t\t\t<div class=\"app-details__actions\">\n\t\t\t\t<div v-if=\"app.active && canLimitToGroups(app)\" class=\"app-details__actions-groups\">\n\t\t\t\t\t<input :id=\"`groups_enable_${app.id}`\"\n\t\t\t\t\t\tv-model=\"groupCheckedAppsData\"\n\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t:value=\"app.id\"\n\t\t\t\t\t\tclass=\"groups-enable__checkbox checkbox\"\n\t\t\t\t\t\t@change=\"setGroupLimit\">\n\t\t\t\t\t<label :for=\"`groups_enable_${app.id}`\">{{ t('settings', 'Limit to groups') }}</label>\n\t\t\t\t\t<input type=\"hidden\"\n\t\t\t\t\t\tclass=\"group_select\"\n\t\t\t\t\t\t:title=\"t('settings', 'All')\"\n\t\t\t\t\t\tvalue=\"\">\n\t\t\t\t\t<br>\n\t\t\t\t\t<label for=\"limitToGroups\">\n\t\t\t\t\t\t<span>{{ t('settings', 'Limit app usage to groups') }}</span>\n\t\t\t\t\t</label>\n\t\t\t\t\t<NcSelect v-if=\"isLimitedToGroups(app)\"\n\t\t\t\t\t\tinput-id=\"limitToGroups\"\n\t\t\t\t\t\t:options=\"groups\"\n\t\t\t\t\t\t:value=\"appGroups\"\n\t\t\t\t\t\t:limit=\"5\"\n\t\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t\t@option:selected=\"addGroupLimitation\"\n\t\t\t\t\t\t@option:deselected=\"removeGroupLimitation\"\n\t\t\t\t\t\t@search=\"asyncFindGroup\">\n\t\t\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t\t\t</NcSelect>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"app-details__actions-manage\">\n\t\t\t\t\t<input v-if=\"app.update\"\n\t\t\t\t\t\tclass=\"update primary\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t:value=\"t('settings', 'Update to {version}', { version: app.update })\"\n\t\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t\t@click=\"update(app.id)\">\n\t\t\t\t\t<input v-if=\"app.canUnInstall\"\n\t\t\t\t\t\tclass=\"uninstall\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t:value=\"t('settings', 'Remove')\"\n\t\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t\t@click=\"remove(app.id)\">\n\t\t\t\t\t<input v-if=\"app.active\"\n\t\t\t\t\t\tclass=\"enable\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t:value=\"t('settings','Disable')\"\n\t\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t\t@click=\"disable(app.id)\">\n\t\t\t\t\t<input v-if=\"!app.active && (app.canInstall || app.isCompatible)\"\n\t\t\t\t\t\t:title=\"enableButtonTooltip\"\n\t\t\t\t\t\t:aria-label=\"enableButtonTooltip\"\n\t\t\t\t\t\tclass=\"enable primary\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t:value=\"enableButtonText\"\n\t\t\t\t\t\t:disabled=\"!app.canInstall || installing || isLoading\"\n\t\t\t\t\t\t@click=\"enable(app.id)\">\n\t\t\t\t\t<input v-else-if=\"!app.active && !app.canInstall\"\n\t\t\t\t\t\t:title=\"forceEnableButtonTooltip\"\n\t\t\t\t\t\t:aria-label=\"forceEnableButtonTooltip\"\n\t\t\t\t\t\tclass=\"enable force\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t:value=\"forceEnableButtonText\"\n\t\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t\t@click=\"forceEnable(app.id)\">\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<ul class=\"app-details__dependencies\">\n\t\t\t\t<li v-if=\"app.missingMinOwnCloudVersion\">\n\t\t\t\t\t{{ t('settings', 'This app has no minimum Nextcloud version assigned. This will be an error in the future.') }}\n\t\t\t\t</li>\n\t\t\t\t<li v-if=\"app.missingMaxOwnCloudVersion\">\n\t\t\t\t\t{{ t('settings', 'This app has no maximum Nextcloud version assigned. This will be an error in the future.') }}\n\t\t\t\t</li>\n\t\t\t\t<li v-if=\"!app.canInstall\">\n\t\t\t\t\t{{ t('settings', 'This app cannot be installed because the following dependencies are not fulfilled:') }}\n\t\t\t\t\t<ul class=\"missing-dependencies\">\n\t\t\t\t\t\t<li v-for=\"(dep, index) in app.missingDependencies\" :key=\"index\">\n\t\t\t\t\t\t\t{{ dep }}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t</ul>\n\n\t\t\t<div v-if=\"lastModified\" class=\"app-details__section\">\n\t\t\t\t<h4>\n\t\t\t\t\t{{ t('settings', 'Latest updated') }}\n\t\t\t\t</h4>\n\t\t\t\t<NcDateTime :timestamp=\"lastModified\" />\n\t\t\t</div>\n\n\t\t\t<div class=\"app-details__section\">\n\t\t\t\t<h4>\n\t\t\t\t\t{{ t('settings', 'Author') }}\n\t\t\t\t</h4>\n\t\t\t\t<p class=\"app-details__authors\">\n\t\t\t\t\t{{ appAuthors }}\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t<div class=\"app-details__section\">\n\t\t\t\t<h4>\n\t\t\t\t\t{{ t('settings', 'Categories') }}\n\t\t\t\t</h4>\n\t\t\t\t<p>\n\t\t\t\t\t{{ appCategories }}\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t<div v-if=\"externalResources.length > 0\" class=\"app-details__section\">\n\t\t\t\t<h4>{{ t('settings', 'Resources') }}</h4>\n\t\t\t\t<ul class=\"app-details__documentation\" :aria-label=\"t('settings', 'Documentation')\">\n\t\t\t\t\t<li v-for=\"resource of externalResources\" :key=\"resource.id\">\n\t\t\t\t\t\t<a class=\"appslink\"\n\t\t\t\t\t\t\t:href=\"resource.href\"\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\trel=\"noreferrer noopener\">\n\t\t\t\t\t\t\t{{ resource.label }} ↗\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\n\t\t\t<div class=\"app-details__section\">\n\t\t\t\t<h4>{{ t('settings', 'Interact') }}</h4>\n\t\t\t\t<div class=\"app-details__interact\">\n\t\t\t\t\t<NcButton :disabled=\"!app.bugs\"\n\t\t\t\t\t\t:href=\"app.bugs ?? '#'\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Report a bug')\"\n\t\t\t\t\t\t:title=\"t('settings', 'Report a bug')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiBug\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton :disabled=\"!app.bugs\"\n\t\t\t\t\t\t:href=\"app.bugs ?? '#'\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Request feature')\"\n\t\t\t\t\t\t:title=\"t('settings', 'Request feature')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiFeatureSearch\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton v-if=\"app.appstoreData?.discussion\"\n\t\t\t\t\t\t:href=\"app.appstoreData.discussion\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Ask questions or discuss')\"\n\t\t\t\t\t\t:title=\"t('settings', 'Ask questions or discuss')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiTooltipQuestion\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton v-if=\"!app.internal\"\n\t\t\t\t\t\t:href=\"rateAppUrl\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Rate the app')\"\n\t\t\t\t\t\t:title=\"t('settings', 'Rate')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiStar\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</NcAppSidebarTab>\n</template>\n\n<script>\nimport NcAppSidebarTab from '@nextcloud/vue/dist/Components/NcAppSidebarTab.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcDateTime from '@nextcloud/vue/dist/Components/NcDateTime.js'\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'\nimport NcSelect from '@nextcloud/vue/dist/Components/NcSelect.js'\n\nimport AppManagement from '../../mixins/AppManagement.js'\nimport { mdiBug, mdiFeatureSearch, mdiStar, mdiTextBox, mdiTooltipQuestion } from '@mdi/js'\nimport { useAppsStore } from '../../store/apps-store'\n\nexport default {\n\tname: 'AppDetailsTab',\n\n\tcomponents: {\n\t\tNcAppSidebarTab,\n\t\tNcButton,\n\t\tNcDateTime,\n\t\tNcIconSvgWrapper,\n\t\tNcSelect,\n\t},\n\tmixins: [AppManagement],\n\n\tprops: {\n\t\tapp: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst store = useAppsStore()\n\n\t\treturn {\n\t\t\tstore,\n\n\t\t\tmdiBug,\n\t\t\tmdiFeatureSearch,\n\t\t\tmdiStar,\n\t\t\tmdiTextBox,\n\t\t\tmdiTooltipQuestion,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tgroupCheckedAppsData: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tlastModified() {\n\t\t\treturn (this.app.appstoreData?.releases ?? [])\n\t\t\t\t.map(({ lastModified }) => Date.parse(lastModified))\n\t\t\t\t.sort()\n\t\t\t\t.at(0) ?? null\n\t\t},\n\t\t/**\n\t\t * App authors as comma separated string\n\t\t */\n\t\tappAuthors() {\n\t\t\tconsole.warn(this.app)\n\t\t\tif (!this.app) {\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t\tconst authorName = (xmlNode) => {\n\t\t\t\tif (xmlNode['@value']) {\n\t\t\t\t\t// Complex node (with email or homepage attribute)\n\t\t\t\t\treturn xmlNode['@value']\n\t\t\t\t}\n\t\t\t\t// Simple text node\n\t\t\t\treturn xmlNode\n\t\t\t}\n\n\t\t\tconst authors = Array.isArray(this.app.author)\n\t\t\t\t? this.app.author.map(authorName)\n\t\t\t\t: [authorName(this.app.author)]\n\n\t\t\treturn authors\n\t\t\t\t.sort((a, b) => a.split(' ').at(-1).localeCompare(b.split(' ').at(-1)))\n\t\t\t\t.join(', ')\n\t\t},\n\n\t\tappstoreUrl() {\n\t\t\treturn `https://apps.nextcloud.com/apps/${this.app.id}`\n\t\t},\n\n\t\t/**\n\t\t * Further external resources (e.g. website)\n\t\t */\n\t\texternalResources() {\n\t\t\tconst resources = []\n\t\t\tif (!this.app.internal) {\n\t\t\t\tresources.push({\n\t\t\t\t\tid: 'appstore',\n\t\t\t\t\thref: this.appstoreUrl,\n\t\t\t\t\tlabel: t('settings', 'View in store'),\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (this.app.website) {\n\t\t\t\tresources.push({\n\t\t\t\t\tid: 'website',\n\t\t\t\t\thref: this.app.website,\n\t\t\t\t\tlabel: t('settings', 'Visit website'),\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (this.app.documentation) {\n\t\t\t\tif (this.app.documentation.user) {\n\t\t\t\t\tresources.push({\n\t\t\t\t\t\tid: 'doc-user',\n\t\t\t\t\t\thref: this.app.documentation.user,\n\t\t\t\t\t\tlabel: t('settings', 'Usage documentation'),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (this.app.documentation.admin) {\n\t\t\t\t\tresources.push({\n\t\t\t\t\t\tid: 'doc-admin',\n\t\t\t\t\t\thref: this.app.documentation.admin,\n\t\t\t\t\t\tlabel: t('settings', 'Admin documentation'),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (this.app.documentation.developer) {\n\t\t\t\t\tresources.push({\n\t\t\t\t\t\tid: 'doc-developer',\n\t\t\t\t\t\thref: this.app.documentation.developer,\n\t\t\t\t\t\tlabel: t('settings', 'Developer documentation'),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn resources\n\t\t},\n\n\t\tappCategories() {\n\t\t\treturn [this.app.category].flat()\n\t\t\t\t.map((id) => this.store.getCategoryById(id)?.displayName ?? id)\n\t\t\t\t.join(', ')\n\t\t},\n\n\t\trateAppUrl() {\n\t\t\treturn `${this.appstoreUrl}#comments`\n\t\t},\n\t\tappGroups() {\n\t\t\treturn this.app.groups.map(group => { return { id: group, name: group } })\n\t\t},\n\t\tgroups() {\n\t\t\treturn this.$store.getters.getGroups\n\t\t\t\t.filter(group => group.id !== 'disabled')\n\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name))\n\t\t},\n\t},\n\tmounted() {\n\t\tif (this.app.groups.length > 0) {\n\t\t\tthis.groupCheckedAppsData = true\n\t\t}\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n.app-details {\n\tpadding: 20px;\n\n\t&__actions {\n\t\t// app management\n\t\t&-manage {\n\t\t\t// if too many, shrink them and ellipsis\n\t\t\tdisplay: flex;\n\t\t\tinput {\n\t\t\t\tflex: 0 1 auto;\n\t\t\t\tmin-width: 0;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\t}\n\t&__authors {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__section {\n\t\tmargin-top: 15px;\n\n\t\th4 {\n\t\t\tfont-size: 16px;\n\t\t\tfont-weight: bold;\n\t\t\tmargin-block-end: 5px;\n\t\t}\n\t}\n\n\t&__interact {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tflex-wrap: wrap;\n\t\tgap: 12px;\n\t}\n\n\t&__documentation {\n\t\ta {\n\t\t\ttext-decoration: underline;\n\t\t}\n\t\tli {\n\t\t\tpadding-inline-start: 20px;\n\n\t\t\t&::before {\n\t\t\t\twidth: 5px;\n\t\t\t\theight: 5px;\n\t\t\t\tborder-radius: 100%;\n\t\t\t\tbackground-color: var(--color-main-text);\n\t\t\t\tcontent: \"\";\n\t\t\t\tfloat: inline-start;\n\t\t\t\tmargin-inline-start: -13px;\n\t\t\t\tposition: relative;\n\t\t\t\ttop: 10px;\n\t\t\t}\n\t\t}\n\t}\n}\n\n.force {\n\tcolor: var(--color-error);\n\tborder-color: var(--color-error);\n\tbackground: var(--color-main-background);\n}\n.force:hover,\n.force:active {\n\tcolor: var(--color-main-background);\n\tborder-color: var(--color-error) !important;\n\tbackground: var(--color-error);\n}\n\n.missing-dependencies {\n\tlist-style: initial;\n\tlist-style-type: initial;\n\tlist-style-position: inside;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetailsTab.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!./AppDetailsTab.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!./AppDetailsTab.vue?vue&type=style&index=0&id=24864562&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!./AppDetailsTab.vue?vue&type=style&index=0&id=24864562&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppDetailsTab.vue?vue&type=template&id=24864562&scoped=true\"\nimport script from \"./AppDetailsTab.vue?vue&type=script&lang=js\"\nexport * from \"./AppDetailsTab.vue?vue&type=script&lang=js\"\nimport style0 from \"./AppDetailsTab.vue?vue&type=style&index=0&id=24864562&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 \"24864562\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppReleasesTab.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppReleasesTab.vue?vue&type=script&setup=true&lang=ts\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return (_setup.hasChangelog)?_c(_setup.NcAppSidebarTab,{attrs:{\"id\":\"changelog\",\"name\":_setup.t('settings', 'Changelog'),\"order\":2},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiClockFast,\"size\":24}})]},proxy:true}],null,false,1849836872)},[_vm._v(\" \"),_vm._l((_vm.app.releases),function(release){return _c('div',{key:release.version,staticClass:\"app-sidebar-tabs__release\"},[_c('h2',[_vm._v(_vm._s(release.version))]),_vm._v(\" \"),_c(_setup.Markdown,{staticClass:\"app-sidebar-tabs__release-text\",attrs:{\"text\":_setup.createChangelogFromRelease(release)}})],1)})],2):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppReleasesTab.vue?vue&type=style&index=0&id=2261a93d&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!./AppReleasesTab.vue?vue&type=style&index=0&id=2261a93d&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppReleasesTab.vue?vue&type=template&id=2261a93d&scoped=true\"\nimport script from \"./AppReleasesTab.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppReleasesTab.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppReleasesTab.vue?vue&type=style&index=0&id=2261a93d&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 \"2261a93d\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreSidebar.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreSidebar.vue?vue&type=script&setup=true&lang=ts\"","import { mdiCog } from '@mdi/js';\nimport { computed, ref, watchEffect } from 'vue';\nimport AppstoreCategoryIcons from '../constants/AppstoreCategoryIcons.ts';\nimport logger from '../logger.ts';\n/**\n * Get the app icon raw SVG for use with `NcIconSvgWrapper` (do never use without sanitizing)\n * It has a fallback to the categroy icon.\n *\n * @param app The app to get the icon for\n */\nexport function useAppIcon(app) {\n const appIcon = ref(null);\n /**\n * Fallback value if no app icon available\n */\n const categoryIcon = computed(() => {\n const path = [app.value?.category ?? []].flat()\n .map((name) => AppstoreCategoryIcons[name])\n .filter((icon) => !!icon)\n .at(0)\n ?? mdiCog;\n return path ? `<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"${path}\" /></svg>` : null;\n });\n watchEffect(async () => {\n // Note: Only variables until the first `await` will be watched!\n if (!app.value?.preview) {\n appIcon.value = categoryIcon.value;\n }\n else {\n appIcon.value = null;\n // Now try to load the real app icon\n try {\n const response = await window.fetch(app.value.preview);\n const blob = await response.blob();\n const rawSvg = await blob.text();\n appIcon.value = rawSvg.replaceAll(/fill=\"#(fff|ffffff)([a-z0-9]{1,2})?\"/ig, 'fill=\"currentColor\"');\n }\n catch (error) {\n appIcon.value = categoryIcon.value;\n logger.error('Could not load app icon', { error });\n }\n }\n });\n return {\n appIcon,\n };\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreSidebar.vue?vue&type=style&index=0&id=31ecb666&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!./AppStoreSidebar.vue?vue&type=style&index=0&id=31ecb666&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppStoreSidebar.vue?vue&type=template&id=31ecb666&scoped=true\"\nimport script from \"./AppStoreSidebar.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStoreSidebar.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppStoreSidebar.vue?vue&type=style&index=0&id=31ecb666&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 \"31ecb666\",\n null\n \n)\n\nexport default component.exports"],"names":["APPS_SECTION_ENUM","Object","freeze","discover","t","installed","enabled","disabled","updates","featured","supported","axios","get","generateOcsUrl","then","_ref","data","ocs","meta","statuscode","emit","apps","window","dispatchEvent","Event","computed","appGroups","this","app","groups","map","group","id","name","installing","$store","getters","loading","isLoading","enableButtonText","needsDownload","forceEnableButtonText","enableButtonTooltip","forceEnableButtonTooltip","base","groupCheckedAppsData","mounted","length","methods","asyncFindGroup","query","dispatch","search","limit","offset","isLimitedToGroups","setGroupLimit","appId","canLimitToGroups","types","includes","addGroupLimitation","groupArray","pop","concat","removeGroupLimitation","currentGroups","index","indexOf","splice","forceEnable","response","rebuildNavigation","catch","error","showError","enable","disable","remove","install","update","mdiStarCircleOutline","mdiAccount","mdiCheck","mdiClose","bundles","mdiArchive","mdiStarShooting","mdiStar","mdiDownload","auth","mdiKey","customization","mdiCog","dashboard","mdiViewDashboard","files","mdiFolder","games","mdiControllerClassic","integration","mdiOpenInApp","monitoring","mdiMonitorEye","multimedia","mdiMultimedia","office","mdiFileDocumentEdit","organization","mdiOfficeBuilding","mdiMagnify","security","mdiSecurity","social","mdiAccountMultiple","tools","mdiTools","workflow","mdiClipboardFlow","showApiError","useAppsStore","defineStore","state","categories","updateCount","loadState","loadingList","gettingCategoriesPromise","actions","loadCategories","force","arguments","undefined","generateUrl","category","_APPSTORE_CATEGORY_IC","icon","APPSTORE_CATEGORY_ICONS","$patch","logger","loadApps","getCategoryById","categoryId","_this$categories$find","find","getAppById","_this$apps$find","_ref2","___CSS_LOADER_EXPORT___","push","module","_defineComponent","__name","props","level","setup","__props","isSupported","isFeatured","badgeIcon","value","badgeText","badgeTitle","__sfc","NcIconSvgWrapper","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","_vm","_c","_self","_setup","_setupProxy","staticClass","class","attrs","_v","_s","_e","defineComponent","components","score","type","Number","required","mdiStarHalfFull","mdiStarOutline","title","appScore","toFixed","fullStars","Math","floor","emptyStars","min","hasHalfStar","_l","key","filterId","filterUrl","random","toString","substring","AppLevelBadge","AppScore","NcButton","mixins","AppManagement","SvgFilterMixin","listView","Boolean","default","useBundleView","headers","String","isSelected","scrolled","screenshotLoaded","hasRating","appstoreData","ratingNumOverall","dataItemTag","withSidebar","$route","params","watch","releases","screenshot","image","Image","onload","src","watchers","prefix","content","getDataItemHeaders","columnName","join","tag","preview","appName","summary","version","on","$event","stopPropagation","canUnInstall","active","canInstall","isCompatible","pLimit","concurrency","isInteger","POSITIVE_INFINITY","TypeError","queue","Queue","activeCount","run","async","fn","resolve","args","result","size","dequeue","generator","_len","Array","_key","Promise","enqueue","bind","defineProperties","pendingCount","clearQueue","clear","AppItem","counter","filter","hasPendingUpdate","showUpdateAll","useListView","getAllApps","toLowerCase","sort","a","b","sortStringA","sortStringB","OC","Util","naturalSortCompare","appstore","getAppBundles","bundle","bundleApps","bundleIds","searchApps","_app","useAppStoreView","allBundlesEnabled","bundleToggleText","beforeDestroy","unsubscribe","setSearch","resetSearch","subscribe","toggleBundle","disableBundle","enableBundle","console","Notification","show","updateAll","n","apiTypeParser","element","_element$type","appElement","date","Date","parse","expiryDate","Error","PostType","defineAsyncComponent","CarouselType","hasError","ref","elements","shuffleArray","array","i","j","onBeforeMount","parsedData","getComponent","render","h","mdiEyeOff","NcEmptyContent","NcLoadingIcon","scopedSlots","_u","proxy","entry","_entry$id","_b","route","useRoute","store","currentCategory","_route$params$categor","_route$params","appStoreLabel","viewLabel","_APPS_SECTION_ENUM$cu","_store$getCategoryByI","displayName","watchEffect","document","instance","getCurrentInstance","shouldRefetchCategories","NcAppContent","AppList","AppStoreDiscoverSection","domProps","appstoreEnabled","developerDocsUrl","categoriesLoading","isSubscribed","NcAppNavigation","NcAppNavigationItem","NcAppNavigationSpacer","NcCounterBubble","text","minHeading","renderMarkdown","renderer","marked","Renderer","link","href","prot","decodeURIComponent","unescape","replace","e","out","heading","blockquote","quote","dompurify","trim","gfm","highlight","tables","breaks","pedantic","sanitize","smartLists","smartypants","SAFE_FOR_JQUERY","ALLOWED_TAGS","mdiTextShort","NcAppSidebarTab","Markdown","description","NcDateTime","NcSelect","mdiBug","mdiFeatureSearch","mdiTextBox","mdiTooltipQuestion","lastModified","_map$sort$at","_this$app$appstoreDat","_this$app$appstoreDat2","at","appAuthors","warn","authorName","xmlNode","isArray","author","split","localeCompare","appstoreUrl","externalResources","resources","internal","label","website","documentation","user","admin","developer","appCategories","flat","_this$store$getCatego","_this$store$getCatego2","rateAppUrl","getGroups","_vm$app$bugs","_vm$app$bugs2","_vm$app$appstoreData","directives","rawName","expression","_i","$$a","$$el","target","$$c","checked","$$v","$$i","slice","slot","missingMinOwnCloudVersion","missingMaxOwnCloudVersion","missingDependencies","dep","resource","bugs","discussion","hasChangelog","_props$app$releases$","_props$app$releases","values","translations","some","changelog","createChangelogFromRelease","release","_release$translations","_release$translations2","_release$translations3","getLanguage","en","mdiClockFast","router","useRouter","_route$params$id","_app$value$appstoreDa","rating","_app$value$appstoreDa2","_app$value$appstoreDa3","_app$value$appstoreDa4","ratingNumRecent","ratingRecent","ratingOverall","showSidebar","appIcon","categoryIcon","_flat$map$filter$at","_app$value$category","_app$value","path","AppstoreCategoryIcons","_app$value2","fetch","blob","rawSvg","replaceAll","useAppIcon","licenseText","license","licence","toUpperCase","activeTab","hasScreenshot","loadScreenshot","_app$value3","onMounted","hideAppDetails","NcAppSidebar","AppDescriptionTab","AppDetailsTab","AppReleasesTab","_setup$appIcon"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"settings-apps-view-4529.js?v=1b1723a987a17d0d479e","mappings":"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","sources":["webpack:///nextcloud/apps/settings/src/constants/AppsConstants.js","webpack:///nextcloud/apps/settings/src/service/rebuild-navigation.js","webpack:///nextcloud/apps/settings/src/mixins/AppManagement.js","webpack:///nextcloud/apps/settings/src/constants/AppstoreCategoryIcons.ts","webpack:///nextcloud/apps/settings/src/store/apps-store.ts","webpack:///nextcloud/apps/settings/src/components/AppList.vue?vue&type=style&index=0&id=73184220&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue?vue&type=style&index=0&id=0dbcb644&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppList/AppLevelBadge.vue?vue&type=style&index=0&id=3590dbeb&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue?vue&type=style&index=0&id=3efdd423&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue?vue&type=style&index=0&id=fccce5ae&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?vue&type=style&index=0&id=24864562&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue?vue&type=style&index=0&id=2261a93d&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/Markdown.vue?vue&type=style&index=0&id=7c5c8e59&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/views/AppStoreSidebar.vue?vue&type=style&index=0&id=31ecb666&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue?vue&type=style&index=0&id=7d015114&prod&scoped=true&lang=css","webpack:///nextcloud/apps/settings/src/views/AppStore.vue?vue&type=style&index=0&id=a75d4530&prod&scoped=true&lang=css","webpack:///nextcloud/apps/settings/src/views/AppStoreNavigation.vue?vue&type=style&index=0&id=d15221f2&prod&scoped=true&lang=css","webpack:///nextcloud/apps/settings/src/components/AppList/AppLevelBadge.vue","webpack:///nextcloud/apps/settings/src/components/AppList/AppLevelBadge.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppList/AppLevelBadge.vue?d837","webpack://nextcloud/./apps/settings/src/components/AppList/AppLevelBadge.vue?74e8","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue?vue&type=script&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppList/AppScore.vue?4d91","webpack://nextcloud/./apps/settings/src/components/AppList/AppScore.vue?26fd","webpack:///nextcloud/apps/settings/src/views/AppStore.vue","webpack:///nextcloud/apps/settings/src/components/SvgFilterMixin.vue","webpack:///nextcloud/apps/settings/src/components/SvgFilterMixin.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/SvgFilterMixin.vue?5bcd","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?2f45","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?a9a1","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?af1e","webpack:///nextcloud/node_modules/p-limit/index.js","webpack:///nextcloud/apps/settings/src/components/AppList.vue","webpack:///nextcloud/apps/settings/src/components/AppList.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/AppList.vue?9f90","webpack://nextcloud/./apps/settings/src/components/AppList.vue?8acf","webpack://nextcloud/./apps/settings/src/components/AppList.vue?ee21","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue","webpack:///nextcloud/apps/settings/src/utils/appDiscoverParser.ts","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue?a3b4","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue?0759","webpack:///nextcloud/apps/settings/src/views/AppStore.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/views/AppStore.vue?9deb","webpack://nextcloud/./apps/settings/src/views/AppStore.vue?47b2","webpack:///nextcloud/apps/settings/src/views/AppStoreNavigation.vue","webpack:///nextcloud/apps/settings/src/views/AppStoreNavigation.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/views/AppStoreNavigation.vue?b382","webpack://nextcloud/./apps/settings/src/views/AppStoreNavigation.vue?6e6f","webpack:///nextcloud/apps/settings/src/views/AppStoreSidebar.vue","webpack:///nextcloud/apps/settings/src/components/Markdown.vue","webpack:///nextcloud/apps/settings/src/components/Markdown.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/Markdown.vue?c49c","webpack://nextcloud/./apps/settings/src/components/Markdown.vue?26cf","webpack://nextcloud/./apps/settings/src/components/Markdown.vue?d299","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue?vue&type=script&setup=true&lang=ts","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue?4cfb","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue?311d","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?9ed4","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?b564","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?d4df","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue?vue&type=script&setup=true&lang=ts","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue?c0dd","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue?d492","webpack:///nextcloud/apps/settings/src/views/AppStoreSidebar.vue?vue&type=script&setup=true&lang=ts","webpack:///nextcloud/apps/settings/src/composables/useAppIcon.ts","webpack://nextcloud/./apps/settings/src/views/AppStoreSidebar.vue?99b3","webpack://nextcloud/./apps/settings/src/views/AppStoreSidebar.vue?5373"],"sourcesContent":["/**\n * @copyright 2022, Julia Kirschenheuter <julia.kirschenheuter@nextcloud.com>\n *\n * @author Julia Kirschenheuter <julia.kirschenheuter@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t } from '@nextcloud/l10n'\n\n/** Enum of verification constants, according to Apps */\nexport const APPS_SECTION_ENUM = Object.freeze({\n\tdiscover: t('settings', 'Discover'),\n\tinstalled: t('settings', 'Your apps'),\n\tenabled: t('settings', 'Active apps'),\n\tdisabled: t('settings', 'Disabled apps'),\n\tupdates: t('settings', 'Updates'),\n\t'app-bundles': t('settings', 'App bundles'),\n\tfeatured: t('settings', 'Featured apps'),\n\tsupported: t('settings', 'Supported apps'), // From subscription\n})\n","import axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { emit } from '@nextcloud/event-bus'\n\nexport default () => {\n\treturn axios.get(generateOcsUrl('core/navigation', 2) + '/apps?format=json')\n\t\t.then(({ data }) => {\n\t\t\tif (data.ocs.meta.statuscode !== 200) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\temit('nextcloud:app-menu.refresh', { apps: data.ocs.data })\n\t\t\twindow.dispatchEvent(new Event('resize'))\n\t\t})\n}\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { showError } from '@nextcloud/dialogs'\nimport rebuildNavigation from '../service/rebuild-navigation.js'\n\nexport default {\n\tcomputed: {\n\t\tappGroups() {\n\t\t\treturn this.app.groups.map(group => { return { id: group, name: group } })\n\t\t},\n\t\tinstalling() {\n\t\t\treturn this.$store.getters.loading('install')\n\t\t},\n\t\tisLoading() {\n\t\t\treturn this.app && this.$store.getters.loading(this.app.id)\n\t\t},\n\t\tenableButtonText() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'Download and enable')\n\t\t\t}\n\t\t\treturn t('settings', 'Enable')\n\t\t},\n\t\tforceEnableButtonText() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'Allow untested app')\n\t\t\t}\n\t\t\treturn t('settings', 'Allow untested app')\n\t\t},\n\t\tenableButtonTooltip() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'The app will be downloaded from the App Store')\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\t\tforceEnableButtonTooltip() {\n\t\t\tconst base = t('settings', 'This app is not marked as compatible with your Nextcloud version. If you continue you will still be able to install the app. Note that the app might not work as expected.')\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn base + ' ' + t('settings', 'The app will be downloaded from the App Store')\n\t\t\t}\n\t\t\treturn base\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tgroupCheckedAppsData: false,\n\t\t}\n\t},\n\n\tmounted() {\n\t\tif (this.app && this.app.groups && this.app.groups.length > 0) {\n\t\t\tthis.groupCheckedAppsData = true\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasyncFindGroup(query) {\n\t\t\treturn this.$store.dispatch('getGroups', { search: query, limit: 5, offset: 0 })\n\t\t},\n\t\tisLimitedToGroups(app) {\n\t\t\tif (this.app.groups.length || this.groupCheckedAppsData) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tsetGroupLimit() {\n\t\t\tif (!this.groupCheckedAppsData) {\n\t\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups: [] })\n\t\t\t}\n\t\t},\n\t\tcanLimitToGroups(app) {\n\t\t\tif ((app.types && app.types.includes('filesystem'))\n\t\t\t\t\t|| app.types.includes('prelogin')\n\t\t\t\t\t|| app.types.includes('authentication')\n\t\t\t\t\t|| app.types.includes('logging')\n\t\t\t\t\t|| app.types.includes('prevent_group_restriction')) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\t\taddGroupLimitation(groupArray) {\n\t\t\tconst group = groupArray.pop()\n\t\t\tconst groups = this.app.groups.concat([]).concat([group.id])\n\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups })\n\t\t},\n\t\tremoveGroupLimitation(group) {\n\t\t\tconst currentGroups = this.app.groups.concat([])\n\t\t\tconst index = currentGroups.indexOf(group.id)\n\t\t\tif (index > -1) {\n\t\t\t\tcurrentGroups.splice(index, 1)\n\t\t\t}\n\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups: currentGroups })\n\t\t},\n\t\tforceEnable(appId) {\n\t\t\tthis.$store.dispatch('forceEnableApp', { appId, groups: [] })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tenable(appId) {\n\t\t\tthis.$store.dispatch('enableApp', { appId, groups: [] })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tdisable(appId) {\n\t\t\tthis.$store.dispatch('disableApp', { appId })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tremove(appId) {\n\t\t\tthis.$store.dispatch('uninstallApp', { appId })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tinstall(appId) {\n\t\t\tthis.$store.dispatch('enableApp', { appId })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tupdate(appId) {\n\t\t\tthis.$store.dispatch('updateApp', { appId })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { mdiAccount, mdiAccountMultiple, mdiArchive, mdiCheck, mdiClipboardFlow, mdiClose, mdiCog, mdiControllerClassic, mdiDownload, mdiFileDocumentEdit, mdiFolder, mdiKey, mdiMagnify, mdiMonitorEye, mdiMultimedia, mdiOfficeBuilding, mdiOpenInApp, mdiSecurity, mdiStar, mdiStarCircleOutline, mdiStarShooting, mdiTools, mdiViewDashboard, } from '@mdi/js';\n/**\n * SVG paths used for appstore category icons\n */\nexport default Object.freeze({\n // system special categories\n discover: mdiStarCircleOutline,\n installed: mdiAccount,\n enabled: mdiCheck,\n disabled: mdiClose,\n bundles: mdiArchive,\n supported: mdiStarShooting,\n featured: mdiStar,\n updates: mdiDownload,\n // generic categories\n auth: mdiKey,\n customization: mdiCog,\n dashboard: mdiViewDashboard,\n files: mdiFolder,\n games: mdiControllerClassic,\n integration: mdiOpenInApp,\n monitoring: mdiMonitorEye,\n multimedia: mdiMultimedia,\n office: mdiFileDocumentEdit,\n organization: mdiOfficeBuilding,\n search: mdiMagnify,\n security: mdiSecurity,\n social: mdiAccountMultiple,\n tools: mdiTools,\n workflow: mdiClipboardFlow,\n});\n","/**\n * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { showError } from '@nextcloud/dialogs';\nimport { loadState } from '@nextcloud/initial-state';\nimport { translate as t } from '@nextcloud/l10n';\nimport { generateUrl } from '@nextcloud/router';\nimport { defineStore } from 'pinia';\nimport axios from '@nextcloud/axios';\nimport logger from '../logger';\nimport APPSTORE_CATEGORY_ICONS from '../constants/AppstoreCategoryIcons.ts';\nconst showApiError = () => showError(t('settings', 'An error occurred during the request. Unable to proceed.'));\nexport const useAppsStore = defineStore('settings-apps', {\n state: () => ({\n apps: [],\n categories: [],\n updateCount: loadState('settings', 'appstoreUpdateCount', 0),\n loading: {\n apps: false,\n categories: false,\n },\n loadingList: false,\n gettingCategoriesPromise: null,\n }),\n actions: {\n async loadCategories(force = false) {\n if (this.categories.length > 0 && !force) {\n return;\n }\n try {\n this.loading.categories = true;\n const { data: categories } = await axios.get(generateUrl('settings/apps/categories'));\n for (const category of categories) {\n category.icon = APPSTORE_CATEGORY_ICONS[category.id] ?? '';\n }\n this.$patch({\n categories,\n });\n }\n catch (error) {\n logger.error(error);\n showApiError();\n }\n finally {\n this.loading.categories = false;\n }\n },\n async loadApps(force = false) {\n if (this.apps.length > 0 && !force) {\n return;\n }\n try {\n this.loading.apps = true;\n const { data } = await axios.get(generateUrl('settings/apps/list'));\n this.$patch({\n apps: data.apps,\n });\n }\n catch (error) {\n logger.error(error);\n showApiError();\n }\n finally {\n this.loading.apps = false;\n }\n },\n getCategoryById(categoryId) {\n return this.categories.find(({ id }) => id === categoryId) ?? null;\n },\n getAppById(appId) {\n return this.apps.find(({ id }) => id === appId) ?? null;\n },\n },\n});\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.apps-list[data-v-73184220]{display:flex;flex-wrap:wrap;align-content:flex-start}.apps-list--move[data-v-73184220]{transition:transform 1s}.apps-list #app-list-update-all[data-v-73184220]{margin-left:10px}.apps-list__toolbar[data-v-73184220]{height:60px;padding:8px;padding-left:60px;width:100%;background-color:var(--color-main-background);position:sticky;top:0;z-index:1;display:flex;align-items:center}.apps-list--list-view[data-v-73184220]{margin-bottom:100px;position:relative}.apps-list__list-container[data-v-73184220]{width:100%}.apps-list__store-container[data-v-73184220]{display:flex;flex-wrap:wrap}.apps-list__bundle-heading[data-v-73184220]{display:flex;align-items:center;margin:20px 10px 20px 0}.apps-list__bundle-header[data-v-73184220]{margin:0 10px 0 50px;font-weight:bold;font-size:20px;line-height:30px;color:var(--color-text-light)}#apps-list-search .app-item h2[data-v-73184220]{margin-bottom:0}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppList.vue\"],\"names\":[],\"mappings\":\"AAIA,4BACC,YAAA,CACA,cAAA,CACA,wBAAA,CAGA,kCACC,uBAAA,CAGD,iDACC,gBAAA,CAGD,qCACC,WAjBe,CAkBf,WAnBgB,CAqBhB,iBApBe,CAqBf,UAAA,CACA,6CAAA,CACA,eAAA,CACA,KAAA,CACA,SAAA,CACA,YAAA,CACA,kBAAA,CAGD,uCACC,mBAAA,CAEA,iBAAA,CAGD,4CACC,UAAA,CAGD,6CACC,YAAA,CACA,cAAA,CAGD,4CACC,YAAA,CACA,kBAAA,CACA,uBAAA,CAGD,2CACC,oBAAA,CACA,gBAAA,CACA,cAAA,CACA,gBAAA,CACA,6BAAA,CAMA,gDACC,eAAA\",\"sourcesContent\":[\"\\n$toolbar-padding: 8px;\\n$toolbar-height: 44px + $toolbar-padding * 2;\\n\\n.apps-list {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\talign-content: flex-start;\\n\\n\\t// For transition group\\n\\t&--move {\\n\\t\\ttransition: transform 1s;\\n\\t}\\n\\n\\t#app-list-update-all {\\n\\t\\tmargin-left: 10px;\\n\\t}\\n\\n\\t&__toolbar {\\n\\t\\theight: $toolbar-height;\\n\\t\\tpadding: $toolbar-padding;\\n\\t\\t// Leave room for app-navigation-toggle\\n\\t\\tpadding-left: $toolbar-height;\\n\\t\\twidth: 100%;\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t\\tposition: sticky;\\n\\t\\ttop: 0;\\n\\t\\tz-index: 1;\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t}\\n\\n\\t&--list-view {\\n\\t\\tmargin-bottom: 100px;\\n\\t\\t// For positioning link overlay on rows\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t&__list-container {\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t&__store-container {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-wrap: wrap;\\n\\t}\\n\\n\\t&__bundle-heading {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\tmargin: 20px 10px 20px 0;\\n\\t}\\n\\n\\t&__bundle-header {\\n\\t\\tmargin: 0 10px 0 50px;\\n\\t\\tfont-weight: bold;\\n\\t\\tfont-size: 20px;\\n\\t\\tline-height: 30px;\\n\\t\\tcolor: var(--color-text-light);\\n\\t}\\n}\\n\\n#apps-list-search {\\n\\t.app-item {\\n\\t\\th2 {\\n\\t\\t\\tmargin-bottom: 0;\\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, `.app-item[data-v-0dbcb644]{position:relative}.app-item[data-v-0dbcb644]:hover{background-color:var(--color-background-dark)}.app-item--list-view[data-v-0dbcb644]{--app-item-padding: calc(var(--default-grid-baseline) * 2);--app-item-height: calc(var(--default-clickable-area) + var(--app-item-padding) * 2)}.app-item--list-view.app-item--selected[data-v-0dbcb644]{background-color:var(--color-background-dark)}.app-item--list-view>*[data-v-0dbcb644]{vertical-align:middle;border-bottom:1px solid var(--color-border);padding:var(--app-item-padding);height:var(--app-item-height)}.app-item--list-view .app-image[data-v-0dbcb644]{width:var(--default-clickable-area);height:auto;text-align:right}.app-item--list-view .app-image-icon svg[data-v-0dbcb644],.app-item--list-view .app-image-icon .icon-settings-dark[data-v-0dbcb644]{margin-top:5px;width:20px;height:20px;opacity:.5;background-size:cover;display:inline-block}.app-item--list-view .app-name[data-v-0dbcb644]{padding:0 var(--app-item-padding)}.app-item--list-view .app-name--link[data-v-0dbcb644]{height:var(--app-item-height);display:flex;align-items:center}.app-item--list-view .app-name--link[data-v-0dbcb644]::after{content:\"\";position:absolute;left:0;right:0;height:var(--app-item-height)}.app-item--list-view .app-actions[data-v-0dbcb644]{display:flex;gap:var(--app-item-padding);flex-wrap:wrap;justify-content:end}.app-item--list-view .app-actions .icon-loading-small[data-v-0dbcb644]{display:inline-block;top:4px;margin-right:10px}@media only screen and (max-width: 900px){.app-item--list-view .app-version[data-v-0dbcb644],.app-item--list-view .app-level[data-v-0dbcb644]{display:none}}@media only screen and (max-width: 512px){.app-item--list-view .app-actions[data-v-0dbcb644]{display:none}}.app-item--store-view[data-v-0dbcb644]{padding:30px}.app-item--store-view .app-image-icon .icon-settings-dark[data-v-0dbcb644]{width:100%;height:150px;background-size:45px;opacity:.5}.app-item--store-view .app-image-icon svg[data-v-0dbcb644]{position:absolute;bottom:43px;width:64px;height:64px;opacity:.1}.app-item--store-view .app-name[data-v-0dbcb644]{margin:5px 0}.app-item--store-view .app-name--link[data-v-0dbcb644]::after{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0}.app-item--store-view .app-actions[data-v-0dbcb644]{margin:10px 0}@media only screen and (min-width: 1601px){.app-item--store-view[data-v-0dbcb644]{width:25%}.app-item--store-view.app-item--with-sidebar[data-v-0dbcb644]{width:33%}}@media only screen and (max-width: 1600px){.app-item--store-view[data-v-0dbcb644]{width:25%}.app-item--store-view.app-item--with-sidebar[data-v-0dbcb644]{width:33%}}@media only screen and (max-width: 1400px){.app-item--store-view[data-v-0dbcb644]{width:33%}.app-item--store-view.app-item--with-sidebar[data-v-0dbcb644]{width:50%}}@media only screen and (max-width: 900px){.app-item--store-view[data-v-0dbcb644]{width:50%}.app-item--store-view.app-item--with-sidebar[data-v-0dbcb644]{width:100%}}@media only screen and (max-width: 1024px){.app-item--store-view[data-v-0dbcb644]{width:50%}}@media only screen and (max-width: 480px){.app-item--store-view[data-v-0dbcb644]{width:100%}}.app-icon[data-v-0dbcb644]{filter:var(--background-invert-if-bright)}.app-image[data-v-0dbcb644]{position:relative;height:150px;opacity:1;overflow:hidden}.app-image img[data-v-0dbcb644]{width:100%}.app-version[data-v-0dbcb644]{color:var(--color-text-maxcontrast)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppList/AppItem.vue\"],\"names\":[],\"mappings\":\"AAIA,2BACC,iBAAA,CAEA,iCACC,6CAAA,CAGD,sCACC,0DAAA,CACA,oFAAA,CAEA,yDACC,6CAAA,CAGD,wCACC,qBAAA,CACA,2CAAA,CACA,+BAAA,CACA,6BAAA,CAGD,iDACC,mCAAA,CACA,WAAA,CACA,gBAAA,CAGD,oIAEC,cAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CACA,qBAAA,CACA,oBAAA,CAGD,gDACC,iCAAA,CAGD,sDACC,6BAAA,CACA,YAAA,CACA,kBAAA,CAMD,6DACC,UAAA,CACA,iBAAA,CACA,MAAA,CACA,OAAA,CACA,6BAAA,CAGD,mDACC,YAAA,CACA,2BAAA,CACA,cAAA,CACA,mBAAA,CAEA,uEACC,oBAAA,CACA,OAAA,CACA,iBAAA,CAKF,0CACC,oGAEC,YAAA,CAAA,CAKF,0CACC,mDACC,YAAA,CAAA,CAKH,uCACC,YAAA,CAEA,2EACC,UAAA,CACA,YAAA,CACA,oBAAA,CACA,UAAA,CAGD,2DACC,iBAAA,CACA,WAAA,CAEA,UAAA,CACA,WAAA,CACA,UAAA,CAGD,iDACC,YAAA,CAGD,8DACC,UAAA,CACA,iBAAA,CACA,KAAA,CACA,MAAA,CACA,OAAA,CACA,QAAA,CAGD,oDACC,aAAA,CAGD,2CApCD,uCAqCE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,2CA5CD,uCA6CE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,2CApDD,uCAqDE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,0CA5DD,uCA6DE,SAAA,CAEA,8DACC,UAAA,CAAA,CAIF,2CApED,uCAqEE,SAAA,CAAA,CAGD,0CAxED,uCAyEE,UAAA,CAAA,CAKH,2BACC,yCAAA,CAGD,4BACC,iBAAA,CACA,YAAA,CACA,SAAA,CACA,eAAA,CAEA,gCACC,UAAA,CAIF,8BACC,mCAAA\",\"sourcesContent\":[\"\\n@use '../../../../../core/css/variables.scss' as variables;\\n@use 'sass:math';\\n\\n.app-item {\\n\\tposition: relative;\\n\\n\\t&:hover {\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t}\\n\\n\\t&--list-view {\\n\\t\\t--app-item-padding: calc(var(--default-grid-baseline) * 2);\\n\\t\\t--app-item-height: calc(var(--default-clickable-area) + var(--app-item-padding) * 2);\\n\\n\\t\\t&.app-item--selected {\\n\\t\\t\\tbackground-color: var(--color-background-dark);\\n\\t\\t}\\n\\n\\t\\t> * {\\n\\t\\t\\tvertical-align: middle;\\n\\t\\t\\tborder-bottom: 1px solid var(--color-border);\\n\\t\\t\\tpadding: var(--app-item-padding);\\n\\t\\t\\theight: var(--app-item-height);\\n\\t\\t}\\n\\n\\t\\t.app-image {\\n\\t\\t\\twidth: var(--default-clickable-area);\\n\\t\\t\\theight: auto;\\n\\t\\t\\ttext-align: right;\\n\\t\\t}\\n\\n\\t\\t.app-image-icon svg,\\n\\t\\t.app-image-icon .icon-settings-dark {\\n\\t\\t\\tmargin-top: 5px;\\n\\t\\t\\twidth: 20px;\\n\\t\\t\\theight: 20px;\\n\\t\\t\\topacity: .5;\\n\\t\\t\\tbackground-size: cover;\\n\\t\\t\\tdisplay: inline-block;\\n\\t\\t}\\n\\n\\t\\t.app-name {\\n\\t\\t\\tpadding: 0 var(--app-item-padding);\\n\\t\\t}\\n\\n\\t\\t.app-name--link {\\n\\t\\t\\theight: var(--app-item-height);\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\talign-items: center;\\n\\t\\t}\\n\\n\\t\\t// Note: because of Safari bug, we cannot position link overlay relative to the table row\\n\\t\\t// So we need to manually position it relative to the table container and cell\\n\\t\\t// See: https://bugs.webkit.org/show_bug.cgi?id=240961\\n\\t\\t.app-name--link::after {\\n\\t\\t\\tcontent: '';\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tleft: 0;\\n\\t\\t\\tright: 0;\\n\\t\\t\\theight: var(--app-item-height);\\n\\t\\t}\\n\\n\\t\\t.app-actions {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tgap: var(--app-item-padding);\\n\\t\\t\\tflex-wrap: wrap;\\n\\t\\t\\tjustify-content: end;\\n\\n\\t\\t\\t.icon-loading-small {\\n\\t\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\t\\ttop: 4px;\\n\\t\\t\\t\\tmargin-right: 10px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t/* hide app version and level on narrower screens */\\n\\t\\t@media only screen and (max-width: 900px) {\\n\\t\\t\\t.app-version,\\n\\t\\t\\t.app-level {\\n\\t\\t\\t\\tdisplay: none;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t/* Hide actions on a small screen. Click on app opens fill-screen sidebar with the buttons */\\n\\t\\t@media only screen and (max-width: math.div(variables.$breakpoint-mobile, 2)) {\\n\\t\\t\\t.app-actions {\\n\\t\\t\\t\\tdisplay: none;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&--store-view {\\n\\t\\tpadding: 30px;\\n\\n\\t\\t.app-image-icon .icon-settings-dark {\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\theight: 150px;\\n\\t\\t\\tbackground-size: 45px;\\n\\t\\t\\topacity: 0.5;\\n\\t\\t}\\n\\n\\t\\t.app-image-icon svg {\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tbottom: 43px;\\n\\t\\t\\t/* position halfway vertically */\\n\\t\\t\\twidth: 64px;\\n\\t\\t\\theight: 64px;\\n\\t\\t\\topacity: .1;\\n\\t\\t}\\n\\n\\t\\t.app-name {\\n\\t\\t\\tmargin: 5px 0;\\n\\t\\t}\\n\\n\\t\\t.app-name--link::after {\\n\\t\\t\\tcontent: '';\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\ttop: 0;\\n\\t\\t\\tleft: 0;\\n\\t\\t\\tright: 0;\\n\\t\\t\\tbottom: 0;\\n\\t\\t}\\n\\n\\t\\t.app-actions {\\n\\t\\t\\tmargin: 10px 0;\\n\\t\\t}\\n\\n\\t\\t@media only screen and (min-width: 1601px) {\\n\\t\\t\\twidth: 25%;\\n\\n\\t\\t\\t&.app-item--with-sidebar {\\n\\t\\t\\t\\twidth: 33%;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t@media only screen and (max-width: 1600px) {\\n\\t\\t\\twidth: 25%;\\n\\n\\t\\t\\t&.app-item--with-sidebar {\\n\\t\\t\\t\\twidth: 33%;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t@media only screen and (max-width: 1400px) {\\n\\t\\t\\twidth: 33%;\\n\\n\\t\\t\\t&.app-item--with-sidebar {\\n\\t\\t\\t\\twidth: 50%;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t@media only screen and (max-width: 900px) {\\n\\t\\t\\twidth: 50%;\\n\\n\\t\\t\\t&.app-item--with-sidebar {\\n\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t@media only screen and (max-width: variables.$breakpoint-mobile) {\\n\\t\\t\\twidth: 50%;\\n\\t\\t}\\n\\n\\t\\t@media only screen and (max-width: 480px) {\\n\\t\\t\\twidth: 100%;\\n\\t\\t}\\n\\t}\\n}\\n\\n.app-icon {\\n\\tfilter: var(--background-invert-if-bright);\\n}\\n\\n.app-image {\\n\\tposition: relative;\\n\\theight: 150px;\\n\\topacity: 1;\\n\\toverflow: hidden;\\n\\n\\timg {\\n\\t\\twidth: 100%;\\n\\t}\\n}\\n\\n.app-version {\\n\\tcolor: var(--color-text-maxcontrast);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-level-badge[data-v-3590dbeb]{color:var(--color-text-maxcontrast);background-color:rgba(0,0,0,0);border:1px solid var(--color-text-maxcontrast);border-radius:var(--border-radius);display:flex;flex-direction:row;gap:6px;padding:3px 6px;width:fit-content}.app-level-badge--supported[data-v-3590dbeb]{border-color:var(--color-success);color:var(--color-success)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppList/AppLevelBadge.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,mCAAA,CACA,8BAAA,CACA,8CAAA,CACA,kCAAA,CAEA,YAAA,CACA,kBAAA,CACA,OAAA,CACA,eAAA,CACA,iBAAA,CAEA,6CACC,iCAAA,CACA,0BAAA\",\"sourcesContent\":[\"\\n.app-level-badge {\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tbackground-color: transparent;\\n\\tborder: 1px solid var(--color-text-maxcontrast);\\n\\tborder-radius: var(--border-radius);\\n\\n\\tdisplay: flex;\\n\\tflex-direction: row;\\n\\tgap: 6px;\\n\\tpadding: 3px 6px;\\n\\twidth: fit-content;\\n\\n\\t&--supported {\\n\\t\\tborder-color: var(--color-success);\\n\\t\\tcolor: var(--color-success);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-discover[data-v-3efdd423]{max-width:1008px;margin-inline:auto;padding-inline:54px;padding-block-end:var(--default-clickable-area, 44px);display:flex;flex-direction:column;gap:var(--default-clickable-area, 44px)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue\"],\"names\":[],\"mappings\":\"AACA,+BACC,gBAAA,CACA,kBAAA,CACA,mBAAA,CAEA,qDAAA,CAEA,YAAA,CACA,qBAAA,CACA,uCAAA\",\"sourcesContent\":[\"\\n.app-discover {\\n\\tmax-width: 1008px; /* 900px + 2x 54px padding for the carousel controls */\\n\\tmargin-inline: auto;\\n\\tpadding-inline: 54px;\\n\\t/* Padding required to make last element not bound to the bottom */\\n\\tpadding-block-end: var(--default-clickable-area, 44px);\\n\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: var(--default-clickable-area, 44px);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-description[data-v-fccce5ae]{padding:12px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,YAAA\",\"sourcesContent\":[\"\\n.app-description {\\n\\tpadding: 12px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-details[data-v-24864562]{padding:20px}.app-details__actions-manage[data-v-24864562]{display:flex}.app-details__actions-manage input[data-v-24864562]{flex:0 1 auto;min-width:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.app-details__authors[data-v-24864562]{color:var(--color-text-maxcontrast)}.app-details__section[data-v-24864562]{margin-top:15px}.app-details__section h4[data-v-24864562]{font-size:16px;font-weight:bold;margin-block-end:5px}.app-details__interact[data-v-24864562]{display:flex;flex-direction:row;flex-wrap:wrap;gap:12px}.app-details__documentation a[data-v-24864562]{text-decoration:underline}.app-details__documentation li[data-v-24864562]{padding-inline-start:20px}.app-details__documentation li[data-v-24864562]::before{width:5px;height:5px;border-radius:100%;background-color:var(--color-main-text);content:\"\";float:inline-start;margin-inline-start:-13px;position:relative;top:10px}.force[data-v-24864562]{color:var(--color-error);border-color:var(--color-error);background:var(--color-main-background)}.force[data-v-24864562]:hover,.force[data-v-24864562]:active{color:var(--color-main-background);border-color:var(--color-error) !important;background:var(--color-error)}.missing-dependencies[data-v-24864562]{list-style:initial;list-style-type:initial;list-style-position:inside}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue\"],\"names\":[],\"mappings\":\"AACA,8BACC,YAAA,CAIC,8CAEC,YAAA,CACA,oDACC,aAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,eAAA,CAIH,uCACC,mCAAA,CAGD,uCACC,eAAA,CAEA,0CACC,cAAA,CACA,gBAAA,CACA,oBAAA,CAIF,wCACC,YAAA,CACA,kBAAA,CACA,cAAA,CACA,QAAA,CAIA,+CACC,yBAAA,CAED,gDACC,yBAAA,CAEA,wDACC,SAAA,CACA,UAAA,CACA,kBAAA,CACA,uCAAA,CACA,UAAA,CACA,kBAAA,CACA,yBAAA,CACA,iBAAA,CACA,QAAA,CAMJ,wBACC,wBAAA,CACA,+BAAA,CACA,uCAAA,CAED,6DAEC,kCAAA,CACA,0CAAA,CACA,6BAAA,CAGD,uCACC,kBAAA,CACA,uBAAA,CACA,0BAAA\",\"sourcesContent\":[\"\\n.app-details {\\n\\tpadding: 20px;\\n\\n\\t&__actions {\\n\\t\\t// app management\\n\\t\\t&-manage {\\n\\t\\t\\t// if too many, shrink them and ellipsis\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tinput {\\n\\t\\t\\t\\tflex: 0 1 auto;\\n\\t\\t\\t\\tmin-width: 0;\\n\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t&__authors {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&__section {\\n\\t\\tmargin-top: 15px;\\n\\n\\t\\th4 {\\n\\t\\t\\tfont-size: 16px;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tmargin-block-end: 5px;\\n\\t\\t}\\n\\t}\\n\\n\\t&__interact {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: row;\\n\\t\\tflex-wrap: wrap;\\n\\t\\tgap: 12px;\\n\\t}\\n\\n\\t&__documentation {\\n\\t\\ta {\\n\\t\\t\\ttext-decoration: underline;\\n\\t\\t}\\n\\t\\tli {\\n\\t\\t\\tpadding-inline-start: 20px;\\n\\n\\t\\t\\t&::before {\\n\\t\\t\\t\\twidth: 5px;\\n\\t\\t\\t\\theight: 5px;\\n\\t\\t\\t\\tborder-radius: 100%;\\n\\t\\t\\t\\tbackground-color: var(--color-main-text);\\n\\t\\t\\t\\tcontent: \\\"\\\";\\n\\t\\t\\t\\tfloat: inline-start;\\n\\t\\t\\t\\tmargin-inline-start: -13px;\\n\\t\\t\\t\\tposition: relative;\\n\\t\\t\\t\\ttop: 10px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\n.force {\\n\\tcolor: var(--color-error);\\n\\tborder-color: var(--color-error);\\n\\tbackground: var(--color-main-background);\\n}\\n.force:hover,\\n.force:active {\\n\\tcolor: var(--color-main-background);\\n\\tborder-color: var(--color-error) !important;\\n\\tbackground: var(--color-error);\\n}\\n\\n.missing-dependencies {\\n\\tlist-style: initial;\\n\\tlist-style-type: initial;\\n\\tlist-style-position: inside;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-sidebar-tabs__release h2[data-v-2261a93d]{border-bottom:1px solid var(--color-border);font-size:24px}.app-sidebar-tabs__release-text[data-v-2261a93d] h3{font-size:20px}.app-sidebar-tabs__release-text[data-v-2261a93d] h4{font-size:17px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue\"],\"names\":[],\"mappings\":\"AAEC,+CACC,2CAAA,CACA,cAAA,CAKA,oDACC,cAAA,CAED,oDACC,cAAA\",\"sourcesContent\":[\"\\n.app-sidebar-tabs__release {\\n\\th2 {\\n\\t\\tborder-bottom: 1px solid var(--color-border);\\n\\t\\tfont-size: 24px;\\n\\t}\\n\\n\\t&-text {\\n\\t\\t// Overwrite changelog heading styles\\n\\t\\t:deep(h3) {\\n\\t\\t\\tfont-size: 20px;\\n\\t\\t}\\n\\t\\t:deep(h4) {\\n\\t\\t\\tfont-size: 17px;\\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, `.settings-markdown[data-v-7c5c8e59] h1,.settings-markdown[data-v-7c5c8e59] h2,.settings-markdown[data-v-7c5c8e59] h3,.settings-markdown[data-v-7c5c8e59] h4,.settings-markdown[data-v-7c5c8e59] h5,.settings-markdown[data-v-7c5c8e59] h6{font-weight:600;line-height:120%;margin-top:24px;margin-bottom:12px;color:var(--color-main-text)}.settings-markdown[data-v-7c5c8e59] h1{font-size:36px;margin-top:48px}.settings-markdown[data-v-7c5c8e59] h2{font-size:28px;margin-top:48px}.settings-markdown[data-v-7c5c8e59] h3{font-size:24px}.settings-markdown[data-v-7c5c8e59] h4{font-size:21px}.settings-markdown[data-v-7c5c8e59] h5{font-size:17px}.settings-markdown[data-v-7c5c8e59] h6{font-size:var(--default-font-size)}.settings-markdown[data-v-7c5c8e59] pre{white-space:pre;overflow-x:auto;background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:1em 1.3em;margin-bottom:1em}.settings-markdown[data-v-7c5c8e59] p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}.settings-markdown[data-v-7c5c8e59] li{position:relative}.settings-markdown[data-v-7c5c8e59] ul,.settings-markdown[data-v-7c5c8e59] ol{padding-left:10px;margin-left:10px}.settings-markdown[data-v-7c5c8e59] ul li{list-style-type:disc}.settings-markdown[data-v-7c5c8e59] ul>li>ul>li{list-style-type:circle}.settings-markdown[data-v-7c5c8e59] ul>li>ul>li ul li{list-style-type:square}.settings-markdown[data-v-7c5c8e59] blockquote{padding-left:1em;border-left:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-left:0;margin-right:0}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/Markdown.vue\"],\"names\":[],\"mappings\":\"AAGA,0OAMC,eAAA,CACA,gBAAA,CACA,eAAA,CACA,kBAAA,CACA,4BAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,kCAAA,CAGD,wCACC,eAAA,CACA,eAAA,CACA,6CAAA,CACA,kCAAA,CACA,iBAAA,CACA,iBAAA,CAGD,2CACC,6CAAA,CACA,kCAAA,CACA,iBAAA,CAGD,uCACC,iBAAA,CAGD,8EACC,iBAAA,CACA,gBAAA,CAGD,0CACC,oBAAA,CAGD,gDACC,sBAAA,CAGD,sDACC,sBAAA,CAGD,+CACC,gBAAA,CACA,kDAAA,CACA,mCAAA,CACA,aAAA,CACA,cAAA\",\"sourcesContent\":[\"\\n.settings-markdown::v-deep {\\n\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6 {\\n\\tfont-weight: 600;\\n\\tline-height: 120%;\\n\\tmargin-top: 24px;\\n\\tmargin-bottom: 12px;\\n\\tcolor: var(--color-main-text);\\n}\\n\\nh1 {\\n\\tfont-size: 36px;\\n\\tmargin-top: 48px;\\n}\\n\\nh2 {\\n\\tfont-size: 28px;\\n\\tmargin-top: 48px;\\n}\\n\\nh3 {\\n\\tfont-size: 24px;\\n}\\n\\nh4 {\\n\\tfont-size: 21px;\\n}\\n\\nh5 {\\n\\tfont-size: 17px;\\n}\\n\\nh6 {\\n\\tfont-size: var(--default-font-size);\\n}\\n\\npre {\\n\\twhite-space: pre;\\n\\toverflow-x: auto;\\n\\tbackground-color: var(--color-background-dark);\\n\\tborder-radius: var(--border-radius);\\n\\tpadding: 1em 1.3em;\\n\\tmargin-bottom: 1em;\\n}\\n\\np code {\\n\\tbackground-color: var(--color-background-dark);\\n\\tborder-radius: var(--border-radius);\\n\\tpadding: .1em .3em;\\n}\\n\\nli {\\n\\tposition: relative;\\n}\\n\\nul, ol {\\n\\tpadding-left: 10px;\\n\\tmargin-left: 10px;\\n}\\n\\nul li {\\n\\tlist-style-type: disc;\\n}\\n\\nul > li > ul > li {\\n\\tlist-style-type: circle;\\n}\\n\\nul > li > ul > li ul li {\\n\\tlist-style-type: square;\\n}\\n\\nblockquote {\\n\\tpadding-left: 1em;\\n\\tborder-left: 4px solid var(--color-primary-element);\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tmargin-left: 0;\\n\\tmargin-right: 0;\\n}\\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, `.app-sidebar--with-screenshot[data-v-31ecb666] .app-sidebar-header__figure{background-size:cover}.app-sidebar__fallback-icon[data-v-31ecb666]{width:100%;height:100%}.app-sidebar__badges[data-v-31ecb666]{display:flex;flex-direction:row;gap:12px}.app-sidebar__version[data-v-31ecb666]{color:var(--color-text-maxcontrast)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/AppStoreSidebar.vue\"],\"names\":[],\"mappings\":\"AAIE,2EACC,qBAAA,CAIF,6CAEC,UAAA,CACA,WAAA,CAGD,sCACC,YAAA,CACA,kBAAA,CACA,QAAA,CAGD,uCACC,mCAAA\",\"sourcesContent\":[\"\\n.app-sidebar {\\n\\t// If a screenshot is available it should cover the whole figure\\n\\t&--with-screenshot {\\n\\t\\t:deep(.app-sidebar-header__figure) {\\n\\t\\t\\tbackground-size: cover;\\n\\t\\t}\\n\\t}\\n\\n\\t&__fallback-icon {\\n\\t\\t// both 100% to center the icon\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t}\\n\\n\\t&__badges {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: row;\\n\\t\\tgap: 12px;\\n\\t}\\n\\n\\t&__version {\\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, `\n.app-score__wrapper[data-v-7d015114] {\n\tdisplay: inline-flex;\n\tcolor: var(--color-favorite, #a08b00);\n> *[data-v-7d015114] {\n\t\tvertical-align: text-bottom;\n}\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppList/AppScore.vue\"],\"names\":[],\"mappings\":\";AAiFA;CACA,oBAAA;CACA,qCAAA;AAEA;EACA,2BAAA;AACA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n - @author Ferdinand Thiessen <opensource@fthiessen.de>\\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<span role=\\\"img\\\"\\n\\t\\t:aria-label=\\\"title\\\"\\n\\t\\t:title=\\\"title\\\"\\n\\t\\tclass=\\\"app-score__wrapper\\\">\\n\\t\\t<NcIconSvgWrapper v-for=\\\"index in fullStars\\\"\\n\\t\\t\\t:key=\\\"`full-star-${index}`\\\"\\n\\t\\t\\t:path=\\\"mdiStar\\\"\\n\\t\\t\\tinline />\\n\\t\\t<NcIconSvgWrapper v-if=\\\"hasHalfStar\\\" :path=\\\"mdiStarHalfFull\\\" inline />\\n\\t\\t<NcIconSvgWrapper v-for=\\\"index in emptyStars\\\"\\n\\t\\t\\t:key=\\\"`empty-star-${index}`\\\"\\n\\t\\t\\t:path=\\\"mdiStarOutline\\\"\\n\\t\\t\\tinline />\\n\\t</span>\\n</template>\\n<script lang=\\\"ts\\\">\\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'\\nimport { mdiStar, mdiStarHalfFull, mdiStarOutline } from '@mdi/js'\\nimport { translate as t } from '@nextcloud/l10n'\\nimport { defineComponent } from 'vue'\\n\\nexport default defineComponent({\\n\\tname: 'AppScore',\\n\\tcomponents: {\\n\\t\\tNcIconSvgWrapper,\\n\\t},\\n\\tprops: {\\n\\t\\tscore: {\\n\\t\\t\\ttype: Number,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t},\\n\\tsetup() {\\n\\t\\treturn {\\n\\t\\t\\tmdiStar,\\n\\t\\t\\tmdiStarHalfFull,\\n\\t\\t\\tmdiStarOutline,\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\ttitle() {\\n\\t\\t\\tconst appScore = (this.score * 5).toFixed(1)\\n\\t\\t\\treturn t('settings', 'Community rating: {score}/5', { score: appScore })\\n\\t\\t},\\n\\t\\tfullStars() {\\n\\t\\t\\treturn Math.floor(this.score * 5 + 0.25)\\n\\t\\t},\\n\\t\\temptyStars() {\\n\\t\\t\\treturn Math.min(Math.floor((1 - this.score) * 5 + 0.25), 5 - this.fullStars)\\n\\t\\t},\\n\\t\\thasHalfStar() {\\n\\t\\t\\treturn (this.fullStars + this.emptyStars) < 5\\n\\t\\t},\\n\\t},\\n})\\n</script>\\n<style scoped>\\n.app-score__wrapper {\\n\\tdisplay: inline-flex;\\n\\tcolor: var(--color-favorite, #a08b00);\\n\\n\\t> * {\\n\\t\\tvertical-align: text-bottom;\\n\\t}\\n}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.empty-content__loading[data-v-a75d4530] {\n\theight: 100%;\n}\n.app-settings-content__label[data-v-a75d4530] {\n\tmargin-block-start: var(--app-navigation-padding);\n\tmargin-inline-start: calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2);\n\tmin-height: var(--default-clickable-area);\n\tline-height: var(--default-clickable-area);\n\tvertical-align: center;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/AppStore.vue\"],\"names\":[],\"mappings\":\";AAoFA;CACA,YAAA;AACA;AAEA;CACA,iDAAA;CACA,4FAAA;CACA,yCAAA;CACA,0CAAA;CACA,sBAAA;AACA\",\"sourcesContent\":[\"<!--\\n\\t- @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\\n\\t-\\n\\t- @author Julius Härtl <jus@bitgrid.net>\\n\\t- @author Ferdinand Thiessen <opensource@fthiessen.de>\\n\\t-\\n\\t- @license AGPL-3.0-or-later\\n\\t-\\n\\t- This program is free software: you can redistribute it and/or modify\\n\\t- it under the terms of the GNU Affero General Public License as\\n\\t- published by the Free Software Foundation, either version 3 of the\\n\\t- License, or (at your option) any later version.\\n\\t-\\n\\t- This program is distributed in the hope that it will be useful,\\n\\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\\n\\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n\\t- GNU Affero General Public License for more details.\\n\\t-\\n\\t- You should have received a copy of the GNU Affero General Public License\\n\\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\\n\\t-\\n\\t-->\\n\\n<template>\\n\\t<!-- Apps list -->\\n\\t<NcAppContent class=\\\"app-settings-content\\\"\\n\\t\\t:page-heading=\\\"appStoreLabel\\\">\\n\\t\\t<h2 class=\\\"app-settings-content__label\\\" v-text=\\\"viewLabel\\\" />\\n\\n\\t\\t<AppStoreDiscoverSection v-if=\\\"currentCategory === 'discover'\\\" />\\n\\t\\t<NcEmptyContent v-else-if=\\\"isLoading\\\"\\n\\t\\t\\tclass=\\\"empty-content__loading\\\"\\n\\t\\t\\t:name=\\\"t('settings', 'Loading app list')\\\">\\n\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t<NcLoadingIcon :size=\\\"64\\\" />\\n\\t\\t\\t</template>\\n\\t\\t</NcEmptyContent>\\n\\t\\t<AppList v-else :category=\\\"currentCategory\\\" />\\n\\t</NcAppContent>\\n</template>\\n\\n<script setup lang=\\\"ts\\\">\\nimport { translate as t } from '@nextcloud/l10n'\\nimport { computed, getCurrentInstance, onBeforeMount, watchEffect } from 'vue'\\nimport { useRoute } from 'vue-router/composables'\\n\\nimport { useAppsStore } from '../store/apps-store'\\nimport { APPS_SECTION_ENUM } from '../constants/AppsConstants'\\n\\nimport NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent.js'\\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\\nimport AppList from '../components/AppList.vue'\\nimport AppStoreDiscoverSection from '../components/AppStoreDiscover/AppStoreDiscoverSection.vue'\\n\\nconst route = useRoute()\\nconst store = useAppsStore()\\n\\n/**\\n * ID of the current active category, default is `discover`\\n */\\nconst currentCategory = computed(() => route.params?.category ?? 'discover')\\n\\nconst appStoreLabel = t('settings', 'App Store')\\nconst viewLabel = computed(() => APPS_SECTION_ENUM[currentCategory.value] ?? store.getCategoryById(currentCategory.value)?.displayName ?? appStoreLabel)\\n\\nwatchEffect(() => {\\n\\twindow.document.title = `${viewLabel.value} - ${appStoreLabel} - Nextcloud`\\n})\\n\\n// TODO this part should be migrated to pinia\\nconst instance = getCurrentInstance()\\n/** Is the app list loading */\\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\\nconst isLoading = computed(() => (instance?.proxy as any).$store.getters.loading('list'))\\nonBeforeMount(() => {\\n\\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\\n\\t(instance?.proxy as any).$store.dispatch('getCategories', { shouldRefetchCategories: true });\\n\\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\\n\\t(instance?.proxy as any).$store.dispatch('getAllApps')\\n})\\n</script>\\n\\n<style scoped>\\n.empty-content__loading {\\n\\theight: 100%;\\n}\\n\\n.app-settings-content__label {\\n\\tmargin-block-start: var(--app-navigation-padding);\\n\\tmargin-inline-start: calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2);\\n\\tmin-height: var(--default-clickable-area);\\n\\tline-height: var(--default-clickable-area);\\n\\tvertical-align: center;\\n}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n/* The categories-loading indicator */\n.categories--loading[data-v-d15221f2] {\n\tflex: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/AppStoreNavigation.vue\"],\"names\":[],\"mappings\":\";AAsIA,qCAAA;AACA;CACA,OAAA;CACA,aAAA;CACA,mBAAA;CACA,uBAAA;AACA\",\"sourcesContent\":[\"<template>\\n\\t<!-- Categories & filters -->\\n\\t<NcAppNavigation :aria-label=\\\"t('settings', 'Apps')\\\">\\n\\t\\t<template #list>\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-discover\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'discover'} }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.discover\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.discover\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-installed\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'installed'} }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.installed\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.installed\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-enabled\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'enabled' } }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.enabled\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.enabled\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-disabled\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'disabled' } }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.disabled\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.disabled\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t<NcAppNavigationItem v-if=\\\"updateCount > 0\\\"\\n\\t\\t\\t\\tid=\\\"app-category-updates\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'updates' } }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.updates\\\">\\n\\t\\t\\t\\t<template #counter>\\n\\t\\t\\t\\t\\t<NcCounterBubble>{{ updateCount }}</NcCounterBubble>\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.updates\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-your-bundles\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'app-bundles' } }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM['app-bundles']\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.bundles\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\n\\t\\t\\t<NcAppNavigationSpacer />\\n\\n\\t\\t\\t<!-- App store categories -->\\n\\t\\t\\t<li v-if=\\\"appstoreEnabled && categoriesLoading\\\" class=\\\"categories--loading\\\">\\n\\t\\t\\t\\t<NcLoadingIcon :size=\\\"20\\\" :aria-label=\\\"t('settings', 'Loading categories')\\\" />\\n\\t\\t\\t</li>\\n\\t\\t\\t<template v-else-if=\\\"appstoreEnabled && !categoriesLoading\\\">\\n\\t\\t\\t\\t<NcAppNavigationItem v-if=\\\"isSubscribed\\\"\\n\\t\\t\\t\\t\\tid=\\\"app-category-supported\\\"\\n\\t\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'supported' } }\\\"\\n\\t\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.supported\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.supported\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-featured\\\"\\n\\t\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'featured' } }\\\"\\n\\t\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.featured\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.featured\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t</NcAppNavigationItem>\\n\\n\\t\\t\\t\\t<NcAppNavigationItem v-for=\\\"category in categories\\\"\\n\\t\\t\\t\\t\\t:id=\\\"`app-category-${category.id}`\\\"\\n\\t\\t\\t\\t\\t:key=\\\"category.id\\\"\\n\\t\\t\\t\\t\\t:name=\\\"category.displayName\\\"\\n\\t\\t\\t\\t\\t:to=\\\"{\\n\\t\\t\\t\\t\\t\\tname: 'apps-category',\\n\\t\\t\\t\\t\\t\\tparams: { category: category.id },\\n\\t\\t\\t\\t\\t}\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"category.icon\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t</template>\\n\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-developer-docs\\\"\\n\\t\\t\\t\\t:name=\\\"t('settings', 'Developer documentation ↗')\\\"\\n\\t\\t\\t\\t:href=\\\"developerDocsUrl\\\" />\\n\\t\\t</template>\\n\\t</NcAppNavigation>\\n</template>\\n\\n<script setup lang=\\\"ts\\\">\\nimport { loadState } from '@nextcloud/initial-state'\\nimport { translate as t } from '@nextcloud/l10n'\\nimport { computed, onBeforeMount } from 'vue'\\nimport { APPS_SECTION_ENUM } from '../constants/AppsConstants'\\nimport { useAppsStore } from '../store/apps-store'\\n\\nimport NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js'\\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\\nimport NcAppNavigationSpacer from '@nextcloud/vue/dist/Components/NcAppNavigationSpacer.js'\\nimport NcCounterBubble from '@nextcloud/vue/dist/Components/NcCounterBubble.js'\\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'\\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\\n\\nimport APPSTORE_CATEGORY_ICONS from '../constants/AppstoreCategoryIcons.ts'\\n\\nconst updateCount = loadState<number>('settings', 'appstoreUpdateCount', 0)\\nconst appstoreEnabled = loadState<boolean>('settings', 'appstoreEnabled', true)\\nconst developerDocsUrl = loadState<string>('settings', 'appstoreDeveloperDocs', '')\\n\\nconst store = useAppsStore()\\nconst categories = computed(() => store.categories)\\nconst categoriesLoading = computed(() => store.loading.categories)\\n\\n/**\\n * Check if the current instance has a support subscription from the Nextcloud GmbH\\n *\\n * For customers of the Nextcloud GmbH the app level will be set to `300` for apps that are supported in their subscription\\n */\\nconst isSubscribed = computed(() => store.apps.find(({ level }) => level === 300) !== undefined)\\n\\n// load categories when component is mounted\\nonBeforeMount(() => {\\n\\tstore.loadCategories()\\n\\tstore.loadApps()\\n})\\n</script>\\n\\n<style scoped>\\n/* The categories-loading indicator */\\n.categories--loading {\\n\\tflex: 1;\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return (_setup.isSupported || _setup.isFeatured)?_c('span',{staticClass:\"app-level-badge\",class:{ 'app-level-badge--supported': _setup.isSupported },attrs:{\"title\":_setup.badgeTitle}},[_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.badgeIcon,\"size\":20,\"inline\":\"\"}}),_vm._v(\"\\n\\t\"+_vm._s(_setup.badgeText)+\"\\n\")],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLevelBadge.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLevelBadge.vue?vue&type=script&setup=true&lang=ts\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLevelBadge.vue?vue&type=style&index=0&id=3590dbeb&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!./AppLevelBadge.vue?vue&type=style&index=0&id=3590dbeb&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppLevelBadge.vue?vue&type=template&id=3590dbeb&scoped=true\"\nimport script from \"./AppLevelBadge.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppLevelBadge.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppLevelBadge.vue?vue&type=style&index=0&id=3590dbeb&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 \"3590dbeb\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('span',{staticClass:\"app-score__wrapper\",attrs:{\"role\":\"img\",\"aria-label\":_vm.title,\"title\":_vm.title}},[_vm._l((_vm.fullStars),function(index){return _c('NcIconSvgWrapper',{key:`full-star-${index}`,attrs:{\"path\":_vm.mdiStar,\"inline\":\"\"}})}),_vm._v(\" \"),(_vm.hasHalfStar)?_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiStarHalfFull,\"inline\":\"\"}}):_vm._e(),_vm._v(\" \"),_vm._l((_vm.emptyStars),function(index){return _c('NcIconSvgWrapper',{key:`empty-star-${index}`,attrs:{\"path\":_vm.mdiStarOutline,\"inline\":\"\"}})})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=script&lang=ts\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=style&index=0&id=7d015114&prod&scoped=true&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=style&index=0&id=7d015114&prod&scoped=true&lang=css\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppScore.vue?vue&type=template&id=7d015114&scoped=true\"\nimport script from \"./AppScore.vue?vue&type=script&lang=ts\"\nexport * from \"./AppScore.vue?vue&type=script&lang=ts\"\nimport style0 from \"./AppScore.vue?vue&type=style&index=0&id=7d015114&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7d015114\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_setup.NcAppContent,{staticClass:\"app-settings-content\",attrs:{\"page-heading\":_setup.appStoreLabel}},[_c('h2',{staticClass:\"app-settings-content__label\",domProps:{\"textContent\":_vm._s(_setup.viewLabel)}}),_vm._v(\" \"),(_setup.currentCategory === 'discover')?_c(_setup.AppStoreDiscoverSection):(_setup.isLoading)?_c(_setup.NcEmptyContent,{staticClass:\"empty-content__loading\",attrs:{\"name\":_setup.t('settings', 'Loading app list')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcLoadingIcon,{attrs:{\"size\":64}})]},proxy:true}])}):_c(_setup.AppList,{attrs:{\"category\":_setup.currentCategory}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<script>\nexport default {\n\tname: 'SvgFilterMixin',\n\tdata() {\n\t\treturn {\n\t\t\tfilterId: '',\n\t\t}\n\t},\n\tcomputed: {\n\t\tfilterUrl() {\n\t\t\treturn `url(#${this.filterId})`\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.filterId = 'invertIconApps-' + Math.random().toString(36).substring(2)\n\t},\n}\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SvgFilterMixin.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SvgFilterMixin.vue?vue&type=script&lang=js\"","var render, staticRenderFns\nimport script from \"./SvgFilterMixin.vue?vue&type=script&lang=js\"\nexport * from \"./SvgFilterMixin.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<component :is=\"listView ? `tr` : `li`\"\n\t\tclass=\"app-item\"\n\t\t:class=\"{\n\t\t\t'app-item--list-view': listView,\n\t\t\t'app-item--store-view': !listView,\n\t\t\t'app-item--selected': isSelected,\n\t\t\t'app-item--with-sidebar': withSidebar,\n\t\t}\">\n\t\t<component :is=\"dataItemTag\"\n\t\t\tclass=\"app-image app-image-icon\"\n\t\t\t:headers=\"getDataItemHeaders(`app-table-col-icon`)\">\n\t\t\t<div v-if=\"(listView && !app.preview) || (!listView && !screenshotLoaded)\" class=\"icon-settings-dark\" />\n\n\t\t\t<svg v-else-if=\"listView && app.preview\"\n\t\t\t\twidth=\"32\"\n\t\t\t\theight=\"32\"\n\t\t\t\tviewBox=\"0 0 32 32\">\n\t\t\t\t<image x=\"0\"\n\t\t\t\t\ty=\"0\"\n\t\t\t\t\twidth=\"32\"\n\t\t\t\t\theight=\"32\"\n\t\t\t\t\tpreserveAspectRatio=\"xMinYMin meet\"\n\t\t\t\t\t:xlink:href=\"app.preview\"\n\t\t\t\t\tclass=\"app-icon\" />\n\t\t\t</svg>\n\n\t\t\t<img v-if=\"!listView && app.screenshot && screenshotLoaded\" :src=\"app.screenshot\" alt=\"\">\n\t\t</component>\n\t\t<component :is=\"dataItemTag\"\n\t\t\tclass=\"app-name\"\n\t\t\t:headers=\"getDataItemHeaders(`app-table-col-name`)\">\n\t\t\t<router-link class=\"app-name--link\"\n\t\t\t\t:to=\"{\n\t\t\t\t\tname: 'apps-details',\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tcategory: category,\n\t\t\t\t\t\tid: app.id\n\t\t\t\t\t},\n\t\t\t\t}\"\n\t\t\t\t:aria-label=\"t('settings', 'Show details for {appName} app', { appName:app.name })\">\n\t\t\t\t{{ app.name }}\n\t\t\t</router-link>\n\t\t</component>\n\t\t<component :is=\"dataItemTag\"\n\t\t\tv-if=\"!listView\"\n\t\t\tclass=\"app-summary\"\n\t\t\t:headers=\"getDataItemHeaders(`app-version`)\">\n\t\t\t{{ app.summary }}\n\t\t</component>\n\t\t<component :is=\"dataItemTag\"\n\t\t\tv-if=\"listView\"\n\t\t\tclass=\"app-version\"\n\t\t\t:headers=\"getDataItemHeaders(`app-table-col-version`)\">\n\t\t\t<span v-if=\"app.version\">{{ app.version }}</span>\n\t\t\t<span v-else-if=\"app.appstoreData.releases[0].version\">{{ app.appstoreData.releases[0].version }}</span>\n\t\t</component>\n\n\t\t<component :is=\"dataItemTag\" :headers=\"getDataItemHeaders(`app-table-col-level`)\" class=\"app-level\">\n\t\t\t<AppLevelBadge :level=\"app.level\" />\n\t\t\t<AppScore v-if=\"hasRating && !listView\" :score=\"app.score\" />\n\t\t</component>\n\t\t<component :is=\"dataItemTag\" :headers=\"getDataItemHeaders(`app-table-col-actions`)\" class=\"app-actions\">\n\t\t\t<div v-if=\"app.error\" class=\"warning\">\n\t\t\t\t{{ app.error }}\n\t\t\t</div>\n\t\t\t<div v-if=\"isLoading\" class=\"icon icon-loading-small\" />\n\t\t\t<NcButton v-if=\"app.update\"\n\t\t\t\ttype=\"primary\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"update(app.id)\">\n\t\t\t\t{{ t('settings', 'Update to {update}', {update:app.update}) }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"app.canUnInstall\"\n\t\t\t\tclass=\"uninstall\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"remove(app.id)\">\n\t\t\t\t{{ t('settings', 'Remove') }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"app.active\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"disable(app.id)\">\n\t\t\t\t{{ t('settings','Disable') }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"!app.active && (app.canInstall || app.isCompatible)\"\n\t\t\t\t:title=\"enableButtonTooltip\"\n\t\t\t\t:aria-label=\"enableButtonTooltip\"\n\t\t\t\ttype=\"primary\"\n\t\t\t\t:disabled=\"!app.canInstall || installing || isLoading\"\n\t\t\t\t@click.stop=\"enable(app.id)\">\n\t\t\t\t{{ enableButtonText }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-else-if=\"!app.active\"\n\t\t\t\t:title=\"forceEnableButtonTooltip\"\n\t\t\t\t:aria-label=\"forceEnableButtonTooltip\"\n\t\t\t\ttype=\"secondary\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"forceEnable(app.id)\">\n\t\t\t\t{{ forceEnableButtonText }}\n\t\t\t</NcButton>\n\t\t</component>\n\t</component>\n</template>\n\n<script>\nimport AppScore from './AppScore.vue'\nimport AppLevelBadge from './AppLevelBadge.vue'\nimport AppManagement from '../../mixins/AppManagement.js'\nimport SvgFilterMixin from '../SvgFilterMixin.vue'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\n\nexport default {\n\tname: 'AppItem',\n\tcomponents: {\n\t\tAppLevelBadge,\n\t\tAppScore,\n\t\tNcButton,\n\t},\n\tmixins: [AppManagement, SvgFilterMixin],\n\tprops: {\n\t\tapp: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tcategory: {},\n\t\tlistView: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tuseBundleView: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\theaders: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisSelected: false,\n\t\t\tscrolled: false,\n\t\t\tscreenshotLoaded: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\thasRating() {\n\t\t\treturn this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5\n\t\t},\n\t\tdataItemTag() {\n\t\t\treturn this.listView ? 'td' : 'div'\n\t\t},\n\t\twithSidebar() {\n\t\t\treturn !!this.$route.params.id\n\t\t},\n\t},\n\twatch: {\n\t\t'$route.params.id'(id) {\n\t\t\tthis.isSelected = (this.app.id === id)\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.isSelected = (this.app.id === this.$route.params.id)\n\t\tif (this.app.releases && this.app.screenshot) {\n\t\t\tconst image = new Image()\n\t\t\timage.onload = () => {\n\t\t\t\tthis.screenshotLoaded = true\n\t\t\t}\n\t\t\timage.src = this.app.screenshot\n\t\t}\n\t},\n\twatchers: {\n\n\t},\n\tmethods: {\n\t\tprefix(prefix, content) {\n\t\t\treturn prefix + '_' + content\n\t\t},\n\n\t\tgetDataItemHeaders(columnName) {\n\t\t\treturn this.useBundleView ? [this.headers, columnName].join(' ') : null\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n@use '../../../../../core/css/variables.scss' as variables;\n@use 'sass:math';\n\n.app-item {\n\tposition: relative;\n\n\t&:hover {\n\t\tbackground-color: var(--color-background-dark);\n\t}\n\n\t&--list-view {\n\t\t--app-item-padding: calc(var(--default-grid-baseline) * 2);\n\t\t--app-item-height: calc(var(--default-clickable-area) + var(--app-item-padding) * 2);\n\n\t\t&.app-item--selected {\n\t\t\tbackground-color: var(--color-background-dark);\n\t\t}\n\n\t\t> * {\n\t\t\tvertical-align: middle;\n\t\t\tborder-bottom: 1px solid var(--color-border);\n\t\t\tpadding: var(--app-item-padding);\n\t\t\theight: var(--app-item-height);\n\t\t}\n\n\t\t.app-image {\n\t\t\twidth: var(--default-clickable-area);\n\t\t\theight: auto;\n\t\t\ttext-align: right;\n\t\t}\n\n\t\t.app-image-icon svg,\n\t\t.app-image-icon .icon-settings-dark {\n\t\t\tmargin-top: 5px;\n\t\t\twidth: 20px;\n\t\t\theight: 20px;\n\t\t\topacity: .5;\n\t\t\tbackground-size: cover;\n\t\t\tdisplay: inline-block;\n\t\t}\n\n\t\t.app-name {\n\t\t\tpadding: 0 var(--app-item-padding);\n\t\t}\n\n\t\t.app-name--link {\n\t\t\theight: var(--app-item-height);\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t// Note: because of Safari bug, we cannot position link overlay relative to the table row\n\t\t// So we need to manually position it relative to the table container and cell\n\t\t// See: https://bugs.webkit.org/show_bug.cgi?id=240961\n\t\t.app-name--link::after {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\theight: var(--app-item-height);\n\t\t}\n\n\t\t.app-actions {\n\t\t\tdisplay: flex;\n\t\t\tgap: var(--app-item-padding);\n\t\t\tflex-wrap: wrap;\n\t\t\tjustify-content: end;\n\n\t\t\t.icon-loading-small {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\ttop: 4px;\n\t\t\t\tmargin-right: 10px;\n\t\t\t}\n\t\t}\n\n\t\t/* hide app version and level on narrower screens */\n\t\t@media only screen and (max-width: 900px) {\n\t\t\t.app-version,\n\t\t\t.app-level {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\n\t\t/* Hide actions on a small screen. Click on app opens fill-screen sidebar with the buttons */\n\t\t@media only screen and (max-width: math.div(variables.$breakpoint-mobile, 2)) {\n\t\t\t.app-actions {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t&--store-view {\n\t\tpadding: 30px;\n\n\t\t.app-image-icon .icon-settings-dark {\n\t\t\twidth: 100%;\n\t\t\theight: 150px;\n\t\t\tbackground-size: 45px;\n\t\t\topacity: 0.5;\n\t\t}\n\n\t\t.app-image-icon svg {\n\t\t\tposition: absolute;\n\t\t\tbottom: 43px;\n\t\t\t/* position halfway vertically */\n\t\t\twidth: 64px;\n\t\t\theight: 64px;\n\t\t\topacity: .1;\n\t\t}\n\n\t\t.app-name {\n\t\t\tmargin: 5px 0;\n\t\t}\n\n\t\t.app-name--link::after {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\tbottom: 0;\n\t\t}\n\n\t\t.app-actions {\n\t\t\tmargin: 10px 0;\n\t\t}\n\n\t\t@media only screen and (min-width: 1601px) {\n\t\t\twidth: 25%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 33%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: 1600px) {\n\t\t\twidth: 25%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 33%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: 1400px) {\n\t\t\twidth: 33%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 50%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: 900px) {\n\t\t\twidth: 50%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: variables.$breakpoint-mobile) {\n\t\t\twidth: 50%;\n\t\t}\n\n\t\t@media only screen and (max-width: 480px) {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n}\n\n.app-icon {\n\tfilter: var(--background-invert-if-bright);\n}\n\n.app-image {\n\tposition: relative;\n\theight: 150px;\n\topacity: 1;\n\toverflow: hidden;\n\n\timg {\n\t\twidth: 100%;\n\t}\n}\n\n.app-version {\n\tcolor: var(--color-text-maxcontrast);\n}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=script&lang=js\"","\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!./AppItem.vue?vue&type=style&index=0&id=0dbcb644&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!./AppItem.vue?vue&type=style&index=0&id=0dbcb644&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppItem.vue?vue&type=template&id=0dbcb644&scoped=true\"\nimport script from \"./AppItem.vue?vue&type=script&lang=js\"\nexport * from \"./AppItem.vue?vue&type=script&lang=js\"\nimport style0 from \"./AppItem.vue?vue&type=style&index=0&id=0dbcb644&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 \"0dbcb644\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.listView ? `tr` : `li`,{tag:\"component\",staticClass:\"app-item\",class:{\n\t\t'app-item--list-view': _vm.listView,\n\t\t'app-item--store-view': !_vm.listView,\n\t\t'app-item--selected': _vm.isSelected,\n\t\t'app-item--with-sidebar': _vm.withSidebar,\n\t}},[_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-image app-image-icon\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-table-col-icon`)}},[((_vm.listView && !_vm.app.preview) || (!_vm.listView && !_vm.screenshotLoaded))?_c('div',{staticClass:\"icon-settings-dark\"}):(_vm.listView && _vm.app.preview)?_c('svg',{attrs:{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"0 0 32 32\"}},[_c('image',{staticClass:\"app-icon\",attrs:{\"x\":\"0\",\"y\":\"0\",\"width\":\"32\",\"height\":\"32\",\"preserveAspectRatio\":\"xMinYMin meet\",\"xlink:href\":_vm.app.preview}})]):_vm._e(),_vm._v(\" \"),(!_vm.listView && _vm.app.screenshot && _vm.screenshotLoaded)?_c('img',{attrs:{\"src\":_vm.app.screenshot,\"alt\":\"\"}}):_vm._e()]),_vm._v(\" \"),_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-name\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-table-col-name`)}},[_c('router-link',{staticClass:\"app-name--link\",attrs:{\"to\":{\n\t\t\t\tname: 'apps-details',\n\t\t\t\tparams: {\n\t\t\t\t\tcategory: _vm.category,\n\t\t\t\t\tid: _vm.app.id\n\t\t\t\t},\n\t\t\t},\"aria-label\":_vm.t('settings', 'Show details for {appName} app', { appName:_vm.app.name })}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.app.name)+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(!_vm.listView)?_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-summary\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-version`)}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.app.summary)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.listView)?_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-version\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-table-col-version`)}},[(_vm.app.version)?_c('span',[_vm._v(_vm._s(_vm.app.version))]):(_vm.app.appstoreData.releases[0].version)?_c('span',[_vm._v(_vm._s(_vm.app.appstoreData.releases[0].version))]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-level\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-table-col-level`)}},[_c('AppLevelBadge',{attrs:{\"level\":_vm.app.level}}),_vm._v(\" \"),(_vm.hasRating && !_vm.listView)?_c('AppScore',{attrs:{\"score\":_vm.app.score}}):_vm._e()],1),_vm._v(\" \"),_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-actions\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-table-col-actions`)}},[(_vm.app.error)?_c('div',{staticClass:\"warning\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.app.error)+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.isLoading)?_c('div',{staticClass:\"icon icon-loading-small\"}):_vm._e(),_vm._v(\" \"),(_vm.app.update)?_c('NcButton',{attrs:{\"type\":\"primary\",\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.update(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Update to {update}', {update:_vm.app.update}))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.app.canUnInstall)?_c('NcButton',{staticClass:\"uninstall\",attrs:{\"type\":\"tertiary\",\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.remove(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Remove'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.app.active)?_c('NcButton',{attrs:{\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.disable(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings','Disable'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(!_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible))?_c('NcButton',{attrs:{\"title\":_vm.enableButtonTooltip,\"aria-label\":_vm.enableButtonTooltip,\"type\":\"primary\",\"disabled\":!_vm.app.canInstall || _vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.enable(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.enableButtonText)+\"\\n\\t\\t\")]):(!_vm.app.active)?_c('NcButton',{attrs:{\"title\":_vm.forceEnableButtonTooltip,\"aria-label\":_vm.forceEnableButtonTooltip,\"type\":\"secondary\",\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.forceEnable(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.forceEnableButtonText)+\"\\n\\t\\t\")]):_vm._e()],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tif (queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t}\n\t};\n\n\tconst run = async (fn, resolve, args) => {\n\t\tactiveCount++;\n\n\t\tconst result = (async () => fn(...args))();\n\n\t\tresolve(result);\n\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\tnext();\n\t};\n\n\tconst enqueue = (fn, resolve, args) => {\n\t\tqueue.enqueue(run.bind(undefined, fn, resolve, args));\n\n\t\t(async () => {\n\t\t\t// This function needs to wait until the next microtask before comparing\n\t\t\t// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously\n\t\t\t// when the run function is dequeued and called. The comparison in the if-statement\n\t\t\t// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.\n\t\t\tawait Promise.resolve();\n\n\t\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\t\tqueue.dequeue()();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (fn, ...args) => new Promise(resolve => {\n\t\tenqueue(fn, resolve, args);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue: () => {\n\t\t\t\tqueue.clear();\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div id=\"app-content-inner\">\n\t\t<div id=\"apps-list\"\n\t\t\tclass=\"apps-list\"\n\t\t\t:class=\"{\n\t\t\t\t'apps-list--list-view': (useBundleView || useListView),\n\t\t\t\t'apps-list--store-view': useAppStoreView,\n\t\t\t}\">\n\t\t\t<template v-if=\"useListView\">\n\t\t\t\t<div v-if=\"showUpdateAll\" class=\"apps-list__toolbar\">\n\t\t\t\t\t{{ n('settings', '%n app has an update available', '%n apps have an update available', counter) }}\n\t\t\t\t\t<NcButton v-if=\"showUpdateAll\"\n\t\t\t\t\t\tid=\"app-list-update-all\"\n\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\t@click=\"updateAll\">\n\t\t\t\t\t\t{{ n('settings', 'Update', 'Update all', counter) }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\n\t\t\t\t<div v-if=\"!showUpdateAll\" class=\"apps-list__toolbar\">\n\t\t\t\t\t{{ t('settings', 'All apps are up-to-date.') }}\n\t\t\t\t</div>\n\n\t\t\t\t<TransitionGroup name=\"apps-list\" tag=\"table\" class=\"apps-list__list-container\">\n\t\t\t\t\t<tr key=\"app-list-view-header\">\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Icon') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Name') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Version') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Level') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Actions') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<AppItem v-for=\"app in apps\"\n\t\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\" />\n\t\t\t\t</TransitionGroup>\n\t\t\t</template>\n\n\t\t\t<table v-if=\"useBundleView\"\n\t\t\t\tclass=\"apps-list__list-container\">\n\t\t\t\t<tr key=\"app-list-view-header\">\n\t\t\t\t\t<th id=\"app-table-col-icon\">\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Icon') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t\t<th id=\"app-table-col-name\">\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Name') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t\t<th id=\"app-table-col-version\">\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Version') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t\t<th id=\"app-table-col-level\">\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Level') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t\t<th id=\"app-table-col-actions\">\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Actions') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t</tr>\n\t\t\t\t<template v-for=\"bundle in bundles\">\n\t\t\t\t\t<tr :key=\"bundle.id\">\n\t\t\t\t\t\t<th :id=\"`app-table-rowgroup-${bundle.id}`\" colspan=\"5\" scope=\"rowgroup\">\n\t\t\t\t\t\t\t<div class=\"apps-list__bundle-heading\">\n\t\t\t\t\t\t\t\t<span class=\"apps-list__bundle-header\">\n\t\t\t\t\t\t\t\t\t{{ bundle.name }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<NcButton type=\"secondary\" @click=\"toggleBundle(bundle.id)\">\n\t\t\t\t\t\t\t\t\t{{ t('settings', bundleToggleText(bundle.id)) }}\n\t\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<AppItem v-for=\"app in bundleApps(bundle.id)\"\n\t\t\t\t\t\t:key=\"bundle.id + app.id\"\n\t\t\t\t\t\t:use-bundle-view=\"true\"\n\t\t\t\t\t\t:headers=\"`app-table-rowgroup-${bundle.id}`\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\" />\n\t\t\t\t</template>\n\t\t\t</table>\n\t\t\t<ul v-if=\"useAppStoreView\" class=\"apps-list__store-container\">\n\t\t\t\t<AppItem v-for=\"app in apps\"\n\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t:category=\"category\"\n\t\t\t\t\t:list-view=\"false\" />\n\t\t\t</ul>\n\t\t</div>\n\n\t\t<div id=\"apps-list-search\" class=\"apps-list apps-list--list-view\">\n\t\t\t<div class=\"apps-list__list-container\">\n\t\t\t\t<table v-if=\"search !== '' && searchApps.length > 0\" class=\"apps-list__list-container\">\n\t\t\t\t\t<caption class=\"apps-list__bundle-header\">\n\t\t\t\t\t\t{{ t('settings', 'Results from other categories') }}\n\t\t\t\t\t</caption>\n\t\t\t\t\t<tr key=\"app-list-view-header\">\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Icon') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Name') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Version') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Level') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Actions') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<AppItem v-for=\"app in searchApps\"\n\t\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\" />\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div v-if=\"search !== '' && !loading && searchApps.length === 0 && apps.length === 0\" id=\"apps-list-empty\" class=\"emptycontent emptycontent-search\">\n\t\t\t<div id=\"app-list-empty-icon\" class=\"icon-settings-dark\" />\n\t\t\t<h2>{{ t('settings', 'No apps found for your version') }}</h2>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport AppItem from './AppList/AppItem.vue'\nimport pLimit from 'p-limit'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\n\nexport default {\n\tname: 'AppList',\n\tcomponents: {\n\t\tAppItem,\n\t\tNcButton,\n\t},\n\n\tprops: {\n\t\tcategory: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsearch: '',\n\t\t}\n\t},\n\tcomputed: {\n\t\tcounter() {\n\t\t\treturn this.apps.filter(app => app.update).length\n\t\t},\n\t\tloading() {\n\t\t\treturn this.$store.getters.loading('list')\n\t\t},\n\t\thasPendingUpdate() {\n\t\t\treturn this.apps.filter(app => app.update).length > 0\n\t\t},\n\t\tshowUpdateAll() {\n\t\t\treturn this.hasPendingUpdate && this.useListView\n\t\t},\n\t\tapps() {\n\t\t\tconst apps = this.$store.getters.getAllApps\n\t\t\t\t.filter(app => app.name.toLowerCase().search(this.search.toLowerCase()) !== -1)\n\t\t\t\t.sort(function(a, b) {\n\t\t\t\t\tconst sortStringA = '' + (a.active ? 0 : 1) + (a.update ? 0 : 1) + a.name\n\t\t\t\t\tconst sortStringB = '' + (b.active ? 0 : 1) + (b.update ? 0 : 1) + b.name\n\t\t\t\t\treturn OC.Util.naturalSortCompare(sortStringA, sortStringB)\n\t\t\t\t})\n\n\t\t\tif (this.category === 'installed') {\n\t\t\t\treturn apps.filter(app => app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'enabled') {\n\t\t\t\treturn apps.filter(app => app.active && app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'disabled') {\n\t\t\t\treturn apps.filter(app => !app.active && app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'app-bundles') {\n\t\t\t\treturn apps.filter(app => app.bundles)\n\t\t\t}\n\t\t\tif (this.category === 'updates') {\n\t\t\t\treturn apps.filter(app => app.update)\n\t\t\t}\n\t\t\tif (this.category === 'supported') {\n\t\t\t\t// For customers of the Nextcloud GmbH the app level will be set to `300` for apps that are supported in their subscription\n\t\t\t\treturn apps.filter(app => app.level === 300)\n\t\t\t}\n\t\t\tif (this.category === 'featured') {\n\t\t\t\t// An app level of `200` will be set for apps featured on the app store\n\t\t\t\treturn apps.filter(app => app.level === 200)\n\t\t\t}\n\n\t\t\t// filter app store categories\n\t\t\treturn apps.filter(app => {\n\t\t\t\treturn app.appstore && app.category !== undefined\n\t\t\t\t\t&& (app.category === this.category || app.category.indexOf(this.category) > -1)\n\t\t\t})\n\t\t},\n\t\tbundles() {\n\t\t\treturn this.$store.getters.getAppBundles.filter(bundle => this.bundleApps(bundle.id).length > 0)\n\t\t},\n\t\tbundleApps() {\n\t\t\treturn function(bundle) {\n\t\t\t\treturn this.$store.getters.getAllApps\n\t\t\t\t\t.filter(app => {\n\t\t\t\t\t\treturn app.bundleIds !== undefined && app.bundleIds.includes(bundle)\n\t\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\tsearchApps() {\n\t\t\tif (this.search === '') {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn this.$store.getters.getAllApps\n\t\t\t\t.filter(app => {\n\t\t\t\t\tif (app.name.toLowerCase().search(this.search.toLowerCase()) !== -1) {\n\t\t\t\t\t\treturn (!this.apps.find(_app => _app.id === app.id))\n\t\t\t\t\t}\n\t\t\t\t\treturn false\n\t\t\t\t})\n\t\t},\n\t\tuseAppStoreView() {\n\t\t\treturn !this.useListView && !this.useBundleView\n\t\t},\n\t\tuseListView() {\n\t\t\treturn (this.category === 'installed' || this.category === 'enabled' || this.category === 'disabled' || this.category === 'updates' || this.category === 'featured' || this.category === 'supported')\n\t\t},\n\t\tuseBundleView() {\n\t\t\treturn (this.category === 'app-bundles')\n\t\t},\n\t\tallBundlesEnabled() {\n\t\t\treturn (id) => {\n\t\t\t\treturn this.bundleApps(id).filter(app => !app.active).length === 0\n\t\t\t}\n\t\t},\n\t\tbundleToggleText() {\n\t\t\treturn (id) => {\n\t\t\t\tif (this.allBundlesEnabled(id)) {\n\t\t\t\t\treturn t('settings', 'Disable all')\n\t\t\t\t}\n\t\t\t\treturn t('settings', 'Download and enable all')\n\t\t\t}\n\t\t},\n\t},\n\n\tbeforeDestroy() {\n\t\tunsubscribe('nextcloud:unified-search.search', this.setSearch)\n\t\tunsubscribe('nextcloud:unified-search.reset', this.resetSearch)\n\t},\n\n\tmounted() {\n\t\tsubscribe('nextcloud:unified-search.search', this.setSearch)\n\t\tsubscribe('nextcloud:unified-search.reset', this.resetSearch)\n\t},\n\n\tmethods: {\n\t\tsetSearch({ query }) {\n\t\t\tthis.search = query\n\t\t},\n\t\tresetSearch() {\n\t\t\tthis.search = ''\n\t\t},\n\t\ttoggleBundle(id) {\n\t\t\tif (this.allBundlesEnabled(id)) {\n\t\t\t\treturn this.disableBundle(id)\n\t\t\t}\n\t\t\treturn this.enableBundle(id)\n\t\t},\n\t\tenableBundle(id) {\n\t\t\tconst apps = this.bundleApps(id).map(app => app.id)\n\t\t\tthis.$store.dispatch('enableApp', { appId: apps, groups: [] })\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error)\n\t\t\t\t\tOC.Notification.show(error)\n\t\t\t\t})\n\t\t},\n\t\tdisableBundle(id) {\n\t\t\tconst apps = this.bundleApps(id).map(app => app.id)\n\t\t\tthis.$store.dispatch('disableApp', { appId: apps, groups: [] })\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tOC.Notification.show(error)\n\t\t\t\t})\n\t\t},\n\t\tupdateAll() {\n\t\t\tconst limit = pLimit(1)\n\t\t\tthis.apps\n\t\t\t\t.filter(app => app.update)\n\t\t\t\t.map(app => limit(() => this.$store.dispatch('updateApp', { appId: app.id })),\n\t\t\t\t)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$toolbar-padding: 8px;\n$toolbar-height: 44px + $toolbar-padding * 2;\n\n.apps-list {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-content: flex-start;\n\n\t// For transition group\n\t&--move {\n\t\ttransition: transform 1s;\n\t}\n\n\t#app-list-update-all {\n\t\tmargin-left: 10px;\n\t}\n\n\t&__toolbar {\n\t\theight: $toolbar-height;\n\t\tpadding: $toolbar-padding;\n\t\t// Leave room for app-navigation-toggle\n\t\tpadding-left: $toolbar-height;\n\t\twidth: 100%;\n\t\tbackground-color: var(--color-main-background);\n\t\tposition: sticky;\n\t\ttop: 0;\n\t\tz-index: 1;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\n\t&--list-view {\n\t\tmargin-bottom: 100px;\n\t\t// For positioning link overlay on rows\n\t\tposition: relative;\n\t}\n\n\t&__list-container {\n\t\twidth: 100%;\n\t}\n\n\t&__store-container {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t}\n\n\t&__bundle-heading {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmargin: 20px 10px 20px 0;\n\t}\n\n\t&__bundle-header {\n\t\tmargin: 0 10px 0 50px;\n\t\tfont-weight: bold;\n\t\tfont-size: 20px;\n\t\tline-height: 30px;\n\t\tcolor: var(--color-text-light);\n\t}\n}\n\n#apps-list-search {\n\t.app-item {\n\t\th2 {\n\t\t\tmargin-bottom: 0;\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!./AppList.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.vue?vue&type=script&lang=js\"","\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!./AppList.vue?vue&type=style&index=0&id=73184220&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!./AppList.vue?vue&type=style&index=0&id=73184220&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppList.vue?vue&type=template&id=73184220&scoped=true\"\nimport script from \"./AppList.vue?vue&type=script&lang=js\"\nexport * from \"./AppList.vue?vue&type=script&lang=js\"\nimport style0 from \"./AppList.vue?vue&type=style&index=0&id=73184220&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 \"73184220\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"app-content-inner\"}},[_c('div',{staticClass:\"apps-list\",class:{\n\t\t\t'apps-list--list-view': (_vm.useBundleView || _vm.useListView),\n\t\t\t'apps-list--store-view': _vm.useAppStoreView,\n\t\t},attrs:{\"id\":\"apps-list\"}},[(_vm.useListView)?[(_vm.showUpdateAll)?_c('div',{staticClass:\"apps-list__toolbar\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.n('settings', '%n app has an update available', '%n apps have an update available', _vm.counter))+\"\\n\\t\\t\\t\\t\"),(_vm.showUpdateAll)?_c('NcButton',{attrs:{\"id\":\"app-list-update-all\",\"type\":\"primary\"},on:{\"click\":_vm.updateAll}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.n('settings', 'Update', 'Update all', _vm.counter))+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1):_vm._e(),_vm._v(\" \"),(!_vm.showUpdateAll)?_c('div',{staticClass:\"apps-list__toolbar\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'All apps are up-to-date.'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('TransitionGroup',{staticClass:\"apps-list__list-container\",attrs:{\"name\":\"apps-list\",\"tag\":\"table\"}},[_c('tr',{key:\"app-list-view-header\"},[_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Icon')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Name')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Version')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Level')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Actions')))])])]),_vm._v(\" \"),_vm._l((_vm.apps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category}})})],2)]:_vm._e(),_vm._v(\" \"),(_vm.useBundleView)?_c('table',{staticClass:\"apps-list__list-container\"},[_c('tr',{key:\"app-list-view-header\"},[_c('th',{attrs:{\"id\":\"app-table-col-icon\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Icon')))])]),_vm._v(\" \"),_c('th',{attrs:{\"id\":\"app-table-col-name\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Name')))])]),_vm._v(\" \"),_c('th',{attrs:{\"id\":\"app-table-col-version\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Version')))])]),_vm._v(\" \"),_c('th',{attrs:{\"id\":\"app-table-col-level\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Level')))])]),_vm._v(\" \"),_c('th',{attrs:{\"id\":\"app-table-col-actions\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Actions')))])])]),_vm._v(\" \"),_vm._l((_vm.bundles),function(bundle){return [_c('tr',{key:bundle.id},[_c('th',{attrs:{\"id\":`app-table-rowgroup-${bundle.id}`,\"colspan\":\"5\",\"scope\":\"rowgroup\"}},[_c('div',{staticClass:\"apps-list__bundle-heading\"},[_c('span',{staticClass:\"apps-list__bundle-header\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(bundle.name)+\"\\n\\t\\t\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcButton',{attrs:{\"type\":\"secondary\"},on:{\"click\":function($event){return _vm.toggleBundle(bundle.id)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', _vm.bundleToggleText(bundle.id)))+\"\\n\\t\\t\\t\\t\\t\\t\\t\")])],1)])]),_vm._v(\" \"),_vm._l((_vm.bundleApps(bundle.id)),function(app){return _c('AppItem',{key:bundle.id + app.id,attrs:{\"use-bundle-view\":true,\"headers\":`app-table-rowgroup-${bundle.id}`,\"app\":app,\"category\":_vm.category}})})]})],2):_vm._e(),_vm._v(\" \"),(_vm.useAppStoreView)?_c('ul',{staticClass:\"apps-list__store-container\"},_vm._l((_vm.apps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category,\"list-view\":false}})}),1):_vm._e()],2),_vm._v(\" \"),_c('div',{staticClass:\"apps-list apps-list--list-view\",attrs:{\"id\":\"apps-list-search\"}},[_c('div',{staticClass:\"apps-list__list-container\"},[(_vm.search !== '' && _vm.searchApps.length > 0)?_c('table',{staticClass:\"apps-list__list-container\"},[_c('caption',{staticClass:\"apps-list__bundle-header\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Results from other categories'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('tr',{key:\"app-list-view-header\"},[_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Icon')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Name')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Version')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Level')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Actions')))])])]),_vm._v(\" \"),_vm._l((_vm.searchApps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category}})})],2):_vm._e()])]),_vm._v(\" \"),(_vm.search !== '' && !_vm.loading && _vm.searchApps.length === 0 && _vm.apps.length === 0)?_c('div',{staticClass:\"emptycontent emptycontent-search\",attrs:{\"id\":\"apps-list-empty\"}},[_c('div',{staticClass:\"icon-settings-dark\",attrs:{\"id\":\"app-list-empty-icon\"}}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'No apps found for your version')))])]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"app-discover\"},[(_setup.hasError)?_c(_setup.NcEmptyContent,{attrs:{\"name\":_setup.t('settings', 'Nothing to show'),\"description\":_setup.t('settings', 'Could not load section content from app store.')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiEyeOff,\"size\":64}})]},proxy:true}],null,false,638098482)}):(_setup.elements.length === 0)?_c(_setup.NcEmptyContent,{attrs:{\"name\":_setup.t('settings', 'Loading'),\"description\":_setup.t('settings', 'Fetching the latest news…')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcLoadingIcon,{attrs:{\"size\":64}})]},proxy:true}])}):_vm._l((_setup.elements),function(entry,index){return _c(_setup.getComponent(entry.type),_vm._b({key:entry.id ?? index,tag:\"component\"},'component',entry,false))})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\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 * Helper to transform the JSON API results to proper frontend objects (app discover section elements)\n *\n * @param element The JSON API element to transform\n */\nexport const parseApiResponse = (element) => {\n const appElement = { ...element };\n if (appElement.date) {\n appElement.date = Date.parse(appElement.date);\n }\n if (appElement.expiryDate) {\n appElement.expiryDate = Date.parse(appElement.expiryDate);\n }\n if (appElement.type === 'post') {\n return appElement;\n }\n else if (appElement.type === 'showcase') {\n return appElement;\n }\n else if (appElement.type === 'carousel') {\n return appElement;\n }\n throw new Error(`Invalid argument, app discover element with type ${element.type ?? 'unknown'} is unknown`);\n};\n/**\n * Filter outdated or upcoming elements\n * @param element Element to check\n */\nexport const filterElements = (element) => {\n const now = Date.now();\n // Element not yet published\n if (element.date && element.date > now) {\n return false;\n }\n // Element expired\n if (element.expiryDate && element.expiryDate < now) {\n return false;\n }\n return true;\n};\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreDiscoverSection.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreDiscoverSection.vue?vue&type=script&setup=true&lang=ts\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreDiscoverSection.vue?vue&type=style&index=0&id=3efdd423&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!./AppStoreDiscoverSection.vue?vue&type=style&index=0&id=3efdd423&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppStoreDiscoverSection.vue?vue&type=template&id=3efdd423&scoped=true\"\nimport script from \"./AppStoreDiscoverSection.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStoreDiscoverSection.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppStoreDiscoverSection.vue?vue&type=style&index=0&id=3efdd423&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 \"3efdd423\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStore.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStore.vue?vue&type=script&setup=true&lang=ts\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStore.vue?vue&type=style&index=0&id=a75d4530&prod&scoped=true&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStore.vue?vue&type=style&index=0&id=a75d4530&prod&scoped=true&lang=css\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppStore.vue?vue&type=template&id=a75d4530&scoped=true\"\nimport script from \"./AppStore.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStore.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppStore.vue?vue&type=style&index=0&id=a75d4530&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a75d4530\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_setup.NcAppNavigation,{attrs:{\"aria-label\":_setup.t('settings', 'Apps')},scopedSlots:_vm._u([{key:\"list\",fn:function(){return [_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-discover\",\"to\":{ name: 'apps-category', params: { category: 'discover'} },\"name\":_setup.APPS_SECTION_ENUM.discover},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.discover}})]},proxy:true}])}),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-installed\",\"to\":{ name: 'apps-category', params: { category: 'installed'} },\"name\":_setup.APPS_SECTION_ENUM.installed},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.installed}})]},proxy:true}])}),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-enabled\",\"to\":{ name: 'apps-category', params: { category: 'enabled' } },\"name\":_setup.APPS_SECTION_ENUM.enabled},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.enabled}})]},proxy:true}])}),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-disabled\",\"to\":{ name: 'apps-category', params: { category: 'disabled' } },\"name\":_setup.APPS_SECTION_ENUM.disabled},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.disabled}})]},proxy:true}])}),_vm._v(\" \"),(_setup.updateCount > 0)?_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-updates\",\"to\":{ name: 'apps-category', params: { category: 'updates' } },\"name\":_setup.APPS_SECTION_ENUM.updates},scopedSlots:_vm._u([{key:\"counter\",fn:function(){return [_c(_setup.NcCounterBubble,[_vm._v(_vm._s(_setup.updateCount))])]},proxy:true},{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.updates}})]},proxy:true}],null,false,2824895104)}):_vm._e(),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-your-bundles\",\"to\":{ name: 'apps-category', params: { category: 'app-bundles' } },\"name\":_setup.APPS_SECTION_ENUM['app-bundles']},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.bundles}})]},proxy:true}])}),_vm._v(\" \"),_c(_setup.NcAppNavigationSpacer),_vm._v(\" \"),(_setup.appstoreEnabled && _setup.categoriesLoading)?_c('li',{staticClass:\"categories--loading\"},[_c(_setup.NcLoadingIcon,{attrs:{\"size\":20,\"aria-label\":_setup.t('settings', 'Loading categories')}})],1):(_setup.appstoreEnabled && !_setup.categoriesLoading)?[(_setup.isSubscribed)?_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-supported\",\"to\":{ name: 'apps-category', params: { category: 'supported' } },\"name\":_setup.APPS_SECTION_ENUM.supported},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.supported}})]},proxy:true}],null,false,613663011)}):_vm._e(),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-featured\",\"to\":{ name: 'apps-category', params: { category: 'featured' } },\"name\":_setup.APPS_SECTION_ENUM.featured},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.featured}})]},proxy:true}])}),_vm._v(\" \"),_vm._l((_setup.categories),function(category){return _c(_setup.NcAppNavigationItem,{key:category.id,attrs:{\"id\":`app-category-${category.id}`,\"name\":category.displayName,\"to\":{\n\t\t\t\t\tname: 'apps-category',\n\t\t\t\t\tparams: { category: category.id },\n\t\t\t\t}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":category.icon}})]},proxy:true}],null,true)})})]:_vm._e(),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-developer-docs\",\"name\":_setup.t('settings', 'Developer documentation ↗'),\"href\":_setup.developerDocsUrl}})]},proxy:true}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreNavigation.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreNavigation.vue?vue&type=script&setup=true&lang=ts\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreNavigation.vue?vue&type=style&index=0&id=d15221f2&prod&scoped=true&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreNavigation.vue?vue&type=style&index=0&id=d15221f2&prod&scoped=true&lang=css\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppStoreNavigation.vue?vue&type=template&id=d15221f2&scoped=true\"\nimport script from \"./AppStoreNavigation.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStoreNavigation.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppStoreNavigation.vue?vue&type=style&index=0&id=d15221f2&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d15221f2\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return (_setup.showSidebar)?_c(_setup.NcAppSidebar,{staticClass:\"app-sidebar\",class:{ 'app-sidebar--with-screenshot': _setup.hasScreenshot },attrs:{\"active\":_setup.activeTab,\"background\":_setup.hasScreenshot ? _setup.app.screenshot : undefined,\"compact\":!_setup.hasScreenshot,\"name\":_setup.app.name,\"title\":_setup.app.name,\"subname\":_setup.licenseText,\"subtitle\":_setup.licenseText},on:{\"update:active\":function($event){_setup.activeTab=$event},\"close\":_setup.hideAppDetails},scopedSlots:_vm._u([(!_setup.hasScreenshot)?{key:\"header\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{staticClass:\"app-sidebar__fallback-icon\",attrs:{\"svg\":_setup.appIcon ?? '',\"size\":64}})]},proxy:true}:null,{key:\"description\",fn:function(){return [_c('div',{staticClass:\"app-sidebar__badges\"},[_c(_setup.AppLevelBadge,{attrs:{\"level\":_setup.app.level}}),_vm._v(\" \"),(_setup.hasRating)?_c(_setup.AppScore,{attrs:{\"score\":_setup.rating}}):_vm._e()],1)]},proxy:true}],null,true)},[_vm._v(\" \"),_vm._v(\" \"),_c(_setup.AppDescriptionTab,{attrs:{\"app\":_setup.app}}),_vm._v(\" \"),_c(_setup.AppDetailsTab,{attrs:{\"app\":_setup.app}}),_vm._v(\" \"),_c(_setup.AppReleasesTab,{attrs:{\"app\":_setup.app}})],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"settings-markdown\" v-html=\"renderMarkdown\" />\n</template>\n\n<script>\nimport { marked } from 'marked'\nimport dompurify from 'dompurify'\n\nexport default {\n\tname: 'Markdown',\n\tprops: {\n\t\ttext: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tminHeading: {\n\t\t\ttype: Number,\n\t\t\tdefault: 1,\n\t\t},\n\t},\n\tcomputed: {\n\t\trenderMarkdown() {\n\t\t\tconst renderer = new marked.Renderer()\n\t\t\trenderer.link = function(href, title, text) {\n\t\t\t\tlet prot\n\t\t\t\ttry {\n\t\t\t\t\tprot = decodeURIComponent(unescape(href))\n\t\t\t\t\t\t.replace(/[^\\w:]/g, '')\n\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tif (prot.indexOf('http:') !== 0 && prot.indexOf('https:') !== 0) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tlet out = '<a href=\"' + href + '\" rel=\"noreferrer noopener\"'\n\t\t\t\tif (title) {\n\t\t\t\t\tout += ' title=\"' + title + '\"'\n\t\t\t\t}\n\t\t\t\tout += '>' + text + '</a>'\n\t\t\t\treturn out\n\t\t\t}\n\t\t\trenderer.heading = (text, level) => {\n\t\t\t\tlevel = Math.min(6, level + (this.minHeading - 1))\n\t\t\t\treturn `<h${level}>${text}</h${level}>`\n\t\t\t}\n\t\t\trenderer.image = function(href, title, text) {\n\t\t\t\tif (text) {\n\t\t\t\t\treturn text\n\t\t\t\t}\n\t\t\t\treturn title\n\t\t\t}\n\t\t\trenderer.blockquote = function(quote) {\n\t\t\t\treturn quote\n\t\t\t}\n\t\t\treturn dompurify.sanitize(\n\t\t\t\tmarked(this.text.trim(), {\n\t\t\t\t\trenderer,\n\t\t\t\t\tgfm: false,\n\t\t\t\t\thighlight: false,\n\t\t\t\t\ttables: false,\n\t\t\t\t\tbreaks: false,\n\t\t\t\t\tpedantic: false,\n\t\t\t\t\tsanitize: true,\n\t\t\t\t\tsmartLists: true,\n\t\t\t\t\tsmartypants: false,\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\tSAFE_FOR_JQUERY: true,\n\t\t\t\t\tALLOWED_TAGS: [\n\t\t\t\t\t\t'h1',\n\t\t\t\t\t\t'h2',\n\t\t\t\t\t\t'h3',\n\t\t\t\t\t\t'h4',\n\t\t\t\t\t\t'h5',\n\t\t\t\t\t\t'h6',\n\t\t\t\t\t\t'strong',\n\t\t\t\t\t\t'p',\n\t\t\t\t\t\t'a',\n\t\t\t\t\t\t'ul',\n\t\t\t\t\t\t'ol',\n\t\t\t\t\t\t'li',\n\t\t\t\t\t\t'em',\n\t\t\t\t\t\t'del',\n\t\t\t\t\t\t'blockquote',\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.settings-markdown::v-deep {\n\n\th1,\n\th2,\n\th3,\n\th4,\n\th5,\n\th6 {\n\t\tfont-weight: 600;\n\t\tline-height: 120%;\n\t\tmargin-top: 24px;\n\t\tmargin-bottom: 12px;\n\t\tcolor: var(--color-main-text);\n\t}\n\n\th1 {\n\t\tfont-size: 36px;\n\t\tmargin-top: 48px;\n\t}\n\n\th2 {\n\t\tfont-size: 28px;\n\t\tmargin-top: 48px;\n\t}\n\n\th3 {\n\t\tfont-size: 24px;\n\t}\n\n\th4 {\n\t\tfont-size: 21px;\n\t}\n\n\th5 {\n\t\tfont-size: 17px;\n\t}\n\n\th6 {\n\t\tfont-size: var(--default-font-size);\n\t}\n\n\tpre {\n\t\twhite-space: pre;\n\t\toverflow-x: auto;\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: 1em 1.3em;\n\t\tmargin-bottom: 1em;\n\t}\n\n\tp code {\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: .1em .3em;\n\t}\n\n\tli {\n\t\tposition: relative;\n\t}\n\n\tul, ol {\n\t\tpadding-left: 10px;\n\t\tmargin-left: 10px;\n\t}\n\n\tul li {\n\t\tlist-style-type: disc;\n\t}\n\n\tul > li > ul > li {\n\t\tlist-style-type: circle;\n\t}\n\n\tul > li > ul > li ul li {\n\t\tlist-style-type: square;\n\t}\n\n\tblockquote {\n\t\tpadding-left: 1em;\n\t\tborder-left: 4px solid var(--color-primary-element);\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tmargin-left: 0;\n\t\tmargin-right: 0;\n\t}\n\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=script&lang=js\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=style&index=0&id=7c5c8e59&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!./Markdown.vue?vue&type=style&index=0&id=7c5c8e59&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Markdown.vue?vue&type=template&id=7c5c8e59&scoped=true\"\nimport script from \"./Markdown.vue?vue&type=script&lang=js\"\nexport * from \"./Markdown.vue?vue&type=script&lang=js\"\nimport style0 from \"./Markdown.vue?vue&type=style&index=0&id=7c5c8e59&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 \"7c5c8e59\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"settings-markdown\",domProps:{\"innerHTML\":_vm._s(_vm.renderMarkdown)}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDescriptionTab.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDescriptionTab.vue?vue&type=script&setup=true&lang=ts\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_setup.NcAppSidebarTab,{attrs:{\"id\":\"desc\",\"name\":_setup.t('settings', 'Description'),\"order\":0},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiTextShort}})]},proxy:true}])},[_vm._v(\" \"),_c('div',{staticClass:\"app-description\"},[_c(_setup.Markdown,{attrs:{\"text\":_vm.app.description,\"min-heading\":4}})],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDescriptionTab.vue?vue&type=style&index=0&id=fccce5ae&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!./AppDescriptionTab.vue?vue&type=style&index=0&id=fccce5ae&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppDescriptionTab.vue?vue&type=template&id=fccce5ae&scoped=true\"\nimport script from \"./AppDescriptionTab.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppDescriptionTab.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppDescriptionTab.vue?vue&type=style&index=0&id=fccce5ae&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 \"fccce5ae\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppSidebarTab',{attrs:{\"id\":\"details\",\"name\":_vm.t('settings', 'Details'),\"order\":1},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiTextBox}})]},proxy:true}])},[_vm._v(\" \"),_c('div',{staticClass:\"app-details\"},[_c('div',{staticClass:\"app-details__actions\"},[(_vm.app.active && _vm.canLimitToGroups(_vm.app))?_c('div',{staticClass:\"app-details__actions-groups\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.groupCheckedAppsData),expression:\"groupCheckedAppsData\"}],staticClass:\"groups-enable__checkbox checkbox\",attrs:{\"id\":`groups_enable_${_vm.app.id}`,\"type\":\"checkbox\"},domProps:{\"value\":_vm.app.id,\"checked\":Array.isArray(_vm.groupCheckedAppsData)?_vm._i(_vm.groupCheckedAppsData,_vm.app.id)>-1:(_vm.groupCheckedAppsData)},on:{\"change\":[function($event){var $$a=_vm.groupCheckedAppsData,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=_vm.app.id,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.groupCheckedAppsData=$$a.concat([$$v]))}else{$$i>-1&&(_vm.groupCheckedAppsData=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.groupCheckedAppsData=$$c}},_vm.setGroupLimit]}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":`groups_enable_${_vm.app.id}`}},[_vm._v(_vm._s(_vm.t('settings', 'Limit to groups')))]),_vm._v(\" \"),_c('input',{staticClass:\"group_select\",attrs:{\"type\":\"hidden\",\"title\":_vm.t('settings', 'All'),\"value\":\"\"}}),_vm._v(\" \"),_c('br'),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"limitToGroups\"}},[_c('span',[_vm._v(_vm._s(_vm.t('settings', 'Limit app usage to groups')))])]),_vm._v(\" \"),(_vm.isLimitedToGroups(_vm.app))?_c('NcSelect',{attrs:{\"input-id\":\"limitToGroups\",\"options\":_vm.groups,\"value\":_vm.appGroups,\"limit\":5,\"label\":\"name\",\"multiple\":true,\"close-on-select\":false},on:{\"option:selected\":_vm.addGroupLimitation,\"option:deselected\":_vm.removeGroupLimitation,\"search\":_vm.asyncFindGroup}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])]):_vm._e()],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-details__actions-manage\"},[(_vm.app.update)?_c('input',{staticClass:\"update primary\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings', 'Update to {version}', { version: _vm.app.update }),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.update(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.canUnInstall)?_c('input',{staticClass:\"uninstall\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings', 'Remove'),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.remove(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.active)?_c('input',{staticClass:\"enable\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings','Disable'),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.disable(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(!_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible))?_c('input',{staticClass:\"enable primary\",attrs:{\"title\":_vm.enableButtonTooltip,\"aria-label\":_vm.enableButtonTooltip,\"type\":\"button\",\"value\":_vm.enableButtonText,\"disabled\":!_vm.app.canInstall || _vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.enable(_vm.app.id)}}}):(!_vm.app.active && !_vm.app.canInstall)?_c('input',{staticClass:\"enable force\",attrs:{\"title\":_vm.forceEnableButtonTooltip,\"aria-label\":_vm.forceEnableButtonTooltip,\"type\":\"button\",\"value\":_vm.forceEnableButtonText,\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.forceEnable(_vm.app.id)}}}):_vm._e()])]),_vm._v(\" \"),_c('ul',{staticClass:\"app-details__dependencies\"},[(_vm.app.missingMinOwnCloudVersion)?_c('li',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app has no minimum Nextcloud version assigned. This will be an error in the future.'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.app.missingMaxOwnCloudVersion)?_c('li',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app has no maximum Nextcloud version assigned. This will be an error in the future.'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(!_vm.app.canInstall)?_c('li',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app cannot be installed because the following dependencies are not fulfilled:'))+\"\\n\\t\\t\\t\\t\"),_c('ul',{staticClass:\"missing-dependencies\"},_vm._l((_vm.app.missingDependencies),function(dep,index){return _c('li',{key:index},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(dep)+\"\\n\\t\\t\\t\\t\\t\")])}),0)]):_vm._e()]),_vm._v(\" \"),(_vm.lastModified)?_c('div',{staticClass:\"app-details__section\"},[_c('h4',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Latest updated'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcDateTime',{attrs:{\"timestamp\":_vm.lastModified}})],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-details__section\"},[_c('h4',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Author'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('p',{staticClass:\"app-details__authors\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.appAuthors)+\"\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"app-details__section\"},[_c('h4',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Categories'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.appCategories)+\"\\n\\t\\t\\t\")])]),_vm._v(\" \"),(_vm.externalResources.length > 0)?_c('div',{staticClass:\"app-details__section\"},[_c('h4',[_vm._v(_vm._s(_vm.t('settings', 'Resources')))]),_vm._v(\" \"),_c('ul',{staticClass:\"app-details__documentation\",attrs:{\"aria-label\":_vm.t('settings', 'Documentation')}},_vm._l((_vm.externalResources),function(resource){return _c('li',{key:resource.id},[_c('a',{staticClass:\"appslink\",attrs:{\"href\":resource.href,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(resource.label)+\" ↗\\n\\t\\t\\t\\t\\t\")])])}),0)]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-details__section\"},[_c('h4',[_vm._v(_vm._s(_vm.t('settings', 'Interact')))]),_vm._v(\" \"),_c('div',{staticClass:\"app-details__interact\"},[_c('NcButton',{attrs:{\"disabled\":!_vm.app.bugs,\"href\":_vm.app.bugs ?? '#',\"aria-label\":_vm.t('settings', 'Report a bug'),\"title\":_vm.t('settings', 'Report a bug')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiBug}})]},proxy:true}])}),_vm._v(\" \"),_c('NcButton',{attrs:{\"disabled\":!_vm.app.bugs,\"href\":_vm.app.bugs ?? '#',\"aria-label\":_vm.t('settings', 'Request feature'),\"title\":_vm.t('settings', 'Request feature')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiFeatureSearch}})]},proxy:true}])}),_vm._v(\" \"),(_vm.app.appstoreData?.discussion)?_c('NcButton',{attrs:{\"href\":_vm.app.appstoreData.discussion,\"aria-label\":_vm.t('settings', 'Ask questions or discuss'),\"title\":_vm.t('settings', 'Ask questions or discuss')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiTooltipQuestion}})]},proxy:true}],null,false,1288192462)}):_vm._e(),_vm._v(\" \"),(!_vm.app.internal)?_c('NcButton',{attrs:{\"href\":_vm.rateAppUrl,\"aria-label\":_vm.t('settings', 'Rate the app'),\"title\":_vm.t('settings', 'Rate')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiStar}})]},proxy:true}],null,false,422450625)}):_vm._e()],1)])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<NcAppSidebarTab id=\"details\"\n\t\t:name=\"t('settings', 'Details')\"\n\t\t:order=\"1\">\n\t\t<template #icon>\n\t\t\t<NcIconSvgWrapper :path=\"mdiTextBox\" />\n\t\t</template>\n\t\t<div class=\"app-details\">\n\t\t\t<div class=\"app-details__actions\">\n\t\t\t\t<div v-if=\"app.active && canLimitToGroups(app)\" class=\"app-details__actions-groups\">\n\t\t\t\t\t<input :id=\"`groups_enable_${app.id}`\"\n\t\t\t\t\t\tv-model=\"groupCheckedAppsData\"\n\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t:value=\"app.id\"\n\t\t\t\t\t\tclass=\"groups-enable__checkbox checkbox\"\n\t\t\t\t\t\t@change=\"setGroupLimit\">\n\t\t\t\t\t<label :for=\"`groups_enable_${app.id}`\">{{ t('settings', 'Limit to groups') }}</label>\n\t\t\t\t\t<input type=\"hidden\"\n\t\t\t\t\t\tclass=\"group_select\"\n\t\t\t\t\t\t:title=\"t('settings', 'All')\"\n\t\t\t\t\t\tvalue=\"\">\n\t\t\t\t\t<br>\n\t\t\t\t\t<label for=\"limitToGroups\">\n\t\t\t\t\t\t<span>{{ t('settings', 'Limit app usage to groups') }}</span>\n\t\t\t\t\t</label>\n\t\t\t\t\t<NcSelect v-if=\"isLimitedToGroups(app)\"\n\t\t\t\t\t\tinput-id=\"limitToGroups\"\n\t\t\t\t\t\t:options=\"groups\"\n\t\t\t\t\t\t:value=\"appGroups\"\n\t\t\t\t\t\t:limit=\"5\"\n\t\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t\t@option:selected=\"addGroupLimitation\"\n\t\t\t\t\t\t@option:deselected=\"removeGroupLimitation\"\n\t\t\t\t\t\t@search=\"asyncFindGroup\">\n\t\t\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t\t\t</NcSelect>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"app-details__actions-manage\">\n\t\t\t\t\t<input v-if=\"app.update\"\n\t\t\t\t\t\tclass=\"update primary\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t:value=\"t('settings', 'Update to {version}', { version: app.update })\"\n\t\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t\t@click=\"update(app.id)\">\n\t\t\t\t\t<input v-if=\"app.canUnInstall\"\n\t\t\t\t\t\tclass=\"uninstall\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t:value=\"t('settings', 'Remove')\"\n\t\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t\t@click=\"remove(app.id)\">\n\t\t\t\t\t<input v-if=\"app.active\"\n\t\t\t\t\t\tclass=\"enable\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t:value=\"t('settings','Disable')\"\n\t\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t\t@click=\"disable(app.id)\">\n\t\t\t\t\t<input v-if=\"!app.active && (app.canInstall || app.isCompatible)\"\n\t\t\t\t\t\t:title=\"enableButtonTooltip\"\n\t\t\t\t\t\t:aria-label=\"enableButtonTooltip\"\n\t\t\t\t\t\tclass=\"enable primary\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t:value=\"enableButtonText\"\n\t\t\t\t\t\t:disabled=\"!app.canInstall || installing || isLoading\"\n\t\t\t\t\t\t@click=\"enable(app.id)\">\n\t\t\t\t\t<input v-else-if=\"!app.active && !app.canInstall\"\n\t\t\t\t\t\t:title=\"forceEnableButtonTooltip\"\n\t\t\t\t\t\t:aria-label=\"forceEnableButtonTooltip\"\n\t\t\t\t\t\tclass=\"enable force\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t:value=\"forceEnableButtonText\"\n\t\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t\t@click=\"forceEnable(app.id)\">\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<ul class=\"app-details__dependencies\">\n\t\t\t\t<li v-if=\"app.missingMinOwnCloudVersion\">\n\t\t\t\t\t{{ t('settings', 'This app has no minimum Nextcloud version assigned. This will be an error in the future.') }}\n\t\t\t\t</li>\n\t\t\t\t<li v-if=\"app.missingMaxOwnCloudVersion\">\n\t\t\t\t\t{{ t('settings', 'This app has no maximum Nextcloud version assigned. This will be an error in the future.') }}\n\t\t\t\t</li>\n\t\t\t\t<li v-if=\"!app.canInstall\">\n\t\t\t\t\t{{ t('settings', 'This app cannot be installed because the following dependencies are not fulfilled:') }}\n\t\t\t\t\t<ul class=\"missing-dependencies\">\n\t\t\t\t\t\t<li v-for=\"(dep, index) in app.missingDependencies\" :key=\"index\">\n\t\t\t\t\t\t\t{{ dep }}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t</ul>\n\n\t\t\t<div v-if=\"lastModified\" class=\"app-details__section\">\n\t\t\t\t<h4>\n\t\t\t\t\t{{ t('settings', 'Latest updated') }}\n\t\t\t\t</h4>\n\t\t\t\t<NcDateTime :timestamp=\"lastModified\" />\n\t\t\t</div>\n\n\t\t\t<div class=\"app-details__section\">\n\t\t\t\t<h4>\n\t\t\t\t\t{{ t('settings', 'Author') }}\n\t\t\t\t</h4>\n\t\t\t\t<p class=\"app-details__authors\">\n\t\t\t\t\t{{ appAuthors }}\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t<div class=\"app-details__section\">\n\t\t\t\t<h4>\n\t\t\t\t\t{{ t('settings', 'Categories') }}\n\t\t\t\t</h4>\n\t\t\t\t<p>\n\t\t\t\t\t{{ appCategories }}\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t<div v-if=\"externalResources.length > 0\" class=\"app-details__section\">\n\t\t\t\t<h4>{{ t('settings', 'Resources') }}</h4>\n\t\t\t\t<ul class=\"app-details__documentation\" :aria-label=\"t('settings', 'Documentation')\">\n\t\t\t\t\t<li v-for=\"resource of externalResources\" :key=\"resource.id\">\n\t\t\t\t\t\t<a class=\"appslink\"\n\t\t\t\t\t\t\t:href=\"resource.href\"\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\trel=\"noreferrer noopener\">\n\t\t\t\t\t\t\t{{ resource.label }} ↗\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\n\t\t\t<div class=\"app-details__section\">\n\t\t\t\t<h4>{{ t('settings', 'Interact') }}</h4>\n\t\t\t\t<div class=\"app-details__interact\">\n\t\t\t\t\t<NcButton :disabled=\"!app.bugs\"\n\t\t\t\t\t\t:href=\"app.bugs ?? '#'\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Report a bug')\"\n\t\t\t\t\t\t:title=\"t('settings', 'Report a bug')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiBug\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton :disabled=\"!app.bugs\"\n\t\t\t\t\t\t:href=\"app.bugs ?? '#'\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Request feature')\"\n\t\t\t\t\t\t:title=\"t('settings', 'Request feature')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiFeatureSearch\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton v-if=\"app.appstoreData?.discussion\"\n\t\t\t\t\t\t:href=\"app.appstoreData.discussion\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Ask questions or discuss')\"\n\t\t\t\t\t\t:title=\"t('settings', 'Ask questions or discuss')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiTooltipQuestion\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton v-if=\"!app.internal\"\n\t\t\t\t\t\t:href=\"rateAppUrl\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Rate the app')\"\n\t\t\t\t\t\t:title=\"t('settings', 'Rate')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiStar\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</NcAppSidebarTab>\n</template>\n\n<script>\nimport NcAppSidebarTab from '@nextcloud/vue/dist/Components/NcAppSidebarTab.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcDateTime from '@nextcloud/vue/dist/Components/NcDateTime.js'\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'\nimport NcSelect from '@nextcloud/vue/dist/Components/NcSelect.js'\n\nimport AppManagement from '../../mixins/AppManagement.js'\nimport { mdiBug, mdiFeatureSearch, mdiStar, mdiTextBox, mdiTooltipQuestion } from '@mdi/js'\nimport { useAppsStore } from '../../store/apps-store'\n\nexport default {\n\tname: 'AppDetailsTab',\n\n\tcomponents: {\n\t\tNcAppSidebarTab,\n\t\tNcButton,\n\t\tNcDateTime,\n\t\tNcIconSvgWrapper,\n\t\tNcSelect,\n\t},\n\tmixins: [AppManagement],\n\n\tprops: {\n\t\tapp: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst store = useAppsStore()\n\n\t\treturn {\n\t\t\tstore,\n\n\t\t\tmdiBug,\n\t\t\tmdiFeatureSearch,\n\t\t\tmdiStar,\n\t\t\tmdiTextBox,\n\t\t\tmdiTooltipQuestion,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tgroupCheckedAppsData: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tlastModified() {\n\t\t\treturn (this.app.appstoreData?.releases ?? [])\n\t\t\t\t.map(({ lastModified }) => Date.parse(lastModified))\n\t\t\t\t.sort()\n\t\t\t\t.at(0) ?? null\n\t\t},\n\t\t/**\n\t\t * App authors as comma separated string\n\t\t */\n\t\tappAuthors() {\n\t\t\tconsole.warn(this.app)\n\t\t\tif (!this.app) {\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t\tconst authorName = (xmlNode) => {\n\t\t\t\tif (xmlNode['@value']) {\n\t\t\t\t\t// Complex node (with email or homepage attribute)\n\t\t\t\t\treturn xmlNode['@value']\n\t\t\t\t}\n\t\t\t\t// Simple text node\n\t\t\t\treturn xmlNode\n\t\t\t}\n\n\t\t\tconst authors = Array.isArray(this.app.author)\n\t\t\t\t? this.app.author.map(authorName)\n\t\t\t\t: [authorName(this.app.author)]\n\n\t\t\treturn authors\n\t\t\t\t.sort((a, b) => a.split(' ').at(-1).localeCompare(b.split(' ').at(-1)))\n\t\t\t\t.join(', ')\n\t\t},\n\n\t\tappstoreUrl() {\n\t\t\treturn `https://apps.nextcloud.com/apps/${this.app.id}`\n\t\t},\n\n\t\t/**\n\t\t * Further external resources (e.g. website)\n\t\t */\n\t\texternalResources() {\n\t\t\tconst resources = []\n\t\t\tif (!this.app.internal) {\n\t\t\t\tresources.push({\n\t\t\t\t\tid: 'appstore',\n\t\t\t\t\thref: this.appstoreUrl,\n\t\t\t\t\tlabel: t('settings', 'View in store'),\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (this.app.website) {\n\t\t\t\tresources.push({\n\t\t\t\t\tid: 'website',\n\t\t\t\t\thref: this.app.website,\n\t\t\t\t\tlabel: t('settings', 'Visit website'),\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (this.app.documentation) {\n\t\t\t\tif (this.app.documentation.user) {\n\t\t\t\t\tresources.push({\n\t\t\t\t\t\tid: 'doc-user',\n\t\t\t\t\t\thref: this.app.documentation.user,\n\t\t\t\t\t\tlabel: t('settings', 'Usage documentation'),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (this.app.documentation.admin) {\n\t\t\t\t\tresources.push({\n\t\t\t\t\t\tid: 'doc-admin',\n\t\t\t\t\t\thref: this.app.documentation.admin,\n\t\t\t\t\t\tlabel: t('settings', 'Admin documentation'),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (this.app.documentation.developer) {\n\t\t\t\t\tresources.push({\n\t\t\t\t\t\tid: 'doc-developer',\n\t\t\t\t\t\thref: this.app.documentation.developer,\n\t\t\t\t\t\tlabel: t('settings', 'Developer documentation'),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn resources\n\t\t},\n\n\t\tappCategories() {\n\t\t\treturn [this.app.category].flat()\n\t\t\t\t.map((id) => this.store.getCategoryById(id)?.displayName ?? id)\n\t\t\t\t.join(', ')\n\t\t},\n\n\t\trateAppUrl() {\n\t\t\treturn `${this.appstoreUrl}#comments`\n\t\t},\n\t\tappGroups() {\n\t\t\treturn this.app.groups.map(group => { return { id: group, name: group } })\n\t\t},\n\t\tgroups() {\n\t\t\treturn this.$store.getters.getGroups\n\t\t\t\t.filter(group => group.id !== 'disabled')\n\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name))\n\t\t},\n\t},\n\tmounted() {\n\t\tif (this.app.groups.length > 0) {\n\t\t\tthis.groupCheckedAppsData = true\n\t\t}\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n.app-details {\n\tpadding: 20px;\n\n\t&__actions {\n\t\t// app management\n\t\t&-manage {\n\t\t\t// if too many, shrink them and ellipsis\n\t\t\tdisplay: flex;\n\t\t\tinput {\n\t\t\t\tflex: 0 1 auto;\n\t\t\t\tmin-width: 0;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\t}\n\t&__authors {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__section {\n\t\tmargin-top: 15px;\n\n\t\th4 {\n\t\t\tfont-size: 16px;\n\t\t\tfont-weight: bold;\n\t\t\tmargin-block-end: 5px;\n\t\t}\n\t}\n\n\t&__interact {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tflex-wrap: wrap;\n\t\tgap: 12px;\n\t}\n\n\t&__documentation {\n\t\ta {\n\t\t\ttext-decoration: underline;\n\t\t}\n\t\tli {\n\t\t\tpadding-inline-start: 20px;\n\n\t\t\t&::before {\n\t\t\t\twidth: 5px;\n\t\t\t\theight: 5px;\n\t\t\t\tborder-radius: 100%;\n\t\t\t\tbackground-color: var(--color-main-text);\n\t\t\t\tcontent: \"\";\n\t\t\t\tfloat: inline-start;\n\t\t\t\tmargin-inline-start: -13px;\n\t\t\t\tposition: relative;\n\t\t\t\ttop: 10px;\n\t\t\t}\n\t\t}\n\t}\n}\n\n.force {\n\tcolor: var(--color-error);\n\tborder-color: var(--color-error);\n\tbackground: var(--color-main-background);\n}\n.force:hover,\n.force:active {\n\tcolor: var(--color-main-background);\n\tborder-color: var(--color-error) !important;\n\tbackground: var(--color-error);\n}\n\n.missing-dependencies {\n\tlist-style: initial;\n\tlist-style-type: initial;\n\tlist-style-position: inside;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetailsTab.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!./AppDetailsTab.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!./AppDetailsTab.vue?vue&type=style&index=0&id=24864562&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!./AppDetailsTab.vue?vue&type=style&index=0&id=24864562&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppDetailsTab.vue?vue&type=template&id=24864562&scoped=true\"\nimport script from \"./AppDetailsTab.vue?vue&type=script&lang=js\"\nexport * from \"./AppDetailsTab.vue?vue&type=script&lang=js\"\nimport style0 from \"./AppDetailsTab.vue?vue&type=style&index=0&id=24864562&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 \"24864562\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppReleasesTab.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppReleasesTab.vue?vue&type=script&setup=true&lang=ts\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return (_setup.hasChangelog)?_c(_setup.NcAppSidebarTab,{attrs:{\"id\":\"changelog\",\"name\":_setup.t('settings', 'Changelog'),\"order\":2},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiClockFast,\"size\":24}})]},proxy:true}],null,false,1849836872)},[_vm._v(\" \"),_vm._l((_vm.app.releases),function(release){return _c('div',{key:release.version,staticClass:\"app-sidebar-tabs__release\"},[_c('h2',[_vm._v(_vm._s(release.version))]),_vm._v(\" \"),_c(_setup.Markdown,{staticClass:\"app-sidebar-tabs__release-text\",attrs:{\"text\":_setup.createChangelogFromRelease(release)}})],1)})],2):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppReleasesTab.vue?vue&type=style&index=0&id=2261a93d&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!./AppReleasesTab.vue?vue&type=style&index=0&id=2261a93d&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppReleasesTab.vue?vue&type=template&id=2261a93d&scoped=true\"\nimport script from \"./AppReleasesTab.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppReleasesTab.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppReleasesTab.vue?vue&type=style&index=0&id=2261a93d&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 \"2261a93d\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreSidebar.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreSidebar.vue?vue&type=script&setup=true&lang=ts\"","import { mdiCog } from '@mdi/js';\nimport { computed, ref, watchEffect } from 'vue';\nimport AppstoreCategoryIcons from '../constants/AppstoreCategoryIcons.ts';\nimport logger from '../logger.ts';\n/**\n * Get the app icon raw SVG for use with `NcIconSvgWrapper` (do never use without sanitizing)\n * It has a fallback to the categroy icon.\n *\n * @param app The app to get the icon for\n */\nexport function useAppIcon(app) {\n const appIcon = ref(null);\n /**\n * Fallback value if no app icon available\n */\n const categoryIcon = computed(() => {\n const path = [app.value?.category ?? []].flat()\n .map((name) => AppstoreCategoryIcons[name])\n .filter((icon) => !!icon)\n .at(0)\n ?? mdiCog;\n return path ? `<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"${path}\" /></svg>` : null;\n });\n watchEffect(async () => {\n // Note: Only variables until the first `await` will be watched!\n if (!app.value?.preview) {\n appIcon.value = categoryIcon.value;\n }\n else {\n appIcon.value = null;\n // Now try to load the real app icon\n try {\n const response = await window.fetch(app.value.preview);\n const blob = await response.blob();\n const rawSvg = await blob.text();\n appIcon.value = rawSvg.replaceAll(/fill=\"#(fff|ffffff)([a-z0-9]{1,2})?\"/ig, 'fill=\"currentColor\"');\n }\n catch (error) {\n appIcon.value = categoryIcon.value;\n logger.error('Could not load app icon', { error });\n }\n }\n });\n return {\n appIcon,\n };\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreSidebar.vue?vue&type=style&index=0&id=31ecb666&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!./AppStoreSidebar.vue?vue&type=style&index=0&id=31ecb666&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppStoreSidebar.vue?vue&type=template&id=31ecb666&scoped=true\"\nimport script from \"./AppStoreSidebar.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStoreSidebar.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppStoreSidebar.vue?vue&type=style&index=0&id=31ecb666&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 \"31ecb666\",\n null\n \n)\n\nexport default component.exports"],"names":["APPS_SECTION_ENUM","Object","freeze","discover","t","installed","enabled","disabled","updates","featured","supported","axios","get","generateOcsUrl","then","_ref","data","ocs","meta","statuscode","emit","apps","window","dispatchEvent","Event","computed","appGroups","this","app","groups","map","group","id","name","installing","$store","getters","loading","isLoading","enableButtonText","needsDownload","forceEnableButtonText","enableButtonTooltip","forceEnableButtonTooltip","base","groupCheckedAppsData","mounted","length","methods","asyncFindGroup","query","dispatch","search","limit","offset","isLimitedToGroups","setGroupLimit","appId","canLimitToGroups","types","includes","addGroupLimitation","groupArray","pop","concat","removeGroupLimitation","currentGroups","index","indexOf","splice","forceEnable","response","rebuildNavigation","catch","error","showError","enable","disable","remove","install","update","mdiStarCircleOutline","mdiAccount","mdiCheck","mdiClose","bundles","mdiArchive","mdiStarShooting","mdiStar","mdiDownload","auth","mdiKey","customization","mdiCog","dashboard","mdiViewDashboard","files","mdiFolder","games","mdiControllerClassic","integration","mdiOpenInApp","monitoring","mdiMonitorEye","multimedia","mdiMultimedia","office","mdiFileDocumentEdit","organization","mdiOfficeBuilding","mdiMagnify","security","mdiSecurity","social","mdiAccountMultiple","tools","mdiTools","workflow","mdiClipboardFlow","showApiError","useAppsStore","defineStore","state","categories","updateCount","loadState","loadingList","gettingCategoriesPromise","actions","loadCategories","force","arguments","undefined","generateUrl","category","_APPSTORE_CATEGORY_IC","icon","APPSTORE_CATEGORY_ICONS","$patch","logger","loadApps","getCategoryById","categoryId","_this$categories$find","find","getAppById","_this$apps$find","_ref2","___CSS_LOADER_EXPORT___","push","module","_defineComponent","__name","props","level","setup","__props","isSupported","isFeatured","badgeIcon","value","badgeText","badgeTitle","__sfc","NcIconSvgWrapper","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","_vm","_c","_self","_setup","_setupProxy","staticClass","class","attrs","_v","_s","_e","defineComponent","components","score","type","Number","required","mdiStarHalfFull","mdiStarOutline","title","appScore","toFixed","fullStars","Math","floor","emptyStars","min","hasHalfStar","_l","key","filterId","filterUrl","random","toString","substring","AppLevelBadge","AppScore","NcButton","mixins","AppManagement","SvgFilterMixin","listView","Boolean","default","useBundleView","headers","String","isSelected","scrolled","screenshotLoaded","hasRating","appstoreData","ratingNumOverall","dataItemTag","withSidebar","$route","params","watch","releases","screenshot","image","Image","onload","src","watchers","prefix","content","getDataItemHeaders","columnName","join","tag","preview","appName","summary","version","on","$event","stopPropagation","canUnInstall","active","canInstall","isCompatible","pLimit","concurrency","isInteger","POSITIVE_INFINITY","TypeError","queue","Queue","activeCount","run","async","fn","resolve","args","result","size","dequeue","generator","_len","Array","_key","Promise","enqueue","bind","defineProperties","pendingCount","clearQueue","clear","AppItem","counter","filter","hasPendingUpdate","showUpdateAll","useListView","getAllApps","toLowerCase","sort","a","b","sortStringA","sortStringB","OC","Util","naturalSortCompare","appstore","getAppBundles","bundle","bundleApps","bundleIds","searchApps","_app","useAppStoreView","allBundlesEnabled","bundleToggleText","beforeDestroy","unsubscribe","setSearch","resetSearch","subscribe","toggleBundle","disableBundle","enableBundle","console","Notification","show","updateAll","n","parseApiResponse","element","_element$type","appElement","date","Date","parse","expiryDate","Error","filterElements","now","PostType","defineAsyncComponent","CarouselType","hasError","ref","elements","shuffleArray","array","i","j","onBeforeMount","parsedElements","shuffledElements","_a$order","_b$order","order","Infinity","getComponent","render","h","mdiEyeOff","NcEmptyContent","NcLoadingIcon","scopedSlots","_u","proxy","entry","_entry$id","_b","route","useRoute","store","currentCategory","_route$params$categor","_route$params","appStoreLabel","viewLabel","_APPS_SECTION_ENUM$cu","_store$getCategoryByI","displayName","watchEffect","document","instance","getCurrentInstance","shouldRefetchCategories","NcAppContent","AppList","AppStoreDiscoverSection","domProps","appstoreEnabled","developerDocsUrl","categoriesLoading","isSubscribed","NcAppNavigation","NcAppNavigationItem","NcAppNavigationSpacer","NcCounterBubble","text","minHeading","renderMarkdown","renderer","marked","Renderer","link","href","prot","decodeURIComponent","unescape","replace","e","out","heading","blockquote","quote","dompurify","trim","gfm","highlight","tables","breaks","pedantic","sanitize","smartLists","smartypants","SAFE_FOR_JQUERY","ALLOWED_TAGS","mdiTextShort","NcAppSidebarTab","Markdown","description","NcDateTime","NcSelect","mdiBug","mdiFeatureSearch","mdiTextBox","mdiTooltipQuestion","lastModified","_map$sort$at","_this$app$appstoreDat","_this$app$appstoreDat2","at","appAuthors","warn","authorName","xmlNode","isArray","author","split","localeCompare","appstoreUrl","externalResources","resources","internal","label","website","documentation","user","admin","developer","appCategories","flat","_this$store$getCatego","_this$store$getCatego2","rateAppUrl","getGroups","_vm$app$bugs","_vm$app$bugs2","_vm$app$appstoreData","directives","rawName","expression","_i","$$a","$$el","target","$$c","checked","$$v","$$i","slice","slot","missingMinOwnCloudVersion","missingMaxOwnCloudVersion","missingDependencies","dep","resource","bugs","discussion","hasChangelog","_props$app$releases$","_props$app$releases","values","translations","some","changelog","createChangelogFromRelease","release","_release$translations","_release$translations2","_release$translations3","getLanguage","en","mdiClockFast","router","useRouter","_route$params$id","_app$value$appstoreDa","rating","_app$value$appstoreDa2","_app$value$appstoreDa3","_app$value$appstoreDa4","ratingNumRecent","ratingRecent","ratingOverall","showSidebar","appIcon","categoryIcon","_flat$map$filter$at","_app$value$category","_app$value","path","AppstoreCategoryIcons","_app$value2","fetch","blob","rawSvg","replaceAll","useAppIcon","licenseText","license","licence","toUpperCase","activeTab","hasScreenshot","loadScreenshot","_app$value3","onMounted","hideAppDetails","NcAppSidebar","AppDescriptionTab","AppDetailsTab","AppReleasesTab","_setup$appIcon"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/settings-vue-settings-apps-users-management.js b/dist/settings-vue-settings-apps-users-management.js
index 6293c5f5c72..00a99b2d2e2 100644
--- a/dist/settings-vue-settings-apps-users-management.js
+++ b/dist/settings-vue-settings-apps-users-management.js
@@ -1,3 +1,3 @@
/*! For license information please see settings-vue-settings-apps-users-management.js.LICENSE.txt */
-(()=>{var e,r,n,o={31755:(e,r,n)=>{"use strict";n.d(r,{P:()=>B});var o=n(85471),i=n(95353),s=n(59097),a=n(22843),u=n(35810),c=n(99498),p=n(26287),d=n(56760);n(51257);const l=function(t){return t.replace(/\/$/,"")},h=()=>(0,d.C)(),f=(t,e)=>p.A.get(l(t),e),m=(t,e)=>p.A.post(l(t),e),g=(t,e)=>p.A.put(l(t),e),y=(t,e)=>p.A.delete(l(t),{params:e});var v=n(36620),b=n(96763);const w=(0,s.c0)("settings").persist(!0).build(),A=function(t,e){return 1===e?t.sort(((t,e)=>t.usercount-t.disabled<e.usercount-e.disabled)):t.sort(((t,e)=>t.name.localeCompare(e.name)))},E={id:"",name:"",usercount:0,disabled:0,canAdd:!0,canRemove:!0},x={users:[],groups:[],orderBy:1,minPasswordLength:0,usersOffset:0,usersLimit:25,disabledUsersOffset:0,disabledUsersLimit:25,userCount:0,showConfig:{showStoragePath:"true"===w.getItem("account_settings__showStoragePath"),showUserBackend:"true"===w.getItem("account_settings__showUserBackend"),showLastLogin:"true"===w.getItem("account_settings__showLastLogin"),showNewUserForm:"true"===w.getItem("account_settings__showNewUserForm"),showLanguages:"true"===w.getItem("account_settings__showLanguages")}},_={appendUsers(t,e){const r=t.users.map((t=>{let{id:e}=t;return e})),n=Object.values(e).filter((t=>{let{id:e}=t;return!r.includes(e)})),o=t.users.concat(n);t.usersOffset+=t.usersLimit,t.users=o},updateDisabledUsers(t,e){t.disabledUsersOffset+=t.disabledUsersLimit},setPasswordPolicyMinLength(t,e){t.minPasswordLength=""!==e?e:0},initGroups(t,e){let{groups:r,orderBy:n,userCount:o}=e;t.groups=r.map((t=>Object.assign({},E,t))),t.orderBy=n,t.userCount=o,t.groups=A(t.groups,t.orderBy)},addGroup(t,e){let{gid:r,displayName:n}=e;try{if(void 0!==t.groups.find((t=>t.id===r)))return;const e=Object.assign({},E,{id:r,name:n});t.groups.unshift(e),t.groups=A(t.groups,t.orderBy)}catch(t){b.error("Can't create group",t)}},renameGroup(t,e){let{gid:r,displayName:n}=e;const o=t.groups.findIndex((t=>t.id===r));if(o>=0){const e=t.groups[o];e.name=n,t.groups.splice(o,1,e),t.groups=A(t.groups,t.orderBy)}},removeGroup(t,e){const r=t.groups.findIndex((t=>t.id===e));r>=0&&t.groups.splice(r,1)},addUserGroup(t,e){let{userid:r,gid:n}=e;const o=t.groups.find((t=>t.id===n)),i=t.users.find((t=>t.id===r));o&&i.enabled&&t.userCount>0&&o.usercount++,i.groups.push(n),t.groups=A(t.groups,t.orderBy)},removeUserGroup(t,e){let{userid:r,gid:n}=e;const o=t.groups.find((t=>t.id===n)),i=t.users.find((t=>t.id===r));o&&i.enabled&&t.userCount>0&&o.usercount--;const s=i.groups;s.splice(s.indexOf(n),1),t.groups=A(t.groups,t.orderBy)},addUserSubAdmin(t,e){let{userid:r,gid:n}=e;t.users.find((t=>t.id===r)).subadmin.push(n)},removeUserSubAdmin(t,e){let{userid:r,gid:n}=e;const o=t.users.find((t=>t.id===r)).subadmin;o.splice(o.indexOf(n),1)},deleteUser(t,e){const r=t.users.findIndex((t=>t.id===e));this.commit("updateUserCounts",{user:t.users[r],actionType:"remove"}),t.users.splice(r,1)},addUserData(t,e){const r=e.data.ocs.data;t.users.unshift(r),this.commit("updateUserCounts",{user:r,actionType:"create"})},enableDisableUser(t,e){let{userid:r,enabled:n}=e;const o=t.users.find((t=>t.id===r));o.enabled=n,this.commit("updateUserCounts",{user:o,actionType:n?"enable":"disable"})},updateUserCounts(t,e){let{user:r,actionType:n}=e;if(0===t.userCount)return;const o=t.groups.find((t=>"disabled"===t.id));switch(n){case"enable":case"disable":o.usercount+=r.enabled?-1:1,t.userCount+=r.enabled?1:-1,r.groups.forEach((e=>{t.groups.find((t=>t.id===e)).disabled+=r.enabled?-1:1}));break;case"create":t.userCount++,r.groups.forEach((e=>{t.groups.find((t=>t.id===e)).usercount++}));break;case"remove":r.enabled?(t.userCount--,r.groups.forEach((e=>{const r=t.groups.find((t=>t.id===e));r?r.usercount--:b.warn("User group "+e+" does not exist during user removal")}))):(o.usercount--,r.groups.forEach((e=>{t.groups.find((t=>t.id===e)).disabled--})));break;default:v.A.error("Unknown action type in updateUserCounts: '".concat(n,"'"))}},setUserData(t,e){let{userid:r,key:n,value:o}=e;if("quota"===n){const e=(0,u.lT)(o,!0);t.users.find((t=>t.id===r))[n][n]=null!==e?e:o}else t.users.find((t=>t.id===r))[n]=o},resetUsers(t){t.users=[],t.usersOffset=0,t.disabledUsersOffset=0},setShowConfig(t,e){let{key:r,value:n}=e;w.setItem("account_settings__".concat(r),JSON.stringify(n)),t.showConfig[r]=n}},P=p.A.CancelToken;let I=null;const L={state:x,mutations:_,getters:{getUsers:t=>t.users,getGroups:t=>t.groups,getSubadminGroups:t=>t.groups.filter((t=>"admin"!==t.id&&"disabled"!==t.id)),getPasswordPolicyMinLength:t=>t.minPasswordLength,getUsersOffset:t=>t.usersOffset,getUsersLimit:t=>t.usersLimit,getDisabledUsersOffset:t=>t.disabledUsersOffset,getDisabledUsersLimit:t=>t.disabledUsersLimit,getUserCount:t=>t.userCount,getShowConfig:t=>t.showConfig},actions:{searchUsers(t,e){let{offset:r,limit:n,search:o}=e;return o="string"==typeof o?o:"",f((0,c.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o})).catch((e=>{p.A.isCancel(e)||t.commit("API_FAILURE",e)}))},getUser:(t,e)=>f((0,c.KT)("cloud/users/".concat(e))).catch((e=>{p.A.isCancel(e)||t.commit("API_FAILURE",e)})),getUsers(t,e){let{offset:r,limit:n,search:o,group:i}=e;return I&&I.cancel("Operation canceled by another search request."),I=P.source(),o="string"==typeof o?o:"",o=o.replace(/in:[^\s]+/g,"").trim(),i="string"==typeof i?i:"",""!==i?f((0,c.KT)("cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}",{group:encodeURIComponent(i),offset:r,limit:n,search:o}),{cancelToken:I.token}).then((e=>{const r=Object.keys(e.data.ocs.data.users).length;return r>0&&t.commit("appendUsers",e.data.ocs.data.users),r})).catch((e=>{p.A.isCancel(e)||t.commit("API_FAILURE",e)})):f((0,c.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o}),{cancelToken:I.token}).then((e=>{const r=Object.keys(e.data.ocs.data.users).length;return r>0&&t.commit("appendUsers",e.data.ocs.data.users),r})).catch((e=>{p.A.isCancel(e)||t.commit("API_FAILURE",e)}))},async getDisabledUsers(t,e){let{offset:r,limit:n}=e;const o=(0,c.KT)("cloud/users/disabled?offset={offset}&limit={limit}",{offset:r,limit:n});try{const e=await f(o),r=Object.keys(e.data.ocs.data.users).length;return r>0&&(t.commit("appendUsers",e.data.ocs.data.users),t.commit("updateDisabledUsers",e.data.ocs.data.users)),r}catch(e){t.commit("API_FAILURE",e)}},getGroups(t,e){let{offset:r,limit:n,search:o}=e;o="string"==typeof o?o:"";const i=-1===n?"":"&limit=".concat(n);return f((0,c.KT)("cloud/groups?offset={offset}&search={search}",{offset:r,search:o})+i).then((e=>Object.keys(e.data.ocs.data.groups).length>0&&(e.data.ocs.data.groups.forEach((function(e){t.commit("addGroup",{gid:e,displayName:e})})),!0))).catch((e=>t.commit("API_FAILURE",e)))},getUsersFromList(t,e){let{offset:r,limit:n,search:o}=e;return o="string"==typeof o?o:"",f((0,c.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o})).then((e=>Object.keys(e.data.ocs.data.users).length>0&&(t.commit("appendUsers",e.data.ocs.data.users),!0))).catch((e=>t.commit("API_FAILURE",e)))},getUsersFromGroup(t,e){let{groupid:r,offset:n,limit:o}=e;return f((0,c.KT)("cloud/users/{groupId}/details?offset={offset}&limit={limit}",{groupId:encodeURIComponent(r),offset:n,limit:o})).then((e=>t.commit("getUsersFromList",e.data.ocs.data.users))).catch((e=>t.commit("API_FAILURE",e)))},getPasswordPolicyMinLength:t=>!(!(0,a.F)().password_policy||!(0,a.F)().password_policy.minLength)&&(t.commit("setPasswordPolicyMinLength",(0,a.F)().password_policy.minLength),(0,a.F)().password_policy.minLength),addGroup:(t,e)=>h().then((r=>m((0,c.KT)("cloud/groups"),{groupid:e}).then((r=>(t.commit("addGroup",{gid:e,displayName:e}),{gid:e,displayName:e}))).catch((t=>{throw t})))).catch((r=>{throw t.commit("API_FAILURE",{gid:e,error:r}),r})),renameGroup(t,e){let{groupid:r,displayName:n}=e;return h().then((e=>g((0,c.KT)("cloud/groups/{groupId}",{groupId:encodeURIComponent(r)}),{key:"displayname",value:n}).then((e=>(t.commit("renameGroup",{gid:r,displayName:n}),{groupid:r,displayName:n}))).catch((t=>{throw t})))).catch((e=>{throw t.commit("API_FAILURE",{groupid:r,error:e}),e}))},removeGroup:(t,e)=>h().then((r=>y((0,c.KT)("cloud/groups/{groupId}",{groupId:encodeURIComponent(e)})).then((r=>t.commit("removeGroup",e))).catch((t=>{throw t})))).catch((r=>t.commit("API_FAILURE",{gid:e,error:r}))),addUserGroup(t,e){let{userid:r,gid:n}=e;return h().then((e=>m((0,c.KT)("cloud/users/{userid}/groups",{userid:r}),{groupid:n}).then((e=>t.commit("addUserGroup",{userid:r,gid:n}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:r,error:e})))},removeUserGroup(t,e){let{userid:r,gid:n}=e;return h().then((e=>y((0,c.KT)("cloud/users/{userid}/groups",{userid:r}),{groupid:n}).then((e=>t.commit("removeUserGroup",{userid:r,gid:n}))).catch((t=>{throw t})))).catch((e=>{throw t.commit("API_FAILURE",{userid:r,error:e}),e}))},addUserSubAdmin(t,e){let{userid:r,gid:n}=e;return h().then((e=>m((0,c.KT)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:n}).then((e=>t.commit("addUserSubAdmin",{userid:r,gid:n}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:r,error:e})))},removeUserSubAdmin(t,e){let{userid:r,gid:n}=e;return h().then((e=>y((0,c.KT)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:n}).then((e=>t.commit("removeUserSubAdmin",{userid:r,gid:n}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:r,error:e})))},wipeUserDevices:(t,e)=>h().then((t=>m((0,c.KT)("cloud/users/{userid}/wipe",{userid:e})).catch((t=>{throw t})))).catch((r=>t.commit("API_FAILURE",{userid:e,error:r}))),deleteUser:(t,e)=>h().then((r=>y((0,c.KT)("cloud/users/{userid}",{userid:e})).then((r=>t.commit("deleteUser",e))).catch((t=>{throw t})))).catch((r=>t.commit("API_FAILURE",{userid:e,error:r}))),addUser(t,e){let{commit:r,dispatch:n}=t,{userid:o,password:i,displayName:s,email:a,groups:u,subadmin:p,quota:d,language:l,manager:f}=e;return h().then((t=>m((0,c.KT)("cloud/users"),{userid:o,password:i,displayName:s,email:a,groups:u,subadmin:p,quota:d,language:l,manager:f}).then((t=>n("addUserData",o||t.data.ocs.data.id))).catch((t=>{throw t})))).catch((t=>{throw r("API_FAILURE",{userid:o,error:t}),t}))},addUserData:(t,e)=>h().then((r=>f((0,c.KT)("cloud/users/{userid}",{userid:e})).then((e=>t.commit("addUserData",e))).catch((t=>{throw t})))).catch((r=>t.commit("API_FAILURE",{userid:e,error:r}))),enableDisableUser(t,e){let{userid:r,enabled:n=!0}=e;const o=n?"enable":"disable";return h().then((e=>g((0,c.KT)("cloud/users/{userid}/{userStatus}",{userid:r,userStatus:o})).then((e=>t.commit("enableDisableUser",{userid:r,enabled:n}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:r,error:e})))},setUserData(t,e){let{userid:r,key:n,value:o}=e;const i=["email","displayname","manager"];return-1!==["email","language","quota","displayname","password","manager"].indexOf(n)&&"string"==typeof o&&(-1===i.indexOf(n)&&o.length>0||-1!==i.indexOf(n))?h().then((e=>g((0,c.KT)("cloud/users/{userid}",{userid:r}),{key:n,value:o}).then((e=>t.commit("setUserData",{userid:r,key:n,value:o}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:r,error:e}))):Promise.reject(new Error("Invalid request data"))},sendWelcomeMail:(t,e)=>h().then((t=>m((0,c.KT)("cloud/users/{userid}/welcome",{userid:e})).then((t=>!0)).catch((t=>{throw t})))).catch((r=>t.commit("API_FAILURE",{userid:e,error:r})))}};var C=n(85168),R=n(38613),N=n(96763);const U={APPS_API_FAILURE(e,r){(0,C.Qg)(t("settings","An error occurred during the request. Unable to proceed.")+"<br>"+r.error.response.data.data.message,{isHTML:!0}),N.error(e,r)},initCategories(t,e){let{categories:r,updateCount:n}=e;t.categories=r,t.updateCount=n},updateCategories(t,e){t.gettingCategoriesPromise=e},setUpdateCount(t,e){t.updateCount=e},addCategory(t,e){t.categories.push(e)},appendCategories(t,e){t.categories=e},setAllApps(t,e){t.apps=e},setError(t,e){let{appId:r,error:n}=e;Array.isArray(r)||(r=[r]),r.forEach((e=>{t.apps.find((t=>t.id===e)).error=n}))},clearError(t,e){let{appId:r,error:n}=e;t.apps.find((t=>t.id===r)).error=null},enableApp(t,e){let{appId:r,groups:n}=e;const o=t.apps.find((t=>t.id===r));o.active=!0,o.groups=n},setInstallState(t,e){let{appId:r,canInstall:n}=e;const o=t.apps.find((t=>t.id===r));o&&(o.canInstall=!0===n)},disableApp(t,e){const r=t.apps.find((t=>t.id===e));r.active=!1,r.groups=[],r.removable&&(r.canUnInstall=!0)},uninstallApp(t,e){t.apps.find((t=>t.id===e)).active=!1,t.apps.find((t=>t.id===e)).groups=[],t.apps.find((t=>t.id===e)).needsDownload=!0,t.apps.find((t=>t.id===e)).installed=!1,t.apps.find((t=>t.id===e)).canUnInstall=!1,t.apps.find((t=>t.id===e)).canInstall=!0},updateApp(t,e){const r=t.apps.find((t=>t.id===e)),n=r.update;r.update=null,r.version=n,t.updateCount--},resetApps(t){t.apps=[]},reset(t){t.apps=[],t.categories=[],t.updateCount=0},startLoading(t,e){Array.isArray(e)?e.forEach((e=>{o.Ay.set(t.loading,e,!0)})):o.Ay.set(t.loading,e,!0)},stopLoading(t,e){Array.isArray(e)?e.forEach((e=>{o.Ay.set(t.loading,e,!1)})):o.Ay.set(t.loading,e,!1)}},O={enableApp(e,r){let n,{appId:o,groups:i}=r;return n=Array.isArray(o)?o:[o],h().then((r=>(e.commit("startLoading",n),e.commit("startLoading","install"),m((0,c.Jv)("settings/apps/enable"),{appIds:n,groups:i}).then((r=>(e.commit("stopLoading",n),e.commit("stopLoading","install"),n.forEach((t=>{e.commit("enableApp",{appId:t,groups:i})})),f((0,c.Jv)("apps/files")).then((()=>{r.data.update_required&&((0,C.cf)(t("settings","The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds."),{onClick:()=>window.location.reload(),close:!1}),setTimeout((function(){location.reload()}),5e3))})).catch((()=>{Array.isArray(o)||((0,C.Qg)(t("settings","Error: This app cannot be enabled because it makes the server unstable")),e.commit("setError",{appId:n,error:t("settings","Error: This app cannot be enabled because it makes the server unstable")}),e.dispatch("disableApp",{appId:o}))}))))).catch((t=>{e.commit("stopLoading",n),e.commit("stopLoading","install"),e.commit("setError",{appId:n,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:o,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:o,error:t})))},forceEnableApp(t,e){let r,{appId:n,groups:o}=e;return r=Array.isArray(n)?n:[n],h().then((()=>(t.commit("startLoading",r),t.commit("startLoading","install"),m((0,c.Jv)("settings/apps/force"),{appId:n}).then((e=>{t.commit("setInstallState",{appId:n,canInstall:!0})})).catch((e=>{t.commit("stopLoading",r),t.commit("stopLoading","install"),t.commit("setError",{appId:r,error:e.response.data.data.message}),t.commit("APPS_API_FAILURE",{appId:n,error:e})})).finally((()=>{t.commit("stopLoading",r),t.commit("stopLoading","install")}))))).catch((e=>t.commit("API_FAILURE",{appId:n,error:e})))},disableApp(t,e){let r,{appId:n}=e;return r=Array.isArray(n)?n:[n],h().then((e=>(t.commit("startLoading",r),m((0,c.Jv)("settings/apps/disable"),{appIds:r}).then((e=>(t.commit("stopLoading",r),r.forEach((e=>{t.commit("disableApp",e)})),!0))).catch((e=>{t.commit("stopLoading",r),t.commit("APPS_API_FAILURE",{appId:n,error:e})}))))).catch((e=>t.commit("API_FAILURE",{appId:n,error:e})))},uninstallApp(t,e){let{appId:r}=e;return h().then((e=>(t.commit("startLoading",r),f((0,c.Jv)("settings/apps/uninstall/".concat(r))).then((e=>(t.commit("stopLoading",r),t.commit("uninstallApp",r),!0))).catch((e=>{t.commit("stopLoading",r),t.commit("APPS_API_FAILURE",{appId:r,error:e})}))))).catch((e=>t.commit("API_FAILURE",{appId:r,error:e})))},updateApp(t,e){let{appId:r}=e;return h().then((e=>(t.commit("startLoading",r),t.commit("startLoading","install"),f((0,c.Jv)("settings/apps/update/".concat(r))).then((e=>(t.commit("stopLoading","install"),t.commit("stopLoading",r),t.commit("updateApp",r),!0))).catch((e=>{t.commit("stopLoading",r),t.commit("stopLoading","install"),t.commit("APPS_API_FAILURE",{appId:r,error:e})}))))).catch((e=>t.commit("API_FAILURE",{appId:r,error:e})))},getAllApps:t=>(t.commit("startLoading","list"),f((0,c.Jv)("settings/apps/list")).then((e=>(t.commit("setAllApps",e.data.apps),t.commit("stopLoading","list"),!0))).catch((e=>t.commit("API_FAILURE",e)))),async getCategories(t){let{shouldRefetchCategories:e=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(e||!t.state.gettingCategoriesPromise){t.commit("startLoading","categories");try{const e=f((0,c.Jv)("settings/apps/categories"));t.commit("updateCategories",e);const r=await e;return r.data.length>0?(t.commit("appendCategories",r.data),t.commit("stopLoading","categories"),!0):(t.commit("stopLoading","categories"),!1)}catch(e){t.commit("API_FAILURE",e)}}return t.state.gettingCategoriesPromise}},k={state:{apps:[],bundles:(0,R.C)("settings","appstoreBundles",[]),categories:[],updateCount:(0,R.C)("settings","appstoreUpdateCount",0),loading:{},gettingCategoriesPromise:null},mutations:U,getters:{loading:t=>function(e){return t.loading[e]},getCategories:t=>t.categories,getAllApps:t=>t.apps,getAppBundles:t=>t.bundles,getUpdateCount:t=>t.updateCount,getCategoryById:t=>e=>t.categories.find((t=>t.id===e))},actions:O},T={setServerData(t,e){t.serverData=e}},S={state:{serverData:(0,R.C)("settings","usersSettings",{})},mutations:T,getters:{getServerData:t=>t.serverData},actions:{}},j={state:{},mutations:{},getters:{},actions:{setAppConfig(t,e){let{app:r,key:n,value:o}=e;return h().then((t=>m((0,c.KT)("apps/provisioning_api/api/v1/config/apps/{app}/{key}",{app:r,key:n}),{value:o}).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{app:r,key:n,value:o,error:e})))}}};var F=n(96763);o.Ay.use(i.Ay);const $={API_FAILURE(e,r){try{const e=r.error.response.data.ocs.meta.message;(0,C.Qg)(t("settings","An error occurred during the request. Unable to proceed.")+"<br>"+e,{isHTML:!0})}catch(e){(0,C.Qg)(t("settings","An error occurred during the request. Unable to proceed."))}F.error(e,r)}};let D=null;const B=()=>(null===D&&(D=new i.il({modules:{users:L,apps:k,settings:S,oc:j},strict:!1,mutations:$})),D)},36620:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=(0,r(53529).YK)().setApp("settings").detectUser().build()},74329:(t,e,r)=>{"use strict";var n=r(85471),o=r(80284),i=r(58723),s=r(53334),a=r(22378);const u=(0,n.pM)({__name:"SettingsApp",setup:t=>({__sfc:!0,NcContent:a.A})}),c=(0,r(14486).A)(u,(function(){var t=this,e=t._self._c;return e(t._self._setupProxy.NcContent,{attrs:{"app-name":"settings"}},[e("router-view",{attrs:{name:"navigation"}}),t._v(" "),e("router-view"),t._v(" "),e("router-view",{attrs:{name:"sidebar"}})],1)}),[],!1,null,null,null).exports;var p=r(40173),d=r(99498);const l=[{name:"users",path:"/:index(index.php/)?settings/users",components:{default:()=>Promise.all([r.e(4208),r.e(1439),r.e(3239)]).then(r.bind(r,374)),navigation:()=>Promise.all([r.e(4208),r.e(1439),r.e(3239)]).then(r.bind(r,19414))},props:!0,children:[{path:":selectedGroup",name:"group"}]},{path:"/:index(index.php/)?settings/apps",name:"apps",redirect:{name:"apps-category",params:{category:"discover"}},components:{default:()=>Promise.all([r.e(4208),r.e(1439),r.e(4529)]).then(r.bind(r,83780)),navigation:()=>Promise.all([r.e(4208),r.e(1439),r.e(4529)]).then(r.bind(r,12336)),sidebar:()=>Promise.all([r.e(4208),r.e(1439),r.e(4529)]).then(r.bind(r,83625))},children:[{path:":category",name:"apps-category",children:[{path:":id",name:"apps-details"}]}]}];n.Ay.use(p.Ay);const h=new p.Ay({mode:"history",base:(0,d.Jv)(""),linkActiveClass:"active",routes:l});var f,m=r(31755),g=r(92457),y=r(65899);n.Ay.use(o.Ay,{defaultHtml:!1});const v=(0,m.P)();(0,i.O)(v,h),r.nc=btoa(null!==(f=(0,g.do)())&&void 0!==f?f:""),n.Ay.prototype.t=s.Tl,n.Ay.prototype.n=s.zw,n.Ay.use(y.R2);const b=(0,y.Ey)();new n.Ay({router:h,store:v,pinia:b,render:t=>t(c),el:"#content"})},40173:(t,e,r)=>{"use strict";r.d(e,{Ay:()=>Gt,Wk:()=>K});var n=r(96763);function o(t,e){for(var r in e)t[r]=e[r];return t}var i=/[!'()*]/g,s=function(t){return"%"+t.charCodeAt(0).toString(16)},a=/%2C/g,u=function(t){return encodeURIComponent(t).replace(i,s).replace(a,",")};function c(t){try{return decodeURIComponent(t)}catch(t){}return t}var p=function(t){return null==t||"object"==typeof t?t:String(t)};function d(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach((function(t){var r=t.replace(/\+/g," ").split("="),n=c(r.shift()),o=r.length>0?c(r.join("=")):null;void 0===e[n]?e[n]=o:Array.isArray(e[n])?e[n].push(o):e[n]=[e[n],o]})),e):e}function l(t){var e=t?Object.keys(t).map((function(e){var r=t[e];if(void 0===r)return"";if(null===r)return u(e);if(Array.isArray(r)){var n=[];return r.forEach((function(t){void 0!==t&&(null===t?n.push(u(e)):n.push(u(e)+"="+u(t)))})),n.join("&")}return u(e)+"="+u(r)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var h=/\/?$/;function f(t,e,r,n){var o=n&&n.options.stringifyQuery,i=e.query||{};try{i=m(i)}catch(t){}var s={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:v(e,o),matched:t?y(t):[]};return r&&(s.redirectedFrom=v(r,o)),Object.freeze(s)}function m(t){if(Array.isArray(t))return t.map(m);if(t&&"object"==typeof t){var e={};for(var r in t)e[r]=m(t[r]);return e}return t}var g=f(null,{path:"/"});function y(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function v(t,e){var r=t.path,n=t.query;void 0===n&&(n={});var o=t.hash;return void 0===o&&(o=""),(r||"/")+(e||l)(n)+o}function b(t,e,r){return e===g?t===e:!!e&&(t.path&&e.path?t.path.replace(h,"")===e.path.replace(h,"")&&(r||t.hash===e.hash&&w(t.query,e.query)):!(!t.name||!e.name)&&t.name===e.name&&(r||t.hash===e.hash&&w(t.query,e.query)&&w(t.params,e.params)))}function w(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var r=Object.keys(t).sort(),n=Object.keys(e).sort();return r.length===n.length&&r.every((function(r,o){var i=t[r];if(n[o]!==r)return!1;var s=e[r];return null==i||null==s?i===s:"object"==typeof i&&"object"==typeof s?w(i,s):String(i)===String(s)}))}function A(t){for(var e=0;e<t.matched.length;e++){var r=t.matched[e];for(var n in r.instances){var o=r.instances[n],i=r.enteredCbs[n];if(o&&i){delete r.enteredCbs[n];for(var s=0;s<i.length;s++)o._isBeingDestroyed||i[s](o)}}}}var E={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(t,e){var r=e.props,n=e.children,i=e.parent,s=e.data;s.routerView=!0;for(var a=i.$createElement,u=r.name,c=i.$route,p=i._routerViewCache||(i._routerViewCache={}),d=0,l=!1;i&&i._routerRoot!==i;){var h=i.$vnode?i.$vnode.data:{};h.routerView&&d++,h.keepAlive&&i._directInactive&&i._inactive&&(l=!0),i=i.$parent}if(s.routerViewDepth=d,l){var f=p[u],m=f&&f.component;return m?(f.configProps&&x(m,s,f.route,f.configProps),a(m,s,n)):a()}var g=c.matched[d],y=g&&g.components[u];if(!g||!y)return p[u]=null,a();p[u]={component:y},s.registerRouteInstance=function(t,e){var r=g.instances[u];(e&&r!==t||!e&&r===t)&&(g.instances[u]=e)},(s.hook||(s.hook={})).prepatch=function(t,e){g.instances[u]=e.componentInstance},s.hook.init=function(t){t.data.keepAlive&&t.componentInstance&&t.componentInstance!==g.instances[u]&&(g.instances[u]=t.componentInstance),A(c)};var v=g.props&&g.props[u];return v&&(o(p[u],{route:c,configProps:v}),x(y,s,c,v)),a(y,s,n)}};function x(t,e,r,n){var i=e.props=function(t,e){switch(typeof e){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0}}(r,n);if(i){i=e.props=o({},i);var s=e.attrs=e.attrs||{};for(var a in i)t.props&&a in t.props||(s[a]=i[a],delete i[a])}}function _(t,e,r){var n=t.charAt(0);if("/"===n)return t;if("?"===n||"#"===n)return e+t;var o=e.split("/");r&&o[o.length-1]||o.pop();for(var i=t.replace(/^\//,"").split("/"),s=0;s<i.length;s++){var a=i[s];".."===a?o.pop():"."!==a&&o.push(a)}return""!==o[0]&&o.unshift(""),o.join("/")}function P(t){return t.replace(/\/(?:\s*\/)+/g,"/")}var I=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)},L=function t(e,r,n){return I(r)||(n=r||n,r=[]),n=n||{},e instanceof RegExp?function(t,e){var r=t.source.match(/\((?!\?)/g);if(r)for(var n=0;n<r.length;n++)e.push({name:n,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return F(t,e)}(e,r):I(e)?function(e,r,n){for(var o=[],i=0;i<e.length;i++)o.push(t(e[i],r,n).source);return F(new RegExp("(?:"+o.join("|")+")",$(n)),r)}(e,r,n):function(t,e,r){return D(O(t,r),e,r)}(e,r,n)},C=O,R=T,N=D,U=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function O(t,e){for(var r,n=[],o=0,i=0,s="",a=e&&e.delimiter||"/";null!=(r=U.exec(t));){var u=r[0],c=r[1],p=r.index;if(s+=t.slice(i,p),i=p+u.length,c)s+=c[1];else{var d=t[i],l=r[2],h=r[3],f=r[4],m=r[5],g=r[6],y=r[7];s&&(n.push(s),s="");var v=null!=l&&null!=d&&d!==l,b="+"===g||"*"===g,w="?"===g||"*"===g,A=r[2]||a,E=f||m;n.push({name:h||o++,prefix:l||"",delimiter:A,optional:w,repeat:b,partial:v,asterisk:!!y,pattern:E?j(E):y?".*":"[^"+S(A)+"]+?"})}}return i<t.length&&(s+=t.substr(i)),s&&n.push(s),n}function k(t){return encodeURI(t).replace(/[\/?#]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()}))}function T(t,e){for(var r=new Array(t.length),n=0;n<t.length;n++)"object"==typeof t[n]&&(r[n]=new RegExp("^(?:"+t[n].pattern+")$",$(e)));return function(e,n){for(var o="",i=e||{},s=(n||{}).pretty?k:encodeURIComponent,a=0;a<t.length;a++){var u=t[a];if("string"!=typeof u){var c,p=i[u.name];if(null==p){if(u.optional){u.partial&&(o+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(I(p)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var d=0;d<p.length;d++){if(c=s(p[d]),!r[a].test(c))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(c)+"`");o+=(0===d?u.prefix:u.delimiter)+c}}else{if(c=u.asterisk?encodeURI(p).replace(/[?#]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()})):s(p),!r[a].test(c))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+c+'"');o+=u.prefix+c}}else o+=u}return o}}function S(t){return t.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function j(t){return t.replace(/([=!:$\/()])/g,"\\$1")}function F(t,e){return t.keys=e,t}function $(t){return t&&t.sensitive?"":"i"}function D(t,e,r){I(e)||(r=e||r,e=[]);for(var n=(r=r||{}).strict,o=!1!==r.end,i="",s=0;s<t.length;s++){var a=t[s];if("string"==typeof a)i+=S(a);else{var u=S(a.prefix),c="(?:"+a.pattern+")";e.push(a),a.repeat&&(c+="(?:"+u+c+")*"),i+=c=a.optional?a.partial?u+"("+c+")?":"(?:"+u+"("+c+"))?":u+"("+c+")"}}var p=S(r.delimiter||"/"),d=i.slice(-p.length)===p;return n||(i=(d?i.slice(0,-p.length):i)+"(?:"+p+"(?=$))?"),i+=o?"$":n&&d?"":"(?="+p+"|$)",F(new RegExp("^"+i,$(r)),e)}L.parse=C,L.compile=function(t,e){return T(O(t,e),e)},L.tokensToFunction=R,L.tokensToRegExp=N;var B=Object.create(null);function q(t,e,r){e=e||{};try{var n=B[t]||(B[t]=L.compile(t));return"string"==typeof e.pathMatch&&(e[0]=e.pathMatch),n(e,{pretty:!0})}catch(t){return""}finally{delete e[0]}}function M(t,e,r,n){var i="string"==typeof t?{path:t}:t;if(i._normalized)return i;if(i.name){var s=(i=o({},t)).params;return s&&"object"==typeof s&&(i.params=o({},s)),i}if(!i.path&&i.params&&e){(i=o({},i))._normalized=!0;var a=o(o({},e.params),i.params);if(e.name)i.name=e.name,i.params=a;else if(e.matched.length){var u=e.matched[e.matched.length-1].path;i.path=q(u,a,e.path)}return i}var c=function(t){var e="",r="",n=t.indexOf("#");n>=0&&(e=t.slice(n),t=t.slice(0,n));var o=t.indexOf("?");return o>=0&&(r=t.slice(o+1),t=t.slice(0,o)),{path:t,query:r,hash:e}}(i.path||""),l=e&&e.path||"/",h=c.path?_(c.path,l,r||i.append):l,f=function(t,e,r){void 0===e&&(e={});var n,o=r||d;try{n=o(t||"")}catch(t){n={}}for(var i in e){var s=e[i];n[i]=Array.isArray(s)?s.map(p):p(s)}return n}(c.query,i.query,n&&n.options.parseQuery),m=i.hash||c.hash;return m&&"#"!==m.charAt(0)&&(m="#"+m),{_normalized:!0,path:h,query:f,hash:m}}var V,G=function(){},K={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,r=this.$router,n=this.$route,i=r.resolve(this.to,n,this.append),s=i.location,a=i.route,u=i.href,c={},p=r.options.linkActiveClass,d=r.options.linkExactActiveClass,l=null==p?"router-link-active":p,m=null==d?"router-link-exact-active":d,g=null==this.activeClass?l:this.activeClass,y=null==this.exactActiveClass?m:this.exactActiveClass,v=a.redirectedFrom?f(null,M(a.redirectedFrom),null,r):a;c[y]=b(n,v,this.exactPath),c[g]=this.exact||this.exactPath?c[y]:function(t,e){return 0===t.path.replace(h,"/").indexOf(e.path.replace(h,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var r in e)if(!(r in t))return!1;return!0}(t.query,e.query)}(n,v);var w=c[y]?this.ariaCurrentValue:null,A=function(t){H(t)&&(e.replace?r.replace(s,G):r.push(s,G))},E={click:H};Array.isArray(this.event)?this.event.forEach((function(t){E[t]=A})):E[this.event]=A;var x={class:c},_=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:u,route:a,navigate:A,isActive:c[g],isExactActive:c[y]});if(_){if(1===_.length)return _[0];if(_.length>1||!_.length)return 0===_.length?t():t("span",{},_)}if("a"===this.tag)x.on=E,x.attrs={href:u,"aria-current":w};else{var P=z(this.$slots.default);if(P){P.isStatic=!1;var I=P.data=o({},P.data);for(var L in I.on=I.on||{},I.on){var C=I.on[L];L in E&&(I.on[L]=Array.isArray(C)?C:[C])}for(var R in E)R in I.on?I.on[R].push(E[R]):I.on[R]=A;var N=P.data.attrs=o({},P.data.attrs);N.href=u,N["aria-current"]=w}else x.on=E}return t(this.tag,x,this.$slots.default)}};function H(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey||t.defaultPrevented||void 0!==t.button&&0!==t.button)){if(t.currentTarget&&t.currentTarget.getAttribute){var e=t.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(e))return}return t.preventDefault&&t.preventDefault(),!0}}function z(t){if(t)for(var e,r=0;r<t.length;r++){if("a"===(e=t[r]).tag)return e;if(e.children&&(e=z(e.children)))return e}}var J="undefined"!=typeof window;function W(t,e,r,n,o){var i=e||[],s=r||Object.create(null),a=n||Object.create(null);t.forEach((function(t){Q(i,s,a,t,o)}));for(var u=0,c=i.length;u<c;u++)"*"===i[u]&&(i.push(i.splice(u,1)[0]),c--,u--);return{pathList:i,pathMap:s,nameMap:a}}function Q(t,e,r,n,o,i){var s=n.path,a=n.name,u=n.pathToRegexpOptions||{},c=function(t,e,r){return r||(t=t.replace(/\/$/,"")),"/"===t[0]||null==e?t:P(e.path+"/"+t)}(s,o,u.strict);"boolean"==typeof n.caseSensitive&&(u.sensitive=n.caseSensitive);var p={path:c,regex:Y(c,u),components:n.components||{default:n.component},alias:n.alias?"string"==typeof n.alias?[n.alias]:n.alias:[],instances:{},enteredCbs:{},name:a,parent:o,matchAs:i,redirect:n.redirect,beforeEnter:n.beforeEnter,meta:n.meta||{},props:null==n.props?{}:n.components?n.props:{default:n.props}};if(n.children&&n.children.forEach((function(n){var o=i?P(i+"/"+n.path):void 0;Q(t,e,r,n,p,o)})),e[p.path]||(t.push(p.path),e[p.path]=p),void 0!==n.alias)for(var d=Array.isArray(n.alias)?n.alias:[n.alias],l=0;l<d.length;++l){var h={path:d[l],children:n.children};Q(t,e,r,h,o,p.path||"/")}a&&(r[a]||(r[a]=p))}function Y(t,e){return L(t,[],e)}function X(t,e){var r=W(t),n=r.pathList,o=r.pathMap,i=r.nameMap;function s(t,r,s){var u=M(t,r,!1,e),c=u.name;if(c){var p=i[c];if(!p)return a(null,u);var d=p.regex.keys.filter((function(t){return!t.optional})).map((function(t){return t.name}));if("object"!=typeof u.params&&(u.params={}),r&&"object"==typeof r.params)for(var l in r.params)!(l in u.params)&&d.indexOf(l)>-1&&(u.params[l]=r.params[l]);return u.path=q(p.path,u.params),a(p,u,s)}if(u.path){u.params={};for(var h=0;h<n.length;h++){var f=n[h],m=o[f];if(Z(m.regex,u.path,u.params))return a(m,u,s)}}return a(null,u)}function a(t,r,n){return t&&t.redirect?function(t,r){var n=t.redirect,o="function"==typeof n?n(f(t,r,null,e)):n;if("string"==typeof o&&(o={path:o}),!o||"object"!=typeof o)return a(null,r);var u=o,c=u.name,p=u.path,d=r.query,l=r.hash,h=r.params;if(d=u.hasOwnProperty("query")?u.query:d,l=u.hasOwnProperty("hash")?u.hash:l,h=u.hasOwnProperty("params")?u.params:h,c)return i[c],s({_normalized:!0,name:c,query:d,hash:l,params:h},void 0,r);if(p){var m=function(t,e){return _(t,e.parent?e.parent.path:"/",!0)}(p,t);return s({_normalized:!0,path:q(m,h),query:d,hash:l},void 0,r)}return a(null,r)}(t,n||r):t&&t.matchAs?function(t,e,r){var n=s({_normalized:!0,path:q(r,e.params)});if(n){var o=n.matched,i=o[o.length-1];return e.params=n.params,a(i,e)}return a(null,e)}(0,r,t.matchAs):f(t,r,n,e)}return{match:s,addRoute:function(t,e){var r="object"!=typeof t?i[t]:void 0;W([e||t],n,o,i,r),r&&r.alias.length&&W(r.alias.map((function(t){return{path:t,children:[e]}})),n,o,i,r)},getRoutes:function(){return n.map((function(t){return o[t]}))},addRoutes:function(t){W(t,n,o,i)}}}function Z(t,e,r){var n=e.match(t);if(!n)return!1;if(!r)return!0;for(var o=1,i=n.length;o<i;++o){var s=t.keys[o-1];s&&(r[s.name||"pathMatch"]="string"==typeof n[o]?c(n[o]):n[o])}return!0}var tt=J&&window.performance&&window.performance.now?window.performance:Date;function et(){return tt.now().toFixed(3)}var rt=et();function nt(){return rt}function ot(t){return rt=t}var it=Object.create(null);function st(){"scrollRestoration"in window.history&&(window.history.scrollRestoration="manual");var t=window.location.protocol+"//"+window.location.host,e=window.location.href.replace(t,""),r=o({},window.history.state);return r.key=nt(),window.history.replaceState(r,"",e),window.addEventListener("popstate",ct),function(){window.removeEventListener("popstate",ct)}}function at(t,e,r,n){if(t.app){var o=t.options.scrollBehavior;o&&t.app.$nextTick((function(){var i=function(){var t=nt();if(t)return it[t]}(),s=o.call(t,e,r,n?i:null);s&&("function"==typeof s.then?s.then((function(t){ft(t,i)})).catch((function(t){})):ft(s,i))}))}}function ut(){var t=nt();t&&(it[t]={x:window.pageXOffset,y:window.pageYOffset})}function ct(t){ut(),t.state&&t.state.key&&ot(t.state.key)}function pt(t){return lt(t.x)||lt(t.y)}function dt(t){return{x:lt(t.x)?t.x:window.pageXOffset,y:lt(t.y)?t.y:window.pageYOffset}}function lt(t){return"number"==typeof t}var ht=/^#\d/;function ft(t,e){var r,n="object"==typeof t;if(n&&"string"==typeof t.selector){var o=ht.test(t.selector)?document.getElementById(t.selector.slice(1)):document.querySelector(t.selector);if(o){var i=t.offset&&"object"==typeof t.offset?t.offset:{};e=function(t,e){var r=document.documentElement.getBoundingClientRect(),n=t.getBoundingClientRect();return{x:n.left-r.left-e.x,y:n.top-r.top-e.y}}(o,i={x:lt((r=i).x)?r.x:0,y:lt(r.y)?r.y:0})}else pt(t)&&(e=dt(t))}else n&&pt(t)&&(e=dt(t));e&&("scrollBehavior"in document.documentElement.style?window.scrollTo({left:e.x,top:e.y,behavior:t.behavior}):window.scrollTo(e.x,e.y))}var mt,gt=J&&(-1===(mt=window.navigator.userAgent).indexOf("Android 2.")&&-1===mt.indexOf("Android 4.0")||-1===mt.indexOf("Mobile Safari")||-1!==mt.indexOf("Chrome")||-1!==mt.indexOf("Windows Phone"))&&window.history&&"function"==typeof window.history.pushState;function yt(t,e){ut();var r=window.history;try{if(e){var n=o({},r.state);n.key=nt(),r.replaceState(n,"",t)}else r.pushState({key:ot(et())},"",t)}catch(r){window.location[e?"replace":"assign"](t)}}function vt(t){yt(t,!0)}var bt={redirected:2,aborted:4,cancelled:8,duplicated:16};function wt(t,e){return At(t,e,bt.cancelled,'Navigation cancelled from "'+t.fullPath+'" to "'+e.fullPath+'" with a new navigation.')}function At(t,e,r,n){var o=new Error(n);return o._isRouter=!0,o.from=t,o.to=e,o.type=r,o}var Et=["params","query","hash"];function xt(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function _t(t,e){return xt(t)&&t._isRouter&&(null==e||t.type===e)}function Pt(t,e,r){var n=function(o){o>=t.length?r():t[o]?e(t[o],(function(){n(o+1)})):n(o+1)};n(0)}function It(t,e){return Lt(t.map((function(t){return Object.keys(t.components).map((function(r){return e(t.components[r],t.instances[r],t,r)}))})))}function Lt(t){return Array.prototype.concat.apply([],t)}var Ct="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Rt(t){var e=!1;return function(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];if(!e)return e=!0,t.apply(this,r)}}var Nt=function(t,e){this.router=t,this.base=function(t){if(!t)if(J){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";return"/"!==t.charAt(0)&&(t="/"+t),t.replace(/\/$/,"")}(e),this.current=g,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Ut(t,e,r,n){var o=It(t,(function(t,n,o,i){var s=function(t,e){return"function"!=typeof t&&(t=V.extend(t)),t.options[e]}(t,e);if(s)return Array.isArray(s)?s.map((function(t){return r(t,n,o,i)})):r(s,n,o,i)}));return Lt(n?o.reverse():o)}function Ot(t,e){if(e)return function(){return t.apply(e,arguments)}}Nt.prototype.listen=function(t){this.cb=t},Nt.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Nt.prototype.onError=function(t){this.errorCbs.push(t)},Nt.prototype.transitionTo=function(t,e,r){var n,o=this;try{n=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(n,(function(){o.updateRoute(n),e&&e(n),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(n,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(n)})))}),(function(t){r&&r(t),t&&!o.ready&&(_t(t,bt.redirected)&&i===g||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},Nt.prototype.confirmTransition=function(t,e,r){var o=this,i=this.current;this.pending=t;var s,a,u=function(t){!_t(t)&&xt(t)&&(o.errorCbs.length?o.errorCbs.forEach((function(e){e(t)})):n.error(t)),r&&r(t)},c=t.matched.length-1,p=i.matched.length-1;if(b(t,i)&&c===p&&t.matched[c]===i.matched[p])return this.ensureURL(),t.hash&&at(this.router,i,t,!1),u(((a=At(s=i,t,bt.duplicated,'Avoided redundant navigation to current location: "'+s.fullPath+'".')).name="NavigationDuplicated",a));var d,l=function(t,e){var r,n=Math.max(t.length,e.length);for(r=0;r<n&&t[r]===e[r];r++);return{updated:e.slice(0,r),activated:e.slice(r),deactivated:t.slice(r)}}(this.current.matched,t.matched),h=l.updated,f=l.deactivated,m=l.activated,g=[].concat(function(t){return Ut(t,"beforeRouteLeave",Ot,!0)}(f),this.router.beforeHooks,function(t){return Ut(t,"beforeRouteUpdate",Ot)}(h),m.map((function(t){return t.beforeEnter})),(d=m,function(t,e,r){var n=!1,o=0,i=null;It(d,(function(t,e,s,a){if("function"==typeof t&&void 0===t.cid){n=!0,o++;var u,c=Rt((function(e){var n;((n=e).__esModule||Ct&&"Module"===n[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:V.extend(e),s.components[a]=e,--o<=0&&r()})),p=Rt((function(t){var e="Failed to resolve async component "+a+": "+t;i||(i=xt(t)?t:new Error(e),r(i))}));try{u=t(c,p)}catch(t){p(t)}if(u)if("function"==typeof u.then)u.then(c,p);else{var d=u.component;d&&"function"==typeof d.then&&d.then(c,p)}}})),n||r()})),y=function(e,r){if(o.pending!==t)return u(wt(i,t));try{e(t,i,(function(e){!1===e?(o.ensureURL(!0),u(function(t,e){return At(t,e,bt.aborted,'Navigation aborted from "'+t.fullPath+'" to "'+e.fullPath+'" via a navigation guard.')}(i,t))):xt(e)?(o.ensureURL(!0),u(e)):"string"==typeof e||"object"==typeof e&&("string"==typeof e.path||"string"==typeof e.name)?(u(function(t,e){return At(t,e,bt.redirected,'Redirected when going from "'+t.fullPath+'" to "'+function(t){if("string"==typeof t)return t;if("path"in t)return t.path;var e={};return Et.forEach((function(r){r in t&&(e[r]=t[r])})),JSON.stringify(e,null,2)}(e)+'" via a navigation guard.')}(i,t)),"object"==typeof e&&e.replace?o.replace(e):o.push(e)):r(e)}))}catch(t){u(t)}};Pt(g,y,(function(){var r=function(t){return Ut(t,"beforeRouteEnter",(function(t,e,r,n){return function(t,e,r){return function(n,o,i){return t(n,o,(function(t){"function"==typeof t&&(e.enteredCbs[r]||(e.enteredCbs[r]=[]),e.enteredCbs[r].push(t)),i(t)}))}}(t,r,n)}))}(m);Pt(r.concat(o.router.resolveHooks),y,(function(){if(o.pending!==t)return u(wt(i,t));o.pending=null,e(t),o.router.app&&o.router.app.$nextTick((function(){A(t)}))}))}))},Nt.prototype.updateRoute=function(t){this.current=t,this.cb&&this.cb(t)},Nt.prototype.setupListeners=function(){},Nt.prototype.teardown=function(){this.listeners.forEach((function(t){t()})),this.listeners=[],this.current=g,this.pending=null};var kt=function(t){function e(e,r){t.call(this,e,r),this._startLocation=Tt(this.base)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router,r=e.options.scrollBehavior,n=gt&&r;n&&this.listeners.push(st());var o=function(){var r=t.current,o=Tt(t.base);t.current===g&&o===t._startLocation||t.transitionTo(o,(function(t){n&&at(e,t,r,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,(function(t){yt(P(n.base+t.fullPath)),at(n.router,t,o,!1),e&&e(t)}),r)},e.prototype.replace=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,(function(t){vt(P(n.base+t.fullPath)),at(n.router,t,o,!1),e&&e(t)}),r)},e.prototype.ensureURL=function(t){if(Tt(this.base)!==this.current.fullPath){var e=P(this.base+this.current.fullPath);t?yt(e):vt(e)}},e.prototype.getCurrentLocation=function(){return Tt(this.base)},e}(Nt);function Tt(t){var e=window.location.pathname,r=e.toLowerCase(),n=t.toLowerCase();return!t||r!==n&&0!==r.indexOf(P(n+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var St=function(t){function e(e,r,n){t.call(this,e,r),n&&function(t){var e=Tt(t);if(!/^\/#/.test(e))return window.location.replace(P(t+"/#"+e)),!0}(this.base)||jt()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,r=gt&&e;r&&this.listeners.push(st());var n=function(){var e=t.current;jt()&&t.transitionTo(Ft(),(function(n){r&&at(t.router,n,e,!0),gt||Bt(n.fullPath)}))},o=gt?"popstate":"hashchange";window.addEventListener(o,n),this.listeners.push((function(){window.removeEventListener(o,n)}))}},e.prototype.push=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,(function(t){Dt(t.fullPath),at(n.router,t,o,!1),e&&e(t)}),r)},e.prototype.replace=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,(function(t){Bt(t.fullPath),at(n.router,t,o,!1),e&&e(t)}),r)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Ft()!==e&&(t?Dt(e):Bt(e))},e.prototype.getCurrentLocation=function(){return Ft()},e}(Nt);function jt(){var t=Ft();return"/"===t.charAt(0)||(Bt("/"+t),!1)}function Ft(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function $t(t){var e=window.location.href,r=e.indexOf("#");return(r>=0?e.slice(0,r):e)+"#"+t}function Dt(t){gt?yt($t(t)):window.location.hash=t}function Bt(t){gt?vt($t(t)):window.location.replace($t(t))}var qt=function(t){function e(e,r){t.call(this,e,r),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,r){var n=this;this.transitionTo(t,(function(t){n.stack=n.stack.slice(0,n.index+1).concat(t),n.index++,e&&e(t)}),r)},e.prototype.replace=function(t,e,r){var n=this;this.transitionTo(t,(function(t){n.stack=n.stack.slice(0,n.index).concat(t),e&&e(t)}),r)},e.prototype.go=function(t){var e=this,r=this.index+t;if(!(r<0||r>=this.stack.length)){var n=this.stack[r];this.confirmTransition(n,(function(){var t=e.current;e.index=r,e.updateRoute(n),e.router.afterHooks.forEach((function(e){e&&e(n,t)}))}),(function(t){_t(t,bt.duplicated)&&(e.index=r)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Nt),Mt=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=X(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!gt&&!1!==t.fallback,this.fallback&&(e="hash"),J||(e="abstract"),this.mode=e,e){case"history":this.history=new kt(this,t.base);break;case"hash":this.history=new St(this,t.base,this.fallback);break;case"abstract":this.history=new qt(this,t.base)}},Vt={currentRoute:{configurable:!0}};Mt.prototype.match=function(t,e,r){return this.matcher.match(t,e,r)},Vt.currentRoute.get=function(){return this.history&&this.history.current},Mt.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var r=e.apps.indexOf(t);r>-1&&e.apps.splice(r,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var r=this.history;if(r instanceof kt||r instanceof St){var n=function(t){r.setupListeners(),function(t){var n=r.current,o=e.options.scrollBehavior;gt&&o&&"fullPath"in t&&at(e,t,n,!1)}(t)};r.transitionTo(r.getCurrentLocation(),n,n)}r.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Mt.prototype.beforeEach=function(t){return Kt(this.beforeHooks,t)},Mt.prototype.beforeResolve=function(t){return Kt(this.resolveHooks,t)},Mt.prototype.afterEach=function(t){return Kt(this.afterHooks,t)},Mt.prototype.onReady=function(t,e){this.history.onReady(t,e)},Mt.prototype.onError=function(t){this.history.onError(t)},Mt.prototype.push=function(t,e,r){var n=this;if(!e&&!r&&"undefined"!=typeof Promise)return new Promise((function(e,r){n.history.push(t,e,r)}));this.history.push(t,e,r)},Mt.prototype.replace=function(t,e,r){var n=this;if(!e&&!r&&"undefined"!=typeof Promise)return new Promise((function(e,r){n.history.replace(t,e,r)}));this.history.replace(t,e,r)},Mt.prototype.go=function(t){this.history.go(t)},Mt.prototype.back=function(){this.go(-1)},Mt.prototype.forward=function(){this.go(1)},Mt.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Mt.prototype.resolve=function(t,e,r){var n=M(t,e=e||this.history.current,r,this),o=this.match(n,e),i=o.redirectedFrom||o.fullPath,s=function(t,e,r){var n="hash"===r?"#"+e:e;return t?P(t+"/"+n):n}(this.history.base,i,this.mode);return{location:n,route:o,href:s,normalizedTo:n,resolved:o}},Mt.prototype.getRoutes=function(){return this.matcher.getRoutes()},Mt.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==g&&this.history.transitionTo(this.history.getCurrentLocation())},Mt.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==g&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Mt.prototype,Vt);var Gt=Mt;function Kt(t,e){return t.push(e),function(){var r=t.indexOf(e);r>-1&&t.splice(r,1)}}Mt.install=function t(e){if(!t.installed||V!==e){t.installed=!0,V=e;var r=function(t){return void 0!==t},n=function(t,e){var n=t.$options._parentVnode;r(n)&&r(n=n.data)&&r(n=n.registerRouteInstance)&&n(t,e)};e.mixin({beforeCreate:function(){r(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,n(this,this)},destroyed:function(){n(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",E),e.component("RouterLink",K);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Mt.version="3.6.5",Mt.isNavigationFailure=_t,Mt.NavigationFailureType=bt,Mt.START_LOCATION=g,J&&window.Vue&&window.Vue.use(Mt)},58723:(t,e)=>{function r(t,e){var n={name:t.name,path:t.path,hash:t.hash,query:t.query,params:t.params,fullPath:t.fullPath,meta:t.meta};return e&&(n.from=r(e)),Object.freeze(n)}e.O=function(t,e,n){var o=(n||{}).moduleName||"route";t.registerModule(o,{namespaced:!0,state:r(e.currentRoute),mutations:{ROUTE_CHANGED:function(e,n){t.state[o]=r(n.to,n.from)}}});var i,s=!1,a=t.watch((function(t){return t[o]}),(function(t){var r=t.fullPath;r!==i&&(null!=i&&(s=!0,e.push(t)),i=r)}),{sync:!0}),u=e.afterEach((function(e,r){s?s=!1:(i=e.fullPath,t.commit(o+"/ROUTE_CHANGED",{to:e,from:r}))}));return function(){null!=u&&u(),null!=a&&a(),t.unregisterModule(o)}}},35810:(t,e,r)=>{"use strict";r.d(e,{Al:()=>k,H4:()=>U,PY:()=>N,Q$:()=>O,R3:()=>A,VL:()=>w,lJ:()=>R,lT:()=>f,pt:()=>E,v7:()=>h});var n,o=r(92457),i=r(53529),s=r(53334),a=r(43627),u=r(71089),c=r(99498),p=r(44719);null===(n=(0,o.HW)())?(0,i.YK)().setApp("files").build():(0,i.YK)().setApp("files").setUid(n.uid).build();const d=["B","KB","MB","GB","TB","PB"],l=["B","KiB","MiB","GiB","TiB","PiB"];function h(t,e=!1,r=!1,n=!1){r=r&&!n,"string"==typeof t&&(t=Number(t));let o=t>0?Math.floor(Math.log(t)/Math.log(n?1e3:1024)):0;o=Math.min((r?l.length:d.length)-1,o);const i=r?l[o]:d[o];let a=(t/Math.pow(n?1e3:1024,o)).toFixed(1);return!0===e&&0===o?("0.0"!==a?"< 1 ":"0 ")+(r?l[1]:d[1]):(a=o<2?parseFloat(a).toFixed(0):parseFloat(a).toLocaleString((0,s.lO)()),a+" "+i)}function f(t,e=!1){try{t=`${t}`.toLocaleLowerCase().replaceAll(/\s+/g,"").replaceAll(",",".")}catch{return null}const r=t.match(/^([0-9]*(\.[0-9]*)?)([kmgtp]?)(i?)b?$/);if(null===r||"."===r[1]||""===r[1])return null;const n=`${r[1]}`,o="i"===r[4]||e?1024:1e3;return Math.round(Number.parseFloat(n)*o**{"":0,k:1,m:2,g:3,t:4,p:5,e:6}[r[3]])}var m=(t=>(t[t.NONE=0]="NONE",t[t.CREATE=4]="CREATE",t[t.READ=1]="READ",t[t.UPDATE=2]="UPDATE",t[t.DELETE=8]="DELETE",t[t.SHARE=16]="SHARE",t[t.ALL=31]="ALL",t))(m||{});const g=["d:getcontentlength","d:getcontenttype","d:getetag","d:getlastmodified","d:quota-available-bytes","d:resourcetype","nc:has-preview","nc:is-encrypted","nc:mount-type","nc:share-attributes","oc:comments-unread","oc:favorite","oc:fileid","oc:owner-display-name","oc:owner-id","oc:permissions","oc:share-types","oc:size","ocs:share-permissions"],y={d:"DAV:",nc:"http://nextcloud.org/ns",oc:"http://owncloud.org/ns",ocs:"http://open-collaboration-services.org/ns"},v=function(){return typeof window._nc_dav_properties>"u"&&(window._nc_dav_properties=[...g]),window._nc_dav_properties.map((t=>`<${t} />`)).join(" ")},b=function(){return typeof window._nc_dav_namespaces>"u"&&(window._nc_dav_namespaces={...y}),Object.keys(window._nc_dav_namespaces).map((t=>`xmlns:${t}="${window._nc_dav_namespaces?.[t]}"`)).join(" ")},w=function(){return`<?xml version="1.0"?>\n\t\t<d:propfind ${b()}>\n\t\t\t<d:prop>\n\t\t\t\t${v()}\n\t\t\t</d:prop>\n\t\t</d:propfind>`},A=function(t){return`<?xml version="1.0" encoding="UTF-8"?>\n<d:searchrequest ${b()}\n\txmlns:ns="https://github.com/icewind1991/SearchDAV/ns">\n\t<d:basicsearch>\n\t\t<d:select>\n\t\t\t<d:prop>\n\t\t\t\t${v()}\n\t\t\t</d:prop>\n\t\t</d:select>\n\t\t<d:from>\n\t\t\t<d:scope>\n\t\t\t\t<d:href>/files/${(0,o.HW)()?.uid}/</d:href>\n\t\t\t\t<d:depth>infinity</d:depth>\n\t\t\t</d:scope>\n\t\t</d:from>\n\t\t<d:where>\n\t\t\t<d:and>\n\t\t\t\t<d:or>\n\t\t\t\t\t<d:not>\n\t\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t\t<d:getcontenttype/>\n\t\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t\t<d:literal>httpd/unix-directory</d:literal>\n\t\t\t\t\t\t</d:eq>\n\t\t\t\t\t</d:not>\n\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t<oc:size/>\n\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t<d:literal>0</d:literal>\n\t\t\t\t\t</d:eq>\n\t\t\t\t</d:or>\n\t\t\t\t<d:gt>\n\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t\t</d:prop>\n\t\t\t\t\t<d:literal>${t}</d:literal>\n\t\t\t\t</d:gt>\n\t\t\t</d:and>\n\t\t</d:where>\n\t\t<d:orderby>\n\t\t\t<d:order>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t</d:prop>\n\t\t\t\t<d:descending/>\n\t\t\t</d:order>\n\t\t</d:orderby>\n\t\t<d:limit>\n\t\t\t<d:nresults>100</d:nresults>\n\t\t\t<ns:firstresult>0</ns:firstresult>\n\t\t</d:limit>\n\t</d:basicsearch>\n</d:searchrequest>`};var E=(t=>(t.Folder="folder",t.File="file",t))(E||{});const x=function(t,e){return null!==t.match(e)},_=(t,e)=>{if(t.id&&"number"!=typeof t.id)throw new Error("Invalid id type of value");if(!t.source)throw new Error("Missing mandatory source");try{new URL(t.source)}catch{throw new Error("Invalid source format, source must be a valid URL")}if(!t.source.startsWith("http"))throw new Error("Invalid source format, only http(s) is supported");if(t.mtime&&!(t.mtime instanceof Date))throw new Error("Invalid mtime type");if(t.crtime&&!(t.crtime instanceof Date))throw new Error("Invalid crtime type");if(!t.mime||"string"!=typeof t.mime||!t.mime.match(/^[-\w.]+\/[-+\w.]+$/gi))throw new Error("Missing or invalid mandatory mime");if("size"in t&&"number"!=typeof t.size&&void 0!==t.size)throw new Error("Invalid size type");if("permissions"in t&&void 0!==t.permissions&&!("number"==typeof t.permissions&&t.permissions>=m.NONE&&t.permissions<=m.ALL))throw new Error("Invalid permissions");if(t.owner&&null!==t.owner&&"string"!=typeof t.owner)throw new Error("Invalid owner type");if(t.attributes&&"object"!=typeof t.attributes)throw new Error("Invalid attributes type");if(t.root&&"string"!=typeof t.root)throw new Error("Invalid root type");if(t.root&&!t.root.startsWith("/"))throw new Error("Root must start with a leading slash");if(t.root&&!t.source.includes(t.root))throw new Error("Root must be part of the source");if(t.root&&x(t.source,e)){const r=t.source.match(e)[0];if(!t.source.includes((0,a.join)(r,t.root)))throw new Error("The root must be relative to the service. e.g /files/emma")}if(t.status&&!Object.values(P).includes(t.status))throw new Error("Status must be a valid NodeStatus")};var P=(t=>(t.NEW="new",t.FAILED="failed",t.LOADING="loading",t.LOCKED="locked",t))(P||{});class I{_data;_attributes;_knownDavService=/(remote|public)\.php\/(web)?dav/i;constructor(t,e){_(t,e||this._knownDavService),this._data=t;const r={set:(t,e,r)=>(this.updateMtime(),Reflect.set(t,e,r)),deleteProperty:(t,e)=>(this.updateMtime(),Reflect.deleteProperty(t,e))};this._attributes=new Proxy(t.attributes||{},r),delete this._data.attributes,e&&(this._knownDavService=e)}get source(){return this._data.source.replace(/\/$/i,"")}get encodedSource(){const{origin:t}=new URL(this.source);return t+(0,u.O0)(this.source.slice(t.length))}get basename(){return(0,a.basename)(this.source)}get extension(){return(0,a.extname)(this.source)}get dirname(){if(this.root){let t=this.source;this.isDavRessource&&(t=t.split(this._knownDavService).pop());const e=t.indexOf(this.root),r=this.root.replace(/\/$/,"");return(0,a.dirname)(t.slice(e+r.length)||"/")}const t=new URL(this.source);return(0,a.dirname)(t.pathname)}get mime(){return this._data.mime}get mtime(){return this._data.mtime}get crtime(){return this._data.crtime}get size(){return this._data.size}get attributes(){return this._attributes}get permissions(){return null!==this.owner||this.isDavRessource?void 0!==this._data.permissions?this._data.permissions:m.NONE:m.READ}get owner(){return this.isDavRessource?this._data.owner:null}get isDavRessource(){return x(this.source,this._knownDavService)}get root(){return this._data.root?this._data.root.replace(/^(.+)\/$/,"$1"):this.isDavRessource&&(0,a.dirname)(this.source).split(this._knownDavService).pop()||null}get path(){if(this.root){let t=this.source;this.isDavRessource&&(t=t.split(this._knownDavService).pop());const e=t.indexOf(this.root),r=this.root.replace(/\/$/,"");return t.slice(e+r.length)||"/"}return(this.dirname+"/"+this.basename).replace(/\/\//g,"/")}get fileid(){return this._data?.id||this.attributes?.fileid}get status(){return this._data?.status}set status(t){this._data.status=t}move(t){_({...this._data,source:t},this._knownDavService),this._data.source=t,this.updateMtime()}rename(t){if(t.includes("/"))throw new Error("Invalid basename");this.move((0,a.dirname)(this.source)+"/"+t)}updateMtime(){this._data.mtime&&(this._data.mtime=new Date)}}class L extends I{get type(){return E.File}}class C extends I{constructor(t){super({...t,mime:"httpd/unix-directory"})}get type(){return E.Folder}get extension(){return null}get mime(){return"httpd/unix-directory"}}const R=`/files/${(0,o.HW)()?.uid}`,N=(0,c.dC)("dav"),U=function(t=N,e={}){const r=(0,p.UU)(t,{headers:e});function n(t){r.setHeaders({...e,"X-Requested-With":"XMLHttpRequest",requesttoken:t??""})}return(0,o.zo)(n),n((0,o.do)()),(0,p.Gu)().patch("fetch",((t,e)=>{const r=e.headers;return r?.method&&(e.method=r.method,delete r.method),fetch(t,e)})),r},O=async(t,e="/",r=R)=>(await t.getDirectoryContents(`${r}${e}`,{details:!0,data:`<?xml version="1.0"?>\n\t\t<oc:filter-files ${b()}>\n\t\t\t<d:prop>\n\t\t\t\t${v()}\n\t\t\t</d:prop>\n\t\t\t<oc:filter-rules>\n\t\t\t\t<oc:favorite>1</oc:favorite>\n\t\t\t</oc:filter-rules>\n\t\t</oc:filter-files>`,headers:{method:"REPORT"},includeSelf:!0})).data.filter((t=>t.filename!==e)).map((t=>k(t,r))),k=function(t,e=R,r=N){const n=t.props,i=function(t=""){let e=m.NONE;return t&&((t.includes("C")||t.includes("K"))&&(e|=m.CREATE),t.includes("G")&&(e|=m.READ),(t.includes("W")||t.includes("N")||t.includes("V"))&&(e|=m.UPDATE),t.includes("D")&&(e|=m.DELETE),t.includes("R")&&(e|=m.SHARE)),e}(n?.permissions),s=n?.["owner-id"]||(0,o.HW)()?.uid,a={id:n?.fileid||0,source:`${r}${t.filename}`,mtime:new Date(Date.parse(t.lastmod)),mime:t.mime,size:n?.size||Number.parseInt(n.getcontentlength||"0"),permissions:i,owner:s,root:e,attributes:{...t,...n,hasPreview:n?.["has-preview"]}};return delete a.attributes?.props,"file"===t.type?new L(a):new C(a)};var T={};!function(t){const e=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",r="["+e+"]["+e+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*",n=new RegExp("^"+r+"$");t.isExist=function(t){return typeof t<"u"},t.isEmptyObject=function(t){return 0===Object.keys(t).length},t.merge=function(t,e,r){if(e){const n=Object.keys(e),o=n.length;for(let i=0;i<o;i++)t[n[i]]="strict"===r?[e[n[i]]]:e[n[i]]}},t.getValue=function(e){return t.isExist(e)?e:""},t.isName=function(t){const e=n.exec(t);return!(null===e||typeof e>"u")},t.getAllMatches=function(t,e){const r=[];let n=e.exec(t);for(;n;){const o=[];o.startIndex=e.lastIndex-n[0].length;const i=n.length;for(let t=0;t<i;t++)o.push(n[t]);r.push(o),n=e.exec(t)}return r},t.nameRegexp=r}(T);new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");var S={};const j={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0},tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(t,e,r){return t}};S.buildOptions=function(t){return Object.assign({},j,t)},S.defaultOptions=j,!Number.parseInt&&window.parseInt&&(Number.parseInt=window.parseInt),!Number.parseFloat&&window.parseFloat&&(Number.parseFloat=window.parseFloat);"<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)".replace(/NAME/g,T.nameRegexp),new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");var F={};function $(t,e,r){let n;const o={};for(let i=0;i<t.length;i++){const s=t[i],a=D(s);let u="";if(u=void 0===r?a:r+"."+a,a===e.textNodeName)void 0===n?n=s[a]:n+=""+s[a];else{if(void 0===a)continue;if(s[a]){let t=$(s[a],e,u);const r=q(t,e);s[":@"]?B(t,s[":@"],u,e):1!==Object.keys(t).length||void 0===t[e.textNodeName]||e.alwaysCreateTextNode?0===Object.keys(t).length&&(e.alwaysCreateTextNode?t[e.textNodeName]="":t=""):t=t[e.textNodeName],void 0!==o[a]&&o.hasOwnProperty(a)?(Array.isArray(o[a])||(o[a]=[o[a]]),o[a].push(t)):e.isArray(a,u,r)?o[a]=[t]:o[a]=t}}}return"string"==typeof n?n.length>0&&(o[e.textNodeName]=n):void 0!==n&&(o[e.textNodeName]=n),o}function D(t){const e=Object.keys(t);for(let t=0;t<e.length;t++){const r=e[t];if(":@"!==r)return r}}function B(t,e,r,n){if(e){const o=Object.keys(e),i=o.length;for(let s=0;s<i;s++){const i=o[s];n.isArray(i,r+"."+i,!0,!0)?t[i]=[e[i]]:t[i]=e[i]}}}function q(t,e){const{textNodeName:r}=e,n=Object.keys(t).length;return!(0!==n&&(1!==n||!t[r]&&"boolean"!=typeof t[r]&&0!==t[r]))}F.prettify=function(t,e){return $(t,e)};const{buildOptions:M}=S,{prettify:V}=F;function G(t,e,r,n){let o="",i=!1;for(let s=0;s<t.length;s++){const a=t[s],u=K(a);if(void 0===u)continue;let c="";if(c=0===r.length?u:`${r}.${u}`,u===e.textNodeName){let t=a[u];z(c,e)||(t=e.tagValueProcessor(u,t),t=J(t,e)),i&&(o+=n),o+=t,i=!1;continue}if(u===e.cdataPropName){i&&(o+=n),o+=`<![CDATA[${a[u][0][e.textNodeName]}]]>`,i=!1;continue}if(u===e.commentPropName){o+=n+`\x3c!--${a[u][0][e.textNodeName]}--\x3e`,i=!0;continue}if("?"===u[0]){const t=H(a[":@"],e),r="?xml"===u?"":n;let s=a[u][0][e.textNodeName];s=0!==s.length?" "+s:"",o+=r+`<${u}${s}${t}?>`,i=!0;continue}let p=n;""!==p&&(p+=e.indentBy);const d=n+`<${u}${H(a[":@"],e)}`,l=G(a[u],e,c,p);-1!==e.unpairedTags.indexOf(u)?e.suppressUnpairedNode?o+=d+">":o+=d+"/>":l&&0!==l.length||!e.suppressEmptyNode?l&&l.endsWith(">")?o+=d+`>${l}${n}</${u}>`:(o+=d+">",l&&""!==n&&(l.includes("/>")||l.includes("</"))?o+=n+e.indentBy+l+n:o+=l,o+=`</${u}>`):o+=d+"/>",i=!0}return o}function K(t){const e=Object.keys(t);for(let r=0;r<e.length;r++){const n=e[r];if(t.hasOwnProperty(n)&&":@"!==n)return n}}function H(t,e){let r="";if(t&&!e.ignoreAttributes)for(let n in t){if(!t.hasOwnProperty(n))continue;let o=e.attributeValueProcessor(n,t[n]);o=J(o,e),!0===o&&e.suppressBooleanAttributes?r+=` ${n.substr(e.attributeNamePrefix.length)}`:r+=` ${n.substr(e.attributeNamePrefix.length)}="${o}"`}return r}function z(t,e){let r=(t=t.substr(0,t.length-e.textNodeName.length-1)).substr(t.lastIndexOf(".")+1);for(let n in e.stopNodes)if(e.stopNodes[n]===t||e.stopNodes[n]==="*."+r)return!0;return!1}function J(t,e){if(t&&t.length>0&&e.processEntities)for(let r=0;r<e.entities.length;r++){const n=e.entities[r];t=t.replace(n.regex,n.val)}return t}const W=function(t,e){let r="";return e.format&&e.indentBy.length>0&&(r="\n"),G(t,e,"",r)},Q={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&amp;"},{regex:new RegExp(">","g"),val:"&gt;"},{regex:new RegExp("<","g"),val:"&lt;"},{regex:new RegExp("'","g"),val:"&apos;"},{regex:new RegExp('"',"g"),val:"&quot;"}],processEntities:!0,stopNodes:[],oneListGroup:!1};function Y(t){this.options=Object.assign({},Q,t),this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=tt),this.processTextOrObjNode=X,this.options.format?(this.indentate=Z,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function X(t,e,r){const n=this.j2x(t,r+1);return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,n.attrStr,r):this.buildObjectNode(n.val,e,n.attrStr,r)}function Z(t){return this.options.indentBy.repeat(t)}function tt(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}Y.prototype.build=function(t){return this.options.preserveOrder?W(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&(t={[this.options.arrayNodeName]:t}),this.j2x(t,0).val)},Y.prototype.j2x=function(t,e){let r="",n="";for(let o in t)if(Object.prototype.hasOwnProperty.call(t,o))if(typeof t[o]>"u")this.isAttribute(o)&&(n+="");else if(null===t[o])this.isAttribute(o)?n+="":"?"===o[0]?n+=this.indentate(e)+"<"+o+"?"+this.tagEndChar:n+=this.indentate(e)+"<"+o+"/"+this.tagEndChar;else if(t[o]instanceof Date)n+=this.buildTextValNode(t[o],o,"",e);else if("object"!=typeof t[o]){const i=this.isAttribute(o);if(i)r+=this.buildAttrPairStr(i,""+t[o]);else if(o===this.options.textNodeName){let e=this.options.tagValueProcessor(o,""+t[o]);n+=this.replaceEntitiesValue(e)}else n+=this.buildTextValNode(t[o],o,"",e)}else if(Array.isArray(t[o])){const r=t[o].length;let i="";for(let s=0;s<r;s++){const r=t[o][s];typeof r>"u"||(null===r?"?"===o[0]?n+=this.indentate(e)+"<"+o+"?"+this.tagEndChar:n+=this.indentate(e)+"<"+o+"/"+this.tagEndChar:"object"==typeof r?this.options.oneListGroup?i+=this.j2x(r,e+1).val:i+=this.processTextOrObjNode(r,o,e):i+=this.buildTextValNode(r,o,"",e))}this.options.oneListGroup&&(i=this.buildObjectNode(i,o,"",e)),n+=i}else if(this.options.attributesGroupName&&o===this.options.attributesGroupName){const e=Object.keys(t[o]),n=e.length;for(let i=0;i<n;i++)r+=this.buildAttrPairStr(e[i],""+t[o][e[i]])}else n+=this.processTextOrObjNode(t[o],o,e);return{attrStr:r,val:n}},Y.prototype.buildAttrPairStr=function(t,e){return e=this.options.attributeValueProcessor(t,""+e),e=this.replaceEntitiesValue(e),this.options.suppressBooleanAttributes&&"true"===e?" "+t:" "+t+'="'+e+'"'},Y.prototype.buildObjectNode=function(t,e,r,n){if(""===t)return"?"===e[0]?this.indentate(n)+"<"+e+r+"?"+this.tagEndChar:this.indentate(n)+"<"+e+r+this.closeTag(e)+this.tagEndChar;{let o="</"+e+this.tagEndChar,i="";return"?"===e[0]&&(i="?",o=""),!r&&""!==r||-1!==t.indexOf("<")?!1!==this.options.commentPropName&&e===this.options.commentPropName&&0===i.length?this.indentate(n)+`\x3c!--${t}--\x3e`+this.newLine:this.indentate(n)+"<"+e+r+i+this.tagEndChar+t+this.indentate(n)+o:this.indentate(n)+"<"+e+r+i+">"+t+o}},Y.prototype.closeTag=function(t){let e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":`></${t}`,e},Y.prototype.buildTextValNode=function(t,e,r,n){if(!1!==this.options.cdataPropName&&e===this.options.cdataPropName)return this.indentate(n)+`<![CDATA[${t}]]>`+this.newLine;if(!1!==this.options.commentPropName&&e===this.options.commentPropName)return this.indentate(n)+`\x3c!--${t}--\x3e`+this.newLine;if("?"===e[0])return this.indentate(n)+"<"+e+r+"?"+this.tagEndChar;{let o=this.options.tagValueProcessor(e,t);return o=this.replaceEntitiesValue(o),""===o?this.indentate(n)+"<"+e+r+this.closeTag(e)+this.tagEndChar:this.indentate(n)+"<"+e+r+">"+o+"</"+e+this.tagEndChar}},Y.prototype.replaceEntitiesValue=function(t){if(t&&t.length>0&&this.options.processEntities)for(let e=0;e<this.options.entities.length;e++){const r=this.options.entities[e];t=t.replace(r.regex,r.val)}return t}}},i={};function s(t){var e=i[t];if(void 0!==e)return e.exports;var r=i[t]={id:t,loaded:!1,exports:{}};return o[t].call(r.exports,r,r.exports,s),r.loaded=!0,r.exports}s.m=o,e=[],s.O=(t,r,n,o)=>{if(!r){var i=1/0;for(p=0;p<e.length;p++){r=e[p][0],n=e[p][1],o=e[p][2];for(var a=!0,u=0;u<r.length;u++)(!1&o||i>=o)&&Object.keys(s.O).every((t=>s.O[t](r[u])))?r.splice(u--,1):(a=!1,o<i&&(i=o));if(a){e.splice(p--,1);var c=n();void 0!==c&&(t=c)}}return t}o=o||0;for(var p=e.length;p>0&&e[p-1][2]>o;p--)e[p]=e[p-1];e[p]=[r,n,o]},s.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return s.d(e,{a:e}),e},s.d=(t,e)=>{for(var r in e)s.o(e,r)&&!s.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},s.f={},s.e=t=>Promise.all(Object.keys(s.f).reduce(((e,r)=>(s.f[r](t,e),e)),[])),s.u=t=>(({3239:"settings-users",4529:"settings-apps-view"}[t]||t)+"-"+t+".js?v="+{1359:"d217768bf3f39a7359dd",1439:"41c39783c33a6fb28f5c",3239:"b380e9fda46ca498c72f",3865:"8ecd73fc58224ecd56fe",4529:"cbb831939e1ecf715716",8618:"1e8f15db3b14455fef8f",9923:"0add07b4169aca95df9a"}[t]),s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r={},n="nextcloud:",s.l=(t,e,o,i)=>{if(r[t])r[t].push(e);else{var a,u;if(void 0!==o)for(var c=document.getElementsByTagName("script"),p=0;p<c.length;p++){var d=c[p];if(d.getAttribute("src")==t||d.getAttribute("data-webpack")==n+o){a=d;break}}a||(u=!0,(a=document.createElement("script")).charset="utf-8",a.timeout=120,s.nc&&a.setAttribute("nonce",s.nc),a.setAttribute("data-webpack",n+o),a.src=t),r[t]=[e];var l=(e,n)=>{a.onerror=a.onload=null,clearTimeout(h);var o=r[t];if(delete r[t],a.parentNode&&a.parentNode.removeChild(a),o&&o.forEach((t=>t(n))),e)return e(n)},h=setTimeout(l.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=l.bind(null,a.onerror),a.onload=l.bind(null,a.onload),u&&document.head.appendChild(a)}},s.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},s.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),s.j=2689,(()=>{var t;s.g.importScripts&&(t=s.g.location+"");var e=s.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var r=e.getElementsByTagName("script");if(r.length)for(var n=r.length-1;n>-1&&(!t||!/^http(s?):/.test(t));)t=r[n--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),s.p=t})(),(()=>{s.b=document.baseURI||self.location.href;var t={2689:0};s.f.j=(e,r)=>{var n=s.o(t,e)?t[e]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,o)=>n=t[e]=[r,o]));r.push(n[2]=o);var i=s.p+s.u(e),a=new Error;s.l(i,(r=>{if(s.o(t,e)&&(0!==(n=t[e])&&(t[e]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;a.message="Loading chunk "+e+" failed.\n("+o+": "+i+")",a.name="ChunkLoadError",a.type=o,a.request=i,n[1](a)}}),"chunk-"+e,e)}},s.O.j=e=>0===t[e];var e=(e,r)=>{var n,o,i=r[0],a=r[1],u=r[2],c=0;if(i.some((e=>0!==t[e]))){for(n in a)s.o(a,n)&&(s.m[n]=a[n]);if(u)var p=u(s)}for(e&&e(r);c<i.length;c++)o=i[c],s.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return s.O(p)},r=self.webpackChunknextcloud=self.webpackChunknextcloud||[];r.forEach(e.bind(null,0)),r.push=e.bind(null,r.push.bind(r))})(),s.nc=void 0;var a=s.O(void 0,[4208],(()=>s(74329)));a=s.O(a)})();
-//# sourceMappingURL=settings-vue-settings-apps-users-management.js.map?v=29e46a7cb0e46579a5e7 \ No newline at end of file
+(()=>{var e,r,n,o={31755:(e,r,n)=>{"use strict";n.d(r,{P:()=>B});var o=n(85471),i=n(95353),s=n(59097),a=n(22843),u=n(35810),c=n(99498),p=n(26287),d=n(56760);n(51257);const l=function(t){return t.replace(/\/$/,"")},h=()=>(0,d.C)(),f=(t,e)=>p.A.get(l(t),e),m=(t,e)=>p.A.post(l(t),e),g=(t,e)=>p.A.put(l(t),e),y=(t,e)=>p.A.delete(l(t),{params:e});var v=n(36620),b=n(96763);const w=(0,s.c0)("settings").persist(!0).build(),A=function(t,e){return 1===e?t.sort(((t,e)=>t.usercount-t.disabled<e.usercount-e.disabled)):t.sort(((t,e)=>t.name.localeCompare(e.name)))},E={id:"",name:"",usercount:0,disabled:0,canAdd:!0,canRemove:!0},x={users:[],groups:[],orderBy:1,minPasswordLength:0,usersOffset:0,usersLimit:25,disabledUsersOffset:0,disabledUsersLimit:25,userCount:0,showConfig:{showStoragePath:"true"===w.getItem("account_settings__showStoragePath"),showUserBackend:"true"===w.getItem("account_settings__showUserBackend"),showLastLogin:"true"===w.getItem("account_settings__showLastLogin"),showNewUserForm:"true"===w.getItem("account_settings__showNewUserForm"),showLanguages:"true"===w.getItem("account_settings__showLanguages")}},_={appendUsers(t,e){const r=t.users.map((t=>{let{id:e}=t;return e})),n=Object.values(e).filter((t=>{let{id:e}=t;return!r.includes(e)})),o=t.users.concat(n);t.usersOffset+=t.usersLimit,t.users=o},updateDisabledUsers(t,e){t.disabledUsersOffset+=t.disabledUsersLimit},setPasswordPolicyMinLength(t,e){t.minPasswordLength=""!==e?e:0},initGroups(t,e){let{groups:r,orderBy:n,userCount:o}=e;t.groups=r.map((t=>Object.assign({},E,t))),t.orderBy=n,t.userCount=o,t.groups=A(t.groups,t.orderBy)},addGroup(t,e){let{gid:r,displayName:n}=e;try{if(void 0!==t.groups.find((t=>t.id===r)))return;const e=Object.assign({},E,{id:r,name:n});t.groups.unshift(e),t.groups=A(t.groups,t.orderBy)}catch(t){b.error("Can't create group",t)}},renameGroup(t,e){let{gid:r,displayName:n}=e;const o=t.groups.findIndex((t=>t.id===r));if(o>=0){const e=t.groups[o];e.name=n,t.groups.splice(o,1,e),t.groups=A(t.groups,t.orderBy)}},removeGroup(t,e){const r=t.groups.findIndex((t=>t.id===e));r>=0&&t.groups.splice(r,1)},addUserGroup(t,e){let{userid:r,gid:n}=e;const o=t.groups.find((t=>t.id===n)),i=t.users.find((t=>t.id===r));o&&i.enabled&&t.userCount>0&&o.usercount++,i.groups.push(n),t.groups=A(t.groups,t.orderBy)},removeUserGroup(t,e){let{userid:r,gid:n}=e;const o=t.groups.find((t=>t.id===n)),i=t.users.find((t=>t.id===r));o&&i.enabled&&t.userCount>0&&o.usercount--;const s=i.groups;s.splice(s.indexOf(n),1),t.groups=A(t.groups,t.orderBy)},addUserSubAdmin(t,e){let{userid:r,gid:n}=e;t.users.find((t=>t.id===r)).subadmin.push(n)},removeUserSubAdmin(t,e){let{userid:r,gid:n}=e;const o=t.users.find((t=>t.id===r)).subadmin;o.splice(o.indexOf(n),1)},deleteUser(t,e){const r=t.users.findIndex((t=>t.id===e));this.commit("updateUserCounts",{user:t.users[r],actionType:"remove"}),t.users.splice(r,1)},addUserData(t,e){const r=e.data.ocs.data;t.users.unshift(r),this.commit("updateUserCounts",{user:r,actionType:"create"})},enableDisableUser(t,e){let{userid:r,enabled:n}=e;const o=t.users.find((t=>t.id===r));o.enabled=n,this.commit("updateUserCounts",{user:o,actionType:n?"enable":"disable"})},updateUserCounts(t,e){let{user:r,actionType:n}=e;if(0===t.userCount)return;const o=t.groups.find((t=>"disabled"===t.id));switch(n){case"enable":case"disable":o.usercount+=r.enabled?-1:1,t.userCount+=r.enabled?1:-1,r.groups.forEach((e=>{t.groups.find((t=>t.id===e)).disabled+=r.enabled?-1:1}));break;case"create":t.userCount++,r.groups.forEach((e=>{t.groups.find((t=>t.id===e)).usercount++}));break;case"remove":r.enabled?(t.userCount--,r.groups.forEach((e=>{const r=t.groups.find((t=>t.id===e));r?r.usercount--:b.warn("User group "+e+" does not exist during user removal")}))):(o.usercount--,r.groups.forEach((e=>{t.groups.find((t=>t.id===e)).disabled--})));break;default:v.A.error("Unknown action type in updateUserCounts: '".concat(n,"'"))}},setUserData(t,e){let{userid:r,key:n,value:o}=e;if("quota"===n){const e=(0,u.lT)(o,!0);t.users.find((t=>t.id===r))[n][n]=null!==e?e:o}else t.users.find((t=>t.id===r))[n]=o},resetUsers(t){t.users=[],t.usersOffset=0,t.disabledUsersOffset=0},setShowConfig(t,e){let{key:r,value:n}=e;w.setItem("account_settings__".concat(r),JSON.stringify(n)),t.showConfig[r]=n}},P=p.A.CancelToken;let I=null;const L={state:x,mutations:_,getters:{getUsers:t=>t.users,getGroups:t=>t.groups,getSubadminGroups:t=>t.groups.filter((t=>"admin"!==t.id&&"disabled"!==t.id)),getPasswordPolicyMinLength:t=>t.minPasswordLength,getUsersOffset:t=>t.usersOffset,getUsersLimit:t=>t.usersLimit,getDisabledUsersOffset:t=>t.disabledUsersOffset,getDisabledUsersLimit:t=>t.disabledUsersLimit,getUserCount:t=>t.userCount,getShowConfig:t=>t.showConfig},actions:{searchUsers(t,e){let{offset:r,limit:n,search:o}=e;return o="string"==typeof o?o:"",f((0,c.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o})).catch((e=>{p.A.isCancel(e)||t.commit("API_FAILURE",e)}))},getUser:(t,e)=>f((0,c.KT)("cloud/users/".concat(e))).catch((e=>{p.A.isCancel(e)||t.commit("API_FAILURE",e)})),getUsers(t,e){let{offset:r,limit:n,search:o,group:i}=e;return I&&I.cancel("Operation canceled by another search request."),I=P.source(),o="string"==typeof o?o:"",o=o.replace(/in:[^\s]+/g,"").trim(),i="string"==typeof i?i:"",""!==i?f((0,c.KT)("cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}",{group:encodeURIComponent(i),offset:r,limit:n,search:o}),{cancelToken:I.token}).then((e=>{const r=Object.keys(e.data.ocs.data.users).length;return r>0&&t.commit("appendUsers",e.data.ocs.data.users),r})).catch((e=>{p.A.isCancel(e)||t.commit("API_FAILURE",e)})):f((0,c.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o}),{cancelToken:I.token}).then((e=>{const r=Object.keys(e.data.ocs.data.users).length;return r>0&&t.commit("appendUsers",e.data.ocs.data.users),r})).catch((e=>{p.A.isCancel(e)||t.commit("API_FAILURE",e)}))},async getDisabledUsers(t,e){let{offset:r,limit:n}=e;const o=(0,c.KT)("cloud/users/disabled?offset={offset}&limit={limit}",{offset:r,limit:n});try{const e=await f(o),r=Object.keys(e.data.ocs.data.users).length;return r>0&&(t.commit("appendUsers",e.data.ocs.data.users),t.commit("updateDisabledUsers",e.data.ocs.data.users)),r}catch(e){t.commit("API_FAILURE",e)}},getGroups(t,e){let{offset:r,limit:n,search:o}=e;o="string"==typeof o?o:"";const i=-1===n?"":"&limit=".concat(n);return f((0,c.KT)("cloud/groups?offset={offset}&search={search}",{offset:r,search:o})+i).then((e=>Object.keys(e.data.ocs.data.groups).length>0&&(e.data.ocs.data.groups.forEach((function(e){t.commit("addGroup",{gid:e,displayName:e})})),!0))).catch((e=>t.commit("API_FAILURE",e)))},getUsersFromList(t,e){let{offset:r,limit:n,search:o}=e;return o="string"==typeof o?o:"",f((0,c.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o})).then((e=>Object.keys(e.data.ocs.data.users).length>0&&(t.commit("appendUsers",e.data.ocs.data.users),!0))).catch((e=>t.commit("API_FAILURE",e)))},getUsersFromGroup(t,e){let{groupid:r,offset:n,limit:o}=e;return f((0,c.KT)("cloud/users/{groupId}/details?offset={offset}&limit={limit}",{groupId:encodeURIComponent(r),offset:n,limit:o})).then((e=>t.commit("getUsersFromList",e.data.ocs.data.users))).catch((e=>t.commit("API_FAILURE",e)))},getPasswordPolicyMinLength:t=>!(!(0,a.F)().password_policy||!(0,a.F)().password_policy.minLength)&&(t.commit("setPasswordPolicyMinLength",(0,a.F)().password_policy.minLength),(0,a.F)().password_policy.minLength),addGroup:(t,e)=>h().then((r=>m((0,c.KT)("cloud/groups"),{groupid:e}).then((r=>(t.commit("addGroup",{gid:e,displayName:e}),{gid:e,displayName:e}))).catch((t=>{throw t})))).catch((r=>{throw t.commit("API_FAILURE",{gid:e,error:r}),r})),renameGroup(t,e){let{groupid:r,displayName:n}=e;return h().then((e=>g((0,c.KT)("cloud/groups/{groupId}",{groupId:encodeURIComponent(r)}),{key:"displayname",value:n}).then((e=>(t.commit("renameGroup",{gid:r,displayName:n}),{groupid:r,displayName:n}))).catch((t=>{throw t})))).catch((e=>{throw t.commit("API_FAILURE",{groupid:r,error:e}),e}))},removeGroup:(t,e)=>h().then((r=>y((0,c.KT)("cloud/groups/{groupId}",{groupId:encodeURIComponent(e)})).then((r=>t.commit("removeGroup",e))).catch((t=>{throw t})))).catch((r=>t.commit("API_FAILURE",{gid:e,error:r}))),addUserGroup(t,e){let{userid:r,gid:n}=e;return h().then((e=>m((0,c.KT)("cloud/users/{userid}/groups",{userid:r}),{groupid:n}).then((e=>t.commit("addUserGroup",{userid:r,gid:n}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:r,error:e})))},removeUserGroup(t,e){let{userid:r,gid:n}=e;return h().then((e=>y((0,c.KT)("cloud/users/{userid}/groups",{userid:r}),{groupid:n}).then((e=>t.commit("removeUserGroup",{userid:r,gid:n}))).catch((t=>{throw t})))).catch((e=>{throw t.commit("API_FAILURE",{userid:r,error:e}),e}))},addUserSubAdmin(t,e){let{userid:r,gid:n}=e;return h().then((e=>m((0,c.KT)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:n}).then((e=>t.commit("addUserSubAdmin",{userid:r,gid:n}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:r,error:e})))},removeUserSubAdmin(t,e){let{userid:r,gid:n}=e;return h().then((e=>y((0,c.KT)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:n}).then((e=>t.commit("removeUserSubAdmin",{userid:r,gid:n}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:r,error:e})))},wipeUserDevices:(t,e)=>h().then((t=>m((0,c.KT)("cloud/users/{userid}/wipe",{userid:e})).catch((t=>{throw t})))).catch((r=>t.commit("API_FAILURE",{userid:e,error:r}))),deleteUser:(t,e)=>h().then((r=>y((0,c.KT)("cloud/users/{userid}",{userid:e})).then((r=>t.commit("deleteUser",e))).catch((t=>{throw t})))).catch((r=>t.commit("API_FAILURE",{userid:e,error:r}))),addUser(t,e){let{commit:r,dispatch:n}=t,{userid:o,password:i,displayName:s,email:a,groups:u,subadmin:p,quota:d,language:l,manager:f}=e;return h().then((t=>m((0,c.KT)("cloud/users"),{userid:o,password:i,displayName:s,email:a,groups:u,subadmin:p,quota:d,language:l,manager:f}).then((t=>n("addUserData",o||t.data.ocs.data.id))).catch((t=>{throw t})))).catch((t=>{throw r("API_FAILURE",{userid:o,error:t}),t}))},addUserData:(t,e)=>h().then((r=>f((0,c.KT)("cloud/users/{userid}",{userid:e})).then((e=>t.commit("addUserData",e))).catch((t=>{throw t})))).catch((r=>t.commit("API_FAILURE",{userid:e,error:r}))),enableDisableUser(t,e){let{userid:r,enabled:n=!0}=e;const o=n?"enable":"disable";return h().then((e=>g((0,c.KT)("cloud/users/{userid}/{userStatus}",{userid:r,userStatus:o})).then((e=>t.commit("enableDisableUser",{userid:r,enabled:n}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:r,error:e})))},setUserData(t,e){let{userid:r,key:n,value:o}=e;const i=["email","displayname","manager"];return-1!==["email","language","quota","displayname","password","manager"].indexOf(n)&&"string"==typeof o&&(-1===i.indexOf(n)&&o.length>0||-1!==i.indexOf(n))?h().then((e=>g((0,c.KT)("cloud/users/{userid}",{userid:r}),{key:n,value:o}).then((e=>t.commit("setUserData",{userid:r,key:n,value:o}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:r,error:e}))):Promise.reject(new Error("Invalid request data"))},sendWelcomeMail:(t,e)=>h().then((t=>m((0,c.KT)("cloud/users/{userid}/welcome",{userid:e})).then((t=>!0)).catch((t=>{throw t})))).catch((r=>t.commit("API_FAILURE",{userid:e,error:r})))}};var C=n(85168),R=n(38613),N=n(96763);const U={APPS_API_FAILURE(e,r){(0,C.Qg)(t("settings","An error occurred during the request. Unable to proceed.")+"<br>"+r.error.response.data.data.message,{isHTML:!0}),N.error(e,r)},initCategories(t,e){let{categories:r,updateCount:n}=e;t.categories=r,t.updateCount=n},updateCategories(t,e){t.gettingCategoriesPromise=e},setUpdateCount(t,e){t.updateCount=e},addCategory(t,e){t.categories.push(e)},appendCategories(t,e){t.categories=e},setAllApps(t,e){t.apps=e},setError(t,e){let{appId:r,error:n}=e;Array.isArray(r)||(r=[r]),r.forEach((e=>{t.apps.find((t=>t.id===e)).error=n}))},clearError(t,e){let{appId:r,error:n}=e;t.apps.find((t=>t.id===r)).error=null},enableApp(t,e){let{appId:r,groups:n}=e;const o=t.apps.find((t=>t.id===r));o.active=!0,o.groups=n},setInstallState(t,e){let{appId:r,canInstall:n}=e;const o=t.apps.find((t=>t.id===r));o&&(o.canInstall=!0===n)},disableApp(t,e){const r=t.apps.find((t=>t.id===e));r.active=!1,r.groups=[],r.removable&&(r.canUnInstall=!0)},uninstallApp(t,e){t.apps.find((t=>t.id===e)).active=!1,t.apps.find((t=>t.id===e)).groups=[],t.apps.find((t=>t.id===e)).needsDownload=!0,t.apps.find((t=>t.id===e)).installed=!1,t.apps.find((t=>t.id===e)).canUnInstall=!1,t.apps.find((t=>t.id===e)).canInstall=!0},updateApp(t,e){const r=t.apps.find((t=>t.id===e)),n=r.update;r.update=null,r.version=n,t.updateCount--},resetApps(t){t.apps=[]},reset(t){t.apps=[],t.categories=[],t.updateCount=0},startLoading(t,e){Array.isArray(e)?e.forEach((e=>{o.Ay.set(t.loading,e,!0)})):o.Ay.set(t.loading,e,!0)},stopLoading(t,e){Array.isArray(e)?e.forEach((e=>{o.Ay.set(t.loading,e,!1)})):o.Ay.set(t.loading,e,!1)}},O={enableApp(e,r){let n,{appId:o,groups:i}=r;return n=Array.isArray(o)?o:[o],h().then((r=>(e.commit("startLoading",n),e.commit("startLoading","install"),m((0,c.Jv)("settings/apps/enable"),{appIds:n,groups:i}).then((r=>(e.commit("stopLoading",n),e.commit("stopLoading","install"),n.forEach((t=>{e.commit("enableApp",{appId:t,groups:i})})),f((0,c.Jv)("apps/files")).then((()=>{r.data.update_required&&((0,C.cf)(t("settings","The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds."),{onClick:()=>window.location.reload(),close:!1}),setTimeout((function(){location.reload()}),5e3))})).catch((()=>{Array.isArray(o)||((0,C.Qg)(t("settings","Error: This app cannot be enabled because it makes the server unstable")),e.commit("setError",{appId:n,error:t("settings","Error: This app cannot be enabled because it makes the server unstable")}),e.dispatch("disableApp",{appId:o}))}))))).catch((t=>{e.commit("stopLoading",n),e.commit("stopLoading","install"),e.commit("setError",{appId:n,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:o,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:o,error:t})))},forceEnableApp(t,e){let r,{appId:n,groups:o}=e;return r=Array.isArray(n)?n:[n],h().then((()=>(t.commit("startLoading",r),t.commit("startLoading","install"),m((0,c.Jv)("settings/apps/force"),{appId:n}).then((e=>{t.commit("setInstallState",{appId:n,canInstall:!0})})).catch((e=>{t.commit("stopLoading",r),t.commit("stopLoading","install"),t.commit("setError",{appId:r,error:e.response.data.data.message}),t.commit("APPS_API_FAILURE",{appId:n,error:e})})).finally((()=>{t.commit("stopLoading",r),t.commit("stopLoading","install")}))))).catch((e=>t.commit("API_FAILURE",{appId:n,error:e})))},disableApp(t,e){let r,{appId:n}=e;return r=Array.isArray(n)?n:[n],h().then((e=>(t.commit("startLoading",r),m((0,c.Jv)("settings/apps/disable"),{appIds:r}).then((e=>(t.commit("stopLoading",r),r.forEach((e=>{t.commit("disableApp",e)})),!0))).catch((e=>{t.commit("stopLoading",r),t.commit("APPS_API_FAILURE",{appId:n,error:e})}))))).catch((e=>t.commit("API_FAILURE",{appId:n,error:e})))},uninstallApp(t,e){let{appId:r}=e;return h().then((e=>(t.commit("startLoading",r),f((0,c.Jv)("settings/apps/uninstall/".concat(r))).then((e=>(t.commit("stopLoading",r),t.commit("uninstallApp",r),!0))).catch((e=>{t.commit("stopLoading",r),t.commit("APPS_API_FAILURE",{appId:r,error:e})}))))).catch((e=>t.commit("API_FAILURE",{appId:r,error:e})))},updateApp(t,e){let{appId:r}=e;return h().then((e=>(t.commit("startLoading",r),t.commit("startLoading","install"),f((0,c.Jv)("settings/apps/update/".concat(r))).then((e=>(t.commit("stopLoading","install"),t.commit("stopLoading",r),t.commit("updateApp",r),!0))).catch((e=>{t.commit("stopLoading",r),t.commit("stopLoading","install"),t.commit("APPS_API_FAILURE",{appId:r,error:e})}))))).catch((e=>t.commit("API_FAILURE",{appId:r,error:e})))},getAllApps:t=>(t.commit("startLoading","list"),f((0,c.Jv)("settings/apps/list")).then((e=>(t.commit("setAllApps",e.data.apps),t.commit("stopLoading","list"),!0))).catch((e=>t.commit("API_FAILURE",e)))),async getCategories(t){let{shouldRefetchCategories:e=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(e||!t.state.gettingCategoriesPromise){t.commit("startLoading","categories");try{const e=f((0,c.Jv)("settings/apps/categories"));t.commit("updateCategories",e);const r=await e;return r.data.length>0?(t.commit("appendCategories",r.data),t.commit("stopLoading","categories"),!0):(t.commit("stopLoading","categories"),!1)}catch(e){t.commit("API_FAILURE",e)}}return t.state.gettingCategoriesPromise}},k={state:{apps:[],bundles:(0,R.C)("settings","appstoreBundles",[]),categories:[],updateCount:(0,R.C)("settings","appstoreUpdateCount",0),loading:{},gettingCategoriesPromise:null},mutations:U,getters:{loading:t=>function(e){return t.loading[e]},getCategories:t=>t.categories,getAllApps:t=>t.apps,getAppBundles:t=>t.bundles,getUpdateCount:t=>t.updateCount,getCategoryById:t=>e=>t.categories.find((t=>t.id===e))},actions:O},T={setServerData(t,e){t.serverData=e}},S={state:{serverData:(0,R.C)("settings","usersSettings",{})},mutations:T,getters:{getServerData:t=>t.serverData},actions:{}},j={state:{},mutations:{},getters:{},actions:{setAppConfig(t,e){let{app:r,key:n,value:o}=e;return h().then((t=>m((0,c.KT)("apps/provisioning_api/api/v1/config/apps/{app}/{key}",{app:r,key:n}),{value:o}).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{app:r,key:n,value:o,error:e})))}}};var F=n(96763);o.Ay.use(i.Ay);const $={API_FAILURE(e,r){try{const e=r.error.response.data.ocs.meta.message;(0,C.Qg)(t("settings","An error occurred during the request. Unable to proceed.")+"<br>"+e,{isHTML:!0})}catch(e){(0,C.Qg)(t("settings","An error occurred during the request. Unable to proceed."))}F.error(e,r)}};let D=null;const B=()=>(null===D&&(D=new i.il({modules:{users:L,apps:k,settings:S,oc:j},strict:!1,mutations:$})),D)},36620:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=(0,r(53529).YK)().setApp("settings").detectUser().build()},74329:(t,e,r)=>{"use strict";var n=r(85471),o=r(80284),i=r(58723),s=r(53334),a=r(22378);const u=(0,n.pM)({__name:"SettingsApp",setup:t=>({__sfc:!0,NcContent:a.A})}),c=(0,r(14486).A)(u,(function(){var t=this,e=t._self._c;return e(t._self._setupProxy.NcContent,{attrs:{"app-name":"settings"}},[e("router-view",{attrs:{name:"navigation"}}),t._v(" "),e("router-view"),t._v(" "),e("router-view",{attrs:{name:"sidebar"}})],1)}),[],!1,null,null,null).exports;var p=r(40173),d=r(99498);const l=[{name:"users",path:"/:index(index.php/)?settings/users",components:{default:()=>Promise.all([r.e(4208),r.e(1439),r.e(3239)]).then(r.bind(r,374)),navigation:()=>Promise.all([r.e(4208),r.e(1439),r.e(3239)]).then(r.bind(r,19414))},props:!0,children:[{path:":selectedGroup",name:"group"}]},{path:"/:index(index.php/)?settings/apps",name:"apps",redirect:{name:"apps-category",params:{category:"discover"}},components:{default:()=>Promise.all([r.e(4208),r.e(1439),r.e(4529)]).then(r.bind(r,5046)),navigation:()=>Promise.all([r.e(4208),r.e(1439),r.e(4529)]).then(r.bind(r,12336)),sidebar:()=>Promise.all([r.e(4208),r.e(1439),r.e(4529)]).then(r.bind(r,83625))},children:[{path:":category",name:"apps-category",children:[{path:":id",name:"apps-details"}]}]}];n.Ay.use(p.Ay);const h=new p.Ay({mode:"history",base:(0,d.Jv)(""),linkActiveClass:"active",routes:l});var f,m=r(31755),g=r(92457),y=r(65899);n.Ay.use(o.Ay,{defaultHtml:!1});const v=(0,m.P)();(0,i.O)(v,h),r.nc=btoa(null!==(f=(0,g.do)())&&void 0!==f?f:""),n.Ay.prototype.t=s.Tl,n.Ay.prototype.n=s.zw,n.Ay.use(y.R2);const b=(0,y.Ey)();new n.Ay({router:h,store:v,pinia:b,render:t=>t(c),el:"#content"})},40173:(t,e,r)=>{"use strict";r.d(e,{Ay:()=>Gt,Wk:()=>K});var n=r(96763);function o(t,e){for(var r in e)t[r]=e[r];return t}var i=/[!'()*]/g,s=function(t){return"%"+t.charCodeAt(0).toString(16)},a=/%2C/g,u=function(t){return encodeURIComponent(t).replace(i,s).replace(a,",")};function c(t){try{return decodeURIComponent(t)}catch(t){}return t}var p=function(t){return null==t||"object"==typeof t?t:String(t)};function d(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach((function(t){var r=t.replace(/\+/g," ").split("="),n=c(r.shift()),o=r.length>0?c(r.join("=")):null;void 0===e[n]?e[n]=o:Array.isArray(e[n])?e[n].push(o):e[n]=[e[n],o]})),e):e}function l(t){var e=t?Object.keys(t).map((function(e){var r=t[e];if(void 0===r)return"";if(null===r)return u(e);if(Array.isArray(r)){var n=[];return r.forEach((function(t){void 0!==t&&(null===t?n.push(u(e)):n.push(u(e)+"="+u(t)))})),n.join("&")}return u(e)+"="+u(r)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var h=/\/?$/;function f(t,e,r,n){var o=n&&n.options.stringifyQuery,i=e.query||{};try{i=m(i)}catch(t){}var s={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:v(e,o),matched:t?y(t):[]};return r&&(s.redirectedFrom=v(r,o)),Object.freeze(s)}function m(t){if(Array.isArray(t))return t.map(m);if(t&&"object"==typeof t){var e={};for(var r in t)e[r]=m(t[r]);return e}return t}var g=f(null,{path:"/"});function y(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function v(t,e){var r=t.path,n=t.query;void 0===n&&(n={});var o=t.hash;return void 0===o&&(o=""),(r||"/")+(e||l)(n)+o}function b(t,e,r){return e===g?t===e:!!e&&(t.path&&e.path?t.path.replace(h,"")===e.path.replace(h,"")&&(r||t.hash===e.hash&&w(t.query,e.query)):!(!t.name||!e.name)&&t.name===e.name&&(r||t.hash===e.hash&&w(t.query,e.query)&&w(t.params,e.params)))}function w(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var r=Object.keys(t).sort(),n=Object.keys(e).sort();return r.length===n.length&&r.every((function(r,o){var i=t[r];if(n[o]!==r)return!1;var s=e[r];return null==i||null==s?i===s:"object"==typeof i&&"object"==typeof s?w(i,s):String(i)===String(s)}))}function A(t){for(var e=0;e<t.matched.length;e++){var r=t.matched[e];for(var n in r.instances){var o=r.instances[n],i=r.enteredCbs[n];if(o&&i){delete r.enteredCbs[n];for(var s=0;s<i.length;s++)o._isBeingDestroyed||i[s](o)}}}}var E={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(t,e){var r=e.props,n=e.children,i=e.parent,s=e.data;s.routerView=!0;for(var a=i.$createElement,u=r.name,c=i.$route,p=i._routerViewCache||(i._routerViewCache={}),d=0,l=!1;i&&i._routerRoot!==i;){var h=i.$vnode?i.$vnode.data:{};h.routerView&&d++,h.keepAlive&&i._directInactive&&i._inactive&&(l=!0),i=i.$parent}if(s.routerViewDepth=d,l){var f=p[u],m=f&&f.component;return m?(f.configProps&&x(m,s,f.route,f.configProps),a(m,s,n)):a()}var g=c.matched[d],y=g&&g.components[u];if(!g||!y)return p[u]=null,a();p[u]={component:y},s.registerRouteInstance=function(t,e){var r=g.instances[u];(e&&r!==t||!e&&r===t)&&(g.instances[u]=e)},(s.hook||(s.hook={})).prepatch=function(t,e){g.instances[u]=e.componentInstance},s.hook.init=function(t){t.data.keepAlive&&t.componentInstance&&t.componentInstance!==g.instances[u]&&(g.instances[u]=t.componentInstance),A(c)};var v=g.props&&g.props[u];return v&&(o(p[u],{route:c,configProps:v}),x(y,s,c,v)),a(y,s,n)}};function x(t,e,r,n){var i=e.props=function(t,e){switch(typeof e){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0}}(r,n);if(i){i=e.props=o({},i);var s=e.attrs=e.attrs||{};for(var a in i)t.props&&a in t.props||(s[a]=i[a],delete i[a])}}function _(t,e,r){var n=t.charAt(0);if("/"===n)return t;if("?"===n||"#"===n)return e+t;var o=e.split("/");r&&o[o.length-1]||o.pop();for(var i=t.replace(/^\//,"").split("/"),s=0;s<i.length;s++){var a=i[s];".."===a?o.pop():"."!==a&&o.push(a)}return""!==o[0]&&o.unshift(""),o.join("/")}function P(t){return t.replace(/\/(?:\s*\/)+/g,"/")}var I=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)},L=function t(e,r,n){return I(r)||(n=r||n,r=[]),n=n||{},e instanceof RegExp?function(t,e){var r=t.source.match(/\((?!\?)/g);if(r)for(var n=0;n<r.length;n++)e.push({name:n,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return F(t,e)}(e,r):I(e)?function(e,r,n){for(var o=[],i=0;i<e.length;i++)o.push(t(e[i],r,n).source);return F(new RegExp("(?:"+o.join("|")+")",$(n)),r)}(e,r,n):function(t,e,r){return D(O(t,r),e,r)}(e,r,n)},C=O,R=T,N=D,U=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function O(t,e){for(var r,n=[],o=0,i=0,s="",a=e&&e.delimiter||"/";null!=(r=U.exec(t));){var u=r[0],c=r[1],p=r.index;if(s+=t.slice(i,p),i=p+u.length,c)s+=c[1];else{var d=t[i],l=r[2],h=r[3],f=r[4],m=r[5],g=r[6],y=r[7];s&&(n.push(s),s="");var v=null!=l&&null!=d&&d!==l,b="+"===g||"*"===g,w="?"===g||"*"===g,A=r[2]||a,E=f||m;n.push({name:h||o++,prefix:l||"",delimiter:A,optional:w,repeat:b,partial:v,asterisk:!!y,pattern:E?j(E):y?".*":"[^"+S(A)+"]+?"})}}return i<t.length&&(s+=t.substr(i)),s&&n.push(s),n}function k(t){return encodeURI(t).replace(/[\/?#]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()}))}function T(t,e){for(var r=new Array(t.length),n=0;n<t.length;n++)"object"==typeof t[n]&&(r[n]=new RegExp("^(?:"+t[n].pattern+")$",$(e)));return function(e,n){for(var o="",i=e||{},s=(n||{}).pretty?k:encodeURIComponent,a=0;a<t.length;a++){var u=t[a];if("string"!=typeof u){var c,p=i[u.name];if(null==p){if(u.optional){u.partial&&(o+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(I(p)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var d=0;d<p.length;d++){if(c=s(p[d]),!r[a].test(c))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(c)+"`");o+=(0===d?u.prefix:u.delimiter)+c}}else{if(c=u.asterisk?encodeURI(p).replace(/[?#]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()})):s(p),!r[a].test(c))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+c+'"');o+=u.prefix+c}}else o+=u}return o}}function S(t){return t.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function j(t){return t.replace(/([=!:$\/()])/g,"\\$1")}function F(t,e){return t.keys=e,t}function $(t){return t&&t.sensitive?"":"i"}function D(t,e,r){I(e)||(r=e||r,e=[]);for(var n=(r=r||{}).strict,o=!1!==r.end,i="",s=0;s<t.length;s++){var a=t[s];if("string"==typeof a)i+=S(a);else{var u=S(a.prefix),c="(?:"+a.pattern+")";e.push(a),a.repeat&&(c+="(?:"+u+c+")*"),i+=c=a.optional?a.partial?u+"("+c+")?":"(?:"+u+"("+c+"))?":u+"("+c+")"}}var p=S(r.delimiter||"/"),d=i.slice(-p.length)===p;return n||(i=(d?i.slice(0,-p.length):i)+"(?:"+p+"(?=$))?"),i+=o?"$":n&&d?"":"(?="+p+"|$)",F(new RegExp("^"+i,$(r)),e)}L.parse=C,L.compile=function(t,e){return T(O(t,e),e)},L.tokensToFunction=R,L.tokensToRegExp=N;var B=Object.create(null);function q(t,e,r){e=e||{};try{var n=B[t]||(B[t]=L.compile(t));return"string"==typeof e.pathMatch&&(e[0]=e.pathMatch),n(e,{pretty:!0})}catch(t){return""}finally{delete e[0]}}function M(t,e,r,n){var i="string"==typeof t?{path:t}:t;if(i._normalized)return i;if(i.name){var s=(i=o({},t)).params;return s&&"object"==typeof s&&(i.params=o({},s)),i}if(!i.path&&i.params&&e){(i=o({},i))._normalized=!0;var a=o(o({},e.params),i.params);if(e.name)i.name=e.name,i.params=a;else if(e.matched.length){var u=e.matched[e.matched.length-1].path;i.path=q(u,a,e.path)}return i}var c=function(t){var e="",r="",n=t.indexOf("#");n>=0&&(e=t.slice(n),t=t.slice(0,n));var o=t.indexOf("?");return o>=0&&(r=t.slice(o+1),t=t.slice(0,o)),{path:t,query:r,hash:e}}(i.path||""),l=e&&e.path||"/",h=c.path?_(c.path,l,r||i.append):l,f=function(t,e,r){void 0===e&&(e={});var n,o=r||d;try{n=o(t||"")}catch(t){n={}}for(var i in e){var s=e[i];n[i]=Array.isArray(s)?s.map(p):p(s)}return n}(c.query,i.query,n&&n.options.parseQuery),m=i.hash||c.hash;return m&&"#"!==m.charAt(0)&&(m="#"+m),{_normalized:!0,path:h,query:f,hash:m}}var V,G=function(){},K={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,r=this.$router,n=this.$route,i=r.resolve(this.to,n,this.append),s=i.location,a=i.route,u=i.href,c={},p=r.options.linkActiveClass,d=r.options.linkExactActiveClass,l=null==p?"router-link-active":p,m=null==d?"router-link-exact-active":d,g=null==this.activeClass?l:this.activeClass,y=null==this.exactActiveClass?m:this.exactActiveClass,v=a.redirectedFrom?f(null,M(a.redirectedFrom),null,r):a;c[y]=b(n,v,this.exactPath),c[g]=this.exact||this.exactPath?c[y]:function(t,e){return 0===t.path.replace(h,"/").indexOf(e.path.replace(h,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var r in e)if(!(r in t))return!1;return!0}(t.query,e.query)}(n,v);var w=c[y]?this.ariaCurrentValue:null,A=function(t){H(t)&&(e.replace?r.replace(s,G):r.push(s,G))},E={click:H};Array.isArray(this.event)?this.event.forEach((function(t){E[t]=A})):E[this.event]=A;var x={class:c},_=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:u,route:a,navigate:A,isActive:c[g],isExactActive:c[y]});if(_){if(1===_.length)return _[0];if(_.length>1||!_.length)return 0===_.length?t():t("span",{},_)}if("a"===this.tag)x.on=E,x.attrs={href:u,"aria-current":w};else{var P=z(this.$slots.default);if(P){P.isStatic=!1;var I=P.data=o({},P.data);for(var L in I.on=I.on||{},I.on){var C=I.on[L];L in E&&(I.on[L]=Array.isArray(C)?C:[C])}for(var R in E)R in I.on?I.on[R].push(E[R]):I.on[R]=A;var N=P.data.attrs=o({},P.data.attrs);N.href=u,N["aria-current"]=w}else x.on=E}return t(this.tag,x,this.$slots.default)}};function H(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey||t.defaultPrevented||void 0!==t.button&&0!==t.button)){if(t.currentTarget&&t.currentTarget.getAttribute){var e=t.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(e))return}return t.preventDefault&&t.preventDefault(),!0}}function z(t){if(t)for(var e,r=0;r<t.length;r++){if("a"===(e=t[r]).tag)return e;if(e.children&&(e=z(e.children)))return e}}var J="undefined"!=typeof window;function W(t,e,r,n,o){var i=e||[],s=r||Object.create(null),a=n||Object.create(null);t.forEach((function(t){Q(i,s,a,t,o)}));for(var u=0,c=i.length;u<c;u++)"*"===i[u]&&(i.push(i.splice(u,1)[0]),c--,u--);return{pathList:i,pathMap:s,nameMap:a}}function Q(t,e,r,n,o,i){var s=n.path,a=n.name,u=n.pathToRegexpOptions||{},c=function(t,e,r){return r||(t=t.replace(/\/$/,"")),"/"===t[0]||null==e?t:P(e.path+"/"+t)}(s,o,u.strict);"boolean"==typeof n.caseSensitive&&(u.sensitive=n.caseSensitive);var p={path:c,regex:Y(c,u),components:n.components||{default:n.component},alias:n.alias?"string"==typeof n.alias?[n.alias]:n.alias:[],instances:{},enteredCbs:{},name:a,parent:o,matchAs:i,redirect:n.redirect,beforeEnter:n.beforeEnter,meta:n.meta||{},props:null==n.props?{}:n.components?n.props:{default:n.props}};if(n.children&&n.children.forEach((function(n){var o=i?P(i+"/"+n.path):void 0;Q(t,e,r,n,p,o)})),e[p.path]||(t.push(p.path),e[p.path]=p),void 0!==n.alias)for(var d=Array.isArray(n.alias)?n.alias:[n.alias],l=0;l<d.length;++l){var h={path:d[l],children:n.children};Q(t,e,r,h,o,p.path||"/")}a&&(r[a]||(r[a]=p))}function Y(t,e){return L(t,[],e)}function X(t,e){var r=W(t),n=r.pathList,o=r.pathMap,i=r.nameMap;function s(t,r,s){var u=M(t,r,!1,e),c=u.name;if(c){var p=i[c];if(!p)return a(null,u);var d=p.regex.keys.filter((function(t){return!t.optional})).map((function(t){return t.name}));if("object"!=typeof u.params&&(u.params={}),r&&"object"==typeof r.params)for(var l in r.params)!(l in u.params)&&d.indexOf(l)>-1&&(u.params[l]=r.params[l]);return u.path=q(p.path,u.params),a(p,u,s)}if(u.path){u.params={};for(var h=0;h<n.length;h++){var f=n[h],m=o[f];if(Z(m.regex,u.path,u.params))return a(m,u,s)}}return a(null,u)}function a(t,r,n){return t&&t.redirect?function(t,r){var n=t.redirect,o="function"==typeof n?n(f(t,r,null,e)):n;if("string"==typeof o&&(o={path:o}),!o||"object"!=typeof o)return a(null,r);var u=o,c=u.name,p=u.path,d=r.query,l=r.hash,h=r.params;if(d=u.hasOwnProperty("query")?u.query:d,l=u.hasOwnProperty("hash")?u.hash:l,h=u.hasOwnProperty("params")?u.params:h,c)return i[c],s({_normalized:!0,name:c,query:d,hash:l,params:h},void 0,r);if(p){var m=function(t,e){return _(t,e.parent?e.parent.path:"/",!0)}(p,t);return s({_normalized:!0,path:q(m,h),query:d,hash:l},void 0,r)}return a(null,r)}(t,n||r):t&&t.matchAs?function(t,e,r){var n=s({_normalized:!0,path:q(r,e.params)});if(n){var o=n.matched,i=o[o.length-1];return e.params=n.params,a(i,e)}return a(null,e)}(0,r,t.matchAs):f(t,r,n,e)}return{match:s,addRoute:function(t,e){var r="object"!=typeof t?i[t]:void 0;W([e||t],n,o,i,r),r&&r.alias.length&&W(r.alias.map((function(t){return{path:t,children:[e]}})),n,o,i,r)},getRoutes:function(){return n.map((function(t){return o[t]}))},addRoutes:function(t){W(t,n,o,i)}}}function Z(t,e,r){var n=e.match(t);if(!n)return!1;if(!r)return!0;for(var o=1,i=n.length;o<i;++o){var s=t.keys[o-1];s&&(r[s.name||"pathMatch"]="string"==typeof n[o]?c(n[o]):n[o])}return!0}var tt=J&&window.performance&&window.performance.now?window.performance:Date;function et(){return tt.now().toFixed(3)}var rt=et();function nt(){return rt}function ot(t){return rt=t}var it=Object.create(null);function st(){"scrollRestoration"in window.history&&(window.history.scrollRestoration="manual");var t=window.location.protocol+"//"+window.location.host,e=window.location.href.replace(t,""),r=o({},window.history.state);return r.key=nt(),window.history.replaceState(r,"",e),window.addEventListener("popstate",ct),function(){window.removeEventListener("popstate",ct)}}function at(t,e,r,n){if(t.app){var o=t.options.scrollBehavior;o&&t.app.$nextTick((function(){var i=function(){var t=nt();if(t)return it[t]}(),s=o.call(t,e,r,n?i:null);s&&("function"==typeof s.then?s.then((function(t){ft(t,i)})).catch((function(t){})):ft(s,i))}))}}function ut(){var t=nt();t&&(it[t]={x:window.pageXOffset,y:window.pageYOffset})}function ct(t){ut(),t.state&&t.state.key&&ot(t.state.key)}function pt(t){return lt(t.x)||lt(t.y)}function dt(t){return{x:lt(t.x)?t.x:window.pageXOffset,y:lt(t.y)?t.y:window.pageYOffset}}function lt(t){return"number"==typeof t}var ht=/^#\d/;function ft(t,e){var r,n="object"==typeof t;if(n&&"string"==typeof t.selector){var o=ht.test(t.selector)?document.getElementById(t.selector.slice(1)):document.querySelector(t.selector);if(o){var i=t.offset&&"object"==typeof t.offset?t.offset:{};e=function(t,e){var r=document.documentElement.getBoundingClientRect(),n=t.getBoundingClientRect();return{x:n.left-r.left-e.x,y:n.top-r.top-e.y}}(o,i={x:lt((r=i).x)?r.x:0,y:lt(r.y)?r.y:0})}else pt(t)&&(e=dt(t))}else n&&pt(t)&&(e=dt(t));e&&("scrollBehavior"in document.documentElement.style?window.scrollTo({left:e.x,top:e.y,behavior:t.behavior}):window.scrollTo(e.x,e.y))}var mt,gt=J&&(-1===(mt=window.navigator.userAgent).indexOf("Android 2.")&&-1===mt.indexOf("Android 4.0")||-1===mt.indexOf("Mobile Safari")||-1!==mt.indexOf("Chrome")||-1!==mt.indexOf("Windows Phone"))&&window.history&&"function"==typeof window.history.pushState;function yt(t,e){ut();var r=window.history;try{if(e){var n=o({},r.state);n.key=nt(),r.replaceState(n,"",t)}else r.pushState({key:ot(et())},"",t)}catch(r){window.location[e?"replace":"assign"](t)}}function vt(t){yt(t,!0)}var bt={redirected:2,aborted:4,cancelled:8,duplicated:16};function wt(t,e){return At(t,e,bt.cancelled,'Navigation cancelled from "'+t.fullPath+'" to "'+e.fullPath+'" with a new navigation.')}function At(t,e,r,n){var o=new Error(n);return o._isRouter=!0,o.from=t,o.to=e,o.type=r,o}var Et=["params","query","hash"];function xt(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function _t(t,e){return xt(t)&&t._isRouter&&(null==e||t.type===e)}function Pt(t,e,r){var n=function(o){o>=t.length?r():t[o]?e(t[o],(function(){n(o+1)})):n(o+1)};n(0)}function It(t,e){return Lt(t.map((function(t){return Object.keys(t.components).map((function(r){return e(t.components[r],t.instances[r],t,r)}))})))}function Lt(t){return Array.prototype.concat.apply([],t)}var Ct="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Rt(t){var e=!1;return function(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];if(!e)return e=!0,t.apply(this,r)}}var Nt=function(t,e){this.router=t,this.base=function(t){if(!t)if(J){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";return"/"!==t.charAt(0)&&(t="/"+t),t.replace(/\/$/,"")}(e),this.current=g,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Ut(t,e,r,n){var o=It(t,(function(t,n,o,i){var s=function(t,e){return"function"!=typeof t&&(t=V.extend(t)),t.options[e]}(t,e);if(s)return Array.isArray(s)?s.map((function(t){return r(t,n,o,i)})):r(s,n,o,i)}));return Lt(n?o.reverse():o)}function Ot(t,e){if(e)return function(){return t.apply(e,arguments)}}Nt.prototype.listen=function(t){this.cb=t},Nt.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Nt.prototype.onError=function(t){this.errorCbs.push(t)},Nt.prototype.transitionTo=function(t,e,r){var n,o=this;try{n=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(n,(function(){o.updateRoute(n),e&&e(n),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(n,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(n)})))}),(function(t){r&&r(t),t&&!o.ready&&(_t(t,bt.redirected)&&i===g||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},Nt.prototype.confirmTransition=function(t,e,r){var o=this,i=this.current;this.pending=t;var s,a,u=function(t){!_t(t)&&xt(t)&&(o.errorCbs.length?o.errorCbs.forEach((function(e){e(t)})):n.error(t)),r&&r(t)},c=t.matched.length-1,p=i.matched.length-1;if(b(t,i)&&c===p&&t.matched[c]===i.matched[p])return this.ensureURL(),t.hash&&at(this.router,i,t,!1),u(((a=At(s=i,t,bt.duplicated,'Avoided redundant navigation to current location: "'+s.fullPath+'".')).name="NavigationDuplicated",a));var d,l=function(t,e){var r,n=Math.max(t.length,e.length);for(r=0;r<n&&t[r]===e[r];r++);return{updated:e.slice(0,r),activated:e.slice(r),deactivated:t.slice(r)}}(this.current.matched,t.matched),h=l.updated,f=l.deactivated,m=l.activated,g=[].concat(function(t){return Ut(t,"beforeRouteLeave",Ot,!0)}(f),this.router.beforeHooks,function(t){return Ut(t,"beforeRouteUpdate",Ot)}(h),m.map((function(t){return t.beforeEnter})),(d=m,function(t,e,r){var n=!1,o=0,i=null;It(d,(function(t,e,s,a){if("function"==typeof t&&void 0===t.cid){n=!0,o++;var u,c=Rt((function(e){var n;((n=e).__esModule||Ct&&"Module"===n[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:V.extend(e),s.components[a]=e,--o<=0&&r()})),p=Rt((function(t){var e="Failed to resolve async component "+a+": "+t;i||(i=xt(t)?t:new Error(e),r(i))}));try{u=t(c,p)}catch(t){p(t)}if(u)if("function"==typeof u.then)u.then(c,p);else{var d=u.component;d&&"function"==typeof d.then&&d.then(c,p)}}})),n||r()})),y=function(e,r){if(o.pending!==t)return u(wt(i,t));try{e(t,i,(function(e){!1===e?(o.ensureURL(!0),u(function(t,e){return At(t,e,bt.aborted,'Navigation aborted from "'+t.fullPath+'" to "'+e.fullPath+'" via a navigation guard.')}(i,t))):xt(e)?(o.ensureURL(!0),u(e)):"string"==typeof e||"object"==typeof e&&("string"==typeof e.path||"string"==typeof e.name)?(u(function(t,e){return At(t,e,bt.redirected,'Redirected when going from "'+t.fullPath+'" to "'+function(t){if("string"==typeof t)return t;if("path"in t)return t.path;var e={};return Et.forEach((function(r){r in t&&(e[r]=t[r])})),JSON.stringify(e,null,2)}(e)+'" via a navigation guard.')}(i,t)),"object"==typeof e&&e.replace?o.replace(e):o.push(e)):r(e)}))}catch(t){u(t)}};Pt(g,y,(function(){var r=function(t){return Ut(t,"beforeRouteEnter",(function(t,e,r,n){return function(t,e,r){return function(n,o,i){return t(n,o,(function(t){"function"==typeof t&&(e.enteredCbs[r]||(e.enteredCbs[r]=[]),e.enteredCbs[r].push(t)),i(t)}))}}(t,r,n)}))}(m);Pt(r.concat(o.router.resolveHooks),y,(function(){if(o.pending!==t)return u(wt(i,t));o.pending=null,e(t),o.router.app&&o.router.app.$nextTick((function(){A(t)}))}))}))},Nt.prototype.updateRoute=function(t){this.current=t,this.cb&&this.cb(t)},Nt.prototype.setupListeners=function(){},Nt.prototype.teardown=function(){this.listeners.forEach((function(t){t()})),this.listeners=[],this.current=g,this.pending=null};var kt=function(t){function e(e,r){t.call(this,e,r),this._startLocation=Tt(this.base)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router,r=e.options.scrollBehavior,n=gt&&r;n&&this.listeners.push(st());var o=function(){var r=t.current,o=Tt(t.base);t.current===g&&o===t._startLocation||t.transitionTo(o,(function(t){n&&at(e,t,r,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,(function(t){yt(P(n.base+t.fullPath)),at(n.router,t,o,!1),e&&e(t)}),r)},e.prototype.replace=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,(function(t){vt(P(n.base+t.fullPath)),at(n.router,t,o,!1),e&&e(t)}),r)},e.prototype.ensureURL=function(t){if(Tt(this.base)!==this.current.fullPath){var e=P(this.base+this.current.fullPath);t?yt(e):vt(e)}},e.prototype.getCurrentLocation=function(){return Tt(this.base)},e}(Nt);function Tt(t){var e=window.location.pathname,r=e.toLowerCase(),n=t.toLowerCase();return!t||r!==n&&0!==r.indexOf(P(n+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var St=function(t){function e(e,r,n){t.call(this,e,r),n&&function(t){var e=Tt(t);if(!/^\/#/.test(e))return window.location.replace(P(t+"/#"+e)),!0}(this.base)||jt()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,r=gt&&e;r&&this.listeners.push(st());var n=function(){var e=t.current;jt()&&t.transitionTo(Ft(),(function(n){r&&at(t.router,n,e,!0),gt||Bt(n.fullPath)}))},o=gt?"popstate":"hashchange";window.addEventListener(o,n),this.listeners.push((function(){window.removeEventListener(o,n)}))}},e.prototype.push=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,(function(t){Dt(t.fullPath),at(n.router,t,o,!1),e&&e(t)}),r)},e.prototype.replace=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,(function(t){Bt(t.fullPath),at(n.router,t,o,!1),e&&e(t)}),r)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Ft()!==e&&(t?Dt(e):Bt(e))},e.prototype.getCurrentLocation=function(){return Ft()},e}(Nt);function jt(){var t=Ft();return"/"===t.charAt(0)||(Bt("/"+t),!1)}function Ft(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function $t(t){var e=window.location.href,r=e.indexOf("#");return(r>=0?e.slice(0,r):e)+"#"+t}function Dt(t){gt?yt($t(t)):window.location.hash=t}function Bt(t){gt?vt($t(t)):window.location.replace($t(t))}var qt=function(t){function e(e,r){t.call(this,e,r),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,r){var n=this;this.transitionTo(t,(function(t){n.stack=n.stack.slice(0,n.index+1).concat(t),n.index++,e&&e(t)}),r)},e.prototype.replace=function(t,e,r){var n=this;this.transitionTo(t,(function(t){n.stack=n.stack.slice(0,n.index).concat(t),e&&e(t)}),r)},e.prototype.go=function(t){var e=this,r=this.index+t;if(!(r<0||r>=this.stack.length)){var n=this.stack[r];this.confirmTransition(n,(function(){var t=e.current;e.index=r,e.updateRoute(n),e.router.afterHooks.forEach((function(e){e&&e(n,t)}))}),(function(t){_t(t,bt.duplicated)&&(e.index=r)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Nt),Mt=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=X(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!gt&&!1!==t.fallback,this.fallback&&(e="hash"),J||(e="abstract"),this.mode=e,e){case"history":this.history=new kt(this,t.base);break;case"hash":this.history=new St(this,t.base,this.fallback);break;case"abstract":this.history=new qt(this,t.base)}},Vt={currentRoute:{configurable:!0}};Mt.prototype.match=function(t,e,r){return this.matcher.match(t,e,r)},Vt.currentRoute.get=function(){return this.history&&this.history.current},Mt.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var r=e.apps.indexOf(t);r>-1&&e.apps.splice(r,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var r=this.history;if(r instanceof kt||r instanceof St){var n=function(t){r.setupListeners(),function(t){var n=r.current,o=e.options.scrollBehavior;gt&&o&&"fullPath"in t&&at(e,t,n,!1)}(t)};r.transitionTo(r.getCurrentLocation(),n,n)}r.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Mt.prototype.beforeEach=function(t){return Kt(this.beforeHooks,t)},Mt.prototype.beforeResolve=function(t){return Kt(this.resolveHooks,t)},Mt.prototype.afterEach=function(t){return Kt(this.afterHooks,t)},Mt.prototype.onReady=function(t,e){this.history.onReady(t,e)},Mt.prototype.onError=function(t){this.history.onError(t)},Mt.prototype.push=function(t,e,r){var n=this;if(!e&&!r&&"undefined"!=typeof Promise)return new Promise((function(e,r){n.history.push(t,e,r)}));this.history.push(t,e,r)},Mt.prototype.replace=function(t,e,r){var n=this;if(!e&&!r&&"undefined"!=typeof Promise)return new Promise((function(e,r){n.history.replace(t,e,r)}));this.history.replace(t,e,r)},Mt.prototype.go=function(t){this.history.go(t)},Mt.prototype.back=function(){this.go(-1)},Mt.prototype.forward=function(){this.go(1)},Mt.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Mt.prototype.resolve=function(t,e,r){var n=M(t,e=e||this.history.current,r,this),o=this.match(n,e),i=o.redirectedFrom||o.fullPath,s=function(t,e,r){var n="hash"===r?"#"+e:e;return t?P(t+"/"+n):n}(this.history.base,i,this.mode);return{location:n,route:o,href:s,normalizedTo:n,resolved:o}},Mt.prototype.getRoutes=function(){return this.matcher.getRoutes()},Mt.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==g&&this.history.transitionTo(this.history.getCurrentLocation())},Mt.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==g&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Mt.prototype,Vt);var Gt=Mt;function Kt(t,e){return t.push(e),function(){var r=t.indexOf(e);r>-1&&t.splice(r,1)}}Mt.install=function t(e){if(!t.installed||V!==e){t.installed=!0,V=e;var r=function(t){return void 0!==t},n=function(t,e){var n=t.$options._parentVnode;r(n)&&r(n=n.data)&&r(n=n.registerRouteInstance)&&n(t,e)};e.mixin({beforeCreate:function(){r(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,n(this,this)},destroyed:function(){n(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",E),e.component("RouterLink",K);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Mt.version="3.6.5",Mt.isNavigationFailure=_t,Mt.NavigationFailureType=bt,Mt.START_LOCATION=g,J&&window.Vue&&window.Vue.use(Mt)},58723:(t,e)=>{function r(t,e){var n={name:t.name,path:t.path,hash:t.hash,query:t.query,params:t.params,fullPath:t.fullPath,meta:t.meta};return e&&(n.from=r(e)),Object.freeze(n)}e.O=function(t,e,n){var o=(n||{}).moduleName||"route";t.registerModule(o,{namespaced:!0,state:r(e.currentRoute),mutations:{ROUTE_CHANGED:function(e,n){t.state[o]=r(n.to,n.from)}}});var i,s=!1,a=t.watch((function(t){return t[o]}),(function(t){var r=t.fullPath;r!==i&&(null!=i&&(s=!0,e.push(t)),i=r)}),{sync:!0}),u=e.afterEach((function(e,r){s?s=!1:(i=e.fullPath,t.commit(o+"/ROUTE_CHANGED",{to:e,from:r}))}));return function(){null!=u&&u(),null!=a&&a(),t.unregisterModule(o)}}},35810:(t,e,r)=>{"use strict";r.d(e,{Al:()=>k,H4:()=>U,PY:()=>N,Q$:()=>O,R3:()=>A,VL:()=>w,lJ:()=>R,lT:()=>f,pt:()=>E,v7:()=>h});var n,o=r(92457),i=r(53529),s=r(53334),a=r(43627),u=r(71089),c=r(99498),p=r(44719);null===(n=(0,o.HW)())?(0,i.YK)().setApp("files").build():(0,i.YK)().setApp("files").setUid(n.uid).build();const d=["B","KB","MB","GB","TB","PB"],l=["B","KiB","MiB","GiB","TiB","PiB"];function h(t,e=!1,r=!1,n=!1){r=r&&!n,"string"==typeof t&&(t=Number(t));let o=t>0?Math.floor(Math.log(t)/Math.log(n?1e3:1024)):0;o=Math.min((r?l.length:d.length)-1,o);const i=r?l[o]:d[o];let a=(t/Math.pow(n?1e3:1024,o)).toFixed(1);return!0===e&&0===o?("0.0"!==a?"< 1 ":"0 ")+(r?l[1]:d[1]):(a=o<2?parseFloat(a).toFixed(0):parseFloat(a).toLocaleString((0,s.lO)()),a+" "+i)}function f(t,e=!1){try{t=`${t}`.toLocaleLowerCase().replaceAll(/\s+/g,"").replaceAll(",",".")}catch{return null}const r=t.match(/^([0-9]*(\.[0-9]*)?)([kmgtp]?)(i?)b?$/);if(null===r||"."===r[1]||""===r[1])return null;const n=`${r[1]}`,o="i"===r[4]||e?1024:1e3;return Math.round(Number.parseFloat(n)*o**{"":0,k:1,m:2,g:3,t:4,p:5,e:6}[r[3]])}var m=(t=>(t[t.NONE=0]="NONE",t[t.CREATE=4]="CREATE",t[t.READ=1]="READ",t[t.UPDATE=2]="UPDATE",t[t.DELETE=8]="DELETE",t[t.SHARE=16]="SHARE",t[t.ALL=31]="ALL",t))(m||{});const g=["d:getcontentlength","d:getcontenttype","d:getetag","d:getlastmodified","d:quota-available-bytes","d:resourcetype","nc:has-preview","nc:is-encrypted","nc:mount-type","nc:share-attributes","oc:comments-unread","oc:favorite","oc:fileid","oc:owner-display-name","oc:owner-id","oc:permissions","oc:share-types","oc:size","ocs:share-permissions"],y={d:"DAV:",nc:"http://nextcloud.org/ns",oc:"http://owncloud.org/ns",ocs:"http://open-collaboration-services.org/ns"},v=function(){return typeof window._nc_dav_properties>"u"&&(window._nc_dav_properties=[...g]),window._nc_dav_properties.map((t=>`<${t} />`)).join(" ")},b=function(){return typeof window._nc_dav_namespaces>"u"&&(window._nc_dav_namespaces={...y}),Object.keys(window._nc_dav_namespaces).map((t=>`xmlns:${t}="${window._nc_dav_namespaces?.[t]}"`)).join(" ")},w=function(){return`<?xml version="1.0"?>\n\t\t<d:propfind ${b()}>\n\t\t\t<d:prop>\n\t\t\t\t${v()}\n\t\t\t</d:prop>\n\t\t</d:propfind>`},A=function(t){return`<?xml version="1.0" encoding="UTF-8"?>\n<d:searchrequest ${b()}\n\txmlns:ns="https://github.com/icewind1991/SearchDAV/ns">\n\t<d:basicsearch>\n\t\t<d:select>\n\t\t\t<d:prop>\n\t\t\t\t${v()}\n\t\t\t</d:prop>\n\t\t</d:select>\n\t\t<d:from>\n\t\t\t<d:scope>\n\t\t\t\t<d:href>/files/${(0,o.HW)()?.uid}/</d:href>\n\t\t\t\t<d:depth>infinity</d:depth>\n\t\t\t</d:scope>\n\t\t</d:from>\n\t\t<d:where>\n\t\t\t<d:and>\n\t\t\t\t<d:or>\n\t\t\t\t\t<d:not>\n\t\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t\t<d:getcontenttype/>\n\t\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t\t<d:literal>httpd/unix-directory</d:literal>\n\t\t\t\t\t\t</d:eq>\n\t\t\t\t\t</d:not>\n\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t<oc:size/>\n\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t<d:literal>0</d:literal>\n\t\t\t\t\t</d:eq>\n\t\t\t\t</d:or>\n\t\t\t\t<d:gt>\n\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t\t</d:prop>\n\t\t\t\t\t<d:literal>${t}</d:literal>\n\t\t\t\t</d:gt>\n\t\t\t</d:and>\n\t\t</d:where>\n\t\t<d:orderby>\n\t\t\t<d:order>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t</d:prop>\n\t\t\t\t<d:descending/>\n\t\t\t</d:order>\n\t\t</d:orderby>\n\t\t<d:limit>\n\t\t\t<d:nresults>100</d:nresults>\n\t\t\t<ns:firstresult>0</ns:firstresult>\n\t\t</d:limit>\n\t</d:basicsearch>\n</d:searchrequest>`};var E=(t=>(t.Folder="folder",t.File="file",t))(E||{});const x=function(t,e){return null!==t.match(e)},_=(t,e)=>{if(t.id&&"number"!=typeof t.id)throw new Error("Invalid id type of value");if(!t.source)throw new Error("Missing mandatory source");try{new URL(t.source)}catch{throw new Error("Invalid source format, source must be a valid URL")}if(!t.source.startsWith("http"))throw new Error("Invalid source format, only http(s) is supported");if(t.mtime&&!(t.mtime instanceof Date))throw new Error("Invalid mtime type");if(t.crtime&&!(t.crtime instanceof Date))throw new Error("Invalid crtime type");if(!t.mime||"string"!=typeof t.mime||!t.mime.match(/^[-\w.]+\/[-+\w.]+$/gi))throw new Error("Missing or invalid mandatory mime");if("size"in t&&"number"!=typeof t.size&&void 0!==t.size)throw new Error("Invalid size type");if("permissions"in t&&void 0!==t.permissions&&!("number"==typeof t.permissions&&t.permissions>=m.NONE&&t.permissions<=m.ALL))throw new Error("Invalid permissions");if(t.owner&&null!==t.owner&&"string"!=typeof t.owner)throw new Error("Invalid owner type");if(t.attributes&&"object"!=typeof t.attributes)throw new Error("Invalid attributes type");if(t.root&&"string"!=typeof t.root)throw new Error("Invalid root type");if(t.root&&!t.root.startsWith("/"))throw new Error("Root must start with a leading slash");if(t.root&&!t.source.includes(t.root))throw new Error("Root must be part of the source");if(t.root&&x(t.source,e)){const r=t.source.match(e)[0];if(!t.source.includes((0,a.join)(r,t.root)))throw new Error("The root must be relative to the service. e.g /files/emma")}if(t.status&&!Object.values(P).includes(t.status))throw new Error("Status must be a valid NodeStatus")};var P=(t=>(t.NEW="new",t.FAILED="failed",t.LOADING="loading",t.LOCKED="locked",t))(P||{});class I{_data;_attributes;_knownDavService=/(remote|public)\.php\/(web)?dav/i;constructor(t,e){_(t,e||this._knownDavService),this._data=t;const r={set:(t,e,r)=>(this.updateMtime(),Reflect.set(t,e,r)),deleteProperty:(t,e)=>(this.updateMtime(),Reflect.deleteProperty(t,e))};this._attributes=new Proxy(t.attributes||{},r),delete this._data.attributes,e&&(this._knownDavService=e)}get source(){return this._data.source.replace(/\/$/i,"")}get encodedSource(){const{origin:t}=new URL(this.source);return t+(0,u.O0)(this.source.slice(t.length))}get basename(){return(0,a.basename)(this.source)}get extension(){return(0,a.extname)(this.source)}get dirname(){if(this.root){let t=this.source;this.isDavRessource&&(t=t.split(this._knownDavService).pop());const e=t.indexOf(this.root),r=this.root.replace(/\/$/,"");return(0,a.dirname)(t.slice(e+r.length)||"/")}const t=new URL(this.source);return(0,a.dirname)(t.pathname)}get mime(){return this._data.mime}get mtime(){return this._data.mtime}get crtime(){return this._data.crtime}get size(){return this._data.size}get attributes(){return this._attributes}get permissions(){return null!==this.owner||this.isDavRessource?void 0!==this._data.permissions?this._data.permissions:m.NONE:m.READ}get owner(){return this.isDavRessource?this._data.owner:null}get isDavRessource(){return x(this.source,this._knownDavService)}get root(){return this._data.root?this._data.root.replace(/^(.+)\/$/,"$1"):this.isDavRessource&&(0,a.dirname)(this.source).split(this._knownDavService).pop()||null}get path(){if(this.root){let t=this.source;this.isDavRessource&&(t=t.split(this._knownDavService).pop());const e=t.indexOf(this.root),r=this.root.replace(/\/$/,"");return t.slice(e+r.length)||"/"}return(this.dirname+"/"+this.basename).replace(/\/\//g,"/")}get fileid(){return this._data?.id||this.attributes?.fileid}get status(){return this._data?.status}set status(t){this._data.status=t}move(t){_({...this._data,source:t},this._knownDavService),this._data.source=t,this.updateMtime()}rename(t){if(t.includes("/"))throw new Error("Invalid basename");this.move((0,a.dirname)(this.source)+"/"+t)}updateMtime(){this._data.mtime&&(this._data.mtime=new Date)}}class L extends I{get type(){return E.File}}class C extends I{constructor(t){super({...t,mime:"httpd/unix-directory"})}get type(){return E.Folder}get extension(){return null}get mime(){return"httpd/unix-directory"}}const R=`/files/${(0,o.HW)()?.uid}`,N=(0,c.dC)("dav"),U=function(t=N,e={}){const r=(0,p.UU)(t,{headers:e});function n(t){r.setHeaders({...e,"X-Requested-With":"XMLHttpRequest",requesttoken:t??""})}return(0,o.zo)(n),n((0,o.do)()),(0,p.Gu)().patch("fetch",((t,e)=>{const r=e.headers;return r?.method&&(e.method=r.method,delete r.method),fetch(t,e)})),r},O=async(t,e="/",r=R)=>(await t.getDirectoryContents(`${r}${e}`,{details:!0,data:`<?xml version="1.0"?>\n\t\t<oc:filter-files ${b()}>\n\t\t\t<d:prop>\n\t\t\t\t${v()}\n\t\t\t</d:prop>\n\t\t\t<oc:filter-rules>\n\t\t\t\t<oc:favorite>1</oc:favorite>\n\t\t\t</oc:filter-rules>\n\t\t</oc:filter-files>`,headers:{method:"REPORT"},includeSelf:!0})).data.filter((t=>t.filename!==e)).map((t=>k(t,r))),k=function(t,e=R,r=N){const n=t.props,i=function(t=""){let e=m.NONE;return t&&((t.includes("C")||t.includes("K"))&&(e|=m.CREATE),t.includes("G")&&(e|=m.READ),(t.includes("W")||t.includes("N")||t.includes("V"))&&(e|=m.UPDATE),t.includes("D")&&(e|=m.DELETE),t.includes("R")&&(e|=m.SHARE)),e}(n?.permissions),s=n?.["owner-id"]||(0,o.HW)()?.uid,a={id:n?.fileid||0,source:`${r}${t.filename}`,mtime:new Date(Date.parse(t.lastmod)),mime:t.mime,size:n?.size||Number.parseInt(n.getcontentlength||"0"),permissions:i,owner:s,root:e,attributes:{...t,...n,hasPreview:n?.["has-preview"]}};return delete a.attributes?.props,"file"===t.type?new L(a):new C(a)};var T={};!function(t){const e=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",r="["+e+"]["+e+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*",n=new RegExp("^"+r+"$");t.isExist=function(t){return typeof t<"u"},t.isEmptyObject=function(t){return 0===Object.keys(t).length},t.merge=function(t,e,r){if(e){const n=Object.keys(e),o=n.length;for(let i=0;i<o;i++)t[n[i]]="strict"===r?[e[n[i]]]:e[n[i]]}},t.getValue=function(e){return t.isExist(e)?e:""},t.isName=function(t){const e=n.exec(t);return!(null===e||typeof e>"u")},t.getAllMatches=function(t,e){const r=[];let n=e.exec(t);for(;n;){const o=[];o.startIndex=e.lastIndex-n[0].length;const i=n.length;for(let t=0;t<i;t++)o.push(n[t]);r.push(o),n=e.exec(t)}return r},t.nameRegexp=r}(T);new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");var S={};const j={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0},tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(t,e,r){return t}};S.buildOptions=function(t){return Object.assign({},j,t)},S.defaultOptions=j,!Number.parseInt&&window.parseInt&&(Number.parseInt=window.parseInt),!Number.parseFloat&&window.parseFloat&&(Number.parseFloat=window.parseFloat);"<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)".replace(/NAME/g,T.nameRegexp),new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");var F={};function $(t,e,r){let n;const o={};for(let i=0;i<t.length;i++){const s=t[i],a=D(s);let u="";if(u=void 0===r?a:r+"."+a,a===e.textNodeName)void 0===n?n=s[a]:n+=""+s[a];else{if(void 0===a)continue;if(s[a]){let t=$(s[a],e,u);const r=q(t,e);s[":@"]?B(t,s[":@"],u,e):1!==Object.keys(t).length||void 0===t[e.textNodeName]||e.alwaysCreateTextNode?0===Object.keys(t).length&&(e.alwaysCreateTextNode?t[e.textNodeName]="":t=""):t=t[e.textNodeName],void 0!==o[a]&&o.hasOwnProperty(a)?(Array.isArray(o[a])||(o[a]=[o[a]]),o[a].push(t)):e.isArray(a,u,r)?o[a]=[t]:o[a]=t}}}return"string"==typeof n?n.length>0&&(o[e.textNodeName]=n):void 0!==n&&(o[e.textNodeName]=n),o}function D(t){const e=Object.keys(t);for(let t=0;t<e.length;t++){const r=e[t];if(":@"!==r)return r}}function B(t,e,r,n){if(e){const o=Object.keys(e),i=o.length;for(let s=0;s<i;s++){const i=o[s];n.isArray(i,r+"."+i,!0,!0)?t[i]=[e[i]]:t[i]=e[i]}}}function q(t,e){const{textNodeName:r}=e,n=Object.keys(t).length;return!(0!==n&&(1!==n||!t[r]&&"boolean"!=typeof t[r]&&0!==t[r]))}F.prettify=function(t,e){return $(t,e)};const{buildOptions:M}=S,{prettify:V}=F;function G(t,e,r,n){let o="",i=!1;for(let s=0;s<t.length;s++){const a=t[s],u=K(a);if(void 0===u)continue;let c="";if(c=0===r.length?u:`${r}.${u}`,u===e.textNodeName){let t=a[u];z(c,e)||(t=e.tagValueProcessor(u,t),t=J(t,e)),i&&(o+=n),o+=t,i=!1;continue}if(u===e.cdataPropName){i&&(o+=n),o+=`<![CDATA[${a[u][0][e.textNodeName]}]]>`,i=!1;continue}if(u===e.commentPropName){o+=n+`\x3c!--${a[u][0][e.textNodeName]}--\x3e`,i=!0;continue}if("?"===u[0]){const t=H(a[":@"],e),r="?xml"===u?"":n;let s=a[u][0][e.textNodeName];s=0!==s.length?" "+s:"",o+=r+`<${u}${s}${t}?>`,i=!0;continue}let p=n;""!==p&&(p+=e.indentBy);const d=n+`<${u}${H(a[":@"],e)}`,l=G(a[u],e,c,p);-1!==e.unpairedTags.indexOf(u)?e.suppressUnpairedNode?o+=d+">":o+=d+"/>":l&&0!==l.length||!e.suppressEmptyNode?l&&l.endsWith(">")?o+=d+`>${l}${n}</${u}>`:(o+=d+">",l&&""!==n&&(l.includes("/>")||l.includes("</"))?o+=n+e.indentBy+l+n:o+=l,o+=`</${u}>`):o+=d+"/>",i=!0}return o}function K(t){const e=Object.keys(t);for(let r=0;r<e.length;r++){const n=e[r];if(t.hasOwnProperty(n)&&":@"!==n)return n}}function H(t,e){let r="";if(t&&!e.ignoreAttributes)for(let n in t){if(!t.hasOwnProperty(n))continue;let o=e.attributeValueProcessor(n,t[n]);o=J(o,e),!0===o&&e.suppressBooleanAttributes?r+=` ${n.substr(e.attributeNamePrefix.length)}`:r+=` ${n.substr(e.attributeNamePrefix.length)}="${o}"`}return r}function z(t,e){let r=(t=t.substr(0,t.length-e.textNodeName.length-1)).substr(t.lastIndexOf(".")+1);for(let n in e.stopNodes)if(e.stopNodes[n]===t||e.stopNodes[n]==="*."+r)return!0;return!1}function J(t,e){if(t&&t.length>0&&e.processEntities)for(let r=0;r<e.entities.length;r++){const n=e.entities[r];t=t.replace(n.regex,n.val)}return t}const W=function(t,e){let r="";return e.format&&e.indentBy.length>0&&(r="\n"),G(t,e,"",r)},Q={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&amp;"},{regex:new RegExp(">","g"),val:"&gt;"},{regex:new RegExp("<","g"),val:"&lt;"},{regex:new RegExp("'","g"),val:"&apos;"},{regex:new RegExp('"',"g"),val:"&quot;"}],processEntities:!0,stopNodes:[],oneListGroup:!1};function Y(t){this.options=Object.assign({},Q,t),this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=tt),this.processTextOrObjNode=X,this.options.format?(this.indentate=Z,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function X(t,e,r){const n=this.j2x(t,r+1);return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,n.attrStr,r):this.buildObjectNode(n.val,e,n.attrStr,r)}function Z(t){return this.options.indentBy.repeat(t)}function tt(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}Y.prototype.build=function(t){return this.options.preserveOrder?W(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&(t={[this.options.arrayNodeName]:t}),this.j2x(t,0).val)},Y.prototype.j2x=function(t,e){let r="",n="";for(let o in t)if(Object.prototype.hasOwnProperty.call(t,o))if(typeof t[o]>"u")this.isAttribute(o)&&(n+="");else if(null===t[o])this.isAttribute(o)?n+="":"?"===o[0]?n+=this.indentate(e)+"<"+o+"?"+this.tagEndChar:n+=this.indentate(e)+"<"+o+"/"+this.tagEndChar;else if(t[o]instanceof Date)n+=this.buildTextValNode(t[o],o,"",e);else if("object"!=typeof t[o]){const i=this.isAttribute(o);if(i)r+=this.buildAttrPairStr(i,""+t[o]);else if(o===this.options.textNodeName){let e=this.options.tagValueProcessor(o,""+t[o]);n+=this.replaceEntitiesValue(e)}else n+=this.buildTextValNode(t[o],o,"",e)}else if(Array.isArray(t[o])){const r=t[o].length;let i="";for(let s=0;s<r;s++){const r=t[o][s];typeof r>"u"||(null===r?"?"===o[0]?n+=this.indentate(e)+"<"+o+"?"+this.tagEndChar:n+=this.indentate(e)+"<"+o+"/"+this.tagEndChar:"object"==typeof r?this.options.oneListGroup?i+=this.j2x(r,e+1).val:i+=this.processTextOrObjNode(r,o,e):i+=this.buildTextValNode(r,o,"",e))}this.options.oneListGroup&&(i=this.buildObjectNode(i,o,"",e)),n+=i}else if(this.options.attributesGroupName&&o===this.options.attributesGroupName){const e=Object.keys(t[o]),n=e.length;for(let i=0;i<n;i++)r+=this.buildAttrPairStr(e[i],""+t[o][e[i]])}else n+=this.processTextOrObjNode(t[o],o,e);return{attrStr:r,val:n}},Y.prototype.buildAttrPairStr=function(t,e){return e=this.options.attributeValueProcessor(t,""+e),e=this.replaceEntitiesValue(e),this.options.suppressBooleanAttributes&&"true"===e?" "+t:" "+t+'="'+e+'"'},Y.prototype.buildObjectNode=function(t,e,r,n){if(""===t)return"?"===e[0]?this.indentate(n)+"<"+e+r+"?"+this.tagEndChar:this.indentate(n)+"<"+e+r+this.closeTag(e)+this.tagEndChar;{let o="</"+e+this.tagEndChar,i="";return"?"===e[0]&&(i="?",o=""),!r&&""!==r||-1!==t.indexOf("<")?!1!==this.options.commentPropName&&e===this.options.commentPropName&&0===i.length?this.indentate(n)+`\x3c!--${t}--\x3e`+this.newLine:this.indentate(n)+"<"+e+r+i+this.tagEndChar+t+this.indentate(n)+o:this.indentate(n)+"<"+e+r+i+">"+t+o}},Y.prototype.closeTag=function(t){let e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":`></${t}`,e},Y.prototype.buildTextValNode=function(t,e,r,n){if(!1!==this.options.cdataPropName&&e===this.options.cdataPropName)return this.indentate(n)+`<![CDATA[${t}]]>`+this.newLine;if(!1!==this.options.commentPropName&&e===this.options.commentPropName)return this.indentate(n)+`\x3c!--${t}--\x3e`+this.newLine;if("?"===e[0])return this.indentate(n)+"<"+e+r+"?"+this.tagEndChar;{let o=this.options.tagValueProcessor(e,t);return o=this.replaceEntitiesValue(o),""===o?this.indentate(n)+"<"+e+r+this.closeTag(e)+this.tagEndChar:this.indentate(n)+"<"+e+r+">"+o+"</"+e+this.tagEndChar}},Y.prototype.replaceEntitiesValue=function(t){if(t&&t.length>0&&this.options.processEntities)for(let e=0;e<this.options.entities.length;e++){const r=this.options.entities[e];t=t.replace(r.regex,r.val)}return t}}},i={};function s(t){var e=i[t];if(void 0!==e)return e.exports;var r=i[t]={id:t,loaded:!1,exports:{}};return o[t].call(r.exports,r,r.exports,s),r.loaded=!0,r.exports}s.m=o,e=[],s.O=(t,r,n,o)=>{if(!r){var i=1/0;for(p=0;p<e.length;p++){r=e[p][0],n=e[p][1],o=e[p][2];for(var a=!0,u=0;u<r.length;u++)(!1&o||i>=o)&&Object.keys(s.O).every((t=>s.O[t](r[u])))?r.splice(u--,1):(a=!1,o<i&&(i=o));if(a){e.splice(p--,1);var c=n();void 0!==c&&(t=c)}}return t}o=o||0;for(var p=e.length;p>0&&e[p-1][2]>o;p--)e[p]=e[p-1];e[p]=[r,n,o]},s.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return s.d(e,{a:e}),e},s.d=(t,e)=>{for(var r in e)s.o(e,r)&&!s.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},s.f={},s.e=t=>Promise.all(Object.keys(s.f).reduce(((e,r)=>(s.f[r](t,e),e)),[])),s.u=t=>(({3239:"settings-users",4529:"settings-apps-view"}[t]||t)+"-"+t+".js?v="+{1359:"d217768bf3f39a7359dd",1439:"41c39783c33a6fb28f5c",3239:"b380e9fda46ca498c72f",3865:"8ecd73fc58224ecd56fe",4529:"1b1723a987a17d0d479e",8618:"1e8f15db3b14455fef8f",9923:"0add07b4169aca95df9a"}[t]),s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r={},n="nextcloud:",s.l=(t,e,o,i)=>{if(r[t])r[t].push(e);else{var a,u;if(void 0!==o)for(var c=document.getElementsByTagName("script"),p=0;p<c.length;p++){var d=c[p];if(d.getAttribute("src")==t||d.getAttribute("data-webpack")==n+o){a=d;break}}a||(u=!0,(a=document.createElement("script")).charset="utf-8",a.timeout=120,s.nc&&a.setAttribute("nonce",s.nc),a.setAttribute("data-webpack",n+o),a.src=t),r[t]=[e];var l=(e,n)=>{a.onerror=a.onload=null,clearTimeout(h);var o=r[t];if(delete r[t],a.parentNode&&a.parentNode.removeChild(a),o&&o.forEach((t=>t(n))),e)return e(n)},h=setTimeout(l.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=l.bind(null,a.onerror),a.onload=l.bind(null,a.onload),u&&document.head.appendChild(a)}},s.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},s.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),s.j=2689,(()=>{var t;s.g.importScripts&&(t=s.g.location+"");var e=s.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var r=e.getElementsByTagName("script");if(r.length)for(var n=r.length-1;n>-1&&(!t||!/^http(s?):/.test(t));)t=r[n--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),s.p=t})(),(()=>{s.b=document.baseURI||self.location.href;var t={2689:0};s.f.j=(e,r)=>{var n=s.o(t,e)?t[e]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,o)=>n=t[e]=[r,o]));r.push(n[2]=o);var i=s.p+s.u(e),a=new Error;s.l(i,(r=>{if(s.o(t,e)&&(0!==(n=t[e])&&(t[e]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;a.message="Loading chunk "+e+" failed.\n("+o+": "+i+")",a.name="ChunkLoadError",a.type=o,a.request=i,n[1](a)}}),"chunk-"+e,e)}},s.O.j=e=>0===t[e];var e=(e,r)=>{var n,o,i=r[0],a=r[1],u=r[2],c=0;if(i.some((e=>0!==t[e]))){for(n in a)s.o(a,n)&&(s.m[n]=a[n]);if(u)var p=u(s)}for(e&&e(r);c<i.length;c++)o=i[c],s.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return s.O(p)},r=self.webpackChunknextcloud=self.webpackChunknextcloud||[];r.forEach(e.bind(null,0)),r.push=e.bind(null,r.push.bind(r))})(),s.nc=void 0;var a=s.O(void 0,[4208],(()=>s(74329)));a=s.O(a)})();
+//# sourceMappingURL=settings-vue-settings-apps-users-management.js.map?v=a101a49064d79e1a2206 \ No newline at end of file
diff --git a/dist/settings-vue-settings-apps-users-management.js.map b/dist/settings-vue-settings-apps-users-management.js.map
index 8a218595308..935363f91e2 100644
--- a/dist/settings-vue-settings-apps-users-management.js.map
+++ b/dist/settings-vue-settings-apps-users-management.js.map
@@ -1 +1 @@
-{"version":3,"file":"settings-vue-settings-apps-users-management.js?v=29e46a7cb0e46579a5e7","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/settings/src/store/api.js","webpack:///nextcloud/apps/settings/src/store/users.js","webpack:///nextcloud/apps/settings/src/store/apps.js","webpack:///nextcloud/apps/settings/src/store/users-settings.js","webpack:///nextcloud/apps/settings/src/store/oc.js","webpack:///nextcloud/apps/settings/src/store/index.js","webpack:///nextcloud/apps/settings/src/logger.ts","webpack:///nextcloud/apps/settings/src/views/SettingsApp.vue","webpack:///nextcloud/apps/settings/src/views/SettingsApp.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/views/SettingsApp.vue?3a67","webpack:///nextcloud/apps/settings/src/router/routes.ts","webpack:///nextcloud/apps/settings/src/router/index.ts","webpack:///nextcloud/apps/settings/src/main-apps-users-management.ts","webpack:///nextcloud/node_modules/vue-router/dist/vue-router.esm.js","webpack:///nextcloud/node_modules/vuex-router-sync/index.js","webpack:///nextcloud/node_modules/@nextcloud/files/dist/index.mjs","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/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};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <sujith.h@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\n\nconst sanitize = function(url) {\n\treturn url.replace(/\\/$/, '') // Remove last url slash\n}\n\nexport default {\n\n\t/**\n\t * This Promise is used to chain a request that require an admin password confirmation\n\t * Since chaining Promise have a very precise behavior concerning catch and then,\n\t * you'll need to be careful when using it.\n\t * e.g\n\t * // store\n\t * action(context) {\n\t * return api.requireAdmin().then((response) => {\n\t * return api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {API failure});\n\t * }).catch((error) => {requireAdmin failure});\n\t * }\n\t * // vue\n\t * this.$store.dispatch('action').then(() => {always executed})\n\t *\n\t * Since Promise.then().catch().then() will always execute the last then\n\t * this.$store.dispatch('action').then will always be executed\n\t *\n\t * If you want requireAdmin failure to also catch the API request failure\n\t * you will need to throw a new error in the api.get.catch()\n\t *\n\t * e.g\n\t * api.requireAdmin().then((response) => {\n\t * api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {throw error;});\n\t * }).catch((error) => {requireAdmin OR API failure});\n\t *\n\t * @return {Promise}\n\t */\n\trequireAdmin() {\n\t\treturn confirmPassword()\n\t},\n\tget(url, options) {\n\t\treturn axios.get(sanitize(url), options)\n\t},\n\tpost(url, data) {\n\t\treturn axios.post(sanitize(url), data)\n\t},\n\tpatch(url, data) {\n\t\treturn axios.patch(sanitize(url), data)\n\t},\n\tput(url, data) {\n\t\treturn axios.put(sanitize(url), data)\n\t},\n\tdelete(url, data) {\n\t\treturn axios.delete(sanitize(url), { params: data })\n\t},\n}\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n * @author Stephan Orbaugh <stephan.orbaugh@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getBuilder } from '@nextcloud/browser-storage'\nimport { getCapabilities } from '@nextcloud/capabilities'\nimport { parseFileSize } from '@nextcloud/files'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\n\nimport api from './api.js'\nimport logger from '../logger.ts'\n\nconst localStorage = getBuilder('settings').persist(true).build()\n\nconst orderGroups = function(groups, orderBy) {\n\t/* const SORT_USERCOUNT = 1;\n\t * const SORT_GROUPNAME = 2;\n\t * https://github.com/nextcloud/server/blob/208e38e84e1a07a49699aa90dc5b7272d24489f0/lib/private/Group/MetaData.php#L34\n\t */\n\tif (orderBy === 1) {\n\t\treturn groups.sort((a, b) => a.usercount - a.disabled < b.usercount - b.disabled)\n\t} else {\n\t\treturn groups.sort((a, b) => a.name.localeCompare(b.name))\n\t}\n}\n\nconst defaults = {\n\tgroup: {\n\t\tid: '',\n\t\tname: '',\n\t\tusercount: 0,\n\t\tdisabled: 0,\n\t\tcanAdd: true,\n\t\tcanRemove: true,\n\t},\n}\n\nconst state = {\n\tusers: [],\n\tgroups: [],\n\torderBy: 1,\n\tminPasswordLength: 0,\n\tusersOffset: 0,\n\tusersLimit: 25,\n\tdisabledUsersOffset: 0,\n\tdisabledUsersLimit: 25,\n\tuserCount: 0,\n\tshowConfig: {\n\t\tshowStoragePath: localStorage.getItem('account_settings__showStoragePath') === 'true',\n\t\tshowUserBackend: localStorage.getItem('account_settings__showUserBackend') === 'true',\n\t\tshowLastLogin: localStorage.getItem('account_settings__showLastLogin') === 'true',\n\t\tshowNewUserForm: localStorage.getItem('account_settings__showNewUserForm') === 'true',\n\t\tshowLanguages: localStorage.getItem('account_settings__showLanguages') === 'true',\n\t},\n}\n\nconst mutations = {\n\tappendUsers(state, usersObj) {\n\t\tconst existingUsers = state.users.map(({ id }) => id)\n\t\tconst newUsers = Object.values(usersObj)\n\t\t\t.filter(({ id }) => !existingUsers.includes(id))\n\n\t\tconst users = state.users.concat(newUsers)\n\t\tstate.usersOffset += state.usersLimit\n\t\tstate.users = users\n\t},\n\tupdateDisabledUsers(state, _usersObj) {\n\t\tstate.disabledUsersOffset += state.disabledUsersLimit\n\t},\n\tsetPasswordPolicyMinLength(state, length) {\n\t\tstate.minPasswordLength = length !== '' ? length : 0\n\t},\n\tinitGroups(state, { groups, orderBy, userCount }) {\n\t\tstate.groups = groups.map(group => Object.assign({}, defaults.group, group))\n\t\tstate.orderBy = orderBy\n\t\tstate.userCount = userCount\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\n\t},\n\taddGroup(state, { gid, displayName }) {\n\t\ttry {\n\t\t\tif (typeof state.groups.find((group) => group.id === gid) !== 'undefined') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// extend group to default values\n\t\t\tconst group = Object.assign({}, defaults.group, {\n\t\t\t\tid: gid,\n\t\t\t\tname: displayName,\n\t\t\t})\n\t\t\tstate.groups.unshift(group)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t} catch (e) {\n\t\t\tconsole.error('Can\\'t create group', e)\n\t\t}\n\t},\n\trenameGroup(state, { gid, displayName }) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tconst updatedGroup = state.groups[groupIndex]\n\t\t\tupdatedGroup.name = displayName\n\t\t\tstate.groups.splice(groupIndex, 1, updatedGroup)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t}\n\t},\n\tremoveGroup(state, gid) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tstate.groups.splice(groupIndex, 1)\n\t\t}\n\t},\n\taddUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// increase count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount++\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.push(gid)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\tremoveUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// lower count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount--\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\taddUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.push(gid)\n\t},\n\tremoveUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t},\n\tdeleteUser(state, userid) {\n\t\tconst userIndex = state.users.findIndex(user => user.id === userid)\n\t\tthis.commit('updateUserCounts', { user: state.users[userIndex], actionType: 'remove' })\n\t\tstate.users.splice(userIndex, 1)\n\t},\n\taddUserData(state, response) {\n\t\tconst user = response.data.ocs.data\n\t\tstate.users.unshift(user)\n\t\tthis.commit('updateUserCounts', { user, actionType: 'create' })\n\t},\n\tenableDisableUser(state, { userid, enabled }) {\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\tuser.enabled = enabled\n\t\tthis.commit('updateUserCounts', { user, actionType: enabled ? 'enable' : 'disable' })\n\t},\n\t// update active/disabled counts, groups counts\n\tupdateUserCounts(state, { user, actionType }) {\n\t\t// 0 is a special value\n\t\tif (state.userCount === 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst disabledGroup = state.groups.find(group => group.id === 'disabled')\n\t\tswitch (actionType) {\n\t\tcase 'enable':\n\t\tcase 'disable':\n\t\t\tdisabledGroup.usercount += user.enabled ? -1 : 1 // update Disabled Users count\n\t\t\tstate.userCount += user.enabled ? 1 : -1 // update Active Users count\n\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\tgroup.disabled += user.enabled ? -1 : 1 // update group disabled count\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'create':\n\t\t\tstate.userCount++ // increment Active Users count\n\n\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\tstate.groups\n\t\t\t\t\t.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t .usercount++ // increment group total count\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'remove':\n\t\t\tif (user.enabled) {\n\t\t\t\tstate.userCount-- // decrement Active Users count\n\t\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t\tif (!group) {\n\t\t\t\t\t\tconsole.warn('User group ' + userGroup + ' does not exist during user removal')\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tgroup.usercount-- // decrement group total count\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tdisabledGroup.usercount-- // decrement Disabled Users count\n\t\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t\tgroup.disabled-- // decrement group disabled count\n\t\t\t\t})\n\t\t\t}\n\t\t\tbreak\n\t\tdefault:\n\t\t\tlogger.error(`Unknown action type in updateUserCounts: '${actionType}'`)\n\t\t\t// not throwing error to interrupt execution as this is not fatal\n\t\t}\n\t},\n\tsetUserData(state, { userid, key, value }) {\n\t\tif (key === 'quota') {\n\t\t\tconst humanValue = parseFileSize(value, true)\n\t\t\tstate.users.find(user => user.id === userid)[key][key] = humanValue !== null ? humanValue : value\n\t\t} else {\n\t\t\tstate.users.find(user => user.id === userid)[key] = value\n\t\t}\n\t},\n\n\t/**\n\t * Reset users list\n\t *\n\t * @param {object} state the store state\n\t */\n\tresetUsers(state) {\n\t\tstate.users = []\n\t\tstate.usersOffset = 0\n\t\tstate.disabledUsersOffset = 0\n\t},\n\n\tsetShowConfig(state, { key, value }) {\n\t\tlocalStorage.setItem(`account_settings__${key}`, JSON.stringify(value))\n\t\tstate.showConfig[key] = value\n\t},\n}\n\nconst getters = {\n\tgetUsers(state) {\n\t\treturn state.users\n\t},\n\tgetGroups(state) {\n\t\treturn state.groups\n\t},\n\tgetSubadminGroups(state) {\n\t\t// Can't be subadmin of admin or disabled\n\t\treturn state.groups.filter(group => group.id !== 'admin' && group.id !== 'disabled')\n\t},\n\tgetPasswordPolicyMinLength(state) {\n\t\treturn state.minPasswordLength\n\t},\n\tgetUsersOffset(state) {\n\t\treturn state.usersOffset\n\t},\n\tgetUsersLimit(state) {\n\t\treturn state.usersLimit\n\t},\n\tgetDisabledUsersOffset(state) {\n\t\treturn state.disabledUsersOffset\n\t},\n\tgetDisabledUsersLimit(state) {\n\t\treturn state.disabledUsersLimit\n\t},\n\tgetUserCount(state) {\n\t\treturn state.userCount\n\t},\n\tgetShowConfig(state) {\n\t\treturn state.showConfig\n\t},\n}\n\nconst CancelToken = axios.CancelToken\nlet searchRequestCancelSource = null\n\nconst actions = {\n\n\t/**\n\t * search users\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @return {Promise}\n\t */\n\tsearchUsers(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search })).catch((error) => {\n\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t})\n\t},\n\n\t/**\n\t * Get user details\n\t *\n\t * @param {object} context store context\n\t * @param {string} userId user id\n\t * @return {Promise}\n\t */\n\tgetUser(context, userId) {\n\t\treturn api.get(generateOcsUrl(`cloud/users/${userId}`)).catch((error) => {\n\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t})\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @param {string} options.group Get users from group\n\t * @return {Promise}\n\t */\n\tgetUsers(context, { offset, limit, search, group }) {\n\t\tif (searchRequestCancelSource) {\n\t\t\tsearchRequestCancelSource.cancel('Operation canceled by another search request.')\n\t\t}\n\t\tsearchRequestCancelSource = CancelToken.source()\n\t\tsearch = typeof search === 'string' ? search : ''\n\n\t\t/**\n\t\t * Adding filters in the search bar such as in:files, in:users, etc.\n\t\t * collides with this particular search, so we need to remove them\n\t\t * here and leave only the original search query\n\t\t */\n\t\tsearch = search.replace(/in:[^\\s]+/g, '').trim()\n\n\t\tgroup = typeof group === 'string' ? group : ''\n\t\tif (group !== '') {\n\t\t\treturn api.get(generateOcsUrl('cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}', { group: encodeURIComponent(group), offset, limit, search }), {\n\t\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\t}\n\t\t\t\t\treturn usersCount\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }), {\n\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t})\n\t\t\t.then((response) => {\n\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t}\n\t\t\t\treturn usersCount\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t}\n\t\t\t})\n\t},\n\n\t/**\n\t * Get disabled users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @return {Promise<number>}\n\t */\n\tasync getDisabledUsers(context, { offset, limit }) {\n\t\tconst url = generateOcsUrl('cloud/users/disabled?offset={offset}&limit={limit}', { offset, limit })\n\t\ttry {\n\t\t\tconst response = await api.get(url)\n\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\tif (usersCount > 0) {\n\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\tcontext.commit('updateDisabledUsers', response.data.ocs.data.users)\n\t\t\t}\n\t\t\treturn usersCount\n\t\t} catch (error) {\n\t\t\tcontext.commit('API_FAILURE', error)\n\t\t}\n\t},\n\n\tgetGroups(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tconst limitParam = limit === -1 ? '' : `&limit=${limit}`\n\t\treturn api.get(generateOcsUrl('cloud/groups?offset={offset}&search={search}', { offset, search }) + limitParam)\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.groups).length > 0) {\n\t\t\t\t\tresponse.data.ocs.data.groups.forEach(function(group) {\n\t\t\t\t\t\tcontext.commit('addGroup', { gid: group, displayName: group })\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search -\n\t * @return {Promise}\n\t */\n\tgetUsersFromList(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }))\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.users).length > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details from a groupid\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.groupid -\n\t * @return {Promise}\n\t */\n\tgetUsersFromGroup(context, { groupid, offset, limit }) {\n\t\treturn api.get(generateOcsUrl('cloud/users/{groupId}/details?offset={offset}&limit={limit}', { groupId: encodeURIComponent(groupid), offset, limit }))\n\t\t\t.then((response) => context.commit('getUsersFromList', response.data.ocs.data.users))\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetPasswordPolicyMinLength(context) {\n\t\tif (getCapabilities().password_policy && getCapabilities().password_policy.minLength) {\n\t\t\tcontext.commit('setPasswordPolicyMinLength', getCapabilities().password_policy.minLength)\n\t\t\treturn getCapabilities().password_policy.minLength\n\t\t}\n\t\treturn false\n\t},\n\n\t/**\n\t * Add group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\taddGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/groups'), { groupid: gid })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('addGroup', { gid, displayName: gid })\n\t\t\t\t\treturn { gid, displayName: gid }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { gid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from adding the user to a group that doesn't exists\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Rename group\n\t *\n\t * @param {object} context store context\n\t * @param {string} groupid Group id\n\t * @param {string} displayName Group display name\n\t * @return {Promise}\n\t */\n\trenameGroup(context, { groupid, displayName }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(groupid) }), { key: 'displayname', value: displayName })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('renameGroup', { gid: groupid, displayName })\n\t\t\t\t\treturn { groupid, displayName }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { groupid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from renaming the group\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Remove group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\tremoveGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(gid) }))\n\t\t\t\t.then((response) => context.commit('removeGroup', gid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { gid, error }))\n\t},\n\n\t/**\n\t * Add user to group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\t// let's throw one more time to prevent\n\t\t\t// the view from removing the user row on failure\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Add user to group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Mark all user devices for remote wipe\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\twipeUserDevices(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/wipe', { userid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Delete a user\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tdeleteUser(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('deleteUser', userid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Add a user\n\t *\n\t * @param {object} context store context\n\t * @param {Function} context.commit -\n\t * @param {Function} context.dispatch -\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.password User password\n\t * @param {string} options.displayName User display name\n\t * @param {string} options.email User email\n\t * @param {string} options.groups User groups\n\t * @param {string} options.subadmin User subadmin groups\n\t * @param {string} options.quota User email\n\t * @param {string} options.language User language\n\t * @param {string} options.manager User manager\n\t * @return {Promise}\n\t */\n\taddUser({ commit, dispatch }, { userid, password, displayName, email, groups, subadmin, quota, language, manager }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users'), { userid, password, displayName, email, groups, subadmin, quota, language, manager })\n\t\t\t\t.then((response) => dispatch('addUserData', userid || response.data.ocs.data.id))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcommit('API_FAILURE', { userid, error })\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Get user data and commit addition\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\taddUserData(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.get(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('addUserData', response))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Enable or disable user\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {boolean} options.enabled User enablement status\n\t * @return {Promise}\n\t */\n\tenableDisableUser(context, { userid, enabled = true }) {\n\t\tconst userStatus = enabled ? 'enable' : 'disable'\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}/{userStatus}', { userid, userStatus }))\n\t\t\t\t.then((response) => context.commit('enableDisableUser', { userid, enabled }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Edit user data\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.key User field to edit\n\t * @param {string} options.value Value of the change\n\t * @return {Promise}\n\t */\n\tsetUserData(context, { userid, key, value }) {\n\t\tconst allowedEmpty = ['email', 'displayname', 'manager']\n\t\tif (['email', 'language', 'quota', 'displayname', 'password', 'manager'].indexOf(key) !== -1) {\n\t\t\t// We allow empty email or displayname\n\t\t\tif (typeof value === 'string'\n\t\t\t\t&& (\n\t\t\t\t\t(allowedEmpty.indexOf(key) === -1 && value.length > 0)\n\t\t\t\t\t|| allowedEmpty.indexOf(key) !== -1\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn api.requireAdmin().then((response) => {\n\t\t\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}', { userid }), { key, value })\n\t\t\t\t\t\t.then((response) => context.commit('setUserData', { userid, key, value }))\n\t\t\t\t\t\t.catch((error) => { throw error })\n\t\t\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t\t\t}\n\t\t}\n\t\treturn Promise.reject(new Error('Invalid request data'))\n\t},\n\n\t/**\n\t * Send welcome mail\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tsendWelcomeMail(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/welcome', { userid }))\n\t\t\t\t.then(response => true)\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api.js'\nimport Vue from 'vue'\nimport { generateUrl } from '@nextcloud/router'\nimport { showError, showInfo } from '@nextcloud/dialogs'\nimport { loadState } from '@nextcloud/initial-state'\n\nconst state = {\n\tapps: [],\n\tbundles: loadState('settings', 'appstoreBundles', []),\n\tcategories: [],\n\tupdateCount: loadState('settings', 'appstoreUpdateCount', 0),\n\tloading: {},\n\tgettingCategoriesPromise: null,\n}\n\nconst mutations = {\n\n\tAPPS_API_FAILURE(state, error) {\n\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.') + '<br>' + error.error.response.data.data.message, { isHTML: true })\n\t\tconsole.error(state, error)\n\t},\n\n\tinitCategories(state, { categories, updateCount }) {\n\t\tstate.categories = categories\n\t\tstate.updateCount = updateCount\n\t},\n\n\tupdateCategories(state, categoriesPromise) {\n\t\tstate.gettingCategoriesPromise = categoriesPromise\n\t},\n\n\tsetUpdateCount(state, updateCount) {\n\t\tstate.updateCount = updateCount\n\t},\n\n\taddCategory(state, category) {\n\t\tstate.categories.push(category)\n\t},\n\n\tappendCategories(state, categoriesArray) {\n\t\t// convert obj to array\n\t\tstate.categories = categoriesArray\n\t},\n\n\tsetAllApps(state, apps) {\n\t\tstate.apps = apps\n\t},\n\n\tsetError(state, { appId, error }) {\n\t\tif (!Array.isArray(appId)) {\n\t\t\tappId = [appId]\n\t\t}\n\t\tappId.forEach((_id) => {\n\t\t\tconst app = state.apps.find(app => app.id === _id)\n\t\t\tapp.error = error\n\t\t})\n\t},\n\n\tclearError(state, { appId, error }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.error = null\n\t},\n\n\tenableApp(state, { appId, groups }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = true\n\t\tapp.groups = groups\n\t},\n\n\tsetInstallState(state, { appId, canInstall }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tif (app) {\n\t\t\tapp.canInstall = canInstall === true\n\t\t}\n\t},\n\n\tdisableApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = false\n\t\tapp.groups = []\n\t\tif (app.removable) {\n\t\t\tapp.canUnInstall = true\n\t\t}\n\t},\n\n\tuninstallApp(state, appId) {\n\t\tstate.apps.find(app => app.id === appId).active = false\n\t\tstate.apps.find(app => app.id === appId).groups = []\n\t\tstate.apps.find(app => app.id === appId).needsDownload = true\n\t\tstate.apps.find(app => app.id === appId).installed = false\n\t\tstate.apps.find(app => app.id === appId).canUnInstall = false\n\t\tstate.apps.find(app => app.id === appId).canInstall = true\n\t},\n\n\tupdateApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tconst version = app.update\n\t\tapp.update = null\n\t\tapp.version = version\n\t\tstate.updateCount--\n\n\t},\n\n\tresetApps(state) {\n\t\tstate.apps = []\n\t},\n\treset(state) {\n\t\tstate.apps = []\n\t\tstate.categories = []\n\t\tstate.updateCount = 0\n\t},\n\tstartLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, true)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, true)\n\t\t}\n\t},\n\tstopLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, false)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, false)\n\t\t}\n\t},\n}\n\nconst getters = {\n\tloading(state) {\n\t\treturn function(id) {\n\t\t\treturn state.loading[id]\n\t\t}\n\t},\n\tgetCategories(state) {\n\t\treturn state.categories\n\t},\n\tgetAllApps(state) {\n\t\treturn state.apps\n\t},\n\tgetAppBundles(state) {\n\t\treturn state.bundles\n\t},\n\tgetUpdateCount(state) {\n\t\treturn state.updateCount\n\t},\n\tgetCategoryById: (state) => (selectedCategoryId) => {\n\t\treturn state.categories.find((category) => category.id === selectedCategoryId)\n\t},\n}\n\nconst actions = {\n\n\tenableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/enable'), { appIds: apps, groups })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('enableApp', { appId: _appId, groups })\n\t\t\t\t\t})\n\n\t\t\t\t\t// check for server health\n\t\t\t\t\treturn api.get(generateUrl('apps/files'))\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tif (response.data.update_required) {\n\t\t\t\t\t\t\t\tshowInfo(\n\t\t\t\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t\t\t\t'settings',\n\t\t\t\t\t\t\t\t\t\t'The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds.'\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tonClick: () => window.location.reload(),\n\t\t\t\t\t\t\t\t\t\tclose: false,\n\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tlocation.reload()\n\t\t\t\t\t\t\t\t}, 5000)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\tif (!Array.isArray(appId)) {\n\t\t\t\t\t\t\t\tshowError(t('settings', 'Error: This app cannot be enabled because it makes the server unstable'))\n\t\t\t\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\t\t\t\terror: t('settings', 'Error: This app cannot be enabled because it makes the server unstable'),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\tcontext.dispatch('disableApp', { appId })\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tforceEnableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then(() => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/force'), { appId })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('setInstallState', { appId, canInstall: true })\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tdisableApp(context, { appId }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\treturn api.post(generateUrl('settings/apps/disable'), { appIds: apps })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('disableApp', _appId)\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tuninstallApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\treturn api.get(generateUrl(`settings/apps/uninstall/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('uninstallApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tupdateApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.get(generateUrl(`settings/apps/update/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('updateApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tgetAllApps(context) {\n\t\tcontext.commit('startLoading', 'list')\n\t\treturn api.get(generateUrl('settings/apps/list'))\n\t\t\t.then((response) => {\n\t\t\t\tcontext.commit('setAllApps', response.data.apps)\n\t\t\t\tcontext.commit('stopLoading', 'list')\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tasync getCategories(context, { shouldRefetchCategories = false } = {}) {\n\t\tif (shouldRefetchCategories || !context.state.gettingCategoriesPromise) {\n\t\t\tcontext.commit('startLoading', 'categories')\n\t\t\ttry {\n\t\t\t\tconst categoriesPromise = api.get(generateUrl('settings/apps/categories'))\n\t\t\t\tcontext.commit('updateCategories', categoriesPromise)\n\t\t\t\tconst categoriesPromiseResponse = await categoriesPromise\n\t\t\t\tif (categoriesPromiseResponse.data.length > 0) {\n\t\t\t\t\tcontext.commit('appendCategories', categoriesPromiseResponse.data)\n\t\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\treturn false\n\t\t\t} catch (error) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t}\n\t\treturn context.state.gettingCategoriesPromise\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\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 { loadState } from '@nextcloud/initial-state'\n\nconst state = {\n\tserverData: loadState('settings', 'usersSettings', {}),\n}\nconst mutations = {\n\tsetServerData(state, data) {\n\t\tstate.serverData = data\n\t},\n}\nconst getters = {\n\tgetServerData(state) {\n\t\treturn state.serverData\n\t},\n}\nconst actions = {}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api.js'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst state = {}\nconst mutations = {}\nconst getters = {}\nconst actions = {\n\t/**\n\t * Set application config in database\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.app Application name\n\t * @param {boolean} options.key Config key\n\t * @param {boolean} options.value Value to set\n\t * @return {Promise}\n\t */\n\tsetAppConfig(context, { app, key, value }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('apps/provisioning_api/api/v1/config/apps/{app}/{key}', { app, key }), { value })\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { app, key, value, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport users from './users.js'\nimport apps from './apps.js'\nimport settings from './users-settings.js'\nimport oc from './oc.js'\nimport { showError } from '@nextcloud/dialogs'\n\nVue.use(Vuex)\n\nconst debug = process.env.NODE_ENV !== 'production'\n\nconst mutations = {\n\tAPI_FAILURE(state, error) {\n\t\ttry {\n\t\t\tconst message = error.error.response.data.ocs.meta.message\n\t\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.') + '<br>' + message, { isHTML: true })\n\t\t} catch (e) {\n\t\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.'))\n\t\t}\n\t\tconsole.error(state, error)\n\t},\n}\n\nlet store = null\n\nexport const useStore = () => {\n\tif (store === null) {\n\t\tstore = new Store({\n\t\t\tmodules: {\n\t\t\t\tusers,\n\t\t\t\tapps,\n\t\t\t\tsettings,\n\t\t\t\toc,\n\t\t\t},\n\t\t\tstrict: debug,\n\t\t\tmutations,\n\t\t})\n\t}\n\treturn store\n}\n","/**\n * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { getLoggerBuilder } from '@nextcloud/logger';\nexport default getLoggerBuilder()\n .setApp('settings')\n .detectUser()\n .build();\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_setup.NcContent,{attrs:{\"app-name\":\"settings\"}},[_c('router-view',{attrs:{\"name\":\"navigation\"}}),_vm._v(\" \"),_c('router-view'),_vm._v(\" \"),_c('router-view',{attrs:{\"name\":\"sidebar\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"","import { render, staticRenderFns } from \"./SettingsApp.vue?vue&type=template&id=b0b62a76\"\nimport script from \"./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// Dynamic loading\nconst AppStore = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStore.vue');\nconst AppStoreNavigation = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStoreNavigation.vue');\nconst AppStoreSidebar = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStoreSidebar.vue');\nconst UserManagement = () => import(/* webpackChunkName: 'settings-users' */ '../views/UserManagement.vue');\nconst UserManagementNavigation = () => import(/* webpackChunkName: 'settings-users' */ '../views/UserManagementNavigation.vue');\nconst routes = [\n {\n name: 'users',\n path: '/:index(index.php/)?settings/users',\n components: {\n default: UserManagement,\n navigation: UserManagementNavigation,\n },\n props: true,\n children: [\n {\n path: ':selectedGroup',\n name: 'group',\n },\n ],\n },\n {\n path: '/:index(index.php/)?settings/apps',\n name: 'apps',\n // redirect to our default route - the app discover section\n redirect: {\n name: 'apps-category',\n params: {\n category: 'discover',\n },\n },\n components: {\n default: AppStore,\n navigation: AppStoreNavigation,\n sidebar: AppStoreSidebar,\n },\n children: [\n {\n path: ':category',\n name: 'apps-category',\n children: [\n {\n path: ':id',\n name: 'apps-details',\n },\n ],\n },\n ],\n },\n];\nexport default routes;\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue';\nimport Router from 'vue-router';\nimport { generateUrl } from '@nextcloud/router';\nimport routes from './routes.ts';\nVue.use(Router);\nconst router = new Router({\n mode: 'history',\n // if index.php is in the url AND we got this far, then it's working:\n // let's keep using index.php in the url\n base: generateUrl(''),\n linkActiveClass: 'active',\n routes,\n});\nexport default router;\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author rakekniven <mark.ziegler@rakekniven.de>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue';\nimport VTooltip from 'v-tooltip';\nimport { sync } from 'vuex-router-sync';\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n';\nimport SettingsApp from './views/SettingsApp.vue';\nimport router from './router/index.ts';\nimport { useStore } from './store/index.js';\nimport { getRequestToken } from '@nextcloud/auth';\nimport { PiniaVuePlugin, createPinia } from 'pinia';\nVue.use(VTooltip, { defaultHtml: false });\nconst store = useStore();\nsync(store, router);\n// CSP config for webpack dynamic chunk loading\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken() ?? '');\n// bind to window\nVue.prototype.t = t;\nVue.prototype.n = n;\nVue.use(PiniaVuePlugin);\nconst pinia = createPinia();\nexport default new Vue({\n router,\n store,\n pinia,\n render: h => h(SettingsApp),\n el: '#content',\n});\n","/*!\n * vue-router v3.6.5\n * (c) 2022 Evan You\n * @license MIT\n */\n/* */\n\nfunction assert (condition, message) {\n if (!condition) {\n throw new Error((\"[vue-router] \" + message))\n }\n}\n\nfunction warn (condition, message) {\n if (!condition) {\n typeof console !== 'undefined' && console.warn((\"[vue-router] \" + message));\n }\n}\n\nfunction extend (a, b) {\n for (var key in b) {\n a[key] = b[key];\n }\n return a\n}\n\n/* */\n\nvar encodeReserveRE = /[!'()*]/g;\nvar encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); };\nvar commaRE = /%2C/g;\n\n// fixed encodeURIComponent which is more conformant to RFC3986:\n// - escapes [!'()*]\n// - preserve commas\nvar encode = function (str) { return encodeURIComponent(str)\n .replace(encodeReserveRE, encodeReserveReplacer)\n .replace(commaRE, ','); };\n\nfunction decode (str) {\n try {\n return decodeURIComponent(str)\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, (\"Error decoding \\\"\" + str + \"\\\". Leaving it intact.\"));\n }\n }\n return str\n}\n\nfunction resolveQuery (\n query,\n extraQuery,\n _parseQuery\n) {\n if ( extraQuery === void 0 ) extraQuery = {};\n\n var parse = _parseQuery || parseQuery;\n var parsedQuery;\n try {\n parsedQuery = parse(query || '');\n } catch (e) {\n process.env.NODE_ENV !== 'production' && warn(false, e.message);\n parsedQuery = {};\n }\n for (var key in extraQuery) {\n var value = extraQuery[key];\n parsedQuery[key] = Array.isArray(value)\n ? value.map(castQueryParamValue)\n : castQueryParamValue(value);\n }\n return parsedQuery\n}\n\nvar castQueryParamValue = function (value) { return (value == null || typeof value === 'object' ? value : String(value)); };\n\nfunction parseQuery (query) {\n var res = {};\n\n query = query.trim().replace(/^(\\?|#|&)/, '');\n\n if (!query) {\n return res\n }\n\n query.split('&').forEach(function (param) {\n var parts = param.replace(/\\+/g, ' ').split('=');\n var key = decode(parts.shift());\n var val = parts.length > 0 ? decode(parts.join('=')) : null;\n\n if (res[key] === undefined) {\n res[key] = val;\n } else if (Array.isArray(res[key])) {\n res[key].push(val);\n } else {\n res[key] = [res[key], val];\n }\n });\n\n return res\n}\n\nfunction stringifyQuery (obj) {\n var res = obj\n ? Object.keys(obj)\n .map(function (key) {\n var val = obj[key];\n\n if (val === undefined) {\n return ''\n }\n\n if (val === null) {\n return encode(key)\n }\n\n if (Array.isArray(val)) {\n var result = [];\n val.forEach(function (val2) {\n if (val2 === undefined) {\n return\n }\n if (val2 === null) {\n result.push(encode(key));\n } else {\n result.push(encode(key) + '=' + encode(val2));\n }\n });\n return result.join('&')\n }\n\n return encode(key) + '=' + encode(val)\n })\n .filter(function (x) { return x.length > 0; })\n .join('&')\n : null;\n return res ? (\"?\" + res) : ''\n}\n\n/* */\n\nvar trailingSlashRE = /\\/?$/;\n\nfunction createRoute (\n record,\n location,\n redirectedFrom,\n router\n) {\n var stringifyQuery = router && router.options.stringifyQuery;\n\n var query = location.query || {};\n try {\n query = clone(query);\n } catch (e) {}\n\n var route = {\n name: location.name || (record && record.name),\n meta: (record && record.meta) || {},\n path: location.path || '/',\n hash: location.hash || '',\n query: query,\n params: location.params || {},\n fullPath: getFullPath(location, stringifyQuery),\n matched: record ? formatMatch(record) : []\n };\n if (redirectedFrom) {\n route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery);\n }\n return Object.freeze(route)\n}\n\nfunction clone (value) {\n if (Array.isArray(value)) {\n return value.map(clone)\n } else if (value && typeof value === 'object') {\n var res = {};\n for (var key in value) {\n res[key] = clone(value[key]);\n }\n return res\n } else {\n return value\n }\n}\n\n// the starting route that represents the initial state\nvar START = createRoute(null, {\n path: '/'\n});\n\nfunction formatMatch (record) {\n var res = [];\n while (record) {\n res.unshift(record);\n record = record.parent;\n }\n return res\n}\n\nfunction getFullPath (\n ref,\n _stringifyQuery\n) {\n var path = ref.path;\n var query = ref.query; if ( query === void 0 ) query = {};\n var hash = ref.hash; if ( hash === void 0 ) hash = '';\n\n var stringify = _stringifyQuery || stringifyQuery;\n return (path || '/') + stringify(query) + hash\n}\n\nfunction isSameRoute (a, b, onlyPath) {\n if (b === START) {\n return a === b\n } else if (!b) {\n return false\n } else if (a.path && b.path) {\n return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath ||\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query))\n } else if (a.name && b.name) {\n return (\n a.name === b.name &&\n (onlyPath || (\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query) &&\n isObjectEqual(a.params, b.params))\n )\n )\n } else {\n return false\n }\n}\n\nfunction isObjectEqual (a, b) {\n if ( a === void 0 ) a = {};\n if ( b === void 0 ) b = {};\n\n // handle null value #1566\n if (!a || !b) { return a === b }\n var aKeys = Object.keys(a).sort();\n var bKeys = Object.keys(b).sort();\n if (aKeys.length !== bKeys.length) {\n return false\n }\n return aKeys.every(function (key, i) {\n var aVal = a[key];\n var bKey = bKeys[i];\n if (bKey !== key) { return false }\n var bVal = b[key];\n // query values can be null and undefined\n if (aVal == null || bVal == null) { return aVal === bVal }\n // check nested equality\n if (typeof aVal === 'object' && typeof bVal === 'object') {\n return isObjectEqual(aVal, bVal)\n }\n return String(aVal) === String(bVal)\n })\n}\n\nfunction isIncludedRoute (current, target) {\n return (\n current.path.replace(trailingSlashRE, '/').indexOf(\n target.path.replace(trailingSlashRE, '/')\n ) === 0 &&\n (!target.hash || current.hash === target.hash) &&\n queryIncludes(current.query, target.query)\n )\n}\n\nfunction queryIncludes (current, target) {\n for (var key in target) {\n if (!(key in current)) {\n return false\n }\n }\n return true\n}\n\nfunction handleRouteEntered (route) {\n for (var i = 0; i < route.matched.length; i++) {\n var record = route.matched[i];\n for (var name in record.instances) {\n var instance = record.instances[name];\n var cbs = record.enteredCbs[name];\n if (!instance || !cbs) { continue }\n delete record.enteredCbs[name];\n for (var i$1 = 0; i$1 < cbs.length; i$1++) {\n if (!instance._isBeingDestroyed) { cbs[i$1](instance); }\n }\n }\n }\n}\n\nvar View = {\n name: 'RouterView',\n functional: true,\n props: {\n name: {\n type: String,\n default: 'default'\n }\n },\n render: function render (_, ref) {\n var props = ref.props;\n var children = ref.children;\n var parent = ref.parent;\n var data = ref.data;\n\n // used by devtools to display a router-view badge\n data.routerView = true;\n\n // directly use parent context's createElement() function\n // so that components rendered by router-view can resolve named slots\n var h = parent.$createElement;\n var name = props.name;\n var route = parent.$route;\n var cache = parent._routerViewCache || (parent._routerViewCache = {});\n\n // determine current view depth, also check to see if the tree\n // has been toggled inactive but kept-alive.\n var depth = 0;\n var inactive = false;\n while (parent && parent._routerRoot !== parent) {\n var vnodeData = parent.$vnode ? parent.$vnode.data : {};\n if (vnodeData.routerView) {\n depth++;\n }\n if (vnodeData.keepAlive && parent._directInactive && parent._inactive) {\n inactive = true;\n }\n parent = parent.$parent;\n }\n data.routerViewDepth = depth;\n\n // render previous view if the tree is inactive and kept-alive\n if (inactive) {\n var cachedData = cache[name];\n var cachedComponent = cachedData && cachedData.component;\n if (cachedComponent) {\n // #2301\n // pass props\n if (cachedData.configProps) {\n fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps);\n }\n return h(cachedComponent, data, children)\n } else {\n // render previous empty view\n return h()\n }\n }\n\n var matched = route.matched[depth];\n var component = matched && matched.components[name];\n\n // render empty node if no matched route or no config component\n if (!matched || !component) {\n cache[name] = null;\n return h()\n }\n\n // cache component\n cache[name] = { component: component };\n\n // attach instance registration hook\n // this will be called in the instance's injected lifecycle hooks\n data.registerRouteInstance = function (vm, val) {\n // val could be undefined for unregistration\n var current = matched.instances[name];\n if (\n (val && current !== vm) ||\n (!val && current === vm)\n ) {\n matched.instances[name] = val;\n }\n }\n\n // also register instance in prepatch hook\n // in case the same component instance is reused across different routes\n ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) {\n matched.instances[name] = vnode.componentInstance;\n };\n\n // register instance in init hook\n // in case kept-alive component be actived when routes changed\n data.hook.init = function (vnode) {\n if (vnode.data.keepAlive &&\n vnode.componentInstance &&\n vnode.componentInstance !== matched.instances[name]\n ) {\n matched.instances[name] = vnode.componentInstance;\n }\n\n // if the route transition has already been confirmed then we weren't\n // able to call the cbs during confirmation as the component was not\n // registered yet, so we call it here.\n handleRouteEntered(route);\n };\n\n var configProps = matched.props && matched.props[name];\n // save route and configProps in cache\n if (configProps) {\n extend(cache[name], {\n route: route,\n configProps: configProps\n });\n fillPropsinData(component, data, route, configProps);\n }\n\n return h(component, data, children)\n }\n};\n\nfunction fillPropsinData (component, data, route, configProps) {\n // resolve props\n var propsToPass = data.props = resolveProps(route, configProps);\n if (propsToPass) {\n // clone to prevent mutation\n propsToPass = data.props = extend({}, propsToPass);\n // pass non-declared props as attrs\n var attrs = data.attrs = data.attrs || {};\n for (var key in propsToPass) {\n if (!component.props || !(key in component.props)) {\n attrs[key] = propsToPass[key];\n delete propsToPass[key];\n }\n }\n }\n}\n\nfunction resolveProps (route, config) {\n switch (typeof config) {\n case 'undefined':\n return\n case 'object':\n return config\n case 'function':\n return config(route)\n case 'boolean':\n return config ? route.params : undefined\n default:\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false,\n \"props in \\\"\" + (route.path) + \"\\\" is a \" + (typeof config) + \", \" +\n \"expecting an object, function or boolean.\"\n );\n }\n }\n}\n\n/* */\n\nfunction resolvePath (\n relative,\n base,\n append\n) {\n var firstChar = relative.charAt(0);\n if (firstChar === '/') {\n return relative\n }\n\n if (firstChar === '?' || firstChar === '#') {\n return base + relative\n }\n\n var stack = base.split('/');\n\n // remove trailing segment if:\n // - not appending\n // - appending to trailing slash (last segment is empty)\n if (!append || !stack[stack.length - 1]) {\n stack.pop();\n }\n\n // resolve relative path\n var segments = relative.replace(/^\\//, '').split('/');\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n if (segment === '..') {\n stack.pop();\n } else if (segment !== '.') {\n stack.push(segment);\n }\n }\n\n // ensure leading slash\n if (stack[0] !== '') {\n stack.unshift('');\n }\n\n return stack.join('/')\n}\n\nfunction parsePath (path) {\n var hash = '';\n var query = '';\n\n var hashIndex = path.indexOf('#');\n if (hashIndex >= 0) {\n hash = path.slice(hashIndex);\n path = path.slice(0, hashIndex);\n }\n\n var queryIndex = path.indexOf('?');\n if (queryIndex >= 0) {\n query = path.slice(queryIndex + 1);\n path = path.slice(0, queryIndex);\n }\n\n return {\n path: path,\n query: query,\n hash: hash\n }\n}\n\nfunction cleanPath (path) {\n return path.replace(/\\/(?:\\s*\\/)+/g, '/')\n}\n\nvar isarray = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n/**\n * Expose `pathToRegexp`.\n */\nvar pathToRegexp_1 = pathToRegexp;\nvar parse_1 = parse;\nvar compile_1 = compile;\nvar tokensToFunction_1 = tokensToFunction;\nvar tokensToRegExp_1 = tokensToRegExp;\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g');\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = [];\n var key = 0;\n var index = 0;\n var path = '';\n var defaultDelimiter = options && options.delimiter || '/';\n var res;\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0];\n var escaped = res[1];\n var offset = res.index;\n path += str.slice(index, offset);\n index = offset + m.length;\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1];\n continue\n }\n\n var next = str[index];\n var prefix = res[2];\n var name = res[3];\n var capture = res[4];\n var group = res[5];\n var modifier = res[6];\n var asterisk = res[7];\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path);\n path = '';\n }\n\n var partial = prefix != null && next != null && next !== prefix;\n var repeat = modifier === '+' || modifier === '*';\n var optional = modifier === '?' || modifier === '*';\n var delimiter = res[2] || defaultDelimiter;\n var pattern = capture || group;\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n });\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index);\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path);\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length);\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options));\n }\n }\n\n return function (obj, opts) {\n var path = '';\n var data = obj || {};\n var options = opts || {};\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n path += token;\n\n continue\n }\n\n var value = data[token.name];\n var segment;\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix;\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j]);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment;\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment;\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys;\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g);\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n });\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = [];\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source);\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n var strict = options.strict;\n var end = options.end !== false;\n var route = '';\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n route += escapeString(token);\n } else {\n var prefix = escapeString(token.prefix);\n var capture = '(?:' + token.pattern + ')';\n\n keys.push(token);\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*';\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?';\n } else {\n capture = prefix + '(' + capture + ')?';\n }\n } else {\n capture = prefix + '(' + capture + ')';\n }\n\n route += capture;\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/');\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';\n }\n\n if (end) {\n route += '$';\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\npathToRegexp_1.parse = parse_1;\npathToRegexp_1.compile = compile_1;\npathToRegexp_1.tokensToFunction = tokensToFunction_1;\npathToRegexp_1.tokensToRegExp = tokensToRegExp_1;\n\n/* */\n\n// $flow-disable-line\nvar regexpCompileCache = Object.create(null);\n\nfunction fillParams (\n path,\n params,\n routeMsg\n) {\n params = params || {};\n try {\n var filler =\n regexpCompileCache[path] ||\n (regexpCompileCache[path] = pathToRegexp_1.compile(path));\n\n // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }}\n // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string\n if (typeof params.pathMatch === 'string') { params[0] = params.pathMatch; }\n\n return filler(params, { pretty: true })\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n // Fix #3072 no warn if `pathMatch` is string\n warn(typeof params.pathMatch === 'string', (\"missing param for \" + routeMsg + \": \" + (e.message)));\n }\n return ''\n } finally {\n // delete the 0 if it was added\n delete params[0];\n }\n}\n\n/* */\n\nfunction normalizeLocation (\n raw,\n current,\n append,\n router\n) {\n var next = typeof raw === 'string' ? { path: raw } : raw;\n // named target\n if (next._normalized) {\n return next\n } else if (next.name) {\n next = extend({}, raw);\n var params = next.params;\n if (params && typeof params === 'object') {\n next.params = extend({}, params);\n }\n return next\n }\n\n // relative params\n if (!next.path && next.params && current) {\n next = extend({}, next);\n next._normalized = true;\n var params$1 = extend(extend({}, current.params), next.params);\n if (current.name) {\n next.name = current.name;\n next.params = params$1;\n } else if (current.matched.length) {\n var rawPath = current.matched[current.matched.length - 1].path;\n next.path = fillParams(rawPath, params$1, (\"path \" + (current.path)));\n } else if (process.env.NODE_ENV !== 'production') {\n warn(false, \"relative params navigation requires a current route.\");\n }\n return next\n }\n\n var parsedPath = parsePath(next.path || '');\n var basePath = (current && current.path) || '/';\n var path = parsedPath.path\n ? resolvePath(parsedPath.path, basePath, append || next.append)\n : basePath;\n\n var query = resolveQuery(\n parsedPath.query,\n next.query,\n router && router.options.parseQuery\n );\n\n var hash = next.hash || parsedPath.hash;\n if (hash && hash.charAt(0) !== '#') {\n hash = \"#\" + hash;\n }\n\n return {\n _normalized: true,\n path: path,\n query: query,\n hash: hash\n }\n}\n\n/* */\n\n// work around weird flow bug\nvar toTypes = [String, Object];\nvar eventTypes = [String, Array];\n\nvar noop = function () {};\n\nvar warnedCustomSlot;\nvar warnedTagProp;\nvar warnedEventProp;\n\nvar Link = {\n name: 'RouterLink',\n props: {\n to: {\n type: toTypes,\n required: true\n },\n tag: {\n type: String,\n default: 'a'\n },\n custom: Boolean,\n exact: Boolean,\n exactPath: Boolean,\n append: Boolean,\n replace: Boolean,\n activeClass: String,\n exactActiveClass: String,\n ariaCurrentValue: {\n type: String,\n default: 'page'\n },\n event: {\n type: eventTypes,\n default: 'click'\n }\n },\n render: function render (h) {\n var this$1$1 = this;\n\n var router = this.$router;\n var current = this.$route;\n var ref = router.resolve(\n this.to,\n current,\n this.append\n );\n var location = ref.location;\n var route = ref.route;\n var href = ref.href;\n\n var classes = {};\n var globalActiveClass = router.options.linkActiveClass;\n var globalExactActiveClass = router.options.linkExactActiveClass;\n // Support global empty active class\n var activeClassFallback =\n globalActiveClass == null ? 'router-link-active' : globalActiveClass;\n var exactActiveClassFallback =\n globalExactActiveClass == null\n ? 'router-link-exact-active'\n : globalExactActiveClass;\n var activeClass =\n this.activeClass == null ? activeClassFallback : this.activeClass;\n var exactActiveClass =\n this.exactActiveClass == null\n ? exactActiveClassFallback\n : this.exactActiveClass;\n\n var compareTarget = route.redirectedFrom\n ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router)\n : route;\n\n classes[exactActiveClass] = isSameRoute(current, compareTarget, this.exactPath);\n classes[activeClass] = this.exact || this.exactPath\n ? classes[exactActiveClass]\n : isIncludedRoute(current, compareTarget);\n\n var ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null;\n\n var handler = function (e) {\n if (guardEvent(e)) {\n if (this$1$1.replace) {\n router.replace(location, noop);\n } else {\n router.push(location, noop);\n }\n }\n };\n\n var on = { click: guardEvent };\n if (Array.isArray(this.event)) {\n this.event.forEach(function (e) {\n on[e] = handler;\n });\n } else {\n on[this.event] = handler;\n }\n\n var data = { class: classes };\n\n var scopedSlot =\n !this.$scopedSlots.$hasNormal &&\n this.$scopedSlots.default &&\n this.$scopedSlots.default({\n href: href,\n route: route,\n navigate: handler,\n isActive: classes[activeClass],\n isExactActive: classes[exactActiveClass]\n });\n\n if (scopedSlot) {\n if (process.env.NODE_ENV !== 'production' && !this.custom) {\n !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an <a> element. Use the custom prop to remove this warning:\\n<router-link v-slot=\"{ navigate, href }\" custom></router-link>\\n');\n warnedCustomSlot = true;\n }\n if (scopedSlot.length === 1) {\n return scopedSlot[0]\n } else if (scopedSlot.length > 1 || !scopedSlot.length) {\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false,\n (\"<router-link> with to=\\\"\" + (this.to) + \"\\\" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.\")\n );\n }\n return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot)\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if ('tag' in this.$options.propsData && !warnedTagProp) {\n warn(\n false,\n \"<router-link>'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.\"\n );\n warnedTagProp = true;\n }\n if ('event' in this.$options.propsData && !warnedEventProp) {\n warn(\n false,\n \"<router-link>'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.\"\n );\n warnedEventProp = true;\n }\n }\n\n if (this.tag === 'a') {\n data.on = on;\n data.attrs = { href: href, 'aria-current': ariaCurrentValue };\n } else {\n // find the first <a> child and apply listener and href\n var a = findAnchor(this.$slots.default);\n if (a) {\n // in case the <a> is a static node\n a.isStatic = false;\n var aData = (a.data = extend({}, a.data));\n aData.on = aData.on || {};\n // transform existing events in both objects into arrays so we can push later\n for (var event in aData.on) {\n var handler$1 = aData.on[event];\n if (event in on) {\n aData.on[event] = Array.isArray(handler$1) ? handler$1 : [handler$1];\n }\n }\n // append new listeners for router-link\n for (var event$1 in on) {\n if (event$1 in aData.on) {\n // on[event] is always a function\n aData.on[event$1].push(on[event$1]);\n } else {\n aData.on[event$1] = handler;\n }\n }\n\n var aAttrs = (a.data.attrs = extend({}, a.data.attrs));\n aAttrs.href = href;\n aAttrs['aria-current'] = ariaCurrentValue;\n } else {\n // doesn't have <a> child, apply listener to self\n data.on = on;\n }\n }\n\n return h(this.tag, data, this.$slots.default)\n }\n};\n\nfunction guardEvent (e) {\n // don't redirect with control keys\n if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return }\n // don't redirect when preventDefault called\n if (e.defaultPrevented) { return }\n // don't redirect on right click\n if (e.button !== undefined && e.button !== 0) { return }\n // don't redirect if `target=\"_blank\"`\n if (e.currentTarget && e.currentTarget.getAttribute) {\n var target = e.currentTarget.getAttribute('target');\n if (/\\b_blank\\b/i.test(target)) { return }\n }\n // this may be a Weex event which doesn't have this method\n if (e.preventDefault) {\n e.preventDefault();\n }\n return true\n}\n\nfunction findAnchor (children) {\n if (children) {\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (child.tag === 'a') {\n return child\n }\n if (child.children && (child = findAnchor(child.children))) {\n return child\n }\n }\n }\n}\n\nvar _Vue;\n\nfunction install (Vue) {\n if (install.installed && _Vue === Vue) { return }\n install.installed = true;\n\n _Vue = Vue;\n\n var isDef = function (v) { return v !== undefined; };\n\n var registerInstance = function (vm, callVal) {\n var i = vm.$options._parentVnode;\n if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {\n i(vm, callVal);\n }\n };\n\n Vue.mixin({\n beforeCreate: function beforeCreate () {\n if (isDef(this.$options.router)) {\n this._routerRoot = this;\n this._router = this.$options.router;\n this._router.init(this);\n Vue.util.defineReactive(this, '_route', this._router.history.current);\n } else {\n this._routerRoot = (this.$parent && this.$parent._routerRoot) || this;\n }\n registerInstance(this, this);\n },\n destroyed: function destroyed () {\n registerInstance(this);\n }\n });\n\n Object.defineProperty(Vue.prototype, '$router', {\n get: function get () { return this._routerRoot._router }\n });\n\n Object.defineProperty(Vue.prototype, '$route', {\n get: function get () { return this._routerRoot._route }\n });\n\n Vue.component('RouterView', View);\n Vue.component('RouterLink', Link);\n\n var strats = Vue.config.optionMergeStrategies;\n // use the same hook merging strategy for route hooks\n strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created;\n}\n\n/* */\n\nvar inBrowser = typeof window !== 'undefined';\n\n/* */\n\nfunction createRouteMap (\n routes,\n oldPathList,\n oldPathMap,\n oldNameMap,\n parentRoute\n) {\n // the path list is used to control path matching priority\n var pathList = oldPathList || [];\n // $flow-disable-line\n var pathMap = oldPathMap || Object.create(null);\n // $flow-disable-line\n var nameMap = oldNameMap || Object.create(null);\n\n routes.forEach(function (route) {\n addRouteRecord(pathList, pathMap, nameMap, route, parentRoute);\n });\n\n // ensure wildcard routes are always at the end\n for (var i = 0, l = pathList.length; i < l; i++) {\n if (pathList[i] === '*') {\n pathList.push(pathList.splice(i, 1)[0]);\n l--;\n i--;\n }\n }\n\n if (process.env.NODE_ENV === 'development') {\n // warn if routes do not include leading slashes\n var found = pathList\n // check for missing leading slash\n .filter(function (path) { return path && path.charAt(0) !== '*' && path.charAt(0) !== '/'; });\n\n if (found.length > 0) {\n var pathNames = found.map(function (path) { return (\"- \" + path); }).join('\\n');\n warn(false, (\"Non-nested routes must include a leading slash character. Fix the following routes: \\n\" + pathNames));\n }\n }\n\n return {\n pathList: pathList,\n pathMap: pathMap,\n nameMap: nameMap\n }\n}\n\nfunction addRouteRecord (\n pathList,\n pathMap,\n nameMap,\n route,\n parent,\n matchAs\n) {\n var path = route.path;\n var name = route.name;\n if (process.env.NODE_ENV !== 'production') {\n assert(path != null, \"\\\"path\\\" is required in a route configuration.\");\n assert(\n typeof route.component !== 'string',\n \"route config \\\"component\\\" for path: \" + (String(\n path || name\n )) + \" cannot be a \" + \"string id. Use an actual component instead.\"\n );\n\n warn(\n // eslint-disable-next-line no-control-regex\n !/[^\\u0000-\\u007F]+/.test(path),\n \"Route with path \\\"\" + path + \"\\\" contains unencoded characters, make sure \" +\n \"your path is correctly encoded before passing it to the router. Use \" +\n \"encodeURI to encode static segments of your path.\"\n );\n }\n\n var pathToRegexpOptions =\n route.pathToRegexpOptions || {};\n var normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict);\n\n if (typeof route.caseSensitive === 'boolean') {\n pathToRegexpOptions.sensitive = route.caseSensitive;\n }\n\n var record = {\n path: normalizedPath,\n regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),\n components: route.components || { default: route.component },\n alias: route.alias\n ? typeof route.alias === 'string'\n ? [route.alias]\n : route.alias\n : [],\n instances: {},\n enteredCbs: {},\n name: name,\n parent: parent,\n matchAs: matchAs,\n redirect: route.redirect,\n beforeEnter: route.beforeEnter,\n meta: route.meta || {},\n props:\n route.props == null\n ? {}\n : route.components\n ? route.props\n : { default: route.props }\n };\n\n if (route.children) {\n // Warn if route is named, does not redirect and has a default child route.\n // If users navigate to this route by name, the default child will\n // not be rendered (GH Issue #629)\n if (process.env.NODE_ENV !== 'production') {\n if (\n route.name &&\n !route.redirect &&\n route.children.some(function (child) { return /^\\/?$/.test(child.path); })\n ) {\n warn(\n false,\n \"Named Route '\" + (route.name) + \"' has a default child route. \" +\n \"When navigating to this named route (:to=\\\"{name: '\" + (route.name) + \"'}\\\"), \" +\n \"the default child route will not be rendered. Remove the name from \" +\n \"this route and use the name of the default child route for named \" +\n \"links instead.\"\n );\n }\n }\n route.children.forEach(function (child) {\n var childMatchAs = matchAs\n ? cleanPath((matchAs + \"/\" + (child.path)))\n : undefined;\n addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs);\n });\n }\n\n if (!pathMap[record.path]) {\n pathList.push(record.path);\n pathMap[record.path] = record;\n }\n\n if (route.alias !== undefined) {\n var aliases = Array.isArray(route.alias) ? route.alias : [route.alias];\n for (var i = 0; i < aliases.length; ++i) {\n var alias = aliases[i];\n if (process.env.NODE_ENV !== 'production' && alias === path) {\n warn(\n false,\n (\"Found an alias with the same value as the path: \\\"\" + path + \"\\\". You have to remove that alias. It will be ignored in development.\")\n );\n // skip in dev to make it work\n continue\n }\n\n var aliasRoute = {\n path: alias,\n children: route.children\n };\n addRouteRecord(\n pathList,\n pathMap,\n nameMap,\n aliasRoute,\n parent,\n record.path || '/' // matchAs\n );\n }\n }\n\n if (name) {\n if (!nameMap[name]) {\n nameMap[name] = record;\n } else if (process.env.NODE_ENV !== 'production' && !matchAs) {\n warn(\n false,\n \"Duplicate named routes definition: \" +\n \"{ name: \\\"\" + name + \"\\\", path: \\\"\" + (record.path) + \"\\\" }\"\n );\n }\n }\n}\n\nfunction compileRouteRegex (\n path,\n pathToRegexpOptions\n) {\n var regex = pathToRegexp_1(path, [], pathToRegexpOptions);\n if (process.env.NODE_ENV !== 'production') {\n var keys = Object.create(null);\n regex.keys.forEach(function (key) {\n warn(\n !keys[key.name],\n (\"Duplicate param keys in route with path: \\\"\" + path + \"\\\"\")\n );\n keys[key.name] = true;\n });\n }\n return regex\n}\n\nfunction normalizePath (\n path,\n parent,\n strict\n) {\n if (!strict) { path = path.replace(/\\/$/, ''); }\n if (path[0] === '/') { return path }\n if (parent == null) { return path }\n return cleanPath(((parent.path) + \"/\" + path))\n}\n\n/* */\n\n\n\nfunction createMatcher (\n routes,\n router\n) {\n var ref = createRouteMap(routes);\n var pathList = ref.pathList;\n var pathMap = ref.pathMap;\n var nameMap = ref.nameMap;\n\n function addRoutes (routes) {\n createRouteMap(routes, pathList, pathMap, nameMap);\n }\n\n function addRoute (parentOrRoute, route) {\n var parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined;\n // $flow-disable-line\n createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent);\n\n // add aliases of parent\n if (parent && parent.alias.length) {\n createRouteMap(\n // $flow-disable-line route is defined if parent is\n parent.alias.map(function (alias) { return ({ path: alias, children: [route] }); }),\n pathList,\n pathMap,\n nameMap,\n parent\n );\n }\n }\n\n function getRoutes () {\n return pathList.map(function (path) { return pathMap[path]; })\n }\n\n function match (\n raw,\n currentRoute,\n redirectedFrom\n ) {\n var location = normalizeLocation(raw, currentRoute, false, router);\n var name = location.name;\n\n if (name) {\n var record = nameMap[name];\n if (process.env.NODE_ENV !== 'production') {\n warn(record, (\"Route with name '\" + name + \"' does not exist\"));\n }\n if (!record) { return _createRoute(null, location) }\n var paramNames = record.regex.keys\n .filter(function (key) { return !key.optional; })\n .map(function (key) { return key.name; });\n\n if (typeof location.params !== 'object') {\n location.params = {};\n }\n\n if (currentRoute && typeof currentRoute.params === 'object') {\n for (var key in currentRoute.params) {\n if (!(key in location.params) && paramNames.indexOf(key) > -1) {\n location.params[key] = currentRoute.params[key];\n }\n }\n }\n\n location.path = fillParams(record.path, location.params, (\"named route \\\"\" + name + \"\\\"\"));\n return _createRoute(record, location, redirectedFrom)\n } else if (location.path) {\n location.params = {};\n for (var i = 0; i < pathList.length; i++) {\n var path = pathList[i];\n var record$1 = pathMap[path];\n if (matchRoute(record$1.regex, location.path, location.params)) {\n return _createRoute(record$1, location, redirectedFrom)\n }\n }\n }\n // no match\n return _createRoute(null, location)\n }\n\n function redirect (\n record,\n location\n ) {\n var originalRedirect = record.redirect;\n var redirect = typeof originalRedirect === 'function'\n ? originalRedirect(createRoute(record, location, null, router))\n : originalRedirect;\n\n if (typeof redirect === 'string') {\n redirect = { path: redirect };\n }\n\n if (!redirect || typeof redirect !== 'object') {\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false, (\"invalid redirect option: \" + (JSON.stringify(redirect)))\n );\n }\n return _createRoute(null, location)\n }\n\n var re = redirect;\n var name = re.name;\n var path = re.path;\n var query = location.query;\n var hash = location.hash;\n var params = location.params;\n query = re.hasOwnProperty('query') ? re.query : query;\n hash = re.hasOwnProperty('hash') ? re.hash : hash;\n params = re.hasOwnProperty('params') ? re.params : params;\n\n if (name) {\n // resolved named direct\n var targetRecord = nameMap[name];\n if (process.env.NODE_ENV !== 'production') {\n assert(targetRecord, (\"redirect failed: named route \\\"\" + name + \"\\\" not found.\"));\n }\n return match({\n _normalized: true,\n name: name,\n query: query,\n hash: hash,\n params: params\n }, undefined, location)\n } else if (path) {\n // 1. resolve relative redirect\n var rawPath = resolveRecordPath(path, record);\n // 2. resolve params\n var resolvedPath = fillParams(rawPath, params, (\"redirect route with path \\\"\" + rawPath + \"\\\"\"));\n // 3. rematch with existing query and hash\n return match({\n _normalized: true,\n path: resolvedPath,\n query: query,\n hash: hash\n }, undefined, location)\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, (\"invalid redirect option: \" + (JSON.stringify(redirect))));\n }\n return _createRoute(null, location)\n }\n }\n\n function alias (\n record,\n location,\n matchAs\n ) {\n var aliasedPath = fillParams(matchAs, location.params, (\"aliased route with path \\\"\" + matchAs + \"\\\"\"));\n var aliasedMatch = match({\n _normalized: true,\n path: aliasedPath\n });\n if (aliasedMatch) {\n var matched = aliasedMatch.matched;\n var aliasedRecord = matched[matched.length - 1];\n location.params = aliasedMatch.params;\n return _createRoute(aliasedRecord, location)\n }\n return _createRoute(null, location)\n }\n\n function _createRoute (\n record,\n location,\n redirectedFrom\n ) {\n if (record && record.redirect) {\n return redirect(record, redirectedFrom || location)\n }\n if (record && record.matchAs) {\n return alias(record, location, record.matchAs)\n }\n return createRoute(record, location, redirectedFrom, router)\n }\n\n return {\n match: match,\n addRoute: addRoute,\n getRoutes: getRoutes,\n addRoutes: addRoutes\n }\n}\n\nfunction matchRoute (\n regex,\n path,\n params\n) {\n var m = path.match(regex);\n\n if (!m) {\n return false\n } else if (!params) {\n return true\n }\n\n for (var i = 1, len = m.length; i < len; ++i) {\n var key = regex.keys[i - 1];\n if (key) {\n // Fix #1994: using * with props: true generates a param named 0\n params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i];\n }\n }\n\n return true\n}\n\nfunction resolveRecordPath (path, record) {\n return resolvePath(path, record.parent ? record.parent.path : '/', true)\n}\n\n/* */\n\n// use User Timing api (if present) for more accurate key precision\nvar Time =\n inBrowser && window.performance && window.performance.now\n ? window.performance\n : Date;\n\nfunction genStateKey () {\n return Time.now().toFixed(3)\n}\n\nvar _key = genStateKey();\n\nfunction getStateKey () {\n return _key\n}\n\nfunction setStateKey (key) {\n return (_key = key)\n}\n\n/* */\n\nvar positionStore = Object.create(null);\n\nfunction setupScroll () {\n // Prevent browser scroll behavior on History popstate\n if ('scrollRestoration' in window.history) {\n window.history.scrollRestoration = 'manual';\n }\n // Fix for #1585 for Firefox\n // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678\n // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with\n // window.location.protocol + '//' + window.location.host\n // location.host contains the port and location.hostname doesn't\n var protocolAndPath = window.location.protocol + '//' + window.location.host;\n var absolutePath = window.location.href.replace(protocolAndPath, '');\n // preserve existing history state as it could be overriden by the user\n var stateCopy = extend({}, window.history.state);\n stateCopy.key = getStateKey();\n window.history.replaceState(stateCopy, '', absolutePath);\n window.addEventListener('popstate', handlePopState);\n return function () {\n window.removeEventListener('popstate', handlePopState);\n }\n}\n\nfunction handleScroll (\n router,\n to,\n from,\n isPop\n) {\n if (!router.app) {\n return\n }\n\n var behavior = router.options.scrollBehavior;\n if (!behavior) {\n return\n }\n\n if (process.env.NODE_ENV !== 'production') {\n assert(typeof behavior === 'function', \"scrollBehavior must be a function\");\n }\n\n // wait until re-render finishes before scrolling\n router.app.$nextTick(function () {\n var position = getScrollPosition();\n var shouldScroll = behavior.call(\n router,\n to,\n from,\n isPop ? position : null\n );\n\n if (!shouldScroll) {\n return\n }\n\n if (typeof shouldScroll.then === 'function') {\n shouldScroll\n .then(function (shouldScroll) {\n scrollToPosition((shouldScroll), position);\n })\n .catch(function (err) {\n if (process.env.NODE_ENV !== 'production') {\n assert(false, err.toString());\n }\n });\n } else {\n scrollToPosition(shouldScroll, position);\n }\n });\n}\n\nfunction saveScrollPosition () {\n var key = getStateKey();\n if (key) {\n positionStore[key] = {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n }\n}\n\nfunction handlePopState (e) {\n saveScrollPosition();\n if (e.state && e.state.key) {\n setStateKey(e.state.key);\n }\n}\n\nfunction getScrollPosition () {\n var key = getStateKey();\n if (key) {\n return positionStore[key]\n }\n}\n\nfunction getElementPosition (el, offset) {\n var docEl = document.documentElement;\n var docRect = docEl.getBoundingClientRect();\n var elRect = el.getBoundingClientRect();\n return {\n x: elRect.left - docRect.left - offset.x,\n y: elRect.top - docRect.top - offset.y\n }\n}\n\nfunction isValidPosition (obj) {\n return isNumber(obj.x) || isNumber(obj.y)\n}\n\nfunction normalizePosition (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : window.pageXOffset,\n y: isNumber(obj.y) ? obj.y : window.pageYOffset\n }\n}\n\nfunction normalizeOffset (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : 0,\n y: isNumber(obj.y) ? obj.y : 0\n }\n}\n\nfunction isNumber (v) {\n return typeof v === 'number'\n}\n\nvar hashStartsWithNumberRE = /^#\\d/;\n\nfunction scrollToPosition (shouldScroll, position) {\n var isObject = typeof shouldScroll === 'object';\n if (isObject && typeof shouldScroll.selector === 'string') {\n // getElementById would still fail if the selector contains a more complicated query like #main[data-attr]\n // but at the same time, it doesn't make much sense to select an element with an id and an extra selector\n var el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line\n ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line\n : document.querySelector(shouldScroll.selector);\n\n if (el) {\n var offset =\n shouldScroll.offset && typeof shouldScroll.offset === 'object'\n ? shouldScroll.offset\n : {};\n offset = normalizeOffset(offset);\n position = getElementPosition(el, offset);\n } else if (isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n } else if (isObject && isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n\n if (position) {\n // $flow-disable-line\n if ('scrollBehavior' in document.documentElement.style) {\n window.scrollTo({\n left: position.x,\n top: position.y,\n // $flow-disable-line\n behavior: shouldScroll.behavior\n });\n } else {\n window.scrollTo(position.x, position.y);\n }\n }\n}\n\n/* */\n\nvar supportsPushState =\n inBrowser &&\n (function () {\n var ua = window.navigator.userAgent;\n\n if (\n (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&\n ua.indexOf('Mobile Safari') !== -1 &&\n ua.indexOf('Chrome') === -1 &&\n ua.indexOf('Windows Phone') === -1\n ) {\n return false\n }\n\n return window.history && typeof window.history.pushState === 'function'\n })();\n\nfunction pushState (url, replace) {\n saveScrollPosition();\n // try...catch the pushState call to get around Safari\n // DOM Exception 18 where it limits to 100 pushState calls\n var history = window.history;\n try {\n if (replace) {\n // preserve existing history state as it could be overriden by the user\n var stateCopy = extend({}, history.state);\n stateCopy.key = getStateKey();\n history.replaceState(stateCopy, '', url);\n } else {\n history.pushState({ key: setStateKey(genStateKey()) }, '', url);\n }\n } catch (e) {\n window.location[replace ? 'replace' : 'assign'](url);\n }\n}\n\nfunction replaceState (url) {\n pushState(url, true);\n}\n\n// When changing thing, also edit router.d.ts\nvar NavigationFailureType = {\n redirected: 2,\n aborted: 4,\n cancelled: 8,\n duplicated: 16\n};\n\nfunction createNavigationRedirectedError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.redirected,\n (\"Redirected when going from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (stringifyRoute(\n to\n )) + \"\\\" via a navigation guard.\")\n )\n}\n\nfunction createNavigationDuplicatedError (from, to) {\n var error = createRouterError(\n from,\n to,\n NavigationFailureType.duplicated,\n (\"Avoided redundant navigation to current location: \\\"\" + (from.fullPath) + \"\\\".\")\n );\n // backwards compatible with the first introduction of Errors\n error.name = 'NavigationDuplicated';\n return error\n}\n\nfunction createNavigationCancelledError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.cancelled,\n (\"Navigation cancelled from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (to.fullPath) + \"\\\" with a new navigation.\")\n )\n}\n\nfunction createNavigationAbortedError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.aborted,\n (\"Navigation aborted from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (to.fullPath) + \"\\\" via a navigation guard.\")\n )\n}\n\nfunction createRouterError (from, to, type, message) {\n var error = new Error(message);\n error._isRouter = true;\n error.from = from;\n error.to = to;\n error.type = type;\n\n return error\n}\n\nvar propertiesToLog = ['params', 'query', 'hash'];\n\nfunction stringifyRoute (to) {\n if (typeof to === 'string') { return to }\n if ('path' in to) { return to.path }\n var location = {};\n propertiesToLog.forEach(function (key) {\n if (key in to) { location[key] = to[key]; }\n });\n return JSON.stringify(location, null, 2)\n}\n\nfunction isError (err) {\n return Object.prototype.toString.call(err).indexOf('Error') > -1\n}\n\nfunction isNavigationFailure (err, errorType) {\n return (\n isError(err) &&\n err._isRouter &&\n (errorType == null || err.type === errorType)\n )\n}\n\n/* */\n\nfunction runQueue (queue, fn, cb) {\n var step = function (index) {\n if (index >= queue.length) {\n cb();\n } else {\n if (queue[index]) {\n fn(queue[index], function () {\n step(index + 1);\n });\n } else {\n step(index + 1);\n }\n }\n };\n step(0);\n}\n\n/* */\n\nfunction resolveAsyncComponents (matched) {\n return function (to, from, next) {\n var hasAsync = false;\n var pending = 0;\n var error = null;\n\n flatMapComponents(matched, function (def, _, match, key) {\n // if it's a function and doesn't have cid attached,\n // assume it's an async component resolve function.\n // we are not using Vue's default async resolving mechanism because\n // we want to halt the navigation until the incoming component has been\n // resolved.\n if (typeof def === 'function' && def.cid === undefined) {\n hasAsync = true;\n pending++;\n\n var resolve = once(function (resolvedDef) {\n if (isESModule(resolvedDef)) {\n resolvedDef = resolvedDef.default;\n }\n // save resolved on async factory in case it's used elsewhere\n def.resolved = typeof resolvedDef === 'function'\n ? resolvedDef\n : _Vue.extend(resolvedDef);\n match.components[key] = resolvedDef;\n pending--;\n if (pending <= 0) {\n next();\n }\n });\n\n var reject = once(function (reason) {\n var msg = \"Failed to resolve async component \" + key + \": \" + reason;\n process.env.NODE_ENV !== 'production' && warn(false, msg);\n if (!error) {\n error = isError(reason)\n ? reason\n : new Error(msg);\n next(error);\n }\n });\n\n var res;\n try {\n res = def(resolve, reject);\n } catch (e) {\n reject(e);\n }\n if (res) {\n if (typeof res.then === 'function') {\n res.then(resolve, reject);\n } else {\n // new syntax in Vue 2.3\n var comp = res.component;\n if (comp && typeof comp.then === 'function') {\n comp.then(resolve, reject);\n }\n }\n }\n }\n });\n\n if (!hasAsync) { next(); }\n }\n}\n\nfunction flatMapComponents (\n matched,\n fn\n) {\n return flatten(matched.map(function (m) {\n return Object.keys(m.components).map(function (key) { return fn(\n m.components[key],\n m.instances[key],\n m, key\n ); })\n }))\n}\n\nfunction flatten (arr) {\n return Array.prototype.concat.apply([], arr)\n}\n\nvar hasSymbol =\n typeof Symbol === 'function' &&\n typeof Symbol.toStringTag === 'symbol';\n\nfunction isESModule (obj) {\n return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module')\n}\n\n// in Webpack 2, require.ensure now also returns a Promise\n// so the resolve/reject functions may get called an extra time\n// if the user uses an arrow function shorthand that happens to\n// return that Promise.\nfunction once (fn) {\n var called = false;\n return function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (called) { return }\n called = true;\n return fn.apply(this, args)\n }\n}\n\n/* */\n\nvar History = function History (router, base) {\n this.router = router;\n this.base = normalizeBase(base);\n // start with a route object that stands for \"nowhere\"\n this.current = START;\n this.pending = null;\n this.ready = false;\n this.readyCbs = [];\n this.readyErrorCbs = [];\n this.errorCbs = [];\n this.listeners = [];\n};\n\nHistory.prototype.listen = function listen (cb) {\n this.cb = cb;\n};\n\nHistory.prototype.onReady = function onReady (cb, errorCb) {\n if (this.ready) {\n cb();\n } else {\n this.readyCbs.push(cb);\n if (errorCb) {\n this.readyErrorCbs.push(errorCb);\n }\n }\n};\n\nHistory.prototype.onError = function onError (errorCb) {\n this.errorCbs.push(errorCb);\n};\n\nHistory.prototype.transitionTo = function transitionTo (\n location,\n onComplete,\n onAbort\n) {\n var this$1$1 = this;\n\n var route;\n // catch redirect option https://github.com/vuejs/vue-router/issues/3201\n try {\n route = this.router.match(location, this.current);\n } catch (e) {\n this.errorCbs.forEach(function (cb) {\n cb(e);\n });\n // Exception should still be thrown\n throw e\n }\n var prev = this.current;\n this.confirmTransition(\n route,\n function () {\n this$1$1.updateRoute(route);\n onComplete && onComplete(route);\n this$1$1.ensureURL();\n this$1$1.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\n\n // fire ready cbs once\n if (!this$1$1.ready) {\n this$1$1.ready = true;\n this$1$1.readyCbs.forEach(function (cb) {\n cb(route);\n });\n }\n },\n function (err) {\n if (onAbort) {\n onAbort(err);\n }\n if (err && !this$1$1.ready) {\n // Initial redirection should not mark the history as ready yet\n // because it's triggered by the redirection instead\n // https://github.com/vuejs/vue-router/issues/3225\n // https://github.com/vuejs/vue-router/issues/3331\n if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) {\n this$1$1.ready = true;\n this$1$1.readyErrorCbs.forEach(function (cb) {\n cb(err);\n });\n }\n }\n }\n );\n};\n\nHistory.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {\n var this$1$1 = this;\n\n var current = this.current;\n this.pending = route;\n var abort = function (err) {\n // changed after adding errors with\n // https://github.com/vuejs/vue-router/pull/3047 before that change,\n // redirect and aborted navigation would produce an err == null\n if (!isNavigationFailure(err) && isError(err)) {\n if (this$1$1.errorCbs.length) {\n this$1$1.errorCbs.forEach(function (cb) {\n cb(err);\n });\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, 'uncaught error during route navigation:');\n }\n console.error(err);\n }\n }\n onAbort && onAbort(err);\n };\n var lastRouteIndex = route.matched.length - 1;\n var lastCurrentIndex = current.matched.length - 1;\n if (\n isSameRoute(route, current) &&\n // in the case the route map has been dynamically appended to\n lastRouteIndex === lastCurrentIndex &&\n route.matched[lastRouteIndex] === current.matched[lastCurrentIndex]\n ) {\n this.ensureURL();\n if (route.hash) {\n handleScroll(this.router, current, route, false);\n }\n return abort(createNavigationDuplicatedError(current, route))\n }\n\n var ref = resolveQueue(\n this.current.matched,\n route.matched\n );\n var updated = ref.updated;\n var deactivated = ref.deactivated;\n var activated = ref.activated;\n\n var queue = [].concat(\n // in-component leave guards\n extractLeaveGuards(deactivated),\n // global before hooks\n this.router.beforeHooks,\n // in-component update hooks\n extractUpdateHooks(updated),\n // in-config enter guards\n activated.map(function (m) { return m.beforeEnter; }),\n // async components\n resolveAsyncComponents(activated)\n );\n\n var iterator = function (hook, next) {\n if (this$1$1.pending !== route) {\n return abort(createNavigationCancelledError(current, route))\n }\n try {\n hook(route, current, function (to) {\n if (to === false) {\n // next(false) -> abort navigation, ensure current URL\n this$1$1.ensureURL(true);\n abort(createNavigationAbortedError(current, route));\n } else if (isError(to)) {\n this$1$1.ensureURL(true);\n abort(to);\n } else if (\n typeof to === 'string' ||\n (typeof to === 'object' &&\n (typeof to.path === 'string' || typeof to.name === 'string'))\n ) {\n // next('/') or next({ path: '/' }) -> redirect\n abort(createNavigationRedirectedError(current, route));\n if (typeof to === 'object' && to.replace) {\n this$1$1.replace(to);\n } else {\n this$1$1.push(to);\n }\n } else {\n // confirm transition and pass on the value\n next(to);\n }\n });\n } catch (e) {\n abort(e);\n }\n };\n\n runQueue(queue, iterator, function () {\n // wait until async components are resolved before\n // extracting in-component enter guards\n var enterGuards = extractEnterGuards(activated);\n var queue = enterGuards.concat(this$1$1.router.resolveHooks);\n runQueue(queue, iterator, function () {\n if (this$1$1.pending !== route) {\n return abort(createNavigationCancelledError(current, route))\n }\n this$1$1.pending = null;\n onComplete(route);\n if (this$1$1.router.app) {\n this$1$1.router.app.$nextTick(function () {\n handleRouteEntered(route);\n });\n }\n });\n });\n};\n\nHistory.prototype.updateRoute = function updateRoute (route) {\n this.current = route;\n this.cb && this.cb(route);\n};\n\nHistory.prototype.setupListeners = function setupListeners () {\n // Default implementation is empty\n};\n\nHistory.prototype.teardown = function teardown () {\n // clean up event listeners\n // https://github.com/vuejs/vue-router/issues/2341\n this.listeners.forEach(function (cleanupListener) {\n cleanupListener();\n });\n this.listeners = [];\n\n // reset current history route\n // https://github.com/vuejs/vue-router/issues/3294\n this.current = START;\n this.pending = null;\n};\n\nfunction normalizeBase (base) {\n if (!base) {\n if (inBrowser) {\n // respect <base> tag\n var baseEl = document.querySelector('base');\n base = (baseEl && baseEl.getAttribute('href')) || '/';\n // strip full URL origin\n base = base.replace(/^https?:\\/\\/[^\\/]+/, '');\n } else {\n base = '/';\n }\n }\n // make sure there's the starting slash\n if (base.charAt(0) !== '/') {\n base = '/' + base;\n }\n // remove trailing slash\n return base.replace(/\\/$/, '')\n}\n\nfunction resolveQueue (\n current,\n next\n) {\n var i;\n var max = Math.max(current.length, next.length);\n for (i = 0; i < max; i++) {\n if (current[i] !== next[i]) {\n break\n }\n }\n return {\n updated: next.slice(0, i),\n activated: next.slice(i),\n deactivated: current.slice(i)\n }\n}\n\nfunction extractGuards (\n records,\n name,\n bind,\n reverse\n) {\n var guards = flatMapComponents(records, function (def, instance, match, key) {\n var guard = extractGuard(def, name);\n if (guard) {\n return Array.isArray(guard)\n ? guard.map(function (guard) { return bind(guard, instance, match, key); })\n : bind(guard, instance, match, key)\n }\n });\n return flatten(reverse ? guards.reverse() : guards)\n}\n\nfunction extractGuard (\n def,\n key\n) {\n if (typeof def !== 'function') {\n // extend now so that global mixins are applied.\n def = _Vue.extend(def);\n }\n return def.options[key]\n}\n\nfunction extractLeaveGuards (deactivated) {\n return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)\n}\n\nfunction extractUpdateHooks (updated) {\n return extractGuards(updated, 'beforeRouteUpdate', bindGuard)\n}\n\nfunction bindGuard (guard, instance) {\n if (instance) {\n return function boundRouteGuard () {\n return guard.apply(instance, arguments)\n }\n }\n}\n\nfunction extractEnterGuards (\n activated\n) {\n return extractGuards(\n activated,\n 'beforeRouteEnter',\n function (guard, _, match, key) {\n return bindEnterGuard(guard, match, key)\n }\n )\n}\n\nfunction bindEnterGuard (\n guard,\n match,\n key\n) {\n return function routeEnterGuard (to, from, next) {\n return guard(to, from, function (cb) {\n if (typeof cb === 'function') {\n if (!match.enteredCbs[key]) {\n match.enteredCbs[key] = [];\n }\n match.enteredCbs[key].push(cb);\n }\n next(cb);\n })\n }\n}\n\n/* */\n\nvar HTML5History = /*@__PURE__*/(function (History) {\n function HTML5History (router, base) {\n History.call(this, router, base);\n\n this._startLocation = getLocation(this.base);\n }\n\n if ( History ) HTML5History.__proto__ = History;\n HTML5History.prototype = Object.create( History && History.prototype );\n HTML5History.prototype.constructor = HTML5History;\n\n HTML5History.prototype.setupListeners = function setupListeners () {\n var this$1$1 = this;\n\n if (this.listeners.length > 0) {\n return\n }\n\n var router = this.router;\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n this.listeners.push(setupScroll());\n }\n\n var handleRoutingEvent = function () {\n var current = this$1$1.current;\n\n // Avoiding first `popstate` event dispatched in some browsers but first\n // history route not updated since async guard at the same time.\n var location = getLocation(this$1$1.base);\n if (this$1$1.current === START && location === this$1$1._startLocation) {\n return\n }\n\n this$1$1.transitionTo(location, function (route) {\n if (supportsScroll) {\n handleScroll(router, route, current, true);\n }\n });\n };\n window.addEventListener('popstate', handleRoutingEvent);\n this.listeners.push(function () {\n window.removeEventListener('popstate', handleRoutingEvent);\n });\n };\n\n HTML5History.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HTML5History.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n pushState(cleanPath(this$1$1.base + route.fullPath));\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n replaceState(cleanPath(this$1$1.base + route.fullPath));\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.ensureURL = function ensureURL (push) {\n if (getLocation(this.base) !== this.current.fullPath) {\n var current = cleanPath(this.base + this.current.fullPath);\n push ? pushState(current) : replaceState(current);\n }\n };\n\n HTML5History.prototype.getCurrentLocation = function getCurrentLocation () {\n return getLocation(this.base)\n };\n\n return HTML5History;\n}(History));\n\nfunction getLocation (base) {\n var path = window.location.pathname;\n var pathLowerCase = path.toLowerCase();\n var baseLowerCase = base.toLowerCase();\n // base=\"/a\" shouldn't turn path=\"/app\" into \"/a/pp\"\n // https://github.com/vuejs/vue-router/issues/3555\n // so we ensure the trailing slash in the base\n if (base && ((pathLowerCase === baseLowerCase) ||\n (pathLowerCase.indexOf(cleanPath(baseLowerCase + '/')) === 0))) {\n path = path.slice(base.length);\n }\n return (path || '/') + window.location.search + window.location.hash\n}\n\n/* */\n\nvar HashHistory = /*@__PURE__*/(function (History) {\n function HashHistory (router, base, fallback) {\n History.call(this, router, base);\n // check history fallback deeplinking\n if (fallback && checkFallback(this.base)) {\n return\n }\n ensureSlash();\n }\n\n if ( History ) HashHistory.__proto__ = History;\n HashHistory.prototype = Object.create( History && History.prototype );\n HashHistory.prototype.constructor = HashHistory;\n\n // this is delayed until the app mounts\n // to avoid the hashchange listener being fired too early\n HashHistory.prototype.setupListeners = function setupListeners () {\n var this$1$1 = this;\n\n if (this.listeners.length > 0) {\n return\n }\n\n var router = this.router;\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n this.listeners.push(setupScroll());\n }\n\n var handleRoutingEvent = function () {\n var current = this$1$1.current;\n if (!ensureSlash()) {\n return\n }\n this$1$1.transitionTo(getHash(), function (route) {\n if (supportsScroll) {\n handleScroll(this$1$1.router, route, current, true);\n }\n if (!supportsPushState) {\n replaceHash(route.fullPath);\n }\n });\n };\n var eventType = supportsPushState ? 'popstate' : 'hashchange';\n window.addEventListener(\n eventType,\n handleRoutingEvent\n );\n this.listeners.push(function () {\n window.removeEventListener(eventType, handleRoutingEvent);\n });\n };\n\n HashHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(\n location,\n function (route) {\n pushHash(route.fullPath);\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n HashHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(\n location,\n function (route) {\n replaceHash(route.fullPath);\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n HashHistory.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HashHistory.prototype.ensureURL = function ensureURL (push) {\n var current = this.current.fullPath;\n if (getHash() !== current) {\n push ? pushHash(current) : replaceHash(current);\n }\n };\n\n HashHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n return getHash()\n };\n\n return HashHistory;\n}(History));\n\nfunction checkFallback (base) {\n var location = getLocation(base);\n if (!/^\\/#/.test(location)) {\n window.location.replace(cleanPath(base + '/#' + location));\n return true\n }\n}\n\nfunction ensureSlash () {\n var path = getHash();\n if (path.charAt(0) === '/') {\n return true\n }\n replaceHash('/' + path);\n return false\n}\n\nfunction getHash () {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var index = href.indexOf('#');\n // empty path\n if (index < 0) { return '' }\n\n href = href.slice(index + 1);\n\n return href\n}\n\nfunction getUrl (path) {\n var href = window.location.href;\n var i = href.indexOf('#');\n var base = i >= 0 ? href.slice(0, i) : href;\n return (base + \"#\" + path)\n}\n\nfunction pushHash (path) {\n if (supportsPushState) {\n pushState(getUrl(path));\n } else {\n window.location.hash = path;\n }\n}\n\nfunction replaceHash (path) {\n if (supportsPushState) {\n replaceState(getUrl(path));\n } else {\n window.location.replace(getUrl(path));\n }\n}\n\n/* */\n\nvar AbstractHistory = /*@__PURE__*/(function (History) {\n function AbstractHistory (router, base) {\n History.call(this, router, base);\n this.stack = [];\n this.index = -1;\n }\n\n if ( History ) AbstractHistory.__proto__ = History;\n AbstractHistory.prototype = Object.create( History && History.prototype );\n AbstractHistory.prototype.constructor = AbstractHistory;\n\n AbstractHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index + 1).concat(route);\n this$1$1.index++;\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index).concat(route);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n AbstractHistory.prototype.go = function go (n) {\n var this$1$1 = this;\n\n var targetIndex = this.index + n;\n if (targetIndex < 0 || targetIndex >= this.stack.length) {\n return\n }\n var route = this.stack[targetIndex];\n this.confirmTransition(\n route,\n function () {\n var prev = this$1$1.current;\n this$1$1.index = targetIndex;\n this$1$1.updateRoute(route);\n this$1$1.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\n },\n function (err) {\n if (isNavigationFailure(err, NavigationFailureType.duplicated)) {\n this$1$1.index = targetIndex;\n }\n }\n );\n };\n\n AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n var current = this.stack[this.stack.length - 1];\n return current ? current.fullPath : '/'\n };\n\n AbstractHistory.prototype.ensureURL = function ensureURL () {\n // noop\n };\n\n return AbstractHistory;\n}(History));\n\n/* */\n\n\n\nvar VueRouter = function VueRouter (options) {\n if ( options === void 0 ) options = {};\n\n if (process.env.NODE_ENV !== 'production') {\n warn(this instanceof VueRouter, \"Router must be called with the new operator.\");\n }\n this.app = null;\n this.apps = [];\n this.options = options;\n this.beforeHooks = [];\n this.resolveHooks = [];\n this.afterHooks = [];\n this.matcher = createMatcher(options.routes || [], this);\n\n var mode = options.mode || 'hash';\n this.fallback =\n mode === 'history' && !supportsPushState && options.fallback !== false;\n if (this.fallback) {\n mode = 'hash';\n }\n if (!inBrowser) {\n mode = 'abstract';\n }\n this.mode = mode;\n\n switch (mode) {\n case 'history':\n this.history = new HTML5History(this, options.base);\n break\n case 'hash':\n this.history = new HashHistory(this, options.base, this.fallback);\n break\n case 'abstract':\n this.history = new AbstractHistory(this, options.base);\n break\n default:\n if (process.env.NODE_ENV !== 'production') {\n assert(false, (\"invalid mode: \" + mode));\n }\n }\n};\n\nvar prototypeAccessors = { currentRoute: { configurable: true } };\n\nVueRouter.prototype.match = function match (raw, current, redirectedFrom) {\n return this.matcher.match(raw, current, redirectedFrom)\n};\n\nprototypeAccessors.currentRoute.get = function () {\n return this.history && this.history.current\n};\n\nVueRouter.prototype.init = function init (app /* Vue component instance */) {\n var this$1$1 = this;\n\n process.env.NODE_ENV !== 'production' &&\n assert(\n install.installed,\n \"not installed. Make sure to call `Vue.use(VueRouter)` \" +\n \"before creating root instance.\"\n );\n\n this.apps.push(app);\n\n // set up app destroyed handler\n // https://github.com/vuejs/vue-router/issues/2639\n app.$once('hook:destroyed', function () {\n // clean out app from this.apps array once destroyed\n var index = this$1$1.apps.indexOf(app);\n if (index > -1) { this$1$1.apps.splice(index, 1); }\n // ensure we still have a main app or null if no apps\n // we do not release the router so it can be reused\n if (this$1$1.app === app) { this$1$1.app = this$1$1.apps[0] || null; }\n\n if (!this$1$1.app) { this$1$1.history.teardown(); }\n });\n\n // main app previously initialized\n // return as we don't need to set up new history listener\n if (this.app) {\n return\n }\n\n this.app = app;\n\n var history = this.history;\n\n if (history instanceof HTML5History || history instanceof HashHistory) {\n var handleInitialScroll = function (routeOrError) {\n var from = history.current;\n var expectScroll = this$1$1.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll && 'fullPath' in routeOrError) {\n handleScroll(this$1$1, routeOrError, from, false);\n }\n };\n var setupListeners = function (routeOrError) {\n history.setupListeners();\n handleInitialScroll(routeOrError);\n };\n history.transitionTo(\n history.getCurrentLocation(),\n setupListeners,\n setupListeners\n );\n }\n\n history.listen(function (route) {\n this$1$1.apps.forEach(function (app) {\n app._route = route;\n });\n });\n};\n\nVueRouter.prototype.beforeEach = function beforeEach (fn) {\n return registerHook(this.beforeHooks, fn)\n};\n\nVueRouter.prototype.beforeResolve = function beforeResolve (fn) {\n return registerHook(this.resolveHooks, fn)\n};\n\nVueRouter.prototype.afterEach = function afterEach (fn) {\n return registerHook(this.afterHooks, fn)\n};\n\nVueRouter.prototype.onReady = function onReady (cb, errorCb) {\n this.history.onReady(cb, errorCb);\n};\n\nVueRouter.prototype.onError = function onError (errorCb) {\n this.history.onError(errorCb);\n};\n\nVueRouter.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1$1.history.push(location, resolve, reject);\n })\n } else {\n this.history.push(location, onComplete, onAbort);\n }\n};\n\nVueRouter.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1$1.history.replace(location, resolve, reject);\n })\n } else {\n this.history.replace(location, onComplete, onAbort);\n }\n};\n\nVueRouter.prototype.go = function go (n) {\n this.history.go(n);\n};\n\nVueRouter.prototype.back = function back () {\n this.go(-1);\n};\n\nVueRouter.prototype.forward = function forward () {\n this.go(1);\n};\n\nVueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) {\n var route = to\n ? to.matched\n ? to\n : this.resolve(to).route\n : this.currentRoute;\n if (!route) {\n return []\n }\n return [].concat.apply(\n [],\n route.matched.map(function (m) {\n return Object.keys(m.components).map(function (key) {\n return m.components[key]\n })\n })\n )\n};\n\nVueRouter.prototype.resolve = function resolve (\n to,\n current,\n append\n) {\n current = current || this.history.current;\n var location = normalizeLocation(to, current, append, this);\n var route = this.match(location, current);\n var fullPath = route.redirectedFrom || route.fullPath;\n var base = this.history.base;\n var href = createHref(base, fullPath, this.mode);\n return {\n location: location,\n route: route,\n href: href,\n // for backwards compat\n normalizedTo: location,\n resolved: route\n }\n};\n\nVueRouter.prototype.getRoutes = function getRoutes () {\n return this.matcher.getRoutes()\n};\n\nVueRouter.prototype.addRoute = function addRoute (parentOrRoute, route) {\n this.matcher.addRoute(parentOrRoute, route);\n if (this.history.current !== START) {\n this.history.transitionTo(this.history.getCurrentLocation());\n }\n};\n\nVueRouter.prototype.addRoutes = function addRoutes (routes) {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.');\n }\n this.matcher.addRoutes(routes);\n if (this.history.current !== START) {\n this.history.transitionTo(this.history.getCurrentLocation());\n }\n};\n\nObject.defineProperties( VueRouter.prototype, prototypeAccessors );\n\nvar VueRouter$1 = VueRouter;\n\nfunction registerHook (list, fn) {\n list.push(fn);\n return function () {\n var i = list.indexOf(fn);\n if (i > -1) { list.splice(i, 1); }\n }\n}\n\nfunction createHref (base, fullPath, mode) {\n var path = mode === 'hash' ? '#' + fullPath : fullPath;\n return base ? cleanPath(base + '/' + path) : path\n}\n\n// We cannot remove this as it would be a breaking change\nVueRouter.install = install;\nVueRouter.version = '3.6.5';\nVueRouter.isNavigationFailure = isNavigationFailure;\nVueRouter.NavigationFailureType = NavigationFailureType;\nVueRouter.START_LOCATION = START;\n\nif (inBrowser && window.Vue) {\n window.Vue.use(VueRouter);\n}\n\nvar version = '3.6.5';\n\nexport { NavigationFailureType, Link as RouterLink, View as RouterView, START as START_LOCATION, VueRouter$1 as default, isNavigationFailure, version };\n","exports.sync = function (store, router, options) {\n var moduleName = (options || {}).moduleName || 'route'\n\n store.registerModule(moduleName, {\n namespaced: true,\n state: cloneRoute(router.currentRoute),\n mutations: {\n 'ROUTE_CHANGED': function ROUTE_CHANGED (state, transition) {\n store.state[moduleName] = cloneRoute(transition.to, transition.from)\n }\n }\n })\n\n var isTimeTraveling = false\n var currentPath\n\n // sync router on store change\n var storeUnwatch = store.watch(\n function (state) { return state[moduleName]; },\n function (route) {\n var fullPath = route.fullPath;\n if (fullPath === currentPath) {\n return\n }\n if (currentPath != null) {\n isTimeTraveling = true\n router.push(route)\n }\n currentPath = fullPath\n },\n { sync: true }\n )\n\n // sync store on router navigation\n var afterEachUnHook = router.afterEach(function (to, from) {\n if (isTimeTraveling) {\n isTimeTraveling = false\n return\n }\n currentPath = to.fullPath\n store.commit(moduleName + '/ROUTE_CHANGED', { to: to, from: from })\n })\n\n return function unsync () {\n // On unsync, remove router hook\n if (afterEachUnHook != null) {\n afterEachUnHook()\n }\n\n // On unsync, remove store watch\n if (storeUnwatch != null) {\n storeUnwatch()\n }\n\n // On unsync, unregister Module with store\n store.unregisterModule(moduleName)\n }\n}\n\nfunction cloneRoute (to, from) {\n var clone = {\n name: to.name,\n path: to.path,\n hash: to.hash,\n query: to.query,\n params: to.params,\n fullPath: to.fullPath,\n meta: to.meta\n }\n if (from) {\n clone.from = cloneRoute(from)\n }\n return Object.freeze(clone)\n}\n\n","import { getCurrentUser as A, onRequestTokenUpdate as ue, getRequestToken as de } from \"@nextcloud/auth\";\nimport { getLoggerBuilder as q } from \"@nextcloud/logger\";\nimport { getCanonicalLocale as ae } from \"@nextcloud/l10n\";\nimport { join as le, basename as fe, extname as ce, dirname as I } from \"path\";\nimport { encodePath as he } from \"@nextcloud/paths\";\nimport { generateRemoteUrl as pe } from \"@nextcloud/router\";\nimport { createClient as ge, getPatcher as we } from \"webdav\";\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\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 */\nconst me = (e) => e === null ? q().setApp(\"files\").build() : q().setApp(\"files\").setUid(e.uid).build(), m = me(A());\n/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass Ne {\n _entries = [];\n registerEntry(t) {\n this.validateEntry(t), this._entries.push(t);\n }\n unregisterEntry(t) {\n const r = typeof t == \"string\" ? this.getEntryIndex(t) : this.getEntryIndex(t.id);\n if (r === -1) {\n m.warn(\"Entry not found, nothing removed\", { entry: t, entries: this.getEntries() });\n return;\n }\n this._entries.splice(r, 1);\n }\n /**\n * Get the list of registered entries\n *\n * @param {Folder} context the creation context. Usually the current folder\n */\n getEntries(t) {\n return t ? this._entries.filter((r) => typeof r.enabled == \"function\" ? r.enabled(t) : !0) : this._entries;\n }\n getEntryIndex(t) {\n return this._entries.findIndex((r) => r.id === t);\n }\n validateEntry(t) {\n if (!t.id || !t.displayName || !(t.iconSvgInline || t.iconClass) || !t.handler)\n throw new Error(\"Invalid entry\");\n if (typeof t.id != \"string\" || typeof t.displayName != \"string\")\n throw new Error(\"Invalid id or displayName property\");\n if (t.iconClass && typeof t.iconClass != \"string\" || t.iconSvgInline && typeof t.iconSvgInline != \"string\")\n throw new Error(\"Invalid icon provided\");\n if (t.enabled !== void 0 && typeof t.enabled != \"function\")\n throw new Error(\"Invalid enabled property\");\n if (typeof t.handler != \"function\")\n throw new Error(\"Invalid handler property\");\n if (\"order\" in t && typeof t.order != \"number\")\n throw new Error(\"Invalid order property\");\n if (this.getEntryIndex(t.id) !== -1)\n throw new Error(\"Duplicate entry\");\n }\n}\nconst F = function() {\n return typeof window._nc_newfilemenu > \"u\" && (window._nc_newfilemenu = new Ne(), m.debug(\"NewFileMenu initialized\")), window._nc_newfilemenu;\n};\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\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 */\nconst C = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"], P = [\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\"];\nfunction Yt(e, t = !1, r = !1, s = !1) {\n r = r && !s, typeof e == \"string\" && (e = Number(e));\n let n = e > 0 ? Math.floor(Math.log(e) / Math.log(s ? 1e3 : 1024)) : 0;\n n = Math.min((r ? P.length : C.length) - 1, n);\n const i = r ? P[n] : C[n];\n let d = (e / Math.pow(s ? 1e3 : 1024, n)).toFixed(1);\n return t === !0 && n === 0 ? (d !== \"0.0\" ? \"< 1 \" : \"0 \") + (r ? P[1] : C[1]) : (n < 2 ? d = parseFloat(d).toFixed(0) : d = parseFloat(d).toLocaleString(ae()), d + \" \" + i);\n}\nfunction Jt(e, t = !1) {\n try {\n e = `${e}`.toLocaleLowerCase().replaceAll(/\\s+/g, \"\").replaceAll(\",\", \".\");\n } catch {\n return null;\n }\n const r = e.match(/^([0-9]*(\\.[0-9]*)?)([kmgtp]?)(i?)b?$/);\n if (r === null || r[1] === \".\" || r[1] === \"\")\n return null;\n const s = {\n \"\": 0,\n k: 1,\n m: 2,\n g: 3,\n t: 4,\n p: 5,\n e: 6\n }, n = `${r[1]}`, i = r[4] === \"i\" || t ? 1024 : 1e3;\n return Math.round(Number.parseFloat(n) * i ** s[r[3]]);\n}\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nvar Z = /* @__PURE__ */ ((e) => (e.DEFAULT = \"default\", e.HIDDEN = \"hidden\", e))(Z || {});\nclass Qt {\n _action;\n constructor(t) {\n this.validateAction(t), this._action = t;\n }\n get id() {\n return this._action.id;\n }\n get displayName() {\n return this._action.displayName;\n }\n get title() {\n return this._action.title;\n }\n get iconSvgInline() {\n return this._action.iconSvgInline;\n }\n get enabled() {\n return this._action.enabled;\n }\n get exec() {\n return this._action.exec;\n }\n get execBatch() {\n return this._action.execBatch;\n }\n get order() {\n return this._action.order;\n }\n get parent() {\n return this._action.parent;\n }\n get default() {\n return this._action.default;\n }\n get inline() {\n return this._action.inline;\n }\n get renderInline() {\n return this._action.renderInline;\n }\n validateAction(t) {\n if (!t.id || typeof t.id != \"string\")\n throw new Error(\"Invalid id\");\n if (!t.displayName || typeof t.displayName != \"function\")\n throw new Error(\"Invalid displayName function\");\n if (\"title\" in t && typeof t.title != \"function\")\n throw new Error(\"Invalid title function\");\n if (!t.iconSvgInline || typeof t.iconSvgInline != \"function\")\n throw new Error(\"Invalid iconSvgInline function\");\n if (!t.exec || typeof t.exec != \"function\")\n throw new Error(\"Invalid exec function\");\n if (\"enabled\" in t && typeof t.enabled != \"function\")\n throw new Error(\"Invalid enabled function\");\n if (\"execBatch\" in t && typeof t.execBatch != \"function\")\n throw new Error(\"Invalid execBatch function\");\n if (\"order\" in t && typeof t.order != \"number\")\n throw new Error(\"Invalid order\");\n if (\"parent\" in t && typeof t.parent != \"string\")\n throw new Error(\"Invalid parent\");\n if (t.default && !Object.values(Z).includes(t.default))\n throw new Error(\"Invalid default\");\n if (\"inline\" in t && typeof t.inline != \"function\")\n throw new Error(\"Invalid inline function\");\n if (\"renderInline\" in t && typeof t.renderInline != \"function\")\n throw new Error(\"Invalid renderInline function\");\n }\n}\nconst Dt = function(e) {\n if (typeof window._nc_fileactions > \"u\" && (window._nc_fileactions = [], m.debug(\"FileActions initialized\")), window._nc_fileactions.find((t) => t.id === e.id)) {\n m.error(`FileAction ${e.id} already registered`, { action: e });\n return;\n }\n window._nc_fileactions.push(e);\n}, er = function() {\n return typeof window._nc_fileactions > \"u\" && (window._nc_fileactions = [], m.debug(\"FileActions initialized\")), window._nc_fileactions;\n};\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass tr {\n _header;\n constructor(t) {\n this.validateHeader(t), this._header = t;\n }\n get id() {\n return this._header.id;\n }\n get order() {\n return this._header.order;\n }\n get enabled() {\n return this._header.enabled;\n }\n get render() {\n return this._header.render;\n }\n get updated() {\n return this._header.updated;\n }\n validateHeader(t) {\n if (!t.id || !t.render || !t.updated)\n throw new Error(\"Invalid header: id, render and updated are required\");\n if (typeof t.id != \"string\")\n throw new Error(\"Invalid id property\");\n if (t.enabled !== void 0 && typeof t.enabled != \"function\")\n throw new Error(\"Invalid enabled property\");\n if (t.render && typeof t.render != \"function\")\n throw new Error(\"Invalid render property\");\n if (t.updated && typeof t.updated != \"function\")\n throw new Error(\"Invalid updated property\");\n }\n}\nconst rr = function(e) {\n if (typeof window._nc_filelistheader > \"u\" && (window._nc_filelistheader = [], m.debug(\"FileListHeaders initialized\")), window._nc_filelistheader.find((t) => t.id === e.id)) {\n m.error(`Header ${e.id} already registered`, { header: e });\n return;\n }\n window._nc_filelistheader.push(e);\n}, nr = function() {\n return typeof window._nc_filelistheader > \"u\" && (window._nc_filelistheader = [], m.debug(\"FileListHeaders initialized\")), window._nc_filelistheader;\n};\n/**\n * @copyright Copyright (c) 2022 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 */\nvar N = /* @__PURE__ */ ((e) => (e[e.NONE = 0] = \"NONE\", e[e.CREATE = 4] = \"CREATE\", e[e.READ = 1] = \"READ\", e[e.UPDATE = 2] = \"UPDATE\", e[e.DELETE = 8] = \"DELETE\", e[e.SHARE = 16] = \"SHARE\", e[e.ALL = 31] = \"ALL\", e))(N || {});\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\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 */\nconst j = [\n \"d:getcontentlength\",\n \"d:getcontenttype\",\n \"d:getetag\",\n \"d:getlastmodified\",\n \"d:quota-available-bytes\",\n \"d:resourcetype\",\n \"nc:has-preview\",\n \"nc:is-encrypted\",\n \"nc:mount-type\",\n \"nc:share-attributes\",\n \"oc:comments-unread\",\n \"oc:favorite\",\n \"oc:fileid\",\n \"oc:owner-display-name\",\n \"oc:owner-id\",\n \"oc:permissions\",\n \"oc:share-types\",\n \"oc:size\",\n \"ocs:share-permissions\"\n], Y = {\n d: \"DAV:\",\n nc: \"http://nextcloud.org/ns\",\n oc: \"http://owncloud.org/ns\",\n ocs: \"http://open-collaboration-services.org/ns\"\n}, ir = function(e, t = { nc: \"http://nextcloud.org/ns\" }) {\n typeof window._nc_dav_properties > \"u\" && (window._nc_dav_properties = [...j], window._nc_dav_namespaces = { ...Y });\n const r = { ...window._nc_dav_namespaces, ...t };\n if (window._nc_dav_properties.find((n) => n === e))\n return m.error(`${e} already registered`, { prop: e }), !1;\n if (e.startsWith(\"<\") || e.split(\":\").length !== 2)\n return m.error(`${e} is not valid. See example: 'oc:fileid'`, { prop: e }), !1;\n const s = e.split(\":\")[0];\n return r[s] ? (window._nc_dav_properties.push(e), window._nc_dav_namespaces = r, !0) : (m.error(`${e} namespace unknown`, { prop: e, namespaces: r }), !1);\n}, V = function() {\n return typeof window._nc_dav_properties > \"u\" && (window._nc_dav_properties = [...j]), window._nc_dav_properties.map((e) => `<${e} />`).join(\" \");\n}, L = function() {\n return typeof window._nc_dav_namespaces > \"u\" && (window._nc_dav_namespaces = { ...Y }), Object.keys(window._nc_dav_namespaces).map((e) => `xmlns:${e}=\"${window._nc_dav_namespaces?.[e]}\"`).join(\" \");\n}, sr = function() {\n return `<?xml version=\"1.0\"?>\n\t\t<d:propfind ${L()}>\n\t\t\t<d:prop>\n\t\t\t\t${V()}\n\t\t\t</d:prop>\n\t\t</d:propfind>`;\n}, Ee = function() {\n return `<?xml version=\"1.0\"?>\n\t\t<oc:filter-files ${L()}>\n\t\t\t<d:prop>\n\t\t\t\t${V()}\n\t\t\t</d:prop>\n\t\t\t<oc:filter-rules>\n\t\t\t\t<oc:favorite>1</oc:favorite>\n\t\t\t</oc:filter-rules>\n\t\t</oc:filter-files>`;\n}, or = function(e) {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<d:searchrequest ${L()}\n\txmlns:ns=\"https://github.com/icewind1991/SearchDAV/ns\">\n\t<d:basicsearch>\n\t\t<d:select>\n\t\t\t<d:prop>\n\t\t\t\t${V()}\n\t\t\t</d:prop>\n\t\t</d:select>\n\t\t<d:from>\n\t\t\t<d:scope>\n\t\t\t\t<d:href>/files/${A()?.uid}/</d:href>\n\t\t\t\t<d:depth>infinity</d:depth>\n\t\t\t</d:scope>\n\t\t</d:from>\n\t\t<d:where>\n\t\t\t<d:and>\n\t\t\t\t<d:or>\n\t\t\t\t\t<d:not>\n\t\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t\t<d:getcontenttype/>\n\t\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t\t<d:literal>httpd/unix-directory</d:literal>\n\t\t\t\t\t\t</d:eq>\n\t\t\t\t\t</d:not>\n\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t<oc:size/>\n\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t<d:literal>0</d:literal>\n\t\t\t\t\t</d:eq>\n\t\t\t\t</d:or>\n\t\t\t\t<d:gt>\n\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t\t</d:prop>\n\t\t\t\t\t<d:literal>${e}</d:literal>\n\t\t\t\t</d:gt>\n\t\t\t</d:and>\n\t\t</d:where>\n\t\t<d:orderby>\n\t\t\t<d:order>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t</d:prop>\n\t\t\t\t<d:descending/>\n\t\t\t</d:order>\n\t\t</d:orderby>\n\t\t<d:limit>\n\t\t\t<d:nresults>100</d:nresults>\n\t\t\t<ns:firstresult>0</ns:firstresult>\n\t\t</d:limit>\n\t</d:basicsearch>\n</d:searchrequest>`;\n};\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\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 */\nconst be = function(e = \"\") {\n let t = N.NONE;\n return e && ((e.includes(\"C\") || e.includes(\"K\")) && (t |= N.CREATE), e.includes(\"G\") && (t |= N.READ), (e.includes(\"W\") || e.includes(\"N\") || e.includes(\"V\")) && (t |= N.UPDATE), e.includes(\"D\") && (t |= N.DELETE), e.includes(\"R\") && (t |= N.SHARE)), t;\n};\n/**\n * @copyright Copyright (c) 2022 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 */\nvar R = /* @__PURE__ */ ((e) => (e.Folder = \"folder\", e.File = \"file\", e))(R || {});\n/**\n * @copyright Copyright (c) 2022 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 */\nconst J = function(e, t) {\n return e.match(t) !== null;\n}, X = (e, t) => {\n if (e.id && typeof e.id != \"number\")\n throw new Error(\"Invalid id type of value\");\n if (!e.source)\n throw new Error(\"Missing mandatory source\");\n try {\n new URL(e.source);\n } catch {\n throw new Error(\"Invalid source format, source must be a valid URL\");\n }\n if (!e.source.startsWith(\"http\"))\n throw new Error(\"Invalid source format, only http(s) is supported\");\n if (e.mtime && !(e.mtime instanceof Date))\n throw new Error(\"Invalid mtime type\");\n if (e.crtime && !(e.crtime instanceof Date))\n throw new Error(\"Invalid crtime type\");\n if (!e.mime || typeof e.mime != \"string\" || !e.mime.match(/^[-\\w.]+\\/[-+\\w.]+$/gi))\n throw new Error(\"Missing or invalid mandatory mime\");\n if (\"size\" in e && typeof e.size != \"number\" && e.size !== void 0)\n throw new Error(\"Invalid size type\");\n if (\"permissions\" in e && e.permissions !== void 0 && !(typeof e.permissions == \"number\" && e.permissions >= N.NONE && e.permissions <= N.ALL))\n throw new Error(\"Invalid permissions\");\n if (e.owner && e.owner !== null && typeof e.owner != \"string\")\n throw new Error(\"Invalid owner type\");\n if (e.attributes && typeof e.attributes != \"object\")\n throw new Error(\"Invalid attributes type\");\n if (e.root && typeof e.root != \"string\")\n throw new Error(\"Invalid root type\");\n if (e.root && !e.root.startsWith(\"/\"))\n throw new Error(\"Root must start with a leading slash\");\n if (e.root && !e.source.includes(e.root))\n throw new Error(\"Root must be part of the source\");\n if (e.root && J(e.source, t)) {\n const r = e.source.match(t)[0];\n if (!e.source.includes(le(r, e.root)))\n throw new Error(\"The root must be relative to the service. e.g /files/emma\");\n }\n if (e.status && !Object.values(Q).includes(e.status))\n throw new Error(\"Status must be a valid NodeStatus\");\n};\n/**\n * @copyright Copyright (c) 2022 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 */\nvar Q = /* @__PURE__ */ ((e) => (e.NEW = \"new\", e.FAILED = \"failed\", e.LOADING = \"loading\", e.LOCKED = \"locked\", e))(Q || {});\nclass D {\n _data;\n _attributes;\n _knownDavService = /(remote|public)\\.php\\/(web)?dav/i;\n constructor(t, r) {\n X(t, r || this._knownDavService), this._data = t;\n const s = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n set: (n, i, d) => (this.updateMtime(), Reflect.set(n, i, d)),\n deleteProperty: (n, i) => (this.updateMtime(), Reflect.deleteProperty(n, i))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n };\n this._attributes = new Proxy(t.attributes || {}, s), delete this._data.attributes, r && (this._knownDavService = r);\n }\n /**\n * Get the source url to this object\n */\n get source() {\n return this._data.source.replace(/\\/$/i, \"\");\n }\n /**\n * Get the encoded source url to this object for requests purposes\n */\n get encodedSource() {\n const { origin: t } = new URL(this.source);\n return t + he(this.source.slice(t.length));\n }\n /**\n * Get this object name\n */\n get basename() {\n return fe(this.source);\n }\n /**\n * Get this object's extension\n */\n get extension() {\n return ce(this.source);\n }\n /**\n * Get the directory path leading to this object\n * Will use the relative path to root if available\n */\n get dirname() {\n if (this.root) {\n let r = this.source;\n this.isDavRessource && (r = r.split(this._knownDavService).pop());\n const s = r.indexOf(this.root), n = this.root.replace(/\\/$/, \"\");\n return I(r.slice(s + n.length) || \"/\");\n }\n const t = new URL(this.source);\n return I(t.pathname);\n }\n /**\n * Get the file mime\n */\n get mime() {\n return this._data.mime;\n }\n /**\n * Get the file modification time\n */\n get mtime() {\n return this._data.mtime;\n }\n /**\n * Get the file creation time\n */\n get crtime() {\n return this._data.crtime;\n }\n /**\n * Get the file size\n */\n get size() {\n return this._data.size;\n }\n /**\n * Get the file attribute\n */\n get attributes() {\n return this._attributes;\n }\n /**\n * Get the file permissions\n */\n get permissions() {\n return this.owner === null && !this.isDavRessource ? N.READ : this._data.permissions !== void 0 ? this._data.permissions : N.NONE;\n }\n /**\n * Get the file owner\n */\n get owner() {\n return this.isDavRessource ? this._data.owner : null;\n }\n /**\n * Is this a dav-related ressource ?\n */\n get isDavRessource() {\n return J(this.source, this._knownDavService);\n }\n /**\n * Get the dav root of this object\n */\n get root() {\n return this._data.root ? this._data.root.replace(/^(.+)\\/$/, \"$1\") : this.isDavRessource && I(this.source).split(this._knownDavService).pop() || null;\n }\n /**\n * Get the absolute path of this object relative to the root\n */\n get path() {\n if (this.root) {\n let t = this.source;\n this.isDavRessource && (t = t.split(this._knownDavService).pop());\n const r = t.indexOf(this.root), s = this.root.replace(/\\/$/, \"\");\n return t.slice(r + s.length) || \"/\";\n }\n return (this.dirname + \"/\" + this.basename).replace(/\\/\\//g, \"/\");\n }\n /**\n * Get the node id if defined.\n * Will look for the fileid in attributes if undefined.\n */\n get fileid() {\n return this._data?.id || this.attributes?.fileid;\n }\n /**\n * Get the node status.\n */\n get status() {\n return this._data?.status;\n }\n /**\n * Set the node status.\n */\n set status(t) {\n this._data.status = t;\n }\n /**\n * Move the node to a new destination\n *\n * @param {string} destination the new source.\n * e.g. https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg\n */\n move(t) {\n X({ ...this._data, source: t }, this._knownDavService), this._data.source = t, this.updateMtime();\n }\n /**\n * Rename the node\n * This aliases the move method for easier usage\n *\n * @param basename The new name of the node\n */\n rename(t) {\n if (t.includes(\"/\"))\n throw new Error(\"Invalid basename\");\n this.move(I(this.source) + \"/\" + t);\n }\n /**\n * Update the mtime if exists.\n */\n updateMtime() {\n this._data.mtime && (this._data.mtime = /* @__PURE__ */ new Date());\n }\n}\n/**\n * @copyright Copyright (c) 2022 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 */\nclass ye extends D {\n get type() {\n return R.File;\n }\n}\n/**\n * @copyright Copyright (c) 2022 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 */\nclass _e extends D {\n constructor(t) {\n super({\n ...t,\n mime: \"httpd/unix-directory\"\n });\n }\n get type() {\n return R.Folder;\n }\n get extension() {\n return null;\n }\n get mime() {\n return \"httpd/unix-directory\";\n }\n}\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\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 */\nconst ee = `/files/${A()?.uid}`, te = pe(\"dav\"), ur = function(e = te, t = {}) {\n const r = ge(e, { headers: t });\n function s(i) {\n r.setHeaders({\n ...t,\n // Add this so the server knows it is an request from the browser\n \"X-Requested-With\": \"XMLHttpRequest\",\n // Inject user auth\n requesttoken: i ?? \"\"\n });\n }\n return ue(s), s(de()), we().patch(\"fetch\", (i, d) => {\n const u = d.headers;\n return u?.method && (d.method = u.method, delete u.method), fetch(i, d);\n }), r;\n}, dr = async (e, t = \"/\", r = ee) => (await e.getDirectoryContents(`${r}${t}`, {\n details: !0,\n data: Ee(),\n headers: {\n // see davGetClient for patched webdav client\n method: \"REPORT\"\n },\n includeSelf: !0\n})).data.filter((n) => n.filename !== t).map((n) => ve(n, r)), ve = function(e, t = ee, r = te) {\n const s = e.props, n = be(s?.permissions), i = s?.[\"owner-id\"] || A()?.uid, d = {\n id: s?.fileid || 0,\n source: `${r}${e.filename}`,\n mtime: new Date(Date.parse(e.lastmod)),\n mime: e.mime,\n size: s?.size || Number.parseInt(s.getcontentlength || \"0\"),\n permissions: n,\n owner: i,\n root: t,\n attributes: {\n ...e,\n ...s,\n hasPreview: s?.[\"has-preview\"]\n }\n };\n return delete d.attributes?.props, e.type === \"file\" ? new ye(d) : new _e(d);\n};\n/**\n * @copyright Copyright (c) 2022 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 */\nclass Te {\n _views = [];\n _currentView = null;\n register(t) {\n if (this._views.find((r) => r.id === t.id))\n throw new Error(`View id ${t.id} is already registered`);\n this._views.push(t);\n }\n remove(t) {\n const r = this._views.findIndex((s) => s.id === t);\n r !== -1 && this._views.splice(r, 1);\n }\n get views() {\n return this._views;\n }\n setActive(t) {\n this._currentView = t;\n }\n get active() {\n return this._currentView;\n }\n}\nconst ar = function() {\n return typeof window._nc_navigation > \"u\" && (window._nc_navigation = new Te(), m.debug(\"Navigation service initialized\")), window._nc_navigation;\n};\n/**\n * @copyright Copyright (c) 2022 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 */\nclass Ie {\n _column;\n constructor(t) {\n Ae(t), this._column = t;\n }\n get id() {\n return this._column.id;\n }\n get title() {\n return this._column.title;\n }\n get render() {\n return this._column.render;\n }\n get sort() {\n return this._column.sort;\n }\n get summary() {\n return this._column.summary;\n }\n}\nconst Ae = function(e) {\n if (!e.id || typeof e.id != \"string\")\n throw new Error(\"A column id is required\");\n if (!e.title || typeof e.title != \"string\")\n throw new Error(\"A column title is required\");\n if (!e.render || typeof e.render != \"function\")\n throw new Error(\"A render function is required\");\n if (e.sort && typeof e.sort != \"function\")\n throw new Error(\"Column sortFunction must be a function\");\n if (e.summary && typeof e.summary != \"function\")\n throw new Error(\"Column summary must be a function\");\n return !0;\n};\nvar S = {}, O = {};\n(function(e) {\n const t = \":A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\", r = t + \"\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\", s = \"[\" + t + \"][\" + r + \"]*\", n = new RegExp(\"^\" + s + \"$\"), i = function(u, o) {\n const a = [];\n let l = o.exec(u);\n for (; l; ) {\n const f = [];\n f.startIndex = o.lastIndex - l[0].length;\n const c = l.length;\n for (let g = 0; g < c; g++)\n f.push(l[g]);\n a.push(f), l = o.exec(u);\n }\n return a;\n }, d = function(u) {\n const o = n.exec(u);\n return !(o === null || typeof o > \"u\");\n };\n e.isExist = function(u) {\n return typeof u < \"u\";\n }, e.isEmptyObject = function(u) {\n return Object.keys(u).length === 0;\n }, e.merge = function(u, o, a) {\n if (o) {\n const l = Object.keys(o), f = l.length;\n for (let c = 0; c < f; c++)\n a === \"strict\" ? u[l[c]] = [o[l[c]]] : u[l[c]] = o[l[c]];\n }\n }, e.getValue = function(u) {\n return e.isExist(u) ? u : \"\";\n }, e.isName = d, e.getAllMatches = i, e.nameRegexp = s;\n})(O);\nconst M = O, Oe = {\n allowBooleanAttributes: !1,\n //A tag can have attributes without any value\n unpairedTags: []\n};\nS.validate = function(e, t) {\n t = Object.assign({}, Oe, t);\n const r = [];\n let s = !1, n = !1;\n e[0] === \"\\uFEFF\" && (e = e.substr(1));\n for (let i = 0; i < e.length; i++)\n if (e[i] === \"<\" && e[i + 1] === \"?\") {\n if (i += 2, i = G(e, i), i.err)\n return i;\n } else if (e[i] === \"<\") {\n let d = i;\n if (i++, e[i] === \"!\") {\n i = z(e, i);\n continue;\n } else {\n let u = !1;\n e[i] === \"/\" && (u = !0, i++);\n let o = \"\";\n for (; i < e.length && e[i] !== \">\" && e[i] !== \" \" && e[i] !== \"\t\" && e[i] !== `\n` && e[i] !== \"\\r\"; i++)\n o += e[i];\n if (o = o.trim(), o[o.length - 1] === \"/\" && (o = o.substring(0, o.length - 1), i--), !Re(o)) {\n let f;\n return o.trim().length === 0 ? f = \"Invalid space after '<'.\" : f = \"Tag '\" + o + \"' is an invalid name.\", p(\"InvalidTag\", f, w(e, i));\n }\n const a = xe(e, i);\n if (a === !1)\n return p(\"InvalidAttr\", \"Attributes for '\" + o + \"' have open quote.\", w(e, i));\n let l = a.value;\n if (i = a.index, l[l.length - 1] === \"/\") {\n const f = i - l.length;\n l = l.substring(0, l.length - 1);\n const c = H(l, t);\n if (c === !0)\n s = !0;\n else\n return p(c.err.code, c.err.msg, w(e, f + c.err.line));\n } else if (u)\n if (a.tagClosed) {\n if (l.trim().length > 0)\n return p(\"InvalidTag\", \"Closing tag '\" + o + \"' can't have attributes or invalid starting.\", w(e, d));\n {\n const f = r.pop();\n if (o !== f.tagName) {\n let c = w(e, f.tagStartPos);\n return p(\n \"InvalidTag\",\n \"Expected closing tag '\" + f.tagName + \"' (opened in line \" + c.line + \", col \" + c.col + \") instead of closing tag '\" + o + \"'.\",\n w(e, d)\n );\n }\n r.length == 0 && (n = !0);\n }\n } else\n return p(\"InvalidTag\", \"Closing tag '\" + o + \"' doesn't have proper closing.\", w(e, i));\n else {\n const f = H(l, t);\n if (f !== !0)\n return p(f.err.code, f.err.msg, w(e, i - l.length + f.err.line));\n if (n === !0)\n return p(\"InvalidXml\", \"Multiple possible root nodes found.\", w(e, i));\n t.unpairedTags.indexOf(o) !== -1 || r.push({ tagName: o, tagStartPos: d }), s = !0;\n }\n for (i++; i < e.length; i++)\n if (e[i] === \"<\")\n if (e[i + 1] === \"!\") {\n i++, i = z(e, i);\n continue;\n } else if (e[i + 1] === \"?\") {\n if (i = G(e, ++i), i.err)\n return i;\n } else\n break;\n else if (e[i] === \"&\") {\n const f = Ve(e, i);\n if (f == -1)\n return p(\"InvalidChar\", \"char '&' is not expected.\", w(e, i));\n i = f;\n } else if (n === !0 && !U(e[i]))\n return p(\"InvalidXml\", \"Extra text at the end\", w(e, i));\n e[i] === \"<\" && i--;\n }\n } else {\n if (U(e[i]))\n continue;\n return p(\"InvalidChar\", \"char '\" + e[i] + \"' is not expected.\", w(e, i));\n }\n if (s) {\n if (r.length == 1)\n return p(\"InvalidTag\", \"Unclosed tag '\" + r[0].tagName + \"'.\", w(e, r[0].tagStartPos));\n if (r.length > 0)\n return p(\"InvalidXml\", \"Invalid '\" + JSON.stringify(r.map((i) => i.tagName), null, 4).replace(/\\r?\\n/g, \"\") + \"' found.\", { line: 1, col: 1 });\n } else\n return p(\"InvalidXml\", \"Start tag expected.\", 1);\n return !0;\n};\nfunction U(e) {\n return e === \" \" || e === \"\t\" || e === `\n` || e === \"\\r\";\n}\nfunction G(e, t) {\n const r = t;\n for (; t < e.length; t++)\n if (e[t] == \"?\" || e[t] == \" \") {\n const s = e.substr(r, t - r);\n if (t > 5 && s === \"xml\")\n return p(\"InvalidXml\", \"XML declaration allowed only at the start of the document.\", w(e, t));\n if (e[t] == \"?\" && e[t + 1] == \">\") {\n t++;\n break;\n } else\n continue;\n }\n return t;\n}\nfunction z(e, t) {\n if (e.length > t + 5 && e[t + 1] === \"-\" && e[t + 2] === \"-\") {\n for (t += 3; t < e.length; t++)\n if (e[t] === \"-\" && e[t + 1] === \"-\" && e[t + 2] === \">\") {\n t += 2;\n break;\n }\n } else if (e.length > t + 8 && e[t + 1] === \"D\" && e[t + 2] === \"O\" && e[t + 3] === \"C\" && e[t + 4] === \"T\" && e[t + 5] === \"Y\" && e[t + 6] === \"P\" && e[t + 7] === \"E\") {\n let r = 1;\n for (t += 8; t < e.length; t++)\n if (e[t] === \"<\")\n r++;\n else if (e[t] === \">\" && (r--, r === 0))\n break;\n } else if (e.length > t + 9 && e[t + 1] === \"[\" && e[t + 2] === \"C\" && e[t + 3] === \"D\" && e[t + 4] === \"A\" && e[t + 5] === \"T\" && e[t + 6] === \"A\" && e[t + 7] === \"[\") {\n for (t += 8; t < e.length; t++)\n if (e[t] === \"]\" && e[t + 1] === \"]\" && e[t + 2] === \">\") {\n t += 2;\n break;\n }\n }\n return t;\n}\nconst Ce = '\"', Pe = \"'\";\nfunction xe(e, t) {\n let r = \"\", s = \"\", n = !1;\n for (; t < e.length; t++) {\n if (e[t] === Ce || e[t] === Pe)\n s === \"\" ? s = e[t] : s !== e[t] || (s = \"\");\n else if (e[t] === \">\" && s === \"\") {\n n = !0;\n break;\n }\n r += e[t];\n }\n return s !== \"\" ? !1 : {\n value: r,\n index: t,\n tagClosed: n\n };\n}\nconst $e = new RegExp(`(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*(['\"])(([\\\\s\\\\S])*?)\\\\5)?`, \"g\");\nfunction H(e, t) {\n const r = M.getAllMatches(e, $e), s = {};\n for (let n = 0; n < r.length; n++) {\n if (r[n][1].length === 0)\n return p(\"InvalidAttr\", \"Attribute '\" + r[n][2] + \"' has no space in starting.\", v(r[n]));\n if (r[n][3] !== void 0 && r[n][4] === void 0)\n return p(\"InvalidAttr\", \"Attribute '\" + r[n][2] + \"' is without value.\", v(r[n]));\n if (r[n][3] === void 0 && !t.allowBooleanAttributes)\n return p(\"InvalidAttr\", \"boolean attribute '\" + r[n][2] + \"' is not allowed.\", v(r[n]));\n const i = r[n][2];\n if (!Le(i))\n return p(\"InvalidAttr\", \"Attribute '\" + i + \"' is an invalid name.\", v(r[n]));\n if (!s.hasOwnProperty(i))\n s[i] = 1;\n else\n return p(\"InvalidAttr\", \"Attribute '\" + i + \"' is repeated.\", v(r[n]));\n }\n return !0;\n}\nfunction Fe(e, t) {\n let r = /\\d/;\n for (e[t] === \"x\" && (t++, r = /[\\da-fA-F]/); t < e.length; t++) {\n if (e[t] === \";\")\n return t;\n if (!e[t].match(r))\n break;\n }\n return -1;\n}\nfunction Ve(e, t) {\n if (t++, e[t] === \";\")\n return -1;\n if (e[t] === \"#\")\n return t++, Fe(e, t);\n let r = 0;\n for (; t < e.length; t++, r++)\n if (!(e[t].match(/\\w/) && r < 20)) {\n if (e[t] === \";\")\n break;\n return -1;\n }\n return t;\n}\nfunction p(e, t, r) {\n return {\n err: {\n code: e,\n msg: t,\n line: r.line || r,\n col: r.col\n }\n };\n}\nfunction Le(e) {\n return M.isName(e);\n}\nfunction Re(e) {\n return M.isName(e);\n}\nfunction w(e, t) {\n const r = e.substring(0, t).split(/\\r?\\n/);\n return {\n line: r.length,\n // column number is last line's length + 1, because column numbering starts at 1:\n col: r[r.length - 1].length + 1\n };\n}\nfunction v(e) {\n return e.startIndex + e[1].length;\n}\nvar k = {};\nconst re = {\n preserveOrder: !1,\n attributeNamePrefix: \"@_\",\n attributesGroupName: !1,\n textNodeName: \"#text\",\n ignoreAttributes: !0,\n removeNSPrefix: !1,\n // remove NS from tag name or attribute name if true\n allowBooleanAttributes: !1,\n //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseTagValue: !0,\n parseAttributeValue: !1,\n trimValues: !0,\n //Trim string values of tag and attributes\n cdataPropName: !1,\n numberParseOptions: {\n hex: !0,\n leadingZeros: !0,\n eNotation: !0\n },\n tagValueProcessor: function(e, t) {\n return t;\n },\n attributeValueProcessor: function(e, t) {\n return t;\n },\n stopNodes: [],\n //nested tags will not be parsed even for errors\n alwaysCreateTextNode: !1,\n isArray: () => !1,\n commentPropName: !1,\n unpairedTags: [],\n processEntities: !0,\n htmlEntities: !1,\n ignoreDeclaration: !1,\n ignorePiTags: !1,\n transformTagName: !1,\n transformAttributeName: !1,\n updateTag: function(e, t, r) {\n return e;\n }\n // skipEmptyListItem: false\n}, Se = function(e) {\n return Object.assign({}, re, e);\n};\nk.buildOptions = Se;\nk.defaultOptions = re;\nclass Me {\n constructor(t) {\n this.tagname = t, this.child = [], this[\":@\"] = {};\n }\n add(t, r) {\n t === \"__proto__\" && (t = \"#__proto__\"), this.child.push({ [t]: r });\n }\n addChild(t) {\n t.tagname === \"__proto__\" && (t.tagname = \"#__proto__\"), t[\":@\"] && Object.keys(t[\":@\"]).length > 0 ? this.child.push({ [t.tagname]: t.child, \":@\": t[\":@\"] }) : this.child.push({ [t.tagname]: t.child });\n }\n}\nvar ke = Me;\nconst Be = O;\nfunction qe(e, t) {\n const r = {};\n if (e[t + 3] === \"O\" && e[t + 4] === \"C\" && e[t + 5] === \"T\" && e[t + 6] === \"Y\" && e[t + 7] === \"P\" && e[t + 8] === \"E\") {\n t = t + 9;\n let s = 1, n = !1, i = !1, d = \"\";\n for (; t < e.length; t++)\n if (e[t] === \"<\" && !i) {\n if (n && Ge(e, t))\n t += 7, [entityName, val, t] = Xe(e, t + 1), val.indexOf(\"&\") === -1 && (r[We(entityName)] = {\n regx: RegExp(`&${entityName};`, \"g\"),\n val\n });\n else if (n && ze(e, t))\n t += 8;\n else if (n && He(e, t))\n t += 8;\n else if (n && Ke(e, t))\n t += 9;\n else if (Ue)\n i = !0;\n else\n throw new Error(\"Invalid DOCTYPE\");\n s++, d = \"\";\n } else if (e[t] === \">\") {\n if (i ? e[t - 1] === \"-\" && e[t - 2] === \"-\" && (i = !1, s--) : s--, s === 0)\n break;\n } else\n e[t] === \"[\" ? n = !0 : d += e[t];\n if (s !== 0)\n throw new Error(\"Unclosed DOCTYPE\");\n } else\n throw new Error(\"Invalid Tag instead of DOCTYPE\");\n return { entities: r, i: t };\n}\nfunction Xe(e, t) {\n let r = \"\";\n for (; t < e.length && e[t] !== \"'\" && e[t] !== '\"'; t++)\n r += e[t];\n if (r = r.trim(), r.indexOf(\" \") !== -1)\n throw new Error(\"External entites are not supported\");\n const s = e[t++];\n let n = \"\";\n for (; t < e.length && e[t] !== s; t++)\n n += e[t];\n return [r, n, t];\n}\nfunction Ue(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"-\" && e[t + 3] === \"-\";\n}\nfunction Ge(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"E\" && e[t + 3] === \"N\" && e[t + 4] === \"T\" && e[t + 5] === \"I\" && e[t + 6] === \"T\" && e[t + 7] === \"Y\";\n}\nfunction ze(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"E\" && e[t + 3] === \"L\" && e[t + 4] === \"E\" && e[t + 5] === \"M\" && e[t + 6] === \"E\" && e[t + 7] === \"N\" && e[t + 8] === \"T\";\n}\nfunction He(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"A\" && e[t + 3] === \"T\" && e[t + 4] === \"T\" && e[t + 5] === \"L\" && e[t + 6] === \"I\" && e[t + 7] === \"S\" && e[t + 8] === \"T\";\n}\nfunction Ke(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"N\" && e[t + 3] === \"O\" && e[t + 4] === \"T\" && e[t + 5] === \"A\" && e[t + 6] === \"T\" && e[t + 7] === \"I\" && e[t + 8] === \"O\" && e[t + 9] === \"N\";\n}\nfunction We(e) {\n if (Be.isName(e))\n return e;\n throw new Error(`Invalid entity name ${e}`);\n}\nvar Ze = qe;\nconst je = /^[-+]?0x[a-fA-F0-9]+$/, Ye = /^([\\-\\+])?(0*)(\\.[0-9]+([eE]\\-?[0-9]+)?|[0-9]+(\\.[0-9]+([eE]\\-?[0-9]+)?)?)$/;\n!Number.parseInt && window.parseInt && (Number.parseInt = window.parseInt);\n!Number.parseFloat && window.parseFloat && (Number.parseFloat = window.parseFloat);\nconst Je = {\n hex: !0,\n leadingZeros: !0,\n decimalPoint: \".\",\n eNotation: !0\n //skipLike: /regex/\n};\nfunction Qe(e, t = {}) {\n if (t = Object.assign({}, Je, t), !e || typeof e != \"string\")\n return e;\n let r = e.trim();\n if (t.skipLike !== void 0 && t.skipLike.test(r))\n return e;\n if (t.hex && je.test(r))\n return Number.parseInt(r, 16);\n {\n const s = Ye.exec(r);\n if (s) {\n const n = s[1], i = s[2];\n let d = De(s[3]);\n const u = s[4] || s[6];\n if (!t.leadingZeros && i.length > 0 && n && r[2] !== \".\")\n return e;\n if (!t.leadingZeros && i.length > 0 && !n && r[1] !== \".\")\n return e;\n {\n const o = Number(r), a = \"\" + o;\n return a.search(/[eE]/) !== -1 || u ? t.eNotation ? o : e : r.indexOf(\".\") !== -1 ? a === \"0\" && d === \"\" || a === d || n && a === \"-\" + d ? o : e : i ? d === a || n + d === a ? o : e : r === a || r === n + a ? o : e;\n }\n } else\n return e;\n }\n}\nfunction De(e) {\n return e && e.indexOf(\".\") !== -1 && (e = e.replace(/0+$/, \"\"), e === \".\" ? e = \"0\" : e[0] === \".\" ? e = \"0\" + e : e[e.length - 1] === \".\" && (e = e.substr(0, e.length - 1))), e;\n}\nvar et = Qe;\nconst B = O, T = ke, tt = Ze, rt = et;\n\"<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)\".replace(/NAME/g, B.nameRegexp);\nlet nt = class {\n constructor(t) {\n this.options = t, this.currentNode = null, this.tagsNodeStack = [], this.docTypeEntities = {}, this.lastEntities = {\n apos: { regex: /&(apos|#39|#x27);/g, val: \"'\" },\n gt: { regex: /&(gt|#62|#x3E);/g, val: \">\" },\n lt: { regex: /&(lt|#60|#x3C);/g, val: \"<\" },\n quot: { regex: /&(quot|#34|#x22);/g, val: '\"' }\n }, this.ampEntity = { regex: /&(amp|#38|#x26);/g, val: \"&\" }, this.htmlEntities = {\n space: { regex: /&(nbsp|#160);/g, val: \" \" },\n // \"lt\" : { regex: /&(lt|#60);/g, val: \"<\" },\n // \"gt\" : { regex: /&(gt|#62);/g, val: \">\" },\n // \"amp\" : { regex: /&(amp|#38);/g, val: \"&\" },\n // \"quot\" : { regex: /&(quot|#34);/g, val: \"\\\"\" },\n // \"apos\" : { regex: /&(apos|#39);/g, val: \"'\" },\n cent: { regex: /&(cent|#162);/g, val: \"¢\" },\n pound: { regex: /&(pound|#163);/g, val: \"£\" },\n yen: { regex: /&(yen|#165);/g, val: \"¥\" },\n euro: { regex: /&(euro|#8364);/g, val: \"€\" },\n copyright: { regex: /&(copy|#169);/g, val: \"©\" },\n reg: { regex: /&(reg|#174);/g, val: \"®\" },\n inr: { regex: /&(inr|#8377);/g, val: \"₹\" }\n }, this.addExternalEntities = it, this.parseXml = at, this.parseTextData = st, this.resolveNameSpace = ot, this.buildAttributesMap = dt, this.isItStopNode = ht, this.replaceEntitiesValue = ft, this.readStopNodeData = gt, this.saveTextToParentTag = ct, this.addChild = lt;\n }\n};\nfunction it(e) {\n const t = Object.keys(e);\n for (let r = 0; r < t.length; r++) {\n const s = t[r];\n this.lastEntities[s] = {\n regex: new RegExp(\"&\" + s + \";\", \"g\"),\n val: e[s]\n };\n }\n}\nfunction st(e, t, r, s, n, i, d) {\n if (e !== void 0 && (this.options.trimValues && !s && (e = e.trim()), e.length > 0)) {\n d || (e = this.replaceEntitiesValue(e));\n const u = this.options.tagValueProcessor(t, e, r, n, i);\n return u == null ? e : typeof u != typeof e || u !== e ? u : this.options.trimValues ? $(e, this.options.parseTagValue, this.options.numberParseOptions) : e.trim() === e ? $(e, this.options.parseTagValue, this.options.numberParseOptions) : e;\n }\n}\nfunction ot(e) {\n if (this.options.removeNSPrefix) {\n const t = e.split(\":\"), r = e.charAt(0) === \"/\" ? \"/\" : \"\";\n if (t[0] === \"xmlns\")\n return \"\";\n t.length === 2 && (e = r + t[1]);\n }\n return e;\n}\nconst ut = new RegExp(`([^\\\\s=]+)\\\\s*(=\\\\s*(['\"])([\\\\s\\\\S]*?)\\\\3)?`, \"gm\");\nfunction dt(e, t, r) {\n if (!this.options.ignoreAttributes && typeof e == \"string\") {\n const s = B.getAllMatches(e, ut), n = s.length, i = {};\n for (let d = 0; d < n; d++) {\n const u = this.resolveNameSpace(s[d][1]);\n let o = s[d][4], a = this.options.attributeNamePrefix + u;\n if (u.length)\n if (this.options.transformAttributeName && (a = this.options.transformAttributeName(a)), a === \"__proto__\" && (a = \"#__proto__\"), o !== void 0) {\n this.options.trimValues && (o = o.trim()), o = this.replaceEntitiesValue(o);\n const l = this.options.attributeValueProcessor(u, o, t);\n l == null ? i[a] = o : typeof l != typeof o || l !== o ? i[a] = l : i[a] = $(\n o,\n this.options.parseAttributeValue,\n this.options.numberParseOptions\n );\n } else\n this.options.allowBooleanAttributes && (i[a] = !0);\n }\n if (!Object.keys(i).length)\n return;\n if (this.options.attributesGroupName) {\n const d = {};\n return d[this.options.attributesGroupName] = i, d;\n }\n return i;\n }\n}\nconst at = function(e) {\n e = e.replace(/\\r\\n?/g, `\n`);\n const t = new T(\"!xml\");\n let r = t, s = \"\", n = \"\";\n for (let i = 0; i < e.length; i++)\n if (e[i] === \"<\")\n if (e[i + 1] === \"/\") {\n const u = y(e, \">\", i, \"Closing Tag is not closed.\");\n let o = e.substring(i + 2, u).trim();\n if (this.options.removeNSPrefix) {\n const f = o.indexOf(\":\");\n f !== -1 && (o = o.substr(f + 1));\n }\n this.options.transformTagName && (o = this.options.transformTagName(o)), r && (s = this.saveTextToParentTag(s, r, n));\n const a = n.substring(n.lastIndexOf(\".\") + 1);\n if (o && this.options.unpairedTags.indexOf(o) !== -1)\n throw new Error(`Unpaired tag can not be used as closing tag: </${o}>`);\n let l = 0;\n a && this.options.unpairedTags.indexOf(a) !== -1 ? (l = n.lastIndexOf(\".\", n.lastIndexOf(\".\") - 1), this.tagsNodeStack.pop()) : l = n.lastIndexOf(\".\"), n = n.substring(0, l), r = this.tagsNodeStack.pop(), s = \"\", i = u;\n } else if (e[i + 1] === \"?\") {\n let u = x(e, i, !1, \"?>\");\n if (!u)\n throw new Error(\"Pi Tag is not closed.\");\n if (s = this.saveTextToParentTag(s, r, n), !(this.options.ignoreDeclaration && u.tagName === \"?xml\" || this.options.ignorePiTags)) {\n const o = new T(u.tagName);\n o.add(this.options.textNodeName, \"\"), u.tagName !== u.tagExp && u.attrExpPresent && (o[\":@\"] = this.buildAttributesMap(u.tagExp, n, u.tagName)), this.addChild(r, o, n);\n }\n i = u.closeIndex + 1;\n } else if (e.substr(i + 1, 3) === \"!--\") {\n const u = y(e, \"-->\", i + 4, \"Comment is not closed.\");\n if (this.options.commentPropName) {\n const o = e.substring(i + 4, u - 2);\n s = this.saveTextToParentTag(s, r, n), r.add(this.options.commentPropName, [{ [this.options.textNodeName]: o }]);\n }\n i = u;\n } else if (e.substr(i + 1, 2) === \"!D\") {\n const u = tt(e, i);\n this.docTypeEntities = u.entities, i = u.i;\n } else if (e.substr(i + 1, 2) === \"![\") {\n const u = y(e, \"]]>\", i, \"CDATA is not closed.\") - 2, o = e.substring(i + 9, u);\n if (s = this.saveTextToParentTag(s, r, n), this.options.cdataPropName)\n r.add(this.options.cdataPropName, [{ [this.options.textNodeName]: o }]);\n else {\n let a = this.parseTextData(o, r.tagname, n, !0, !1, !0);\n a == null && (a = \"\"), r.add(this.options.textNodeName, a);\n }\n i = u + 2;\n } else {\n let u = x(e, i, this.options.removeNSPrefix), o = u.tagName;\n const a = u.rawTagName;\n let l = u.tagExp, f = u.attrExpPresent, c = u.closeIndex;\n this.options.transformTagName && (o = this.options.transformTagName(o)), r && s && r.tagname !== \"!xml\" && (s = this.saveTextToParentTag(s, r, n, !1));\n const g = r;\n if (g && this.options.unpairedTags.indexOf(g.tagname) !== -1 && (r = this.tagsNodeStack.pop(), n = n.substring(0, n.lastIndexOf(\".\"))), o !== t.tagname && (n += n ? \".\" + o : o), this.isItStopNode(this.options.stopNodes, n, o)) {\n let h = \"\";\n if (l.length > 0 && l.lastIndexOf(\"/\") === l.length - 1)\n i = u.closeIndex;\n else if (this.options.unpairedTags.indexOf(o) !== -1)\n i = u.closeIndex;\n else {\n const E = this.readStopNodeData(e, a, c + 1);\n if (!E)\n throw new Error(`Unexpected end of ${a}`);\n i = E.i, h = E.tagContent;\n }\n const _ = new T(o);\n o !== l && f && (_[\":@\"] = this.buildAttributesMap(l, n, o)), h && (h = this.parseTextData(h, o, n, !0, f, !0, !0)), n = n.substr(0, n.lastIndexOf(\".\")), _.add(this.options.textNodeName, h), this.addChild(r, _, n);\n } else {\n if (l.length > 0 && l.lastIndexOf(\"/\") === l.length - 1) {\n o[o.length - 1] === \"/\" ? (o = o.substr(0, o.length - 1), n = n.substr(0, n.length - 1), l = o) : l = l.substr(0, l.length - 1), this.options.transformTagName && (o = this.options.transformTagName(o));\n const h = new T(o);\n o !== l && f && (h[\":@\"] = this.buildAttributesMap(l, n, o)), this.addChild(r, h, n), n = n.substr(0, n.lastIndexOf(\".\"));\n } else {\n const h = new T(o);\n this.tagsNodeStack.push(r), o !== l && f && (h[\":@\"] = this.buildAttributesMap(l, n, o)), this.addChild(r, h, n), r = h;\n }\n s = \"\", i = c;\n }\n }\n else\n s += e[i];\n return t.child;\n};\nfunction lt(e, t, r) {\n const s = this.options.updateTag(t.tagname, r, t[\":@\"]);\n s === !1 || (typeof s == \"string\" && (t.tagname = s), e.addChild(t));\n}\nconst ft = function(e) {\n if (this.options.processEntities) {\n for (let t in this.docTypeEntities) {\n const r = this.docTypeEntities[t];\n e = e.replace(r.regx, r.val);\n }\n for (let t in this.lastEntities) {\n const r = this.lastEntities[t];\n e = e.replace(r.regex, r.val);\n }\n if (this.options.htmlEntities)\n for (let t in this.htmlEntities) {\n const r = this.htmlEntities[t];\n e = e.replace(r.regex, r.val);\n }\n e = e.replace(this.ampEntity.regex, this.ampEntity.val);\n }\n return e;\n};\nfunction ct(e, t, r, s) {\n return e && (s === void 0 && (s = Object.keys(t.child).length === 0), e = this.parseTextData(\n e,\n t.tagname,\n r,\n !1,\n t[\":@\"] ? Object.keys(t[\":@\"]).length !== 0 : !1,\n s\n ), e !== void 0 && e !== \"\" && t.add(this.options.textNodeName, e), e = \"\"), e;\n}\nfunction ht(e, t, r) {\n const s = \"*.\" + r;\n for (const n in e) {\n const i = e[n];\n if (s === i || t === i)\n return !0;\n }\n return !1;\n}\nfunction pt(e, t, r = \">\") {\n let s, n = \"\";\n for (let i = t; i < e.length; i++) {\n let d = e[i];\n if (s)\n d === s && (s = \"\");\n else if (d === '\"' || d === \"'\")\n s = d;\n else if (d === r[0])\n if (r[1]) {\n if (e[i + 1] === r[1])\n return {\n data: n,\n index: i\n };\n } else\n return {\n data: n,\n index: i\n };\n else\n d === \"\t\" && (d = \" \");\n n += d;\n }\n}\nfunction y(e, t, r, s) {\n const n = e.indexOf(t, r);\n if (n === -1)\n throw new Error(s);\n return n + t.length - 1;\n}\nfunction x(e, t, r, s = \">\") {\n const n = pt(e, t + 1, s);\n if (!n)\n return;\n let i = n.data;\n const d = n.index, u = i.search(/\\s/);\n let o = i, a = !0;\n u !== -1 && (o = i.substr(0, u).replace(/\\s\\s*$/, \"\"), i = i.substr(u + 1));\n const l = o;\n if (r) {\n const f = o.indexOf(\":\");\n f !== -1 && (o = o.substr(f + 1), a = o !== n.data.substr(f + 1));\n }\n return {\n tagName: o,\n tagExp: i,\n closeIndex: d,\n attrExpPresent: a,\n rawTagName: l\n };\n}\nfunction gt(e, t, r) {\n const s = r;\n let n = 1;\n for (; r < e.length; r++)\n if (e[r] === \"<\")\n if (e[r + 1] === \"/\") {\n const i = y(e, \">\", r, `${t} is not closed`);\n if (e.substring(r + 2, i).trim() === t && (n--, n === 0))\n return {\n tagContent: e.substring(s, r),\n i\n };\n r = i;\n } else if (e[r + 1] === \"?\")\n r = y(e, \"?>\", r + 1, \"StopNode is not closed.\");\n else if (e.substr(r + 1, 3) === \"!--\")\n r = y(e, \"-->\", r + 3, \"StopNode is not closed.\");\n else if (e.substr(r + 1, 2) === \"![\")\n r = y(e, \"]]>\", r, \"StopNode is not closed.\") - 2;\n else {\n const i = x(e, r, \">\");\n i && ((i && i.tagName) === t && i.tagExp[i.tagExp.length - 1] !== \"/\" && n++, r = i.closeIndex);\n }\n}\nfunction $(e, t, r) {\n if (t && typeof e == \"string\") {\n const s = e.trim();\n return s === \"true\" ? !0 : s === \"false\" ? !1 : rt(e, r);\n } else\n return B.isExist(e) ? e : \"\";\n}\nvar wt = nt, ne = {};\nfunction mt(e, t) {\n return ie(e, t);\n}\nfunction ie(e, t, r) {\n let s;\n const n = {};\n for (let i = 0; i < e.length; i++) {\n const d = e[i], u = Nt(d);\n let o = \"\";\n if (r === void 0 ? o = u : o = r + \".\" + u, u === t.textNodeName)\n s === void 0 ? s = d[u] : s += \"\" + d[u];\n else {\n if (u === void 0)\n continue;\n if (d[u]) {\n let a = ie(d[u], t, o);\n const l = bt(a, t);\n d[\":@\"] ? Et(a, d[\":@\"], o, t) : Object.keys(a).length === 1 && a[t.textNodeName] !== void 0 && !t.alwaysCreateTextNode ? a = a[t.textNodeName] : Object.keys(a).length === 0 && (t.alwaysCreateTextNode ? a[t.textNodeName] = \"\" : a = \"\"), n[u] !== void 0 && n.hasOwnProperty(u) ? (Array.isArray(n[u]) || (n[u] = [n[u]]), n[u].push(a)) : t.isArray(u, o, l) ? n[u] = [a] : n[u] = a;\n }\n }\n }\n return typeof s == \"string\" ? s.length > 0 && (n[t.textNodeName] = s) : s !== void 0 && (n[t.textNodeName] = s), n;\n}\nfunction Nt(e) {\n const t = Object.keys(e);\n for (let r = 0; r < t.length; r++) {\n const s = t[r];\n if (s !== \":@\")\n return s;\n }\n}\nfunction Et(e, t, r, s) {\n if (t) {\n const n = Object.keys(t), i = n.length;\n for (let d = 0; d < i; d++) {\n const u = n[d];\n s.isArray(u, r + \".\" + u, !0, !0) ? e[u] = [t[u]] : e[u] = t[u];\n }\n }\n}\nfunction bt(e, t) {\n const { textNodeName: r } = t, s = Object.keys(e).length;\n return !!(s === 0 || s === 1 && (e[r] || typeof e[r] == \"boolean\" || e[r] === 0));\n}\nne.prettify = mt;\nconst { buildOptions: yt } = k, _t = wt, { prettify: vt } = ne, Tt = S;\nlet It = class {\n constructor(t) {\n this.externalEntities = {}, this.options = yt(t);\n }\n /**\n * Parse XML dats to JS object \n * @param {string|Buffer} xmlData \n * @param {boolean|Object} validationOption \n */\n parse(t, r) {\n if (typeof t != \"string\")\n if (t.toString)\n t = t.toString();\n else\n throw new Error(\"XML data is accepted in String or Bytes[] form.\");\n if (r) {\n r === !0 && (r = {});\n const i = Tt.validate(t, r);\n if (i !== !0)\n throw Error(`${i.err.msg}:${i.err.line}:${i.err.col}`);\n }\n const s = new _t(this.options);\n s.addExternalEntities(this.externalEntities);\n const n = s.parseXml(t);\n return this.options.preserveOrder || n === void 0 ? n : vt(n, this.options);\n }\n /**\n * Add Entity which is not by default supported by this library\n * @param {string} key \n * @param {string} value \n */\n addEntity(t, r) {\n if (r.indexOf(\"&\") !== -1)\n throw new Error(\"Entity value can't have '&'\");\n if (t.indexOf(\"&\") !== -1 || t.indexOf(\";\") !== -1)\n throw new Error(\"An entity must be set without '&' and ';'. Eg. use '#xD' for '&#xD;'\");\n if (r === \"&\")\n throw new Error(\"An entity with value '&' is not permitted\");\n this.externalEntities[t] = r;\n }\n};\nvar At = It;\nconst Ot = `\n`;\nfunction Ct(e, t) {\n let r = \"\";\n return t.format && t.indentBy.length > 0 && (r = Ot), se(e, t, \"\", r);\n}\nfunction se(e, t, r, s) {\n let n = \"\", i = !1;\n for (let d = 0; d < e.length; d++) {\n const u = e[d], o = Pt(u);\n if (o === void 0)\n continue;\n let a = \"\";\n if (r.length === 0 ? a = o : a = `${r}.${o}`, o === t.textNodeName) {\n let h = u[o];\n xt(a, t) || (h = t.tagValueProcessor(o, h), h = oe(h, t)), i && (n += s), n += h, i = !1;\n continue;\n } else if (o === t.cdataPropName) {\n i && (n += s), n += `<![CDATA[${u[o][0][t.textNodeName]}]]>`, i = !1;\n continue;\n } else if (o === t.commentPropName) {\n n += s + `<!--${u[o][0][t.textNodeName]}-->`, i = !0;\n continue;\n } else if (o[0] === \"?\") {\n const h = K(u[\":@\"], t), _ = o === \"?xml\" ? \"\" : s;\n let E = u[o][0][t.textNodeName];\n E = E.length !== 0 ? \" \" + E : \"\", n += _ + `<${o}${E}${h}?>`, i = !0;\n continue;\n }\n let l = s;\n l !== \"\" && (l += t.indentBy);\n const f = K(u[\":@\"], t), c = s + `<${o}${f}`, g = se(u[o], t, a, l);\n t.unpairedTags.indexOf(o) !== -1 ? t.suppressUnpairedNode ? n += c + \">\" : n += c + \"/>\" : (!g || g.length === 0) && t.suppressEmptyNode ? n += c + \"/>\" : g && g.endsWith(\">\") ? n += c + `>${g}${s}</${o}>` : (n += c + \">\", g && s !== \"\" && (g.includes(\"/>\") || g.includes(\"</\")) ? n += s + t.indentBy + g + s : n += g, n += `</${o}>`), i = !0;\n }\n return n;\n}\nfunction Pt(e) {\n const t = Object.keys(e);\n for (let r = 0; r < t.length; r++) {\n const s = t[r];\n if (e.hasOwnProperty(s) && s !== \":@\")\n return s;\n }\n}\nfunction K(e, t) {\n let r = \"\";\n if (e && !t.ignoreAttributes)\n for (let s in e) {\n if (!e.hasOwnProperty(s))\n continue;\n let n = t.attributeValueProcessor(s, e[s]);\n n = oe(n, t), n === !0 && t.suppressBooleanAttributes ? r += ` ${s.substr(t.attributeNamePrefix.length)}` : r += ` ${s.substr(t.attributeNamePrefix.length)}=\"${n}\"`;\n }\n return r;\n}\nfunction xt(e, t) {\n e = e.substr(0, e.length - t.textNodeName.length - 1);\n let r = e.substr(e.lastIndexOf(\".\") + 1);\n for (let s in t.stopNodes)\n if (t.stopNodes[s] === e || t.stopNodes[s] === \"*.\" + r)\n return !0;\n return !1;\n}\nfunction oe(e, t) {\n if (e && e.length > 0 && t.processEntities)\n for (let r = 0; r < t.entities.length; r++) {\n const s = t.entities[r];\n e = e.replace(s.regex, s.val);\n }\n return e;\n}\nvar $t = Ct;\nconst Ft = $t, Vt = {\n attributeNamePrefix: \"@_\",\n attributesGroupName: !1,\n textNodeName: \"#text\",\n ignoreAttributes: !0,\n cdataPropName: !1,\n format: !1,\n indentBy: \" \",\n suppressEmptyNode: !1,\n suppressUnpairedNode: !0,\n suppressBooleanAttributes: !0,\n tagValueProcessor: function(e, t) {\n return t;\n },\n attributeValueProcessor: function(e, t) {\n return t;\n },\n preserveOrder: !1,\n commentPropName: !1,\n unpairedTags: [],\n entities: [\n { regex: new RegExp(\"&\", \"g\"), val: \"&amp;\" },\n //it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \"&gt;\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"&lt;\" },\n { regex: new RegExp(\"'\", \"g\"), val: \"&apos;\" },\n { regex: new RegExp('\"', \"g\"), val: \"&quot;\" }\n ],\n processEntities: !0,\n stopNodes: [],\n // transformTagName: false,\n // transformAttributeName: false,\n oneListGroup: !1\n};\nfunction b(e) {\n this.options = Object.assign({}, Vt, e), this.options.ignoreAttributes || this.options.attributesGroupName ? this.isAttribute = function() {\n return !1;\n } : (this.attrPrefixLen = this.options.attributeNamePrefix.length, this.isAttribute = St), this.processTextOrObjNode = Lt, this.options.format ? (this.indentate = Rt, this.tagEndChar = `>\n`, this.newLine = `\n`) : (this.indentate = function() {\n return \"\";\n }, this.tagEndChar = \">\", this.newLine = \"\");\n}\nb.prototype.build = function(e) {\n return this.options.preserveOrder ? Ft(e, this.options) : (Array.isArray(e) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1 && (e = {\n [this.options.arrayNodeName]: e\n }), this.j2x(e, 0).val);\n};\nb.prototype.j2x = function(e, t) {\n let r = \"\", s = \"\";\n for (let n in e)\n if (Object.prototype.hasOwnProperty.call(e, n))\n if (typeof e[n] > \"u\")\n this.isAttribute(n) && (s += \"\");\n else if (e[n] === null)\n this.isAttribute(n) ? s += \"\" : n[0] === \"?\" ? s += this.indentate(t) + \"<\" + n + \"?\" + this.tagEndChar : s += this.indentate(t) + \"<\" + n + \"/\" + this.tagEndChar;\n else if (e[n] instanceof Date)\n s += this.buildTextValNode(e[n], n, \"\", t);\n else if (typeof e[n] != \"object\") {\n const i = this.isAttribute(n);\n if (i)\n r += this.buildAttrPairStr(i, \"\" + e[n]);\n else if (n === this.options.textNodeName) {\n let d = this.options.tagValueProcessor(n, \"\" + e[n]);\n s += this.replaceEntitiesValue(d);\n } else\n s += this.buildTextValNode(e[n], n, \"\", t);\n } else if (Array.isArray(e[n])) {\n const i = e[n].length;\n let d = \"\";\n for (let u = 0; u < i; u++) {\n const o = e[n][u];\n typeof o > \"u\" || (o === null ? n[0] === \"?\" ? s += this.indentate(t) + \"<\" + n + \"?\" + this.tagEndChar : s += this.indentate(t) + \"<\" + n + \"/\" + this.tagEndChar : typeof o == \"object\" ? this.options.oneListGroup ? d += this.j2x(o, t + 1).val : d += this.processTextOrObjNode(o, n, t) : d += this.buildTextValNode(o, n, \"\", t));\n }\n this.options.oneListGroup && (d = this.buildObjectNode(d, n, \"\", t)), s += d;\n } else if (this.options.attributesGroupName && n === this.options.attributesGroupName) {\n const i = Object.keys(e[n]), d = i.length;\n for (let u = 0; u < d; u++)\n r += this.buildAttrPairStr(i[u], \"\" + e[n][i[u]]);\n } else\n s += this.processTextOrObjNode(e[n], n, t);\n return { attrStr: r, val: s };\n};\nb.prototype.buildAttrPairStr = function(e, t) {\n return t = this.options.attributeValueProcessor(e, \"\" + t), t = this.replaceEntitiesValue(t), this.options.suppressBooleanAttributes && t === \"true\" ? \" \" + e : \" \" + e + '=\"' + t + '\"';\n};\nfunction Lt(e, t, r) {\n const s = this.j2x(e, r + 1);\n return e[this.options.textNodeName] !== void 0 && Object.keys(e).length === 1 ? this.buildTextValNode(e[this.options.textNodeName], t, s.attrStr, r) : this.buildObjectNode(s.val, t, s.attrStr, r);\n}\nb.prototype.buildObjectNode = function(e, t, r, s) {\n if (e === \"\")\n return t[0] === \"?\" ? this.indentate(s) + \"<\" + t + r + \"?\" + this.tagEndChar : this.indentate(s) + \"<\" + t + r + this.closeTag(t) + this.tagEndChar;\n {\n let n = \"</\" + t + this.tagEndChar, i = \"\";\n return t[0] === \"?\" && (i = \"?\", n = \"\"), (r || r === \"\") && e.indexOf(\"<\") === -1 ? this.indentate(s) + \"<\" + t + r + i + \">\" + e + n : this.options.commentPropName !== !1 && t === this.options.commentPropName && i.length === 0 ? this.indentate(s) + `<!--${e}-->` + this.newLine : this.indentate(s) + \"<\" + t + r + i + this.tagEndChar + e + this.indentate(s) + n;\n }\n};\nb.prototype.closeTag = function(e) {\n let t = \"\";\n return this.options.unpairedTags.indexOf(e) !== -1 ? this.options.suppressUnpairedNode || (t = \"/\") : this.options.suppressEmptyNode ? t = \"/\" : t = `></${e}`, t;\n};\nb.prototype.buildTextValNode = function(e, t, r, s) {\n if (this.options.cdataPropName !== !1 && t === this.options.cdataPropName)\n return this.indentate(s) + `<![CDATA[${e}]]>` + this.newLine;\n if (this.options.commentPropName !== !1 && t === this.options.commentPropName)\n return this.indentate(s) + `<!--${e}-->` + this.newLine;\n if (t[0] === \"?\")\n return this.indentate(s) + \"<\" + t + r + \"?\" + this.tagEndChar;\n {\n let n = this.options.tagValueProcessor(t, e);\n return n = this.replaceEntitiesValue(n), n === \"\" ? this.indentate(s) + \"<\" + t + r + this.closeTag(t) + this.tagEndChar : this.indentate(s) + \"<\" + t + r + \">\" + n + \"</\" + t + this.tagEndChar;\n }\n};\nb.prototype.replaceEntitiesValue = function(e) {\n if (e && e.length > 0 && this.options.processEntities)\n for (let t = 0; t < this.options.entities.length; t++) {\n const r = this.options.entities[t];\n e = e.replace(r.regex, r.val);\n }\n return e;\n};\nfunction Rt(e) {\n return this.options.indentBy.repeat(e);\n}\nfunction St(e) {\n return e.startsWith(this.options.attributeNamePrefix) && e !== this.options.textNodeName ? e.substr(this.attrPrefixLen) : !1;\n}\nvar Mt = b;\nconst kt = S, Bt = At, qt = Mt;\nvar W = {\n XMLParser: Bt,\n XMLValidator: kt,\n XMLBuilder: qt\n};\nfunction Xt(e) {\n if (typeof e != \"string\")\n throw new TypeError(`Expected a \\`string\\`, got \\`${typeof e}\\``);\n if (e = e.trim(), e.length === 0 || W.XMLValidator.validate(e) !== !0)\n return !1;\n let t;\n const r = new W.XMLParser();\n try {\n t = r.parse(e);\n } catch {\n return !1;\n }\n return !(!t || !(\"svg\" in t));\n}\n/**\n * @copyright Copyright (c) 2022 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 */\nclass cr {\n _view;\n constructor(t) {\n Ut(t), this._view = t;\n }\n get id() {\n return this._view.id;\n }\n get name() {\n return this._view.name;\n }\n get caption() {\n return this._view.caption;\n }\n get emptyTitle() {\n return this._view.emptyTitle;\n }\n get emptyCaption() {\n return this._view.emptyCaption;\n }\n get getContents() {\n return this._view.getContents;\n }\n get icon() {\n return this._view.icon;\n }\n set icon(t) {\n this._view.icon = t;\n }\n get order() {\n return this._view.order;\n }\n set order(t) {\n this._view.order = t;\n }\n get params() {\n return this._view.params;\n }\n set params(t) {\n this._view.params = t;\n }\n get columns() {\n return this._view.columns;\n }\n get emptyView() {\n return this._view.emptyView;\n }\n get parent() {\n return this._view.parent;\n }\n get sticky() {\n return this._view.sticky;\n }\n get expanded() {\n return this._view.expanded;\n }\n set expanded(t) {\n this._view.expanded = t;\n }\n get defaultSortKey() {\n return this._view.defaultSortKey;\n }\n}\nconst Ut = function(e) {\n if (!e.id || typeof e.id != \"string\")\n throw new Error(\"View id is required and must be a string\");\n if (!e.name || typeof e.name != \"string\")\n throw new Error(\"View name is required and must be a string\");\n if (e.columns && e.columns.length > 0 && (!e.caption || typeof e.caption != \"string\"))\n throw new Error(\"View caption is required for top-level views and must be a string\");\n if (!e.getContents || typeof e.getContents != \"function\")\n throw new Error(\"View getContents is required and must be a function\");\n if (!e.icon || typeof e.icon != \"string\" || !Xt(e.icon))\n throw new Error(\"View icon is required and must be a valid svg string\");\n if (!(\"order\" in e) || typeof e.order != \"number\")\n throw new Error(\"View order is required and must be a number\");\n if (e.columns && e.columns.forEach((t) => {\n if (!(t instanceof Ie))\n throw new Error(\"View columns must be an array of Column. Invalid column found\");\n }), e.emptyView && typeof e.emptyView != \"function\")\n throw new Error(\"View emptyView must be a function\");\n if (e.parent && typeof e.parent != \"string\")\n throw new Error(\"View parent must be a string\");\n if (\"sticky\" in e && typeof e.sticky != \"boolean\")\n throw new Error(\"View sticky must be a boolean\");\n if (\"expanded\" in e && typeof e.expanded != \"boolean\")\n throw new Error(\"View expanded must be a boolean\");\n if (e.defaultSortKey && typeof e.defaultSortKey != \"string\")\n throw new Error(\"View defaultSortKey must be a string\");\n return !0;\n};\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\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 */\nconst hr = function(e) {\n return F().registerEntry(e);\n}, pr = function(e) {\n return F().unregisterEntry(e);\n}, gr = function(e) {\n return F().getEntries(e).sort((r, s) => r.order !== void 0 && s.order !== void 0 && r.order !== s.order ? r.order - s.order : r.displayName.localeCompare(s.displayName, void 0, { numeric: !0, sensitivity: \"base\" }));\n};\nexport {\n Ie as Column,\n Z as DefaultType,\n ye as File,\n Qt as FileAction,\n R as FileType,\n _e as Folder,\n tr as Header,\n Te as Navigation,\n D as Node,\n Q as NodeStatus,\n N as Permission,\n cr as View,\n hr as addNewFileMenuEntry,\n ur as davGetClient,\n sr as davGetDefaultPropfind,\n Ee as davGetFavoritesReport,\n or as davGetRecentSearch,\n be as davParsePermissions,\n te as davRemoteURL,\n ve as davResultToNode,\n ee as davRootPath,\n Y as defaultDavNamespaces,\n j as defaultDavProperties,\n Yt as formatFileSize,\n L as getDavNameSpaces,\n V as getDavProperties,\n dr as getFavoriteNodes,\n er as getFileActions,\n nr as getFileListHeaders,\n ar as getNavigation,\n gr as getNewFileMenuEntries,\n Jt as parseFileSize,\n ir as registerDavProperty,\n Dt as registerFileAction,\n rr as registerFileListHeaders,\n pr as removeNewFileMenuEntry\n};\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__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + ({\"3239\":\"settings-users\",\"4529\":\"settings-apps-view\"}[chunkId] || chunkId) + \"-\" + chunkId + \".js?v=\" + {\"1359\":\"d217768bf3f39a7359dd\",\"1439\":\"41c39783c33a6fb28f5c\",\"3239\":\"b380e9fda46ca498c72f\",\"3865\":\"8ecd73fc58224ecd56fe\",\"4529\":\"cbb831939e1ecf715716\",\"8618\":\"1e8f15db3b14455fef8f\",\"9923\":\"0add07b4169aca95df9a\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (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 = 2689;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2689: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (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, [4208], () => (__webpack_require__(74329)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","sanitize","url","replace","requireAdmin","confirmPassword","get","options","axios","post","data","put","delete","params","localStorage","getBuilder","persist","build","orderGroups","groups","orderBy","sort","a","b","usercount","disabled","name","localeCompare","defaults","id","canAdd","canRemove","state","users","minPasswordLength","usersOffset","usersLimit","disabledUsersOffset","disabledUsersLimit","userCount","showConfig","showStoragePath","getItem","showUserBackend","showLastLogin","showNewUserForm","showLanguages","mutations","appendUsers","usersObj","existingUsers","map","_ref","newUsers","Object","values","filter","_ref2","includes","concat","updateDisabledUsers","_usersObj","setPasswordPolicyMinLength","length","initGroups","_ref3","group","assign","addGroup","_ref4","gid","displayName","find","unshift","e","console","error","renameGroup","_ref5","groupIndex","findIndex","groupSearch","updatedGroup","splice","removeGroup","addUserGroup","_ref6","userid","user","enabled","push","removeUserGroup","_ref7","indexOf","addUserSubAdmin","_ref8","subadmin","removeUserSubAdmin","_ref9","deleteUser","userIndex","this","commit","actionType","addUserData","response","ocs","enableDisableUser","_ref10","updateUserCounts","_ref11","disabledGroup","forEach","userGroup","warn","logger","setUserData","_ref12","key","value","humanValue","parseFileSize","resetUsers","setShowConfig","_ref13","setItem","JSON","stringify","CancelToken","searchRequestCancelSource","getters","getUsers","getGroups","getSubadminGroups","getPasswordPolicyMinLength","getUsersOffset","getUsersLimit","getDisabledUsersOffset","getDisabledUsersLimit","getUserCount","getShowConfig","actions","searchUsers","context","_ref14","offset","limit","search","api","generateOcsUrl","catch","isCancel","getUser","userId","_ref15","cancel","source","trim","encodeURIComponent","cancelToken","token","then","usersCount","keys","getDisabledUsers","_ref16","_ref17","limitParam","getUsersFromList","_ref18","getUsersFromGroup","_ref19","groupid","groupId","getCapabilities","password_policy","minLength","_ref20","_ref21","_ref22","_ref23","_ref24","wipeUserDevices","addUser","_ref25","_ref26","dispatch","password","email","quota","language","manager","_ref27","userStatus","_ref28","allowedEmpty","Promise","reject","Error","sendWelcomeMail","APPS_API_FAILURE","showError","t","message","isHTML","initCategories","categories","updateCount","updateCategories","categoriesPromise","gettingCategoriesPromise","setUpdateCount","addCategory","category","appendCategories","categoriesArray","setAllApps","apps","setError","appId","Array","isArray","_id","app","clearError","enableApp","active","setInstallState","canInstall","disableApp","removable","canUnInstall","uninstallApp","needsDownload","installed","updateApp","version","update","resetApps","reset","startLoading","Vue","loading","stopLoading","generateUrl","appIds","_appId","update_required","showInfo","onClick","window","location","reload","close","setTimeout","forceEnableApp","finally","getAllApps","getCategories","shouldRefetchCategories","arguments","undefined","categoriesPromiseResponse","bundles","loadState","getAppBundles","getUpdateCount","getCategoryById","selectedCategoryId","setServerData","serverData","getServerData","setAppConfig","use","Vuex","API_FAILURE","meta","store","useStore","Store","modules","settings","oc","strict","process","getLoggerBuilder","setApp","detectUser","_defineComponent","__name","setup","__props","__sfc","NcContent","_vm","_c","_self","_setupProxy","attrs","_v","path","components","default","UserManagement","navigation","UserManagementNavigation","props","children","redirect","AppStore","AppStoreNavigation","sidebar","AppStoreSidebar","Router","mode","base","linkActiveClass","routes","VTooltip","defaultHtml","sync","router","__webpack_nonce__","btoa","_getRequestToken","getRequestToken","prototype","n","PiniaVuePlugin","pinia","createPinia","render","h","SettingsApp","el","extend","encodeReserveRE","encodeReserveReplacer","c","charCodeAt","toString","commaRE","encode","str","decode","decodeURIComponent","err","castQueryParamValue","String","parseQuery","query","res","split","param","parts","shift","val","join","stringifyQuery","obj","result","val2","x","trailingSlashRE","createRoute","record","redirectedFrom","clone","route","hash","fullPath","getFullPath","matched","formatMatch","freeze","START","parent","ref","_stringifyQuery","isSameRoute","onlyPath","isObjectEqual","aKeys","bKeys","every","i","aVal","bVal","handleRouteEntered","instances","instance","cbs","enteredCbs","i$1","_isBeingDestroyed","View","functional","type","_","routerView","$createElement","$route","cache","_routerViewCache","depth","inactive","_routerRoot","vnodeData","$vnode","keepAlive","_directInactive","_inactive","$parent","routerViewDepth","cachedData","cachedComponent","component","configProps","fillPropsinData","registerRouteInstance","vm","current","hook","prepatch","vnode","componentInstance","init","propsToPass","config","resolveProps","resolvePath","relative","append","firstChar","charAt","stack","pop","segments","segment","cleanPath","isarray","arr","call","pathToRegexp_1","pathToRegexp","RegExp","match","prefix","delimiter","optional","repeat","partial","asterisk","pattern","attachKeys","regexpToRegexp","flags","arrayToRegexp","tokensToRegExp","parse","stringToRegexp","parse_1","tokensToFunction_1","tokensToFunction","tokensToRegExp_1","PATH_REGEXP","tokens","index","defaultDelimiter","exec","m","escaped","slice","next","capture","modifier","escapeGroup","escapeString","substr","encodeURIComponentPretty","encodeURI","toUpperCase","matches","opts","pretty","TypeError","j","test","re","sensitive","end","endsWithDelimiter","compile","regexpCompileCache","create","fillParams","routeMsg","filler","pathMatch","normalizeLocation","raw","_normalized","params$1","rawPath","parsedPath","hashIndex","queryIndex","parsePath","basePath","extraQuery","_parseQuery","parsedQuery","resolveQuery","_Vue","noop","Link","to","required","tag","custom","Boolean","exact","exactPath","activeClass","exactActiveClass","ariaCurrentValue","event","this$1$1","$router","resolve","href","classes","globalActiveClass","globalExactActiveClass","linkExactActiveClass","activeClassFallback","exactActiveClassFallback","compareTarget","target","queryIncludes","isIncludedRoute","handler","guardEvent","on","click","class","scopedSlot","$scopedSlots","$hasNormal","navigate","isActive","isExactActive","findAnchor","$slots","isStatic","aData","handler$1","event$1","aAttrs","metaKey","altKey","ctrlKey","shiftKey","defaultPrevented","button","currentTarget","getAttribute","preventDefault","child","inBrowser","createRouteMap","oldPathList","oldPathMap","oldNameMap","parentRoute","pathList","pathMap","nameMap","addRouteRecord","l","matchAs","pathToRegexpOptions","normalizedPath","normalizePath","caseSensitive","regex","compileRouteRegex","alias","beforeEnter","childMatchAs","aliases","aliasRoute","createMatcher","currentRoute","_createRoute","paramNames","record$1","matchRoute","originalRedirect","hasOwnProperty","resolveRecordPath","aliasedMatch","aliasedRecord","addRoute","parentOrRoute","getRoutes","addRoutes","len","Time","performance","now","Date","genStateKey","toFixed","_key","getStateKey","setStateKey","positionStore","setupScroll","history","scrollRestoration","protocolAndPath","protocol","host","absolutePath","stateCopy","replaceState","addEventListener","handlePopState","removeEventListener","handleScroll","from","isPop","behavior","scrollBehavior","$nextTick","position","getScrollPosition","shouldScroll","scrollToPosition","saveScrollPosition","pageXOffset","y","pageYOffset","isValidPosition","isNumber","normalizePosition","v","hashStartsWithNumberRE","isObject","selector","document","getElementById","querySelector","docRect","documentElement","getBoundingClientRect","elRect","left","top","getElementPosition","style","scrollTo","ua","supportsPushState","navigator","userAgent","pushState","NavigationFailureType","redirected","aborted","cancelled","duplicated","createNavigationCancelledError","createRouterError","_isRouter","propertiesToLog","isError","isNavigationFailure","errorType","runQueue","queue","fn","cb","step","flatMapComponents","flatten","apply","hasSymbol","Symbol","toStringTag","once","called","args","History","baseEl","normalizeBase","pending","ready","readyCbs","readyErrorCbs","errorCbs","listeners","extractGuards","records","bind","reverse","guards","def","guard","extractGuard","bindGuard","listen","onReady","errorCb","onError","transitionTo","onComplete","onAbort","prev","confirmTransition","updateRoute","ensureURL","afterHooks","abort","lastRouteIndex","lastCurrentIndex","max","Math","updated","activated","deactivated","resolveQueue","extractLeaveGuards","beforeHooks","extractUpdateHooks","hasAsync","cid","resolvedDef","__esModule","resolved","reason","msg","comp","iterator","createNavigationAbortedError","createNavigationRedirectedError","enterGuards","bindEnterGuard","extractEnterGuards","resolveHooks","setupListeners","teardown","cleanupListener","HTML5History","_startLocation","getLocation","__proto__","constructor","expectScroll","supportsScroll","handleRoutingEvent","go","fromRoute","getCurrentLocation","pathname","pathLowerCase","toLowerCase","baseLowerCase","HashHistory","fallback","checkFallback","ensureSlash","getHash","replaceHash","eventType","pushHash","getUrl","AbstractHistory","targetIndex","VueRouter","matcher","prototypeAccessors","configurable","$once","routeOrError","handleInitialScroll","_route","beforeEach","registerHook","beforeResolve","afterEach","back","forward","getMatchedComponents","createHref","normalizedTo","defineProperties","VueRouter$1","list","install","isDef","registerInstance","callVal","$options","_parentVnode","mixin","beforeCreate","_router","util","defineReactive","destroyed","defineProperty","strats","optionMergeStrategies","beforeRouteEnter","beforeRouteLeave","beforeRouteUpdate","created","START_LOCATION","cloneRoute","exports","moduleName","registerModule","namespaced","transition","currentPath","isTimeTraveling","storeUnwatch","watch","afterEachUnHook","unregisterModule","setUid","uid","C","P","Yt","r","s","Number","floor","log","min","d","pow","parseFloat","toLocaleString","Jt","toLocaleLowerCase","replaceAll","round","k","g","p","N","NONE","CREATE","READ","UPDATE","DELETE","SHARE","ALL","Y","nc","V","_nc_dav_properties","L","_nc_dav_namespaces","sr","or","R","Folder","File","J","X","URL","startsWith","mtime","crtime","mime","size","permissions","owner","attributes","root","status","Q","NEW","FAILED","LOADING","LOCKED","D","_data","_attributes","_knownDavService","set","updateMtime","Reflect","deleteProperty","Proxy","encodedSource","origin","basename","extension","dirname","isDavRessource","fileid","move","rename","ye","_e","super","ee","te","ur","headers","setHeaders","requesttoken","patch","u","method","fetch","dr","async","getDirectoryContents","details","includeSelf","filename","ve","be","lastmod","parseInt","getcontentlength","hasPreview","O","isExist","isEmptyObject","merge","o","f","getValue","isName","getAllMatches","startIndex","lastIndex","nameRegexp","preserveOrder","attributeNamePrefix","attributesGroupName","textNodeName","ignoreAttributes","removeNSPrefix","allowBooleanAttributes","parseTagValue","parseAttributeValue","trimValues","cdataPropName","numberParseOptions","hex","leadingZeros","eNotation","tagValueProcessor","attributeValueProcessor","stopNodes","alwaysCreateTextNode","commentPropName","unpairedTags","processEntities","htmlEntities","ignoreDeclaration","ignorePiTags","transformTagName","transformAttributeName","updateTag","buildOptions","defaultOptions","ne","ie","Nt","bt","Et","prettify","yt","vt","se","Pt","xt","oe","K","E","indentBy","suppressUnpairedNode","suppressEmptyNode","endsWith","suppressBooleanAttributes","lastIndexOf","entities","Ft","format","Vt","oneListGroup","isAttribute","attrPrefixLen","St","processTextOrObjNode","Lt","indentate","Rt","tagEndChar","newLine","j2x","buildTextValNode","attrStr","buildObjectNode","arrayNodeName","buildAttrPairStr","replaceEntitiesValue","closeTag","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","module","loaded","__webpack_modules__","chunkIds","priority","notFulfilled","Infinity","fulfilled","getter","definition","enumerable","chunkId","all","reduce","promises","globalThis","Function","prop","done","script","needAttach","scripts","getElementsByTagName","createElement","charset","timeout","setAttribute","src","onScriptComplete","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","head","appendChild","nmd","paths","scriptUrl","importScripts","currentScript","baseURI","self","installedChunks","installedChunkData","promise","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"settings-vue-settings-apps-users-management.js?v=a101a49064d79e1a2206","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/settings/src/store/api.js","webpack:///nextcloud/apps/settings/src/store/users.js","webpack:///nextcloud/apps/settings/src/store/apps.js","webpack:///nextcloud/apps/settings/src/store/users-settings.js","webpack:///nextcloud/apps/settings/src/store/oc.js","webpack:///nextcloud/apps/settings/src/store/index.js","webpack:///nextcloud/apps/settings/src/logger.ts","webpack:///nextcloud/apps/settings/src/views/SettingsApp.vue","webpack:///nextcloud/apps/settings/src/views/SettingsApp.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/views/SettingsApp.vue?3a67","webpack:///nextcloud/apps/settings/src/router/routes.ts","webpack:///nextcloud/apps/settings/src/router/index.ts","webpack:///nextcloud/apps/settings/src/main-apps-users-management.ts","webpack:///nextcloud/node_modules/vue-router/dist/vue-router.esm.js","webpack:///nextcloud/node_modules/vuex-router-sync/index.js","webpack:///nextcloud/node_modules/@nextcloud/files/dist/index.mjs","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/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};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <sujith.h@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\n\nconst sanitize = function(url) {\n\treturn url.replace(/\\/$/, '') // Remove last url slash\n}\n\nexport default {\n\n\t/**\n\t * This Promise is used to chain a request that require an admin password confirmation\n\t * Since chaining Promise have a very precise behavior concerning catch and then,\n\t * you'll need to be careful when using it.\n\t * e.g\n\t * // store\n\t * action(context) {\n\t * return api.requireAdmin().then((response) => {\n\t * return api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {API failure});\n\t * }).catch((error) => {requireAdmin failure});\n\t * }\n\t * // vue\n\t * this.$store.dispatch('action').then(() => {always executed})\n\t *\n\t * Since Promise.then().catch().then() will always execute the last then\n\t * this.$store.dispatch('action').then will always be executed\n\t *\n\t * If you want requireAdmin failure to also catch the API request failure\n\t * you will need to throw a new error in the api.get.catch()\n\t *\n\t * e.g\n\t * api.requireAdmin().then((response) => {\n\t * api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {throw error;});\n\t * }).catch((error) => {requireAdmin OR API failure});\n\t *\n\t * @return {Promise}\n\t */\n\trequireAdmin() {\n\t\treturn confirmPassword()\n\t},\n\tget(url, options) {\n\t\treturn axios.get(sanitize(url), options)\n\t},\n\tpost(url, data) {\n\t\treturn axios.post(sanitize(url), data)\n\t},\n\tpatch(url, data) {\n\t\treturn axios.patch(sanitize(url), data)\n\t},\n\tput(url, data) {\n\t\treturn axios.put(sanitize(url), data)\n\t},\n\tdelete(url, data) {\n\t\treturn axios.delete(sanitize(url), { params: data })\n\t},\n}\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n * @author Stephan Orbaugh <stephan.orbaugh@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getBuilder } from '@nextcloud/browser-storage'\nimport { getCapabilities } from '@nextcloud/capabilities'\nimport { parseFileSize } from '@nextcloud/files'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\n\nimport api from './api.js'\nimport logger from '../logger.ts'\n\nconst localStorage = getBuilder('settings').persist(true).build()\n\nconst orderGroups = function(groups, orderBy) {\n\t/* const SORT_USERCOUNT = 1;\n\t * const SORT_GROUPNAME = 2;\n\t * https://github.com/nextcloud/server/blob/208e38e84e1a07a49699aa90dc5b7272d24489f0/lib/private/Group/MetaData.php#L34\n\t */\n\tif (orderBy === 1) {\n\t\treturn groups.sort((a, b) => a.usercount - a.disabled < b.usercount - b.disabled)\n\t} else {\n\t\treturn groups.sort((a, b) => a.name.localeCompare(b.name))\n\t}\n}\n\nconst defaults = {\n\tgroup: {\n\t\tid: '',\n\t\tname: '',\n\t\tusercount: 0,\n\t\tdisabled: 0,\n\t\tcanAdd: true,\n\t\tcanRemove: true,\n\t},\n}\n\nconst state = {\n\tusers: [],\n\tgroups: [],\n\torderBy: 1,\n\tminPasswordLength: 0,\n\tusersOffset: 0,\n\tusersLimit: 25,\n\tdisabledUsersOffset: 0,\n\tdisabledUsersLimit: 25,\n\tuserCount: 0,\n\tshowConfig: {\n\t\tshowStoragePath: localStorage.getItem('account_settings__showStoragePath') === 'true',\n\t\tshowUserBackend: localStorage.getItem('account_settings__showUserBackend') === 'true',\n\t\tshowLastLogin: localStorage.getItem('account_settings__showLastLogin') === 'true',\n\t\tshowNewUserForm: localStorage.getItem('account_settings__showNewUserForm') === 'true',\n\t\tshowLanguages: localStorage.getItem('account_settings__showLanguages') === 'true',\n\t},\n}\n\nconst mutations = {\n\tappendUsers(state, usersObj) {\n\t\tconst existingUsers = state.users.map(({ id }) => id)\n\t\tconst newUsers = Object.values(usersObj)\n\t\t\t.filter(({ id }) => !existingUsers.includes(id))\n\n\t\tconst users = state.users.concat(newUsers)\n\t\tstate.usersOffset += state.usersLimit\n\t\tstate.users = users\n\t},\n\tupdateDisabledUsers(state, _usersObj) {\n\t\tstate.disabledUsersOffset += state.disabledUsersLimit\n\t},\n\tsetPasswordPolicyMinLength(state, length) {\n\t\tstate.minPasswordLength = length !== '' ? length : 0\n\t},\n\tinitGroups(state, { groups, orderBy, userCount }) {\n\t\tstate.groups = groups.map(group => Object.assign({}, defaults.group, group))\n\t\tstate.orderBy = orderBy\n\t\tstate.userCount = userCount\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\n\t},\n\taddGroup(state, { gid, displayName }) {\n\t\ttry {\n\t\t\tif (typeof state.groups.find((group) => group.id === gid) !== 'undefined') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// extend group to default values\n\t\t\tconst group = Object.assign({}, defaults.group, {\n\t\t\t\tid: gid,\n\t\t\t\tname: displayName,\n\t\t\t})\n\t\t\tstate.groups.unshift(group)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t} catch (e) {\n\t\t\tconsole.error('Can\\'t create group', e)\n\t\t}\n\t},\n\trenameGroup(state, { gid, displayName }) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tconst updatedGroup = state.groups[groupIndex]\n\t\t\tupdatedGroup.name = displayName\n\t\t\tstate.groups.splice(groupIndex, 1, updatedGroup)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t}\n\t},\n\tremoveGroup(state, gid) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tstate.groups.splice(groupIndex, 1)\n\t\t}\n\t},\n\taddUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// increase count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount++\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.push(gid)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\tremoveUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// lower count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount--\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\taddUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.push(gid)\n\t},\n\tremoveUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t},\n\tdeleteUser(state, userid) {\n\t\tconst userIndex = state.users.findIndex(user => user.id === userid)\n\t\tthis.commit('updateUserCounts', { user: state.users[userIndex], actionType: 'remove' })\n\t\tstate.users.splice(userIndex, 1)\n\t},\n\taddUserData(state, response) {\n\t\tconst user = response.data.ocs.data\n\t\tstate.users.unshift(user)\n\t\tthis.commit('updateUserCounts', { user, actionType: 'create' })\n\t},\n\tenableDisableUser(state, { userid, enabled }) {\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\tuser.enabled = enabled\n\t\tthis.commit('updateUserCounts', { user, actionType: enabled ? 'enable' : 'disable' })\n\t},\n\t// update active/disabled counts, groups counts\n\tupdateUserCounts(state, { user, actionType }) {\n\t\t// 0 is a special value\n\t\tif (state.userCount === 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst disabledGroup = state.groups.find(group => group.id === 'disabled')\n\t\tswitch (actionType) {\n\t\tcase 'enable':\n\t\tcase 'disable':\n\t\t\tdisabledGroup.usercount += user.enabled ? -1 : 1 // update Disabled Users count\n\t\t\tstate.userCount += user.enabled ? 1 : -1 // update Active Users count\n\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\tgroup.disabled += user.enabled ? -1 : 1 // update group disabled count\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'create':\n\t\t\tstate.userCount++ // increment Active Users count\n\n\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\tstate.groups\n\t\t\t\t\t.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t .usercount++ // increment group total count\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'remove':\n\t\t\tif (user.enabled) {\n\t\t\t\tstate.userCount-- // decrement Active Users count\n\t\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t\tif (!group) {\n\t\t\t\t\t\tconsole.warn('User group ' + userGroup + ' does not exist during user removal')\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tgroup.usercount-- // decrement group total count\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tdisabledGroup.usercount-- // decrement Disabled Users count\n\t\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t\tgroup.disabled-- // decrement group disabled count\n\t\t\t\t})\n\t\t\t}\n\t\t\tbreak\n\t\tdefault:\n\t\t\tlogger.error(`Unknown action type in updateUserCounts: '${actionType}'`)\n\t\t\t// not throwing error to interrupt execution as this is not fatal\n\t\t}\n\t},\n\tsetUserData(state, { userid, key, value }) {\n\t\tif (key === 'quota') {\n\t\t\tconst humanValue = parseFileSize(value, true)\n\t\t\tstate.users.find(user => user.id === userid)[key][key] = humanValue !== null ? humanValue : value\n\t\t} else {\n\t\t\tstate.users.find(user => user.id === userid)[key] = value\n\t\t}\n\t},\n\n\t/**\n\t * Reset users list\n\t *\n\t * @param {object} state the store state\n\t */\n\tresetUsers(state) {\n\t\tstate.users = []\n\t\tstate.usersOffset = 0\n\t\tstate.disabledUsersOffset = 0\n\t},\n\n\tsetShowConfig(state, { key, value }) {\n\t\tlocalStorage.setItem(`account_settings__${key}`, JSON.stringify(value))\n\t\tstate.showConfig[key] = value\n\t},\n}\n\nconst getters = {\n\tgetUsers(state) {\n\t\treturn state.users\n\t},\n\tgetGroups(state) {\n\t\treturn state.groups\n\t},\n\tgetSubadminGroups(state) {\n\t\t// Can't be subadmin of admin or disabled\n\t\treturn state.groups.filter(group => group.id !== 'admin' && group.id !== 'disabled')\n\t},\n\tgetPasswordPolicyMinLength(state) {\n\t\treturn state.minPasswordLength\n\t},\n\tgetUsersOffset(state) {\n\t\treturn state.usersOffset\n\t},\n\tgetUsersLimit(state) {\n\t\treturn state.usersLimit\n\t},\n\tgetDisabledUsersOffset(state) {\n\t\treturn state.disabledUsersOffset\n\t},\n\tgetDisabledUsersLimit(state) {\n\t\treturn state.disabledUsersLimit\n\t},\n\tgetUserCount(state) {\n\t\treturn state.userCount\n\t},\n\tgetShowConfig(state) {\n\t\treturn state.showConfig\n\t},\n}\n\nconst CancelToken = axios.CancelToken\nlet searchRequestCancelSource = null\n\nconst actions = {\n\n\t/**\n\t * search users\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @return {Promise}\n\t */\n\tsearchUsers(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search })).catch((error) => {\n\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t})\n\t},\n\n\t/**\n\t * Get user details\n\t *\n\t * @param {object} context store context\n\t * @param {string} userId user id\n\t * @return {Promise}\n\t */\n\tgetUser(context, userId) {\n\t\treturn api.get(generateOcsUrl(`cloud/users/${userId}`)).catch((error) => {\n\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t})\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @param {string} options.group Get users from group\n\t * @return {Promise}\n\t */\n\tgetUsers(context, { offset, limit, search, group }) {\n\t\tif (searchRequestCancelSource) {\n\t\t\tsearchRequestCancelSource.cancel('Operation canceled by another search request.')\n\t\t}\n\t\tsearchRequestCancelSource = CancelToken.source()\n\t\tsearch = typeof search === 'string' ? search : ''\n\n\t\t/**\n\t\t * Adding filters in the search bar such as in:files, in:users, etc.\n\t\t * collides with this particular search, so we need to remove them\n\t\t * here and leave only the original search query\n\t\t */\n\t\tsearch = search.replace(/in:[^\\s]+/g, '').trim()\n\n\t\tgroup = typeof group === 'string' ? group : ''\n\t\tif (group !== '') {\n\t\t\treturn api.get(generateOcsUrl('cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}', { group: encodeURIComponent(group), offset, limit, search }), {\n\t\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\t}\n\t\t\t\t\treturn usersCount\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }), {\n\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t})\n\t\t\t.then((response) => {\n\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t}\n\t\t\t\treturn usersCount\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t}\n\t\t\t})\n\t},\n\n\t/**\n\t * Get disabled users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @return {Promise<number>}\n\t */\n\tasync getDisabledUsers(context, { offset, limit }) {\n\t\tconst url = generateOcsUrl('cloud/users/disabled?offset={offset}&limit={limit}', { offset, limit })\n\t\ttry {\n\t\t\tconst response = await api.get(url)\n\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\tif (usersCount > 0) {\n\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\tcontext.commit('updateDisabledUsers', response.data.ocs.data.users)\n\t\t\t}\n\t\t\treturn usersCount\n\t\t} catch (error) {\n\t\t\tcontext.commit('API_FAILURE', error)\n\t\t}\n\t},\n\n\tgetGroups(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tconst limitParam = limit === -1 ? '' : `&limit=${limit}`\n\t\treturn api.get(generateOcsUrl('cloud/groups?offset={offset}&search={search}', { offset, search }) + limitParam)\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.groups).length > 0) {\n\t\t\t\t\tresponse.data.ocs.data.groups.forEach(function(group) {\n\t\t\t\t\t\tcontext.commit('addGroup', { gid: group, displayName: group })\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search -\n\t * @return {Promise}\n\t */\n\tgetUsersFromList(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }))\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.users).length > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details from a groupid\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.groupid -\n\t * @return {Promise}\n\t */\n\tgetUsersFromGroup(context, { groupid, offset, limit }) {\n\t\treturn api.get(generateOcsUrl('cloud/users/{groupId}/details?offset={offset}&limit={limit}', { groupId: encodeURIComponent(groupid), offset, limit }))\n\t\t\t.then((response) => context.commit('getUsersFromList', response.data.ocs.data.users))\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetPasswordPolicyMinLength(context) {\n\t\tif (getCapabilities().password_policy && getCapabilities().password_policy.minLength) {\n\t\t\tcontext.commit('setPasswordPolicyMinLength', getCapabilities().password_policy.minLength)\n\t\t\treturn getCapabilities().password_policy.minLength\n\t\t}\n\t\treturn false\n\t},\n\n\t/**\n\t * Add group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\taddGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/groups'), { groupid: gid })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('addGroup', { gid, displayName: gid })\n\t\t\t\t\treturn { gid, displayName: gid }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { gid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from adding the user to a group that doesn't exists\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Rename group\n\t *\n\t * @param {object} context store context\n\t * @param {string} groupid Group id\n\t * @param {string} displayName Group display name\n\t * @return {Promise}\n\t */\n\trenameGroup(context, { groupid, displayName }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(groupid) }), { key: 'displayname', value: displayName })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('renameGroup', { gid: groupid, displayName })\n\t\t\t\t\treturn { groupid, displayName }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { groupid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from renaming the group\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Remove group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\tremoveGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(gid) }))\n\t\t\t\t.then((response) => context.commit('removeGroup', gid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { gid, error }))\n\t},\n\n\t/**\n\t * Add user to group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\t// let's throw one more time to prevent\n\t\t\t// the view from removing the user row on failure\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Add user to group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Mark all user devices for remote wipe\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\twipeUserDevices(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/wipe', { userid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Delete a user\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tdeleteUser(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('deleteUser', userid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Add a user\n\t *\n\t * @param {object} context store context\n\t * @param {Function} context.commit -\n\t * @param {Function} context.dispatch -\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.password User password\n\t * @param {string} options.displayName User display name\n\t * @param {string} options.email User email\n\t * @param {string} options.groups User groups\n\t * @param {string} options.subadmin User subadmin groups\n\t * @param {string} options.quota User email\n\t * @param {string} options.language User language\n\t * @param {string} options.manager User manager\n\t * @return {Promise}\n\t */\n\taddUser({ commit, dispatch }, { userid, password, displayName, email, groups, subadmin, quota, language, manager }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users'), { userid, password, displayName, email, groups, subadmin, quota, language, manager })\n\t\t\t\t.then((response) => dispatch('addUserData', userid || response.data.ocs.data.id))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcommit('API_FAILURE', { userid, error })\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Get user data and commit addition\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\taddUserData(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.get(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('addUserData', response))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Enable or disable user\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {boolean} options.enabled User enablement status\n\t * @return {Promise}\n\t */\n\tenableDisableUser(context, { userid, enabled = true }) {\n\t\tconst userStatus = enabled ? 'enable' : 'disable'\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}/{userStatus}', { userid, userStatus }))\n\t\t\t\t.then((response) => context.commit('enableDisableUser', { userid, enabled }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Edit user data\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.key User field to edit\n\t * @param {string} options.value Value of the change\n\t * @return {Promise}\n\t */\n\tsetUserData(context, { userid, key, value }) {\n\t\tconst allowedEmpty = ['email', 'displayname', 'manager']\n\t\tif (['email', 'language', 'quota', 'displayname', 'password', 'manager'].indexOf(key) !== -1) {\n\t\t\t// We allow empty email or displayname\n\t\t\tif (typeof value === 'string'\n\t\t\t\t&& (\n\t\t\t\t\t(allowedEmpty.indexOf(key) === -1 && value.length > 0)\n\t\t\t\t\t|| allowedEmpty.indexOf(key) !== -1\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn api.requireAdmin().then((response) => {\n\t\t\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}', { userid }), { key, value })\n\t\t\t\t\t\t.then((response) => context.commit('setUserData', { userid, key, value }))\n\t\t\t\t\t\t.catch((error) => { throw error })\n\t\t\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t\t\t}\n\t\t}\n\t\treturn Promise.reject(new Error('Invalid request data'))\n\t},\n\n\t/**\n\t * Send welcome mail\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tsendWelcomeMail(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/welcome', { userid }))\n\t\t\t\t.then(response => true)\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api.js'\nimport Vue from 'vue'\nimport { generateUrl } from '@nextcloud/router'\nimport { showError, showInfo } from '@nextcloud/dialogs'\nimport { loadState } from '@nextcloud/initial-state'\n\nconst state = {\n\tapps: [],\n\tbundles: loadState('settings', 'appstoreBundles', []),\n\tcategories: [],\n\tupdateCount: loadState('settings', 'appstoreUpdateCount', 0),\n\tloading: {},\n\tgettingCategoriesPromise: null,\n}\n\nconst mutations = {\n\n\tAPPS_API_FAILURE(state, error) {\n\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.') + '<br>' + error.error.response.data.data.message, { isHTML: true })\n\t\tconsole.error(state, error)\n\t},\n\n\tinitCategories(state, { categories, updateCount }) {\n\t\tstate.categories = categories\n\t\tstate.updateCount = updateCount\n\t},\n\n\tupdateCategories(state, categoriesPromise) {\n\t\tstate.gettingCategoriesPromise = categoriesPromise\n\t},\n\n\tsetUpdateCount(state, updateCount) {\n\t\tstate.updateCount = updateCount\n\t},\n\n\taddCategory(state, category) {\n\t\tstate.categories.push(category)\n\t},\n\n\tappendCategories(state, categoriesArray) {\n\t\t// convert obj to array\n\t\tstate.categories = categoriesArray\n\t},\n\n\tsetAllApps(state, apps) {\n\t\tstate.apps = apps\n\t},\n\n\tsetError(state, { appId, error }) {\n\t\tif (!Array.isArray(appId)) {\n\t\t\tappId = [appId]\n\t\t}\n\t\tappId.forEach((_id) => {\n\t\t\tconst app = state.apps.find(app => app.id === _id)\n\t\t\tapp.error = error\n\t\t})\n\t},\n\n\tclearError(state, { appId, error }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.error = null\n\t},\n\n\tenableApp(state, { appId, groups }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = true\n\t\tapp.groups = groups\n\t},\n\n\tsetInstallState(state, { appId, canInstall }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tif (app) {\n\t\t\tapp.canInstall = canInstall === true\n\t\t}\n\t},\n\n\tdisableApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = false\n\t\tapp.groups = []\n\t\tif (app.removable) {\n\t\t\tapp.canUnInstall = true\n\t\t}\n\t},\n\n\tuninstallApp(state, appId) {\n\t\tstate.apps.find(app => app.id === appId).active = false\n\t\tstate.apps.find(app => app.id === appId).groups = []\n\t\tstate.apps.find(app => app.id === appId).needsDownload = true\n\t\tstate.apps.find(app => app.id === appId).installed = false\n\t\tstate.apps.find(app => app.id === appId).canUnInstall = false\n\t\tstate.apps.find(app => app.id === appId).canInstall = true\n\t},\n\n\tupdateApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tconst version = app.update\n\t\tapp.update = null\n\t\tapp.version = version\n\t\tstate.updateCount--\n\n\t},\n\n\tresetApps(state) {\n\t\tstate.apps = []\n\t},\n\treset(state) {\n\t\tstate.apps = []\n\t\tstate.categories = []\n\t\tstate.updateCount = 0\n\t},\n\tstartLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, true)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, true)\n\t\t}\n\t},\n\tstopLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, false)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, false)\n\t\t}\n\t},\n}\n\nconst getters = {\n\tloading(state) {\n\t\treturn function(id) {\n\t\t\treturn state.loading[id]\n\t\t}\n\t},\n\tgetCategories(state) {\n\t\treturn state.categories\n\t},\n\tgetAllApps(state) {\n\t\treturn state.apps\n\t},\n\tgetAppBundles(state) {\n\t\treturn state.bundles\n\t},\n\tgetUpdateCount(state) {\n\t\treturn state.updateCount\n\t},\n\tgetCategoryById: (state) => (selectedCategoryId) => {\n\t\treturn state.categories.find((category) => category.id === selectedCategoryId)\n\t},\n}\n\nconst actions = {\n\n\tenableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/enable'), { appIds: apps, groups })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('enableApp', { appId: _appId, groups })\n\t\t\t\t\t})\n\n\t\t\t\t\t// check for server health\n\t\t\t\t\treturn api.get(generateUrl('apps/files'))\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tif (response.data.update_required) {\n\t\t\t\t\t\t\t\tshowInfo(\n\t\t\t\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t\t\t\t'settings',\n\t\t\t\t\t\t\t\t\t\t'The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds.'\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tonClick: () => window.location.reload(),\n\t\t\t\t\t\t\t\t\t\tclose: false,\n\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tlocation.reload()\n\t\t\t\t\t\t\t\t}, 5000)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\tif (!Array.isArray(appId)) {\n\t\t\t\t\t\t\t\tshowError(t('settings', 'Error: This app cannot be enabled because it makes the server unstable'))\n\t\t\t\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\t\t\t\terror: t('settings', 'Error: This app cannot be enabled because it makes the server unstable'),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\tcontext.dispatch('disableApp', { appId })\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tforceEnableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then(() => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/force'), { appId })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('setInstallState', { appId, canInstall: true })\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tdisableApp(context, { appId }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\treturn api.post(generateUrl('settings/apps/disable'), { appIds: apps })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('disableApp', _appId)\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tuninstallApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\treturn api.get(generateUrl(`settings/apps/uninstall/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('uninstallApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tupdateApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.get(generateUrl(`settings/apps/update/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('updateApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tgetAllApps(context) {\n\t\tcontext.commit('startLoading', 'list')\n\t\treturn api.get(generateUrl('settings/apps/list'))\n\t\t\t.then((response) => {\n\t\t\t\tcontext.commit('setAllApps', response.data.apps)\n\t\t\t\tcontext.commit('stopLoading', 'list')\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tasync getCategories(context, { shouldRefetchCategories = false } = {}) {\n\t\tif (shouldRefetchCategories || !context.state.gettingCategoriesPromise) {\n\t\t\tcontext.commit('startLoading', 'categories')\n\t\t\ttry {\n\t\t\t\tconst categoriesPromise = api.get(generateUrl('settings/apps/categories'))\n\t\t\t\tcontext.commit('updateCategories', categoriesPromise)\n\t\t\t\tconst categoriesPromiseResponse = await categoriesPromise\n\t\t\t\tif (categoriesPromiseResponse.data.length > 0) {\n\t\t\t\t\tcontext.commit('appendCategories', categoriesPromiseResponse.data)\n\t\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\treturn false\n\t\t\t} catch (error) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t}\n\t\treturn context.state.gettingCategoriesPromise\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\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 { loadState } from '@nextcloud/initial-state'\n\nconst state = {\n\tserverData: loadState('settings', 'usersSettings', {}),\n}\nconst mutations = {\n\tsetServerData(state, data) {\n\t\tstate.serverData = data\n\t},\n}\nconst getters = {\n\tgetServerData(state) {\n\t\treturn state.serverData\n\t},\n}\nconst actions = {}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api.js'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst state = {}\nconst mutations = {}\nconst getters = {}\nconst actions = {\n\t/**\n\t * Set application config in database\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.app Application name\n\t * @param {boolean} options.key Config key\n\t * @param {boolean} options.value Value to set\n\t * @return {Promise}\n\t */\n\tsetAppConfig(context, { app, key, value }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('apps/provisioning_api/api/v1/config/apps/{app}/{key}', { app, key }), { value })\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { app, key, value, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport users from './users.js'\nimport apps from './apps.js'\nimport settings from './users-settings.js'\nimport oc from './oc.js'\nimport { showError } from '@nextcloud/dialogs'\n\nVue.use(Vuex)\n\nconst debug = process.env.NODE_ENV !== 'production'\n\nconst mutations = {\n\tAPI_FAILURE(state, error) {\n\t\ttry {\n\t\t\tconst message = error.error.response.data.ocs.meta.message\n\t\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.') + '<br>' + message, { isHTML: true })\n\t\t} catch (e) {\n\t\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.'))\n\t\t}\n\t\tconsole.error(state, error)\n\t},\n}\n\nlet store = null\n\nexport const useStore = () => {\n\tif (store === null) {\n\t\tstore = new Store({\n\t\t\tmodules: {\n\t\t\t\tusers,\n\t\t\t\tapps,\n\t\t\t\tsettings,\n\t\t\t\toc,\n\t\t\t},\n\t\t\tstrict: debug,\n\t\t\tmutations,\n\t\t})\n\t}\n\treturn store\n}\n","/**\n * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { getLoggerBuilder } from '@nextcloud/logger';\nexport default getLoggerBuilder()\n .setApp('settings')\n .detectUser()\n .build();\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_setup.NcContent,{attrs:{\"app-name\":\"settings\"}},[_c('router-view',{attrs:{\"name\":\"navigation\"}}),_vm._v(\" \"),_c('router-view'),_vm._v(\" \"),_c('router-view',{attrs:{\"name\":\"sidebar\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"","import { render, staticRenderFns } from \"./SettingsApp.vue?vue&type=template&id=b0b62a76\"\nimport script from \"./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// Dynamic loading\nconst AppStore = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStore.vue');\nconst AppStoreNavigation = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStoreNavigation.vue');\nconst AppStoreSidebar = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStoreSidebar.vue');\nconst UserManagement = () => import(/* webpackChunkName: 'settings-users' */ '../views/UserManagement.vue');\nconst UserManagementNavigation = () => import(/* webpackChunkName: 'settings-users' */ '../views/UserManagementNavigation.vue');\nconst routes = [\n {\n name: 'users',\n path: '/:index(index.php/)?settings/users',\n components: {\n default: UserManagement,\n navigation: UserManagementNavigation,\n },\n props: true,\n children: [\n {\n path: ':selectedGroup',\n name: 'group',\n },\n ],\n },\n {\n path: '/:index(index.php/)?settings/apps',\n name: 'apps',\n // redirect to our default route - the app discover section\n redirect: {\n name: 'apps-category',\n params: {\n category: 'discover',\n },\n },\n components: {\n default: AppStore,\n navigation: AppStoreNavigation,\n sidebar: AppStoreSidebar,\n },\n children: [\n {\n path: ':category',\n name: 'apps-category',\n children: [\n {\n path: ':id',\n name: 'apps-details',\n },\n ],\n },\n ],\n },\n];\nexport default routes;\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue';\nimport Router from 'vue-router';\nimport { generateUrl } from '@nextcloud/router';\nimport routes from './routes.ts';\nVue.use(Router);\nconst router = new Router({\n mode: 'history',\n // if index.php is in the url AND we got this far, then it's working:\n // let's keep using index.php in the url\n base: generateUrl(''),\n linkActiveClass: 'active',\n routes,\n});\nexport default router;\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author rakekniven <mark.ziegler@rakekniven.de>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue';\nimport VTooltip from 'v-tooltip';\nimport { sync } from 'vuex-router-sync';\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n';\nimport SettingsApp from './views/SettingsApp.vue';\nimport router from './router/index.ts';\nimport { useStore } from './store/index.js';\nimport { getRequestToken } from '@nextcloud/auth';\nimport { PiniaVuePlugin, createPinia } from 'pinia';\nVue.use(VTooltip, { defaultHtml: false });\nconst store = useStore();\nsync(store, router);\n// CSP config for webpack dynamic chunk loading\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken() ?? '');\n// bind to window\nVue.prototype.t = t;\nVue.prototype.n = n;\nVue.use(PiniaVuePlugin);\nconst pinia = createPinia();\nexport default new Vue({\n router,\n store,\n pinia,\n render: h => h(SettingsApp),\n el: '#content',\n});\n","/*!\n * vue-router v3.6.5\n * (c) 2022 Evan You\n * @license MIT\n */\n/* */\n\nfunction assert (condition, message) {\n if (!condition) {\n throw new Error((\"[vue-router] \" + message))\n }\n}\n\nfunction warn (condition, message) {\n if (!condition) {\n typeof console !== 'undefined' && console.warn((\"[vue-router] \" + message));\n }\n}\n\nfunction extend (a, b) {\n for (var key in b) {\n a[key] = b[key];\n }\n return a\n}\n\n/* */\n\nvar encodeReserveRE = /[!'()*]/g;\nvar encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); };\nvar commaRE = /%2C/g;\n\n// fixed encodeURIComponent which is more conformant to RFC3986:\n// - escapes [!'()*]\n// - preserve commas\nvar encode = function (str) { return encodeURIComponent(str)\n .replace(encodeReserveRE, encodeReserveReplacer)\n .replace(commaRE, ','); };\n\nfunction decode (str) {\n try {\n return decodeURIComponent(str)\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, (\"Error decoding \\\"\" + str + \"\\\". Leaving it intact.\"));\n }\n }\n return str\n}\n\nfunction resolveQuery (\n query,\n extraQuery,\n _parseQuery\n) {\n if ( extraQuery === void 0 ) extraQuery = {};\n\n var parse = _parseQuery || parseQuery;\n var parsedQuery;\n try {\n parsedQuery = parse(query || '');\n } catch (e) {\n process.env.NODE_ENV !== 'production' && warn(false, e.message);\n parsedQuery = {};\n }\n for (var key in extraQuery) {\n var value = extraQuery[key];\n parsedQuery[key] = Array.isArray(value)\n ? value.map(castQueryParamValue)\n : castQueryParamValue(value);\n }\n return parsedQuery\n}\n\nvar castQueryParamValue = function (value) { return (value == null || typeof value === 'object' ? value : String(value)); };\n\nfunction parseQuery (query) {\n var res = {};\n\n query = query.trim().replace(/^(\\?|#|&)/, '');\n\n if (!query) {\n return res\n }\n\n query.split('&').forEach(function (param) {\n var parts = param.replace(/\\+/g, ' ').split('=');\n var key = decode(parts.shift());\n var val = parts.length > 0 ? decode(parts.join('=')) : null;\n\n if (res[key] === undefined) {\n res[key] = val;\n } else if (Array.isArray(res[key])) {\n res[key].push(val);\n } else {\n res[key] = [res[key], val];\n }\n });\n\n return res\n}\n\nfunction stringifyQuery (obj) {\n var res = obj\n ? Object.keys(obj)\n .map(function (key) {\n var val = obj[key];\n\n if (val === undefined) {\n return ''\n }\n\n if (val === null) {\n return encode(key)\n }\n\n if (Array.isArray(val)) {\n var result = [];\n val.forEach(function (val2) {\n if (val2 === undefined) {\n return\n }\n if (val2 === null) {\n result.push(encode(key));\n } else {\n result.push(encode(key) + '=' + encode(val2));\n }\n });\n return result.join('&')\n }\n\n return encode(key) + '=' + encode(val)\n })\n .filter(function (x) { return x.length > 0; })\n .join('&')\n : null;\n return res ? (\"?\" + res) : ''\n}\n\n/* */\n\nvar trailingSlashRE = /\\/?$/;\n\nfunction createRoute (\n record,\n location,\n redirectedFrom,\n router\n) {\n var stringifyQuery = router && router.options.stringifyQuery;\n\n var query = location.query || {};\n try {\n query = clone(query);\n } catch (e) {}\n\n var route = {\n name: location.name || (record && record.name),\n meta: (record && record.meta) || {},\n path: location.path || '/',\n hash: location.hash || '',\n query: query,\n params: location.params || {},\n fullPath: getFullPath(location, stringifyQuery),\n matched: record ? formatMatch(record) : []\n };\n if (redirectedFrom) {\n route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery);\n }\n return Object.freeze(route)\n}\n\nfunction clone (value) {\n if (Array.isArray(value)) {\n return value.map(clone)\n } else if (value && typeof value === 'object') {\n var res = {};\n for (var key in value) {\n res[key] = clone(value[key]);\n }\n return res\n } else {\n return value\n }\n}\n\n// the starting route that represents the initial state\nvar START = createRoute(null, {\n path: '/'\n});\n\nfunction formatMatch (record) {\n var res = [];\n while (record) {\n res.unshift(record);\n record = record.parent;\n }\n return res\n}\n\nfunction getFullPath (\n ref,\n _stringifyQuery\n) {\n var path = ref.path;\n var query = ref.query; if ( query === void 0 ) query = {};\n var hash = ref.hash; if ( hash === void 0 ) hash = '';\n\n var stringify = _stringifyQuery || stringifyQuery;\n return (path || '/') + stringify(query) + hash\n}\n\nfunction isSameRoute (a, b, onlyPath) {\n if (b === START) {\n return a === b\n } else if (!b) {\n return false\n } else if (a.path && b.path) {\n return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath ||\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query))\n } else if (a.name && b.name) {\n return (\n a.name === b.name &&\n (onlyPath || (\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query) &&\n isObjectEqual(a.params, b.params))\n )\n )\n } else {\n return false\n }\n}\n\nfunction isObjectEqual (a, b) {\n if ( a === void 0 ) a = {};\n if ( b === void 0 ) b = {};\n\n // handle null value #1566\n if (!a || !b) { return a === b }\n var aKeys = Object.keys(a).sort();\n var bKeys = Object.keys(b).sort();\n if (aKeys.length !== bKeys.length) {\n return false\n }\n return aKeys.every(function (key, i) {\n var aVal = a[key];\n var bKey = bKeys[i];\n if (bKey !== key) { return false }\n var bVal = b[key];\n // query values can be null and undefined\n if (aVal == null || bVal == null) { return aVal === bVal }\n // check nested equality\n if (typeof aVal === 'object' && typeof bVal === 'object') {\n return isObjectEqual(aVal, bVal)\n }\n return String(aVal) === String(bVal)\n })\n}\n\nfunction isIncludedRoute (current, target) {\n return (\n current.path.replace(trailingSlashRE, '/').indexOf(\n target.path.replace(trailingSlashRE, '/')\n ) === 0 &&\n (!target.hash || current.hash === target.hash) &&\n queryIncludes(current.query, target.query)\n )\n}\n\nfunction queryIncludes (current, target) {\n for (var key in target) {\n if (!(key in current)) {\n return false\n }\n }\n return true\n}\n\nfunction handleRouteEntered (route) {\n for (var i = 0; i < route.matched.length; i++) {\n var record = route.matched[i];\n for (var name in record.instances) {\n var instance = record.instances[name];\n var cbs = record.enteredCbs[name];\n if (!instance || !cbs) { continue }\n delete record.enteredCbs[name];\n for (var i$1 = 0; i$1 < cbs.length; i$1++) {\n if (!instance._isBeingDestroyed) { cbs[i$1](instance); }\n }\n }\n }\n}\n\nvar View = {\n name: 'RouterView',\n functional: true,\n props: {\n name: {\n type: String,\n default: 'default'\n }\n },\n render: function render (_, ref) {\n var props = ref.props;\n var children = ref.children;\n var parent = ref.parent;\n var data = ref.data;\n\n // used by devtools to display a router-view badge\n data.routerView = true;\n\n // directly use parent context's createElement() function\n // so that components rendered by router-view can resolve named slots\n var h = parent.$createElement;\n var name = props.name;\n var route = parent.$route;\n var cache = parent._routerViewCache || (parent._routerViewCache = {});\n\n // determine current view depth, also check to see if the tree\n // has been toggled inactive but kept-alive.\n var depth = 0;\n var inactive = false;\n while (parent && parent._routerRoot !== parent) {\n var vnodeData = parent.$vnode ? parent.$vnode.data : {};\n if (vnodeData.routerView) {\n depth++;\n }\n if (vnodeData.keepAlive && parent._directInactive && parent._inactive) {\n inactive = true;\n }\n parent = parent.$parent;\n }\n data.routerViewDepth = depth;\n\n // render previous view if the tree is inactive and kept-alive\n if (inactive) {\n var cachedData = cache[name];\n var cachedComponent = cachedData && cachedData.component;\n if (cachedComponent) {\n // #2301\n // pass props\n if (cachedData.configProps) {\n fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps);\n }\n return h(cachedComponent, data, children)\n } else {\n // render previous empty view\n return h()\n }\n }\n\n var matched = route.matched[depth];\n var component = matched && matched.components[name];\n\n // render empty node if no matched route or no config component\n if (!matched || !component) {\n cache[name] = null;\n return h()\n }\n\n // cache component\n cache[name] = { component: component };\n\n // attach instance registration hook\n // this will be called in the instance's injected lifecycle hooks\n data.registerRouteInstance = function (vm, val) {\n // val could be undefined for unregistration\n var current = matched.instances[name];\n if (\n (val && current !== vm) ||\n (!val && current === vm)\n ) {\n matched.instances[name] = val;\n }\n }\n\n // also register instance in prepatch hook\n // in case the same component instance is reused across different routes\n ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) {\n matched.instances[name] = vnode.componentInstance;\n };\n\n // register instance in init hook\n // in case kept-alive component be actived when routes changed\n data.hook.init = function (vnode) {\n if (vnode.data.keepAlive &&\n vnode.componentInstance &&\n vnode.componentInstance !== matched.instances[name]\n ) {\n matched.instances[name] = vnode.componentInstance;\n }\n\n // if the route transition has already been confirmed then we weren't\n // able to call the cbs during confirmation as the component was not\n // registered yet, so we call it here.\n handleRouteEntered(route);\n };\n\n var configProps = matched.props && matched.props[name];\n // save route and configProps in cache\n if (configProps) {\n extend(cache[name], {\n route: route,\n configProps: configProps\n });\n fillPropsinData(component, data, route, configProps);\n }\n\n return h(component, data, children)\n }\n};\n\nfunction fillPropsinData (component, data, route, configProps) {\n // resolve props\n var propsToPass = data.props = resolveProps(route, configProps);\n if (propsToPass) {\n // clone to prevent mutation\n propsToPass = data.props = extend({}, propsToPass);\n // pass non-declared props as attrs\n var attrs = data.attrs = data.attrs || {};\n for (var key in propsToPass) {\n if (!component.props || !(key in component.props)) {\n attrs[key] = propsToPass[key];\n delete propsToPass[key];\n }\n }\n }\n}\n\nfunction resolveProps (route, config) {\n switch (typeof config) {\n case 'undefined':\n return\n case 'object':\n return config\n case 'function':\n return config(route)\n case 'boolean':\n return config ? route.params : undefined\n default:\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false,\n \"props in \\\"\" + (route.path) + \"\\\" is a \" + (typeof config) + \", \" +\n \"expecting an object, function or boolean.\"\n );\n }\n }\n}\n\n/* */\n\nfunction resolvePath (\n relative,\n base,\n append\n) {\n var firstChar = relative.charAt(0);\n if (firstChar === '/') {\n return relative\n }\n\n if (firstChar === '?' || firstChar === '#') {\n return base + relative\n }\n\n var stack = base.split('/');\n\n // remove trailing segment if:\n // - not appending\n // - appending to trailing slash (last segment is empty)\n if (!append || !stack[stack.length - 1]) {\n stack.pop();\n }\n\n // resolve relative path\n var segments = relative.replace(/^\\//, '').split('/');\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n if (segment === '..') {\n stack.pop();\n } else if (segment !== '.') {\n stack.push(segment);\n }\n }\n\n // ensure leading slash\n if (stack[0] !== '') {\n stack.unshift('');\n }\n\n return stack.join('/')\n}\n\nfunction parsePath (path) {\n var hash = '';\n var query = '';\n\n var hashIndex = path.indexOf('#');\n if (hashIndex >= 0) {\n hash = path.slice(hashIndex);\n path = path.slice(0, hashIndex);\n }\n\n var queryIndex = path.indexOf('?');\n if (queryIndex >= 0) {\n query = path.slice(queryIndex + 1);\n path = path.slice(0, queryIndex);\n }\n\n return {\n path: path,\n query: query,\n hash: hash\n }\n}\n\nfunction cleanPath (path) {\n return path.replace(/\\/(?:\\s*\\/)+/g, '/')\n}\n\nvar isarray = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n/**\n * Expose `pathToRegexp`.\n */\nvar pathToRegexp_1 = pathToRegexp;\nvar parse_1 = parse;\nvar compile_1 = compile;\nvar tokensToFunction_1 = tokensToFunction;\nvar tokensToRegExp_1 = tokensToRegExp;\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g');\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = [];\n var key = 0;\n var index = 0;\n var path = '';\n var defaultDelimiter = options && options.delimiter || '/';\n var res;\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0];\n var escaped = res[1];\n var offset = res.index;\n path += str.slice(index, offset);\n index = offset + m.length;\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1];\n continue\n }\n\n var next = str[index];\n var prefix = res[2];\n var name = res[3];\n var capture = res[4];\n var group = res[5];\n var modifier = res[6];\n var asterisk = res[7];\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path);\n path = '';\n }\n\n var partial = prefix != null && next != null && next !== prefix;\n var repeat = modifier === '+' || modifier === '*';\n var optional = modifier === '?' || modifier === '*';\n var delimiter = res[2] || defaultDelimiter;\n var pattern = capture || group;\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n });\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index);\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path);\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length);\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options));\n }\n }\n\n return function (obj, opts) {\n var path = '';\n var data = obj || {};\n var options = opts || {};\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n path += token;\n\n continue\n }\n\n var value = data[token.name];\n var segment;\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix;\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j]);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment;\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment;\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys;\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g);\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n });\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = [];\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source);\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n var strict = options.strict;\n var end = options.end !== false;\n var route = '';\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n route += escapeString(token);\n } else {\n var prefix = escapeString(token.prefix);\n var capture = '(?:' + token.pattern + ')';\n\n keys.push(token);\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*';\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?';\n } else {\n capture = prefix + '(' + capture + ')?';\n }\n } else {\n capture = prefix + '(' + capture + ')';\n }\n\n route += capture;\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/');\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';\n }\n\n if (end) {\n route += '$';\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\npathToRegexp_1.parse = parse_1;\npathToRegexp_1.compile = compile_1;\npathToRegexp_1.tokensToFunction = tokensToFunction_1;\npathToRegexp_1.tokensToRegExp = tokensToRegExp_1;\n\n/* */\n\n// $flow-disable-line\nvar regexpCompileCache = Object.create(null);\n\nfunction fillParams (\n path,\n params,\n routeMsg\n) {\n params = params || {};\n try {\n var filler =\n regexpCompileCache[path] ||\n (regexpCompileCache[path] = pathToRegexp_1.compile(path));\n\n // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }}\n // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string\n if (typeof params.pathMatch === 'string') { params[0] = params.pathMatch; }\n\n return filler(params, { pretty: true })\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n // Fix #3072 no warn if `pathMatch` is string\n warn(typeof params.pathMatch === 'string', (\"missing param for \" + routeMsg + \": \" + (e.message)));\n }\n return ''\n } finally {\n // delete the 0 if it was added\n delete params[0];\n }\n}\n\n/* */\n\nfunction normalizeLocation (\n raw,\n current,\n append,\n router\n) {\n var next = typeof raw === 'string' ? { path: raw } : raw;\n // named target\n if (next._normalized) {\n return next\n } else if (next.name) {\n next = extend({}, raw);\n var params = next.params;\n if (params && typeof params === 'object') {\n next.params = extend({}, params);\n }\n return next\n }\n\n // relative params\n if (!next.path && next.params && current) {\n next = extend({}, next);\n next._normalized = true;\n var params$1 = extend(extend({}, current.params), next.params);\n if (current.name) {\n next.name = current.name;\n next.params = params$1;\n } else if (current.matched.length) {\n var rawPath = current.matched[current.matched.length - 1].path;\n next.path = fillParams(rawPath, params$1, (\"path \" + (current.path)));\n } else if (process.env.NODE_ENV !== 'production') {\n warn(false, \"relative params navigation requires a current route.\");\n }\n return next\n }\n\n var parsedPath = parsePath(next.path || '');\n var basePath = (current && current.path) || '/';\n var path = parsedPath.path\n ? resolvePath(parsedPath.path, basePath, append || next.append)\n : basePath;\n\n var query = resolveQuery(\n parsedPath.query,\n next.query,\n router && router.options.parseQuery\n );\n\n var hash = next.hash || parsedPath.hash;\n if (hash && hash.charAt(0) !== '#') {\n hash = \"#\" + hash;\n }\n\n return {\n _normalized: true,\n path: path,\n query: query,\n hash: hash\n }\n}\n\n/* */\n\n// work around weird flow bug\nvar toTypes = [String, Object];\nvar eventTypes = [String, Array];\n\nvar noop = function () {};\n\nvar warnedCustomSlot;\nvar warnedTagProp;\nvar warnedEventProp;\n\nvar Link = {\n name: 'RouterLink',\n props: {\n to: {\n type: toTypes,\n required: true\n },\n tag: {\n type: String,\n default: 'a'\n },\n custom: Boolean,\n exact: Boolean,\n exactPath: Boolean,\n append: Boolean,\n replace: Boolean,\n activeClass: String,\n exactActiveClass: String,\n ariaCurrentValue: {\n type: String,\n default: 'page'\n },\n event: {\n type: eventTypes,\n default: 'click'\n }\n },\n render: function render (h) {\n var this$1$1 = this;\n\n var router = this.$router;\n var current = this.$route;\n var ref = router.resolve(\n this.to,\n current,\n this.append\n );\n var location = ref.location;\n var route = ref.route;\n var href = ref.href;\n\n var classes = {};\n var globalActiveClass = router.options.linkActiveClass;\n var globalExactActiveClass = router.options.linkExactActiveClass;\n // Support global empty active class\n var activeClassFallback =\n globalActiveClass == null ? 'router-link-active' : globalActiveClass;\n var exactActiveClassFallback =\n globalExactActiveClass == null\n ? 'router-link-exact-active'\n : globalExactActiveClass;\n var activeClass =\n this.activeClass == null ? activeClassFallback : this.activeClass;\n var exactActiveClass =\n this.exactActiveClass == null\n ? exactActiveClassFallback\n : this.exactActiveClass;\n\n var compareTarget = route.redirectedFrom\n ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router)\n : route;\n\n classes[exactActiveClass] = isSameRoute(current, compareTarget, this.exactPath);\n classes[activeClass] = this.exact || this.exactPath\n ? classes[exactActiveClass]\n : isIncludedRoute(current, compareTarget);\n\n var ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null;\n\n var handler = function (e) {\n if (guardEvent(e)) {\n if (this$1$1.replace) {\n router.replace(location, noop);\n } else {\n router.push(location, noop);\n }\n }\n };\n\n var on = { click: guardEvent };\n if (Array.isArray(this.event)) {\n this.event.forEach(function (e) {\n on[e] = handler;\n });\n } else {\n on[this.event] = handler;\n }\n\n var data = { class: classes };\n\n var scopedSlot =\n !this.$scopedSlots.$hasNormal &&\n this.$scopedSlots.default &&\n this.$scopedSlots.default({\n href: href,\n route: route,\n navigate: handler,\n isActive: classes[activeClass],\n isExactActive: classes[exactActiveClass]\n });\n\n if (scopedSlot) {\n if (process.env.NODE_ENV !== 'production' && !this.custom) {\n !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an <a> element. Use the custom prop to remove this warning:\\n<router-link v-slot=\"{ navigate, href }\" custom></router-link>\\n');\n warnedCustomSlot = true;\n }\n if (scopedSlot.length === 1) {\n return scopedSlot[0]\n } else if (scopedSlot.length > 1 || !scopedSlot.length) {\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false,\n (\"<router-link> with to=\\\"\" + (this.to) + \"\\\" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.\")\n );\n }\n return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot)\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if ('tag' in this.$options.propsData && !warnedTagProp) {\n warn(\n false,\n \"<router-link>'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.\"\n );\n warnedTagProp = true;\n }\n if ('event' in this.$options.propsData && !warnedEventProp) {\n warn(\n false,\n \"<router-link>'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.\"\n );\n warnedEventProp = true;\n }\n }\n\n if (this.tag === 'a') {\n data.on = on;\n data.attrs = { href: href, 'aria-current': ariaCurrentValue };\n } else {\n // find the first <a> child and apply listener and href\n var a = findAnchor(this.$slots.default);\n if (a) {\n // in case the <a> is a static node\n a.isStatic = false;\n var aData = (a.data = extend({}, a.data));\n aData.on = aData.on || {};\n // transform existing events in both objects into arrays so we can push later\n for (var event in aData.on) {\n var handler$1 = aData.on[event];\n if (event in on) {\n aData.on[event] = Array.isArray(handler$1) ? handler$1 : [handler$1];\n }\n }\n // append new listeners for router-link\n for (var event$1 in on) {\n if (event$1 in aData.on) {\n // on[event] is always a function\n aData.on[event$1].push(on[event$1]);\n } else {\n aData.on[event$1] = handler;\n }\n }\n\n var aAttrs = (a.data.attrs = extend({}, a.data.attrs));\n aAttrs.href = href;\n aAttrs['aria-current'] = ariaCurrentValue;\n } else {\n // doesn't have <a> child, apply listener to self\n data.on = on;\n }\n }\n\n return h(this.tag, data, this.$slots.default)\n }\n};\n\nfunction guardEvent (e) {\n // don't redirect with control keys\n if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return }\n // don't redirect when preventDefault called\n if (e.defaultPrevented) { return }\n // don't redirect on right click\n if (e.button !== undefined && e.button !== 0) { return }\n // don't redirect if `target=\"_blank\"`\n if (e.currentTarget && e.currentTarget.getAttribute) {\n var target = e.currentTarget.getAttribute('target');\n if (/\\b_blank\\b/i.test(target)) { return }\n }\n // this may be a Weex event which doesn't have this method\n if (e.preventDefault) {\n e.preventDefault();\n }\n return true\n}\n\nfunction findAnchor (children) {\n if (children) {\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (child.tag === 'a') {\n return child\n }\n if (child.children && (child = findAnchor(child.children))) {\n return child\n }\n }\n }\n}\n\nvar _Vue;\n\nfunction install (Vue) {\n if (install.installed && _Vue === Vue) { return }\n install.installed = true;\n\n _Vue = Vue;\n\n var isDef = function (v) { return v !== undefined; };\n\n var registerInstance = function (vm, callVal) {\n var i = vm.$options._parentVnode;\n if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {\n i(vm, callVal);\n }\n };\n\n Vue.mixin({\n beforeCreate: function beforeCreate () {\n if (isDef(this.$options.router)) {\n this._routerRoot = this;\n this._router = this.$options.router;\n this._router.init(this);\n Vue.util.defineReactive(this, '_route', this._router.history.current);\n } else {\n this._routerRoot = (this.$parent && this.$parent._routerRoot) || this;\n }\n registerInstance(this, this);\n },\n destroyed: function destroyed () {\n registerInstance(this);\n }\n });\n\n Object.defineProperty(Vue.prototype, '$router', {\n get: function get () { return this._routerRoot._router }\n });\n\n Object.defineProperty(Vue.prototype, '$route', {\n get: function get () { return this._routerRoot._route }\n });\n\n Vue.component('RouterView', View);\n Vue.component('RouterLink', Link);\n\n var strats = Vue.config.optionMergeStrategies;\n // use the same hook merging strategy for route hooks\n strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created;\n}\n\n/* */\n\nvar inBrowser = typeof window !== 'undefined';\n\n/* */\n\nfunction createRouteMap (\n routes,\n oldPathList,\n oldPathMap,\n oldNameMap,\n parentRoute\n) {\n // the path list is used to control path matching priority\n var pathList = oldPathList || [];\n // $flow-disable-line\n var pathMap = oldPathMap || Object.create(null);\n // $flow-disable-line\n var nameMap = oldNameMap || Object.create(null);\n\n routes.forEach(function (route) {\n addRouteRecord(pathList, pathMap, nameMap, route, parentRoute);\n });\n\n // ensure wildcard routes are always at the end\n for (var i = 0, l = pathList.length; i < l; i++) {\n if (pathList[i] === '*') {\n pathList.push(pathList.splice(i, 1)[0]);\n l--;\n i--;\n }\n }\n\n if (process.env.NODE_ENV === 'development') {\n // warn if routes do not include leading slashes\n var found = pathList\n // check for missing leading slash\n .filter(function (path) { return path && path.charAt(0) !== '*' && path.charAt(0) !== '/'; });\n\n if (found.length > 0) {\n var pathNames = found.map(function (path) { return (\"- \" + path); }).join('\\n');\n warn(false, (\"Non-nested routes must include a leading slash character. Fix the following routes: \\n\" + pathNames));\n }\n }\n\n return {\n pathList: pathList,\n pathMap: pathMap,\n nameMap: nameMap\n }\n}\n\nfunction addRouteRecord (\n pathList,\n pathMap,\n nameMap,\n route,\n parent,\n matchAs\n) {\n var path = route.path;\n var name = route.name;\n if (process.env.NODE_ENV !== 'production') {\n assert(path != null, \"\\\"path\\\" is required in a route configuration.\");\n assert(\n typeof route.component !== 'string',\n \"route config \\\"component\\\" for path: \" + (String(\n path || name\n )) + \" cannot be a \" + \"string id. Use an actual component instead.\"\n );\n\n warn(\n // eslint-disable-next-line no-control-regex\n !/[^\\u0000-\\u007F]+/.test(path),\n \"Route with path \\\"\" + path + \"\\\" contains unencoded characters, make sure \" +\n \"your path is correctly encoded before passing it to the router. Use \" +\n \"encodeURI to encode static segments of your path.\"\n );\n }\n\n var pathToRegexpOptions =\n route.pathToRegexpOptions || {};\n var normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict);\n\n if (typeof route.caseSensitive === 'boolean') {\n pathToRegexpOptions.sensitive = route.caseSensitive;\n }\n\n var record = {\n path: normalizedPath,\n regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),\n components: route.components || { default: route.component },\n alias: route.alias\n ? typeof route.alias === 'string'\n ? [route.alias]\n : route.alias\n : [],\n instances: {},\n enteredCbs: {},\n name: name,\n parent: parent,\n matchAs: matchAs,\n redirect: route.redirect,\n beforeEnter: route.beforeEnter,\n meta: route.meta || {},\n props:\n route.props == null\n ? {}\n : route.components\n ? route.props\n : { default: route.props }\n };\n\n if (route.children) {\n // Warn if route is named, does not redirect and has a default child route.\n // If users navigate to this route by name, the default child will\n // not be rendered (GH Issue #629)\n if (process.env.NODE_ENV !== 'production') {\n if (\n route.name &&\n !route.redirect &&\n route.children.some(function (child) { return /^\\/?$/.test(child.path); })\n ) {\n warn(\n false,\n \"Named Route '\" + (route.name) + \"' has a default child route. \" +\n \"When navigating to this named route (:to=\\\"{name: '\" + (route.name) + \"'}\\\"), \" +\n \"the default child route will not be rendered. Remove the name from \" +\n \"this route and use the name of the default child route for named \" +\n \"links instead.\"\n );\n }\n }\n route.children.forEach(function (child) {\n var childMatchAs = matchAs\n ? cleanPath((matchAs + \"/\" + (child.path)))\n : undefined;\n addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs);\n });\n }\n\n if (!pathMap[record.path]) {\n pathList.push(record.path);\n pathMap[record.path] = record;\n }\n\n if (route.alias !== undefined) {\n var aliases = Array.isArray(route.alias) ? route.alias : [route.alias];\n for (var i = 0; i < aliases.length; ++i) {\n var alias = aliases[i];\n if (process.env.NODE_ENV !== 'production' && alias === path) {\n warn(\n false,\n (\"Found an alias with the same value as the path: \\\"\" + path + \"\\\". You have to remove that alias. It will be ignored in development.\")\n );\n // skip in dev to make it work\n continue\n }\n\n var aliasRoute = {\n path: alias,\n children: route.children\n };\n addRouteRecord(\n pathList,\n pathMap,\n nameMap,\n aliasRoute,\n parent,\n record.path || '/' // matchAs\n );\n }\n }\n\n if (name) {\n if (!nameMap[name]) {\n nameMap[name] = record;\n } else if (process.env.NODE_ENV !== 'production' && !matchAs) {\n warn(\n false,\n \"Duplicate named routes definition: \" +\n \"{ name: \\\"\" + name + \"\\\", path: \\\"\" + (record.path) + \"\\\" }\"\n );\n }\n }\n}\n\nfunction compileRouteRegex (\n path,\n pathToRegexpOptions\n) {\n var regex = pathToRegexp_1(path, [], pathToRegexpOptions);\n if (process.env.NODE_ENV !== 'production') {\n var keys = Object.create(null);\n regex.keys.forEach(function (key) {\n warn(\n !keys[key.name],\n (\"Duplicate param keys in route with path: \\\"\" + path + \"\\\"\")\n );\n keys[key.name] = true;\n });\n }\n return regex\n}\n\nfunction normalizePath (\n path,\n parent,\n strict\n) {\n if (!strict) { path = path.replace(/\\/$/, ''); }\n if (path[0] === '/') { return path }\n if (parent == null) { return path }\n return cleanPath(((parent.path) + \"/\" + path))\n}\n\n/* */\n\n\n\nfunction createMatcher (\n routes,\n router\n) {\n var ref = createRouteMap(routes);\n var pathList = ref.pathList;\n var pathMap = ref.pathMap;\n var nameMap = ref.nameMap;\n\n function addRoutes (routes) {\n createRouteMap(routes, pathList, pathMap, nameMap);\n }\n\n function addRoute (parentOrRoute, route) {\n var parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined;\n // $flow-disable-line\n createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent);\n\n // add aliases of parent\n if (parent && parent.alias.length) {\n createRouteMap(\n // $flow-disable-line route is defined if parent is\n parent.alias.map(function (alias) { return ({ path: alias, children: [route] }); }),\n pathList,\n pathMap,\n nameMap,\n parent\n );\n }\n }\n\n function getRoutes () {\n return pathList.map(function (path) { return pathMap[path]; })\n }\n\n function match (\n raw,\n currentRoute,\n redirectedFrom\n ) {\n var location = normalizeLocation(raw, currentRoute, false, router);\n var name = location.name;\n\n if (name) {\n var record = nameMap[name];\n if (process.env.NODE_ENV !== 'production') {\n warn(record, (\"Route with name '\" + name + \"' does not exist\"));\n }\n if (!record) { return _createRoute(null, location) }\n var paramNames = record.regex.keys\n .filter(function (key) { return !key.optional; })\n .map(function (key) { return key.name; });\n\n if (typeof location.params !== 'object') {\n location.params = {};\n }\n\n if (currentRoute && typeof currentRoute.params === 'object') {\n for (var key in currentRoute.params) {\n if (!(key in location.params) && paramNames.indexOf(key) > -1) {\n location.params[key] = currentRoute.params[key];\n }\n }\n }\n\n location.path = fillParams(record.path, location.params, (\"named route \\\"\" + name + \"\\\"\"));\n return _createRoute(record, location, redirectedFrom)\n } else if (location.path) {\n location.params = {};\n for (var i = 0; i < pathList.length; i++) {\n var path = pathList[i];\n var record$1 = pathMap[path];\n if (matchRoute(record$1.regex, location.path, location.params)) {\n return _createRoute(record$1, location, redirectedFrom)\n }\n }\n }\n // no match\n return _createRoute(null, location)\n }\n\n function redirect (\n record,\n location\n ) {\n var originalRedirect = record.redirect;\n var redirect = typeof originalRedirect === 'function'\n ? originalRedirect(createRoute(record, location, null, router))\n : originalRedirect;\n\n if (typeof redirect === 'string') {\n redirect = { path: redirect };\n }\n\n if (!redirect || typeof redirect !== 'object') {\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false, (\"invalid redirect option: \" + (JSON.stringify(redirect)))\n );\n }\n return _createRoute(null, location)\n }\n\n var re = redirect;\n var name = re.name;\n var path = re.path;\n var query = location.query;\n var hash = location.hash;\n var params = location.params;\n query = re.hasOwnProperty('query') ? re.query : query;\n hash = re.hasOwnProperty('hash') ? re.hash : hash;\n params = re.hasOwnProperty('params') ? re.params : params;\n\n if (name) {\n // resolved named direct\n var targetRecord = nameMap[name];\n if (process.env.NODE_ENV !== 'production') {\n assert(targetRecord, (\"redirect failed: named route \\\"\" + name + \"\\\" not found.\"));\n }\n return match({\n _normalized: true,\n name: name,\n query: query,\n hash: hash,\n params: params\n }, undefined, location)\n } else if (path) {\n // 1. resolve relative redirect\n var rawPath = resolveRecordPath(path, record);\n // 2. resolve params\n var resolvedPath = fillParams(rawPath, params, (\"redirect route with path \\\"\" + rawPath + \"\\\"\"));\n // 3. rematch with existing query and hash\n return match({\n _normalized: true,\n path: resolvedPath,\n query: query,\n hash: hash\n }, undefined, location)\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, (\"invalid redirect option: \" + (JSON.stringify(redirect))));\n }\n return _createRoute(null, location)\n }\n }\n\n function alias (\n record,\n location,\n matchAs\n ) {\n var aliasedPath = fillParams(matchAs, location.params, (\"aliased route with path \\\"\" + matchAs + \"\\\"\"));\n var aliasedMatch = match({\n _normalized: true,\n path: aliasedPath\n });\n if (aliasedMatch) {\n var matched = aliasedMatch.matched;\n var aliasedRecord = matched[matched.length - 1];\n location.params = aliasedMatch.params;\n return _createRoute(aliasedRecord, location)\n }\n return _createRoute(null, location)\n }\n\n function _createRoute (\n record,\n location,\n redirectedFrom\n ) {\n if (record && record.redirect) {\n return redirect(record, redirectedFrom || location)\n }\n if (record && record.matchAs) {\n return alias(record, location, record.matchAs)\n }\n return createRoute(record, location, redirectedFrom, router)\n }\n\n return {\n match: match,\n addRoute: addRoute,\n getRoutes: getRoutes,\n addRoutes: addRoutes\n }\n}\n\nfunction matchRoute (\n regex,\n path,\n params\n) {\n var m = path.match(regex);\n\n if (!m) {\n return false\n } else if (!params) {\n return true\n }\n\n for (var i = 1, len = m.length; i < len; ++i) {\n var key = regex.keys[i - 1];\n if (key) {\n // Fix #1994: using * with props: true generates a param named 0\n params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i];\n }\n }\n\n return true\n}\n\nfunction resolveRecordPath (path, record) {\n return resolvePath(path, record.parent ? record.parent.path : '/', true)\n}\n\n/* */\n\n// use User Timing api (if present) for more accurate key precision\nvar Time =\n inBrowser && window.performance && window.performance.now\n ? window.performance\n : Date;\n\nfunction genStateKey () {\n return Time.now().toFixed(3)\n}\n\nvar _key = genStateKey();\n\nfunction getStateKey () {\n return _key\n}\n\nfunction setStateKey (key) {\n return (_key = key)\n}\n\n/* */\n\nvar positionStore = Object.create(null);\n\nfunction setupScroll () {\n // Prevent browser scroll behavior on History popstate\n if ('scrollRestoration' in window.history) {\n window.history.scrollRestoration = 'manual';\n }\n // Fix for #1585 for Firefox\n // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678\n // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with\n // window.location.protocol + '//' + window.location.host\n // location.host contains the port and location.hostname doesn't\n var protocolAndPath = window.location.protocol + '//' + window.location.host;\n var absolutePath = window.location.href.replace(protocolAndPath, '');\n // preserve existing history state as it could be overriden by the user\n var stateCopy = extend({}, window.history.state);\n stateCopy.key = getStateKey();\n window.history.replaceState(stateCopy, '', absolutePath);\n window.addEventListener('popstate', handlePopState);\n return function () {\n window.removeEventListener('popstate', handlePopState);\n }\n}\n\nfunction handleScroll (\n router,\n to,\n from,\n isPop\n) {\n if (!router.app) {\n return\n }\n\n var behavior = router.options.scrollBehavior;\n if (!behavior) {\n return\n }\n\n if (process.env.NODE_ENV !== 'production') {\n assert(typeof behavior === 'function', \"scrollBehavior must be a function\");\n }\n\n // wait until re-render finishes before scrolling\n router.app.$nextTick(function () {\n var position = getScrollPosition();\n var shouldScroll = behavior.call(\n router,\n to,\n from,\n isPop ? position : null\n );\n\n if (!shouldScroll) {\n return\n }\n\n if (typeof shouldScroll.then === 'function') {\n shouldScroll\n .then(function (shouldScroll) {\n scrollToPosition((shouldScroll), position);\n })\n .catch(function (err) {\n if (process.env.NODE_ENV !== 'production') {\n assert(false, err.toString());\n }\n });\n } else {\n scrollToPosition(shouldScroll, position);\n }\n });\n}\n\nfunction saveScrollPosition () {\n var key = getStateKey();\n if (key) {\n positionStore[key] = {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n }\n}\n\nfunction handlePopState (e) {\n saveScrollPosition();\n if (e.state && e.state.key) {\n setStateKey(e.state.key);\n }\n}\n\nfunction getScrollPosition () {\n var key = getStateKey();\n if (key) {\n return positionStore[key]\n }\n}\n\nfunction getElementPosition (el, offset) {\n var docEl = document.documentElement;\n var docRect = docEl.getBoundingClientRect();\n var elRect = el.getBoundingClientRect();\n return {\n x: elRect.left - docRect.left - offset.x,\n y: elRect.top - docRect.top - offset.y\n }\n}\n\nfunction isValidPosition (obj) {\n return isNumber(obj.x) || isNumber(obj.y)\n}\n\nfunction normalizePosition (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : window.pageXOffset,\n y: isNumber(obj.y) ? obj.y : window.pageYOffset\n }\n}\n\nfunction normalizeOffset (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : 0,\n y: isNumber(obj.y) ? obj.y : 0\n }\n}\n\nfunction isNumber (v) {\n return typeof v === 'number'\n}\n\nvar hashStartsWithNumberRE = /^#\\d/;\n\nfunction scrollToPosition (shouldScroll, position) {\n var isObject = typeof shouldScroll === 'object';\n if (isObject && typeof shouldScroll.selector === 'string') {\n // getElementById would still fail if the selector contains a more complicated query like #main[data-attr]\n // but at the same time, it doesn't make much sense to select an element with an id and an extra selector\n var el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line\n ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line\n : document.querySelector(shouldScroll.selector);\n\n if (el) {\n var offset =\n shouldScroll.offset && typeof shouldScroll.offset === 'object'\n ? shouldScroll.offset\n : {};\n offset = normalizeOffset(offset);\n position = getElementPosition(el, offset);\n } else if (isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n } else if (isObject && isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n\n if (position) {\n // $flow-disable-line\n if ('scrollBehavior' in document.documentElement.style) {\n window.scrollTo({\n left: position.x,\n top: position.y,\n // $flow-disable-line\n behavior: shouldScroll.behavior\n });\n } else {\n window.scrollTo(position.x, position.y);\n }\n }\n}\n\n/* */\n\nvar supportsPushState =\n inBrowser &&\n (function () {\n var ua = window.navigator.userAgent;\n\n if (\n (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&\n ua.indexOf('Mobile Safari') !== -1 &&\n ua.indexOf('Chrome') === -1 &&\n ua.indexOf('Windows Phone') === -1\n ) {\n return false\n }\n\n return window.history && typeof window.history.pushState === 'function'\n })();\n\nfunction pushState (url, replace) {\n saveScrollPosition();\n // try...catch the pushState call to get around Safari\n // DOM Exception 18 where it limits to 100 pushState calls\n var history = window.history;\n try {\n if (replace) {\n // preserve existing history state as it could be overriden by the user\n var stateCopy = extend({}, history.state);\n stateCopy.key = getStateKey();\n history.replaceState(stateCopy, '', url);\n } else {\n history.pushState({ key: setStateKey(genStateKey()) }, '', url);\n }\n } catch (e) {\n window.location[replace ? 'replace' : 'assign'](url);\n }\n}\n\nfunction replaceState (url) {\n pushState(url, true);\n}\n\n// When changing thing, also edit router.d.ts\nvar NavigationFailureType = {\n redirected: 2,\n aborted: 4,\n cancelled: 8,\n duplicated: 16\n};\n\nfunction createNavigationRedirectedError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.redirected,\n (\"Redirected when going from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (stringifyRoute(\n to\n )) + \"\\\" via a navigation guard.\")\n )\n}\n\nfunction createNavigationDuplicatedError (from, to) {\n var error = createRouterError(\n from,\n to,\n NavigationFailureType.duplicated,\n (\"Avoided redundant navigation to current location: \\\"\" + (from.fullPath) + \"\\\".\")\n );\n // backwards compatible with the first introduction of Errors\n error.name = 'NavigationDuplicated';\n return error\n}\n\nfunction createNavigationCancelledError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.cancelled,\n (\"Navigation cancelled from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (to.fullPath) + \"\\\" with a new navigation.\")\n )\n}\n\nfunction createNavigationAbortedError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.aborted,\n (\"Navigation aborted from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (to.fullPath) + \"\\\" via a navigation guard.\")\n )\n}\n\nfunction createRouterError (from, to, type, message) {\n var error = new Error(message);\n error._isRouter = true;\n error.from = from;\n error.to = to;\n error.type = type;\n\n return error\n}\n\nvar propertiesToLog = ['params', 'query', 'hash'];\n\nfunction stringifyRoute (to) {\n if (typeof to === 'string') { return to }\n if ('path' in to) { return to.path }\n var location = {};\n propertiesToLog.forEach(function (key) {\n if (key in to) { location[key] = to[key]; }\n });\n return JSON.stringify(location, null, 2)\n}\n\nfunction isError (err) {\n return Object.prototype.toString.call(err).indexOf('Error') > -1\n}\n\nfunction isNavigationFailure (err, errorType) {\n return (\n isError(err) &&\n err._isRouter &&\n (errorType == null || err.type === errorType)\n )\n}\n\n/* */\n\nfunction runQueue (queue, fn, cb) {\n var step = function (index) {\n if (index >= queue.length) {\n cb();\n } else {\n if (queue[index]) {\n fn(queue[index], function () {\n step(index + 1);\n });\n } else {\n step(index + 1);\n }\n }\n };\n step(0);\n}\n\n/* */\n\nfunction resolveAsyncComponents (matched) {\n return function (to, from, next) {\n var hasAsync = false;\n var pending = 0;\n var error = null;\n\n flatMapComponents(matched, function (def, _, match, key) {\n // if it's a function and doesn't have cid attached,\n // assume it's an async component resolve function.\n // we are not using Vue's default async resolving mechanism because\n // we want to halt the navigation until the incoming component has been\n // resolved.\n if (typeof def === 'function' && def.cid === undefined) {\n hasAsync = true;\n pending++;\n\n var resolve = once(function (resolvedDef) {\n if (isESModule(resolvedDef)) {\n resolvedDef = resolvedDef.default;\n }\n // save resolved on async factory in case it's used elsewhere\n def.resolved = typeof resolvedDef === 'function'\n ? resolvedDef\n : _Vue.extend(resolvedDef);\n match.components[key] = resolvedDef;\n pending--;\n if (pending <= 0) {\n next();\n }\n });\n\n var reject = once(function (reason) {\n var msg = \"Failed to resolve async component \" + key + \": \" + reason;\n process.env.NODE_ENV !== 'production' && warn(false, msg);\n if (!error) {\n error = isError(reason)\n ? reason\n : new Error(msg);\n next(error);\n }\n });\n\n var res;\n try {\n res = def(resolve, reject);\n } catch (e) {\n reject(e);\n }\n if (res) {\n if (typeof res.then === 'function') {\n res.then(resolve, reject);\n } else {\n // new syntax in Vue 2.3\n var comp = res.component;\n if (comp && typeof comp.then === 'function') {\n comp.then(resolve, reject);\n }\n }\n }\n }\n });\n\n if (!hasAsync) { next(); }\n }\n}\n\nfunction flatMapComponents (\n matched,\n fn\n) {\n return flatten(matched.map(function (m) {\n return Object.keys(m.components).map(function (key) { return fn(\n m.components[key],\n m.instances[key],\n m, key\n ); })\n }))\n}\n\nfunction flatten (arr) {\n return Array.prototype.concat.apply([], arr)\n}\n\nvar hasSymbol =\n typeof Symbol === 'function' &&\n typeof Symbol.toStringTag === 'symbol';\n\nfunction isESModule (obj) {\n return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module')\n}\n\n// in Webpack 2, require.ensure now also returns a Promise\n// so the resolve/reject functions may get called an extra time\n// if the user uses an arrow function shorthand that happens to\n// return that Promise.\nfunction once (fn) {\n var called = false;\n return function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (called) { return }\n called = true;\n return fn.apply(this, args)\n }\n}\n\n/* */\n\nvar History = function History (router, base) {\n this.router = router;\n this.base = normalizeBase(base);\n // start with a route object that stands for \"nowhere\"\n this.current = START;\n this.pending = null;\n this.ready = false;\n this.readyCbs = [];\n this.readyErrorCbs = [];\n this.errorCbs = [];\n this.listeners = [];\n};\n\nHistory.prototype.listen = function listen (cb) {\n this.cb = cb;\n};\n\nHistory.prototype.onReady = function onReady (cb, errorCb) {\n if (this.ready) {\n cb();\n } else {\n this.readyCbs.push(cb);\n if (errorCb) {\n this.readyErrorCbs.push(errorCb);\n }\n }\n};\n\nHistory.prototype.onError = function onError (errorCb) {\n this.errorCbs.push(errorCb);\n};\n\nHistory.prototype.transitionTo = function transitionTo (\n location,\n onComplete,\n onAbort\n) {\n var this$1$1 = this;\n\n var route;\n // catch redirect option https://github.com/vuejs/vue-router/issues/3201\n try {\n route = this.router.match(location, this.current);\n } catch (e) {\n this.errorCbs.forEach(function (cb) {\n cb(e);\n });\n // Exception should still be thrown\n throw e\n }\n var prev = this.current;\n this.confirmTransition(\n route,\n function () {\n this$1$1.updateRoute(route);\n onComplete && onComplete(route);\n this$1$1.ensureURL();\n this$1$1.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\n\n // fire ready cbs once\n if (!this$1$1.ready) {\n this$1$1.ready = true;\n this$1$1.readyCbs.forEach(function (cb) {\n cb(route);\n });\n }\n },\n function (err) {\n if (onAbort) {\n onAbort(err);\n }\n if (err && !this$1$1.ready) {\n // Initial redirection should not mark the history as ready yet\n // because it's triggered by the redirection instead\n // https://github.com/vuejs/vue-router/issues/3225\n // https://github.com/vuejs/vue-router/issues/3331\n if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) {\n this$1$1.ready = true;\n this$1$1.readyErrorCbs.forEach(function (cb) {\n cb(err);\n });\n }\n }\n }\n );\n};\n\nHistory.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {\n var this$1$1 = this;\n\n var current = this.current;\n this.pending = route;\n var abort = function (err) {\n // changed after adding errors with\n // https://github.com/vuejs/vue-router/pull/3047 before that change,\n // redirect and aborted navigation would produce an err == null\n if (!isNavigationFailure(err) && isError(err)) {\n if (this$1$1.errorCbs.length) {\n this$1$1.errorCbs.forEach(function (cb) {\n cb(err);\n });\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, 'uncaught error during route navigation:');\n }\n console.error(err);\n }\n }\n onAbort && onAbort(err);\n };\n var lastRouteIndex = route.matched.length - 1;\n var lastCurrentIndex = current.matched.length - 1;\n if (\n isSameRoute(route, current) &&\n // in the case the route map has been dynamically appended to\n lastRouteIndex === lastCurrentIndex &&\n route.matched[lastRouteIndex] === current.matched[lastCurrentIndex]\n ) {\n this.ensureURL();\n if (route.hash) {\n handleScroll(this.router, current, route, false);\n }\n return abort(createNavigationDuplicatedError(current, route))\n }\n\n var ref = resolveQueue(\n this.current.matched,\n route.matched\n );\n var updated = ref.updated;\n var deactivated = ref.deactivated;\n var activated = ref.activated;\n\n var queue = [].concat(\n // in-component leave guards\n extractLeaveGuards(deactivated),\n // global before hooks\n this.router.beforeHooks,\n // in-component update hooks\n extractUpdateHooks(updated),\n // in-config enter guards\n activated.map(function (m) { return m.beforeEnter; }),\n // async components\n resolveAsyncComponents(activated)\n );\n\n var iterator = function (hook, next) {\n if (this$1$1.pending !== route) {\n return abort(createNavigationCancelledError(current, route))\n }\n try {\n hook(route, current, function (to) {\n if (to === false) {\n // next(false) -> abort navigation, ensure current URL\n this$1$1.ensureURL(true);\n abort(createNavigationAbortedError(current, route));\n } else if (isError(to)) {\n this$1$1.ensureURL(true);\n abort(to);\n } else if (\n typeof to === 'string' ||\n (typeof to === 'object' &&\n (typeof to.path === 'string' || typeof to.name === 'string'))\n ) {\n // next('/') or next({ path: '/' }) -> redirect\n abort(createNavigationRedirectedError(current, route));\n if (typeof to === 'object' && to.replace) {\n this$1$1.replace(to);\n } else {\n this$1$1.push(to);\n }\n } else {\n // confirm transition and pass on the value\n next(to);\n }\n });\n } catch (e) {\n abort(e);\n }\n };\n\n runQueue(queue, iterator, function () {\n // wait until async components are resolved before\n // extracting in-component enter guards\n var enterGuards = extractEnterGuards(activated);\n var queue = enterGuards.concat(this$1$1.router.resolveHooks);\n runQueue(queue, iterator, function () {\n if (this$1$1.pending !== route) {\n return abort(createNavigationCancelledError(current, route))\n }\n this$1$1.pending = null;\n onComplete(route);\n if (this$1$1.router.app) {\n this$1$1.router.app.$nextTick(function () {\n handleRouteEntered(route);\n });\n }\n });\n });\n};\n\nHistory.prototype.updateRoute = function updateRoute (route) {\n this.current = route;\n this.cb && this.cb(route);\n};\n\nHistory.prototype.setupListeners = function setupListeners () {\n // Default implementation is empty\n};\n\nHistory.prototype.teardown = function teardown () {\n // clean up event listeners\n // https://github.com/vuejs/vue-router/issues/2341\n this.listeners.forEach(function (cleanupListener) {\n cleanupListener();\n });\n this.listeners = [];\n\n // reset current history route\n // https://github.com/vuejs/vue-router/issues/3294\n this.current = START;\n this.pending = null;\n};\n\nfunction normalizeBase (base) {\n if (!base) {\n if (inBrowser) {\n // respect <base> tag\n var baseEl = document.querySelector('base');\n base = (baseEl && baseEl.getAttribute('href')) || '/';\n // strip full URL origin\n base = base.replace(/^https?:\\/\\/[^\\/]+/, '');\n } else {\n base = '/';\n }\n }\n // make sure there's the starting slash\n if (base.charAt(0) !== '/') {\n base = '/' + base;\n }\n // remove trailing slash\n return base.replace(/\\/$/, '')\n}\n\nfunction resolveQueue (\n current,\n next\n) {\n var i;\n var max = Math.max(current.length, next.length);\n for (i = 0; i < max; i++) {\n if (current[i] !== next[i]) {\n break\n }\n }\n return {\n updated: next.slice(0, i),\n activated: next.slice(i),\n deactivated: current.slice(i)\n }\n}\n\nfunction extractGuards (\n records,\n name,\n bind,\n reverse\n) {\n var guards = flatMapComponents(records, function (def, instance, match, key) {\n var guard = extractGuard(def, name);\n if (guard) {\n return Array.isArray(guard)\n ? guard.map(function (guard) { return bind(guard, instance, match, key); })\n : bind(guard, instance, match, key)\n }\n });\n return flatten(reverse ? guards.reverse() : guards)\n}\n\nfunction extractGuard (\n def,\n key\n) {\n if (typeof def !== 'function') {\n // extend now so that global mixins are applied.\n def = _Vue.extend(def);\n }\n return def.options[key]\n}\n\nfunction extractLeaveGuards (deactivated) {\n return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)\n}\n\nfunction extractUpdateHooks (updated) {\n return extractGuards(updated, 'beforeRouteUpdate', bindGuard)\n}\n\nfunction bindGuard (guard, instance) {\n if (instance) {\n return function boundRouteGuard () {\n return guard.apply(instance, arguments)\n }\n }\n}\n\nfunction extractEnterGuards (\n activated\n) {\n return extractGuards(\n activated,\n 'beforeRouteEnter',\n function (guard, _, match, key) {\n return bindEnterGuard(guard, match, key)\n }\n )\n}\n\nfunction bindEnterGuard (\n guard,\n match,\n key\n) {\n return function routeEnterGuard (to, from, next) {\n return guard(to, from, function (cb) {\n if (typeof cb === 'function') {\n if (!match.enteredCbs[key]) {\n match.enteredCbs[key] = [];\n }\n match.enteredCbs[key].push(cb);\n }\n next(cb);\n })\n }\n}\n\n/* */\n\nvar HTML5History = /*@__PURE__*/(function (History) {\n function HTML5History (router, base) {\n History.call(this, router, base);\n\n this._startLocation = getLocation(this.base);\n }\n\n if ( History ) HTML5History.__proto__ = History;\n HTML5History.prototype = Object.create( History && History.prototype );\n HTML5History.prototype.constructor = HTML5History;\n\n HTML5History.prototype.setupListeners = function setupListeners () {\n var this$1$1 = this;\n\n if (this.listeners.length > 0) {\n return\n }\n\n var router = this.router;\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n this.listeners.push(setupScroll());\n }\n\n var handleRoutingEvent = function () {\n var current = this$1$1.current;\n\n // Avoiding first `popstate` event dispatched in some browsers but first\n // history route not updated since async guard at the same time.\n var location = getLocation(this$1$1.base);\n if (this$1$1.current === START && location === this$1$1._startLocation) {\n return\n }\n\n this$1$1.transitionTo(location, function (route) {\n if (supportsScroll) {\n handleScroll(router, route, current, true);\n }\n });\n };\n window.addEventListener('popstate', handleRoutingEvent);\n this.listeners.push(function () {\n window.removeEventListener('popstate', handleRoutingEvent);\n });\n };\n\n HTML5History.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HTML5History.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n pushState(cleanPath(this$1$1.base + route.fullPath));\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n replaceState(cleanPath(this$1$1.base + route.fullPath));\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.ensureURL = function ensureURL (push) {\n if (getLocation(this.base) !== this.current.fullPath) {\n var current = cleanPath(this.base + this.current.fullPath);\n push ? pushState(current) : replaceState(current);\n }\n };\n\n HTML5History.prototype.getCurrentLocation = function getCurrentLocation () {\n return getLocation(this.base)\n };\n\n return HTML5History;\n}(History));\n\nfunction getLocation (base) {\n var path = window.location.pathname;\n var pathLowerCase = path.toLowerCase();\n var baseLowerCase = base.toLowerCase();\n // base=\"/a\" shouldn't turn path=\"/app\" into \"/a/pp\"\n // https://github.com/vuejs/vue-router/issues/3555\n // so we ensure the trailing slash in the base\n if (base && ((pathLowerCase === baseLowerCase) ||\n (pathLowerCase.indexOf(cleanPath(baseLowerCase + '/')) === 0))) {\n path = path.slice(base.length);\n }\n return (path || '/') + window.location.search + window.location.hash\n}\n\n/* */\n\nvar HashHistory = /*@__PURE__*/(function (History) {\n function HashHistory (router, base, fallback) {\n History.call(this, router, base);\n // check history fallback deeplinking\n if (fallback && checkFallback(this.base)) {\n return\n }\n ensureSlash();\n }\n\n if ( History ) HashHistory.__proto__ = History;\n HashHistory.prototype = Object.create( History && History.prototype );\n HashHistory.prototype.constructor = HashHistory;\n\n // this is delayed until the app mounts\n // to avoid the hashchange listener being fired too early\n HashHistory.prototype.setupListeners = function setupListeners () {\n var this$1$1 = this;\n\n if (this.listeners.length > 0) {\n return\n }\n\n var router = this.router;\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n this.listeners.push(setupScroll());\n }\n\n var handleRoutingEvent = function () {\n var current = this$1$1.current;\n if (!ensureSlash()) {\n return\n }\n this$1$1.transitionTo(getHash(), function (route) {\n if (supportsScroll) {\n handleScroll(this$1$1.router, route, current, true);\n }\n if (!supportsPushState) {\n replaceHash(route.fullPath);\n }\n });\n };\n var eventType = supportsPushState ? 'popstate' : 'hashchange';\n window.addEventListener(\n eventType,\n handleRoutingEvent\n );\n this.listeners.push(function () {\n window.removeEventListener(eventType, handleRoutingEvent);\n });\n };\n\n HashHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(\n location,\n function (route) {\n pushHash(route.fullPath);\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n HashHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(\n location,\n function (route) {\n replaceHash(route.fullPath);\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n HashHistory.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HashHistory.prototype.ensureURL = function ensureURL (push) {\n var current = this.current.fullPath;\n if (getHash() !== current) {\n push ? pushHash(current) : replaceHash(current);\n }\n };\n\n HashHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n return getHash()\n };\n\n return HashHistory;\n}(History));\n\nfunction checkFallback (base) {\n var location = getLocation(base);\n if (!/^\\/#/.test(location)) {\n window.location.replace(cleanPath(base + '/#' + location));\n return true\n }\n}\n\nfunction ensureSlash () {\n var path = getHash();\n if (path.charAt(0) === '/') {\n return true\n }\n replaceHash('/' + path);\n return false\n}\n\nfunction getHash () {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var index = href.indexOf('#');\n // empty path\n if (index < 0) { return '' }\n\n href = href.slice(index + 1);\n\n return href\n}\n\nfunction getUrl (path) {\n var href = window.location.href;\n var i = href.indexOf('#');\n var base = i >= 0 ? href.slice(0, i) : href;\n return (base + \"#\" + path)\n}\n\nfunction pushHash (path) {\n if (supportsPushState) {\n pushState(getUrl(path));\n } else {\n window.location.hash = path;\n }\n}\n\nfunction replaceHash (path) {\n if (supportsPushState) {\n replaceState(getUrl(path));\n } else {\n window.location.replace(getUrl(path));\n }\n}\n\n/* */\n\nvar AbstractHistory = /*@__PURE__*/(function (History) {\n function AbstractHistory (router, base) {\n History.call(this, router, base);\n this.stack = [];\n this.index = -1;\n }\n\n if ( History ) AbstractHistory.__proto__ = History;\n AbstractHistory.prototype = Object.create( History && History.prototype );\n AbstractHistory.prototype.constructor = AbstractHistory;\n\n AbstractHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index + 1).concat(route);\n this$1$1.index++;\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index).concat(route);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n AbstractHistory.prototype.go = function go (n) {\n var this$1$1 = this;\n\n var targetIndex = this.index + n;\n if (targetIndex < 0 || targetIndex >= this.stack.length) {\n return\n }\n var route = this.stack[targetIndex];\n this.confirmTransition(\n route,\n function () {\n var prev = this$1$1.current;\n this$1$1.index = targetIndex;\n this$1$1.updateRoute(route);\n this$1$1.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\n },\n function (err) {\n if (isNavigationFailure(err, NavigationFailureType.duplicated)) {\n this$1$1.index = targetIndex;\n }\n }\n );\n };\n\n AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n var current = this.stack[this.stack.length - 1];\n return current ? current.fullPath : '/'\n };\n\n AbstractHistory.prototype.ensureURL = function ensureURL () {\n // noop\n };\n\n return AbstractHistory;\n}(History));\n\n/* */\n\n\n\nvar VueRouter = function VueRouter (options) {\n if ( options === void 0 ) options = {};\n\n if (process.env.NODE_ENV !== 'production') {\n warn(this instanceof VueRouter, \"Router must be called with the new operator.\");\n }\n this.app = null;\n this.apps = [];\n this.options = options;\n this.beforeHooks = [];\n this.resolveHooks = [];\n this.afterHooks = [];\n this.matcher = createMatcher(options.routes || [], this);\n\n var mode = options.mode || 'hash';\n this.fallback =\n mode === 'history' && !supportsPushState && options.fallback !== false;\n if (this.fallback) {\n mode = 'hash';\n }\n if (!inBrowser) {\n mode = 'abstract';\n }\n this.mode = mode;\n\n switch (mode) {\n case 'history':\n this.history = new HTML5History(this, options.base);\n break\n case 'hash':\n this.history = new HashHistory(this, options.base, this.fallback);\n break\n case 'abstract':\n this.history = new AbstractHistory(this, options.base);\n break\n default:\n if (process.env.NODE_ENV !== 'production') {\n assert(false, (\"invalid mode: \" + mode));\n }\n }\n};\n\nvar prototypeAccessors = { currentRoute: { configurable: true } };\n\nVueRouter.prototype.match = function match (raw, current, redirectedFrom) {\n return this.matcher.match(raw, current, redirectedFrom)\n};\n\nprototypeAccessors.currentRoute.get = function () {\n return this.history && this.history.current\n};\n\nVueRouter.prototype.init = function init (app /* Vue component instance */) {\n var this$1$1 = this;\n\n process.env.NODE_ENV !== 'production' &&\n assert(\n install.installed,\n \"not installed. Make sure to call `Vue.use(VueRouter)` \" +\n \"before creating root instance.\"\n );\n\n this.apps.push(app);\n\n // set up app destroyed handler\n // https://github.com/vuejs/vue-router/issues/2639\n app.$once('hook:destroyed', function () {\n // clean out app from this.apps array once destroyed\n var index = this$1$1.apps.indexOf(app);\n if (index > -1) { this$1$1.apps.splice(index, 1); }\n // ensure we still have a main app or null if no apps\n // we do not release the router so it can be reused\n if (this$1$1.app === app) { this$1$1.app = this$1$1.apps[0] || null; }\n\n if (!this$1$1.app) { this$1$1.history.teardown(); }\n });\n\n // main app previously initialized\n // return as we don't need to set up new history listener\n if (this.app) {\n return\n }\n\n this.app = app;\n\n var history = this.history;\n\n if (history instanceof HTML5History || history instanceof HashHistory) {\n var handleInitialScroll = function (routeOrError) {\n var from = history.current;\n var expectScroll = this$1$1.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll && 'fullPath' in routeOrError) {\n handleScroll(this$1$1, routeOrError, from, false);\n }\n };\n var setupListeners = function (routeOrError) {\n history.setupListeners();\n handleInitialScroll(routeOrError);\n };\n history.transitionTo(\n history.getCurrentLocation(),\n setupListeners,\n setupListeners\n );\n }\n\n history.listen(function (route) {\n this$1$1.apps.forEach(function (app) {\n app._route = route;\n });\n });\n};\n\nVueRouter.prototype.beforeEach = function beforeEach (fn) {\n return registerHook(this.beforeHooks, fn)\n};\n\nVueRouter.prototype.beforeResolve = function beforeResolve (fn) {\n return registerHook(this.resolveHooks, fn)\n};\n\nVueRouter.prototype.afterEach = function afterEach (fn) {\n return registerHook(this.afterHooks, fn)\n};\n\nVueRouter.prototype.onReady = function onReady (cb, errorCb) {\n this.history.onReady(cb, errorCb);\n};\n\nVueRouter.prototype.onError = function onError (errorCb) {\n this.history.onError(errorCb);\n};\n\nVueRouter.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1$1.history.push(location, resolve, reject);\n })\n } else {\n this.history.push(location, onComplete, onAbort);\n }\n};\n\nVueRouter.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1$1.history.replace(location, resolve, reject);\n })\n } else {\n this.history.replace(location, onComplete, onAbort);\n }\n};\n\nVueRouter.prototype.go = function go (n) {\n this.history.go(n);\n};\n\nVueRouter.prototype.back = function back () {\n this.go(-1);\n};\n\nVueRouter.prototype.forward = function forward () {\n this.go(1);\n};\n\nVueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) {\n var route = to\n ? to.matched\n ? to\n : this.resolve(to).route\n : this.currentRoute;\n if (!route) {\n return []\n }\n return [].concat.apply(\n [],\n route.matched.map(function (m) {\n return Object.keys(m.components).map(function (key) {\n return m.components[key]\n })\n })\n )\n};\n\nVueRouter.prototype.resolve = function resolve (\n to,\n current,\n append\n) {\n current = current || this.history.current;\n var location = normalizeLocation(to, current, append, this);\n var route = this.match(location, current);\n var fullPath = route.redirectedFrom || route.fullPath;\n var base = this.history.base;\n var href = createHref(base, fullPath, this.mode);\n return {\n location: location,\n route: route,\n href: href,\n // for backwards compat\n normalizedTo: location,\n resolved: route\n }\n};\n\nVueRouter.prototype.getRoutes = function getRoutes () {\n return this.matcher.getRoutes()\n};\n\nVueRouter.prototype.addRoute = function addRoute (parentOrRoute, route) {\n this.matcher.addRoute(parentOrRoute, route);\n if (this.history.current !== START) {\n this.history.transitionTo(this.history.getCurrentLocation());\n }\n};\n\nVueRouter.prototype.addRoutes = function addRoutes (routes) {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.');\n }\n this.matcher.addRoutes(routes);\n if (this.history.current !== START) {\n this.history.transitionTo(this.history.getCurrentLocation());\n }\n};\n\nObject.defineProperties( VueRouter.prototype, prototypeAccessors );\n\nvar VueRouter$1 = VueRouter;\n\nfunction registerHook (list, fn) {\n list.push(fn);\n return function () {\n var i = list.indexOf(fn);\n if (i > -1) { list.splice(i, 1); }\n }\n}\n\nfunction createHref (base, fullPath, mode) {\n var path = mode === 'hash' ? '#' + fullPath : fullPath;\n return base ? cleanPath(base + '/' + path) : path\n}\n\n// We cannot remove this as it would be a breaking change\nVueRouter.install = install;\nVueRouter.version = '3.6.5';\nVueRouter.isNavigationFailure = isNavigationFailure;\nVueRouter.NavigationFailureType = NavigationFailureType;\nVueRouter.START_LOCATION = START;\n\nif (inBrowser && window.Vue) {\n window.Vue.use(VueRouter);\n}\n\nvar version = '3.6.5';\n\nexport { NavigationFailureType, Link as RouterLink, View as RouterView, START as START_LOCATION, VueRouter$1 as default, isNavigationFailure, version };\n","exports.sync = function (store, router, options) {\n var moduleName = (options || {}).moduleName || 'route'\n\n store.registerModule(moduleName, {\n namespaced: true,\n state: cloneRoute(router.currentRoute),\n mutations: {\n 'ROUTE_CHANGED': function ROUTE_CHANGED (state, transition) {\n store.state[moduleName] = cloneRoute(transition.to, transition.from)\n }\n }\n })\n\n var isTimeTraveling = false\n var currentPath\n\n // sync router on store change\n var storeUnwatch = store.watch(\n function (state) { return state[moduleName]; },\n function (route) {\n var fullPath = route.fullPath;\n if (fullPath === currentPath) {\n return\n }\n if (currentPath != null) {\n isTimeTraveling = true\n router.push(route)\n }\n currentPath = fullPath\n },\n { sync: true }\n )\n\n // sync store on router navigation\n var afterEachUnHook = router.afterEach(function (to, from) {\n if (isTimeTraveling) {\n isTimeTraveling = false\n return\n }\n currentPath = to.fullPath\n store.commit(moduleName + '/ROUTE_CHANGED', { to: to, from: from })\n })\n\n return function unsync () {\n // On unsync, remove router hook\n if (afterEachUnHook != null) {\n afterEachUnHook()\n }\n\n // On unsync, remove store watch\n if (storeUnwatch != null) {\n storeUnwatch()\n }\n\n // On unsync, unregister Module with store\n store.unregisterModule(moduleName)\n }\n}\n\nfunction cloneRoute (to, from) {\n var clone = {\n name: to.name,\n path: to.path,\n hash: to.hash,\n query: to.query,\n params: to.params,\n fullPath: to.fullPath,\n meta: to.meta\n }\n if (from) {\n clone.from = cloneRoute(from)\n }\n return Object.freeze(clone)\n}\n\n","import { getCurrentUser as A, onRequestTokenUpdate as ue, getRequestToken as de } from \"@nextcloud/auth\";\nimport { getLoggerBuilder as q } from \"@nextcloud/logger\";\nimport { getCanonicalLocale as ae } from \"@nextcloud/l10n\";\nimport { join as le, basename as fe, extname as ce, dirname as I } from \"path\";\nimport { encodePath as he } from \"@nextcloud/paths\";\nimport { generateRemoteUrl as pe } from \"@nextcloud/router\";\nimport { createClient as ge, getPatcher as we } from \"webdav\";\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\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 */\nconst me = (e) => e === null ? q().setApp(\"files\").build() : q().setApp(\"files\").setUid(e.uid).build(), m = me(A());\n/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass Ne {\n _entries = [];\n registerEntry(t) {\n this.validateEntry(t), this._entries.push(t);\n }\n unregisterEntry(t) {\n const r = typeof t == \"string\" ? this.getEntryIndex(t) : this.getEntryIndex(t.id);\n if (r === -1) {\n m.warn(\"Entry not found, nothing removed\", { entry: t, entries: this.getEntries() });\n return;\n }\n this._entries.splice(r, 1);\n }\n /**\n * Get the list of registered entries\n *\n * @param {Folder} context the creation context. Usually the current folder\n */\n getEntries(t) {\n return t ? this._entries.filter((r) => typeof r.enabled == \"function\" ? r.enabled(t) : !0) : this._entries;\n }\n getEntryIndex(t) {\n return this._entries.findIndex((r) => r.id === t);\n }\n validateEntry(t) {\n if (!t.id || !t.displayName || !(t.iconSvgInline || t.iconClass) || !t.handler)\n throw new Error(\"Invalid entry\");\n if (typeof t.id != \"string\" || typeof t.displayName != \"string\")\n throw new Error(\"Invalid id or displayName property\");\n if (t.iconClass && typeof t.iconClass != \"string\" || t.iconSvgInline && typeof t.iconSvgInline != \"string\")\n throw new Error(\"Invalid icon provided\");\n if (t.enabled !== void 0 && typeof t.enabled != \"function\")\n throw new Error(\"Invalid enabled property\");\n if (typeof t.handler != \"function\")\n throw new Error(\"Invalid handler property\");\n if (\"order\" in t && typeof t.order != \"number\")\n throw new Error(\"Invalid order property\");\n if (this.getEntryIndex(t.id) !== -1)\n throw new Error(\"Duplicate entry\");\n }\n}\nconst F = function() {\n return typeof window._nc_newfilemenu > \"u\" && (window._nc_newfilemenu = new Ne(), m.debug(\"NewFileMenu initialized\")), window._nc_newfilemenu;\n};\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\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 */\nconst C = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"], P = [\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\"];\nfunction Yt(e, t = !1, r = !1, s = !1) {\n r = r && !s, typeof e == \"string\" && (e = Number(e));\n let n = e > 0 ? Math.floor(Math.log(e) / Math.log(s ? 1e3 : 1024)) : 0;\n n = Math.min((r ? P.length : C.length) - 1, n);\n const i = r ? P[n] : C[n];\n let d = (e / Math.pow(s ? 1e3 : 1024, n)).toFixed(1);\n return t === !0 && n === 0 ? (d !== \"0.0\" ? \"< 1 \" : \"0 \") + (r ? P[1] : C[1]) : (n < 2 ? d = parseFloat(d).toFixed(0) : d = parseFloat(d).toLocaleString(ae()), d + \" \" + i);\n}\nfunction Jt(e, t = !1) {\n try {\n e = `${e}`.toLocaleLowerCase().replaceAll(/\\s+/g, \"\").replaceAll(\",\", \".\");\n } catch {\n return null;\n }\n const r = e.match(/^([0-9]*(\\.[0-9]*)?)([kmgtp]?)(i?)b?$/);\n if (r === null || r[1] === \".\" || r[1] === \"\")\n return null;\n const s = {\n \"\": 0,\n k: 1,\n m: 2,\n g: 3,\n t: 4,\n p: 5,\n e: 6\n }, n = `${r[1]}`, i = r[4] === \"i\" || t ? 1024 : 1e3;\n return Math.round(Number.parseFloat(n) * i ** s[r[3]]);\n}\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nvar Z = /* @__PURE__ */ ((e) => (e.DEFAULT = \"default\", e.HIDDEN = \"hidden\", e))(Z || {});\nclass Qt {\n _action;\n constructor(t) {\n this.validateAction(t), this._action = t;\n }\n get id() {\n return this._action.id;\n }\n get displayName() {\n return this._action.displayName;\n }\n get title() {\n return this._action.title;\n }\n get iconSvgInline() {\n return this._action.iconSvgInline;\n }\n get enabled() {\n return this._action.enabled;\n }\n get exec() {\n return this._action.exec;\n }\n get execBatch() {\n return this._action.execBatch;\n }\n get order() {\n return this._action.order;\n }\n get parent() {\n return this._action.parent;\n }\n get default() {\n return this._action.default;\n }\n get inline() {\n return this._action.inline;\n }\n get renderInline() {\n return this._action.renderInline;\n }\n validateAction(t) {\n if (!t.id || typeof t.id != \"string\")\n throw new Error(\"Invalid id\");\n if (!t.displayName || typeof t.displayName != \"function\")\n throw new Error(\"Invalid displayName function\");\n if (\"title\" in t && typeof t.title != \"function\")\n throw new Error(\"Invalid title function\");\n if (!t.iconSvgInline || typeof t.iconSvgInline != \"function\")\n throw new Error(\"Invalid iconSvgInline function\");\n if (!t.exec || typeof t.exec != \"function\")\n throw new Error(\"Invalid exec function\");\n if (\"enabled\" in t && typeof t.enabled != \"function\")\n throw new Error(\"Invalid enabled function\");\n if (\"execBatch\" in t && typeof t.execBatch != \"function\")\n throw new Error(\"Invalid execBatch function\");\n if (\"order\" in t && typeof t.order != \"number\")\n throw new Error(\"Invalid order\");\n if (\"parent\" in t && typeof t.parent != \"string\")\n throw new Error(\"Invalid parent\");\n if (t.default && !Object.values(Z).includes(t.default))\n throw new Error(\"Invalid default\");\n if (\"inline\" in t && typeof t.inline != \"function\")\n throw new Error(\"Invalid inline function\");\n if (\"renderInline\" in t && typeof t.renderInline != \"function\")\n throw new Error(\"Invalid renderInline function\");\n }\n}\nconst Dt = function(e) {\n if (typeof window._nc_fileactions > \"u\" && (window._nc_fileactions = [], m.debug(\"FileActions initialized\")), window._nc_fileactions.find((t) => t.id === e.id)) {\n m.error(`FileAction ${e.id} already registered`, { action: e });\n return;\n }\n window._nc_fileactions.push(e);\n}, er = function() {\n return typeof window._nc_fileactions > \"u\" && (window._nc_fileactions = [], m.debug(\"FileActions initialized\")), window._nc_fileactions;\n};\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass tr {\n _header;\n constructor(t) {\n this.validateHeader(t), this._header = t;\n }\n get id() {\n return this._header.id;\n }\n get order() {\n return this._header.order;\n }\n get enabled() {\n return this._header.enabled;\n }\n get render() {\n return this._header.render;\n }\n get updated() {\n return this._header.updated;\n }\n validateHeader(t) {\n if (!t.id || !t.render || !t.updated)\n throw new Error(\"Invalid header: id, render and updated are required\");\n if (typeof t.id != \"string\")\n throw new Error(\"Invalid id property\");\n if (t.enabled !== void 0 && typeof t.enabled != \"function\")\n throw new Error(\"Invalid enabled property\");\n if (t.render && typeof t.render != \"function\")\n throw new Error(\"Invalid render property\");\n if (t.updated && typeof t.updated != \"function\")\n throw new Error(\"Invalid updated property\");\n }\n}\nconst rr = function(e) {\n if (typeof window._nc_filelistheader > \"u\" && (window._nc_filelistheader = [], m.debug(\"FileListHeaders initialized\")), window._nc_filelistheader.find((t) => t.id === e.id)) {\n m.error(`Header ${e.id} already registered`, { header: e });\n return;\n }\n window._nc_filelistheader.push(e);\n}, nr = function() {\n return typeof window._nc_filelistheader > \"u\" && (window._nc_filelistheader = [], m.debug(\"FileListHeaders initialized\")), window._nc_filelistheader;\n};\n/**\n * @copyright Copyright (c) 2022 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 */\nvar N = /* @__PURE__ */ ((e) => (e[e.NONE = 0] = \"NONE\", e[e.CREATE = 4] = \"CREATE\", e[e.READ = 1] = \"READ\", e[e.UPDATE = 2] = \"UPDATE\", e[e.DELETE = 8] = \"DELETE\", e[e.SHARE = 16] = \"SHARE\", e[e.ALL = 31] = \"ALL\", e))(N || {});\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\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 */\nconst j = [\n \"d:getcontentlength\",\n \"d:getcontenttype\",\n \"d:getetag\",\n \"d:getlastmodified\",\n \"d:quota-available-bytes\",\n \"d:resourcetype\",\n \"nc:has-preview\",\n \"nc:is-encrypted\",\n \"nc:mount-type\",\n \"nc:share-attributes\",\n \"oc:comments-unread\",\n \"oc:favorite\",\n \"oc:fileid\",\n \"oc:owner-display-name\",\n \"oc:owner-id\",\n \"oc:permissions\",\n \"oc:share-types\",\n \"oc:size\",\n \"ocs:share-permissions\"\n], Y = {\n d: \"DAV:\",\n nc: \"http://nextcloud.org/ns\",\n oc: \"http://owncloud.org/ns\",\n ocs: \"http://open-collaboration-services.org/ns\"\n}, ir = function(e, t = { nc: \"http://nextcloud.org/ns\" }) {\n typeof window._nc_dav_properties > \"u\" && (window._nc_dav_properties = [...j], window._nc_dav_namespaces = { ...Y });\n const r = { ...window._nc_dav_namespaces, ...t };\n if (window._nc_dav_properties.find((n) => n === e))\n return m.error(`${e} already registered`, { prop: e }), !1;\n if (e.startsWith(\"<\") || e.split(\":\").length !== 2)\n return m.error(`${e} is not valid. See example: 'oc:fileid'`, { prop: e }), !1;\n const s = e.split(\":\")[0];\n return r[s] ? (window._nc_dav_properties.push(e), window._nc_dav_namespaces = r, !0) : (m.error(`${e} namespace unknown`, { prop: e, namespaces: r }), !1);\n}, V = function() {\n return typeof window._nc_dav_properties > \"u\" && (window._nc_dav_properties = [...j]), window._nc_dav_properties.map((e) => `<${e} />`).join(\" \");\n}, L = function() {\n return typeof window._nc_dav_namespaces > \"u\" && (window._nc_dav_namespaces = { ...Y }), Object.keys(window._nc_dav_namespaces).map((e) => `xmlns:${e}=\"${window._nc_dav_namespaces?.[e]}\"`).join(\" \");\n}, sr = function() {\n return `<?xml version=\"1.0\"?>\n\t\t<d:propfind ${L()}>\n\t\t\t<d:prop>\n\t\t\t\t${V()}\n\t\t\t</d:prop>\n\t\t</d:propfind>`;\n}, Ee = function() {\n return `<?xml version=\"1.0\"?>\n\t\t<oc:filter-files ${L()}>\n\t\t\t<d:prop>\n\t\t\t\t${V()}\n\t\t\t</d:prop>\n\t\t\t<oc:filter-rules>\n\t\t\t\t<oc:favorite>1</oc:favorite>\n\t\t\t</oc:filter-rules>\n\t\t</oc:filter-files>`;\n}, or = function(e) {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<d:searchrequest ${L()}\n\txmlns:ns=\"https://github.com/icewind1991/SearchDAV/ns\">\n\t<d:basicsearch>\n\t\t<d:select>\n\t\t\t<d:prop>\n\t\t\t\t${V()}\n\t\t\t</d:prop>\n\t\t</d:select>\n\t\t<d:from>\n\t\t\t<d:scope>\n\t\t\t\t<d:href>/files/${A()?.uid}/</d:href>\n\t\t\t\t<d:depth>infinity</d:depth>\n\t\t\t</d:scope>\n\t\t</d:from>\n\t\t<d:where>\n\t\t\t<d:and>\n\t\t\t\t<d:or>\n\t\t\t\t\t<d:not>\n\t\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t\t<d:getcontenttype/>\n\t\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t\t<d:literal>httpd/unix-directory</d:literal>\n\t\t\t\t\t\t</d:eq>\n\t\t\t\t\t</d:not>\n\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t<oc:size/>\n\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t<d:literal>0</d:literal>\n\t\t\t\t\t</d:eq>\n\t\t\t\t</d:or>\n\t\t\t\t<d:gt>\n\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t\t</d:prop>\n\t\t\t\t\t<d:literal>${e}</d:literal>\n\t\t\t\t</d:gt>\n\t\t\t</d:and>\n\t\t</d:where>\n\t\t<d:orderby>\n\t\t\t<d:order>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t</d:prop>\n\t\t\t\t<d:descending/>\n\t\t\t</d:order>\n\t\t</d:orderby>\n\t\t<d:limit>\n\t\t\t<d:nresults>100</d:nresults>\n\t\t\t<ns:firstresult>0</ns:firstresult>\n\t\t</d:limit>\n\t</d:basicsearch>\n</d:searchrequest>`;\n};\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\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 */\nconst be = function(e = \"\") {\n let t = N.NONE;\n return e && ((e.includes(\"C\") || e.includes(\"K\")) && (t |= N.CREATE), e.includes(\"G\") && (t |= N.READ), (e.includes(\"W\") || e.includes(\"N\") || e.includes(\"V\")) && (t |= N.UPDATE), e.includes(\"D\") && (t |= N.DELETE), e.includes(\"R\") && (t |= N.SHARE)), t;\n};\n/**\n * @copyright Copyright (c) 2022 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 */\nvar R = /* @__PURE__ */ ((e) => (e.Folder = \"folder\", e.File = \"file\", e))(R || {});\n/**\n * @copyright Copyright (c) 2022 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 */\nconst J = function(e, t) {\n return e.match(t) !== null;\n}, X = (e, t) => {\n if (e.id && typeof e.id != \"number\")\n throw new Error(\"Invalid id type of value\");\n if (!e.source)\n throw new Error(\"Missing mandatory source\");\n try {\n new URL(e.source);\n } catch {\n throw new Error(\"Invalid source format, source must be a valid URL\");\n }\n if (!e.source.startsWith(\"http\"))\n throw new Error(\"Invalid source format, only http(s) is supported\");\n if (e.mtime && !(e.mtime instanceof Date))\n throw new Error(\"Invalid mtime type\");\n if (e.crtime && !(e.crtime instanceof Date))\n throw new Error(\"Invalid crtime type\");\n if (!e.mime || typeof e.mime != \"string\" || !e.mime.match(/^[-\\w.]+\\/[-+\\w.]+$/gi))\n throw new Error(\"Missing or invalid mandatory mime\");\n if (\"size\" in e && typeof e.size != \"number\" && e.size !== void 0)\n throw new Error(\"Invalid size type\");\n if (\"permissions\" in e && e.permissions !== void 0 && !(typeof e.permissions == \"number\" && e.permissions >= N.NONE && e.permissions <= N.ALL))\n throw new Error(\"Invalid permissions\");\n if (e.owner && e.owner !== null && typeof e.owner != \"string\")\n throw new Error(\"Invalid owner type\");\n if (e.attributes && typeof e.attributes != \"object\")\n throw new Error(\"Invalid attributes type\");\n if (e.root && typeof e.root != \"string\")\n throw new Error(\"Invalid root type\");\n if (e.root && !e.root.startsWith(\"/\"))\n throw new Error(\"Root must start with a leading slash\");\n if (e.root && !e.source.includes(e.root))\n throw new Error(\"Root must be part of the source\");\n if (e.root && J(e.source, t)) {\n const r = e.source.match(t)[0];\n if (!e.source.includes(le(r, e.root)))\n throw new Error(\"The root must be relative to the service. e.g /files/emma\");\n }\n if (e.status && !Object.values(Q).includes(e.status))\n throw new Error(\"Status must be a valid NodeStatus\");\n};\n/**\n * @copyright Copyright (c) 2022 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 */\nvar Q = /* @__PURE__ */ ((e) => (e.NEW = \"new\", e.FAILED = \"failed\", e.LOADING = \"loading\", e.LOCKED = \"locked\", e))(Q || {});\nclass D {\n _data;\n _attributes;\n _knownDavService = /(remote|public)\\.php\\/(web)?dav/i;\n constructor(t, r) {\n X(t, r || this._knownDavService), this._data = t;\n const s = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n set: (n, i, d) => (this.updateMtime(), Reflect.set(n, i, d)),\n deleteProperty: (n, i) => (this.updateMtime(), Reflect.deleteProperty(n, i))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n };\n this._attributes = new Proxy(t.attributes || {}, s), delete this._data.attributes, r && (this._knownDavService = r);\n }\n /**\n * Get the source url to this object\n */\n get source() {\n return this._data.source.replace(/\\/$/i, \"\");\n }\n /**\n * Get the encoded source url to this object for requests purposes\n */\n get encodedSource() {\n const { origin: t } = new URL(this.source);\n return t + he(this.source.slice(t.length));\n }\n /**\n * Get this object name\n */\n get basename() {\n return fe(this.source);\n }\n /**\n * Get this object's extension\n */\n get extension() {\n return ce(this.source);\n }\n /**\n * Get the directory path leading to this object\n * Will use the relative path to root if available\n */\n get dirname() {\n if (this.root) {\n let r = this.source;\n this.isDavRessource && (r = r.split(this._knownDavService).pop());\n const s = r.indexOf(this.root), n = this.root.replace(/\\/$/, \"\");\n return I(r.slice(s + n.length) || \"/\");\n }\n const t = new URL(this.source);\n return I(t.pathname);\n }\n /**\n * Get the file mime\n */\n get mime() {\n return this._data.mime;\n }\n /**\n * Get the file modification time\n */\n get mtime() {\n return this._data.mtime;\n }\n /**\n * Get the file creation time\n */\n get crtime() {\n return this._data.crtime;\n }\n /**\n * Get the file size\n */\n get size() {\n return this._data.size;\n }\n /**\n * Get the file attribute\n */\n get attributes() {\n return this._attributes;\n }\n /**\n * Get the file permissions\n */\n get permissions() {\n return this.owner === null && !this.isDavRessource ? N.READ : this._data.permissions !== void 0 ? this._data.permissions : N.NONE;\n }\n /**\n * Get the file owner\n */\n get owner() {\n return this.isDavRessource ? this._data.owner : null;\n }\n /**\n * Is this a dav-related ressource ?\n */\n get isDavRessource() {\n return J(this.source, this._knownDavService);\n }\n /**\n * Get the dav root of this object\n */\n get root() {\n return this._data.root ? this._data.root.replace(/^(.+)\\/$/, \"$1\") : this.isDavRessource && I(this.source).split(this._knownDavService).pop() || null;\n }\n /**\n * Get the absolute path of this object relative to the root\n */\n get path() {\n if (this.root) {\n let t = this.source;\n this.isDavRessource && (t = t.split(this._knownDavService).pop());\n const r = t.indexOf(this.root), s = this.root.replace(/\\/$/, \"\");\n return t.slice(r + s.length) || \"/\";\n }\n return (this.dirname + \"/\" + this.basename).replace(/\\/\\//g, \"/\");\n }\n /**\n * Get the node id if defined.\n * Will look for the fileid in attributes if undefined.\n */\n get fileid() {\n return this._data?.id || this.attributes?.fileid;\n }\n /**\n * Get the node status.\n */\n get status() {\n return this._data?.status;\n }\n /**\n * Set the node status.\n */\n set status(t) {\n this._data.status = t;\n }\n /**\n * Move the node to a new destination\n *\n * @param {string} destination the new source.\n * e.g. https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg\n */\n move(t) {\n X({ ...this._data, source: t }, this._knownDavService), this._data.source = t, this.updateMtime();\n }\n /**\n * Rename the node\n * This aliases the move method for easier usage\n *\n * @param basename The new name of the node\n */\n rename(t) {\n if (t.includes(\"/\"))\n throw new Error(\"Invalid basename\");\n this.move(I(this.source) + \"/\" + t);\n }\n /**\n * Update the mtime if exists.\n */\n updateMtime() {\n this._data.mtime && (this._data.mtime = /* @__PURE__ */ new Date());\n }\n}\n/**\n * @copyright Copyright (c) 2022 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 */\nclass ye extends D {\n get type() {\n return R.File;\n }\n}\n/**\n * @copyright Copyright (c) 2022 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 */\nclass _e extends D {\n constructor(t) {\n super({\n ...t,\n mime: \"httpd/unix-directory\"\n });\n }\n get type() {\n return R.Folder;\n }\n get extension() {\n return null;\n }\n get mime() {\n return \"httpd/unix-directory\";\n }\n}\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\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 */\nconst ee = `/files/${A()?.uid}`, te = pe(\"dav\"), ur = function(e = te, t = {}) {\n const r = ge(e, { headers: t });\n function s(i) {\n r.setHeaders({\n ...t,\n // Add this so the server knows it is an request from the browser\n \"X-Requested-With\": \"XMLHttpRequest\",\n // Inject user auth\n requesttoken: i ?? \"\"\n });\n }\n return ue(s), s(de()), we().patch(\"fetch\", (i, d) => {\n const u = d.headers;\n return u?.method && (d.method = u.method, delete u.method), fetch(i, d);\n }), r;\n}, dr = async (e, t = \"/\", r = ee) => (await e.getDirectoryContents(`${r}${t}`, {\n details: !0,\n data: Ee(),\n headers: {\n // see davGetClient for patched webdav client\n method: \"REPORT\"\n },\n includeSelf: !0\n})).data.filter((n) => n.filename !== t).map((n) => ve(n, r)), ve = function(e, t = ee, r = te) {\n const s = e.props, n = be(s?.permissions), i = s?.[\"owner-id\"] || A()?.uid, d = {\n id: s?.fileid || 0,\n source: `${r}${e.filename}`,\n mtime: new Date(Date.parse(e.lastmod)),\n mime: e.mime,\n size: s?.size || Number.parseInt(s.getcontentlength || \"0\"),\n permissions: n,\n owner: i,\n root: t,\n attributes: {\n ...e,\n ...s,\n hasPreview: s?.[\"has-preview\"]\n }\n };\n return delete d.attributes?.props, e.type === \"file\" ? new ye(d) : new _e(d);\n};\n/**\n * @copyright Copyright (c) 2022 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 */\nclass Te {\n _views = [];\n _currentView = null;\n register(t) {\n if (this._views.find((r) => r.id === t.id))\n throw new Error(`View id ${t.id} is already registered`);\n this._views.push(t);\n }\n remove(t) {\n const r = this._views.findIndex((s) => s.id === t);\n r !== -1 && this._views.splice(r, 1);\n }\n get views() {\n return this._views;\n }\n setActive(t) {\n this._currentView = t;\n }\n get active() {\n return this._currentView;\n }\n}\nconst ar = function() {\n return typeof window._nc_navigation > \"u\" && (window._nc_navigation = new Te(), m.debug(\"Navigation service initialized\")), window._nc_navigation;\n};\n/**\n * @copyright Copyright (c) 2022 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 */\nclass Ie {\n _column;\n constructor(t) {\n Ae(t), this._column = t;\n }\n get id() {\n return this._column.id;\n }\n get title() {\n return this._column.title;\n }\n get render() {\n return this._column.render;\n }\n get sort() {\n return this._column.sort;\n }\n get summary() {\n return this._column.summary;\n }\n}\nconst Ae = function(e) {\n if (!e.id || typeof e.id != \"string\")\n throw new Error(\"A column id is required\");\n if (!e.title || typeof e.title != \"string\")\n throw new Error(\"A column title is required\");\n if (!e.render || typeof e.render != \"function\")\n throw new Error(\"A render function is required\");\n if (e.sort && typeof e.sort != \"function\")\n throw new Error(\"Column sortFunction must be a function\");\n if (e.summary && typeof e.summary != \"function\")\n throw new Error(\"Column summary must be a function\");\n return !0;\n};\nvar S = {}, O = {};\n(function(e) {\n const t = \":A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\", r = t + \"\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\", s = \"[\" + t + \"][\" + r + \"]*\", n = new RegExp(\"^\" + s + \"$\"), i = function(u, o) {\n const a = [];\n let l = o.exec(u);\n for (; l; ) {\n const f = [];\n f.startIndex = o.lastIndex - l[0].length;\n const c = l.length;\n for (let g = 0; g < c; g++)\n f.push(l[g]);\n a.push(f), l = o.exec(u);\n }\n return a;\n }, d = function(u) {\n const o = n.exec(u);\n return !(o === null || typeof o > \"u\");\n };\n e.isExist = function(u) {\n return typeof u < \"u\";\n }, e.isEmptyObject = function(u) {\n return Object.keys(u).length === 0;\n }, e.merge = function(u, o, a) {\n if (o) {\n const l = Object.keys(o), f = l.length;\n for (let c = 0; c < f; c++)\n a === \"strict\" ? u[l[c]] = [o[l[c]]] : u[l[c]] = o[l[c]];\n }\n }, e.getValue = function(u) {\n return e.isExist(u) ? u : \"\";\n }, e.isName = d, e.getAllMatches = i, e.nameRegexp = s;\n})(O);\nconst M = O, Oe = {\n allowBooleanAttributes: !1,\n //A tag can have attributes without any value\n unpairedTags: []\n};\nS.validate = function(e, t) {\n t = Object.assign({}, Oe, t);\n const r = [];\n let s = !1, n = !1;\n e[0] === \"\\uFEFF\" && (e = e.substr(1));\n for (let i = 0; i < e.length; i++)\n if (e[i] === \"<\" && e[i + 1] === \"?\") {\n if (i += 2, i = G(e, i), i.err)\n return i;\n } else if (e[i] === \"<\") {\n let d = i;\n if (i++, e[i] === \"!\") {\n i = z(e, i);\n continue;\n } else {\n let u = !1;\n e[i] === \"/\" && (u = !0, i++);\n let o = \"\";\n for (; i < e.length && e[i] !== \">\" && e[i] !== \" \" && e[i] !== \"\t\" && e[i] !== `\n` && e[i] !== \"\\r\"; i++)\n o += e[i];\n if (o = o.trim(), o[o.length - 1] === \"/\" && (o = o.substring(0, o.length - 1), i--), !Re(o)) {\n let f;\n return o.trim().length === 0 ? f = \"Invalid space after '<'.\" : f = \"Tag '\" + o + \"' is an invalid name.\", p(\"InvalidTag\", f, w(e, i));\n }\n const a = xe(e, i);\n if (a === !1)\n return p(\"InvalidAttr\", \"Attributes for '\" + o + \"' have open quote.\", w(e, i));\n let l = a.value;\n if (i = a.index, l[l.length - 1] === \"/\") {\n const f = i - l.length;\n l = l.substring(0, l.length - 1);\n const c = H(l, t);\n if (c === !0)\n s = !0;\n else\n return p(c.err.code, c.err.msg, w(e, f + c.err.line));\n } else if (u)\n if (a.tagClosed) {\n if (l.trim().length > 0)\n return p(\"InvalidTag\", \"Closing tag '\" + o + \"' can't have attributes or invalid starting.\", w(e, d));\n {\n const f = r.pop();\n if (o !== f.tagName) {\n let c = w(e, f.tagStartPos);\n return p(\n \"InvalidTag\",\n \"Expected closing tag '\" + f.tagName + \"' (opened in line \" + c.line + \", col \" + c.col + \") instead of closing tag '\" + o + \"'.\",\n w(e, d)\n );\n }\n r.length == 0 && (n = !0);\n }\n } else\n return p(\"InvalidTag\", \"Closing tag '\" + o + \"' doesn't have proper closing.\", w(e, i));\n else {\n const f = H(l, t);\n if (f !== !0)\n return p(f.err.code, f.err.msg, w(e, i - l.length + f.err.line));\n if (n === !0)\n return p(\"InvalidXml\", \"Multiple possible root nodes found.\", w(e, i));\n t.unpairedTags.indexOf(o) !== -1 || r.push({ tagName: o, tagStartPos: d }), s = !0;\n }\n for (i++; i < e.length; i++)\n if (e[i] === \"<\")\n if (e[i + 1] === \"!\") {\n i++, i = z(e, i);\n continue;\n } else if (e[i + 1] === \"?\") {\n if (i = G(e, ++i), i.err)\n return i;\n } else\n break;\n else if (e[i] === \"&\") {\n const f = Ve(e, i);\n if (f == -1)\n return p(\"InvalidChar\", \"char '&' is not expected.\", w(e, i));\n i = f;\n } else if (n === !0 && !U(e[i]))\n return p(\"InvalidXml\", \"Extra text at the end\", w(e, i));\n e[i] === \"<\" && i--;\n }\n } else {\n if (U(e[i]))\n continue;\n return p(\"InvalidChar\", \"char '\" + e[i] + \"' is not expected.\", w(e, i));\n }\n if (s) {\n if (r.length == 1)\n return p(\"InvalidTag\", \"Unclosed tag '\" + r[0].tagName + \"'.\", w(e, r[0].tagStartPos));\n if (r.length > 0)\n return p(\"InvalidXml\", \"Invalid '\" + JSON.stringify(r.map((i) => i.tagName), null, 4).replace(/\\r?\\n/g, \"\") + \"' found.\", { line: 1, col: 1 });\n } else\n return p(\"InvalidXml\", \"Start tag expected.\", 1);\n return !0;\n};\nfunction U(e) {\n return e === \" \" || e === \"\t\" || e === `\n` || e === \"\\r\";\n}\nfunction G(e, t) {\n const r = t;\n for (; t < e.length; t++)\n if (e[t] == \"?\" || e[t] == \" \") {\n const s = e.substr(r, t - r);\n if (t > 5 && s === \"xml\")\n return p(\"InvalidXml\", \"XML declaration allowed only at the start of the document.\", w(e, t));\n if (e[t] == \"?\" && e[t + 1] == \">\") {\n t++;\n break;\n } else\n continue;\n }\n return t;\n}\nfunction z(e, t) {\n if (e.length > t + 5 && e[t + 1] === \"-\" && e[t + 2] === \"-\") {\n for (t += 3; t < e.length; t++)\n if (e[t] === \"-\" && e[t + 1] === \"-\" && e[t + 2] === \">\") {\n t += 2;\n break;\n }\n } else if (e.length > t + 8 && e[t + 1] === \"D\" && e[t + 2] === \"O\" && e[t + 3] === \"C\" && e[t + 4] === \"T\" && e[t + 5] === \"Y\" && e[t + 6] === \"P\" && e[t + 7] === \"E\") {\n let r = 1;\n for (t += 8; t < e.length; t++)\n if (e[t] === \"<\")\n r++;\n else if (e[t] === \">\" && (r--, r === 0))\n break;\n } else if (e.length > t + 9 && e[t + 1] === \"[\" && e[t + 2] === \"C\" && e[t + 3] === \"D\" && e[t + 4] === \"A\" && e[t + 5] === \"T\" && e[t + 6] === \"A\" && e[t + 7] === \"[\") {\n for (t += 8; t < e.length; t++)\n if (e[t] === \"]\" && e[t + 1] === \"]\" && e[t + 2] === \">\") {\n t += 2;\n break;\n }\n }\n return t;\n}\nconst Ce = '\"', Pe = \"'\";\nfunction xe(e, t) {\n let r = \"\", s = \"\", n = !1;\n for (; t < e.length; t++) {\n if (e[t] === Ce || e[t] === Pe)\n s === \"\" ? s = e[t] : s !== e[t] || (s = \"\");\n else if (e[t] === \">\" && s === \"\") {\n n = !0;\n break;\n }\n r += e[t];\n }\n return s !== \"\" ? !1 : {\n value: r,\n index: t,\n tagClosed: n\n };\n}\nconst $e = new RegExp(`(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*(['\"])(([\\\\s\\\\S])*?)\\\\5)?`, \"g\");\nfunction H(e, t) {\n const r = M.getAllMatches(e, $e), s = {};\n for (let n = 0; n < r.length; n++) {\n if (r[n][1].length === 0)\n return p(\"InvalidAttr\", \"Attribute '\" + r[n][2] + \"' has no space in starting.\", v(r[n]));\n if (r[n][3] !== void 0 && r[n][4] === void 0)\n return p(\"InvalidAttr\", \"Attribute '\" + r[n][2] + \"' is without value.\", v(r[n]));\n if (r[n][3] === void 0 && !t.allowBooleanAttributes)\n return p(\"InvalidAttr\", \"boolean attribute '\" + r[n][2] + \"' is not allowed.\", v(r[n]));\n const i = r[n][2];\n if (!Le(i))\n return p(\"InvalidAttr\", \"Attribute '\" + i + \"' is an invalid name.\", v(r[n]));\n if (!s.hasOwnProperty(i))\n s[i] = 1;\n else\n return p(\"InvalidAttr\", \"Attribute '\" + i + \"' is repeated.\", v(r[n]));\n }\n return !0;\n}\nfunction Fe(e, t) {\n let r = /\\d/;\n for (e[t] === \"x\" && (t++, r = /[\\da-fA-F]/); t < e.length; t++) {\n if (e[t] === \";\")\n return t;\n if (!e[t].match(r))\n break;\n }\n return -1;\n}\nfunction Ve(e, t) {\n if (t++, e[t] === \";\")\n return -1;\n if (e[t] === \"#\")\n return t++, Fe(e, t);\n let r = 0;\n for (; t < e.length; t++, r++)\n if (!(e[t].match(/\\w/) && r < 20)) {\n if (e[t] === \";\")\n break;\n return -1;\n }\n return t;\n}\nfunction p(e, t, r) {\n return {\n err: {\n code: e,\n msg: t,\n line: r.line || r,\n col: r.col\n }\n };\n}\nfunction Le(e) {\n return M.isName(e);\n}\nfunction Re(e) {\n return M.isName(e);\n}\nfunction w(e, t) {\n const r = e.substring(0, t).split(/\\r?\\n/);\n return {\n line: r.length,\n // column number is last line's length + 1, because column numbering starts at 1:\n col: r[r.length - 1].length + 1\n };\n}\nfunction v(e) {\n return e.startIndex + e[1].length;\n}\nvar k = {};\nconst re = {\n preserveOrder: !1,\n attributeNamePrefix: \"@_\",\n attributesGroupName: !1,\n textNodeName: \"#text\",\n ignoreAttributes: !0,\n removeNSPrefix: !1,\n // remove NS from tag name or attribute name if true\n allowBooleanAttributes: !1,\n //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseTagValue: !0,\n parseAttributeValue: !1,\n trimValues: !0,\n //Trim string values of tag and attributes\n cdataPropName: !1,\n numberParseOptions: {\n hex: !0,\n leadingZeros: !0,\n eNotation: !0\n },\n tagValueProcessor: function(e, t) {\n return t;\n },\n attributeValueProcessor: function(e, t) {\n return t;\n },\n stopNodes: [],\n //nested tags will not be parsed even for errors\n alwaysCreateTextNode: !1,\n isArray: () => !1,\n commentPropName: !1,\n unpairedTags: [],\n processEntities: !0,\n htmlEntities: !1,\n ignoreDeclaration: !1,\n ignorePiTags: !1,\n transformTagName: !1,\n transformAttributeName: !1,\n updateTag: function(e, t, r) {\n return e;\n }\n // skipEmptyListItem: false\n}, Se = function(e) {\n return Object.assign({}, re, e);\n};\nk.buildOptions = Se;\nk.defaultOptions = re;\nclass Me {\n constructor(t) {\n this.tagname = t, this.child = [], this[\":@\"] = {};\n }\n add(t, r) {\n t === \"__proto__\" && (t = \"#__proto__\"), this.child.push({ [t]: r });\n }\n addChild(t) {\n t.tagname === \"__proto__\" && (t.tagname = \"#__proto__\"), t[\":@\"] && Object.keys(t[\":@\"]).length > 0 ? this.child.push({ [t.tagname]: t.child, \":@\": t[\":@\"] }) : this.child.push({ [t.tagname]: t.child });\n }\n}\nvar ke = Me;\nconst Be = O;\nfunction qe(e, t) {\n const r = {};\n if (e[t + 3] === \"O\" && e[t + 4] === \"C\" && e[t + 5] === \"T\" && e[t + 6] === \"Y\" && e[t + 7] === \"P\" && e[t + 8] === \"E\") {\n t = t + 9;\n let s = 1, n = !1, i = !1, d = \"\";\n for (; t < e.length; t++)\n if (e[t] === \"<\" && !i) {\n if (n && Ge(e, t))\n t += 7, [entityName, val, t] = Xe(e, t + 1), val.indexOf(\"&\") === -1 && (r[We(entityName)] = {\n regx: RegExp(`&${entityName};`, \"g\"),\n val\n });\n else if (n && ze(e, t))\n t += 8;\n else if (n && He(e, t))\n t += 8;\n else if (n && Ke(e, t))\n t += 9;\n else if (Ue)\n i = !0;\n else\n throw new Error(\"Invalid DOCTYPE\");\n s++, d = \"\";\n } else if (e[t] === \">\") {\n if (i ? e[t - 1] === \"-\" && e[t - 2] === \"-\" && (i = !1, s--) : s--, s === 0)\n break;\n } else\n e[t] === \"[\" ? n = !0 : d += e[t];\n if (s !== 0)\n throw new Error(\"Unclosed DOCTYPE\");\n } else\n throw new Error(\"Invalid Tag instead of DOCTYPE\");\n return { entities: r, i: t };\n}\nfunction Xe(e, t) {\n let r = \"\";\n for (; t < e.length && e[t] !== \"'\" && e[t] !== '\"'; t++)\n r += e[t];\n if (r = r.trim(), r.indexOf(\" \") !== -1)\n throw new Error(\"External entites are not supported\");\n const s = e[t++];\n let n = \"\";\n for (; t < e.length && e[t] !== s; t++)\n n += e[t];\n return [r, n, t];\n}\nfunction Ue(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"-\" && e[t + 3] === \"-\";\n}\nfunction Ge(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"E\" && e[t + 3] === \"N\" && e[t + 4] === \"T\" && e[t + 5] === \"I\" && e[t + 6] === \"T\" && e[t + 7] === \"Y\";\n}\nfunction ze(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"E\" && e[t + 3] === \"L\" && e[t + 4] === \"E\" && e[t + 5] === \"M\" && e[t + 6] === \"E\" && e[t + 7] === \"N\" && e[t + 8] === \"T\";\n}\nfunction He(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"A\" && e[t + 3] === \"T\" && e[t + 4] === \"T\" && e[t + 5] === \"L\" && e[t + 6] === \"I\" && e[t + 7] === \"S\" && e[t + 8] === \"T\";\n}\nfunction Ke(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"N\" && e[t + 3] === \"O\" && e[t + 4] === \"T\" && e[t + 5] === \"A\" && e[t + 6] === \"T\" && e[t + 7] === \"I\" && e[t + 8] === \"O\" && e[t + 9] === \"N\";\n}\nfunction We(e) {\n if (Be.isName(e))\n return e;\n throw new Error(`Invalid entity name ${e}`);\n}\nvar Ze = qe;\nconst je = /^[-+]?0x[a-fA-F0-9]+$/, Ye = /^([\\-\\+])?(0*)(\\.[0-9]+([eE]\\-?[0-9]+)?|[0-9]+(\\.[0-9]+([eE]\\-?[0-9]+)?)?)$/;\n!Number.parseInt && window.parseInt && (Number.parseInt = window.parseInt);\n!Number.parseFloat && window.parseFloat && (Number.parseFloat = window.parseFloat);\nconst Je = {\n hex: !0,\n leadingZeros: !0,\n decimalPoint: \".\",\n eNotation: !0\n //skipLike: /regex/\n};\nfunction Qe(e, t = {}) {\n if (t = Object.assign({}, Je, t), !e || typeof e != \"string\")\n return e;\n let r = e.trim();\n if (t.skipLike !== void 0 && t.skipLike.test(r))\n return e;\n if (t.hex && je.test(r))\n return Number.parseInt(r, 16);\n {\n const s = Ye.exec(r);\n if (s) {\n const n = s[1], i = s[2];\n let d = De(s[3]);\n const u = s[4] || s[6];\n if (!t.leadingZeros && i.length > 0 && n && r[2] !== \".\")\n return e;\n if (!t.leadingZeros && i.length > 0 && !n && r[1] !== \".\")\n return e;\n {\n const o = Number(r), a = \"\" + o;\n return a.search(/[eE]/) !== -1 || u ? t.eNotation ? o : e : r.indexOf(\".\") !== -1 ? a === \"0\" && d === \"\" || a === d || n && a === \"-\" + d ? o : e : i ? d === a || n + d === a ? o : e : r === a || r === n + a ? o : e;\n }\n } else\n return e;\n }\n}\nfunction De(e) {\n return e && e.indexOf(\".\") !== -1 && (e = e.replace(/0+$/, \"\"), e === \".\" ? e = \"0\" : e[0] === \".\" ? e = \"0\" + e : e[e.length - 1] === \".\" && (e = e.substr(0, e.length - 1))), e;\n}\nvar et = Qe;\nconst B = O, T = ke, tt = Ze, rt = et;\n\"<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)\".replace(/NAME/g, B.nameRegexp);\nlet nt = class {\n constructor(t) {\n this.options = t, this.currentNode = null, this.tagsNodeStack = [], this.docTypeEntities = {}, this.lastEntities = {\n apos: { regex: /&(apos|#39|#x27);/g, val: \"'\" },\n gt: { regex: /&(gt|#62|#x3E);/g, val: \">\" },\n lt: { regex: /&(lt|#60|#x3C);/g, val: \"<\" },\n quot: { regex: /&(quot|#34|#x22);/g, val: '\"' }\n }, this.ampEntity = { regex: /&(amp|#38|#x26);/g, val: \"&\" }, this.htmlEntities = {\n space: { regex: /&(nbsp|#160);/g, val: \" \" },\n // \"lt\" : { regex: /&(lt|#60);/g, val: \"<\" },\n // \"gt\" : { regex: /&(gt|#62);/g, val: \">\" },\n // \"amp\" : { regex: /&(amp|#38);/g, val: \"&\" },\n // \"quot\" : { regex: /&(quot|#34);/g, val: \"\\\"\" },\n // \"apos\" : { regex: /&(apos|#39);/g, val: \"'\" },\n cent: { regex: /&(cent|#162);/g, val: \"¢\" },\n pound: { regex: /&(pound|#163);/g, val: \"£\" },\n yen: { regex: /&(yen|#165);/g, val: \"¥\" },\n euro: { regex: /&(euro|#8364);/g, val: \"€\" },\n copyright: { regex: /&(copy|#169);/g, val: \"©\" },\n reg: { regex: /&(reg|#174);/g, val: \"®\" },\n inr: { regex: /&(inr|#8377);/g, val: \"₹\" }\n }, this.addExternalEntities = it, this.parseXml = at, this.parseTextData = st, this.resolveNameSpace = ot, this.buildAttributesMap = dt, this.isItStopNode = ht, this.replaceEntitiesValue = ft, this.readStopNodeData = gt, this.saveTextToParentTag = ct, this.addChild = lt;\n }\n};\nfunction it(e) {\n const t = Object.keys(e);\n for (let r = 0; r < t.length; r++) {\n const s = t[r];\n this.lastEntities[s] = {\n regex: new RegExp(\"&\" + s + \";\", \"g\"),\n val: e[s]\n };\n }\n}\nfunction st(e, t, r, s, n, i, d) {\n if (e !== void 0 && (this.options.trimValues && !s && (e = e.trim()), e.length > 0)) {\n d || (e = this.replaceEntitiesValue(e));\n const u = this.options.tagValueProcessor(t, e, r, n, i);\n return u == null ? e : typeof u != typeof e || u !== e ? u : this.options.trimValues ? $(e, this.options.parseTagValue, this.options.numberParseOptions) : e.trim() === e ? $(e, this.options.parseTagValue, this.options.numberParseOptions) : e;\n }\n}\nfunction ot(e) {\n if (this.options.removeNSPrefix) {\n const t = e.split(\":\"), r = e.charAt(0) === \"/\" ? \"/\" : \"\";\n if (t[0] === \"xmlns\")\n return \"\";\n t.length === 2 && (e = r + t[1]);\n }\n return e;\n}\nconst ut = new RegExp(`([^\\\\s=]+)\\\\s*(=\\\\s*(['\"])([\\\\s\\\\S]*?)\\\\3)?`, \"gm\");\nfunction dt(e, t, r) {\n if (!this.options.ignoreAttributes && typeof e == \"string\") {\n const s = B.getAllMatches(e, ut), n = s.length, i = {};\n for (let d = 0; d < n; d++) {\n const u = this.resolveNameSpace(s[d][1]);\n let o = s[d][4], a = this.options.attributeNamePrefix + u;\n if (u.length)\n if (this.options.transformAttributeName && (a = this.options.transformAttributeName(a)), a === \"__proto__\" && (a = \"#__proto__\"), o !== void 0) {\n this.options.trimValues && (o = o.trim()), o = this.replaceEntitiesValue(o);\n const l = this.options.attributeValueProcessor(u, o, t);\n l == null ? i[a] = o : typeof l != typeof o || l !== o ? i[a] = l : i[a] = $(\n o,\n this.options.parseAttributeValue,\n this.options.numberParseOptions\n );\n } else\n this.options.allowBooleanAttributes && (i[a] = !0);\n }\n if (!Object.keys(i).length)\n return;\n if (this.options.attributesGroupName) {\n const d = {};\n return d[this.options.attributesGroupName] = i, d;\n }\n return i;\n }\n}\nconst at = function(e) {\n e = e.replace(/\\r\\n?/g, `\n`);\n const t = new T(\"!xml\");\n let r = t, s = \"\", n = \"\";\n for (let i = 0; i < e.length; i++)\n if (e[i] === \"<\")\n if (e[i + 1] === \"/\") {\n const u = y(e, \">\", i, \"Closing Tag is not closed.\");\n let o = e.substring(i + 2, u).trim();\n if (this.options.removeNSPrefix) {\n const f = o.indexOf(\":\");\n f !== -1 && (o = o.substr(f + 1));\n }\n this.options.transformTagName && (o = this.options.transformTagName(o)), r && (s = this.saveTextToParentTag(s, r, n));\n const a = n.substring(n.lastIndexOf(\".\") + 1);\n if (o && this.options.unpairedTags.indexOf(o) !== -1)\n throw new Error(`Unpaired tag can not be used as closing tag: </${o}>`);\n let l = 0;\n a && this.options.unpairedTags.indexOf(a) !== -1 ? (l = n.lastIndexOf(\".\", n.lastIndexOf(\".\") - 1), this.tagsNodeStack.pop()) : l = n.lastIndexOf(\".\"), n = n.substring(0, l), r = this.tagsNodeStack.pop(), s = \"\", i = u;\n } else if (e[i + 1] === \"?\") {\n let u = x(e, i, !1, \"?>\");\n if (!u)\n throw new Error(\"Pi Tag is not closed.\");\n if (s = this.saveTextToParentTag(s, r, n), !(this.options.ignoreDeclaration && u.tagName === \"?xml\" || this.options.ignorePiTags)) {\n const o = new T(u.tagName);\n o.add(this.options.textNodeName, \"\"), u.tagName !== u.tagExp && u.attrExpPresent && (o[\":@\"] = this.buildAttributesMap(u.tagExp, n, u.tagName)), this.addChild(r, o, n);\n }\n i = u.closeIndex + 1;\n } else if (e.substr(i + 1, 3) === \"!--\") {\n const u = y(e, \"-->\", i + 4, \"Comment is not closed.\");\n if (this.options.commentPropName) {\n const o = e.substring(i + 4, u - 2);\n s = this.saveTextToParentTag(s, r, n), r.add(this.options.commentPropName, [{ [this.options.textNodeName]: o }]);\n }\n i = u;\n } else if (e.substr(i + 1, 2) === \"!D\") {\n const u = tt(e, i);\n this.docTypeEntities = u.entities, i = u.i;\n } else if (e.substr(i + 1, 2) === \"![\") {\n const u = y(e, \"]]>\", i, \"CDATA is not closed.\") - 2, o = e.substring(i + 9, u);\n if (s = this.saveTextToParentTag(s, r, n), this.options.cdataPropName)\n r.add(this.options.cdataPropName, [{ [this.options.textNodeName]: o }]);\n else {\n let a = this.parseTextData(o, r.tagname, n, !0, !1, !0);\n a == null && (a = \"\"), r.add(this.options.textNodeName, a);\n }\n i = u + 2;\n } else {\n let u = x(e, i, this.options.removeNSPrefix), o = u.tagName;\n const a = u.rawTagName;\n let l = u.tagExp, f = u.attrExpPresent, c = u.closeIndex;\n this.options.transformTagName && (o = this.options.transformTagName(o)), r && s && r.tagname !== \"!xml\" && (s = this.saveTextToParentTag(s, r, n, !1));\n const g = r;\n if (g && this.options.unpairedTags.indexOf(g.tagname) !== -1 && (r = this.tagsNodeStack.pop(), n = n.substring(0, n.lastIndexOf(\".\"))), o !== t.tagname && (n += n ? \".\" + o : o), this.isItStopNode(this.options.stopNodes, n, o)) {\n let h = \"\";\n if (l.length > 0 && l.lastIndexOf(\"/\") === l.length - 1)\n i = u.closeIndex;\n else if (this.options.unpairedTags.indexOf(o) !== -1)\n i = u.closeIndex;\n else {\n const E = this.readStopNodeData(e, a, c + 1);\n if (!E)\n throw new Error(`Unexpected end of ${a}`);\n i = E.i, h = E.tagContent;\n }\n const _ = new T(o);\n o !== l && f && (_[\":@\"] = this.buildAttributesMap(l, n, o)), h && (h = this.parseTextData(h, o, n, !0, f, !0, !0)), n = n.substr(0, n.lastIndexOf(\".\")), _.add(this.options.textNodeName, h), this.addChild(r, _, n);\n } else {\n if (l.length > 0 && l.lastIndexOf(\"/\") === l.length - 1) {\n o[o.length - 1] === \"/\" ? (o = o.substr(0, o.length - 1), n = n.substr(0, n.length - 1), l = o) : l = l.substr(0, l.length - 1), this.options.transformTagName && (o = this.options.transformTagName(o));\n const h = new T(o);\n o !== l && f && (h[\":@\"] = this.buildAttributesMap(l, n, o)), this.addChild(r, h, n), n = n.substr(0, n.lastIndexOf(\".\"));\n } else {\n const h = new T(o);\n this.tagsNodeStack.push(r), o !== l && f && (h[\":@\"] = this.buildAttributesMap(l, n, o)), this.addChild(r, h, n), r = h;\n }\n s = \"\", i = c;\n }\n }\n else\n s += e[i];\n return t.child;\n};\nfunction lt(e, t, r) {\n const s = this.options.updateTag(t.tagname, r, t[\":@\"]);\n s === !1 || (typeof s == \"string\" && (t.tagname = s), e.addChild(t));\n}\nconst ft = function(e) {\n if (this.options.processEntities) {\n for (let t in this.docTypeEntities) {\n const r = this.docTypeEntities[t];\n e = e.replace(r.regx, r.val);\n }\n for (let t in this.lastEntities) {\n const r = this.lastEntities[t];\n e = e.replace(r.regex, r.val);\n }\n if (this.options.htmlEntities)\n for (let t in this.htmlEntities) {\n const r = this.htmlEntities[t];\n e = e.replace(r.regex, r.val);\n }\n e = e.replace(this.ampEntity.regex, this.ampEntity.val);\n }\n return e;\n};\nfunction ct(e, t, r, s) {\n return e && (s === void 0 && (s = Object.keys(t.child).length === 0), e = this.parseTextData(\n e,\n t.tagname,\n r,\n !1,\n t[\":@\"] ? Object.keys(t[\":@\"]).length !== 0 : !1,\n s\n ), e !== void 0 && e !== \"\" && t.add(this.options.textNodeName, e), e = \"\"), e;\n}\nfunction ht(e, t, r) {\n const s = \"*.\" + r;\n for (const n in e) {\n const i = e[n];\n if (s === i || t === i)\n return !0;\n }\n return !1;\n}\nfunction pt(e, t, r = \">\") {\n let s, n = \"\";\n for (let i = t; i < e.length; i++) {\n let d = e[i];\n if (s)\n d === s && (s = \"\");\n else if (d === '\"' || d === \"'\")\n s = d;\n else if (d === r[0])\n if (r[1]) {\n if (e[i + 1] === r[1])\n return {\n data: n,\n index: i\n };\n } else\n return {\n data: n,\n index: i\n };\n else\n d === \"\t\" && (d = \" \");\n n += d;\n }\n}\nfunction y(e, t, r, s) {\n const n = e.indexOf(t, r);\n if (n === -1)\n throw new Error(s);\n return n + t.length - 1;\n}\nfunction x(e, t, r, s = \">\") {\n const n = pt(e, t + 1, s);\n if (!n)\n return;\n let i = n.data;\n const d = n.index, u = i.search(/\\s/);\n let o = i, a = !0;\n u !== -1 && (o = i.substr(0, u).replace(/\\s\\s*$/, \"\"), i = i.substr(u + 1));\n const l = o;\n if (r) {\n const f = o.indexOf(\":\");\n f !== -1 && (o = o.substr(f + 1), a = o !== n.data.substr(f + 1));\n }\n return {\n tagName: o,\n tagExp: i,\n closeIndex: d,\n attrExpPresent: a,\n rawTagName: l\n };\n}\nfunction gt(e, t, r) {\n const s = r;\n let n = 1;\n for (; r < e.length; r++)\n if (e[r] === \"<\")\n if (e[r + 1] === \"/\") {\n const i = y(e, \">\", r, `${t} is not closed`);\n if (e.substring(r + 2, i).trim() === t && (n--, n === 0))\n return {\n tagContent: e.substring(s, r),\n i\n };\n r = i;\n } else if (e[r + 1] === \"?\")\n r = y(e, \"?>\", r + 1, \"StopNode is not closed.\");\n else if (e.substr(r + 1, 3) === \"!--\")\n r = y(e, \"-->\", r + 3, \"StopNode is not closed.\");\n else if (e.substr(r + 1, 2) === \"![\")\n r = y(e, \"]]>\", r, \"StopNode is not closed.\") - 2;\n else {\n const i = x(e, r, \">\");\n i && ((i && i.tagName) === t && i.tagExp[i.tagExp.length - 1] !== \"/\" && n++, r = i.closeIndex);\n }\n}\nfunction $(e, t, r) {\n if (t && typeof e == \"string\") {\n const s = e.trim();\n return s === \"true\" ? !0 : s === \"false\" ? !1 : rt(e, r);\n } else\n return B.isExist(e) ? e : \"\";\n}\nvar wt = nt, ne = {};\nfunction mt(e, t) {\n return ie(e, t);\n}\nfunction ie(e, t, r) {\n let s;\n const n = {};\n for (let i = 0; i < e.length; i++) {\n const d = e[i], u = Nt(d);\n let o = \"\";\n if (r === void 0 ? o = u : o = r + \".\" + u, u === t.textNodeName)\n s === void 0 ? s = d[u] : s += \"\" + d[u];\n else {\n if (u === void 0)\n continue;\n if (d[u]) {\n let a = ie(d[u], t, o);\n const l = bt(a, t);\n d[\":@\"] ? Et(a, d[\":@\"], o, t) : Object.keys(a).length === 1 && a[t.textNodeName] !== void 0 && !t.alwaysCreateTextNode ? a = a[t.textNodeName] : Object.keys(a).length === 0 && (t.alwaysCreateTextNode ? a[t.textNodeName] = \"\" : a = \"\"), n[u] !== void 0 && n.hasOwnProperty(u) ? (Array.isArray(n[u]) || (n[u] = [n[u]]), n[u].push(a)) : t.isArray(u, o, l) ? n[u] = [a] : n[u] = a;\n }\n }\n }\n return typeof s == \"string\" ? s.length > 0 && (n[t.textNodeName] = s) : s !== void 0 && (n[t.textNodeName] = s), n;\n}\nfunction Nt(e) {\n const t = Object.keys(e);\n for (let r = 0; r < t.length; r++) {\n const s = t[r];\n if (s !== \":@\")\n return s;\n }\n}\nfunction Et(e, t, r, s) {\n if (t) {\n const n = Object.keys(t), i = n.length;\n for (let d = 0; d < i; d++) {\n const u = n[d];\n s.isArray(u, r + \".\" + u, !0, !0) ? e[u] = [t[u]] : e[u] = t[u];\n }\n }\n}\nfunction bt(e, t) {\n const { textNodeName: r } = t, s = Object.keys(e).length;\n return !!(s === 0 || s === 1 && (e[r] || typeof e[r] == \"boolean\" || e[r] === 0));\n}\nne.prettify = mt;\nconst { buildOptions: yt } = k, _t = wt, { prettify: vt } = ne, Tt = S;\nlet It = class {\n constructor(t) {\n this.externalEntities = {}, this.options = yt(t);\n }\n /**\n * Parse XML dats to JS object \n * @param {string|Buffer} xmlData \n * @param {boolean|Object} validationOption \n */\n parse(t, r) {\n if (typeof t != \"string\")\n if (t.toString)\n t = t.toString();\n else\n throw new Error(\"XML data is accepted in String or Bytes[] form.\");\n if (r) {\n r === !0 && (r = {});\n const i = Tt.validate(t, r);\n if (i !== !0)\n throw Error(`${i.err.msg}:${i.err.line}:${i.err.col}`);\n }\n const s = new _t(this.options);\n s.addExternalEntities(this.externalEntities);\n const n = s.parseXml(t);\n return this.options.preserveOrder || n === void 0 ? n : vt(n, this.options);\n }\n /**\n * Add Entity which is not by default supported by this library\n * @param {string} key \n * @param {string} value \n */\n addEntity(t, r) {\n if (r.indexOf(\"&\") !== -1)\n throw new Error(\"Entity value can't have '&'\");\n if (t.indexOf(\"&\") !== -1 || t.indexOf(\";\") !== -1)\n throw new Error(\"An entity must be set without '&' and ';'. Eg. use '#xD' for '&#xD;'\");\n if (r === \"&\")\n throw new Error(\"An entity with value '&' is not permitted\");\n this.externalEntities[t] = r;\n }\n};\nvar At = It;\nconst Ot = `\n`;\nfunction Ct(e, t) {\n let r = \"\";\n return t.format && t.indentBy.length > 0 && (r = Ot), se(e, t, \"\", r);\n}\nfunction se(e, t, r, s) {\n let n = \"\", i = !1;\n for (let d = 0; d < e.length; d++) {\n const u = e[d], o = Pt(u);\n if (o === void 0)\n continue;\n let a = \"\";\n if (r.length === 0 ? a = o : a = `${r}.${o}`, o === t.textNodeName) {\n let h = u[o];\n xt(a, t) || (h = t.tagValueProcessor(o, h), h = oe(h, t)), i && (n += s), n += h, i = !1;\n continue;\n } else if (o === t.cdataPropName) {\n i && (n += s), n += `<![CDATA[${u[o][0][t.textNodeName]}]]>`, i = !1;\n continue;\n } else if (o === t.commentPropName) {\n n += s + `<!--${u[o][0][t.textNodeName]}-->`, i = !0;\n continue;\n } else if (o[0] === \"?\") {\n const h = K(u[\":@\"], t), _ = o === \"?xml\" ? \"\" : s;\n let E = u[o][0][t.textNodeName];\n E = E.length !== 0 ? \" \" + E : \"\", n += _ + `<${o}${E}${h}?>`, i = !0;\n continue;\n }\n let l = s;\n l !== \"\" && (l += t.indentBy);\n const f = K(u[\":@\"], t), c = s + `<${o}${f}`, g = se(u[o], t, a, l);\n t.unpairedTags.indexOf(o) !== -1 ? t.suppressUnpairedNode ? n += c + \">\" : n += c + \"/>\" : (!g || g.length === 0) && t.suppressEmptyNode ? n += c + \"/>\" : g && g.endsWith(\">\") ? n += c + `>${g}${s}</${o}>` : (n += c + \">\", g && s !== \"\" && (g.includes(\"/>\") || g.includes(\"</\")) ? n += s + t.indentBy + g + s : n += g, n += `</${o}>`), i = !0;\n }\n return n;\n}\nfunction Pt(e) {\n const t = Object.keys(e);\n for (let r = 0; r < t.length; r++) {\n const s = t[r];\n if (e.hasOwnProperty(s) && s !== \":@\")\n return s;\n }\n}\nfunction K(e, t) {\n let r = \"\";\n if (e && !t.ignoreAttributes)\n for (let s in e) {\n if (!e.hasOwnProperty(s))\n continue;\n let n = t.attributeValueProcessor(s, e[s]);\n n = oe(n, t), n === !0 && t.suppressBooleanAttributes ? r += ` ${s.substr(t.attributeNamePrefix.length)}` : r += ` ${s.substr(t.attributeNamePrefix.length)}=\"${n}\"`;\n }\n return r;\n}\nfunction xt(e, t) {\n e = e.substr(0, e.length - t.textNodeName.length - 1);\n let r = e.substr(e.lastIndexOf(\".\") + 1);\n for (let s in t.stopNodes)\n if (t.stopNodes[s] === e || t.stopNodes[s] === \"*.\" + r)\n return !0;\n return !1;\n}\nfunction oe(e, t) {\n if (e && e.length > 0 && t.processEntities)\n for (let r = 0; r < t.entities.length; r++) {\n const s = t.entities[r];\n e = e.replace(s.regex, s.val);\n }\n return e;\n}\nvar $t = Ct;\nconst Ft = $t, Vt = {\n attributeNamePrefix: \"@_\",\n attributesGroupName: !1,\n textNodeName: \"#text\",\n ignoreAttributes: !0,\n cdataPropName: !1,\n format: !1,\n indentBy: \" \",\n suppressEmptyNode: !1,\n suppressUnpairedNode: !0,\n suppressBooleanAttributes: !0,\n tagValueProcessor: function(e, t) {\n return t;\n },\n attributeValueProcessor: function(e, t) {\n return t;\n },\n preserveOrder: !1,\n commentPropName: !1,\n unpairedTags: [],\n entities: [\n { regex: new RegExp(\"&\", \"g\"), val: \"&amp;\" },\n //it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \"&gt;\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"&lt;\" },\n { regex: new RegExp(\"'\", \"g\"), val: \"&apos;\" },\n { regex: new RegExp('\"', \"g\"), val: \"&quot;\" }\n ],\n processEntities: !0,\n stopNodes: [],\n // transformTagName: false,\n // transformAttributeName: false,\n oneListGroup: !1\n};\nfunction b(e) {\n this.options = Object.assign({}, Vt, e), this.options.ignoreAttributes || this.options.attributesGroupName ? this.isAttribute = function() {\n return !1;\n } : (this.attrPrefixLen = this.options.attributeNamePrefix.length, this.isAttribute = St), this.processTextOrObjNode = Lt, this.options.format ? (this.indentate = Rt, this.tagEndChar = `>\n`, this.newLine = `\n`) : (this.indentate = function() {\n return \"\";\n }, this.tagEndChar = \">\", this.newLine = \"\");\n}\nb.prototype.build = function(e) {\n return this.options.preserveOrder ? Ft(e, this.options) : (Array.isArray(e) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1 && (e = {\n [this.options.arrayNodeName]: e\n }), this.j2x(e, 0).val);\n};\nb.prototype.j2x = function(e, t) {\n let r = \"\", s = \"\";\n for (let n in e)\n if (Object.prototype.hasOwnProperty.call(e, n))\n if (typeof e[n] > \"u\")\n this.isAttribute(n) && (s += \"\");\n else if (e[n] === null)\n this.isAttribute(n) ? s += \"\" : n[0] === \"?\" ? s += this.indentate(t) + \"<\" + n + \"?\" + this.tagEndChar : s += this.indentate(t) + \"<\" + n + \"/\" + this.tagEndChar;\n else if (e[n] instanceof Date)\n s += this.buildTextValNode(e[n], n, \"\", t);\n else if (typeof e[n] != \"object\") {\n const i = this.isAttribute(n);\n if (i)\n r += this.buildAttrPairStr(i, \"\" + e[n]);\n else if (n === this.options.textNodeName) {\n let d = this.options.tagValueProcessor(n, \"\" + e[n]);\n s += this.replaceEntitiesValue(d);\n } else\n s += this.buildTextValNode(e[n], n, \"\", t);\n } else if (Array.isArray(e[n])) {\n const i = e[n].length;\n let d = \"\";\n for (let u = 0; u < i; u++) {\n const o = e[n][u];\n typeof o > \"u\" || (o === null ? n[0] === \"?\" ? s += this.indentate(t) + \"<\" + n + \"?\" + this.tagEndChar : s += this.indentate(t) + \"<\" + n + \"/\" + this.tagEndChar : typeof o == \"object\" ? this.options.oneListGroup ? d += this.j2x(o, t + 1).val : d += this.processTextOrObjNode(o, n, t) : d += this.buildTextValNode(o, n, \"\", t));\n }\n this.options.oneListGroup && (d = this.buildObjectNode(d, n, \"\", t)), s += d;\n } else if (this.options.attributesGroupName && n === this.options.attributesGroupName) {\n const i = Object.keys(e[n]), d = i.length;\n for (let u = 0; u < d; u++)\n r += this.buildAttrPairStr(i[u], \"\" + e[n][i[u]]);\n } else\n s += this.processTextOrObjNode(e[n], n, t);\n return { attrStr: r, val: s };\n};\nb.prototype.buildAttrPairStr = function(e, t) {\n return t = this.options.attributeValueProcessor(e, \"\" + t), t = this.replaceEntitiesValue(t), this.options.suppressBooleanAttributes && t === \"true\" ? \" \" + e : \" \" + e + '=\"' + t + '\"';\n};\nfunction Lt(e, t, r) {\n const s = this.j2x(e, r + 1);\n return e[this.options.textNodeName] !== void 0 && Object.keys(e).length === 1 ? this.buildTextValNode(e[this.options.textNodeName], t, s.attrStr, r) : this.buildObjectNode(s.val, t, s.attrStr, r);\n}\nb.prototype.buildObjectNode = function(e, t, r, s) {\n if (e === \"\")\n return t[0] === \"?\" ? this.indentate(s) + \"<\" + t + r + \"?\" + this.tagEndChar : this.indentate(s) + \"<\" + t + r + this.closeTag(t) + this.tagEndChar;\n {\n let n = \"</\" + t + this.tagEndChar, i = \"\";\n return t[0] === \"?\" && (i = \"?\", n = \"\"), (r || r === \"\") && e.indexOf(\"<\") === -1 ? this.indentate(s) + \"<\" + t + r + i + \">\" + e + n : this.options.commentPropName !== !1 && t === this.options.commentPropName && i.length === 0 ? this.indentate(s) + `<!--${e}-->` + this.newLine : this.indentate(s) + \"<\" + t + r + i + this.tagEndChar + e + this.indentate(s) + n;\n }\n};\nb.prototype.closeTag = function(e) {\n let t = \"\";\n return this.options.unpairedTags.indexOf(e) !== -1 ? this.options.suppressUnpairedNode || (t = \"/\") : this.options.suppressEmptyNode ? t = \"/\" : t = `></${e}`, t;\n};\nb.prototype.buildTextValNode = function(e, t, r, s) {\n if (this.options.cdataPropName !== !1 && t === this.options.cdataPropName)\n return this.indentate(s) + `<![CDATA[${e}]]>` + this.newLine;\n if (this.options.commentPropName !== !1 && t === this.options.commentPropName)\n return this.indentate(s) + `<!--${e}-->` + this.newLine;\n if (t[0] === \"?\")\n return this.indentate(s) + \"<\" + t + r + \"?\" + this.tagEndChar;\n {\n let n = this.options.tagValueProcessor(t, e);\n return n = this.replaceEntitiesValue(n), n === \"\" ? this.indentate(s) + \"<\" + t + r + this.closeTag(t) + this.tagEndChar : this.indentate(s) + \"<\" + t + r + \">\" + n + \"</\" + t + this.tagEndChar;\n }\n};\nb.prototype.replaceEntitiesValue = function(e) {\n if (e && e.length > 0 && this.options.processEntities)\n for (let t = 0; t < this.options.entities.length; t++) {\n const r = this.options.entities[t];\n e = e.replace(r.regex, r.val);\n }\n return e;\n};\nfunction Rt(e) {\n return this.options.indentBy.repeat(e);\n}\nfunction St(e) {\n return e.startsWith(this.options.attributeNamePrefix) && e !== this.options.textNodeName ? e.substr(this.attrPrefixLen) : !1;\n}\nvar Mt = b;\nconst kt = S, Bt = At, qt = Mt;\nvar W = {\n XMLParser: Bt,\n XMLValidator: kt,\n XMLBuilder: qt\n};\nfunction Xt(e) {\n if (typeof e != \"string\")\n throw new TypeError(`Expected a \\`string\\`, got \\`${typeof e}\\``);\n if (e = e.trim(), e.length === 0 || W.XMLValidator.validate(e) !== !0)\n return !1;\n let t;\n const r = new W.XMLParser();\n try {\n t = r.parse(e);\n } catch {\n return !1;\n }\n return !(!t || !(\"svg\" in t));\n}\n/**\n * @copyright Copyright (c) 2022 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 */\nclass cr {\n _view;\n constructor(t) {\n Ut(t), this._view = t;\n }\n get id() {\n return this._view.id;\n }\n get name() {\n return this._view.name;\n }\n get caption() {\n return this._view.caption;\n }\n get emptyTitle() {\n return this._view.emptyTitle;\n }\n get emptyCaption() {\n return this._view.emptyCaption;\n }\n get getContents() {\n return this._view.getContents;\n }\n get icon() {\n return this._view.icon;\n }\n set icon(t) {\n this._view.icon = t;\n }\n get order() {\n return this._view.order;\n }\n set order(t) {\n this._view.order = t;\n }\n get params() {\n return this._view.params;\n }\n set params(t) {\n this._view.params = t;\n }\n get columns() {\n return this._view.columns;\n }\n get emptyView() {\n return this._view.emptyView;\n }\n get parent() {\n return this._view.parent;\n }\n get sticky() {\n return this._view.sticky;\n }\n get expanded() {\n return this._view.expanded;\n }\n set expanded(t) {\n this._view.expanded = t;\n }\n get defaultSortKey() {\n return this._view.defaultSortKey;\n }\n}\nconst Ut = function(e) {\n if (!e.id || typeof e.id != \"string\")\n throw new Error(\"View id is required and must be a string\");\n if (!e.name || typeof e.name != \"string\")\n throw new Error(\"View name is required and must be a string\");\n if (e.columns && e.columns.length > 0 && (!e.caption || typeof e.caption != \"string\"))\n throw new Error(\"View caption is required for top-level views and must be a string\");\n if (!e.getContents || typeof e.getContents != \"function\")\n throw new Error(\"View getContents is required and must be a function\");\n if (!e.icon || typeof e.icon != \"string\" || !Xt(e.icon))\n throw new Error(\"View icon is required and must be a valid svg string\");\n if (!(\"order\" in e) || typeof e.order != \"number\")\n throw new Error(\"View order is required and must be a number\");\n if (e.columns && e.columns.forEach((t) => {\n if (!(t instanceof Ie))\n throw new Error(\"View columns must be an array of Column. Invalid column found\");\n }), e.emptyView && typeof e.emptyView != \"function\")\n throw new Error(\"View emptyView must be a function\");\n if (e.parent && typeof e.parent != \"string\")\n throw new Error(\"View parent must be a string\");\n if (\"sticky\" in e && typeof e.sticky != \"boolean\")\n throw new Error(\"View sticky must be a boolean\");\n if (\"expanded\" in e && typeof e.expanded != \"boolean\")\n throw new Error(\"View expanded must be a boolean\");\n if (e.defaultSortKey && typeof e.defaultSortKey != \"string\")\n throw new Error(\"View defaultSortKey must be a string\");\n return !0;\n};\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\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 */\nconst hr = function(e) {\n return F().registerEntry(e);\n}, pr = function(e) {\n return F().unregisterEntry(e);\n}, gr = function(e) {\n return F().getEntries(e).sort((r, s) => r.order !== void 0 && s.order !== void 0 && r.order !== s.order ? r.order - s.order : r.displayName.localeCompare(s.displayName, void 0, { numeric: !0, sensitivity: \"base\" }));\n};\nexport {\n Ie as Column,\n Z as DefaultType,\n ye as File,\n Qt as FileAction,\n R as FileType,\n _e as Folder,\n tr as Header,\n Te as Navigation,\n D as Node,\n Q as NodeStatus,\n N as Permission,\n cr as View,\n hr as addNewFileMenuEntry,\n ur as davGetClient,\n sr as davGetDefaultPropfind,\n Ee as davGetFavoritesReport,\n or as davGetRecentSearch,\n be as davParsePermissions,\n te as davRemoteURL,\n ve as davResultToNode,\n ee as davRootPath,\n Y as defaultDavNamespaces,\n j as defaultDavProperties,\n Yt as formatFileSize,\n L as getDavNameSpaces,\n V as getDavProperties,\n dr as getFavoriteNodes,\n er as getFileActions,\n nr as getFileListHeaders,\n ar as getNavigation,\n gr as getNewFileMenuEntries,\n Jt as parseFileSize,\n ir as registerDavProperty,\n Dt as registerFileAction,\n rr as registerFileListHeaders,\n pr as removeNewFileMenuEntry\n};\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__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + ({\"3239\":\"settings-users\",\"4529\":\"settings-apps-view\"}[chunkId] || chunkId) + \"-\" + chunkId + \".js?v=\" + {\"1359\":\"d217768bf3f39a7359dd\",\"1439\":\"41c39783c33a6fb28f5c\",\"3239\":\"b380e9fda46ca498c72f\",\"3865\":\"8ecd73fc58224ecd56fe\",\"4529\":\"1b1723a987a17d0d479e\",\"8618\":\"1e8f15db3b14455fef8f\",\"9923\":\"0add07b4169aca95df9a\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (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 = 2689;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2689: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (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, [4208], () => (__webpack_require__(74329)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","sanitize","url","replace","requireAdmin","confirmPassword","get","options","axios","post","data","put","delete","params","localStorage","getBuilder","persist","build","orderGroups","groups","orderBy","sort","a","b","usercount","disabled","name","localeCompare","defaults","id","canAdd","canRemove","state","users","minPasswordLength","usersOffset","usersLimit","disabledUsersOffset","disabledUsersLimit","userCount","showConfig","showStoragePath","getItem","showUserBackend","showLastLogin","showNewUserForm","showLanguages","mutations","appendUsers","usersObj","existingUsers","map","_ref","newUsers","Object","values","filter","_ref2","includes","concat","updateDisabledUsers","_usersObj","setPasswordPolicyMinLength","length","initGroups","_ref3","group","assign","addGroup","_ref4","gid","displayName","find","unshift","e","console","error","renameGroup","_ref5","groupIndex","findIndex","groupSearch","updatedGroup","splice","removeGroup","addUserGroup","_ref6","userid","user","enabled","push","removeUserGroup","_ref7","indexOf","addUserSubAdmin","_ref8","subadmin","removeUserSubAdmin","_ref9","deleteUser","userIndex","this","commit","actionType","addUserData","response","ocs","enableDisableUser","_ref10","updateUserCounts","_ref11","disabledGroup","forEach","userGroup","warn","logger","setUserData","_ref12","key","value","humanValue","parseFileSize","resetUsers","setShowConfig","_ref13","setItem","JSON","stringify","CancelToken","searchRequestCancelSource","getters","getUsers","getGroups","getSubadminGroups","getPasswordPolicyMinLength","getUsersOffset","getUsersLimit","getDisabledUsersOffset","getDisabledUsersLimit","getUserCount","getShowConfig","actions","searchUsers","context","_ref14","offset","limit","search","api","generateOcsUrl","catch","isCancel","getUser","userId","_ref15","cancel","source","trim","encodeURIComponent","cancelToken","token","then","usersCount","keys","getDisabledUsers","_ref16","_ref17","limitParam","getUsersFromList","_ref18","getUsersFromGroup","_ref19","groupid","groupId","getCapabilities","password_policy","minLength","_ref20","_ref21","_ref22","_ref23","_ref24","wipeUserDevices","addUser","_ref25","_ref26","dispatch","password","email","quota","language","manager","_ref27","userStatus","_ref28","allowedEmpty","Promise","reject","Error","sendWelcomeMail","APPS_API_FAILURE","showError","t","message","isHTML","initCategories","categories","updateCount","updateCategories","categoriesPromise","gettingCategoriesPromise","setUpdateCount","addCategory","category","appendCategories","categoriesArray","setAllApps","apps","setError","appId","Array","isArray","_id","app","clearError","enableApp","active","setInstallState","canInstall","disableApp","removable","canUnInstall","uninstallApp","needsDownload","installed","updateApp","version","update","resetApps","reset","startLoading","Vue","loading","stopLoading","generateUrl","appIds","_appId","update_required","showInfo","onClick","window","location","reload","close","setTimeout","forceEnableApp","finally","getAllApps","getCategories","shouldRefetchCategories","arguments","undefined","categoriesPromiseResponse","bundles","loadState","getAppBundles","getUpdateCount","getCategoryById","selectedCategoryId","setServerData","serverData","getServerData","setAppConfig","use","Vuex","API_FAILURE","meta","store","useStore","Store","modules","settings","oc","strict","process","getLoggerBuilder","setApp","detectUser","_defineComponent","__name","setup","__props","__sfc","NcContent","_vm","_c","_self","_setupProxy","attrs","_v","path","components","default","UserManagement","navigation","UserManagementNavigation","props","children","redirect","AppStore","AppStoreNavigation","sidebar","AppStoreSidebar","Router","mode","base","linkActiveClass","routes","VTooltip","defaultHtml","sync","router","__webpack_nonce__","btoa","_getRequestToken","getRequestToken","prototype","n","PiniaVuePlugin","pinia","createPinia","render","h","SettingsApp","el","extend","encodeReserveRE","encodeReserveReplacer","c","charCodeAt","toString","commaRE","encode","str","decode","decodeURIComponent","err","castQueryParamValue","String","parseQuery","query","res","split","param","parts","shift","val","join","stringifyQuery","obj","result","val2","x","trailingSlashRE","createRoute","record","redirectedFrom","clone","route","hash","fullPath","getFullPath","matched","formatMatch","freeze","START","parent","ref","_stringifyQuery","isSameRoute","onlyPath","isObjectEqual","aKeys","bKeys","every","i","aVal","bVal","handleRouteEntered","instances","instance","cbs","enteredCbs","i$1","_isBeingDestroyed","View","functional","type","_","routerView","$createElement","$route","cache","_routerViewCache","depth","inactive","_routerRoot","vnodeData","$vnode","keepAlive","_directInactive","_inactive","$parent","routerViewDepth","cachedData","cachedComponent","component","configProps","fillPropsinData","registerRouteInstance","vm","current","hook","prepatch","vnode","componentInstance","init","propsToPass","config","resolveProps","resolvePath","relative","append","firstChar","charAt","stack","pop","segments","segment","cleanPath","isarray","arr","call","pathToRegexp_1","pathToRegexp","RegExp","match","prefix","delimiter","optional","repeat","partial","asterisk","pattern","attachKeys","regexpToRegexp","flags","arrayToRegexp","tokensToRegExp","parse","stringToRegexp","parse_1","tokensToFunction_1","tokensToFunction","tokensToRegExp_1","PATH_REGEXP","tokens","index","defaultDelimiter","exec","m","escaped","slice","next","capture","modifier","escapeGroup","escapeString","substr","encodeURIComponentPretty","encodeURI","toUpperCase","matches","opts","pretty","TypeError","j","test","re","sensitive","end","endsWithDelimiter","compile","regexpCompileCache","create","fillParams","routeMsg","filler","pathMatch","normalizeLocation","raw","_normalized","params$1","rawPath","parsedPath","hashIndex","queryIndex","parsePath","basePath","extraQuery","_parseQuery","parsedQuery","resolveQuery","_Vue","noop","Link","to","required","tag","custom","Boolean","exact","exactPath","activeClass","exactActiveClass","ariaCurrentValue","event","this$1$1","$router","resolve","href","classes","globalActiveClass","globalExactActiveClass","linkExactActiveClass","activeClassFallback","exactActiveClassFallback","compareTarget","target","queryIncludes","isIncludedRoute","handler","guardEvent","on","click","class","scopedSlot","$scopedSlots","$hasNormal","navigate","isActive","isExactActive","findAnchor","$slots","isStatic","aData","handler$1","event$1","aAttrs","metaKey","altKey","ctrlKey","shiftKey","defaultPrevented","button","currentTarget","getAttribute","preventDefault","child","inBrowser","createRouteMap","oldPathList","oldPathMap","oldNameMap","parentRoute","pathList","pathMap","nameMap","addRouteRecord","l","matchAs","pathToRegexpOptions","normalizedPath","normalizePath","caseSensitive","regex","compileRouteRegex","alias","beforeEnter","childMatchAs","aliases","aliasRoute","createMatcher","currentRoute","_createRoute","paramNames","record$1","matchRoute","originalRedirect","hasOwnProperty","resolveRecordPath","aliasedMatch","aliasedRecord","addRoute","parentOrRoute","getRoutes","addRoutes","len","Time","performance","now","Date","genStateKey","toFixed","_key","getStateKey","setStateKey","positionStore","setupScroll","history","scrollRestoration","protocolAndPath","protocol","host","absolutePath","stateCopy","replaceState","addEventListener","handlePopState","removeEventListener","handleScroll","from","isPop","behavior","scrollBehavior","$nextTick","position","getScrollPosition","shouldScroll","scrollToPosition","saveScrollPosition","pageXOffset","y","pageYOffset","isValidPosition","isNumber","normalizePosition","v","hashStartsWithNumberRE","isObject","selector","document","getElementById","querySelector","docRect","documentElement","getBoundingClientRect","elRect","left","top","getElementPosition","style","scrollTo","ua","supportsPushState","navigator","userAgent","pushState","NavigationFailureType","redirected","aborted","cancelled","duplicated","createNavigationCancelledError","createRouterError","_isRouter","propertiesToLog","isError","isNavigationFailure","errorType","runQueue","queue","fn","cb","step","flatMapComponents","flatten","apply","hasSymbol","Symbol","toStringTag","once","called","args","History","baseEl","normalizeBase","pending","ready","readyCbs","readyErrorCbs","errorCbs","listeners","extractGuards","records","bind","reverse","guards","def","guard","extractGuard","bindGuard","listen","onReady","errorCb","onError","transitionTo","onComplete","onAbort","prev","confirmTransition","updateRoute","ensureURL","afterHooks","abort","lastRouteIndex","lastCurrentIndex","max","Math","updated","activated","deactivated","resolveQueue","extractLeaveGuards","beforeHooks","extractUpdateHooks","hasAsync","cid","resolvedDef","__esModule","resolved","reason","msg","comp","iterator","createNavigationAbortedError","createNavigationRedirectedError","enterGuards","bindEnterGuard","extractEnterGuards","resolveHooks","setupListeners","teardown","cleanupListener","HTML5History","_startLocation","getLocation","__proto__","constructor","expectScroll","supportsScroll","handleRoutingEvent","go","fromRoute","getCurrentLocation","pathname","pathLowerCase","toLowerCase","baseLowerCase","HashHistory","fallback","checkFallback","ensureSlash","getHash","replaceHash","eventType","pushHash","getUrl","AbstractHistory","targetIndex","VueRouter","matcher","prototypeAccessors","configurable","$once","routeOrError","handleInitialScroll","_route","beforeEach","registerHook","beforeResolve","afterEach","back","forward","getMatchedComponents","createHref","normalizedTo","defineProperties","VueRouter$1","list","install","isDef","registerInstance","callVal","$options","_parentVnode","mixin","beforeCreate","_router","util","defineReactive","destroyed","defineProperty","strats","optionMergeStrategies","beforeRouteEnter","beforeRouteLeave","beforeRouteUpdate","created","START_LOCATION","cloneRoute","exports","moduleName","registerModule","namespaced","transition","currentPath","isTimeTraveling","storeUnwatch","watch","afterEachUnHook","unregisterModule","setUid","uid","C","P","Yt","r","s","Number","floor","log","min","d","pow","parseFloat","toLocaleString","Jt","toLocaleLowerCase","replaceAll","round","k","g","p","N","NONE","CREATE","READ","UPDATE","DELETE","SHARE","ALL","Y","nc","V","_nc_dav_properties","L","_nc_dav_namespaces","sr","or","R","Folder","File","J","X","URL","startsWith","mtime","crtime","mime","size","permissions","owner","attributes","root","status","Q","NEW","FAILED","LOADING","LOCKED","D","_data","_attributes","_knownDavService","set","updateMtime","Reflect","deleteProperty","Proxy","encodedSource","origin","basename","extension","dirname","isDavRessource","fileid","move","rename","ye","_e","super","ee","te","ur","headers","setHeaders","requesttoken","patch","u","method","fetch","dr","async","getDirectoryContents","details","includeSelf","filename","ve","be","lastmod","parseInt","getcontentlength","hasPreview","O","isExist","isEmptyObject","merge","o","f","getValue","isName","getAllMatches","startIndex","lastIndex","nameRegexp","preserveOrder","attributeNamePrefix","attributesGroupName","textNodeName","ignoreAttributes","removeNSPrefix","allowBooleanAttributes","parseTagValue","parseAttributeValue","trimValues","cdataPropName","numberParseOptions","hex","leadingZeros","eNotation","tagValueProcessor","attributeValueProcessor","stopNodes","alwaysCreateTextNode","commentPropName","unpairedTags","processEntities","htmlEntities","ignoreDeclaration","ignorePiTags","transformTagName","transformAttributeName","updateTag","buildOptions","defaultOptions","ne","ie","Nt","bt","Et","prettify","yt","vt","se","Pt","xt","oe","K","E","indentBy","suppressUnpairedNode","suppressEmptyNode","endsWith","suppressBooleanAttributes","lastIndexOf","entities","Ft","format","Vt","oneListGroup","isAttribute","attrPrefixLen","St","processTextOrObjNode","Lt","indentate","Rt","tagEndChar","newLine","j2x","buildTextValNode","attrStr","buildObjectNode","arrayNodeName","buildAttrPairStr","replaceEntitiesValue","closeTag","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","module","loaded","__webpack_modules__","chunkIds","priority","notFulfilled","Infinity","fulfilled","getter","definition","enumerable","chunkId","all","reduce","promises","globalThis","Function","prop","done","script","needAttach","scripts","getElementsByTagName","createElement","charset","timeout","setAttribute","src","onScriptComplete","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","head","appendChild","nmd","paths","scriptUrl","importScripts","currentScript","baseURI","self","installedChunks","installedChunkData","promise","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file