Files
2026-09-26 11:09:54 +00:00

4 lines
54 KiB
JavaScript

const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=[window.OC.filePath('', '', 'dist/AppstoreDiscover-DaEnlDUr.chunk.mjs'),window.OC.filePath('', '', 'dist/preload-helper-0vEJIPm_.chunk.mjs'),window.OC.filePath('', '', 'dist/fileSize-BWpK6sfP.chunk.mjs'),window.OC.filePath('', '', 'dist/_plugin-vue_export-helper-CqVUm19z.chunk.mjs'),window.OC.filePath('', '', 'dist/public-B1wtkOap.chunk.mjs'),window.OC.filePath('', '', 'dist/index-BML1fiDL.chunk.mjs'),window.OC.filePath('', '', 'dist/index-2g4aHVje.chunk.mjs'),window.OC.filePath('', '', 'dist/TrashCanOutline-D4ZxKk1l.chunk.mjs'),window.OC.filePath('', '', 'dist/formatRelative-CFKKXHn5.chunk.mjs'),window.OC.filePath('', '', 'dist/Web-BoEnq40o.chunk.mjs'),window.OC.filePath('', '', 'dist/common-Web-C_oBIsvc.chunk.css'),window.OC.filePath('', '', 'dist/Check-DiSaW7e0.chunk.mjs'),window.OC.filePath('', '', 'dist/common-Check-3plNpBrB.chunk.css'),window.OC.filePath('', '', 'dist/Plus-DuLEmic3.chunk.mjs'),window.OC.filePath('', '', 'dist/common-Plus-BYHcrfvW.chunk.css'),window.OC.filePath('', '', 'dist/NcModal-B5_qArHK.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcModal-BPjW7F4U.chunk.css'),window.OC.filePath('', '', 'dist/common-index-DYA_tnKg.chunk.css'),window.OC.filePath('', '', 'dist/be-tarask-qrwZkbl3.chunk.mjs'),window.OC.filePath('', '', 'dist/common-be-tarask-BWNFKLbC.chunk.css'),window.OC.filePath('', '', 'dist/NcEmptyContent-C0xA-H93.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcEmptyContent-Don1d5Bd.chunk.css'),window.OC.filePath('', '', 'dist/index-CCe-0Ig3.chunk.mjs'),window.OC.filePath('', '', 'dist/util-CpxyNnQE.chunk.mjs'),window.OC.filePath('', '', 'dist/NcContent-BqHBoKLi.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcContent-CKeEKmjj.chunk.css'),window.OC.filePath('', '', 'dist/NcActionButton-DBVrk95c.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcActionButton-BQBDvDX2.chunk.css'),window.OC.filePath('', '', 'dist/NcTextArea-Cs6ZwCNN.chunk.mjs'),window.OC.filePath('', '', 'dist/index-C0warCLL.chunk.mjs'),window.OC.filePath('', '', 'dist/NcTextField.vue_vue_type_script_setup_true_lang-C0y-Hugh.chunk.mjs'),window.OC.filePath('', '', 'dist/NcInputField-C6mtqNoP.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcInputField-B5YBBomo.chunk.css'),window.OC.filePath('', '', 'dist/common-index-lRjtpfvB.chunk.css'),window.OC.filePath('', '', 'dist/TrayArrowDown-BZ96c-1q.chunk.mjs'),window.OC.filePath('', '', 'dist/common-TrayArrowDown-BEbvWlY3.chunk.css'),window.OC.filePath('', '', 'dist/NcAvatar-BbiXy-iN.chunk.mjs'),window.OC.filePath('', '', 'dist/autolink-DdIg-qoK.chunk.mjs'),window.OC.filePath('', '', 'dist/common-autolink-Dx8inARf.chunk.css'),window.OC.filePath('', '', 'dist/colors-D9PgyJR5.chunk.mjs'),window.OC.filePath('', '', 'dist/NcUserStatusIcon-CAIkETh4.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcUserStatusIcon-Bq_6hmXG.chunk.css'),window.OC.filePath('', '', 'dist/NcActionLink-DCjEgNid.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcActionLink-iJnZg6ii.chunk.css'),window.OC.filePath('', '', 'dist/NcActionRouter-vVshY1qu.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcActionRouter-C1KErZDl.chunk.css'),window.OC.filePath('', '', 'dist/NcActionText-UP0gDAU8.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcActionText-BzbAkUEn.chunk.css'),window.OC.filePath('', '', 'dist/common-NcAvatar-Bj2mvPeT.chunk.css'),window.OC.filePath('', '', 'dist/NcBreadcrumbs-CNtGE75v.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcBreadcrumbs-cz7E3Mo9.chunk.css'),window.OC.filePath('', '', 'dist/NcActionCaption-OYbxEMzL.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcActionCaption-DExoDmi9.chunk.css'),window.OC.filePath('', '', 'dist/common-NcTextArea-YqRvZSAK.chunk.css'),window.OC.filePath('', '', 'dist/NcActionInput-BMcS6eXE.chunk.mjs'),window.OC.filePath('', '', 'dist/NcPasswordField-CckLaf6N.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcPasswordField-Crp_EMfV.chunk.css'),window.OC.filePath('', '', 'dist/common-NcActionInput-N5nwNgj1.chunk.css'),window.OC.filePath('', '', 'dist/NcActionSeparator-TaenOS9C.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcActionSeparator-pXJ_-D_I.chunk.css'),window.OC.filePath('', '', 'dist/NcCheckboxRadioSwitch-DziqU7fO.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcCheckboxRadioSwitch-CbZ3Bd5x.chunk.css'),window.OC.filePath('', '', 'dist/NcChip-KpPNtGoH.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcChip-Som-mR4B.chunk.css'),window.OC.filePath('', '', 'dist/index-uAG6I5dO.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index-bfXBK-tQ.chunk.css'),window.OC.filePath('', '', 'dist/NcDashboardWidget-BnteZx7F.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcDashboardWidget-Cd52qQOs.chunk.css'),window.OC.filePath('', '', 'dist/zh-TW-AwobMTpu.chunk.mjs'),window.OC.filePath('', '', 'dist/common-zh-TW-DDCFElrS.chunk.css'),window.OC.filePath('', '', 'dist/NcEmojiPicker-BCnZ-xRw.chunk.mjs'),window.OC.filePath('', '', 'dist/emoji-BeCD6zWN.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcEmojiPicker-ChsL0oK6.chunk.css'),window.OC.filePath('', '', 'dist/NcRichText-DBIjpCZ-.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcRichText-Cc89lUeq.chunk.css'),window.OC.filePath('', '', 'dist/NcProfileHoverCard-BdYixm0x.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcProfileHoverCard-Drr0qM5-.chunk.css'),window.OC.filePath('', '', 'dist/index-BWNYz_zP.chunk.mjs'),window.OC.filePath('', '', 'dist/index-C-r-UtlI.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index-Bkq_iXjX.chunk.css'),window.OC.filePath('', '', 'dist/common-index-Bm5_EFm4.chunk.css'),window.OC.filePath('', '', 'dist/NcSelectTags-nMDhRqhN.chunk.mjs'),window.OC.filePath('', '', 'dist/ContentCopy-DUL46fKz.chunk.mjs'),window.OC.filePath('', '', 'dist/common-ContentCopy-D7mIRwIy.chunk.css'),window.OC.filePath('', '', 'dist/NcUserBubble-DXw6nsKZ.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcUserBubble-f2DD9EAL.chunk.css'),window.OC.filePath('', '', 'dist/index-wH8YWr4d.chunk.mjs'),window.OC.filePath('', '', 'dist/MarkdownPreview-sxTcZnYP.chunk.mjs'),window.OC.filePath('', '', 'dist/common-MarkdownPreview-C6olyAG4.chunk.css'),window.OC.filePath('', '', 'dist/modulepreload-polyfill-BxzAKjcf.chunk.mjs'),window.OC.filePath('', '', 'dist/index-C-VoLCI0.chunk.mjs'),window.OC.filePath('', '', 'dist/appstore-AppstoreDiscover-D5SWaP1O.chunk.css'),window.OC.filePath('', '', 'dist/common-NcGuestContent-BezK2wMx.chunk.css'),window.OC.filePath('', '', 'dist/UpdateAllDialog-DHTsJPoF.chunk.mjs'),window.OC.filePath('', '', 'dist/common-UpdateAllDialog-CZVJ1CV6.chunk.css'),window.OC.filePath('', '', 'dist/AppstoreBrowse-D0JSgkhz.chunk.mjs'),window.OC.filePath('', '', 'dist/appstore-AppstoreBrowse-BmXPxQ1G.chunk.css')])))=>i.map(i=>d[i]);
import{b as x,o as i,i as h,h as v,t as g,j as Ka,n as f,c as D,u as e,O as ae,w as b,l as N,z as w,F as B,E as M,g as _,N as sa,q as I,a1 as $a,v as Ca,C as X,k,x as ya,a0 as ua,U as ee,a as te,_ as K,A as se,V as pe,r as ne,e as le,f as oe}from"./preload-helper-0vEJIPm_.chunk.mjs";import{t as o,W as ie,X as re,Y as ue,Z as ce,_ as de,$ as me,a0 as _e,a1 as ye,a2 as ve,a3 as be,a4 as fe,H as ge,a5 as he,O as ca,a6 as we,a7 as De,a8 as va,J as ba,a9 as Sa,aa as Ae,ab as Ia,z as xa,ac as ke,ad as Te,ae as $e,af as Na,ag as Ce,ah as Se,ai as Ea,aj as Ie,ak as xe,l as Ne,al as Ee,am as Re,an as Be,V as Le,ao as ze,q as Oe,U as Me,ap as Pe,F as qe,aq as Ve}from"./fileSize-BWpK6sfP.chunk.mjs";import{N as Z,L as fa,u as pa}from"./Check-DiSaW7e0.chunk.mjs";import{N as Ge,a as Ue}from"./NcContent-BqHBoKLi.chunk.mjs";import{c as ga,e as Ra,g as Fe,b as j}from"./public-B1wtkOap.chunk.mjs";import{_ as z,l as H}from"./_plugin-vue_export-helper-CqVUm19z.chunk.mjs";import{N as je}from"./NcActionButton-DBVrk95c.chunk.mjs";import{_ as Ba,N as C}from"./Web-BoEnq40o.chunk.mjs";import{c as He,d as F,e as We,f as Qe,N as Ye}from"./NcTextArea-Cs6ZwCNN.chunk.mjs";import"./NcActionCaption-OYbxEMzL.chunk.mjs";import"./formatRelative-CFKKXHn5.chunk.mjs";import"./NcActionInput-BMcS6eXE.chunk.mjs";import{N as Je}from"./NcActionLink-DCjEgNid.chunk.mjs";import{N as Xe}from"./NcActionRouter-vVshY1qu.chunk.mjs";import{l as Ze,a as Ke}from"./NcModal-B5_qArHK.chunk.mjs";import"./NcActionSeparator-TaenOS9C.chunk.mjs";import"./NcActionText-UP0gDAU8.chunk.mjs";import{N as da}from"./Plus-DuLEmic3.chunk.mjs";import"./NcAvatar-BbiXy-iN.chunk.mjs";import{P as La}from"./NcBreadcrumbs-CNtGE75v.chunk.mjs";import"./NcCheckboxRadioSwitch-DziqU7fO.chunk.mjs";import{N as at}from"./NcChip-KpPNtGoH.chunk.mjs";import"./index-uAG6I5dO.chunk.mjs";import{N as et,a as tt}from"./TrayArrowDown-BZ96c-1q.chunk.mjs";import"./NcDashboardWidget-BnteZx7F.chunk.mjs";import"./zh-TW-AwobMTpu.chunk.mjs";import{N as za,s as Oa,_ as st}from"./index-2g4aHVje.chunk.mjs";import"./index-C0warCLL.chunk.mjs";import"./NcEmojiPicker-BCnZ-xRw.chunk.mjs";import{N as ha}from"./NcEmptyContent-C0xA-H93.chunk.mjs";import"./NcRichText-DBIjpCZ-.chunk.mjs";/* empty css */import"./TrashCanOutline-D4ZxKk1l.chunk.mjs";import"./NcInputField-C6mtqNoP.chunk.mjs";import{N as Aa}from"./be-tarask-qrwZkbl3.chunk.mjs";import"./NcPasswordField-CckLaf6N.chunk.mjs";import"./NcProfileHoverCard-BdYixm0x.chunk.mjs";import"./index-BWNYz_zP.chunk.mjs";import{c as L}from"./index-CCe-0Ig3.chunk.mjs";import"./index-C-r-UtlI.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-C0y-Hugh.chunk.mjs";import"./NcSelectTags-nMDhRqhN.chunk.mjs";import"./ContentCopy-DUL46fKz.chunk.mjs";import"./NcUserBubble-DXw6nsKZ.chunk.mjs";import"./NcUserStatusIcon-CAIkETh4.chunk.mjs";import"./emoji-BeCD6zWN.chunk.mjs";import"./colors-D9PgyJR5.chunk.mjs";import{w as pt,b as nt,u as lt}from"./index-wH8YWr4d.chunk.mjs";import{M as Ma}from"./MarkdownPreview-sxTcZnYP.chunk.mjs";import{c as ot,a as it}from"./autolink-DdIg-qoK.chunk.mjs";import"./modulepreload-polyfill-BxzAKjcf.chunk.mjs";import{b as ta}from"./index-BML1fiDL.chunk.mjs";import{a as rt,P as na,c as wa}from"./index-C-VoLCI0.chunk.mjs";import"./util-CpxyNnQE.chunk.mjs";const ut={class:"app-navigation-spacer"},ct=x({__name:"NcAppNavigationSpacer",setup(a){return(s,n)=>(i(),h("li",ut))}}),dt=Ba(ct,[["__scopeId","data-v-277fa710"]]),mt={name:"NcAppSidebarTab",inject:["registerTab","unregisterTab","getActiveTab","isTablistShown"],props:{id:{type:String,required:!0},name:{type:String,required:!0},icon:{type:String,default:""},order:{type:Number,default:0}},emits:["bottomReached","scroll"],expose:["id","name","icon","order","renderIcon"],computed:{isActive(){return this.getActiveTab()===this.id}},created(){this.registerTab(this)},beforeUnmount(){this.unregisterTab(this.id)},methods:{onScroll(a){this.$el.scrollHeight-this.$el.scrollTop===this.$el.clientHeight&&this.$emit("bottomReached",a),this.$emit("scroll",a)},renderIcon(a=!1){return this.$slots.icon?.({selected:a})}}},_t=["id","aria-hidden","aria-label","aria-labelledby","role","tabindex"],yt={class:"hidden-visually"};function vt(a,s,n,u,c,t){return i(),h("section",{id:`tab-${n.id}`,"aria-hidden":!t.isActive,"aria-label":t.isTablistShown()?void 0:n.name,"aria-labelledby":t.isTablistShown()?`tab-button-${n.id}`:void 0,class:f(["app-sidebar__tab",{"app-sidebar__tab--active":t.isActive}]),role:t.isTablistShown()?"tabpanel":void 0,tabindex:t.isTablistShown()?0:-1,onScroll:s[0]||(s[0]=(...p)=>t.onScroll&&t.onScroll(...p))},[v("h3",yt,g(n.name),1),Ka(a.$slots,"default",{},void 0,!0)],42,_t)}const ma=Ba(mt,[["render",vt],["__scopeId","data-v-e4df51a0"]]),G=Object.freeze({discover:o("appstore","Discover"),installed:o("appstore","Your apps"),enabled:o("appstore","Active apps"),disabled:o("appstore","Disabled apps"),updates:o("appstore","Updates"),bundles:o("appstore","App bundles"),featured:o("appstore","Featured apps"),supported:o("appstore","Supported apps"),search:o("appstore","Search results")}),U=Object.freeze({discover:Te,installed:ke,enabled:xa,disabled:Ia,bundles:Ae,supported:Sa,featured:ba,updates:va,ai:De,auth:we,customization:ca,dashboard:he,files:ge,games:fe,integration:be,monitoring:ve,multimedia:ye,office:_e,organization:me,search:de,security:ce,social:ue,tools:re,workflow:ie}),fl=["post","showcase","carousel"];rt(L);const Q=ga("apps/appstore/api/v1"),Y=Object.freeze({apps:`${Q}/apps`,categories:`${Q}/apps/categories`,enable:`${Q}/apps/enable`,disable:`${Q}/apps/disable`,uninstall:`${Q}/apps/uninstall`,update:`${Q}/apps/update`,bundleEnable:`${Q}/bundles/enable`}),la=new La({concurrency:1});async function ka(a,s=!1,n){return la.add(async()=>{await L.post(Y.enable,{appId:a,groups:n,force:s||void 0},{confirmPassword:na.Strict})})}async function bt(a){return la.add(async()=>{await L.post(Y.disable,{appId:a},{confirmPassword:na.Lax})})}async function ft(a){return la.add(async()=>{await L.post(Y.update,{appId:a},{confirmPassword:na.Strict})})}async function gt(a){return la.add(async()=>{await L.post(Y.uninstall,{appId:a},{confirmPassword:na.Strict})})}async function ht(){const{data:a}=await L.get(Y.apps);return a.ocs.data}async function wt(){const{data:a}=await L.get(Y.categories);for(const s of a.ocs.data)s.icon=U[s.id]??"";return a.ocs.data}async function Dt(a){return la.add(async()=>{await L.post(Y.bundleEnable,{bundleId:a},{confirmPassword:na.Strict})})}async function ea(){const{data:a}=await L.get(ga("core/navigation/apps?format=json"));a.ocs.meta.statuscode===200&&(Ra("nextcloud:app-menu.refresh",{apps:a.ocs.data}),window.dispatchEvent(new Event("resize")))}function aa(a){return a.installed||a.internal?!1:a.missingDependencies===void 0||a.missingDependencies.length===0||!a.isCompatible&&a.missingDependencies.length===1}function Pa(a){return a.installed&&a.removable&&!a.active}function qa(a){return!Ua(a)&&!Fa(a)&&Va(a)&&a.isCompatible}function Va(a){return!a.active&&(a.installed||aa(a))}function oa(a){return!a.active&&!a.isCompatible}function Ga(a){return!Ua(a)&&!Fa(a)&&a.active&&!a.internal}function At(a){return a.update!==void 0}const kt=["filesystem","prelogin","authentication","logging","prevent_group_restriction"];function Da(a){return!a.active&&!a.installed||!a.active&&oa(a)?!1:a.types?a.types.every(s=>!kt.includes(s)):!0}function Ua(a){return a.app_api&&(a.status.action==="init"||a.status.action==="healthcheck")}function Fa(a){return a.app_api&&a.status.action==="deploy"}const q=Fe().setApp("appstore").detectUser().build(),Tt=x({__name:"DaemonSelectionDialogListEntry",props:{daemon:{},isDefault:{type:Boolean}},emits:["selected"],setup(a,{emit:s}){const n=a,u=s,c=w(()=>`${n.daemon.name} - ${n.daemon.display_name}`);return(t,p)=>(i(),D(e(et),{active:a.isDefault,counterNumber:a.daemon.exAppsCount,counterType:"highlighted",details:a.isDefault?e(o)("appstore","Default"):"",forceDisplayActions:"",name:c.value,onClick:p[0]||(p[0]=ae(d=>u("selected"),["stop"]))},{subname:b(()=>[N(g(a.daemon.accepts_deploy_id),1)]),_:1},8,["active","counterNumber","details","name"]))}}),$t=["aria-label"],Ct=x({__name:"DaemonSelectionDialogList",emits:["selected"],setup(a){const s=ia();return(n,u)=>(i(),h("ul",{class:f(n.$style.DaemonSelectionDialogList),"aria-label":e(o)("appstore","Registered Deploy daemons list")},[(i(!0),h(B,null,M(e(s).dockerDaemons,c=>(i(),D(Tt,{key:c.id,daemon:c,isDefault:e(s).defaultDaemon?.name===c.name,onSelected:t=>n.$emit("selected",c)},null,8,["daemon","isDefault","onSelected"]))),128))],10,$t))}}),St="_DaemonSelectionDialogList_x38pt_2",It={DaemonSelectionDialogList:St},xt={$style:It},Nt=z(Ct,[["__cssModules",xt]]),Et=x({__name:"DaemonSelectionDialog",props:{app:{}},emits:["close"],setup(a){const s=ia(),n=j("/settings/admin/app_api");return(u,c)=>(i(),D(e(za),{name:e(o)("appstore","Choose Deploy Daemon for {appName}",{appName:a.app.name}),size:"normal","onUpdate:open":c[1]||(c[1]=t=>t||u.$emit("close"))},{default:b(()=>[e(s).dockerDaemons.length===0?(i(),D(e(ha),{key:0,class:"daemon-selection-list__empty-content",name:e(o)("appstore","No Deploy daemons configured"),description:e(o)("appstore","Register a custom one or setup from available templates")},{icon:b(()=>[_(e(C),{path:e($e)},null,8,["path"])]),action:b(()=>[_(e(Z),{href:e(n)},{default:b(()=>[N(g(e(o)("appstore","Manage Deploy daemons")),1)]),_:1},8,["href"])]),_:1},8,["name","description"])):(i(),D(Nt,{key:1,app:a.app,onSelected:c[0]||(c[0]=t=>u.$emit("close",t))},null,8,["app"]))]),_:1},8,["name"]))}});async function Rt(){const{data:a}=await L.get(j("/apps/app_api/apps/list"));return a.apps}async function Bt(a){const{data:s}=await L.get(j(`/apps/app_api/apps/status/${a}`));return s}async function _a(a,s,n){await wa(),await L.post(j(`/apps/app_api/apps/enable/${a.id}/${s.name}`),{deployOptions:n})}async function Lt(a){await wa(),await L.post(j("/apps/app_api/apps/force"),{appId:a})}async function Ta(a){await wa(),await L.get(j(`apps/app_api/apps/disable/${a}`))}const ia=sa("external-apps",()=>{const a=H("appstore","appApiEnabled",!1),s=I([]),n=I(H("appstore","appstoreExAppUpdateCount",0));let u=null;const c=I(H("appstore","defaultDaemonConfigAccessible",!1)),t=I(H("appstore","defaultDaemonConfig",null)),p=I([]),d=w(()=>s.value.filter(r=>r?.status?.action&&r.status.type!==""&&(r?.status?.action==="deploy"||r.status.action==="init"||r.status.action==="healthcheck")));function y(r){return s.value.find(({id:l})=>l===r)??null}async function T(r){const l=y(r);if(!l)throw new Error(`App with id ${r} not found`);l.loading=!0;try{if(p.value.length===1&&l.needsDownload)_a(l,p[0]),l.daemon=p[0];else if(l.needsDownload){const R=await Oa(Et,{app:l});if(!R)throw new Error("No daemon selected");await _a(l,R),l.daemon=R}else await _a(l,l.daemon);l.installed||(l.needsDownload=!1,l.status={type:"install",action:"deploy",init:0,deploy:0}),l.removable=!0,delete l.error,await W(r)}finally{l.loading=!1}}async function E(r){const l=y(r);if(!l)throw new Error(`App with id ${r} not found`);l.loading=!0;try{await Lt(r),await O(!0),l.active=!1}finally{l.loading=!1}}async function m(r){const l=y(r);if(!l)throw new Error(`App with id ${r} not found`);l.loading=!0;try{await Ta(r),l.active=!1}finally{l.loading=!1}}async function $(r){const l=y(r);if(!l)throw new Error(`App with id ${r} not found`);l.loading=!0;try{await Ta(r),l.active=!1,l.needsDownload=!0,l.installed=!1,l.daemon=null,l.status={},l.update!==null&&n.value--,delete l.update,delete l.error}finally{l.loading=!1}}async function S(r){const l=y(r);if(!l)throw new Error(`App with id ${r} not found`);l.loading=!0;try{await L.get(j(`/apps/app_api/apps/update/${r}`)),l.version=l.update||l.version,l.status={type:"update",action:"deploy",init:0,deploy:0},delete l.update,delete l.error,n.value--,await W(r)}catch(R){q.error("Failed to update ex app",{appId:r,error:R}),ta(o("appstore","Could not update the app. Please try again later."))}finally{l.loading=!1}}async function O(r=!1){(r||!t.value||!p.value.length)&&await V(),(r||s.value.length===0)&&await J()}return{isEnabled:a,apps:s,updateCount:n,defaultDaemon:t,dockerDaemons:p,daemonAccessible:c,getById:y,disableApp:m,enableApp:T,forceEnableApp:E,updateApp:S,uninstallApp:$,initialize:O};async function V(){try{const{data:r}=await L.get(j("/apps/app_api/daemons"));t.value=r.daemons.find(l=>l.name===r.default_daemon_config),p.value=r.daemons.filter(l=>l.accepts_deploy_id==="docker-install")}catch(r){return q.error("[app-api-store] Failed to fetch Docker daemons",{error:r}),!1}return!0}async function J(){try{s.value=await Rt()}catch(r){q.error("An error occurred while fetching apps",{error:r}),ta(o("appstore","An error occurred during the request. Unable to proceed."))}}async function W(r){const l=y(r);if(!l){q.error("[app-api-store] app not found while fetching status",{appId:r});return}l.loading=!0;try{const R=await Bt(r);l.status=R,q.debug("[app-api-store] initializingOrDeployingApps after setAppStatus",{initializingOrDeployingApps:d}),d.value.length===0&&(q.debug("[app-api-store] Clearing interval"),clearInterval(u),u=null),l.status.error&&d.value.length===1&&(clearInterval(u),u=null)}catch(R){throw A(),R}finally{l.loading=!1}}function A(){clearInterval(u),d.value.length!==0&&(u=window.setInterval(()=>{q.debug("[app-api-store] initializingOrDeployingApps",{initializingOrDeployingApps:d});for(const r of d.value)W(r.id)},2e3))}}),P=sa("apps",()=>{const a=ia(),s=I([]),n=I([]),u=$a(H("appstore","appstoreBundles")),c=I(!1),t=I(!1),p=w(()=>[...s.value,...a.isEnabled?a.apps:[]]);function d(A){return n.value.find(({id:r})=>r===A)??null}function y(A){return p.value.find(({id:r})=>r===A)??null}function T(A){return p.value.filter(r=>[r.category].flat().includes(A))}async function E(A,r=!1){const l=y(A);if(!l)throw new Error(`App with id ${A} not found`);if(l.active||!l.installed&&!aa(l))throw new Error(`App with id ${A} cannot be enabled`);if(!r&&oa(l))throw new Error(`App with id ${A} requires force enable`);l.loading=!0;try{l.app_api?await a.enableApp(A):await ka(A,r),r&&(l.isCompatible=!0),l.active=!0,l.installed=!0,l.removable=!0,await ea()}finally{l.loading=!1}}async function m(A){const r=y(A);if(!r)throw new Error(`App with id ${A} not found`);if(!Ga(r))throw new Error(`App with id ${A} cannot be disabled`);r.loading=!0;try{r.app_api?await a.disableApp(A):await bt(A),r.active=!1,r.isCompatible=r.missingDependencies===void 0||r.missingDependencies.length===0,await ea()}finally{r.loading=!1}}async function $(A){const r=y(A);if(!r)throw new Error(`App with id ${A} not found`);if(!Pa(r))throw new Error(`App with id ${A} cannot be uninstalled`);r.loading=!0;try{r.app_api?await a.uninstallApp(A):await gt(A),r.active=!1,r.installed=!1,await ea()}finally{r.loading=!1}}async function S(A,r){const l=y(A);if(!l)throw new Error(`App with id ${A} not found`);if(!Da(l))throw new Error(`App with id ${A} cannot be limited to groups`);if(!l.app_api)try{l.loading=!0,await ka(A,!1,r),l.groups=r}finally{l.loading=!1}}async function O(A){const r=u.find(l=>l.id===A);if(!r)throw new Error(`Bundle with id ${A} not found`);try{for(const l of r.appIdentifiers){const R=y(l);R.loading=!0}await Dt(r.id);for(const l of r.appIdentifiers){const R=y(l);R.active=!0,R.installed=!0,R.removable=!0,await ea()}}finally{for(const l of r.appIdentifiers){const R=y(l);R.loading=!1}}}return V(),{apps:p,bundles:u,categories:n,isLoadingApps:c,isLoadingCategories:t,disableApp:m,enableApp:E,uninstallApp:$,enableBundle:O,getAppById:y,getAppsByCategory:T,getCategoryById:d,limitAppToGroups:S};async function V(){await Promise.allSettled([W(),J(),a.isEnabled?a.initialize():Promise.resolve()])}async function J(){try{t.value=!0,n.value=await wt()}catch(A){q.error("Failed to load app categories",{error:A}),ta(o("appstore","Could not load app categories. Please try again later."))}finally{t.value=!1}}async function W(){try{c.value=!0,s.value=await ht()}catch(A){q.error("Failed to load apps list",{error:A}),ta(o("appstore","Could not load apps list. Please try again later."))}finally{c.value=!1}}}),ja=sa("updates",()=>{const a=ia(),s=I(H("appstore","appstoreUpdateCount",0)),n=w(()=>s.value+a.updateCount);async function u(c){const t=P().getAppById(c);if(!t)throw new Error(`App with id ${c} not found`);try{"app_api"in t&&t.app_api?await a.updateApp(c):(await ft(c),s.value=Math.max(s.value-1,0)),t.update=void 0,ea()}catch(p){q.error("Failed to update app",{appId:c,error:p}),ta(o("appstore","Could not update the app. Please try again later."))}}return{updateCount:n,updateApp:u}}),Ha=sa("userSettings",()=>{const a=I(""),s=I(!1),n=I(!0),u=w(()=>a.value==="m"?"468px":a.value==="l"?"512px":"320px");function c(p){return{...(pa()??{}).query,grid:p??s.value?a.value||null:void 0,compatible:n.value?void 0:null}}return fa().afterEach(p=>{t(p.query)}),{defaultGridSize:a,gridSizePx:u,isGridView:s,showIncompatible:n,getQuery:c};function t(p){s.value="grid"in p,a.value=[p.grid??""].flat()[0].toLowerCase(),n.value=!("compatible"in p)}}),zt=x({__name:"AppstoreNavigation",setup(a){const s=H("settings","appstoreEnabled",!0),n=P(),u=ja(),c=Ha(),t=w(()=>n.categories),p=w(()=>n.isLoadingCategories),d=pa(),y=fa(),T=Ca("search");Ze("f",()=>{T.value?.$refs.inputElement||(Ra("toggle-navigation",{open:!0}),window.setTimeout(()=>T.value?.$refs.inputElement?.focus(),400)),T.value?.$refs.inputElement?.focus()},{ctrl:!0,stop:!0,prevent:!0});const E=I("");X(()=>d.query.q,$=>{E.value=[$||""].flat()[0]},{immediate:!0}),pt(E,($,S)=>{if($.trim()!==S.trim()){if(y.currentRoute.value.name==="apps-discover"||y.currentRoute.value.name==="apps-manage"&&d.params.category==="bundles"){y.push({name:"apps-search",query:{...d.query,q:$.trim()||void 0}});return}y.replace({...d,query:{...d.query,q:$.trim()||void 0}})}},{debounce:500});const m=w(()=>n.apps.find(({level:$})=>$===300)!==void 0);return($,S)=>(i(),D(e(He),{"aria-label":e(o)("appstore","Appstore categories")},{search:b(()=>[_(e(We),{ref_key:"search",ref:E,modelValue:E.value,"onUpdate:modelValue":S[0]||(S[0]=O=>E.value=O),label:e(o)("appstore","Search apps…")},null,8,["modelValue","label"])]),list:b(()=>[e(s)?(i(),D(e(F),{key:0,to:{name:"apps-discover"},name:e(G).discover},{icon:b(()=>[_(e(C),{path:e(U).discover},null,8,["path"])]),_:1},8,["name"])):k("",!0),_(e(F),{to:{name:"apps-manage",params:{category:"installed"}},name:e(G).installed},{icon:b(()=>[_(e(C),{path:e(U).installed},null,8,["path"])]),_:1},8,["name"]),_(e(F),{to:{name:"apps-manage",params:{category:"enabled"}},name:e(G).enabled},{icon:b(()=>[_(e(C),{path:e(U).enabled},null,8,["path"])]),_:1},8,["name"]),_(e(F),{to:{name:"apps-manage",params:{category:"disabled"}},name:e(G).disabled},{icon:b(()=>[_(e(C),{path:e(U).disabled},null,8,["path"])]),_:1},8,["name"]),e(u).updateCount>0?(i(),D(e(F),{key:1,to:{name:"apps-manage",params:{category:"updates"}},name:e(G).updates},{counter:b(()=>[_(e(tt),{count:e(u).updateCount},null,8,["count"])]),icon:b(()=>[_(e(C),{path:e(U).updates},null,8,["path"])]),_:1},8,["name"])):k("",!0),_(e(F),{to:{name:"apps-bundles"},name:e(G).bundles},{icon:b(()=>[_(e(C),{path:e(U).bundles},null,8,["path"])]),_:1},8,["name"]),_(e(dt)),e(s)&&p.value?(i(),h("li",{key:2,class:f($.$style.appstoreNavigation__categories_loading)},[_(e(da),{size:20,name:e(o)("appstore","Loading categories")},null,8,["name"])],2)):e(s)&&!p.value?(i(),h(B,{key:3},[m.value?(i(),D(e(F),{key:0,id:"app-category-supported",to:{name:"apps-category",params:{category:"supported"},query:e(c).getQuery(!0)},name:e(G).supported},{icon:b(()=>[_(e(C),{path:e(U).supported},null,8,["path"])]),_:1},8,["to","name"])):k("",!0),_(e(F),{id:"app-category-featured",to:{name:"apps-category",params:{category:"featured"},query:e(c).getQuery(!0)},name:e(G).featured},{icon:b(()=>[_(e(C),{path:e(U).featured},null,8,["path"])]),_:1},8,["to","name"]),(i(!0),h(B,null,M(t.value,O=>(i(),D(e(F),{id:`app-category-${O.id}`,key:O.id,name:O.displayName,to:{name:"apps-category",params:{category:O.id},query:e(c).getQuery(!0)}},{icon:b(()=>[_(e(C),{path:O.icon},null,8,["path"])]),_:2},1032,["id","name","to"]))),128))],64)):k("",!0)]),_:1},8,["aria-label"]))}}),Ot="_appstoreNavigation__categories_loading_1fsn2_2",Mt={appstoreNavigation__categories_loading:Ot},Pt={$style:Mt},qt=z(zt,[["__cssModules",Pt]]),Vt=x({__name:"AppActions",props:{app:{},actions:{},maxInlineActions:{default:1},iconOnly:{type:Boolean}},setup(a){const s=w(()=>a.actions.length<=a.maxInlineActions?a.actions:a.actions.filter(u=>u.inline!==!1).slice(0,a.maxInlineActions)),n=w(()=>a.actions.filter(u=>!s.value.includes(u)));return(u,c)=>(i(),h("div",{class:f(u.$style.appActions)},[(i(!0),h(B,null,M(s.value,t=>(i(),D(e(Z),{key:t.id,ariaLabel:a.iconOnly?t.label(a.app):void 0,title:a.iconOnly?t.label(a.app):void 0,variant:t.variant,href:"href"in t?t.href(a.app):void 0,to:"to"in t?t.to(a.app):void 0,target:"href"in t?"_blank":void 0,onClick:p=>"callback"in t&&t.callback(a.app)},ya({icon:b(()=>[_(e(C),{path:t.icon},null,8,["path"])]),_:2},[a.iconOnly?void 0:{name:"default",fn:b(()=>[N(g(t.label(a.app)),1)]),key:"0"}]),1032,["ariaLabel","title","variant","href","to","target","onClick"]))),128)),_(e(Ke),{forceMenu:""},{default:b(()=>[(i(!0),h(B,null,M(n.value,t=>(i(),h(B,null,["callback"in t?(i(),D(e(je),{key:"callback-"+t.id,closeAfterClick:"",variant:t.variant,onClick:p=>t.callback(a.app)},{icon:b(()=>[_(e(C),{path:t.icon},null,8,["path"])]),default:b(()=>[N(" "+g(t.label(a.app)),1)]),_:2},1032,["variant","onClick"])):"href"in t?(i(),D(e(Je),{key:"link-"+t.id,closeAfterClick:"",variant:t.variant,href:t.href(a.app)},{icon:b(()=>[_(e(C),{path:t.icon},null,8,["path"])]),default:b(()=>[N(" "+g(t.label(a.app)),1)]),_:2},1032,["variant","href"])):(i(),D(e(Xe),{key:"route-"+t.id,closeAfterClick:"",variant:t.variant,to:t.to(a.app)},{icon:b(()=>[_(e(C),{path:t.icon},null,8,["path"])]),default:b(()=>[N(" "+g(t.label(a.app)),1)]),_:2},1032,["variant","to"]))],64))),256))]),_:1})],2))}}),Gt="_appActions_lrf6h_2",Ut={appActions:Gt},Ft={$style:Ut},Wa=z(Vt,[["__cssModules",Ft]]),jt=x({__name:"AppDeployDaemonTab",props:{app:{}},setup(a){const s=I(a.app?.daemon?.deploy_config?.computeDevice?.id!=="cpu"||!1);return(n,u)=>a.app?.daemon?(i(),D(e(ma),{key:0,id:"daemon",name:e(o)("appstore","Daemon"),order:5},{icon:b(()=>[_(e(C),{path:e(Na),size:24},null,8,["path"])]),default:b(()=>[v("div",{class:f(n.$style.appDeployDaemonTab)},[v("h4",null,g(e(o)("appstore","Deploy Daemon")),1),v("p",null,[v("b",null,g(e(o)("appstore","Type")),1),N(": "+g(a.app?.daemon.accepts_deploy_id),1)]),v("p",null,[v("b",null,g(e(o)("appstore","Name")),1),N(": "+g(a.app?.daemon.name),1)]),v("p",null,[v("b",null,g(e(o)("appstore","Display Name")),1),N(": "+g(a.app?.daemon.display_name),1)]),v("p",null,[v("b",null,g(e(o)("appstore","GPUs support")),1),N(": "+g(s.value),1)]),v("p",null,[v("b",null,g(e(o)("appstore","Compute device")),1),N(": "+g(a.app?.daemon?.deploy_config?.computeDevice?.label),1)])],2)]),_:1},8,["name"])):k("",!0)}}),Ht="_appDeployDaemonTab_1xkhp_2",Wt={appDeployDaemonTab:Ht},Qt={$style:Wt},Yt=z(jt,[["__cssModules",Qt]]),Jt=x({__name:"AppDescriptionTab",props:{app:{}},setup(a){return(s,n)=>(i(),D(e(ma),{id:"desc",name:e(o)("appstore","Description"),order:0},{icon:b(()=>[_(e(C),{path:e(Ce)},null,8,["path"])]),default:b(()=>[v("div",{class:f(s.$style.appDescriptionTab)},[_(Ma,{text:a.app.description,minHeadingLevel:3},null,8,["text"])],2)]),_:1},8,["name"]))}}),Xt="_appDescriptionTab_118mz_2",Zt={appDescriptionTab:Xt},Kt={$style:Zt},as=z(Jt,[["__cssModules",Kt]]),es=["title"],ts=x({__name:"BadgeAppDaemon",props:{daemon:{}},setup(a){return(s,n)=>a.daemon?(i(),h("span",{key:0,class:f(s.$style.appDaemonBadge),title:a.daemon.name},[_(e(C),{path:e(Na),size:20,inline:""},null,8,["path"]),N(" "+g(a.daemon.display_name),1)],10,es)):k("",!0)}}),ss="_appDaemonBadge_1n34s_2",ps={appDaemonBadge:ss},ns={$style:ps},Qa=z(ts,[["__cssModules",ns]]),ls=["title"],os=x({__name:"BadgeAppLevel",props:{level:{}},setup(a){const s=a,n=w(()=>s.level===300),u=w(()=>s.level===200),c=w(()=>n.value?Sa:ba),t=w(()=>n.value?o("appstore","Supported"):o("appstore","Featured")),p=w(()=>n.value?o("appstore","This app is supported via your current Nextcloud subscription."):o("appstore","Featured apps are developed by and within the community. They offer central functionality and are ready for production use."));return(d,y)=>n.value||u.value?(i(),h("span",{key:0,class:f([d.$style.appLevelBadge,{[d.$style.appLevelBadge__supported]:n.value}]),title:p.value},[_(e(C),{path:c.value,size:20,inline:""},null,8,["path"]),N(" "+g(t.value),1)],10,ls)):k("",!0)}}),is="_appLevelBadge_q2et3_2",rs="_appLevelBadge__supported_q2et3_15",us={appLevelBadge:is,appLevelBadge__supported:rs},cs={$style:us},Ya=z(os,[["__cssModules",cs]]),ds=["aria-label","title"],ms=x({__name:"BadgeAppScore",props:{app:{}},setup(a){const s=w(()=>!a.app.shipped&&a.app.ratingNumOverall&&a.app.ratingNumOverall>5),n=w(()=>a.app.ratingOverall??4),u=w(()=>{const d=(n.value*5).toFixed(1);return o("appstore","Community rating: {score}/5",{score:d})}),c=w(()=>Math.floor(n.value*5+.25)),t=w(()=>Math.min(Math.floor((1-n.value)*5+.25),5-c.value)),p=w(()=>c.value+t.value<5);return(d,y)=>s.value?(i(),h("span",{key:0,role:"img","aria-label":u.value,title:u.value,class:f(d.$style.badgeAppScore)},[(i(!0),h(B,null,M(c.value,T=>(i(),D(e(C),{key:`full-star-${T}`,path:e(ba),inline:""},null,8,["path"]))),128)),p.value?(i(),D(e(C),{key:0,path:e(Se),inline:""},null,8,["path"])):k("",!0),(i(!0),h(B,null,M(t.value,T=>(i(),D(e(C),{key:`empty-star-${T}`,path:e(Ea),inline:""},null,8,["path"]))),128))],10,ds)):k("",!0)}}),_s="_badgeAppScore_1t97c_2",ys={badgeAppScore:_s},vs={$style:ys},bs=z(ms,[["__cssModules",vs]]),fs=new La({concurrency:3}),Ja=sa("groups",()=>{const a=I(new Map);async function s(t){return await fs.add(()=>c(t))}async function n(t){const p=ga("/cloud/groups/details");try{const{data:d}=await L.get(p,{params:{search:t.trim(),limit:10}});for(const y of d.ocs.data.groups)a.value.has(y.id)||a.value.set(y.id,{id:y.id,displayName:y.displayname,isNoUser:!0})}catch(d){q.error("Failed to search groups",{error:d})}}function u(t){return a.value.get(t)}return{groups:w(()=>Array.from(a.value.values())),searchGroups:n,getGroupById:u,fetchGroupById:s};async function c(t){return a.value.has(t)||await n(t),a.value.get(t)}});function Xa(a){const s=Ja(),n=I([]);return X(()=>ua(a).groups,async()=>{const u=ua(a).groups;if(u===void 0){n.value=[];return}const c=u.map(p=>s.fetchGroupById(p)),t=await Promise.all(c);n.value=t.filter(Boolean)},{immediate:!0}),$a(n)}const gs={class:"app-details"},hs=["aria-label"],ws=["id"],Ds=["aria-labelledby"],As=["title"],ks=["aria-label"],Ts=["href"],$s=x({__name:"AppDetailsTab",props:{app:{}},setup(a){const s=P(),n=ee(),u=w(()=>a.app.releases?.map(m=>m.lastModified).map(m=>Date.parse(m)).sort().at(-1)),c=w(()=>a.app?[a.app.author].flat().map(E).sort((m,$)=>m.split(" ").at(-1).localeCompare($.split(" ").at(-1))).join(", "):""),t=w(()=>`https://apps.nextcloud.com/apps/${a.app.id}`),p=Xa(()=>a.app),d=w(()=>{const m=[];return a.app.internal||m.push({id:"appstore",href:t.value,label:o("appstore","View in store")}),a.app.website&&m.push({id:"website",href:a.app.website,label:o("appstore","Visit website")}),a.app.documentation&&(a.app.documentation.user&&m.push({id:"doc-user",href:a.app.documentation.user,label:o("appstore","Usage documentation")}),a.app.documentation.admin&&m.push({id:"doc-admin",href:a.app.documentation.admin,label:o("appstore","Admin documentation")}),a.app.documentation.developer&&m.push({id:"doc-developer",href:a.app.documentation.developer,label:o("appstore","Developer documentation")})),m}),y=w(()=>[a.app.category].flat().map(m=>s.getCategoryById(m)?.displayName??m).join(", ")),T=w(()=>a.app.active&&!Da(a.app));function E(m){return m["@value"]?m["@value"]:m}return(m,$)=>(i(),D(e(ma),{id:"details",name:e(o)("appstore","Details"),order:1},{icon:b(()=>[_(e(C),{path:e(Ie)},null,8,["path"])]),default:b(()=>[v("div",gs,[v("div",{class:f(m.$style.appstoreDetailsTab__badges)},[_(Ya,{level:a.app.level},null,8,["level"]),a.app.app_api&&a.app.daemon?(i(),D(Qa,{key:0,daemon:a.app.daemon},null,8,["daemon"])):k("",!0),_(bs,{app:a.app},null,8,["app"])],2),!a.app.isCompatible&&a.app.missingDependencies&&a.app.missingDependencies.length?(i(),D(e(Aa),{key:0,type:"error"},{default:b(()=>[N(g(e(o)("appstore","This app cannot be installed because the following dependencies are not fulfilled:"))+" ",1),v("ul",{"aria-label":e(o)("appstore","Missing dependencies"),class:f(m.$style.appstoreDetailsTab__missingDependencies)},[(i(!0),h(B,null,M(a.app.missingDependencies,(S,O)=>(i(),h("li",{key:O},g(S),1))),128))],10,hs)]),_:1})):k("",!0),T.value?(i(),D(e(Aa),{key:1,type:"info"},{default:b(()=>[N(g(e(o)("appstore","This app cannot be limited to groups because it provides functionality that is executed before group membership is determined.")),1)]),_:1})):k("",!0),e(p).length?(i(),h("div",{key:2,class:f(m.$style.appstoreDetailsTab__section)},[v("h4",{id:e(n)},g(e(o)("appstore","Limited to groups")),9,ws),v("ul",{"aria-labelledby":e(n),class:f(m.$style.appstoreDetailsTab__sectionDetails)},[(i(!0),h(B,null,M(e(p),S=>(i(),h("li",{key:S.id,title:S.id},g(S.displayName),9,As))),128))],10,Ds)],2)):k("",!0),u.value&&!a.app.shipped?(i(),h("div",{key:3,class:f(m.$style.appstoreDetailsTab__section)},[v("h4",null,g(e(o)("appstore","Latest updated")),1),_(e(st),{class:f(m.$style.appstoreDetailsTab__sectionDetails),timestamp:u.value},null,8,["class","timestamp"])],2)):k("",!0),v("div",{class:f(m.$style.appstoreDetailsTab__section)},[v("h4",null,g(e(o)("appstore","Author")),1),v("p",{class:f(m.$style.appstoreDetailsTab__sectionDetails)},g(c.value),3)],2),v("div",{class:f(m.$style.appstoreDetailsTab__section)},[v("h4",null,g(e(o)("appstore","Categories")),1),v("p",{class:f(m.$style.appstoreDetailsTab__sectionDetails)},g(y.value),3)],2),d.value.length>0?(i(),h("div",{key:4,class:f(m.$style.appstoreDetailsTab__section)},[v("h4",null,g(e(o)("appstore","Resources")),1),v("ul",{class:f(m.$style.appstoreDetailsTab__resources),"aria-label":e(o)("appstore","Documentation resources")},[(i(!0),h(B,null,M(d.value,S=>(i(),h("li",{key:S.id,class:f(m.$style.appstoreDetailsTab__resourcesItem)},[v("a",{class:f(m.$style.appstoreDetailsTab__resourcesLink),href:S.href,target:"_blank",rel:"noreferrer noopener"},g(S.label)+" ↗ ",11,Ts)],2))),128))],10,ks)],2)):k("",!0)])]),_:1},8,["name"]))}}),Cs="_appstoreDetailsTab__badges_4x76r_2",Ss="_appstoreDetailsTab__section_4x76r_8",Is="_appstoreDetailsTab__sectionDetails_4x76r_18",xs="_appstoreDetailsTab__missingDependencies_4x76r_22",Ns="_appstoreDetailsTab__resourcesLink_4x76r_28",Es="_appstoreDetailsTab__resourcesItem_4x76r_32",Rs={appstoreDetailsTab__badges:Cs,appstoreDetailsTab__section:Ss,appstoreDetailsTab__sectionDetails:Is,appstoreDetailsTab__missingDependencies:xs,appstoreDetailsTab__resourcesLink:Ns,appstoreDetailsTab__resourcesItem:Es},Bs={$style:Rs},Ls=z($s,[["__cssModules",Bs]]),zs=x({__name:"AppReleasesTab",props:{app:{}},setup(a){const s=a,n=w(()=>(s.app.releases??[]).filter(c=>{const t=Object.values(c.translations??{});return t.length>0&&t.some(({changelog:p})=>!!p)}));function u(c){return c.translations[Ne()]?.changelog??c.translations.en?.changelog??""}return(c,t)=>n.value.length>0?(i(),D(e(ma),{key:0,id:"changelog",name:e(o)("appstore","Changelog"),order:2},{icon:b(()=>[_(e(C),{path:e(xe),size:24},null,8,["path"])]),default:b(()=>[(i(!0),h(B,null,M(n.value,p=>(i(),h("div",{key:p.version,class:f(c.$style.appReleasesTab)},[v("h3",{class:f(c.$style.appReleasesTab__heading)},g(p.version),3),_(Ma,{class:f(c.$style.appReleasesTab__text),minHeadingLevel:3,text:u(p)},null,8,["class","text"])],2))),128))]),_:1},8,["name"])):k("",!0)}}),Os="_appReleasesTab__heading_9xawz_2",Ms="_appReleasesTab__text_9xawz_7",Ps={appReleasesTab__heading:Os,appReleasesTab__text:Ms},qs={$style:Ps},Vs=z(zs,[["__cssModules",qs]]),Gs={id:"disable",icon:Ia,order:10,enabled:Ga,label:()=>o("appstore","Disable"),async callback(a){await P().disableApp(a.id)}},Us={id:"enable",icon:xa,order:1,variant:"primary",enabled(a){return!aa(a)&&qa(a)},label:()=>o("appstore","Enable"),async callback(a){await P().enableApp(a.id)}},Fs={id:"force-enable",icon:Ee,order:3,inline:!1,variant:"warning",label:()=>o("appstore","Force enable"),enabled(a){return!aa(a)&&Va(a)&&oa(a)},async callback(a){await P().enableApp(a.id,!0)}},js={id:"install",icon:va,order:5,enabled(a){return aa(a)&&!oa(a)},label:a=>a.app_api?o("appstore","Deploy and enable"):a.needsDownload?o("appstore","Download and enable"):o("appstore","Install and enable"),async callback(a){await P().enableApp(a.id)}},Hs={id:"install-forced",icon:va,order:5,inline:!1,enabled(a){return aa(a)&&oa(a)},label:a=>a.app_api?o("appstore","Deploy and force enable"):a.needsDownload?o("appstore","Download and force enable"):o("appstore","Install and force enable"),async callback(a){await P().enableApp(a.id,!0)}},Ws=[{id:"rate",icon:Ea,order:30,inline:!1,label:()=>o("appstore","Rate the app"),enabled(a){return!a.shipped},href(a){return`https://apps.nextcloud.com/apps/${encodeURIComponent(a.id)}#comments`}},{id:"report-bug",icon:Re,order:32,inline:!1,label:()=>o("appstore","Report a bug"),enabled(a){return!!a.bugs},href(a){return a.bugs}},{id:"discussion",icon:Be,order:35,inline:!1,label:()=>o("appstore","Ask questions or discuss the app"),enabled(a){return!!a.discussion},href(a){return a.discussion}},{id:"website",icon:Le,order:38,inline:!1,label:()=>o("appstore","Visit the website"),enabled(a){return!!a.website},href(a){return a.website}}],Qs=te(()=>K(()=>Promise.resolve().then(()=>$p),void 0,import.meta.url)),Ys={id:"limit-to-group",icon:ze,order:16,inline:!1,label:()=>o("appstore","Limit to groups"),enabled:Da,async callback(a){await Oa(Qs,{app:a})}},Js={id:"remove",order:20,icon:Oe,variant:"error",inline:!1,enabled:Pa,label:()=>o("appstore","Remove"),async callback(a){await P().uninstallApp(a.id)}},Xs={id:"update",icon:Me,variant:"primary",order:0,enabled(a){return At(a)?a.app_api?a.daemon&&a.daemon?.accepts_deploy_id==="manual-install"?!0:ia().daemonAccessible:!0:!1},label:a=>o("appstore","Update to {version}",{version:a.update}),async callback(a){await ja().updateApp(a.id)}},Zs=[Xs,Us,Gs,Fs,js,Hs,Js,Ys,...Ws].sort((a,s)=>a.order-s.order);function Za(a){return w(()=>ua(a)?Zs.filter(s=>s.enabled(ua(a))):[])}function Ks(a){const s=I(null),n=w(()=>{let u;return a.value?.app_api?u=ca:u=[a.value?.category??[]].flat().map(c=>U[c]).filter(c=>!!c).at(0)??(a.value?.app_api?ca:Pe),u?`<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="${u}" /></svg>`:null});return se(async()=>{if(!a.value?.icon)s.value=n.value;else{s.value=null;try{const u=await(await(await window.fetch(a.value.icon)).blob()).text();s.value=u.replaceAll(/fill="#(fff|ffffff)([a-z0-9]{1,2})?"/ig,'fill="currentColor"')}catch(u){s.value=n.value,q.error("Could not load app icon",{error:u})}}}),{appIcon:s}}const ap=x({__name:"AppstoreSidebar",setup(a){const s=pa(),n=fa(),u=P(),c=Ha(),t=w(()=>[s.params.id].flat()[0]),p=w(()=>u.getAppById(t.value)??null),{appIcon:d}=Ks(p),y=w(()=>p.value?p.value.license?o("appstore","Version {version}, {license}-licensed",{version:p.value.version,license:String(p.value.license).toUpperCase()}):o("appstore","Version {version}",{version:p.value.version}):""),T=I("details");X([p],()=>{T.value="details"});function E(){n.replace({name:s.name,params:{...s.params,id:void 0},query:c.getQuery()})}const m=I(!1),$=w(()=>p.value?.screenshot&&m.value);function S(){if(p.value?.releases&&p.value?.screenshot){const V=new Image;V.onload=()=>{m.value=!0},V.src=p.value.screenshot}}X([p],S),pe(S);const O=Za(()=>p.value);return(V,J)=>(i(),D(e(Qe),{active:T.value,"onUpdate:active":J[0]||(J[0]=W=>T.value=W),class:f([V.$style.appstoreSidebar,{[V.$style.appstoreSidebar_withScreenshot]:$.value}]),background:$.value?p.value.screenshot:void 0,compact:!$.value,name:p.value?.name??t.value,title:p.value?.name??t.value,subname:y.value,subtitle:y.value,onClose:E},ya({default:b(()=>[p.value?(i(),h(B,{key:1},[_(as,{app:p.value},null,8,["app"]),_(Vs,{app:p.value},null,8,["app"]),_(Ls,{app:p.value},null,8,["app"]),p.value.app_api?(i(),D(Yt,{key:0,app:p.value},null,8,["app"])):k("",!0)],64)):(i(),D(e(ha),{key:0,name:"No such app"}))]),_:2},[$.value?void 0:{name:"header",fn:b(()=>[_(e(C),{class:f(V.$style.appstoreSidebar__fallbackIcon),svg:e(d)??"",size:64},null,8,["class","svg"])]),key:"0"},p.value?{name:"description",fn:b(()=>[_(Wa,{app:p.value,actions:e(O),iconOnly:"",maxInlineActions:6},null,8,["app","actions"])]),key:"1"}:void 0]),1032,["active","class","background","compact","name","title","subname","subtitle"]))}}),ep="_appstoreSidebar_withScreenshot_1224s_3",tp="_appstoreSidebar__fallbackIcon_1224s_9",sp={appstoreSidebar_withScreenshot:ep,appstoreSidebar__fallbackIcon:tp},pp={$style:sp},np=z(ap,[["__cssModules",pp]]),lp=x({__name:"AppstoreApp",setup(a){const s=pa(),n=P(),u=w(()=>s.params.category?[s.params.category].flat()[0]:s.name==="apps-bundles"?"bundles":s.name==="apps-search"?"search":"discover"),c=w(()=>u.value in G?G[u.value]:n.getCategoryById(u.value)?.displayName??u.value),t=w(()=>`${c.value} - ${o("appstore","App store")}`),p=w(()=>!!s.params.id);return(d,y)=>{const T=ne("router-view");return i(),D(e(Ue),{appName:"appstore"},{default:b(()=>[_(qt),_(e(Ge),{class:f(d.$style.appstoreApp__content),pageHeading:e(o)("appstore","App store"),pageTitle:t.value},{default:b(()=>[c.value?(i(),h("h2",{key:0,class:f(d.$style.appstoreApp__heading)},g(c.value),3)):k("",!0),_(T)]),_:1},8,["class","pageHeading","pageTitle"]),p.value?(i(),D(np,{key:0})):k("",!0)]),_:1})}}}),op="_appstoreApp__content_1pi7x_2",ip="_appstoreApp__heading_1pi7x_7",rp={appstoreApp__content:op,appstoreApp__heading:ip},up={$style:rp},cp=z(lp,[["__cssModules",up]]),dp=H("appstore","appstoreEnabled",!0),mp=()=>K(()=>import("./AppstoreDiscover-DaEnlDUr.chunk.mjs"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92]),import.meta.url),_p=()=>K(()=>import("./UpdateAllDialog-DHTsJPoF.chunk.mjs").then(a=>a.c),__vite__mapDeps([93,1,2,3,4,26,11,9,10,12,15,7,8,16,27,28,24,25,29,13,14,30,31,32,33,34,35,6,17,36,22,23,37,38,39,40,41,42,43,44,45,46,47,48,20,21,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,18,19,75,76,77,78,79,80,81,82,83,84,85,86,5,87,88,94,92]),import.meta.url),yp=()=>K(()=>Promise.resolve().then(()=>bn),void 0,import.meta.url),vp=()=>K(()=>import("./AppstoreBrowse-D0JSgkhz.chunk.mjs"),__vite__mapDeps([95,2,3,4,11,1,9,10,12,20,8,21,13,14,93,26,15,7,16,27,28,24,25,29,30,31,32,33,34,35,6,17,36,22,23,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,18,19,75,76,77,78,79,80,81,82,83,84,85,86,5,87,88,94,92,89,90,96]),import.meta.url),bp=()=>K(()=>import("./UpdateAllDialog-DHTsJPoF.chunk.mjs").then(a=>a.d),__vite__mapDeps([93,1,2,3,4,26,11,9,10,12,15,7,8,16,27,28,24,25,29,13,14,30,31,32,33,34,35,6,17,36,22,23,37,38,39,40,41,42,43,44,45,46,47,48,20,21,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,18,19,75,76,77,78,79,80,81,82,83,84,85,86,5,87,88,94,92]),import.meta.url),fp=[{path:"/:index(index.php/)?settings/apps",name:"apps",redirect:dp?{name:"apps-discover"}:{name:"apps-manage",params:{category:"installed"}},children:[{path:"discover/:id?",name:"apps-discover",component:mp},{path:"bundles/:id?",name:"apps-bundles",component:yp},{path:":category(installed|enabled|disabled|updates)/:id?",name:"apps-manage",component:_p},{path:":category/:id?",name:"apps-category",component:vp},{path:"search/:id?",name:"apps-search",component:bp}]}],gp=ot({history:it(j("")),linkActiveClass:"active",routes:fp}),hp=le(),ra=oe(cp);ra.config.idPrefix="appstore",ra.use(hp),ra.use(gp),ra.mount("#content");const wp=x({__name:"LimitToGroupDialog",props:{app:{}},emits:["close"],setup(a,{emit:s}){const n=s,u=P(),c=Ja(),t=I(!1),p=I([]);X(()=>a.app,()=>{p.value=(a.app.groups??[]).map(m=>{const $=c.getGroupById(m);return $||c.searchGroups(m),$??{id:m,displayName:m,isNoUser:!0}})},{immediate:!0});const d=w(()=>c.groups.filter(m=>!p.value.includes(m))),y=nt(c.searchGroups,400);async function T(){try{t.value=!0,await u.limitAppToGroups(a.app.id,p.value.map(m=>m.id)),n("close")}finally{t.value=!1}}async function E(){try{t.value=!0,await u.limitAppToGroups(a.app.id,[]),n("close")}finally{t.value=!1}}return(m,$)=>(i(),D(e(za),{isForm:"",name:e(o)("appstore","Limit to groups"),onSubmit:T,onReset:E},{actions:b(()=>[_(e(Z),{disabled:t.value,type:"reset"},{default:b(()=>[N(g(e(o)("appstore","Reset limitation")),1)]),_:1},8,["disabled"]),_(e(Z),{disabled:t.value,type:"submit",variant:"primary"},ya({default:b(()=>[N(" "+g(e(o)("appstore","Save")),1)]),_:2},[t.value?{name:"icon",fn:b(()=>[_(e(da))]),key:"0"}:void 0]),1032,["disabled"])]),default:b(()=>[v("p",null,g(e(o)("appstore","Restrict the usage of {app} to members of the following groups.",{app:a.app.name})),1),_(e(Ye),{modelValue:p.value,"onUpdate:modelValue":$[0]||($[0]=S=>p.value=S),class:f(m.$style.limitToGroupDialog__input),keepOpen:"",labelOutside:"",multiple:"",options:d.value,onSearch:e(y)},null,8,["modelValue","class","options","onSearch"])]),_:1},8,["name"]))}}),Dp="_limitToGroupDialog__input_sofp5_2",Ap={limitToGroupDialog__input:Dp},kp={$style:Ap},Tp=z(wp,[["__cssModules",kp]]),$p=Object.freeze(Object.defineProperty({__proto__:null,default:Tp},Symbol.toStringTag,{value:"Module"})),Cp=["src","height","width"],Sp=x({__name:"AppIcon",props:{app:{},noFallback:{type:Boolean},size:{default:20}},setup(a){const s=w(()=>a.app.icon?.endsWith(".svg")),n=I("");return X(()=>a.app.icon,async()=>{if(n.value="",a.app.icon?.endsWith(".svg")){const u=await fetch(a.app.icon);u.ok&&(n.value=await u.text(),n.value=n.value.replaceAll(/(?<=[";])fill:\s?(#fff(fff)?|white)(;|(?="))/gi,"").replaceAll(/(?<=\s)fill="[^"]+"/gi,"").replaceAll(/(?<=\s)color="[^"]+"/gi,""))}},{immediate:!0}),(u,c)=>(i(),h("span",{class:f(u.$style.appIcon)},[n.value?(i(),D(e(C),{key:0,size:a.size,svg:n.value},null,8,["size","svg"])):a.app.icon&&!s.value?(i(),h("img",{key:1,class:f(u.$style.appIcon__image),alt:"",src:a.app.icon,height:a.size,width:a.size},null,10,Cp)):a.noFallback?k("",!0):(i(),D(e(C),{key:2,path:e(ca),size:a.size},null,8,["path","size"]))],2))}}),Ip="_appIcon_mcsmb_2",xp="_appIcon__image_mcsmb_7",Np={appIcon:Ip,appIcon__image:xp},Ep={$style:Np},Rp=z(Sp,[["__cssModules",Ep]]),Bp={key:0,class:"hidden-visually"},Lp={class:"hidden-visually"},zp={key:0},Op={key:1},Mp=["title"],Pp={key:0,"aria-hidden":"true"},qp=x({__name:"AppTableRow",props:{app:{},isNarrow:{type:Boolean},isWide:{type:Boolean}},setup(a){const s=pa(),n=w(()=>({...s,params:{...s.params,id:a.app.id},query:{...s.query}})),u=w(()=>({id:"details",order:99,enabled:()=>!0,label:()=>o("appstore","Show details"),icon:qe,to:()=>n.value,inline:!1})),c=Xa(()=>a.app),t=Za(()=>a.app),p=w(()=>[...t.value,u.value]);return(d,y)=>(i(),h("tr",{class:f(d.$style.appTableRow)},[v("td",{class:f(d.$style.appTableRow__nameCell)},[_(e(Z),{alignment:"start",title:e(o)("appstore","Show details"),to:n.value,variant:"tertiary-no-background",wide:""},{icon:b(()=>[a.app.loading?(i(),D(e(da),{key:0,size:24})):(i(),D(Rp,{key:1,app:a.app,size:24},null,8,["app"]))]),default:b(()=>[N(" "+g(a.app.name)+" ",1),a.app.loading?(i(),h("span",Bp,"("+g(e(o)("appstore","is loading…"))+")",1)):k("",!0),v("span",Lp,"("+g(e(o)("appstore","Show details"))+")",1)]),_:1},8,["title","to"])],2),v("td",null,[v("span",{class:f(d.$style.appTableRow__versionCell)},g(a.app.version),3)]),a.isNarrow?k("",!0):(i(),h("td",zp,[v("div",{class:f(d.$style.appTableRow__levelCell)},[a.app.level?(i(),D(Ya,{key:0,level:a.app.level},null,8,["level"])):k("",!0),"daemon"in a.app&&a.app.daemon?(i(),D(Qa,{key:1,daemon:a.app.daemon},null,8,["daemon"])):k("",!0)],2)])),a.isWide?(i(),h("td",Op,[e(c).length>0?(i(),h("ul",{key:0,class:f(d.$style.appTableRow__groupsCell),title:e(c).map(T=>T.displayName).join(", ")},[(i(!0),h(B,null,M(e(c),(T,E)=>(i(),h(B,{key:T.id},[E===3?(i(),h("li",Pp," … ")):k("",!0),v("li",{class:f({"hidden-visually":E>2})},[_(e(at),{text:T.displayName,noClose:""},null,8,["text"])],2)],64))),128))],10,Mp)):k("",!0)])):k("",!0),v("td",null,[v("div",{class:f(d.$style.appTableRow__actionsCell)},[_(Wa,{class:f(d.$style.appTableRow__actionsCellActions),app:a.app,actions:p.value,iconOnly:a.isNarrow},null,8,["class","app","actions","iconOnly"])],2)])],2))}}),Vp="_appTableRow_yekky_2",Gp="_appTableRow__nameCell_yekky_11",Up="_appTableRow__levelCell_yekky_16",Fp="_appTableRow__versionCell_yekky_22",jp="_appTableRow__groupsCell_yekky_26",Hp="_appTableRow__actionsCell_yekky_31",Wp="_appTableRow__actionsCellActions_yekky_37",Qp={appTableRow:Vp,appTableRow__nameCell:Gp,appTableRow__levelCell:Up,appTableRow__versionCell:Fp,appTableRow__groupsCell:jp,appTableRow__actionsCell:Hp,appTableRow__actionsCellActions:Wp},Yp={$style:Qp},Jp=z(qp,[["__cssModules",Yp]]),Xp={hidden:""},Zp={key:0},Kp={key:1},an=x({__name:"AppTable",props:{apps:{}},setup(a){const s=Ca("table"),{width:n}=lt(s),u=w(()=>n.value<768),c=w(()=>n.value>=1280);return(t,p)=>(i(),h("table",{ref:"table",class:f([t.$style.appTable,{[t.$style.appTable_narrow]:u.value,[t.$style.appTable_wide]:c.value}])},[v("colgroup",null,[v("col",{class:f(t.$style.appTable__colName)},null,2),v("col",{class:f(t.$style.appTable__colVersion)},null,2),u.value?k("",!0):(i(),h("col",{key:0,class:f(t.$style.appTable__colSupport)},null,2)),c.value?(i(),h("col",{key:1,class:f(t.$style.appTable__colGroups)},null,2)):k("",!0),v("col",{class:f(t.$style.appTable__colActions)},null,2)]),v("thead",Xp,[v("tr",null,[v("th",null,g(e(o)("appstore","App name")),1),v("th",null,g(e(o)("appstore","Version")),1),u.value?k("",!0):(i(),h("th",Zp,g(e(o)("appstore","Support level")),1)),c.value?(i(),h("th",Kp,g(e(o)("appstore","Groups")),1)):k("",!0),v("th",null,g(e(o)("appstore","Actions")),1)])]),v("tbody",null,[(i(!0),h(B,null,M(a.apps,d=>(i(),D(Jp,{key:d.id,app:d,isNarrow:u.value,isWide:c.value},null,8,["app","isNarrow","isWide"]))),128))])],2))}}),en="_appTable_ss46x_2",tn="_appTable__colName_ss46x_7",sn="_appTable_narrow_ss46x_11",pn="_appTable_wide_ss46x_15",nn="_appTable__colSupport_ss46x_19",ln="_appTable__colActions_ss46x_27",on={appTable:en,appTable__colName:tn,appTable_narrow:sn,appTable_wide:pn,appTable__colSupport:nn,appTable__colActions:ln},rn={$style:on},un=z(an,[["__cssModules",rn]]),cn=x({__name:"AppstoreBundles",setup(a){const s=P(),n=w(()=>s.bundles.map(p=>({...p,apps:p.appIdentifiers.map(d=>s.apps.find(y=>y.id===d)).filter(Boolean),isEnabling:!1})));function u(p){return p.appIdentifiers.every(d=>{const y=s.apps.find(T=>T.id===d);return y&&(y.active||qa(y))})}function c(p){return p.appIdentifiers.every(d=>{const y=s.apps.find(T=>T.id===d);return y&&y.active})}async function t(p){p.isEnabling=!0,await s.enableBundle(p.id),p.isEnabling=!1}return(p,d)=>e(s).isLoadingApps?(i(),D(e(ha),{key:0,name:e(o)("appstore","Loading app list")},{icon:b(()=>[_(e(da),{size:64})]),_:1},8,["name"])):(i(!0),h(B,{key:1},M(n.value,y=>(i(),h("section",{key:y.id},[v("div",{class:f(p.$style.appstoreBundles__header)},[v("h3",null,g(y.name),1),c(y)?k("",!0):(i(),D(e(Z),{key:0,disabled:!u(y),variant:"primary",onClick:T=>t(y)},{icon:b(()=>[_(e(C),{path:e(Ve)},null,8,["path"])]),default:b(()=>[N(" "+g(e(o)("appstore","Download and enable all")),1)]),_:1},8,["disabled","onClick"]))],2),_(un,{class:f(p.$style.appstoreBundles__appTable),apps:y.apps},null,8,["class","apps"])]))),128))}}),dn="_appstoreBundles__header_oplvy_2",mn="_appstoreBundles__appTable_oplvy_11",_n={appstoreBundles__header:dn,appstoreBundles__appTable:mn},yn={$style:_n},vn=z(cn,[["__cssModules",yn]]),bn=Object.freeze(Object.defineProperty({__proto__:null,default:vn},Symbol.toStringTag,{value:"Module"}));export{fl as A,bs as B,Ga as a,Ha as b,aa as c,un as d,Ya as e,Qa as f,ja as g,q as l,oa as n,P as u};
//# sourceMappingURL=appstore-main.mjs.map