|
|
"use strict";(globalThis.webpackChunknextcloud_ui_legacy=globalThis.webpackChunknextcloud_ui_legacy||[]).push([[4529],{846:(t,e,n)=>{n.d(e,{T:()=>u});var a=n(19051),i=n(85168),s=n(81222),o=n(53334),p=n(63814),r=n(10810),l=n(86438),c=n(36620);const d=()=>(0,i.Qg)((0,o.Tl)("settings","An error occurred during the request. Unable to proceed.")),u=(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(t=!1){if(!(this.categories.length>0)||t)try{this.loading.categories=!0;const{data:t}=await a.Ay.get((0,p.Jv)("settings/apps/categories"));for(const e of t)e.icon=l.A[e.id]??"";this.$patch({categories:t})}catch(t){c.A.error(t),d()}finally{this.loading.categories=!1}},async loadApps(t=!1){if(!(this.apps.length>0)||t)try{this.loading.apps=!0;const{data:t}=await a.Ay.get((0,p.Jv)("settings/apps/list"));this.$patch({apps:t.apps})}catch(t){c.A.error(t),d()}finally{this.loading.apps=!1}},getCategoryById(t){return this.categories.find(({id:e})=>e===t)??null},getAppById(t){return this.apps.find(({id:e})=>e===t)??null}}})},2602:(t,e,n)=>{n.d(e,{A:()=>p});var a=n(71354),i=n.n(a),s=n(76314),o=n.n(s)()(i());o.push([t.id,".daemon-selection-list[data-v-a31da1f4]{max-height:350px;overflow-y:scroll;padding:2rem}.daemon-selection-list__empty-content[data-v-a31da1f4]{margin-top:0;text-align:center}","",{version:3,sources:["webpack://./apps/settings/src/components/AppAPI/DaemonSelectionList.vue"],names:[],mappings:"AACA,wCACC,gBAAA,CACA,iBAAA,CACA,YAAA,CAEA,uDACC,YAAA,CACA,iBAAA",sourcesContent:["\n.daemon-selection-list {\n\tmax-height: 350px;\n\toverflow-y: scroll;\n\tpadding: 2rem;\n\n\t&__empty-content {\n\t\tmargin-top: 0;\n\t\ttext-align: center;\n\t}\n}\n"],sourceRoot:""}]);const p=o},6325:(t,e,n)=>{n.d(e,{A:()=>p});var a=n(71354),i=n.n(a),s=n(76314),o=n.n(s)()(i());o.push([t.id,".app-sidebar--with-screenshot[data-v-156b7c7b] .app-sidebar-header__figure{background-size:cover}.app-sidebar__fallback-icon[data-v-156b7c7b]{width:100%;height:100%}.app-sidebar__badges[data-v-156b7c7b]{display:flex;flex-direction:row;gap:12px}.app-sidebar__version[data-v-156b7c7b]{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 p=o},7717:(t,e,n)=>{n.d(e,{A:()=>p});var a=n(71354),i=n.n(a),s=n(76314),o=n.n(s)()(i());o.push([t.id,"\n/* The categories-loading indicator */\n.categories--loading[data-v-6d2cb244] {\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:";AAkJA,qCAAA;AACA;CACA,OAAA;CACA,aAAA;CACA,mBAAA;CACA,uBAAA;AACA",sourcesContent:['\x3c!--\n - SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n--\x3e\n<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\n\t\t\t\tv-if="appstoreEnabled"\n\t\t\t\tid="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\n\t\t\t\tid="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\n\t\t\t\tid="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\n\t\t\t\tid="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\n\t\t\t\tv-if="store.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>{{ store.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\n\t\t\t\tid="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\n\t\t\t\t\tv-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\n\t\t\t\t\tid="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\n\t\t\t\t\tv-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\n\t\t\t\tid="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 NcAppNavigation from \'@nextcloud/vue/components/NcAppNavigation\'\nimport NcAppNavigationItem from \'@nextcloud/vue/components/NcAppNavigationItem\'\nimport NcAppNavigationSpacer from \'@nextcloud/vue/components/NcAppNavigationSpacer\'\nimport NcCounterBubble from \'@nextcloud/vue/components/NcCounterBubble\'\nimport NcIconSvgWrapper from \'@nextcloud/vue/components/NcIconSvgWrapper\'\nimport NcLoadingIcon from \'@nextcloud/vue/components/NcLoadingIcon\'\nimport { APPS_SECTION_ENUM } from \'../constants/AppsConstants.js\'\nimport APPSTORE_CATEGORY_ICONS from \'../constants/AppstoreCategoryIcons.ts\'\nimport { useAppsStore } from \'../store/apps-store.ts\'\n\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 p=o},9128:(e,n,a)=>{a.r(n),a.d(n,{default:()=>xt});var i=a(85471),s=a(53334),o=a(24387),p=a(59839),r=a(6695),l=a(9165);const c=(0,i.pM)({__name:"AppDaemonBadge",props:{daemon:null},setup:t=>({__sfc:!0,mdiFileChart:l.pTY,NcIconSvgWrapper:r.A})});var d=a(85072),u=a.n(d),A=a(97825),g=a.n(A),m=a(77659),h=a.n(m),v=a(55056),C=a.n(v),f=a(10540),b=a.n(f),y=a(41113),_=a.n(y),x=a(20720),w={};w.styleTagTransform=_(),w.setAttributes=C(),w.insert=h().bind(null,"head"),w.domAPI=g(),w.insertStyleElement=b(),u()(x.A,w),x.A&&x.A.locals&&x.A.locals;var S=a(14486);const k=(0,S.A)(c,function(){var t=this,e=t._self._c,n=t._self._setupProxy;return t.daemon?e("span",{staticClass:"app-daemon-badge",attrs:{title:t.daemon.name}},[e(n.NcIconSvgWrapper,{attrs:{path:n.mdiFileChart,size:20,inline:""}}),t._v("\n\t"+t._s(t.daemon.display_name)+"\n")],1):t._e()},[],!1,null,"d2263fb4",null).exports;var N=a(96305),D=a(69697),I=a(60258);const T=(0,i.pM)({__name:"AppDeployDaemonTab",props:{app:null},setup(t){const e=t;return{__sfc:!0,props:e,gpuSupport:(0,i.KR)("cpu"!==e.app?.daemon?.deploy_config?.computeDevice?.id||!1),mdiFileChart:l.pTY,NcAppSidebarTab:I.A,NcIconSvgWrapper:r.A}}});var E=a(9754),B={};B.styleTagTransform=_(),B.setAttributes=C(),B.insert=h().bind(null,"head"),B.domAPI=g(),B.insertStyleElement=b(),u()(E.A,B),E.A&&E.A.locals&&E.A.locals;const O=(0,S.A)(T,function(){var t=this,e=t._self._c,n=t._self._setupProxy;return t.app?.daemon?e(n.NcAppSidebarTab,{attrs:{id:"daemon",name:t.t("settings","Daemon"),order:3},scopedSlots:t._u([{key:"icon",fn:function(){return[e(n.NcIconSvgWrapper,{attrs:{path:n.mdiFileChart,size:24}})]},proxy:!0}],null,!1,1746493066)},[t._v(" "),e("div",{staticClass:"daemon"},[e("h4",[t._v(t._s(t.t("settings","Deploy Daemon")))]),t._v(" "),e("p",[e("b",[t._v(t._s(t.t("settings","Type")))]),t._v(": "+t._s(t.app?.daemon.accepts_deploy_id))]),t._v(" "),e("p",[e("b",[t._v(t._s(t.t("settings","Name")))]),t._v(": "+t._s(t.app?.daemon.name))]),t._v(" "),e("p",[e("b",[t._v(t._s(t.t("settings","Display Name")))]),t._v(": "+t._s(t.app?.daemon.display_name))]),t._v(" "),e("p",[e("b",[t._v(t._s(t.t("settings","GPUs support")))]),t._v(": "+t._s(n.gpuSupport))]),t._v(" "),e("p",[e("b",[t._v(t._s(t.t("settings","Compute device")))]),t._v(": "+t._s(t.app?.daemon?.deploy_config?.computeDevice?.label))])])]):t._e()},[],!1,null,"28419269",null).exports;var P=a(99418),$=a(60023);const M={name:"Markdown",props:{text:{type:String,default:""},minHeading:{type:Number,default:1}},computed:{renderMarkdown(){const t=new $.xI.Renderer;return t.link=function({href:t,title:e,text:n}){let a;try{a=decodeURIComponent(unescape(t)).replace(/[^\w:]/g,"").toLowerCase()}catch{return""}if(0!==a.indexOf("http:")&&0!==a.indexOf("https:"))return"";let i='<a href="'+t+'" rel="noreferrer noopener"';return e&&(i+=' title="'+e+'"'),i+=">"+n+"</a>",i},t.heading=({text:t,depth:e})=>`<h${e=Math.min(6,e+(this.minHeading-1))}>${t}</h${e}>`,t.image=({title:t,text:e})=>e||t,t.blockquote=({text:t})=>`<blockquote>${t}</blockquote>`,P.A.sanitize((0,$.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 L=a(96624),R={};R.styleTagTransform=_(),R.setAttributes=C(),R.insert=h().bind(null,"head"),R.domAPI=g(),R.insertStyleElement=b(),u()(L.A,R),L.A&&L.A.locals&&L.A.locals;const W=(0,S.A)(M,function(){var t=this;return(0,t._self._c)("div",{staticClass:"settings-markdown",domProps:{innerHTML:t._s(t.renderMarkdown)}})},[],!1,null,"62ec0d6b",null).exports,U=(0,i.pM)({__name:"AppDescriptionTab",props:{app:null},setup:t=>({__sfc:!0,mdiTextShort:l.azb,t:s.Tl,NcAppSidebarTab:I.A,NcIconSvgWrapper:r.A,Markdown:W})});var G=a(74142),F={};F.styleTagTransform=_(),F.setAttributes=C(),F.insert=h().bind(null,"head"),F.domAPI=g(),F.insertStyleElement=b(),u()(G.A,F),G.A&&G.A.locals&&G.A.locals;const z=(0,S.A)(U,function(){var t=this,e=t._self._c,n=t._self._setupProxy;return e(n.NcAppSidebarTab,{attrs:{id:"desc",name:n.t("settings","Description"),order:0},scopedSlots:t._u([{key:"icon",fn:function(){return[e(n.NcIconSvgWrapper,{attrs:{path:n.mdiTextShort}})]},proxy:!0}])},[t._v(" "),e("div",{staticClass:"app-description"},[e(n.Markdown,{attrs:{text:t.app.description,"min-heading":4}})],1)])},[],!1,null,"1d5b4408",null).exports;var V=a(61338),q=a(74095),j=a(32073),H=a(4604),Y=a(67607),Q=a(81671),K=a(19051),J=a(81222),X=a(63814),Z=a(94219),tt=a(31133),et=a(82182),nt=a(23453),at=a(62938),it=a(846);const st={name:"AppDeployOptionsModal",components:{NcDialog:Z.A,NcTextField:et.A,NcButton:q.A,NcNoteCard:tt.A,NcCheckboxRadioSwitch:j.A,NcIconSvgWrapper:r.A},mixins:[nt.A],props:{app:{type:Object,required:!0},show:{type:Boolean,required:!0}},setup(t){const e=(0,it.T)(),n=(0,at.a)(),a=(0,i.EW)(()=>1===t.app?.releases?.length&&t.app?.releases[0]?.environmentVariables||[]),s=(0,i.KR)({environment_variables:a.value.reduce((t,e)=>(t[e.envName]=e.default||"",t),{}),mounts:[]});return{environmentVariables:a,deployOptions:s,store:e,appApiStore:n,mdiPlus:l.biz,mdiCheck:l.Tfj,mdiClose:l.hyP,mdiDeleteOutline:l.Chp}},data:()=>({addingMount:!1,newMountPoint:{hostPath:"",containerPath:"",readonly:!1},addingPortBinding:!1,configuredDeployOptions:null,deployOptionsDocsUrl:(0,J.C)("settings","deployOptionsDocsUrl",null)}),watch:{show(t){t?this.fetchExAppDeployOptions():this.configuredDeployOptions=null}},methods:{startAddingMount(){this.addingMount=!0,this.$nextTick(()=>{this.$refs.newMountHostPath.focus()})},addMountPoint(){this.deployOptions.mounts.push(this.newMountPoint),this.newMountPoint={hostPath:"",containerPath:"",readonly:!1},this.addingMount=!1},cancelAddMountPoint(){this.newMountPoint={hostPath:"",containerPath:"",readonly:!1},this.addingMount=!1},removeMount(t){this.deployOptions.mounts=this.deployOptions.mounts.filter(e=>e!==t)},async fetchExAppDeployOptions(){return K.Ay.get((0,X.Jv)(`/apps/app_api/apps/deploy-options/${this.app.id}`)).then(t=>{this.configuredDeployOptions=t.data}).catch(()=>{this.configuredDeployOptions=null})},async submitDeployOptions(){await this.appApiStore.fetchDockerDaemons(),1===this.appApiStore.dockerDaemons.length&&this.app.needsDownload?this.enable(this.app.id,this.appApiStore.dockerDaemons[0],this.deployOptions):this.app.needsDownload?(0,V.Ic)("showDaemonSelectionModal",this.deployOptions):this.enable(this.app.id,this.app.daemon,this.deployOptions),this.$emit("update:show",!1)}}};var ot=a(65405),pt={};pt.styleTagTransform=_(),pt.setAttributes=C(),pt.insert=h().bind(null,"head"),pt.domAPI=g(),pt.insertStyleElement=b(),u()(ot.A,pt),ot.A&&ot.A.locals&&ot.A.locals;const rt=(0,S.A)(st,function(){var t=this,e=t._self._c;return e("NcDialog",{attrs:{open:t.show,size:"normal",name:t.t("settings","Advanced deploy options")},on:{"update:open":function(e){return t.$emit("update:show",e)}},scopedSlots:t._u([t.app.active||!t.app.canInstall&&!t.app.isCompatible||null!==t.configuredDeployOptions?null:{key:"actions",fn:function(){return[e("NcButton",{attrs:{title:t.enableButtonTooltip,"aria-label":t.enableButtonTooltip,variant:"primary",disabled:!t.app.canInstall||t.installing||t.isLoading||!t.defaultDeployDaemonAccessible||t.isInitializing||t.isDeploying},on:{click:function(e){return e.stopPropagation(),t.submitDeployOptions.apply(null,arguments)}}},[t._v("\n\t\t\t"+t._s(t.enableButtonText)+"\n\t\t")])]},proxy:!0}],null,!0)},[e("div",{staticClass:"modal__content"},[e("p",{staticClass:"deploy-option__hint"},[t._v("\n\t\t\t"+t._s(null===t.configuredDeployOptions?t.t("settings","Edit ExApp deploy options before installation"):t.t("settings","Configured ExApp deploy options. Can be set only during installation"))+".\n\t\t\t"),t.deployOptionsDocsUrl?e("a",{attrs:{href:t.deployOptionsDocsUrl}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Learn more"))+"\n\t\t\t")]):t._e()]),t._v(" "),t.environmentVariables.length>0||null!==t.configuredDeployOptions&&t.configuredDeployOptions.environment_variables.length>0?e("h3",[t._v("\n\t\t\t"+t._s(t.t("settings","Environment variables"))+"\n\t\t")]):t._e(),t._v(" "),null===t.configuredDeployOptions?t._l(t.environmentVariables,function(n){return e("div",{key:n.envName,staticClass:"deploy-option"},[e("NcTextField",{attrs:{label:n.displayName,value:t.deployOptions.environment_variables[n.envName]},on:{"update:value":function(e){return t.$set(t.deployOptions.environment_variables,n.envName,e)}}}),t._v(" "),e("p",{staticClass:"deploy-option__hint"},[t._v("\n\t\t\t\t\t"+t._s(n.description)+"\n\t\t\t\t")])],1)}):Object.keys(t.configuredDeployOptions).length>0?e("fieldset",{staticClass:"envs"},[e("legend",{staticClass:"deploy-option__hint"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","ExApp container environment variables"))+"\n\t\t\t")]),t._v(" "),t._l(t.configuredDeployOptions.environment_variables,function(t,n){return e("NcTextField",{key:n,attrs:{label:t.displayName??n,"helper-text":t.description,value:t.value,readonly:""}})})],2):[e("p",{staticClass:"deploy-option__hint"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","No environment variables defined"))+"\n\t\t\t")])],t._v(" "),e("h3",[t._v(t._s(t.t("settings","Mounts")))]),t._v(" "),null===t.configuredDeployOptions?[e("p",{staticClass:"deploy-option__hint"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Define host folder mounts to bind to the ExApp container"))+"\n\t\t\t")]),t._v(" "),e("NcNoteCard",{attrs:{type:"info",text:t.t("settings","Must exist on the Deploy daemon host prior to installing the ExApp")}}),t._v(" "),t._l(t.deployOptions.mounts,function(n){return e("div",{key:n.hostPath,staticClass:"deploy-option",staticStyle:{display:"flex","align-items":"center","justify-content":"space-between","flex-direction":"row"}},[e("NcTextField",{attrs:{label:t.t("settings","Host path"),value:n.hostPath},on:{"update:value":function(e){return t.$set(n,"hostPath",e)}}}),t._v(" "),e("NcTextField",{attrs:{label:t.t("settings","Container path"),value:n.containerPath},on:{"update:value":function(e){return t.$set(n,"containerPath",e)}}}),t._v(" "),e("NcCheckboxRadioSwitch",{attrs:{checked:n.readonly},on:{"update:checked":function(e){return t.$set(n,"readonly",e)}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Read-only"))+"\n\t\t\t\t")]),t._v(" "),e("NcButton",{staticStyle:{"margin-top":"6px"},attrs:{"aria-label":t.t("settings","Remove mount")},on:{click:function(e){return t.removeMount(n)}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("NcIconSvgWrapper",{attrs:{path:t.mdiDeleteOutline}})]},proxy:!0}],null,!0)})],1)}),t._v(" "),t.addingMount?e("div",{staticClass:"deploy-option"},[e("h4",[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","New mount"))+"\n\t\t\t\t")]),t._v(" "),e("div",{staticStyle:{display:"flex","align-items":"center","justify-content":"space-between","flex-direction":"row"}},[e("NcTextField",{ref:"newMountHostPath",attrs:{label:t.t("settings","Host path"),"aria-label":t.t("settings","Enter path to host folder"),value:t.newMountPoint.hostPath},on:{"update:value":function(e){return t.$set(t.newMountPoint,"hostPath",e)}}}),t._v(" "),e("NcTextField",{attrs:{label:t.t("settings","Container path"),"aria-label":t.t("settings","Enter path to container folder"),value:t.newMountPoint.containerPath},on:{"update:value":function(e){return t.$set(t.newMountPoint,"containerPath",e)}}}),t._v(" "),e("NcCheckboxRadioSwitch",{attrs:{checked:t.newMountPoint.readonly,"aria-label":t.t("settings","Toggle read-only mode")},on:{"update:checked":function(e){return t.$set(t.newMountPoint,"readonly",e)}}},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("settings","Read-only"))+"\n\t\t\t\t\t")])],1),t._v(" "),e("div",{staticStyle:{display:"flex","align-items":"center","margin-top":"4px"}},[e("NcButton",{attrs:{"aria-label":t.t("settings","Confirm adding new mount")},on:{click:t.addMountPoint},scopedSlots:t._u([{key:"icon",fn:function(){return[e("NcIconSvgWrapper",{attrs:{path:t.mdiCheck}})]},proxy:!0}],null,!1,1018299955)},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("settings","Confirm"))+"\n\t\t\t\t\t")]),t._v(" "),e("NcButton",{staticStyle:{"margin-left":"4px"},attrs:{"aria-label":t.t("settings","Cancel adding mount")},on:{click:t.cancelAddMountPoint},scopedSlots:t._u([{key:"icon",fn:function(){return[e("NcIconSvgWrapper",{attrs:{path:t.mdiClose}})]},proxy:!0}],null,!1,2764082467)},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("settings","Cancel"))+"\n\t\t\t\t\t")])],1)]):t._e(),t._v(" "),t.addingMount?t._e():e("NcButton",{staticStyle:{"margin-top":"5px"},attrs:{"aria-label":t.t("settings","Add mount")},on:{click:t.startAddingMount},scopedSlots:t._u([{key:"icon",fn:function(){return[e("NcIconSvgWrapper",{attrs:{path:t.mdiPlus}})]},proxy:!0}],null,!1,103601839)},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Add mount"))+"\n\t\t\t")])]:t.configuredDeployOptions.mounts.length>0?[e("p",{staticClass:"deploy-option__hint"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","ExApp container mounts"))+"\n\t\t\t")]),t._v(" "),t._l(t.configuredDeployOptions.mounts,function(n){return e("div",{key:n.hostPath,staticClass:"deploy-option",staticStyle:{display:"flex","align-items":"center","justify-content":"space-between","flex-direction":"row"}},[e("NcTextField",{attrs:{label:t.t("settings","Host path"),value:n.hostPath,readonly:""},on:{"update:value":function(e){return t.$set(n,"hostPath",e)}}}),t._v(" "),e("NcTextField",{attrs:{label:t.t("settings","Container path"),value:n.containerPath,readonly:""},on:{"update:value":function(e){return t.$set(n,"containerPath",e)}}}),t._v(" "),e("NcCheckboxRadioSwitch",{attrs:{checked:n.readonly,disabled:""},on:{"update:checked":function(e){return t.$set(n,"readonly",e)}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Read-only"))+"\n\t\t\t\t")])],1)})]:e("p",{staticClass:"deploy-option__hint"},[t._v("\n\t\t\t"+t._s(t.t("settings","No mounts defined"))+"\n\t\t")])],2)])},[],!1,null,"0ec0c17d",null).exports,lt={name:"AppDetailsTab",components:{NcAppSidebarTab:I.A,NcButton:q.A,NcDateTime:H.A,NcIconSvgWrapper:r.A,NcSelect:Y.default,NcCheckboxRadioSwitch:j.A,AppDeployOptionsModal:rt,DaemonSelectionDialog:Q.A},mixins:[nt.A],props:{app:{type:Object,required:!0}},setup:()=>({store:(0,it.T)(),appApiStore:(0,at.a)(),productName:window.OC.theme.productName,mdiBugOutline:l.Le7,mdiFeatureSearchOutline:l.Jtd,mdiStar:l.ZL5,mdiTextBoxOutline:l.fXo,mdiTooltipQuestionOutline:l.knh,mdiToyBrickPlusOutline:l.eqc}),data:()=>({groupCheckedAppsData:!1,removeData:!1,showDeployOptionsModal:!1,showSelectDaemonModal:!1,deployOptions:null}),computed:{lastModified(){return(this.app.appstoreData?.releases??[]).map(({lastModified:t})=>Date.parse(t)).sort().at(0)??null},appAuthors(){if(!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/${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=>this.store.getCategoryById(t)?.displayName??t).join(", ")},rateAppUrl(){return`${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))}},watch:{"app.id":function(){this.removeData=!1}},beforeUnmount(){this.deployOptions=null,(0,V.al)("showDaemonSelectionModal")},mounted(){this.app.groups.length>0&&(this.groupCheckedAppsData=!0),(0,V.B1)("showDaemonSelectionModal",t=>{this.showSelectionModal(t)})},methods:{toggleRemoveData(){this.removeData=!this.removeData},showSelectionModal(t=null){this.deployOptions=t,this.showSelectDaemonModal=!0},async enableButtonAction(){this.app?.app_api?(await this.appApiStore.fetchDockerDaemons(),1===this.appApiStore.dockerDaemons.length&&this.app.needsDownload?this.enable(this.app.id,this.appApiStore.dockerDaemons[0]):this.app.needsDownload?this.showSelectionModal():this.enable(this.app.id,this.app.daemon)):this.enable(this.app.id)}}};var ct=a(61376),dt={};dt.styleTagTransform=_(),dt.setAttributes=C(),dt.insert=h().bind(null,"head"),dt.domAPI=g(),dt.insertStyleElement=b(),u()(ct.A,dt),ct.A&&ct.A.locals&&ct.A.locals;const ut=(0,S.A)(lt,function(){var t=this,e=t._self._c;return e("NcAppSidebarTab",{attrs:{id:"details",name:t.t("settings","Details"),order:1},scopedSlots:t._u([{key:"icon",fn:function(){return[e("NcIconSvgWrapper",{attrs:{path:t.mdiTextBoxOutline}})]},proxy:!0}])},[t._v(" "),e("div",{staticClass:"app-details"},[e("div",{staticClass:"app-details__actions"},[t.app.active&&t.canLimitToGroups(t.app)?e("div",{staticClass:"app-details__actions-groups"},[e("input",{directives:[{name:"model",rawName:"v-model",value:t.groupCheckedAppsData,expression:"groupCheckedAppsData"}],staticClass:"groups-enable__checkbox checkbox",attrs:{id:`groups_enable_${t.app.id}`,type:"checkbox"},domProps:{value:t.app.id,checked:Array.isArray(t.groupCheckedAppsData)?t._i(t.groupCheckedAppsData,t.app.id)>-1:t.groupCheckedAppsData},on:{change:[function(e){var n=t.groupCheckedAppsData,a=e.target,i=!!a.checked;if(Array.isArray(n)){var s=t.app.id,o=t._i(n,s);a.checked?o<0&&(t.groupCheckedAppsData=n.concat([s])):o>-1&&(t.groupCheckedAppsData=n.slice(0,o).concat(n.slice(o+1)))}else t.groupCheckedAppsData=i},t.setGroupLimit]}}),t._v(" "),e("label",{attrs:{for:`groups_enable_${t.app.id}`}},[t._v(t._s(t.t("settings","Limit to groups")))]),t._v(" "),e("input",{staticClass:"group_select",attrs:{type:"hidden",title:t.t("settings","All"),value:""}}),t._v(" "),e("br"),t._v(" "),e("label",{attrs:{for:"limitToGroups"}},[e("span",[t._v(t._s(t.t("settings","Limit app usage to groups")))])]),t._v(" "),t.isLimitedToGroups(t.app)?e("NcSelect",{attrs:{"input-id":"limitToGroups",options:t.groups,value:t.appGroups,limit:5,label:"name",multiple:!0,"keep-open":""},on:{"option:selected":t.addGroupLimitation,"option:deselected":t.removeGroupLimitation,search:t.asyncFindGroup}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])]):t._e()],1):t._e(),t._v(" "),e("div",{staticClass:"app-details__actions-manage"},[t.app.update?e("input",{staticClass:"update primary",attrs:{type:"button",value:t.t("settings","Update to {version}",{version:t.app.update}),disabled:t.installing||t.isLoading||t.isManualInstall},on:{click:function(e){return t.update(t.app.id)}}}):t._e(),t._v(" "),t.app.canUnInstall?e("input",{staticClass:"uninstall",attrs:{type:"button",value:t.t("settings","Remove"),disabled:t.installing||t.isLoading},on:{click:function(e){return t.remove(t.app.id,t.removeData)}}}):t._e(),t._v(" "),t.app.active?e("input",{staticClass:"enable",attrs:{type:"button",value:t.disableButtonText,disabled:t.installing||t.isLoading||t.isInitializing||t.isDeploying},on:{click:function(e){return t.disable(t.app.id)}}}):t._e(),t._v(" "),t.app.active||!t.app.canInstall&&!t.app.isCompatible?t.app.active||t.app.canInstall?t._e():e("input",{staticClass:"enable force",attrs:{title:t.forceEnableButtonTooltip,"aria-label":t.forceEnableButtonTooltip,type:"button",value:t.forceEnableButtonText,disabled:t.installing||t.isLoading},on:{click:function(e){return t.forceEnable(t.app.id)}}}):e("input",{staticClass:"enable primary",attrs:{title:t.enableButtonTooltip,"aria-label":t.enableButtonTooltip,type:"button",value:t.enableButtonText,disabled:!t.app.canInstall||t.installing||t.isLoading||!t.defaultDeployDaemonAccessible||t.isInitializing||t.isDeploying},on:{click:t.enableButtonAction}}),t._v(" "),t.app?.app_api&&(t.app.canInstall||t.app.isCompatible)?e("NcButton",{attrs:{"aria-label":t.t("settings","Advanced deploy options"),variant:"secondary"},on:{click:()=>t.showDeployOptionsModal=!0},scopedSlots:t._u([{key:"icon",fn:function(){return[e("NcIconSvgWrapper",{attrs:{path:t.mdiToyBrickPlusOutline}})]},proxy:!0}],null,!1,973660380)},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Deploy options"))+"\n\t\t\t\t")]):t._e()],1),t._v(" "),t.defaultDeployDaemonAccessible?t._e():e("p",{staticClass:"warning"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Default Deploy daemon is not accessible"))+"\n\t\t\t")]),t._v(" "),t.app.canUnInstall?e("NcCheckboxRadioSwitch",{attrs:{checked:t.removeData,disabled:t.installing||t.isLoading||!t.defaultDeployDaemonAccessible},on:{"update:checked":t.toggleRemoveData}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Delete data on remove"))+"\n\t\t\t")]):t._e()],1),t._v(" "),e("ul",{staticClass:"app-details__dependencies"},[t.app.missingMinOwnCloudVersion?e("li",[t._v("\n\t\t\t\t"+t._s(t.t("settings","This app has no minimum {productName} version assigned. This will be an error in the future.",{productName:t.productName}))+"\n\t\t\t")]):t._e(),t._v(" "),t.app.missingMaxOwnCloudVersion?e("li",[t._v("\n\t\t\t\t"+t._s(t.t("settings","This app has no maximum {productName} version assigned. This will be an error in the future.",{productName:t.productName}))+"\n\t\t\t")]):t._e(),t._v(" "),t.app.canInstall?t._e():e("li",[t._v("\n\t\t\t\t"+t._s(t.t("settings","This app cannot be installed because the following dependencies are not fulfilled:"))+"\n\t\t\t\t"),e("ul",{staticClass:"missing-dependencies"},t._l(t.app.missingDependencies,function(n,a){return e("li",{key:a},[t._v("\n\t\t\t\t\t\t"+t._s(n)+"\n\t\t\t\t\t")])}),0)])]),t._v(" "),t.lastModified&&!t.app.shipped?e("div",{staticClass:"app-details__section"},[e("h4",[t._v("\n\t\t\t\t"+t._s(t.t("settings","Latest updated"))+"\n\t\t\t")]),t._v(" "),e("NcDateTime",{attrs:{timestamp:t.lastModified}})],1):t._e(),t._v(" "),e("div",{staticClass:"app-details__section"},[e("h4",[t._v("\n\t\t\t\t"+t._s(t.t("settings","Author"))+"\n\t\t\t")]),t._v(" "),e("p",{staticClass:"app-details__authors"},[t._v("\n\t\t\t\t"+t._s(t.appAuthors)+"\n\t\t\t")])]),t._v(" "),e("div",{staticClass:"app-details__section"},[e("h4",[t._v("\n\t\t\t\t"+t._s(t.t("settings","Categories"))+"\n\t\t\t")]),t._v(" "),e("p",[t._v("\n\t\t\t\t"+t._s(t.appCategories)+"\n\t\t\t")])]),t._v(" "),t.externalResources.length>0?e("div",{staticClass:"app-details__section"},[e("h4",[t._v(t._s(t.t("settings","Resources")))]),t._v(" "),e("ul",{staticClass:"app-details__documentation",attrs:{"aria-label":t.t("settings","Documentation")}},t._l(t.externalResources,function(n){return e("li",{key:n.id},[e("a",{staticClass:"appslink",attrs:{href:n.href,target:"_blank",rel:"noreferrer noopener"}},[t._v("\n\t\t\t\t\t\t"+t._s(n.label)+" ↗\n\t\t\t\t\t")])])}),0)]):t._e(),t._v(" "),e("div",{staticClass:"app-details__section"},[e("h4",[t._v(t._s(t.t("settings","Interact")))]),t._v(" "),e("div",{staticClass:"app-details__interact"},[e("NcButton",{attrs:{disabled:!t.app.bugs,href:t.app.bugs??"#","aria-label":t.t("settings","Report a bug"),title:t.t("settings","Report a bug")},scopedSlots:t._u([{key:"icon",fn:function(){return[e("NcIconSvgWrapper",{attrs:{path:t.mdiBugOutline}})]},proxy:!0}])}),t._v(" "),e("NcButton",{attrs:{disabled:!t.app.bugs,href:t.app.bugs??"#","aria-label":t.t("settings","Request feature"),title:t.t("settings","Request feature")},scopedSlots:t._u([{key:"icon",fn:function(){return[e("NcIconSvgWrapper",{attrs:{path:t.mdiFeatureSearchOutline}})]},proxy:!0}])}),t._v(" "),t.app.appstoreData?.discussion?e("NcButton",{attrs:{href:t.app.appstoreData.discussion,"aria-label":t.t("settings","Ask questions or discuss"),title:t.t("settings","Ask questions or discuss")},scopedSlots:t._u([{key:"icon",fn:function(){return[e("NcIconSvgWrapper",{attrs:{path:t.mdiTooltipQuestionOutline}})]},proxy:!0}],null,!1,88743630)}):t._e(),t._v(" "),t.app.internal?t._e():e("NcButton",{attrs:{href:t.rateAppUrl,"aria-label":t.t("settings","Rate the app"),title:t.t("settings","Rate")},scopedSlots:t._u([{key:"icon",fn:function(){return[e("NcIconSvgWrapper",{attrs:{path:t.mdiStar}})]},proxy:!0}],null,!1,422450625)})],1)]),t._v(" "),t.app?.app_api?e("AppDeployOptionsModal",{attrs:{show:t.showDeployOptionsModal,app:t.app},on:{"update:show":function(e){t.showDeployOptionsModal=e}}}):t._e(),t._v(" "),t.app?.app_api?e("DaemonSelectionDialog",{attrs:{show:t.showSelectDaemonModal,app:t.app,"deploy-options":t.deployOptions},on:{"update:show":function(e){t.showSelectDaemonModal=e}}}):t._e()],1)])},[],!1,null,"e83f267a",null).exports,At=(0,i.pM)({__name:"AppReleasesTab",props:{app:null},setup(t){const e=t,n=(0,i.EW)(()=>Object.values(e.app.releases?.[0]?.translations??{}).some(({changelog:t})=>!!t));return{__sfc:!0,props:e,hasChangelog:n,createChangelogFromRelease:t=>t.translations?.[(0,s.Z0)()]?.changelog??t.translations?.en?.changelog??"",mdiClockFast:l.NWU,t:s.Tl,NcAppSidebarTab:I.A,NcIconSvgWrapper:r.A,Markdown:W}}});var gt=a(36767),mt={};mt.styleTagTransform=_(),mt.setAttributes=C(),mt.insert=h().bind(null,"head"),mt.domAPI=g(),mt.insertStyleElement=b(),u()(gt.A,mt),gt.A&>.A.locals&>.A.locals;const ht=(0,S.A)(At,function(){var t=this,e=t._self._c,n=t._self._setupProxy;return n.hasChangelog?e(n.NcAppSidebarTab,{attrs:{id:"changelog",name:n.t("settings","Changelog"),order:2},scopedSlots:t._u([{key:"icon",fn:function(){return[e(n.NcIconSvgWrapper,{attrs:{path:n.mdiClockFast,size:24}})]},proxy:!0}],null,!1,1849836872)},[t._v(" "),t._l(t.app.releases,function(a){return e("div",{key:a.version,staticClass:"app-sidebar-tabs__release"},[e("h2",[t._v(t._s(a.version))]),t._v(" "),e(n.Markdown,{staticClass:"app-sidebar-tabs__release-text",attrs:{text:n.createChangelogFromRelease(a)}})],1)})],2):t._e()},[],!1,null,"69f0fc16",null).exports;var vt=a(86438),Ct=a(36620),ft=a(14744);const bt=(0,i.pM)({__name:"AppStoreSidebar",setup(t){const e=(0,o.lq)(),n=(0,o.rd)(),a=(0,it.T)(),c=(0,at.a)(),d=(0,ft.P)(),u=(0,i.EW)(()=>e.params.id??""),A=(0,i.EW)(()=>{if(d.getters.isAppApiEnabled){const t=c.getAllApps.find(t=>t.id===u.value)??null;if(t)return t}return a.getAppById(u.value)}),g=(0,i.EW)(()=>A.value.appstoreData?.ratingNumOverall>5),m=(0,i.EW)(()=>A.value.appstoreData?.ratingNumRecent>5?A.value.appstoreData.ratingRecent:A.value.appstoreData?.ratingOverall??.5),h=(0,i.EW)(()=>null!==A.value),{appIcon:v}=function(t){const e=(0,i.KR)(null),n=(0,i.EW)(()=>{let e;return e=t.value?.app_api?l.ED:[t.value?.category??[]].flat().map(t=>vt.A[t]).filter(t=>!!t).at(0)??(t.value?.app_api?l.ED:l.CZ3),e?`<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="${e}" /></svg>`:null});return(0,i.nT)(async()=>{if(t.value?.preview){e.value=null;try{const n=await window.fetch(t.value.preview),a=await n.blob(),i=await a.text();e.value=i.replaceAll(/fill="#(fff|ffffff)([a-z0-9]{1,2})?"/gi,'fill="currentColor"')}catch(t){e.value=n.value,Ct.A.error("Could not load app icon",{error:t})}}else e.value=n.value}),{appIcon:e}}(A),C=(0,i.EW)(()=>A.value?""!==A.value.license?(0,s.t)("settings","Version {version}, {license}-licensed",{version:A.value.version,license:A.value.licence.toString().toUpperCase()}):(0,s.t)("settings","Version {version}",{version:A.value.version}):""),f=(0,i.KR)("details");(0,i.wB)([A],()=>{f.value="details"});const b=(0,i.KR)(!1),y=(0,i.EW)(()=>A.value?.screenshot&&b.value);function _(){if(A.value?.releases&&A.value?.screenshot){const t=new Image;t.onload=()=>{b.value=!0},t.src=A.value.screenshot}}return(0,i.wB)([A],_),(0,i.sV)(_),{__sfc:!0,route:e,router:n,store:a,appApiStore:c,legacyStore:d,appId:u,app:A,hasRating:g,rating:m,showSidebar:h,appIcon:v,licenseText:C,activeTab:f,hideAppDetails:function(){n.push({name:"apps-category",params:{category:e.params.category}})},screenshotLoaded:b,hasScreenshot:y,loadScreenshot:_,NcAppSidebar:p.N,NcIconSvgWrapper:r.A,AppDaemonBadge:k,AppLevelBadge:N.A,AppScore:D.A,AppDeployDaemonTab:O,AppDescriptionTab:z,AppDetailsTab:ut,AppReleasesTab:ht}}});var yt=a(6325),_t={};_t.styleTagTransform=_(),_t.setAttributes=C(),_t.insert=h().bind(null,"head"),_t.domAPI=g(),_t.insertStyleElement=b(),u()(yt.A,_t),yt.A&&yt.A.locals&&yt.A.locals;const xt=(0,S.A)(bt,function(){var t=this,e=t._self._c,n=t._self._setupProxy;return n.showSidebar?e(n.NcAppSidebar,{staticClass:"app-sidebar",class:{"app-sidebar--with-screenshot":n.hasScreenshot},attrs:{active:n.activeTab,background:n.hasScreenshot?n.app.screenshot:void 0,compact:!n.hasScreenshot,name:n.app.name,title:n.app.name,subname:n.licenseText,subtitle:n.licenseText},on:{"update:active":function(t){n.activeTab=t},close:n.hideAppDetails},scopedSlots:t._u([n.hasScreenshot?null:{key:"header",fn:function(){return[e(n.NcIconSvgWrapper,{staticClass:"app-sidebar__fallback-icon",attrs:{svg:n.appIcon??"",size:64}})]},proxy:!0},{key:"description",fn:function(){return[e("div",{staticClass:"app-sidebar__badges"},[e(n.AppLevelBadge,{attrs:{level:n.app.level}}),t._v(" "),n.app.app_api&&n.app.daemon?e(n.AppDaemonBadge,{attrs:{daemon:n.app.daemon}}):t._e(),t._v(" "),n.hasRating?e(n.AppScore,{attrs:{score:n.rating}}):t._e()],1)]},proxy:!0}],null,!0)},[t._v(" "),t._v(" "),e(n.AppDescriptionTab,{attrs:{app:n.app}}),t._v(" "),e(n.AppDetailsTab,{attrs:{app:n.app}}),t._v(" "),e(n.AppReleasesTab,{attrs:{app:n.app}}),t._v(" "),e(n.AppDeployDaemonTab,{attrs:{app:n.app}})],1):t._e()},[],!1,null,"156b7c7b",null).exports},9754:(t,e,n)=>{n.d(e,{A:()=>p});var a=n(71354),i=n.n(a),s=n(76314),o=n.n(s)()(i());o.push([t.id,".daemon[data-v-28419269]{padding:20px}.daemon h4[data-v-28419269]{font-weight:bold;margin:10px auto}","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreSidebar/AppDeployDaemonTab.vue"],names:[],mappings:"AACA,yBACE,YAAA,CAEA,4BACE,gBAAA,CACA,gBAAA",sourcesContent:["\n.daemon {\n padding: 20px;\n\n h4 {\n font-weight: bold;\n margin: 10px auto;\n }\n}\n"],sourceRoot:""}]);const p=o},20720:(t,e,n)=>{n.d(e,{A:()=>p});var a=n(71354),i=n.n(a),s=n(76314),o=n.n(s)()(i());o.push([t.id,".app-daemon-badge[data-v-d2263fb4]{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}","",{version:3,sources:["webpack://./apps/settings/src/components/AppList/AppDaemonBadge.vue"],names:[],mappings:"AACA,mCACC,mCAAA,CACA,8BAAA,CACA,8CAAA,CACA,kCAAA,CAEA,YAAA,CACA,kBAAA,CACA,OAAA,CACA,eAAA,CACA,iBAAA",sourcesContent:["\n.app-daemon-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"],sourceRoot:""}]);const p=o},21476:(t,e,n)=>{n.d(e,{A:()=>p});var a=n(71354),i=n.n(a),s=n(76314),o=n.n(s)()(i());o.push([t.id,".apps-list[data-v-707dd976]{display:flex;flex-wrap:wrap;align-content:flex-start}.apps-list--move[data-v-707dd976]{transition:transform 1s}.apps-list #app-list-update-all[data-v-707dd976]{margin-inline-start:10px}.apps-list__toolbar[data-v-707dd976]{height:60px;padding:8px;padding-inline-start: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-707dd976]{margin-bottom:100px;position:relative}.apps-list__list-container[data-v-707dd976]{width:100%}.apps-list__store-container[data-v-707dd976]{display:flex;flex-wrap:wrap}.apps-list__bundle-heading[data-v-707dd976]{display:flex;align-items:center;margin-block:20px;margin-inline:0 10px}.apps-list__bundle-header[data-v-707dd976]{color:var(--color-main-text);margin-block:0;margin-inline:50px 10px;font-weight:bold;font-size:20px;line-height:30px}#apps-list-search .app-item h2[data-v-707dd976]{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,wBAAA,CAGD,qCACC,WAjBe,CAkBf,WAnBgB,CAqBhB,yBApBe,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,iBAAA,CACA,oBAAA,CAGD,2CACC,4BAAA,CACA,cAAA,CACA,uBAAA,CACA,gBAAA,CACA,cAAA,CACA,gBAAA,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-inline-start: 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-inline-start: $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-block: 20px;\n\t\tmargin-inline: 0 10px;\n\t}\n\n\t&__bundle-header {\n\t\tcolor: var(--color-main-text);\n\t\tmargin-block: 0;\n\t\tmargin-inline: 50px 10px;\n\t\tfont-weight: bold;\n\t\tfont-size: 20px;\n\t\tline-height: 30px;\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 p=o},23453:(e,n,a)=>{a.d(n,{A:()=>c});var i=a(85168),s=a(19051),o=a(61338),p=a(63814);const r=()=>s.Ay.get((0,p.KT)("core/navigation",2)+"/apps?format=json").then(({data:t})=>{200===t.ocs.meta.statuscode&&((0,o.Ic)("nextcloud:app-menu.refresh",{apps:t.ocs.data}),window.dispatchEvent(new Event("resize")))}),l=window.OC.theme.productName,c={computed:{appGroups(){return this.app.groups.map(t=>({id:t,name:t}))},installing(){return this.app?.app_api?this.app&&!0===this?.appApiStore.getLoading("install"):this.$store.getters.loading("install")},isLoading(){return this.app?.app_api?this.app&&!0===this?.appApiStore.getLoading(this.app.id):this.app&&this.$store.getters.loading(this.app.id)},isInitializing(){return!!this.app?.app_api&&this.app&&("init"===this.app?.status?.action||"healthcheck"===this.app?.status?.action)},isDeploying(){return!!this.app?.app_api&&this.app&&"deploy"===this.app?.status?.action},isManualInstall(){return!!this.app?.app_api&&"manual-install"===this.app?.daemon?.accepts_deploy_id},updateButtonText(){return this.app?.app_api&&"manual-install"===this.app?.daemon?.accepts_deploy_id?t("settings","Manually installed apps cannot be updated"):t("settings","Update to {version}",{version:this.app?.update})},enableButtonText(){return this.app?.app_api?this.app&&this.app?.status?.action&&"deploy"===this.app?.status?.action?t("settings","{progress}% Deploying …",{progress:this.app?.status?.deploy??0}):this.app&&this.app?.status?.action&&"init"===this.app?.status?.action?t("settings","{progress}% Initializing …",{progress:this.app?.status?.init??0}):this.app&&this.app?.status?.action&&"healthcheck"===this.app?.status?.action?t("settings","Health checking"):this.app.needsDownload?t("settings","Deploy and Enable"):t("settings","Enable"):this.app.needsDownload?t("settings","Download and enable"):t("settings","Enable")},disableButtonText(){if(this.app?.app_api){if(this.app&&this.app?.status?.action&&"deploy"===this.app?.status?.action)return t("settings","{progress}% Deploying …",{progress:this.app?.status?.deploy});if(this.app&&this.app?.status?.action&&"init"===this.app?.status?.action)return t("settings","{progress}% Initializing …",{progress:this.app?.status?.init});if(this.app&&this.app?.status?.action&&"healthcheck"===this.app?.status?.action)return t("settings","Health checking")}return t("settings","Disable")},forceEnableButtonText(){return this.app.needsDownload,t("settings","Allow untested app")},enableButtonTooltip(){return!this.app?.app_api&&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 {productName} version.",{productName:l})+" "+t("settings","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},defaultDeployDaemonAccessible(){return!this.app?.app_api||!(!this.app?.daemon||"manual-install"!==this.app?.daemon?.accepts_deploy_id)||("docker-install"===this.app?.daemon?.accepts_deploy_id&&this.appApiStore.getDefaultDaemon?.name===this.app?.daemon?.name?!0===this?.appApiStore.getDaemonAccessible:this?.appApiStore.getDaemonAccessible)}},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(){return!this.app?.app_api&&(this.app.groups.length||this.groupCheckedAppsData)},setGroupLimit(){this.app?.app_api||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")||t?.app_api),addGroupLimitation(t){if(this.app?.app_api)return;const e=t.pop(),n=this.app.groups.concat([]).concat([e.id]);this.$store.dispatch("enableApp",{appId:this.app.id,groups:n})},removeGroupLimitation(t){if(this.app?.app_api)return;const e=this.app.groups.concat([]),n=e.indexOf(t.id);n>-1&&e.splice(n,1),this.$store.dispatch("enableApp",{appId:this.app.id,groups:e})},forceEnable(t){this.app?.app_api?this.appApiStore.forceEnableApp(t).then(()=>{r()}).catch(t=>{(0,i.Qg)(t)}):this.$store.dispatch("forceEnableApp",{appId:t,groups:[]}).then(()=>{r()}).catch(t=>{(0,i.Qg)(t)})},enable(t,e=null,n={}){this.app?.app_api?this.appApiStore.enableApp(t,e,n).then(()=>{r()}).catch(t=>{(0,i.Qg)(t)}):this.$store.dispatch("enableApp",{appId:t,groups:[]}).then(()=>{r()}).catch(t=>{(0,i.Qg)(t)})},disable(t){this.app?.app_api?this.appApiStore.disableApp(t).then(()=>{r()}).catch(t=>{(0,i.Qg)(t)}):this.$store.dispatch("disableApp",{appId:t}).then(()=>{r()}).catch(t=>{(0,i.Qg)(t)})},async remove(t,e=!1){try{this.app?.app_api?await this.appApiStore.uninstallApp(t,e):await this.$store.dispatch("uninstallApp",{appId:t,removeData:e}),await r()}catch(t){(0,i.Qg)(t)}},install(t){this.app?.app_api?this.appApiStore.enableApp(t).then(()=>{r()}).catch(t=>{(0,i.Qg)(t)}):this.$store.dispatch("enableApp",{appId:t}).then(()=>{r()}).catch(t=>{(0,i.Qg)(t)})},update(t){this.app?.app_api?this.appApiStore.updateApp(t).then(()=>{r()}).catch(t=>{(0,i.Qg)(t)}):this.$store.dispatch("updateApp",{appId:t}).catch(t=>{(0,i.Qg)(t)}).then(()=>{r(),this.store.updateCount=Math.max(this.store.updateCount-1,0)})}}}},31437:(t,e,n)=>{n.r(e),n.d(e,{default:()=>T});var a=n(85471),i=n(81222),s=n(53334),o=n(42530),p=n(52439),r=n(542),l=n(85947),c=n(6695),d=n(88289),u=n(92973),A=n(86438),g=n(846);const m=(0,a.pM)({__name:"AppStoreNavigation",setup(t){const e=(0,i.C)("settings","appstoreEnabled",!0),n=(0,i.C)("settings","appstoreDeveloperDocs",""),m=(0,g.T)(),h=(0,a.EW)(()=>m.categories),v=(0,a.EW)(()=>m.loading.categories),C=(0,a.EW)(()=>void 0!==m.apps.find(({level:t})=>300===t));return(0,a.KC)(()=>{m.loadCategories(),m.loadApps()}),{__sfc:!0,appstoreEnabled:e,developerDocsUrl:n,store:m,categories:h,categoriesLoading:v,isSubscribed:C,t:s.Tl,NcAppNavigation:o.A,NcAppNavigationItem:p.A,NcAppNavigationSpacer:r.A,NcCounterBubble:l.A,NcIconSvgWrapper:c.A,NcLoadingIcon:d.A,APPS_SECTION_ENUM:u.l,APPSTORE_CATEGORY_ICONS:A.A}}});var h=n(85072),v=n.n(h),C=n(97825),f=n.n(C),b=n(77659),y=n.n(b),_=n(55056),x=n.n(_),w=n(10540),S=n.n(w),k=n(41113),N=n.n(k),D=n(7717),I={};I.styleTagTransform=N(),I.setAttributes=x(),I.insert=y().bind(null,"head"),I.domAPI=f(),I.insertStyleElement=S(),v()(D.A,I),D.A&&D.A.locals&&D.A.locals;const T=(0,n(14486).A)(m,function(){var t=this,e=t._self._c,n=t._self._setupProxy;return e(n.NcAppNavigation,{attrs:{"aria-label":n.t("settings","Apps")},scopedSlots:t._u([{key:"list",fn:function(){return[n.appstoreEnabled?e(n.NcAppNavigationItem,{attrs:{id:"app-category-discover",to:{name:"apps-category",params:{category:"discover"}},name:n.APPS_SECTION_ENUM.discover},scopedSlots:t._u([{key:"icon",fn:function(){return[e(n.NcIconSvgWrapper,{attrs:{path:n.APPSTORE_CATEGORY_ICONS.discover}})]},proxy:!0}],null,!1,1397544286)}):t._e(),t._v(" "),e(n.NcAppNavigationItem,{attrs:{id:"app-category-installed",to:{name:"apps-category",params:{category:"installed"}},name:n.APPS_SECTION_ENUM.installed},scopedSlots:t._u([{key:"icon",fn:function(){return[e(n.NcIconSvgWrapper,{attrs:{path:n.APPSTORE_CATEGORY_ICONS.installed}})]},proxy:!0}])}),t._v(" "),e(n.NcAppNavigationItem,{attrs:{id:"app-category-enabled",to:{name:"apps-category",params:{category:"enabled"}},name:n.APPS_SECTION_ENUM.enabled},scopedSlots:t._u([{key:"icon",fn:function(){return[e(n.NcIconSvgWrapper,{attrs:{path:n.APPSTORE_CATEGORY_ICONS.enabled}})]},proxy:!0}])}),t._v(" "),e(n.NcAppNavigationItem,{attrs:{id:"app-category-disabled",to:{name:"apps-category",params:{category:"disabled"}},name:n.APPS_SECTION_ENUM.disabled},scopedSlots:t._u([{key:"icon",fn:function(){return[e(n.NcIconSvgWrapper,{attrs:{path:n.APPSTORE_CATEGORY_ICONS.disabled}})]},proxy:!0}])}),t._v(" "),n.store.updateCount>0?e(n.NcAppNavigationItem,{attrs:{id:"app-category-updates",to:{name:"apps-category",params:{category:"updates"}},name:n.APPS_SECTION_ENUM.updates},scopedSlots:t._u([{key:"counter",fn:function(){return[e(n.NcCounterBubble,[t._v(t._s(n.store.updateCount))])]},proxy:!0},{key:"icon",fn:function(){return[e(n.NcIconSvgWrapper,{attrs:{path:n.APPSTORE_CATEGORY_ICONS.updates}})]},proxy:!0}],null,!1,3001044337)}):t._e(),t._v(" "),e(n.NcAppNavigationItem,{attrs:{id:"app-category-your-bundles",to:{name:"apps-category",params:{category:"app-bundles"}},name:n.APPS_SECTION_ENUM["app-bundles"]},scopedSlots:t._u([{key:"icon",fn:function(){return[e(n.NcIconSvgWrapper,{attrs:{path:n.APPSTORE_CATEGORY_ICONS.bundles}})]},proxy:!0}])}),t._v(" "),e(n.NcAppNavigationSpacer),t._v(" "),n.appstoreEnabled&&n.categoriesLoading?e("li",{staticClass:"categories--loading"},[e(n.NcLoadingIcon,{attrs:{size:20,"aria-label":n.t("settings","Loading categories")}})],1):n.appstoreEnabled&&!n.categoriesLoading?[n.isSubscribed?e(n.NcAppNavigationItem,{attrs:{id:"app-category-supported",to:{name:"apps-category",params:{category:"supported"}},name:n.APPS_SECTION_ENUM.supported},scopedSlots:t._u([{key:"icon",fn:function(){return[e(n.NcIconSvgWrapper,{attrs:{path:n.APPSTORE_CATEGORY_ICONS.supported}})]},proxy:!0}],null,!1,613663011)}):t._e(),t._v(" "),e(n.NcAppNavigationItem,{attrs:{id:"app-category-featured",to:{name:"apps-category",params:{category:"featured"}},name:n.APPS_SECTION_ENUM.featured},scopedSlots:t._u([{key:"icon",fn:function(){return[e(n.NcIconSvgWrapper,{attrs:{path:n.APPSTORE_CATEGORY_ICONS.featured}})]},proxy:!0}])}),t._v(" "),t._l(n.categories,function(a){return e(n.NcAppNavigationItem,{key:a.id,attrs:{id:`app-category-${a.id}`,name:a.displayName,to:{name:"apps-category",params:{category:a.id}}},scopedSlots:t._u([{key:"icon",fn:function(){return[e(n.NcIconSvgWrapper,{attrs:{path:a.icon}})]},proxy:!0}],null,!0)})})]:t._e(),t._v(" "),e(n.NcAppNavigationItem,{attrs:{id:"app-developer-docs",name:n.t("settings","Developer documentation ↗"),href:n.developerDocsUrl}})]},proxy:!0}])})},[],!1,null,"6d2cb244",null).exports},36767:(t,e,n)=>{n.d(e,{A:()=>p});var a=n(71354),i=n.n(a),s=n(76314),o=n.n(s)()(i());o.push([t.id,".app-sidebar-tabs__release h2[data-v-69f0fc16]{border-bottom:1px solid var(--color-border);font-size:24px}.app-sidebar-tabs__release-text[data-v-69f0fc16] h3{font-size:20px}.app-sidebar-tabs__release-text[data-v-69f0fc16] 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 p=o},39094:(t,e,n)=>{n.d(e,{A:()=>p});var a=n(71354),i=n.n(a),s=n(76314),o=n.n(s)()(i());o.push([t.id,".app-level-badge[data-v-11da8cb3]{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-11da8cb3]{background-color:var(--color-success);border-color:var(--color-border-success);color:var(--color-success-text)}","",{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,qCAAA,CACA,wCAAA,CACA,+BAAA",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\tbackground-color: var(--color-success);\n\t\tborder-color: var(--color-border-success);\n\t\tcolor: var(--color-success-text);\n\t}\n}\n"],sourceRoot:""}]);const p=o},39302:(t,e,n)=>{n.d(e,{A:()=>p});var a=n(71354),i=n.n(a),s=n(76314),o=n.n(s)()(i());o.push([t.id,".app-discover[data-v-32ad4b6a]{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 p=o},55689:(e,n,a)=>{a.r(n),a.d(n,{default:()=>pt});var i=a(85471),s=a(53334),o=a(24387),p=a(18195),r=a(42507),l=a(88289),c=a(61338);function d(t,e,n){(function(t,e){if(e.has(t))throw new TypeError("Cannot initialize the same private elements twice on an object")})(t,e),e.set(t,n)}function u(t,e,n){return t.set(g(t,e),n),n}function A(t,e){return t.get(g(t,e))}function g(t,e,n){if("function"==typeof t?t===e:t.has(e))return arguments.length<3?e:n;throw new TypeError("Private element is not present on this object")}function m(t,e,n){return(e=function(t){var e=function(t){if("object"!=typeof t||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,"string");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}class h{constructor(t){m(this,"value",void 0),m(this,"next",void 0),this.value=t}}var v=new WeakMap,C=new WeakMap,f=new WeakMap;class b{constructor(){d(this,v,void 0),d(this,C,void 0),d(this,f,void 0),this.clear()}enqueue(t){var e;const n=new h(t);A(v,this)?(A(C,this).next=n,u(C,this,n)):(u(v,this,n),u(C,this,n)),u(f,this,(e=A(f,this),++e))}dequeue(){var t;const e=A(v,this);if(e)return u(v,this,A(v,this).next),u(f,this,(t=A(f,this),--t)),e.value}peek(){if(A(v,this))return A(v,this).value}clear(){u(v,this,void 0),u(C,this,void 0),u(f,this,0)}get size(){return A(f,this)}*[Symbol.iterator](){let t=A(v,this);for(;t;)yield t.value,t=t.next}*drain(){for(;A(v,this);)yield this.dequeue()}}function y(t){_(t);const e=new b;let n=0;const a=()=>{n<t&&e.size>0&&(n++,e.dequeue()())},i=async(t,e,i)=>{const s=(async()=>t(...i))();e(s);try{await s}catch{}n--,a()},s=(s,...o)=>new Promise(p=>{((s,o,p)=>{new Promise(t=>{e.enqueue(t)}).then(i.bind(void 0,s,o,p)),n<t&&a()})(s,p,o)});return Object.defineProperties(s,{activeCount:{get:()=>n},pendingCount:{get:()=>e.size},clearQueue:{value(){e.clear()}},concurrency:{get:()=>t,set(i){_(i),t=i,queueMicrotask(()=>{for(;n<t&&e.size>0;)a()})}},map:{async value(t,e){const n=Array.from(t,(t,n)=>this(e,t,n));return Promise.all(n)}}}),s}function _(t){if(!Number.isInteger(t)&&t!==Number.POSITIVE_INFINITY||!(t>0))throw new TypeError("Expected `concurrency` to be a number from 1 and up")}var x=a(74095),w=a(98856),S=a(36620),k=a(23453),N=a(62938),D=a(846);const I={name:"AppList",components:{AppItem:w.A,NcButton:x.A},mixins:[k.A],props:{category:{type:String,required:!0}},setup:()=>({appApiStore:(0,N.a)(),store:(0,D.T)()}),data:()=>({search:""}),computed:{counter(){return this.apps.filter(t=>t.update).length},loading(){return this.$store.getters["appApiApps/isAppApiEnabled"]?this.$store.getters.loading("list")||this.appApiStore.getLoading("list"):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.isAppApiEnabled?this.appApiStore.getAllApps:[],e=[...this.$store.getters.getAllApps,...t].filter(t=>-1!==t.name.toLowerCase().search(this.search.toLowerCase())).sort(function(t,e){const n=OC.Util.naturalSortCompare(t,e);if(0===n){const n=""+(t.active?0:1)+(t.update?0:1),a=""+(e.active?0:1)+(e.update?0:1);return Number(n)-Number(a)}return n});return"installed"===this.category?e.filter(t=>t.installed):"enabled"===this.category?e.filter(t=>t.active&&t.installed):"disabled"===this.category?e.filter(t=>!t.active&&t.installed):"app-bundles"===this.category?e.filter(t=>t.bundles):"updates"===this.category?e.filter(t=>t.update):"supported"===this.category?e.filter(t=>300===t.level):"featured"===this.category?e.filter(t=>200===t.level):e.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(){if(""===this.search)return[];const t=this.$store.getters.isAppApiEnabled?this.appApiStore.getAllApps:[];return[...this.$store.getters.getAllApps,...t].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,c.al)("nextcloud:unified-search.search",this.setSearch),(0,c.al)("nextcloud:unified-search.reset",this.resetSearch)},mounted(){(0,c.B1)("nextcloud:unified-search.search",this.setSearch),(0,c.B1)("nextcloud:unified-search.reset",this.resetSearch)},methods:{setSearch({query:t}){this.search=t},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=>{S.A.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=y(1);this.apps.filter(t=>t.update).map(e=>t(()=>{this.update(e.id)}))}}};var T=a(85072),E=a.n(T),B=a(97825),O=a.n(B),P=a(77659),$=a.n(P),M=a(55056),L=a.n(M),R=a(10540),W=a.n(R),U=a(41113),G=a.n(U),F=a(21476),z={};z.styleTagTransform=G(),z.setAttributes=L(),z.insert=$().bind(null,"head"),z.domAPI=O(),z.insertStyleElement=W(),E()(F.A,z),F.A&&F.A.locals&&F.A.locals;var V=a(14486);const q=(0,V.A)(I,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",variant:"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(n){return e("AppItem",{key:n.id,attrs:{app:n,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(n){return[e("tr",{key:n.id},[e("th",{attrs:{id:`app-table-rowgroup-${n.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(n.name)+"\n\t\t\t\t\t\t\t")]),t._v(" "),e("NcButton",{attrs:{variant:"secondary"},on:{click:function(e){return t.toggleBundle(n.id)}}},[t._v("\n\t\t\t\t\t\t\t\t"+t._s(t.t("settings",t.bundleToggleText(n.id)))+"\n\t\t\t\t\t\t\t")])],1)])]),t._v(" "),t._l(t.bundleApps(n.id),function(a){return e("AppItem",{key:n.id+a.id,attrs:{"use-bundle-view":!0,headers:`app-table-rowgroup-${n.id}`,app:a,category:t.category}})})]})],2):t._e(),t._v(" "),t.useAppStoreView?e("ul",{staticClass:"apps-list__store-container"},t._l(t.apps,function(n){return e("AppItem",{key:n.id,attrs:{app:n,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(n){return e("AppItem",{key:n.id,attrs:{app:n,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,"707dd976",null).exports;var j=a(9165),H=a(19051),Y=a(85168),Q=a(63814),K=a(6695);function J(t){const e={...t};if(e.date&&(e.date=Date.parse(e.date)),e.expiryDate&&(e.expiryDate=Date.parse(e.expiryDate)),"post"===e.type)return e;if("showcase"===e.type)return e;if("carousel"===e.type)return e;throw new Error(`Invalid argument, app discover element with type ${t.type??"unknown"} is unknown`)}function X(t){const e=Date.now();return!(t.date&&t.date>e||t.expiryDate&&t.expiryDate<e)}const Z=(0,i.pM)({__name:"AppStoreDiscoverSection",setup(t){const e=(0,i.$V)(()=>a.e(9381).then(a.bind(a,59381))),n=(0,i.$V)(()=>a.e(249).then(a.bind(a,10249))),o=(0,i.$V)(()=>a.e(7591).then(a.bind(a,17591))),p=(0,i.KR)(!1),c=(0,i.KR)([]);function d(t){for(let e=t.length-1;e>0;e--){const n=Math.floor(Math.random()*(e+1));[t[e],t[n]]=[t[n],t[e]]}return t}return(0,i.KC)(async()=>{try{const{data:t}=await H.Ay.get((0,Q.Jv)("/settings/api/apps/discover"));if(0===t.length)return S.A.info("No app discover elements available (empty response)"),void(p.value=!0);const e=d(t.map(J).filter(X));e.sort((t,e)=>(t.order??1/0)<(e.order??1/0)?-1:1),c.value=e}catch(t){p.value=!0,S.A.error(t),(0,Y.Qg)((0,s.Tl)("settings","Could not load app discover section"))}}),{__sfc:!0,PostType:e,CarouselType:n,ShowcaseType:o,hasError:p,elements:c,shuffleArray:d,getComponent:function(t){return"post"===t?e:"carousel"===t?n:"showcase"===t?o:(0,i.pM)({mounted:()=>S.A.error("Unknown component requested ",t),render:t=>t("div",(0,s.Tl)("settings","Could not render element"))})},mdiEyeOffOutline:j.tQ_,t:s.Tl,NcEmptyContent:r.A,NcIconSvgWrapper:K.A,NcLoadingIcon:l.A}}});var tt=a(39302),et={};et.styleTagTransform=G(),et.setAttributes=L(),et.insert=$().bind(null,"head"),et.domAPI=O(),et.insertStyleElement=W(),E()(tt.A,et),tt.A&&tt.A.locals&&tt.A.locals;const nt=(0,V.A)(Z,function(){var t=this,e=t._self._c,n=t._self._setupProxy;return e("div",{staticClass:"app-discover"},[n.hasError?e(n.NcEmptyContent,{attrs:{name:n.t("settings","Nothing to show"),description:n.t("settings","Could not load section content from app store.")},scopedSlots:t._u([{key:"icon",fn:function(){return[e(n.NcIconSvgWrapper,{attrs:{path:n.mdiEyeOffOutline,size:64}})]},proxy:!0}],null,!1,3626885458)}):0===n.elements.length?e(n.NcEmptyContent,{attrs:{name:n.t("settings","Loading"),description:n.t("settings","Fetching the latest news…")},scopedSlots:t._u([{key:"icon",fn:function(){return[e(n.NcLoadingIcon,{attrs:{size:64}})]},proxy:!0}])}):t._l(n.elements,function(a,i){return e(n.getComponent(a.type),t._b({key:a.id??i,tag:"component"},"component",a,!1))})],2)},[],!1,null,"32ad4b6a",null).exports;var at=a(92973);const it=(0,i.pM)({__name:"AppStore",setup(t){const e=(0,o.lq)(),n=(0,D.T)(),a=(0,N.a)(),c=(0,i.EW)(()=>e.params?.category??"discover"),d=(0,i.EW)(()=>at.l[c.value]??n.getCategoryById(c.value)?.displayName),u=(0,s.Tl)("settings","App Store"),A=(0,i.EW)(()=>`${d.value} - ${u}`),g=(0,i.nI)(),m=(0,i.EW)(()=>(g?.proxy).$store.getters.loading("list"));return(0,i.KC)(()=>{(g?.proxy).$store.dispatch("getCategories",{shouldRefetchCategories:!0}),(g?.proxy).$store.dispatch("getAllApps"),(g?.proxy).$store.getters.isAppApiEnabled&&(a.fetchAllApps(),a.updateAppsStatus())}),(0,i.xo)(()=>{clearInterval(a.getStatusUpdater)}),{__sfc:!0,route:e,store:n,appApiStore:a,currentCategory:c,viewLabel:d,pageHeading:u,pageTitle:A,instance:g,isLoading:m,t:s.Tl,NcAppContent:p.A,NcEmptyContent:r.A,NcLoadingIcon:l.A,AppList:q,AppStoreDiscoverSection:nt}}});var st=a(92621),ot={};ot.styleTagTransform=G(),ot.setAttributes=L(),ot.insert=$().bind(null,"head"),ot.domAPI=O(),ot.insertStyleElement=W(),E()(st.A,ot),st.A&&st.A.locals&&st.A.locals;const pt=(0,V.A)(it,function(){var t=this,e=t._self._c,n=t._self._setupProxy;return e(n.NcAppContent,{staticClass:"app-settings-content",attrs:{"page-heading":n.pageHeading,"page-title":n.pageTitle}},[e("h2",{staticClass:"app-settings-content__label",domProps:{textContent:t._s(n.viewLabel)}}),t._v(" "),"discover"===n.currentCategory?e(n.AppStoreDiscoverSection):n.isLoading?e(n.NcEmptyContent,{staticClass:"empty-content__loading",attrs:{name:n.t("settings","Loading app list")},scopedSlots:t._u([{key:"icon",fn:function(){return[e(n.NcLoadingIcon,{attrs:{size:64}})]},proxy:!0}])}):e(n.AppList,{attrs:{category:n.currentCategory}})],1)},[],!1,null,"0105bd03",null).exports},61376:(t,e,n)=>{n.d(e,{A:()=>p});var a=n(71354),i=n.n(a),s=n(76314),o=n.n(s)()(i());o.push([t.id,'.app-details[data-v-e83f267a]{padding:20px}.app-details__actions-manage[data-v-e83f267a]{display:flex;align-items:center}.app-details__actions-manage input[data-v-e83f267a]{flex:0 1 auto;min-width:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.app-details__authors[data-v-e83f267a]{color:var(--color-text-maxcontrast)}.app-details__section[data-v-e83f267a]{margin-top:15px}.app-details__section h4[data-v-e83f267a]{font-size:16px;font-weight:bold;margin-block-end:5px}.app-details__interact[data-v-e83f267a]{display:flex;flex-direction:row;flex-wrap:wrap;gap:12px}.app-details__documentation a[data-v-e83f267a]{text-decoration:underline}.app-details__documentation li[data-v-e83f267a]{padding-inline-start:20px}.app-details__documentation li[data-v-e83f267a]::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-e83f267a]{color:var(--color-text-error);border-color:var(--color-border-error);background:var(--color-main-background)}.force[data-v-e83f267a]:hover,.force[data-v-e83f267a]:active{color:var(--color-main-background);border-color:var(--color-border-error) !important;background:var(--color-error)}.missing-dependencies[data-v-e83f267a]{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,kBAAA,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,6BAAA,CACA,sCAAA,CACA,uCAAA,CAGD,6DAEC,kCAAA,CACA,iDAAA,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\talign-items: center;\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-text-error);\n\tborder-color: var(--color-border-error);\n\tbackground: var(--color-main-background);\n}\n\n.force:hover,\n.force:active {\n\tcolor: var(--color-main-background);\n\tborder-color: var(--color-border-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 p=o},62272:(t,e,n)=>{n.d(e,{A:()=>p});var a=n(71354),i=n.n(a),s=n(76314),o=n.n(s)()(i());o.push([t.id,"\n.app-score__wrapper[data-v-0774afca] {\n\tdisplay: inline-flex;\n\tcolor: var(--color-favorite, #a08b00);\n> *[data-v-0774afca] {\n\t\tvertical-align: text-bottom;\n}\n}\n","",{version:3,sources:["webpack://./apps/settings/src/components/AppList/AppScore.vue"],names:[],mappings:";AA0EA;CACA,oBAAA;CACA,qCAAA;AAEA;EACA,2BAAA;AACA;AACA",sourcesContent:['\x3c!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n--\x3e\n\n<template>\n\t<span\n\t\trole="img"\n\t\t:aria-label="title"\n\t\t:title="title"\n\t\tclass="app-score__wrapper">\n\t\t<NcIconSvgWrapper\n\t\t\tv-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\n\t\t\tv-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\n<script lang="ts">\nimport { mdiStar, mdiStarHalfFull, mdiStarOutline } from \'@mdi/js\'\nimport { translate as t } from \'@nextcloud/l10n\'\nimport { defineComponent } from \'vue\'\nimport NcIconSvgWrapper from \'@nextcloud/vue/components/NcIconSvgWrapper\'\n\nexport default defineComponent({\n\tname: \'AppScore\',\n\tcomponents: {\n\t\tNcIconSvgWrapper,\n\t},\n\n\tprops: {\n\t\tscore: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tsetup() {\n\t\treturn {\n\t\t\tmdiStar,\n\t\t\tmdiStarHalfFull,\n\t\t\tmdiStarOutline,\n\t\t}\n\t},\n\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\n\t\tfullStars() {\n\t\t\treturn Math.floor(this.score * 5 + 0.25)\n\t\t},\n\n\t\temptyStars() {\n\t\t\treturn Math.min(Math.floor((1 - this.score) * 5 + 0.25), 5 - this.fullStars)\n\t\t},\n\n\t\thasHalfStar() {\n\t\t\treturn (this.fullStars + this.emptyStars) < 5\n\t\t},\n\t},\n})\n<\/script>\n\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 p=o},62938:(t,e,n)=>{n.d(e,{a:()=>A});var a=n(19051),i=n(85168),s=n(81222),o=n(53334),p=n(53073),r=n(63814),l=n(10810),c=n(85471),d=n(36620),u=n(6028);const A=(0,l.nY)("app-api-apps",{state:()=>({apps:[],updateCount:(0,s.C)("settings","appstoreExAppUpdateCount",0),loading:{},loadingList:!1,statusUpdater:null,daemonAccessible:(0,s.C)("settings","defaultDaemonConfigAccessible",!1),defaultDaemon:(0,s.C)("settings","defaultDaemonConfig",null),dockerDaemons:[]}),getters:{getLoading:t=>e=>t.loading[e]??!1,getAllApps:t=>t.apps,getUpdateCount:t=>t.updateCount,getDaemonAccessible:t=>t.daemonAccessible,getDefaultDaemon:t=>t.defaultDaemon,getAppStatus:t=>e=>t.apps.find(t=>t.id===e)?.status||null,getStatusUpdater:t=>t.statusUpdater,getInitializingOrDeployingApps:t=>t.apps.filter(t=>t?.status?.action&&("deploy"===t?.status?.action||"init"===t.status.action||"healthcheck"===t.status.action)&&""!==t.status.type)},actions:{appsApiFailure(t){(0,i.Qg)((0,o.Tl)("settings","An error occurred during the request. Unable to proceed.")+"<br>"+t.error.response.data.data.message,{isHTML:!0}),d.A.error(t)},setLoading(t,e){c.Ay.set(this.loading,t,e)},setError(t,e){(Array.isArray(t)?t:[t]).forEach(t=>{const n=this.apps.find(e=>e.id===t);n&&(n.error=e)})},enableApp(t,e,n){return this.setLoading(t,!0),this.setLoading("install",!0),(0,p.C5)().then(()=>a.Ay.post((0,r.Jv)(`/apps/app_api/apps/enable/${t}/${e.name}`),{deployOptions:n}).then(n=>{this.setLoading(t,!1),this.setLoading("install",!1);const s=this.apps.find(e=>e.id===t);return s&&(s.installed||(s.installed=!0,s.needsDownload=!1,s.daemon=e,s.status={type:"install",action:"deploy",init:0,deploy:0}),s.active=!0,s.canUnInstall=!1,s.removable=!0,s.error=""),this.updateAppsStatus(),a.Ay.get((0,r.Jv)("apps/files")).then(()=>{n.data.update_required&&((0,i.cf)((0,o.Tl)("settings","The app has been enabled but needs to be updated."),{onClick:()=>window.location.reload(),close:!1}),setTimeout(()=>{location.reload()},5e3))}).catch(()=>{this.setError(t,(0,o.Tl)("settings","Error: This app cannot be enabled because it makes the server unstable"))})}).catch(e=>{this.setLoading(t,!1),this.setLoading("install",!1),this.setError(t,e.response.data.data.message),this.appsApiFailure({appId:t,error:e})})).catch(()=>{this.setLoading(t,!1),this.setLoading("install",!1)})},forceEnableApp(t){return this.setLoading(t,!0),this.setLoading("install",!0),(0,p.C5)().then(()=>u.A.post((0,r.Jv)("/apps/app_api/apps/force"),{appId:t}).then(()=>{location.reload()}).catch(e=>{this.setLoading(t,!1),this.setLoading("install",!1),this.setError(t,e.response.data.data.message),this.appsApiFailure({appId:t,error:e})})).catch(()=>{this.setLoading(t,!1),this.setLoading("install",!1)})},disableApp(t){return this.setLoading(t,!0),(0,p.C5)().then(()=>u.A.get((0,r.Jv)(`apps/app_api/apps/disable/${t}`)).then(()=>{this.setLoading(t,!1);const e=this.apps.find(e=>e.id===t);return e&&(e.active=!1,e.removable&&(e.canUnInstall=!0)),!0}).catch(e=>{this.setLoading(t,!1),this.appsApiFailure({appId:t,error:e})})).catch(()=>{this.setLoading(t,!1)})},uninstallApp(t,e){return this.setLoading(t,!0),(0,p.C5)().then(()=>u.A.get((0,r.Jv)(`/apps/app_api/apps/uninstall/${t}?removeData=${e}`)).then(()=>{this.setLoading(t,!1);const e=this.apps.find(e=>e.id===t);return e&&(e.active=!1,e.needsDownload=!0,e.installed=!1,e.canUnInstall=!1,e.canInstall=!0,e.daemon=null,e.status={},null!==e.update&&this.updateCount--,e.update=void 0),!0}).catch(e=>{this.setLoading(t,!1),this.appsApiFailure({appId:t,error:e})}))},updateApp(t){return this.setLoading(t,!0),this.setLoading("install",!0),(0,p.C5)().then(()=>u.A.get((0,r.Jv)(`/apps/app_api/apps/update/${t}`)).then(()=>{this.setLoading(t,!1),this.setLoading("install",!1);const e=this.apps.find(e=>e.id===t);if(e){const t=e.update;e.update=void 0,e.version=t||e.version,e.status={type:"update",action:"deploy",init:0,deploy:0},e.error=""}return this.updateCount--,this.updateAppsStatus(),!0}).catch(e=>{this.setLoading(t,!1),this.setLoading("install",!1),this.appsApiFailure({appId:t,error:e})})).catch(()=>{this.setLoading(t,!1),this.setLoading("install",!1)})},async fetchAllApps(){this.loadingList=!0;try{const t=await u.A.get((0,r.Jv)("/apps/app_api/apps/list"));return this.apps=t.data.apps,this.loadingList=!1,!0}catch(t){d.A.error(t),(0,i.Qg)((0,o.Tl)("settings","An error occurred during the request. Unable to proceed.")),this.loadingList=!1}},async fetchAppStatus(t){return u.A.get((0,r.Jv)(`/apps/app_api/apps/status/${t}`)).then(e=>{const n=this.apps.find(e=>e.id===t);n&&(n.status=e.data);const a=this.getInitializingOrDeployingApps;d.A.debug("initializingOrDeployingApps after setAppStatus",{initializingOrDeployingApps:a}),0===a.length&&(d.A.debug("clearing interval"),clearInterval(this.statusUpdater),this.statusUpdater=null),Object.hasOwn(e.data,"error")&&""!==e.data.error&&1===a.length&&(clearInterval(this.statusUpdater),this.statusUpdater=null)}).catch(e=>{this.appsApiFailure({appId:t,error:e}),this.apps=this.apps.filter(e=>e.id!==t),this.updateAppsStatus()})},async fetchDockerDaemons(){try{const{data:t}=await a.Ay.get((0,r.Jv)("/apps/app_api/daemons"));this.defaultDaemon=t.daemons.find(e=>e.name===t.default_daemon_config),this.dockerDaemons=t.daemons.filter(t=>"docker-install"===t.accepts_deploy_id)}catch(t){return d.A.error("[app-api-store] Failed to fetch Docker daemons",{error:t}),!1}return!0},updateAppsStatus(){clearInterval(this.statusUpdater),0!==this.getInitializingOrDeployingApps.length&&(this.statusUpdater=setInterval(()=>{const t=this.getInitializingOrDeployingApps;d.A.debug("initializingOrDeployingApps",{initializingOrDeployingApps:t}),t.forEach(t=>{this.fetchAppStatus(t.id)})},2e3))}}})},65405:(t,e,n)=>{n.d(e,{A:()=>p});var a=n(71354),i=n.n(a),s=n(76314),o=n.n(s)()(i());o.push([t.id,"\n.deploy-option[data-v-0ec0c17d] {\n\tmargin: calc(var(--default-grid-baseline) * 4) 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: flex-start;\n&__hint[data-v-0ec0c17d] {\n\t\tmargin-top: 4px;\n\t\tfont-size: 0.8em;\n\t\tcolor: var(--color-text-maxcontrast);\n}\n}\n.envs[data-v-0ec0c17d] {\n\twidth: 100%;\n\toverflow: auto;\n\theight: 100%;\n\tmax-height: 300px;\nli[data-v-0ec0c17d] {\n\t\tmargin: 10px 0;\n}\n}\n","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreSidebar/AppDeployOptionsModal.vue"],names:[],mappings:";AA6TA;CACA,gDAAA;CACA,aAAA;CACA,sBAAA;CACA,uBAAA;AAEA;EACA,eAAA;EACA,gBAAA;EACA,oCAAA;AACA;AACA;AAEA;CACA,WAAA;CACA,cAAA;CACA,YAAA;CACA,iBAAA;AAEA;EACA,cAAA;AACA;AACA",sourcesContent:["\x3c!--\n - SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n--\x3e\n\n<template>\n\t<NcDialog\n\t\t:open=\"show\"\n\t\tsize=\"normal\"\n\t\t:name=\"t('settings', 'Advanced deploy options')\"\n\t\t@update:open=\"$emit('update:show', $event)\">\n\t\t<div class=\"modal__content\">\n\t\t\t<p class=\"deploy-option__hint\">\n\t\t\t\t{{ configuredDeployOptions === null ? t('settings', 'Edit ExApp deploy options before installation') : t('settings', 'Configured ExApp deploy options. Can be set only during installation') }}.\n\t\t\t\t<a v-if=\"deployOptionsDocsUrl\" :href=\"deployOptionsDocsUrl\">\n\t\t\t\t\t{{ t('settings', 'Learn more') }}\n\t\t\t\t</a>\n\t\t\t</p>\n\t\t\t<h3 v-if=\"environmentVariables.length > 0 || (configuredDeployOptions !== null && configuredDeployOptions.environment_variables.length > 0)\">\n\t\t\t\t{{ t('settings', 'Environment variables') }}\n\t\t\t</h3>\n\t\t\t<template v-if=\"configuredDeployOptions === null\">\n\t\t\t\t<div\n\t\t\t\t\tv-for=\"envVar in environmentVariables\"\n\t\t\t\t\t:key=\"envVar.envName\"\n\t\t\t\t\tclass=\"deploy-option\">\n\t\t\t\t\t<NcTextField :label=\"envVar.displayName\" :value.sync=\"deployOptions.environment_variables[envVar.envName]\" />\n\t\t\t\t\t<p class=\"deploy-option__hint\">\n\t\t\t\t\t\t{{ envVar.description }}\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<fieldset\n\t\t\t\tv-else-if=\"Object.keys(configuredDeployOptions).length > 0\"\n\t\t\t\tclass=\"envs\">\n\t\t\t\t<legend class=\"deploy-option__hint\">\n\t\t\t\t\t{{ t('settings', 'ExApp container environment variables') }}\n\t\t\t\t</legend>\n\t\t\t\t<NcTextField\n\t\t\t\t\tv-for=\"(value, key) in configuredDeployOptions.environment_variables\"\n\t\t\t\t\t:key=\"key\"\n\t\t\t\t\t:label=\"value.displayName ?? key\"\n\t\t\t\t\t:helper-text=\"value.description\"\n\t\t\t\t\t:value=\"value.value\"\n\t\t\t\t\treadonly />\n\t\t\t</fieldset>\n\t\t\t<template v-else>\n\t\t\t\t<p class=\"deploy-option__hint\">\n\t\t\t\t\t{{ t('settings', 'No environment variables defined') }}\n\t\t\t\t</p>\n\t\t\t</template>\n\n\t\t\t<h3>{{ t('settings', 'Mounts') }}</h3>\n\t\t\t<template v-if=\"configuredDeployOptions === null\">\n\t\t\t\t<p class=\"deploy-option__hint\">\n\t\t\t\t\t{{ t('settings', 'Define host folder mounts to bind to the ExApp container') }}\n\t\t\t\t</p>\n\t\t\t\t<NcNoteCard type=\"info\" :text=\"t('settings', 'Must exist on the Deploy daemon host prior to installing the ExApp')\" />\n\t\t\t\t<div\n\t\t\t\t\tv-for=\"mount in deployOptions.mounts\"\n\t\t\t\t\t:key=\"mount.hostPath\"\n\t\t\t\t\tclass=\"deploy-option\"\n\t\t\t\t\tstyle=\"display: flex; align-items: center; justify-content: space-between; flex-direction: row;\">\n\t\t\t\t\t<NcTextField :label=\"t('settings', 'Host path')\" :value.sync=\"mount.hostPath\" />\n\t\t\t\t\t<NcTextField :label=\"t('settings', 'Container path')\" :value.sync=\"mount.containerPath\" />\n\t\t\t\t\t<NcCheckboxRadioSwitch :checked.sync=\"mount.readonly\">\n\t\t\t\t\t\t{{ t('settings', 'Read-only') }}\n\t\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Remove mount')\"\n\t\t\t\t\t\tstyle=\"margin-top: 6px;\"\n\t\t\t\t\t\t@click=\"removeMount(mount)\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiDeleteOutline\" />\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\t<div v-if=\"addingMount\" class=\"deploy-option\">\n\t\t\t\t\t<h4>\n\t\t\t\t\t\t{{ t('settings', 'New mount') }}\n\t\t\t\t\t</h4>\n\t\t\t\t\t<div style=\"display: flex; align-items: center; justify-content: space-between; flex-direction: row;\">\n\t\t\t\t\t\t<NcTextField\n\t\t\t\t\t\t\tref=\"newMountHostPath\"\n\t\t\t\t\t\t\t:label=\"t('settings', 'Host path')\"\n\t\t\t\t\t\t\t:aria-label=\"t('settings', 'Enter path to host folder')\"\n\t\t\t\t\t\t\t:value.sync=\"newMountPoint.hostPath\" />\n\t\t\t\t\t\t<NcTextField\n\t\t\t\t\t\t\t:label=\"t('settings', 'Container path')\"\n\t\t\t\t\t\t\t:aria-label=\"t('settings', 'Enter path to container folder')\"\n\t\t\t\t\t\t\t:value.sync=\"newMountPoint.containerPath\" />\n\t\t\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\t\t\t:checked.sync=\"newMountPoint.readonly\"\n\t\t\t\t\t\t\t:aria-label=\"t('settings', 'Toggle read-only mode')\">\n\t\t\t\t\t\t\t{{ t('settings', 'Read-only') }}\n\t\t\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div style=\"display: flex; align-items: center; margin-top: 4px;\">\n\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\t:aria-label=\"t('settings', 'Confirm adding new mount')\"\n\t\t\t\t\t\t\t@click=\"addMountPoint\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiCheck\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('settings', 'Confirm') }}\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\t:aria-label=\"t('settings', 'Cancel adding mount')\"\n\t\t\t\t\t\t\tstyle=\"margin-left: 4px;\"\n\t\t\t\t\t\t\t@click=\"cancelAddMountPoint\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiClose\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('settings', 'Cancel') }}\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<NcButton\n\t\t\t\t\tv-if=\"!addingMount\"\n\t\t\t\t\t:aria-label=\"t('settings', 'Add mount')\"\n\t\t\t\t\tstyle=\"margin-top: 5px;\"\n\t\t\t\t\t@click=\"startAddingMount\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiPlus\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('settings', 'Add mount') }}\n\t\t\t\t</NcButton>\n\t\t\t</template>\n\t\t\t<template v-else-if=\"configuredDeployOptions.mounts.length > 0\">\n\t\t\t\t<p class=\"deploy-option__hint\">\n\t\t\t\t\t{{ t('settings', 'ExApp container mounts') }}\n\t\t\t\t</p>\n\t\t\t\t<div\n\t\t\t\t\tv-for=\"mount in configuredDeployOptions.mounts\"\n\t\t\t\t\t:key=\"mount.hostPath\"\n\t\t\t\t\tclass=\"deploy-option\"\n\t\t\t\t\tstyle=\"display: flex; align-items: center; justify-content: space-between; flex-direction: row;\">\n\t\t\t\t\t<NcTextField :label=\"t('settings', 'Host path')\" :value.sync=\"mount.hostPath\" readonly />\n\t\t\t\t\t<NcTextField :label=\"t('settings', 'Container path')\" :value.sync=\"mount.containerPath\" readonly />\n\t\t\t\t\t<NcCheckboxRadioSwitch :checked.sync=\"mount.readonly\" disabled>\n\t\t\t\t\t\t{{ t('settings', 'Read-only') }}\n\t\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<p v-else class=\"deploy-option__hint\">\n\t\t\t\t{{ t('settings', 'No mounts defined') }}\n\t\t\t</p>\n\t\t</div>\n\n\t\t<template v-if=\"!app.active && (app.canInstall || app.isCompatible) && configuredDeployOptions === null\" #actions>\n\t\t\t<NcButton\n\t\t\t\t:title=\"enableButtonTooltip\"\n\t\t\t\t:aria-label=\"enableButtonTooltip\"\n\t\t\t\tvariant=\"primary\"\n\t\t\t\t:disabled=\"!app.canInstall || installing || isLoading || !defaultDeployDaemonAccessible || isInitializing || isDeploying\"\n\t\t\t\t@click.stop=\"submitDeployOptions\">\n\t\t\t\t{{ enableButtonText }}\n\t\t\t</NcButton>\n\t\t</template>\n\t</NcDialog>\n</template>\n\n<script>\nimport { mdiCheck, mdiClose, mdiDeleteOutline, mdiPlus } from '@mdi/js'\nimport axios from '@nextcloud/axios'\nimport { emit } from '@nextcloud/event-bus'\nimport { loadState } from '@nextcloud/initial-state'\nimport { generateUrl } from '@nextcloud/router'\nimport { computed, ref } from 'vue'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'\nimport NcDialog from '@nextcloud/vue/components/NcDialog'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport NcNoteCard from '@nextcloud/vue/components/NcNoteCard'\nimport NcTextField from '@nextcloud/vue/components/NcTextField'\nimport AppManagement from '../../mixins/AppManagement.js'\nimport { useAppApiStore } from '../../store/app-api-store.ts'\nimport { useAppsStore } from '../../store/apps-store.ts'\n\nexport default {\n\tname: 'AppDeployOptionsModal',\n\tcomponents: {\n\t\tNcDialog,\n\t\tNcTextField,\n\t\tNcButton,\n\t\tNcNoteCard,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcIconSvgWrapper,\n\t},\n\n\tmixins: [AppManagement],\n\tprops: {\n\t\tapp: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\tshow: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tsetup(props) {\n\t\t// for AppManagement mixin\n\t\tconst store = useAppsStore()\n\t\tconst appApiStore = useAppApiStore()\n\n\t\tconst environmentVariables = computed(() => {\n\t\t\tif (props.app?.releases?.length === 1) {\n\t\t\t\treturn props.app?.releases[0]?.environmentVariables || []\n\t\t\t}\n\t\t\treturn []\n\t\t})\n\n\t\tconst deployOptions = ref({\n\t\t\tenvironment_variables: environmentVariables.value.reduce((acc, envVar) => {\n\t\t\t\tacc[envVar.envName] = envVar.default || ''\n\t\t\t\treturn acc\n\t\t\t}, {}),\n\t\t\tmounts: [],\n\t\t})\n\n\t\treturn {\n\t\t\tenvironmentVariables,\n\t\t\tdeployOptions,\n\t\t\tstore,\n\t\t\tappApiStore,\n\t\t\tmdiPlus,\n\t\t\tmdiCheck,\n\t\t\tmdiClose,\n\t\t\tmdiDeleteOutline,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\taddingMount: false,\n\t\t\tnewMountPoint: {\n\t\t\t\thostPath: '',\n\t\t\t\tcontainerPath: '',\n\t\t\t\treadonly: false,\n\t\t\t},\n\n\t\t\taddingPortBinding: false,\n\t\t\tconfiguredDeployOptions: null,\n\t\t\tdeployOptionsDocsUrl: loadState('settings', 'deployOptionsDocsUrl', null),\n\t\t}\n\t},\n\n\twatch: {\n\t\tshow(newShow) {\n\t\t\tif (newShow) {\n\t\t\t\tthis.fetchExAppDeployOptions()\n\t\t\t} else {\n\t\t\t\tthis.configuredDeployOptions = null\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\tstartAddingMount() {\n\t\t\tthis.addingMount = true\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.newMountHostPath.focus()\n\t\t\t})\n\t\t},\n\n\t\taddMountPoint() {\n\t\t\tthis.deployOptions.mounts.push(this.newMountPoint)\n\t\t\tthis.newMountPoint = {\n\t\t\t\thostPath: '',\n\t\t\t\tcontainerPath: '',\n\t\t\t\treadonly: false,\n\t\t\t}\n\t\t\tthis.addingMount = false\n\t\t},\n\n\t\tcancelAddMountPoint() {\n\t\t\tthis.newMountPoint = {\n\t\t\t\thostPath: '',\n\t\t\t\tcontainerPath: '',\n\t\t\t\treadonly: false,\n\t\t\t}\n\t\t\tthis.addingMount = false\n\t\t},\n\n\t\tremoveMount(mountToRemove) {\n\t\t\tthis.deployOptions.mounts = this.deployOptions.mounts.filter((mount) => mount !== mountToRemove)\n\t\t},\n\n\t\tasync fetchExAppDeployOptions() {\n\t\t\treturn axios.get(generateUrl(`/apps/app_api/apps/deploy-options/${this.app.id}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tthis.configuredDeployOptions = response.data\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tthis.configuredDeployOptions = null\n\t\t\t\t})\n\t\t},\n\n\t\tasync submitDeployOptions() {\n\t\t\tawait this.appApiStore.fetchDockerDaemons()\n\t\t\tif (this.appApiStore.dockerDaemons.length === 1 && this.app.needsDownload) {\n\t\t\t\tthis.enable(this.app.id, this.appApiStore.dockerDaemons[0], this.deployOptions)\n\t\t\t} else if (this.app.needsDownload) {\n\t\t\t\temit('showDaemonSelectionModal', this.deployOptions)\n\t\t\t} else {\n\t\t\t\tthis.enable(this.app.id, this.app.daemon, this.deployOptions)\n\t\t\t}\n\t\t\tthis.$emit('update:show', false)\n\t\t},\n\t},\n}\n<\/script>\n\n<style scoped>\n.deploy-option {\n\tmargin: calc(var(--default-grid-baseline) * 4) 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: flex-start;\n\n\t&__hint {\n\t\tmargin-top: 4px;\n\t\tfont-size: 0.8em;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\n\n.envs {\n\twidth: 100%;\n\toverflow: auto;\n\theight: 100%;\n\tmax-height: 300px;\n\n\tli {\n\t\tmargin: 10px 0;\n\t}\n}\n</style>\n"],sourceRoot:""}]);const p=o},69697:(t,e,n)=>{n.d(e,{A:()=>_});var a=n(9165),i=n(53334),s=n(85471),o=n(6695);const p=(0,s.pM)({name:"AppScore",components:{NcIconSvgWrapper:o.A},props:{score:{type:Number,required:!0}},setup:()=>({mdiStar:a.ZL5,mdiStarHalfFull:a.tdF,mdiStarOutline:a.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=n(85072),l=n.n(r),c=n(97825),d=n.n(c),u=n(77659),A=n.n(u),g=n(55056),m=n.n(g),h=n(10540),v=n.n(h),C=n(41113),f=n.n(C),b=n(62272),y={};y.styleTagTransform=f(),y.setAttributes=m(),y.insert=A().bind(null,"head"),y.domAPI=d(),y.insertStyleElement=v(),l()(b.A,y),b.A&&b.A.locals&&b.A.locals;const _=(0,n(14486).A)(p,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(n){return e("NcIconSvgWrapper",{key:`full-star-${n}`,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(n){return e("NcIconSvgWrapper",{key:`empty-star-${n}`,attrs:{path:t.mdiStarOutline,inline:""}})})],2)},[],!1,null,"0774afca",null).exports},74142:(t,e,n)=>{n.d(e,{A:()=>p});var a=n(71354),i=n.n(a),s=n(76314),o=n.n(s)()(i());o.push([t.id,".app-description[data-v-1d5b4408]{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 p=o},81671:(t,e,n)=>{n.d(e,{A:()=>P});var a=n(94219),i=n(63814),s=n(85471),o=n(74095),p=n(42507);const r={name:"FormatListBulletedIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};var l=n(14486);const c=(0,l.A)(r,function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon format-list-bulleted-icon",attrs:{"aria-hidden":t.title?null:"true","aria-label":t.title,role:"img"},on:{click:function(e){return t.$emit("click",e)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M7,5H21V7H7V5M7,13V11H21V13H7M4,4.5A1.5,1.5 0 0,1 5.5,6A1.5,1.5 0 0,1 4,7.5A1.5,1.5 0 0,1 2.5,6A1.5,1.5 0 0,1 4,4.5M4,10.5A1.5,1.5 0 0,1 5.5,12A1.5,1.5 0 0,1 4,13.5A1.5,1.5 0 0,1 2.5,12A1.5,1.5 0 0,1 4,10.5M7,19V17H21V19H7M4,16.5A1.5,1.5 0 0,1 5.5,18A1.5,1.5 0 0,1 4,19.5A1.5,1.5 0 0,1 2.5,18A1.5,1.5 0 0,1 4,16.5Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])},[],!1,null,null,null).exports;var d=n(1522),u=n(23453),A=n(62938),g=n(846);const m={name:"DaemonSelectionEntry",components:{NcListItem:d.A},mixins:[u.A],props:{daemon:{type:Object,required:!0},isDefault:{type:Boolean,required:!0},app:{type:Object,required:!0},deployOptions:{type:Object,required:!1,default:()=>({})}},setup:()=>({store:(0,g.T)(),appApiStore:(0,A.a)()}),computed:{itemTitle(){return this.daemon.name+" - "+this.daemon.display_name},daemons(){return this.appApiStore.dockerDaemons}},methods:{closeModal(){this.$emit("close")},selectDaemonAndInstall(){this.closeModal(),this.enable(this.app.id,this.daemon,this.deployOptions)}}},h=(0,l.A)(m,function(){var t=this;return(0,t._self._c)("NcListItem",{attrs:{name:t.itemTitle,details:t.isDefault?t.t("settings","Default"):"","force-display-actions":!0,"counter-number":t.daemon.exAppsCount,active:t.isDefault,"counter-type":"highlighted"},on:{click:function(e){return e.stopPropagation(),t.selectDaemonAndInstall.apply(null,arguments)}},scopedSlots:t._u([{key:"subname",fn:function(){return[t._v("\n\t\t"+t._s(t.daemon.accepts_deploy_id)+"\n\t")]},proxy:!0}])})},[],!1,null,null,null).exports,v={__name:"DaemonSelectionList",props:{app:{type:Object,required:!0},deployOptions:{type:Object,required:!1,default:()=>({})}},emits:["close"],setup(t,{emit:e}){const n=(0,A.a)(),a=(0,s.EW)(()=>n.dockerDaemons),r=(0,s.EW)(()=>n.defaultDaemon),l=(0,s.EW)(()=>(0,i.Jv)("/settings/admin/app_api"));return{__sfc:!0,emit:e,appApiStore:n,dockerDaemons:a,defaultDaemon:r,appApiAdminPage:l,closeModal:function(){e("close")},NcButton:o.A,NcEmptyContent:p.A,FormatListBullet:c,DaemonSelectionEntry:h}}};var C=n(85072),f=n.n(C),b=n(97825),y=n.n(b),_=n(77659),x=n.n(_),w=n(55056),S=n.n(w),k=n(10540),N=n.n(k),D=n(41113),I=n.n(D),T=n(2602),E={};E.styleTagTransform=I(),E.setAttributes=S(),E.insert=x().bind(null,"head"),E.domAPI=y(),E.insertStyleElement=N(),f()(T.A,E),T.A&&T.A.locals&&T.A.locals;const B=(0,l.A)(v,function(){var t=this,e=t._self._c,n=t._self._setupProxy;return e("div",{staticClass:"daemon-selection-list"},[n.dockerDaemons.length>0?e("ul",{attrs:{"aria-label":t.t("settings","Registered Deploy daemons list")}},t._l(n.dockerDaemons,function(a){return e(n.DaemonSelectionEntry,{key:a.id,attrs:{daemon:a,"is-default":n.defaultDaemon.name===a.name,app:t.app,"deploy-options":t.deployOptions},on:{close:n.closeModal}})}),1):e(n.NcEmptyContent,{staticClass:"daemon-selection-list__empty-content",attrs:{name:t.t("settings","No Deploy daemons configured"),description:t.t("settings","Register a custom one or setup from available templates")},scopedSlots:t._u([{key:"icon",fn:function(){return[e(n.FormatListBullet,{attrs:{size:20}})]},proxy:!0},{key:"action",fn:function(){return[e(n.NcButton,{attrs:{href:n.appApiAdminPage}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Manage Deploy daemons"))+"\n\t\t\t")])]},proxy:!0}])})],1)},[],!1,null,"a31da1f4",null).exports,O={__name:"DaemonSelectionDialog",props:{show:{type:Boolean,required:!0},app:{type:Object,required:!0},deployOptions:{type:Object,required:!1,default:()=>({})}},emits:["update:show"],setup:(t,{emit:e})=>({__sfc:!0,emit:e,closeModal:function(){e("update:show",!1)},NcDialog:a.A,DaemonSelectionList:B})},P=(0,l.A)(O,function(){var t=this,e=t._self._c,n=t._self._setupProxy;return e(n.NcDialog,{attrs:{open:t.show,name:t.t("settings","Choose Deploy Daemon for {appName}",{appName:t.app.name}),size:"normal"},on:{"update:open":n.closeModal}},[e(n.DaemonSelectionList,{attrs:{app:t.app,"deploy-options":t.deployOptions},on:{close:n.closeModal}})],1)},[],!1,null,null,null).exports},86438:(t,e,n)=>{n.d(e,{A:()=>i});var a=n(9165);const i=Object.freeze({discover:a.tZc,installed:a.EzL,enabled:a.Tfj,disabled:a.hyP,bundles:a.xR9,supported:a.UD9,featured:a.ZL5,updates:a.XCd,ai:a.aKS,auth:a.Mx_,customization:a.ED,dashboard:a.Knj,files:a.fEr,games:a.v3v,integration:a.bur,monitoring:a.y48,multimedia:a.WI,office:a.Ku3,organization:a.d9V,search:a.U4M,security:a.JiW,social:a.aie,tools:a.QKT,workflow:a.Rt7})},87755:(t,e,n)=>{n.d(e,{A:()=>p});var a=n(71354),i=n.n(a),s=n(76314),o=n.n(s)()(i());o.push([t.id,'/*!\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */.app-item[data-v-50fa5285]{position:relative}.app-item[data-v-50fa5285]:hover{background-color:var(--color-background-dark)}.app-item--list-view[data-v-50fa5285]{--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-50fa5285]{background-color:var(--color-background-dark)}.app-item--list-view>*[data-v-50fa5285]{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-50fa5285]{width:var(--default-clickable-area);height:auto;text-align:end}.app-item--list-view .app-image-icon svg[data-v-50fa5285],.app-item--list-view .app-image-icon .icon-settings-dark[data-v-50fa5285]{margin-top:5px;width:20px;height:20px;opacity:.5;background-size:cover;display:inline-block}.app-item--list-view .app-name[data-v-50fa5285]{padding:0 var(--app-item-padding)}.app-item--list-view .app-name--link[data-v-50fa5285]{height:var(--app-item-height);display:flex;align-items:center}.app-item--list-view .app-name--link[data-v-50fa5285]::after{content:"";position:absolute;inset-inline:0;height:var(--app-item-height)}.app-item--list-view .app-actions[data-v-50fa5285]{display:flex;gap:var(--app-item-padding);flex-wrap:wrap;justify-content:end}.app-item--list-view .app-actions .icon-loading-small[data-v-50fa5285]{display:inline-block;top:4px;margin-inline-end:10px}@media only screen and (max-width: 900px){.app-item--list-view .app-version[data-v-50fa5285],.app-item--list-view .app-level[data-v-50fa5285]{display:none}}@media only screen and (max-width: 512px){.app-item--list-view .app-actions[data-v-50fa5285]{display:none}}.app-item--store-view[data-v-50fa5285]{padding:30px}.app-item--store-view .app-image-icon .icon-settings-dark[data-v-50fa5285]{width:100%;height:150px;background-size:45px;opacity:.5}.app-item--store-view .app-image-icon svg[data-v-50fa5285]{position:absolute;bottom:43px;width:64px;height:64px;opacity:.1}.app-item--store-view .app-name[data-v-50fa5285]{margin:5px 0}.app-item--store-view .app-name--link[data-v-50fa5285]::after{content:"";position:absolute;inset-block:0;inset-inline:0}.app-item--store-view .app-actions[data-v-50fa5285]{margin:10px 0}@media only screen and (min-width: 1601px){.app-item--store-view[data-v-50fa5285]{width:25%}.app-item--store-view.app-item--with-sidebar[data-v-50fa5285]{width:33%}}@media only screen and (max-width: 1600px){.app-item--store-view[data-v-50fa5285]{width:25%}.app-item--store-view.app-item--with-sidebar[data-v-50fa5285]{width:33%}}@media only screen and (max-width: 1400px){.app-item--store-view[data-v-50fa5285]{width:33%}.app-item--store-view.app-item--with-sidebar[data-v-50fa5285]{width:50%}}@media only screen and (max-width: 900px){.app-item--store-view[data-v-50fa5285]{width:50%}.app-item--store-view.app-item--with-sidebar[data-v-50fa5285]{width:100%}}@media only screen and (max-width: 1024px){.app-item--store-view[data-v-50fa5285]{width:50%}}@media only screen and (max-width: 480px){.app-item--store-view[data-v-50fa5285]{width:100%}}.app-icon[data-v-50fa5285]{filter:var(--background-invert-if-bright)}.app-image[data-v-50fa5285]{position:relative;height:150px;opacity:1;overflow:hidden}.app-image img[data-v-50fa5285]{width:100%}.app-version[data-v-50fa5285]{color:var(--color-text-maxcontrast)}',"",{version:3,sources:["webpack://./core/css/variables.scss","webpack://./apps/settings/src/components/AppList/AppItem.vue"],names:[],mappings:"AAEA;;;EAAA,CCEA,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,cAAA,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,cAAA,CACA,6BAAA,CAGD,mDACC,YAAA,CACA,2BAAA,CACA,cAAA,CACA,mBAAA,CAEA,uEACC,oBAAA,CACA,OAAA,CACA,sBAAA,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,aAAA,CACA,cAAA,CAGD,oDACC,aAAA,CAGD,2CAlCD,uCAmCE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,2CA1CD,uCA2CE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,2CAlDD,uCAmDE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,0CA1DD,uCA2DE,SAAA,CAEA,8DACC,UAAA,CAAA,CAIF,2CAlED,uCAmEE,SAAA,CAAA,CAGD,0CAtED,uCAuEE,UAAA,CAAA,CAKH,2BACC,yCAAA,CAGD,4BACC,iBAAA,CACA,YAAA,CACA,SAAA,CACA,eAAA,CAEA,gCACC,UAAA,CAIF,8BACC,mCAAA",sourcesContent:['@use \'sass:color\';\n\n/*!\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n// SCSS darken/lighten function override\n@function nc-darken($color, $value) {\n\t@return color.adjust($color, $lightness: - $value, $space: hsl);\n}\n\n@function nc-lighten($color, $value) {\n\t@return color.adjust($color, $lightness: $value, $space: hsl);\n}\n\n// SCSS variables\n// DEPRECATED, please use CSS4 vars\n$color-main-text: #222 !default; // Not #000 for better readability\n$color-main-background: #fff !default;\n$color-main-background-translucent: rgba($color-main-background, .97) !default;\n\n// used for different active/hover/focus/disabled states\n$color-background-hover: nc-darken($color-main-background, 4%) !default;\n$color-background-dark: nc-darken($color-main-background, 7%) !default;\n$color-background-darker: nc-darken($color-main-background, 14%) !default;\n\n$color-placeholder-light: nc-darken($color-main-background, 10%) !default;\n$color-placeholder-dark: nc-darken($color-main-background, 20%) !default;\n\n$color-primary: #0082c9 !default;\n$color-primary-hover: color.mix($color-primary, $color-main-background, 80%) !default;\n\n$color-primary-light: color.mix($color-primary, $color-main-background, 10%) !default;\n$color-primary-light-text: $color-primary !default;\n$color-primary-light-hover: color.mix($color-primary-light, $color-main-text, 95%) !default;\n\n$color-primary-text: #ffffff !default;\n// do not use nc-darken/lighten in case of overriding because\n// primary-text is independent of color-main-text\n$color-primary-element-text-dark: color.adjust($color-primary-text, $lightness: -7%, $space: hsl) !default;\n$color-primary-element: $color-primary !default;\n$color-primary-element-hover: color.mix($color-primary-element, $color-main-background, 80%) !default;\n$color-primary-element-light: color.adjust($color-primary-element, $lightness: 15%, $space: hsl) !default;\n\n$color-error: #e9322d;\n$color-error-hover: color.mix($color-error, $color-main-background, 80%) !default;\n$color-warning: #eca700;\n$color-warning-hover: color.mix($color-warning, $color-main-background, 80%) !default;\n$color-success: #46ba61;\n$color-success-hover: color.mix($color-success, $color-main-background, 80%) !default;\n// used for svg\n$color-white: #fff;\n$color-black: #000;\n$color-yellow: #FC0;\n\n// rgb(118, 118, 118) / #767676\n// min. color contrast for normal text on white background according to WCAG AA\n// (Works as well: color: #000; opacity: 0.57;)\n$color-text-maxcontrast: nc-lighten($color-main-text, 33%) !default;\n\n$image-logo: url(\'../img/logo/logo.svg?v=1\') !default;\n$image-login-background: url(\'../img/background.png?v=2\') !default;\n$image-logoheader: url(\'../img/logo/logo.svg?v=1\') !default;\n$image-favicon: url(\'../img/logo/logo.svg?v=1\') !default;\n\n$color-loading-light: #ccc !default;\n$color-loading-dark: #444 !default;\n\n$color-box-shadow: color.adjust(nc-darken($color-main-background, 70%), $alpha: -0.5, $space: hsl) !default;\n\n// light border like file table or app-content list\n$color-border: nc-darken($color-main-background, 7%) !default;\n// darker border like inputs or very visible elements\n$color-border-dark: nc-darken($color-main-background, 14%) !default;\n\n$border-radius: 3px !default;\n$border-radius-large: 10px !default;\n// Pill-style button, value is large so big buttons also have correct roundness\n$border-radius-pill: 100px !default;\n\n$font-face: system-ui, -apple-system, "Segoe UI", Roboto, Oxygen-Sans, Cantarell, Ubuntu, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;\n$default-font-size: 15px;\n\n$default-line-height: 24px;\n\n$animation-quick: 100ms;\n$animation-slow: 300ms;\n\n// various structure data\n$header-height: 50px;\n$navigation-width: 300px;\n$sidebar-min-width: 300px;\n$sidebar-max-width: 500px;\n$list-min-width: 200px;\n$list-max-width: 300px;\n$header-menu-item-height: 44px;\n$header-menu-profile-item-height: 66px;\n\n// mobile. Keep in sync with core/js/js.js\n$breakpoint-mobile: 1024px;\n',"\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: end;\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\tinset-inline: 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-inline-end: 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\tinset-block: 0;\n\t\t\tinset-inline: 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 p=o},92621:(t,e,n)=>{n.d(e,{A:()=>p});var a=n(71354),i=n.n(a),s=n(76314),o=n.n(s)()(i());o.push([t.id,"\n.empty-content__loading[data-v-0105bd03] {\n\theight: 100%;\n}\n.app-settings-content__label[data-v-0105bd03] {\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:";AA2EA;CACA,YAAA;AACA;AAEA;CACA,iDAAA;CACA,4FAAA;CACA,yCAAA;CACA,0CAAA;CACA,sBAAA;AACA",sourcesContent:["\x3c!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n--\x3e\n\n<template>\n\t\x3c!-- Apps list --\x3e\n\t<NcAppContent\n\t\tclass=\"app-settings-content\"\n\t\t:page-heading=\"pageHeading\"\n\t\t:page-title=\"pageTitle\">\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\n\t\t\tv-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, onBeforeUnmount } from 'vue'\nimport { useRoute } from 'vue-router/composables'\nimport NcAppContent from '@nextcloud/vue/components/NcAppContent'\nimport NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent'\nimport NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'\nimport AppList from '../components/AppList.vue'\nimport AppStoreDiscoverSection from '../components/AppStoreDiscover/AppStoreDiscoverSection.vue'\nimport { APPS_SECTION_ENUM } from '../constants/AppsConstants.js'\nimport { useAppApiStore } from '../store/app-api-store.ts'\nimport { useAppsStore } from '../store/apps-store.ts'\n\nconst route = useRoute()\nconst store = useAppsStore()\nconst appApiStore = useAppApiStore()\n\n/**\n * ID of the current active category, default is `discover`\n */\nconst currentCategory = computed(() => route.params?.category ?? 'discover')\n\nconst viewLabel = computed<string>(() => APPS_SECTION_ENUM[currentCategory.value] ?? store.getCategoryById(currentCategory.value)?.displayName)\n\nconst pageHeading = t('settings', 'App Store')\nconst pageTitle = computed(() => `${viewLabel.value} - ${pageHeading}`) // NcAppContent automatically appends the instance name\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\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tif ((instance?.proxy as any).$store.getters.isAppApiEnabled) {\n\t\tappApiStore.fetchAllApps()\n\t\tappApiStore.updateAppsStatus()\n\t}\n})\nonBeforeUnmount(() => {\n\tclearInterval(appApiStore.getStatusUpdater)\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 p=o},92973:(t,e,n)=>{n.d(e,{l:()=>i});var a=n(53334);const i=Object.freeze({discover:(0,a.Tl)("settings","Discover"),installed:(0,a.Tl)("settings","Your apps"),enabled:(0,a.Tl)("settings","Active apps"),disabled:(0,a.Tl)("settings","Disabled apps"),updates:(0,a.Tl)("settings","Updates"),"app-bundles":(0,a.Tl)("settings","App bundles"),featured:(0,a.Tl)("settings","Featured apps"),supported:(0,a.Tl)("settings","Supported apps")})},96305:(t,e,n)=>{n.d(e,{A:()=>_});var a=n(85471),i=n(9165),s=n(53334),o=n(6695);const p=(0,a.pM)({__name:"AppLevelBadge",props:{level:null},setup(t){const e=t,n=(0,a.EW)(()=>300===e.level),p=(0,a.EW)(()=>200===e.level),r=(0,a.EW)(()=>n.value?i.UD9:i.Tfj),l=(0,a.EW)(()=>n.value?(0,s.Tl)("settings","Supported"):(0,s.Tl)("settings","Featured")),c=(0,a.EW)(()=>n.value?(0,s.Tl)("settings","This app is supported via your current Nextcloud subscription."):(0,s.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:n,isFeatured:p,badgeIcon:r,badgeText:l,badgeTitle:c,NcIconSvgWrapper:o.A}}});var r=n(85072),l=n.n(r),c=n(97825),d=n.n(c),u=n(77659),A=n.n(u),g=n(55056),m=n.n(g),h=n(10540),v=n.n(h),C=n(41113),f=n.n(C),b=n(39094),y={};y.styleTagTransform=f(),y.setAttributes=m(),y.insert=A().bind(null,"head"),y.domAPI=d(),y.insertStyleElement=v(),l()(b.A,y),b.A&&b.A.locals&&b.A.locals;const _=(0,n(14486).A)(p,function(){var t=this,e=t._self._c,n=t._self._setupProxy;return n.isSupported||n.isFeatured?e("span",{staticClass:"app-level-badge",class:{"app-level-badge--supported":n.isSupported},attrs:{title:n.badgeTitle}},[e(n.NcIconSvgWrapper,{attrs:{path:n.badgeIcon,size:20,inline:""}}),t._v("\n\t"+t._s(n.badgeText)+"\n")],1):t._e()},[],!1,null,"11da8cb3",null).exports},96624:(t,e,n)=>{n.d(e,{A:()=>p});var a=n(71354),i=n.n(a),s=n(76314),o=n.n(s)()(i());o.push([t.id,'.settings-markdown[data-v-62ec0d6b] a{text-decoration:underline}.settings-markdown[data-v-62ec0d6b] a::after{content:"↗";padding-inline:calc(var(--default-grid-baseline)/2)}.settings-markdown[data-v-62ec0d6b] 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-62ec0d6b] p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}.settings-markdown[data-v-62ec0d6b] li{position:relative}.settings-markdown[data-v-62ec0d6b] ul,.settings-markdown[data-v-62ec0d6b] ol{padding-inline-start:10px;margin-inline-start:10px}.settings-markdown[data-v-62ec0d6b] ul li{list-style-type:disc}.settings-markdown[data-v-62ec0d6b] ul>li>ul>li{list-style-type:circle}.settings-markdown[data-v-62ec0d6b] ul>li>ul>li ul li{list-style-type:square}.settings-markdown[data-v-62ec0d6b] blockquote{padding-inline-start:1em;border-inline-start:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-inline:0}',"",{version:3,sources:["webpack://./Markdown.vue","webpack://./apps/settings/src/components/Markdown.vue"],names:[],mappings:"AAAA,sCCEC,yBACC,CAAA,6CACA,WACC,CAAA,mDACA,CAAA,wCAIF,eACC,CAAA,eACA,CAAA,6CACA,CAAA,kCACA,CAAA,iBACA,CAAA,iBACA,CAAA,2CAGD,6CACC,CAAA,kCACA,CAAA,iBACA,CAAA,uCAGD,iBACC,CAAA,8EAGD,yBACC,CAAA,wBACA,CAAA,0CAGD,oBACC,CAAA,gDAGD,sBACC,CAAA,sDAGD,sBACC,CAAA,+CAGD,wBACC,CAAA,0DACA,CAAA,mCACA,CAAA,eACA",sourcesContent:['.settings-markdown :deep a{text-decoration:underline}.settings-markdown :deep a::after{content:"↗";padding-inline:calc(var(--default-grid-baseline)/2)}.settings-markdown :deep 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 :deep p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}.settings-markdown :deep li{position:relative}.settings-markdown :deep ul,.settings-markdown :deep ol{padding-inline-start:10px;margin-inline-start:10px}.settings-markdown :deep ul li{list-style-type:disc}.settings-markdown :deep ul>li>ul>li{list-style-type:circle}.settings-markdown :deep ul>li>ul>li ul li{list-style-type:square}.settings-markdown :deep blockquote{padding-inline-start:1em;border-inline-start:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-inline:0}',"\n.settings-markdown :deep {\n\ta {\n\t\ttext-decoration: underline;\n\t\t&::after {\n\t\t\tcontent: '↗';\n\t\t\tpadding-inline: calc(var(--default-grid-baseline) / 2);\n\t\t}\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-inline-start: 10px;\n\t\tmargin-inline-start: 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-inline-start: 1em;\n\t\tborder-inline-start: 4px solid var(--color-primary-element);\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tmargin-inline: 0;\n\t}\n}\n"],sourceRoot:""}]);const p=o},98856:(t,e,n)=>{n.d(e,{A:()=>T});var a=n(9165),i=n(74095),s=n(6695),o=n(81671);const p={name:"SvgFilterMixin",data:()=>({filterId:""}),computed:{filterUrl(){return`url(#${this.filterId})`}},mounted(){this.filterId="invertIconApps-"+Math.random().toString(36).substring(2)}};var r=n(14486);const l=(0,r.A)(p,void 0,void 0,!1,null,null,null).exports;var c=n(96305),d=n(69697),u=n(23453),A=n(62938),g=n(846);const m={name:"AppItem",components:{AppLevelBadge:c.A,AppScore:d.A,NcButton:i.A,NcIconSvgWrapper:s.A,DaemonSelectionDialog:o.A},mixins:[u.A,l],props:{app:{type:Object,required:!0},category:{type:String,required:!0},listView:{type:Boolean,default:!0},useBundleView:{type:Boolean,default:!1},headers:{type:String,default:null},inline:{type:Boolean,default:!1}},setup:()=>({store:(0,g.T)(),appApiStore:(0,A.a)(),mdiCogOutline:a.ED}),data:()=>({isSelected:!1,scrolled:!1,screenshotLoaded:!1,showSelectDaemonModal:!1}),computed:{hasRating(){return this.app.appstoreData&&this.app.appstoreData.ratingNumOverall>5},dataItemTag(){return this.listView?"td":"div"},withSidebar(){return!!this.$route.params.id},shouldDisplayDefaultIcon(){return this.listView&&!this.app.preview||!this.listView&&!this.screenshotLoaded}},watch:{"$route.params.id":function(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},showSelectionModal(){this.showSelectDaemonModal=!0},async enableButtonAction(){this.app?.app_api?(await this.appApiStore.fetchDockerDaemons(),1===this.appApiStore.dockerDaemons.length&&this.app.needsDownload?this.enable(this.app.id,this.appApiStore.dockerDaemons[0]):this.app.needsDownload?this.showSelectionModal():this.enable(this.app.id,this.app.daemon)):this.enable(this.app.id)}}};var h=n(85072),v=n.n(h),C=n(97825),f=n.n(C),b=n(77659),y=n.n(b),_=n(55056),x=n.n(_),w=n(10540),S=n.n(w),k=n(41113),N=n.n(k),D=n(87755),I={};I.styleTagTransform=N(),I.setAttributes=x(),I.insert=y().bind(null,"head"),I.domAPI=f(),I.insertStyleElement=S(),v()(D.A,I),D.A&&D.A.locals&&D.A.locals;const T=(0,r.A)(m,function(){var t=this,e=t._self._c;return e(t.listView?"tr":t.inline?"article":"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.app?.app_api&&t.shouldDisplayDefaultIcon?e("div",{staticClass:"icon-settings-dark"}):t.app.app_api&&t.shouldDisplayDefaultIcon?e("NcIconSvgWrapper",{staticStyle:{"min-width":"auto","min-height":"auto",height:"100%"},attrs:{path:t.mdiCogOutline,size:t.listView?24:48}}):t.listView&&t.app.preview&&!t.app.app_api?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()],1),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(" "),t.inline?t._e():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||t.isInitializing?e("div",{staticClass:"icon icon-loading-small"}):t._e(),t._v(" "),t.app.update?e("NcButton",{attrs:{variant:"primary",disabled:t.installing||t.isLoading||!t.defaultDeployDaemonAccessible||t.isManualInstall,title:t.updateButtonText},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:{variant:"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||t.isInitializing||t.isDeploying},on:{click:function(e){return e.stopPropagation(),t.disable(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.disableButtonText)+"\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,variant:"secondary",disabled:t.installing||t.isLoading||!t.defaultDeployDaemonAccessible},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,variant:"primary",disabled:!t.app.canInstall||t.installing||t.isLoading||!t.defaultDeployDaemonAccessible||t.isInitializing||t.isDeploying},on:{click:function(e){return e.stopPropagation(),t.enableButtonAction.apply(null,arguments)}}},[t._v("\n\t\t\t"+t._s(t.enableButtonText)+"\n\t\t")]),t._v(" "),t.app?.app_api&&t.showSelectDaemonModal?e("DaemonSelectionDialog",{attrs:{show:t.showSelectDaemonModal,app:t.app},on:{"update:show":function(e){t.showSelectDaemonModal=e}}}):t._e()],1)],1)},[],!1,null,"50fa5285",null).exports}}]);
|