`+s+""+n+`>
`}listitem(e){return`${this.parser.parse(e.tokens)}
`}checkbox({checked:e}){return" '}paragraph({tokens:e}){return`${this.parser.parseInline(e)}
`}table(e){let t="",a="";for(let n=0;n${s}`),`
`}tablerow({text:e}){return`
${e}
`}tablecell(e){let t=this.parser.parseInline(e.tokens),a=e.header?"th":"td";return(e.align?`<${a} align="${e.align}">`:`<${a}>`)+t+`${a}>
`}strong({tokens:e}){return`${this.parser.parseInline(e)} `}em({tokens:e}){return`${this.parser.parseInline(e)} `}codespan({text:e}){return`${V(e,!0)}`}br(e){return" "}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:t,tokens:a}){let s=this.parser.parseInline(a),n=ct(e);if(n===null)return s;e=n;let l='"+s+" ",l}image({href:e,title:t,text:a,tokens:s}){s&&(a=this.parser.parseInline(s,this.parser.textRenderer));let n=ct(e);if(n===null)return V(a);e=n;let l=` ",l}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:V(e.text)}},at=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return""+e}image({text:e}){return""+e}br(){return""}checkbox({raw:e}){return e}},Q=class Me{options;renderer;textRenderer;constructor(t){this.options=t||re,this.options.renderer=this.options.renderer||new Ie,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new at}static parse(t,a){return new Me(a).parse(t)}static parseInline(t,a){return new Me(a).parseInline(t)}parse(t){this.renderer.parser=this;let a="";for(let s=0;s{let r=n[l].flat(1/0);a=a.concat(this.walkTokens(r,t))}):n.tokens&&(a=a.concat(this.walkTokens(n.tokens,t)))}}return a}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(a=>{let s={...a};if(s.async=this.defaults.async||s.async||!1,a.extensions&&(a.extensions.forEach(n=>{if(!n.name)throw new Error("extension name required");if("renderer"in n){let l=t.renderers[n.name];l?t.renderers[n.name]=function(...r){let o=n.renderer.apply(this,r);return o===!1&&(o=l.apply(this,r)),o}:t.renderers[n.name]=n.renderer}if("tokenizer"in n){if(!n.level||n.level!=="block"&&n.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let l=t[n.level];l?l.unshift(n.tokenizer):t[n.level]=[n.tokenizer],n.start&&(n.level==="block"?t.startBlock?t.startBlock.push(n.start):t.startBlock=[n.start]:n.level==="inline"&&(t.startInline?t.startInline.push(n.start):t.startInline=[n.start]))}"childTokens"in n&&n.childTokens&&(t.childTokens[n.name]=n.childTokens)}),s.extensions=t),a.renderer){let n=this.defaults.renderer||new Ie(this.defaults);for(let l in a.renderer){if(!(l in n))throw new Error(`renderer '${l}' does not exist`);if(["options","parser"].includes(l))continue;let r=l,o=a.renderer[r],c=n[r];n[r]=(...p)=>{let b=o.apply(n,p);return b===!1&&(b=c.apply(n,p)),b||""}}s.renderer=n}if(a.tokenizer){let n=this.defaults.tokenizer||new ze(this.defaults);for(let l in a.tokenizer){if(!(l in n))throw new Error(`tokenizer '${l}' does not exist`);if(["options","rules","lexer"].includes(l))continue;let r=l,o=a.tokenizer[r],c=n[r];n[r]=(...p)=>{let b=o.apply(n,p);return b===!1&&(b=c.apply(n,p)),b}}s.tokenizer=n}if(a.hooks){let n=this.defaults.hooks||new fe;for(let l in a.hooks){if(!(l in n))throw new Error(`hook '${l}' does not exist`);if(["options","block"].includes(l))continue;let r=l,o=a.hooks[r],c=n[r];fe.passThroughHooks.has(l)?n[r]=p=>{if(this.defaults.async&&fe.passThroughHooksRespectAsync.has(l))return(async()=>{let u=await o.call(n,p);return c.call(n,u)})();let b=o.call(n,p);return c.call(n,b)}:n[r]=(...p)=>{if(this.defaults.async)return(async()=>{let u=await o.apply(n,p);return u===!1&&(u=await c.apply(n,p)),u})();let b=o.apply(n,p);return b===!1&&(b=c.apply(n,p)),b}}s.hooks=n}if(a.walkTokens){let n=this.defaults.walkTokens,l=a.walkTokens;s.walkTokens=function(r){let o=[];return o.push(l.call(this,r)),n&&(o=o.concat(n.call(this,r))),o}}this.defaults={...this.defaults,...s}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return F.lex(e,t??this.defaults)}parser(e,t){return Q.parse(e,t??this.defaults)}parseMarkdown(e){return(t,a)=>{let s={...a},n={...this.defaults,...s},l=this.onError(!!n.silent,!!n.async);if(this.defaults.async===!0&&s.async===!1)return l(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof t>"u"||t===null)return l(new Error("marked(): input parameter is undefined or null"));if(typeof t!="string")return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));if(n.hooks&&(n.hooks.options=n,n.hooks.block=e),n.async)return(async()=>{let r=n.hooks?await n.hooks.preprocess(t):t,o=await(n.hooks?await n.hooks.provideLexer(e):e?F.lex:F.lexInline)(r,n),c=n.hooks?await n.hooks.processAllTokens(o):o;n.walkTokens&&await Promise.all(this.walkTokens(c,n.walkTokens));let p=await(n.hooks?await n.hooks.provideParser(e):e?Q.parse:Q.parseInline)(c,n);return n.hooks?await n.hooks.postprocess(p):p})().catch(l);try{n.hooks&&(t=n.hooks.preprocess(t));let r=(n.hooks?n.hooks.provideLexer(e):e?F.lex:F.lexInline)(t,n);n.hooks&&(r=n.hooks.processAllTokens(r)),n.walkTokens&&this.walkTokens(r,n.walkTokens);let o=(n.hooks?n.hooks.provideParser(e):e?Q.parse:Q.parseInline)(r,n);return n.hooks&&(o=n.hooks.postprocess(o)),o}catch(r){return l(r)}}}onError(e,t){return a=>{if(a.message+=`
Please report this to https://github.com/markedjs/marked.`,e){let s="An error occurred:
"+V(a.message+"",!0)+" ";return t?Promise.resolve(s):s}if(t)return Promise.reject(a);throw a}}},ne=new Bs;function C(e,t){return ne.parse(e,t)}C.options=C.setOptions=function(e){return ne.setOptions(e),C.defaults=ne.defaults,rt(C.defaults),C},C.getDefaults=Ve,C.defaults=re,C.use=function(...e){return ne.use(...e),C.defaults=ne.defaults,rt(C.defaults),C},C.walkTokens=function(e,t){return ne.walkTokens(e,t)},C.parseInline=ne.parseInline,C.Parser=Q,C.parser=Q.parse,C.Renderer=Ie,C.TextRenderer=at,C.Lexer=F,C.lexer=F.lex,C.Tokenizer=ze,C.Hooks=fe,C.parse=C,C.options,C.setOptions,C.use,C.walkTokens,C.parseInline,Q.parse,F.lex;function Ps(e,t){const a=new C.Renderer;return a.blockquote=Ms,a.link=qs,a.image=Ns,$(()=>{const s=t?.minHeadingLevel??1;a.heading=Os(s);const n=be(e).trim();return la.sanitize(C(n,{async:!1,renderer:a,gfm:!1,breaks:!1,pedantic:!1}),{ALLOWED_TAGS:["h1","h2","h3","h4","h5","h6","strong","p","a","ul","ol","li","em","del","blockquote"]})})}function qs({href:e,title:t,text:a}){let s;try{s=new URL(e)}catch{return""}if(s.protocol!=="http:"&&s.protocol!=="https:")return"";let n='"+a.replaceAll(/(?",n}function Ns({title:e,text:t}){return t||(e??"")}function Ms({text:e}){return`${e} `}function Os(e){return({text:t,depth:a})=>(a=Math.min(6,a+(e-1)),`${t} `)}const Gs=["innerHTML"],js=B({__name:"MarkdownPreview",props:{text:{},minHeadingLevel:{default:1}},setup(e){const t=Ps(()=>e.text,{minHeadingLevel:e.minHeadingLevel});return(a,s)=>(h(),x("div",{class:"settings-markdown",innerHTML:i(t)},null,8,Gs))}}),Zt=N(js,[["__scopeId","data-v-cf1f9874"]]),Hs=B({__name:"AppDescriptionTab",props:{app:{}},setup(e){return(t,a)=>(h(),D(i(Le),{id:"desc",name:i(d)("appstore","Description"),order:0},{icon:y(()=>[k(i(L),{path:i(Za)},null,8,["path"])]),default:y(()=>[_("div",{class:w(t.$style.appDescriptionTab)},[k(Zt,{text:e.app.description,minHeadingLevel:3},null,8,["text"])],2)]),_:1},8,["name"]))}}),Zs="_appDescriptionTab_118mz_2",Us={appDescriptionTab:Zs},Fs={$style:Us},Qs=N(Hs,[["__cssModules",Fs]]),Vs=["title"],Ws=B({__name:"BadgeAppDaemon",props:{daemon:{}},setup(e){return(t,a)=>e.daemon?(h(),x("span",{key:0,class:w(t.$style.appDaemonBadge),title:e.daemon.name},[k(i(L),{path:i($t),size:20,inline:""},null,8,["path"]),q(" "+v(e.daemon.display_name),1)],10,Vs)):I("",!0)}}),Xs="_appDaemonBadge_1n34s_2",Ys={appDaemonBadge:Xs},Js={$style:Ys},Ut=N(Ws,[["__cssModules",Js]]),Ks=["title"],el=B({__name:"BadgeAppLevel",props:{level:{}},setup(e){const t=e,a=$(()=>t.level===300),s=$(()=>t.level===200),n=$(()=>a.value?wt:Ue),l=$(()=>a.value?d("appstore","Supported"):d("appstore","Featured")),r=$(()=>a.value?d("appstore","This app is supported via your current Nextcloud subscription."):d("appstore","Featured apps are developed by and within the community. They offer central functionality and are ready for production use."));return(o,c)=>a.value||s.value?(h(),x("span",{key:0,class:w([o.$style.appLevelBadge,{[o.$style.appLevelBadge__supported]:a.value}]),title:r.value},[k(i(L),{path:n.value,size:20,inline:""},null,8,["path"]),q(" "+v(l.value),1)],10,Ks)):I("",!0)}}),tl="_appLevelBadge_q2et3_2",al="_appLevelBadge__supported_q2et3_15",nl={appLevelBadge:tl,appLevelBadge__supported:al},sl={$style:nl},Ft=N(el,[["__cssModules",sl]]),ll=["aria-label","title"],rl=B({__name:"BadgeAppScore",props:{app:{}},setup(e){const t=$(()=>!e.app.shipped&&e.app.ratingNumOverall&&e.app.ratingNumOverall>5),a=$(()=>e.app.ratingOverall??4),s=$(()=>{const o=(a.value*5).toFixed(1);return d("appstore","Community rating: {score}/5",{score:o})}),n=$(()=>Math.floor(a.value*5+.25)),l=$(()=>Math.min(Math.floor((1-a.value)*5+.25),5-n.value)),r=$(()=>n.value+l.value<5);return(o,c)=>t.value?(h(),x("span",{key:0,role:"img","aria-label":s.value,title:s.value,class:w(o.$style.badgeAppScore)},[(h(!0),x(M,null,H(n.value,p=>(h(),D(i(L),{key:`full-star-${p}`,path:i(Ue),inline:""},null,8,["path"]))),128)),r.value?(h(),D(i(L),{key:0,path:i(Ua),inline:""},null,8,["path"])):I("",!0),(h(!0),x(M,null,H(l.value,p=>(h(),D(i(L),{key:`empty-star-${p}`,path:i(Tt),inline:""},null,8,["path"]))),128))],10,ll)):I("",!0)}}),il="_badgeAppScore_1t97c_2",ol={badgeAppScore:il},pl={$style:ol},cl=N(rl,[["__cssModules",pl]]),ul=new kt({concurrency:3}),Qt=_e("groups",()=>{const e=E(new Map);async function t(l){return await ul.add(()=>n(l))}async function a(l){const r=je("/cloud/groups/details");try{const{data:o}=await O.get(r,{params:{search:l.trim(),limit:10}});for(const c of o.ocs.data.groups)e.value.has(c.id)||e.value.set(c.id,{id:c.id,displayName:c.displayname,isNoUser:!0})}catch(o){U.error("Failed to search groups",{error:o})}}function s(l){return e.value.get(l)}return{groups:$(()=>Array.from(e.value.values())),searchGroups:a,getGroupById:s,fetchGroupById:t};async function n(l){return e.value.has(l)||await a(l),e.value.get(l)}});function Vt(e){const t=Qt(),a=E([]);return oe(()=>be(e).groups,async()=>{const s=be(e).groups;if(s===void 0){a.value=[];return}const n=s.map(r=>t.fetchGroupById(r)),l=await Promise.all(n);a.value=l.filter(Boolean)},{immediate:!0}),gt(a)}const dl={class:"app-details"},hl=["aria-label"],gl=["id"],ml=["aria-labelledby"],fl=["title"],bl=["aria-label"],kl=["href"],_l=B({__name:"AppDetailsTab",props:{app:{}},setup(e){const t=Z(),a=Kt(),s=$(()=>e.app.releases?.map(u=>u.lastModified).map(u=>Date.parse(u)).sort().at(-1)),n=$(()=>e.app?[e.app.author].flat().map(b).sort((u,f)=>u.split(" ").at(-1).localeCompare(f.split(" ").at(-1))).join(", "):""),l=$(()=>`https://apps.nextcloud.com/apps/${e.app.id}`),r=Vt(()=>e.app),o=$(()=>{const u=[];return e.app.internal||u.push({id:"appstore",href:l.value,label:d("appstore","View in store")}),e.app.website&&u.push({id:"website",href:e.app.website,label:d("appstore","Visit website")}),e.app.documentation&&(e.app.documentation.user&&u.push({id:"doc-user",href:e.app.documentation.user,label:d("appstore","Usage documentation")}),e.app.documentation.admin&&u.push({id:"doc-admin",href:e.app.documentation.admin,label:d("appstore","Admin documentation")}),e.app.documentation.developer&&u.push({id:"doc-developer",href:e.app.documentation.developer,label:d("appstore","Developer documentation")})),u}),c=$(()=>[e.app.category].flat().map(u=>t.getCategoryById(u)?.displayName??u).join(", ")),p=$(()=>e.app.active&&!Qe(e.app));function b(u){return u["@value"]?u["@value"]:u}return(u,f)=>(h(),D(i(Le),{id:"details",name:i(d)("appstore","Details"),order:1},{icon:y(()=>[k(i(L),{path:i(Fa)},null,8,["path"])]),default:y(()=>[_("div",dl,[_("div",{class:w(u.$style.appstoreDetailsTab__badges)},[k(Ft,{level:e.app.level},null,8,["level"]),e.app.app_api&&e.app.daemon?(h(),D(Ut,{key:0,daemon:e.app.daemon},null,8,["daemon"])):I("",!0),k(cl,{app:e.app},null,8,["app"])],2),!e.app.isCompatible&&e.app.missingDependencies&&e.app.missingDependencies.length?(h(),D(i(nt),{key:0,type:"error"},{default:y(()=>[q(v(i(d)("appstore","This app cannot be installed because the following dependencies are not fulfilled:"))+" ",1),_("ul",{"aria-label":i(d)("appstore","Missing dependencies"),class:w(u.$style.appstoreDetailsTab__missingDependencies)},[(h(!0),x(M,null,H(e.app.missingDependencies,(A,S)=>(h(),x("li",{key:S},v(A),1))),128))],10,hl)]),_:1})):I("",!0),p.value?(h(),D(i(nt),{key:1,type:"info"},{default:y(()=>[q(v(i(d)("appstore","This app cannot be limited to groups because it provides functionality that is executed before group membership is determined.")),1)]),_:1})):I("",!0),i(r).length?(h(),x("div",{key:2,class:w(u.$style.appstoreDetailsTab__section)},[_("h4",{id:i(a)},v(i(d)("appstore","Limited to groups")),9,gl),_("ul",{"aria-labelledby":i(a),class:w(u.$style.appstoreDetailsTab__sectionDetails)},[(h(!0),x(M,null,H(i(r),A=>(h(),x("li",{key:A.id,title:A.id},v(A.displayName),9,fl))),128))],10,ml)],2)):I("",!0),s.value&&!e.app.shipped?(h(),x("div",{key:3,class:w(u.$style.appstoreDetailsTab__section)},[_("h4",null,v(i(d)("appstore","Latest updated")),1),k(i(_a),{class:w(u.$style.appstoreDetailsTab__sectionDetails),timestamp:s.value},null,8,["class","timestamp"])],2)):I("",!0),_("div",{class:w(u.$style.appstoreDetailsTab__section)},[_("h4",null,v(i(d)("appstore","Author")),1),_("p",{class:w(u.$style.appstoreDetailsTab__sectionDetails)},v(n.value),3)],2),_("div",{class:w(u.$style.appstoreDetailsTab__section)},[_("h4",null,v(i(d)("appstore","Categories")),1),_("p",{class:w(u.$style.appstoreDetailsTab__sectionDetails)},v(c.value),3)],2),o.value.length>0?(h(),x("div",{key:4,class:w(u.$style.appstoreDetailsTab__section)},[_("h4",null,v(i(d)("appstore","Resources")),1),_("ul",{class:w(u.$style.appstoreDetailsTab__resources),"aria-label":i(d)("appstore","Documentation resources")},[(h(!0),x(M,null,H(o.value,A=>(h(),x("li",{key:A.id,class:w(u.$style.appstoreDetailsTab__resourcesItem)},[_("a",{class:w(u.$style.appstoreDetailsTab__resourcesLink),href:A.href,target:"_blank",rel:"noreferrer noopener"},v(A.label)+" ↗ ",11,kl)],2))),128))],10,bl)],2)):I("",!0)])]),_:1},8,["name"]))}}),yl="_appstoreDetailsTab__badges_4x76r_2",wl="_appstoreDetailsTab__section_4x76r_8",vl="_appstoreDetailsTab__sectionDetails_4x76r_18",xl="_appstoreDetailsTab__missingDependencies_4x76r_22",$l="_appstoreDetailsTab__resourcesLink_4x76r_28",Tl="_appstoreDetailsTab__resourcesItem_4x76r_32",Al={appstoreDetailsTab__badges:yl,appstoreDetailsTab__section:wl,appstoreDetailsTab__sectionDetails:vl,appstoreDetailsTab__missingDependencies:xl,appstoreDetailsTab__resourcesLink:$l,appstoreDetailsTab__resourcesItem:Tl},Sl={$style:Al},Rl=N(_l,[["__cssModules",Sl]]),Dl=B({__name:"AppReleasesTab",props:{app:{}},setup(e){const t=e,a=$(()=>(t.app.releases??[]).filter(n=>{const l=Object.values(n.translations??{});return l.length>0&&l.some(({changelog:r})=>!!r)}));function s(n){return n.translations[ra()]?.changelog??n.translations.en?.changelog??""}return(n,l)=>a.value.length>0?(h(),D(i(Le),{key:0,id:"changelog",name:i(d)("appstore","Changelog"),order:2},{icon:y(()=>[k(i(L),{path:i(Qa),size:24},null,8,["path"])]),default:y(()=>[(h(!0),x(M,null,H(a.value,r=>(h(),x("div",{key:r.version,class:w(n.$style.appReleasesTab)},[_("h3",{class:w(n.$style.appReleasesTab__heading)},v(r.version),3),k(Zt,{class:w(n.$style.appReleasesTab__text),minHeadingLevel:3,text:s(r)},null,8,["class","text"])],2))),128))]),_:1},8,["name"])):I("",!0)}}),zl="_appReleasesTab__heading_9xawz_2",Il="_appReleasesTab__text_9xawz_7",Cl={appReleasesTab__heading:zl,appReleasesTab__text:Il},Ll={$style:Cl},El=N(Dl,[["__cssModules",Ll]]),Bl={id:"disable",icon:vt,order:10,enabled:Dt,label:()=>d("appstore","Disable"),async callback(e){await Z().disableApp(e.id)}},Pl={id:"enable",icon:xt,order:1,variant:"primary",enabled(e){return!ue(e)&&St(e)},label:()=>d("appstore","Enable"),async callback(e){await Z().enableApp(e.id)}},ql={id:"force-enable",icon:Va,order:3,inline:!1,variant:"warning",label:()=>d("appstore","Force enable"),enabled(e){return!ue(e)&&Rt(e)&&xe(e)},async callback(e){await Z().enableApp(e.id,!0)}},Nl={id:"install",icon:Ze,order:5,enabled(e){return ue(e)&&!xe(e)},label:e=>e.app_api?d("appstore","Deploy and enable"):e.needsDownload?d("appstore","Download and enable"):d("appstore","Install and enable"),async callback(e){await Z().enableApp(e.id)}},Ml={id:"install-forced",icon:Ze,order:5,inline:!1,enabled(e){return ue(e)&&xe(e)},label:e=>e.app_api?d("appstore","Deploy and force enable"):e.needsDownload?d("appstore","Download and force enable"):d("appstore","Install and force enable"),async callback(e){await Z().enableApp(e.id,!0)}},Ol=[{id:"rate",icon:Tt,order:30,inline:!1,label:()=>d("appstore","Rate the app"),enabled(e){return!e.shipped},href(e){return`https://apps.nextcloud.com/apps/${encodeURIComponent(e.id)}#comments`}},{id:"report-bug",icon:Wa,order:32,inline:!1,label:()=>d("appstore","Report a bug"),enabled(e){return!!e.bugs},href(e){return e.bugs}},{id:"discussion",icon:Xa,order:35,inline:!1,label:()=>d("appstore","Ask questions or discuss the app"),enabled(e){return!!e.discussion},href(e){return e.discussion}},{id:"website",icon:Ya,order:38,inline:!1,label:()=>d("appstore","Visit the website"),enabled(e){return!!e.website},href(e){return e.website}}],Gl=ea(()=>ce(()=>Promise.resolve().then(()=>_r),void 0,import.meta.url)),jl={id:"limit-to-group",icon:Ja,order:16,inline:!1,label:()=>d("appstore","Limit to groups"),enabled:Qe,async callback(e){await yt(Gl,{app:e})}},Hl={id:"remove",order:20,icon:Ka,variant:"error",inline:!1,enabled:At,label:()=>d("appstore","Remove"),async callback(e){await Z().uninstallApp(e.id)}},Zl={id:"update",icon:en,variant:"primary",order:0,enabled(e){return vn(e)?e.app_api?e.daemon&&e.daemon?.accepts_deploy_id==="manual-install"?!0:$e().daemonAccessible:!0:!1},label:e=>d("appstore","Update to {version}",{version:e.update}),async callback(e){await Ct().updateApp(e.id)}},Ul=[Zl,Pl,Bl,ql,Nl,Ml,Hl,jl,...Ol].sort((e,t)=>e.order-t.order);function Wt(e){return $(()=>be(e)?Ul.filter(t=>t.enabled(be(e))):[])}function Fl(e){const t=E(null),a=$(()=>{let s;return e.value?.app_api?s=Re:s=[e.value?.category??[]].flat().map(n=>X[n]).filter(n=>!!n).at(0)??(e.value?.app_api?Re:tn),s?` `:null});return ta(async()=>{if(!e.value?.icon)t.value=a.value;else{t.value=null;try{const s=await(await(await window.fetch(e.value.icon)).blob()).text();t.value=s.replaceAll(/fill="#(fff|ffffff)([a-z0-9]{1,2})?"/ig,'fill="currentColor"')}catch(s){t.value=a.value,U.error("Could not load app icon",{error:s})}}}),{appIcon:t}}const Ql=B({__name:"AppstoreSidebar",setup(e){const t=ye(),a=Ge(),s=Z(),n=Lt(),l=$(()=>[t.params.id].flat()[0]),r=$(()=>s.getAppById(l.value)??null),{appIcon:o}=Fl(r),c=$(()=>r.value?r.value.license?d("appstore","Version {version}, {license}-licensed",{version:r.value.version,license:String(r.value.license).toUpperCase()}):d("appstore","Version {version}",{version:r.value.version}):""),p=E("details");oe([r],()=>{p.value="details"});function b(){a.replace({name:t.name,params:{...t.params,id:void 0},query:n.getQuery()})}const u=E(!1),f=$(()=>r.value?.screenshot&&u.value);function A(){if(r.value?.releases&&r.value?.screenshot){const P=new Image;P.onload=()=>{u.value=!0},P.src=r.value.screenshot}}oe([r],A),aa(A);const S=Wt(()=>r.value);return(P,Y)=>(h(),D(i(ma),{active:p.value,"onUpdate:active":Y[0]||(Y[0]=T=>p.value=T),class:w([P.$style.appstoreSidebar,{[P.$style.appstoreSidebar_withScreenshot]:f.value}]),background:f.value?r.value.screenshot:void 0,compact:!f.value,name:r.value?.name??l.value,title:r.value?.name??l.value,subname:c.value,subtitle:c.value,onClose:b},Oe({default:y(()=>[r.value?(h(),x(M,{key:1},[k(Qs,{app:r.value},null,8,["app"]),k(El,{app:r.value},null,8,["app"]),k(Rl,{app:r.value},null,8,["app"]),r.value.app_api?(h(),D(Vn,{key:0,app:r.value},null,8,["app"])):I("",!0)],64)):(h(),D(i(He),{key:0,name:"No such app"}))]),_:2},[f.value?void 0:{name:"header",fn:y(()=>[k(i(L),{class:w(P.$style.appstoreSidebar__fallbackIcon),svg:i(o)??"",size:64},null,8,["class","svg"])]),key:"0"},r.value?{name:"description",fn:y(()=>[k(Et,{app:r.value,actions:i(S),iconOnly:"",maxInlineActions:6},null,8,["app","actions"])]),key:"1"}:void 0]),1032,["active","class","background","compact","name","title","subname","subtitle"]))}}),Vl="_appstoreSidebar_withScreenshot_1224s_3",Wl="_appstoreSidebar__fallbackIcon_1224s_9",Xl={appstoreSidebar_withScreenshot:Vl,appstoreSidebar__fallbackIcon:Wl},Yl={$style:Xl},Jl=N(Ql,[["__cssModules",Yl]]),Kl=B({__name:"AppstoreApp",setup(e){const t=ye(),a=Z(),s=$(()=>t.params.category?[t.params.category].flat()[0]:t.name==="apps-bundles"?"bundles":t.name==="apps-search"?"search":"discover"),n=$(()=>s.value in W?W[s.value]:a.getCategoryById(s.value)?.displayName??s.value),l=$(()=>`${n.value} - ${d("appstore","App store")}`),r=$(()=>!!t.params.id);return(o,c)=>{const p=na("router-view");return h(),D(i(ca),{appName:"appstore"},{default:y(()=>[k(Mn),k(i(pa),{class:w(o.$style.appstoreApp__content),pageHeading:i(d)("appstore","App store"),pageTitle:l.value},{default:y(()=>[n.value?(h(),x("h2",{key:0,class:w(o.$style.appstoreApp__heading)},v(n.value),3)):I("",!0),k(p)]),_:1},8,["class","pageHeading","pageTitle"]),r.value?(h(),D(Jl,{key:0})):I("",!0)]),_:1})}}}),er="_appstoreApp__content_1pi7x_2",tr="_appstoreApp__heading_1pi7x_7",ar={appstoreApp__content:er,appstoreApp__heading:tr},nr={$style:ar},sr=N(Kl,[["__cssModules",nr]]),lr=te("appstore","appstoreEnabled",!0),rr=()=>ce(()=>import("./AppstoreDiscover-DLzLfjqx.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]),import.meta.url),ir=()=>ce(()=>import("./UpdateAllDialog-Bx9vMq27.chunk.mjs").then(e=>e.c),__vite__mapDeps([75,1,2,3,4,5,6,7,8,9,10,25,13,14,26,27,23,24,28,15,16,29,30,31,32,33,12,17,34,20,21,35,36,37,38,39,40,41,42,18,19,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,11,76,73,74]),import.meta.url),or=()=>ce(()=>Promise.resolve().then(()=>pi),void 0,import.meta.url),pr=()=>ce(()=>import("./AppstoreBrowse-COQXh2ij.chunk.mjs"),__vite__mapDeps([77,6,7,4,1,2,5,8,9,18,19,15,16,75,3,10,25,13,14,26,27,23,24,28,29,30,31,32,33,12,17,34,20,21,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,11,76,73,74,22,70,71,78]),import.meta.url),cr=()=>ce(()=>import("./UpdateAllDialog-Bx9vMq27.chunk.mjs").then(e=>e.d),__vite__mapDeps([75,1,2,3,4,5,6,7,8,9,10,25,13,14,26,27,23,24,28,15,16,29,30,31,32,33,12,17,34,20,21,35,36,37,38,39,40,41,42,18,19,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,11,76,73,74]),import.meta.url),ur=[{path:"/:index(index.php/)?settings/apps",name:"apps",redirect:lr?{name:"apps-discover"}:{name:"apps-manage",params:{category:"installed"}},children:[{path:"discover/:id?",name:"apps-discover",component:rr},{path:"bundles/:id?",name:"apps-bundles",component:or},{path:":category(installed|enabled|disabled|updates)/:id?",name:"apps-manage",component:ir},{path:":category/:id?",name:"apps-category",component:pr},{path:"search/:id?",name:"apps-search",component:cr}]}],dr=ia({history:oa(K("")),linkActiveClass:"active",routes:ur}),hr=Xt(),Se=sa(sr);Se.config.idPrefix="appstore",Se.use(hr),Se.use(dr),Se.mount("#content");const gr=B({__name:"LimitToGroupDialog",props:{app:{}},emits:["close"],setup(e,{emit:t}){const a=t,s=Z(),n=Qt(),l=E(!1),r=E([]);oe(()=>e.app,()=>{r.value=(e.app.groups??[]).map(u=>{const f=n.getGroupById(u);return f||n.searchGroups(u),f??{id:u,displayName:u,isNoUser:!0}})},{immediate:!0});const o=$(()=>n.groups.filter(u=>!r.value.includes(u))),c=ln(n.searchGroups,400);async function p(){try{l.value=!0,await s.limitAppToGroups(e.app.id,r.value.map(u=>u.id)),a("close")}finally{l.value=!1}}async function b(){try{l.value=!0,await s.limitAppToGroups(e.app.id,[]),a("close")}finally{l.value=!1}}return(u,f)=>(h(),D(i(_t),{isForm:"",name:i(d)("appstore","Limit to groups"),onSubmit:p,onReset:b},{actions:y(()=>[k(i(pe),{disabled:l.value,type:"reset"},{default:y(()=>[q(v(i(d)("appstore","Reset limitation")),1)]),_:1},8,["disabled"]),k(i(pe),{disabled:l.value,type:"submit",variant:"primary"},Oe({default:y(()=>[q(" "+v(i(d)("appstore","Save")),1)]),_:2},[l.value?{name:"icon",fn:y(()=>[k(i(Ce))]),key:"0"}:void 0]),1032,["disabled"])]),default:y(()=>[_("p",null,v(i(d)("appstore","Restrict the usage of {app} to members of the following groups.",{app:e.app.name})),1),k(i(fa),{modelValue:r.value,"onUpdate:modelValue":f[0]||(f[0]=A=>r.value=A),class:w(u.$style.limitToGroupDialog__input),keepOpen:"",labelOutside:"",multiple:"",options:o.value,onSearch:i(c)},null,8,["modelValue","class","options","onSearch"])]),_:1},8,["name"]))}}),mr="_limitToGroupDialog__input_sofp5_2",fr={limitToGroupDialog__input:mr},br={$style:fr},kr=N(gr,[["__cssModules",br]]),_r=Object.freeze(Object.defineProperty({__proto__:null,default:kr},Symbol.toStringTag,{value:"Module"})),yr=["src","height","width"],wr=B({__name:"AppIcon",props:{app:{},noFallback:{type:Boolean},size:{default:20}},setup(e){const t=$(()=>e.app.icon?.endsWith(".svg")),a=E("");return oe(()=>e.app.icon,async()=>{if(a.value="",e.app.icon?.endsWith(".svg")){const s=await fetch(e.app.icon);s.ok&&(a.value=await s.text())}},{immediate:!0}),(s,n)=>(h(),x("span",{class:w(s.$style.appIcon)},[a.value?(h(),D(i(L),{key:0,size:e.size,svg:a.value},null,8,["size","svg"])):e.app.icon&&!t.value?(h(),x("img",{key:1,class:w(s.$style.appIcon__image),alt:"",src:e.app.icon,height:e.size,width:e.size},null,10,yr)):e.noFallback?I("",!0):(h(),D(i(L),{key:2,path:i(Re),size:e.size},null,8,["path","size"]))],2))}}),vr="_appIcon_mcsmb_2",xr="_appIcon__image_mcsmb_7",$r={appIcon:vr,appIcon__image:xr},Tr={$style:$r},Ar=N(wr,[["__cssModules",Tr]]),Sr={key:0,class:"hidden-visually"},Rr={class:"hidden-visually"},Dr={key:0},zr={key:1},Ir=["title"],Cr={key:0,"aria-hidden":"true"},Lr=B({__name:"AppTableRow",props:{app:{},isNarrow:{type:Boolean},isWide:{type:Boolean}},setup(e){const t=ye(),a=$(()=>({...t,params:{...t.params,id:e.app.id},query:{...t.query}})),s=$(()=>({id:"details",order:99,enabled:()=>!0,label:()=>d("appstore","Show details"),icon:an,to:()=>a.value,inline:!1})),n=Vt(()=>e.app),l=Wt(()=>e.app),r=$(()=>[...l.value,s.value]);return(o,c)=>(h(),x("tr",{class:w(o.$style.appTableRow)},[_("td",{class:w(o.$style.appTableRow__nameCell)},[k(i(pe),{alignment:"start",title:i(d)("appstore","Show details"),to:a.value,variant:"tertiary-no-background",wide:""},{icon:y(()=>[e.app.loading?(h(),D(i(Ce),{key:0,size:24})):(h(),D(Ar,{key:1,app:e.app,size:24},null,8,["app"]))]),default:y(()=>[q(" "+v(e.app.name)+" ",1),e.app.loading?(h(),x("span",Sr,"("+v(i(d)("appstore","is loading…"))+")",1)):I("",!0),_("span",Rr,"("+v(i(d)("appstore","Show details"))+")",1)]),_:1},8,["title","to"])],2),_("td",null,[_("span",{class:w(o.$style.appTableRow__versionCell)},v(e.app.version),3)]),e.isNarrow?I("",!0):(h(),x("td",Dr,[_("div",{class:w(o.$style.appTableRow__levelCell)},[e.app.level?(h(),D(Ft,{key:0,level:e.app.level},null,8,["level"])):I("",!0),"daemon"in e.app&&e.app.daemon?(h(),D(Ut,{key:1,daemon:e.app.daemon},null,8,["daemon"])):I("",!0)],2)])),e.isWide?(h(),x("td",zr,[i(n).length>0?(h(),x("ul",{key:0,class:w(o.$style.appTableRow__groupsCell),title:i(n).map(p=>p.displayName).join(", ")},[(h(!0),x(M,null,H(i(n),(p,b)=>(h(),x(M,{key:p.id},[b===3?(h(),x("li",Cr," … ")):I("",!0),_("li",{class:w({"hidden-visually":b>2})},[k(i(va),{text:p.displayName,noClose:""},null,8,["text"])],2)],64))),128))],10,Ir)):I("",!0)])):I("",!0),_("td",null,[_("div",{class:w(o.$style.appTableRow__actionsCell)},[k(Et,{class:w(o.$style.appTableRow__actionsCellActions),app:e.app,actions:r.value,iconOnly:e.isNarrow},null,8,["class","app","actions","iconOnly"])],2)])],2))}}),Er="_appTableRow_yekky_2",Br="_appTableRow__nameCell_yekky_11",Pr="_appTableRow__levelCell_yekky_16",qr="_appTableRow__versionCell_yekky_22",Nr="_appTableRow__groupsCell_yekky_26",Mr="_appTableRow__actionsCell_yekky_31",Or="_appTableRow__actionsCellActions_yekky_37",Gr={appTableRow:Er,appTableRow__nameCell:Br,appTableRow__levelCell:Pr,appTableRow__versionCell:qr,appTableRow__groupsCell:Nr,appTableRow__actionsCell:Mr,appTableRow__actionsCellActions:Or},jr={$style:Gr},Hr=N(Lr,[["__cssModules",jr]]),Zr={hidden:""},Ur={key:0},Fr={key:1},Qr=B({__name:"AppTable",props:{apps:{}},setup(e){const t=mt("table"),{width:a}=rn(t),s=$(()=>a.value<768),n=$(()=>a.value>=1280);return(l,r)=>(h(),x("table",{ref:"table",class:w([l.$style.appTable,{[l.$style.appTable_narrow]:s.value,[l.$style.appTable_wide]:n.value}])},[_("colgroup",null,[_("col",{class:w(l.$style.appTable__colName)},null,2),_("col",{class:w(l.$style.appTable__colVersion)},null,2),s.value?I("",!0):(h(),x("col",{key:0,class:w(l.$style.appTable__colSupport)},null,2)),n.value?(h(),x("col",{key:1,class:w(l.$style.appTable__colGroups)},null,2)):I("",!0),_("col",{class:w(l.$style.appTable__colActions)},null,2)]),_("thead",Zr,[_("tr",null,[_("th",null,v(i(d)("appstore","App name")),1),_("th",null,v(i(d)("appstore","Version")),1),s.value?I("",!0):(h(),x("th",Ur,v(i(d)("appstore","Support level")),1)),n.value?(h(),x("th",Fr,v(i(d)("appstore","Groups")),1)):I("",!0),_("th",null,v(i(d)("appstore","Actions")),1)])]),_("tbody",null,[(h(!0),x(M,null,H(e.apps,o=>(h(),D(Hr,{key:o.id,app:o,isNarrow:s.value,isWide:n.value},null,8,["app","isNarrow","isWide"]))),128))])],2))}}),Vr="_appTable_ss46x_2",Wr="_appTable__colName_ss46x_7",Xr="_appTable_narrow_ss46x_11",Yr="_appTable_wide_ss46x_15",Jr="_appTable__colSupport_ss46x_19",Kr="_appTable__colActions_ss46x_27",ei={appTable:Vr,appTable__colName:Wr,appTable_narrow:Xr,appTable_wide:Yr,appTable__colSupport:Jr,appTable__colActions:Kr},ti={$style:ei},ai=N(Qr,[["__cssModules",ti]]),ni=B({__name:"AppstoreBundles",setup(e){const t=Z(),a=$(()=>t.bundles.map(r=>({...r,apps:r.appIdentifiers.map(o=>t.apps.find(c=>c.id===o)).filter(Boolean),isEnabling:!1})));function s(r){return r.appIdentifiers.every(o=>{const c=t.apps.find(p=>p.id===o);return c&&(c.active||St(c))})}function n(r){return r.appIdentifiers.every(o=>{const c=t.apps.find(p=>p.id===o);return c&&c.active})}async function l(r){r.isEnabling=!0,await t.enableBundle(r.id),r.isEnabling=!1}return(r,o)=>i(t).isLoadingApps?(h(),D(i(He),{key:0,name:i(d)("appstore","Loading app list")},{icon:y(()=>[k(i(Ce),{size:64})]),_:1},8,["name"])):(h(!0),x(M,{key:1},H(a.value,c=>(h(),x("section",{key:c.id},[_("div",{class:w(r.$style.appstoreBundles__header)},[_("h3",null,v(c.name),1),n(c)?I("",!0):(h(),D(i(pe),{key:0,disabled:!s(c),variant:"primary",onClick:p=>l(c)},{icon:y(()=>[k(i(L),{path:i(nn)},null,8,["path"])]),default:y(()=>[q(" "+v(i(d)("appstore","Download and enable all")),1)]),_:1},8,["disabled","onClick"]))],2),k(ai,{class:w(r.$style.appstoreBundles__appTable),apps:c.apps},null,8,["class","apps"])]))),128))}}),si="_appstoreBundles__header_oplvy_2",li="_appstoreBundles__appTable_oplvy_11",ri={appstoreBundles__header:si,appstoreBundles__appTable:li},ii={$style:ri},oi=N(ni,[["__cssModules",ii]]),pi=Object.freeze(Object.defineProperty({__proto__:null,default:oi},Symbol.toStringTag,{value:"Module"}));export{to as A,cl as B,Zt as M,Dt as a,Lt as b,ue as c,ai as d,Ft as e,Ut as f,Ct as g,U as l,xe as n,Z as u};
//# sourceMappingURL=appstore-main.mjs.map