diff --git a/cypress/e2e/core/header_app-menu.cy.ts b/cypress/e2e/core/header_app-menu.cy.ts index aad8a816678b3..2452e2a19486a 100644 --- a/cypress/e2e/core/header_app-menu.cy.ts +++ b/cypress/e2e/core/header_app-menu.cy.ts @@ -12,12 +12,10 @@ const getAppMenu = () => getNextcloudHeader().find('.app-menu') // the next-best stable selectors. const getWaffleTrigger = () => getAppMenu().find('.app-menu__waffle') -describe('Header: App menu (waffle launcher)', { testIsolation: true }, () => { - beforeEach(() => { - clearState() - }) +before(clearState) - describe('Open and click', () => { +describe('Header: App menu (waffle launcher)', { testIsolation: true }, () => { + describe('Normal user', () => { beforeEach(() => { cy.createRandomUser().then(($user) => { cy.login($user) @@ -25,7 +23,7 @@ describe('Header: App menu (waffle launcher)', { testIsolation: true }, () => { }) }) - it('opens the popover and navigates when a tile is clicked', () => { + it('Open and click opens the popover and navigates when a tile is clicked', () => { getWaffleTrigger().click() cy.get('.app-menu__popover').should('be.visible') getWaffleTrigger().should('have.attr', 'aria-expanded', 'true') @@ -39,9 +37,16 @@ describe('Header: App menu (waffle launcher)', { testIsolation: true }, () => { cy.location('pathname').should('include', '/apps/') }) }) + + it('has all correct app navigation items', () => { + waffleMenuShouldContainApps([ + { name: 'Files', href: '/apps/files' }, + { name: 'Dashboard', href: '/apps/dashboard' }, + ]) + }) }) - describe('Admin gating: "More apps" tile', () => { + describe('Admin', () => { const admin = new User('admin', 'admin') beforeEach(() => { @@ -54,5 +59,33 @@ describe('Header: App menu (waffle launcher)', { testIsolation: true }, () => { cy.get('.app-menu__popover').should('be.visible') cy.findByRole('menuitem', { name: 'More apps' }).should('be.visible') }) + + it('has all correct app navigation items', () => { + waffleMenuShouldContainApps([ + { name: 'Files', href: '/apps/files' }, + { name: 'Dashboard', href: '/apps/dashboard' }, + { name: 'Appstore', href: '/settings/apps' }, + ]) + }) }) }) + +/** + * Check that the waffle menu contains the given apps, by name and href. + * + * @param apps - The apps that should be present in the waffle menu, with their expected name and href. + */ +function waffleMenuShouldContainApps(apps: { name: string, href: string }[]) { + getWaffleTrigger().click() + getWaffleTrigger().should('have.attr', 'aria-expanded', 'true') + cy.findByRole('menu', { name: 'Apps' }).should('be.visible') + + cy.findAllByRole('menuitem') + .then((items) => { + apps.forEach((app) => { + const item = items.toArray().find((i) => i.textContent?.includes(app.name)) + expect(item, `App menu should contain ${app.name}`).to.exist + expect(item?.getAttribute('href')).to.match(new RegExp(`${app.href}(\\?.+|/?$)`)) + }) + }) +} diff --git a/dist/AppstoreBrowse-B2pgXtc2.chunk.mjs b/dist/AppstoreBrowse-DO4WaaxR.chunk.mjs similarity index 97% rename from dist/AppstoreBrowse-B2pgXtc2.chunk.mjs rename to dist/AppstoreBrowse-DO4WaaxR.chunk.mjs index b2cb403a9914d..2883105490149 100644 --- a/dist/AppstoreBrowse-B2pgXtc2.chunk.mjs +++ b/dist/AppstoreBrowse-DO4WaaxR.chunk.mjs @@ -1,2 +1,2 @@ -import{t as e}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import{N as O,u as q}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import{N as C}from"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import{N as L}from"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import{u as V,a as z,b as D}from"./AppstoreSearch-DwuHwCEU.chunk.mjs";import{e as E}from"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import{_ as A,l as G}from"./public-C1mLBHT3.chunk.mjs";import{N as R}from"./mdi-Lt-19ASw.chunk.mjs";import{b as j,n as T,U as H,o,f as S,y as f,g as d,u as t,j as B,t as n,h as P,k as b,N as M,F as $,B as U,w as I,s as J,v as k,l as F,z as K,c as v,C as Q}from"./Web-BwmPK40i.chunk.mjs";import{N as W}from"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import{u as N,c as X,n as Y,a as Z,b as ee,d as te}from"./appstore-main.mjs";import"./index-B-dGqfIG.chunk.mjs";import"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";import"./NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-BW4M2n71.chunk.mjs";import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./index-BLNGy7h5.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";/* empty css */import"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./index-xEyWukTf.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import"./ContentCopy-BF1gBM5z.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./index-DlyLvrtV.chunk.mjs";import"./pinia-CLibr4cC.chunk.mjs";import"./modulepreload-polyfill-BxzAKjcf.chunk.mjs";import"./index-BU6wm4Hd.chunk.mjs";const ie=["id"],ae={key:0},se=["aria-label"],oe=j({__name:"OfficeSuiteSwitcherItem",props:J({suite:{},loading:{type:Boolean}},{selected:{},selectedModifiers:{}}),emits:["update:selected"],setup(p){const r=T(p,"selected"),m=H(),_=N(),s=k(()=>_.getAppById(p.suite.appId)),y=k(()=>!!s.value?.installed),w=k(()=>!s.value||!y.value&&!X(s.value));return(a,l)=>(o(),S("div",{class:f([a.$style.officeSuiteSwitcherItem,{[a.$style.officeSuiteSwitcherItem_selected]:r.value===p.suite.id}]),onClick:l[3]||(l[3]=i=>r.value=p.suite.id)},[d("div",{class:f(a.$style.officeSuiteSwitcherItem__header)},[d("h3",{id:t(m),class:f(a.$style.officeSuiteSwitcherItem__title)},[B(n(p.suite.name)+" ",1),y.value?(o(),S("span",ae,"("+n(t(e)("appstore","installed"))+")",1)):P("",!0)],10,ie),b(t(W),{modelValue:r.value,"onUpdate:modelValue":l[0]||(l[0]=i=>r.value=i),"aria-labelledby":t(m),disabled:w.value,loading:p.loading,type:"radio",name:"office-suite",value:p.suite.id,onClick:l[1]||(l[1]=M(()=>{},["stop"]))},null,8,["modelValue","aria-labelledby","disabled","loading","value"])],2),d("ul",{"aria-label":t(e)("appstore","Features"),class:f(a.$style.officeSuiteSwitcherItem__features)},[(o(!0),S($,null,U(p.suite.features,(i,c)=>(o(),S("li",{key:c},n(i),1))),128))],10,se),b(t(O),{href:p.suite.learnMoreUrl,onClick:l[2]||(l[2]=M(()=>{},["stop"]))},{default:I(()=>[B(n(t(e)("appstore","Learn more"))+"↗ ",1)]),_:1},8,["href"])],2))}}),re="_officeSuiteSwitcherItem_1x2g7_2",le="_officeSuiteSwitcherItem_selected_1x2g7_23",ce="_officeSuiteSwitcherItem__header_1x2g7_29",pe="_officeSuiteSwitcherItem__title_1x2g7_36",ue="_officeSuiteSwitcherItem__features_1x2g7_42",fe="_officeSuiteSwitcherItem__link_1x2g7_55",ne={officeSuiteSwitcherItem:re,officeSuiteSwitcherItem_selected:le,officeSuiteSwitcherItem__header:ce,officeSuiteSwitcherItem__title:pe,officeSuiteSwitcherItem__features:ue,officeSuiteSwitcherItem__link:fe},me={$style:ne},de=A(oe,[["__cssModules",me]]),g=Object.freeze([{id:"nextcloud-office",appId:"eurooffice",name:"Nextcloud Office",features:[e("settings","Powered by Euro-Office"),e("settings","Good Nextcloud integration"),e("settings","Open source"),e("settings","Best performance"),e("settings","Limited ODF compatibility"),e("settings","Best Microsoft compatibility")],learnMoreUrl:"https://github.com/Euro-Office",isPrimary:!0},{id:"collabora-office",appId:"richdocuments",name:"Collabora Office",features:[e("settings","Best Nextcloud integration"),e("settings","Open source"),e("settings","Good performance"),e("settings","Best security: documents never leave your server"),e("settings","Best ODF compatibility"),e("settings","Best support for legacy files")],learnMoreUrl:"https://nextcloud.com/collaboraonline/",isPrimary:!1}]),_e=j({__name:"OfficeSuiteSwitcher",setup(p){const r=N(),m=G("appstore","isAllInOne",!1),_=F(!1),s=F(y());K(s,l);function y(){for(const i of g){const c=r.apps.find(u=>u.id===i.appId&&u.installed);if(c&&c.active)return i.id}return g.find(i=>i.isPrimary)?.id??null}function w(){s.value=null}async function a(i){const c=r.getAppById(i.appId);c&&Z(c)&&await r.disableApp(i.appId)}async function l(i,c){if(!(_.value||i===c))try{_.value=!0;const u=g.find(h=>h.id===i);if(!u){for(const h of g)await a(h);return}const x=r.getAppById(u.appId);if(Y(x))if(await E({name:e("appstore","Force enable {suite}?",{suite:u.name}),text:e("appstore","Enabling {suite} requires force enabling the app. This may cause issues with your Nextcloud instance. Are you sure you want to proceed?",{suite:u.name}),labelConfirm:e("appstore","Force enable"),labelReject:e("appstore","Cancel"),severity:"warning"}))await r.enableApp(u.appId,!0);else{s.value=c;return}for(const h of g)h.id===i?await r.enableApp(h.appId):await a(h)}finally{_.value=!1}}return(i,c)=>t(m)?(o(),v(t(R),{key:0,type:"info"},{default:I(()=>[d("p",null,n(t(e)("appstore","Office suite switching is managed through the Nextcloud All-in-One interface.")),1),d("p",null,n(t(e)("appstore","Please use the AIO interface to switch between office suites.")),1)]),_:1})):(o(),S("section",{key:1,class:f(i.$style.officeSuiteSwitcher)},[d("h3",{class:f(i.$style.officeSuiteSwitcher__title)},n(t(e)("appstore","Select your preferred office suite.")),3),d("p",null,n(t(e)("appstore","Please note that installing requires manual server setup.")),1),d("fieldset",{class:f(i.$style.officeSuiteSwitcher__cards)},[(o(!0),S($,null,U(t(g),u=>(o(),v(de,{key:u.id,selected:s.value,"onUpdate:selected":c[0]||(c[0]=x=>s.value=x),class:f(i.$style.officeSuiteSwitcher__cardsItem),suite:u,loading:_.value},null,8,["selected","class","suite","loading"]))),128))],2),d("div",{class:f(i.$style.officeSuiteSwitcher__actions)},[b(t(O),{disabled:!s.value,onClick:w},{default:I(()=>[B(n(t(e)("appstore","Disable office suites")),1)]),_:1},8,["disabled"])],2)],2))}}),Se="_officeSuiteSwitcher_1ajfj_2",he="_officeSuiteSwitcher__cards_1ajfj_19",ye="_officeSuiteSwitcher__cardsItem_1ajfj_25",we="_officeSuiteSwitcher__actions_1ajfj_29",ge="_officeSuiteSwitcher__disableButton_1ajfj_33",ve={officeSuiteSwitcher:Se,officeSuiteSwitcher__cards:he,officeSuiteSwitcher__cardsItem:ye,officeSuiteSwitcher__actions:we,officeSuiteSwitcher__disableButton:ge},be={$style:ve},Ie=A(_e,[["__cssModules",be]]),ke=j({__name:"AppstoreBrowse",setup(p){const r=q(),m=N(),_=ee(),s=k(()=>r.params.category),y=k(()=>s.value==="featured"?m.apps.filter(a=>a.level===200):s.value==="supported"?m.apps.filter(a=>a.level===300):m.getAppsByCategory(s.value)),w=V(y);return(a,l)=>(o(),S($,null,[b(z),t(m).isLoadingApps?(o(),v(t(C),{key:0,name:t(e)("appstore","Loading app list")},{icon:I(()=>[b(t(L),{size:64})]),_:1},8,["name"])):(o(),S($,{key:1},[s.value==="office"?(o(),v(Ie,{key:0})):P("",!0),t(w).length?(o(),v(Q(t(_).isGridView?D:te),{key:1,class:f(a.$style.appstoreBrowse),apps:t(w)},null,8,["class","apps"])):(o(),v(t(C),{key:2,name:t(e)("appstore","No matching apps found")},{action:I(()=>[b(t(O),{variant:"primary",onClick:l[0]||(l[0]=i=>a.$router.push({query:a.$route.query,name:"apps-search"}))},{default:I(()=>[B(n(t(e)("appstore","Search everywhere")),1)]),_:1})]),_:1},8,["name"]))],64))],64))}}),Be="_appstoreBrowse_1w3np_2",$e={appstoreBrowse:Be},xe={$style:$e},vt=A(ke,[["__cssModules",xe]]);export{vt as default}; -//# sourceMappingURL=AppstoreBrowse-B2pgXtc2.chunk.mjs.map +import{t as e}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import{N as O,u as q}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import{N as C}from"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import{N as L}from"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import{u as V,a as z,b as D}from"./AppstoreSearch-CPzSIsIZ.chunk.mjs";import{e as E}from"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import{_ as A,l as G}from"./public-C1mLBHT3.chunk.mjs";import{N as R}from"./mdi-Lt-19ASw.chunk.mjs";import{b as j,n as T,U as H,o,f as S,y as f,g as d,u as t,j as B,t as n,h as P,k as b,N as M,F as $,B as U,w as I,s as J,v as k,l as F,z as K,c as v,C as Q}from"./Web-BwmPK40i.chunk.mjs";import{N as W}from"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import{u as N,c as X,n as Y,a as Z,b as ee,d as te}from"./appstore-main.mjs";import"./index-B-dGqfIG.chunk.mjs";import"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";import"./NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-BW4M2n71.chunk.mjs";import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./index-BLNGy7h5.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";/* empty css */import"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./index-xEyWukTf.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import"./ContentCopy-BF1gBM5z.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./index-DlyLvrtV.chunk.mjs";import"./pinia-CLibr4cC.chunk.mjs";import"./modulepreload-polyfill-BxzAKjcf.chunk.mjs";import"./index-BU6wm4Hd.chunk.mjs";const ie=["id"],ae={key:0},se=["aria-label"],oe=j({__name:"OfficeSuiteSwitcherItem",props:J({suite:{},loading:{type:Boolean}},{selected:{},selectedModifiers:{}}),emits:["update:selected"],setup(p){const r=T(p,"selected"),m=H(),_=N(),s=k(()=>_.getAppById(p.suite.appId)),y=k(()=>!!s.value?.installed),w=k(()=>!s.value||!y.value&&!X(s.value));return(a,l)=>(o(),S("div",{class:f([a.$style.officeSuiteSwitcherItem,{[a.$style.officeSuiteSwitcherItem_selected]:r.value===p.suite.id}]),onClick:l[3]||(l[3]=i=>r.value=p.suite.id)},[d("div",{class:f(a.$style.officeSuiteSwitcherItem__header)},[d("h3",{id:t(m),class:f(a.$style.officeSuiteSwitcherItem__title)},[B(n(p.suite.name)+" ",1),y.value?(o(),S("span",ae,"("+n(t(e)("appstore","installed"))+")",1)):P("",!0)],10,ie),b(t(W),{modelValue:r.value,"onUpdate:modelValue":l[0]||(l[0]=i=>r.value=i),"aria-labelledby":t(m),disabled:w.value,loading:p.loading,type:"radio",name:"office-suite",value:p.suite.id,onClick:l[1]||(l[1]=M(()=>{},["stop"]))},null,8,["modelValue","aria-labelledby","disabled","loading","value"])],2),d("ul",{"aria-label":t(e)("appstore","Features"),class:f(a.$style.officeSuiteSwitcherItem__features)},[(o(!0),S($,null,U(p.suite.features,(i,c)=>(o(),S("li",{key:c},n(i),1))),128))],10,se),b(t(O),{href:p.suite.learnMoreUrl,onClick:l[2]||(l[2]=M(()=>{},["stop"]))},{default:I(()=>[B(n(t(e)("appstore","Learn more"))+"↗ ",1)]),_:1},8,["href"])],2))}}),re="_officeSuiteSwitcherItem_1x2g7_2",le="_officeSuiteSwitcherItem_selected_1x2g7_23",ce="_officeSuiteSwitcherItem__header_1x2g7_29",pe="_officeSuiteSwitcherItem__title_1x2g7_36",ue="_officeSuiteSwitcherItem__features_1x2g7_42",fe="_officeSuiteSwitcherItem__link_1x2g7_55",ne={officeSuiteSwitcherItem:re,officeSuiteSwitcherItem_selected:le,officeSuiteSwitcherItem__header:ce,officeSuiteSwitcherItem__title:pe,officeSuiteSwitcherItem__features:ue,officeSuiteSwitcherItem__link:fe},me={$style:ne},de=A(oe,[["__cssModules",me]]),g=Object.freeze([{id:"nextcloud-office",appId:"eurooffice",name:"Nextcloud Office",features:[e("settings","Powered by Euro-Office"),e("settings","Good Nextcloud integration"),e("settings","Open source"),e("settings","Best performance"),e("settings","Limited ODF compatibility"),e("settings","Best Microsoft compatibility")],learnMoreUrl:"https://github.com/Euro-Office",isPrimary:!0},{id:"collabora-office",appId:"richdocuments",name:"Collabora Office",features:[e("settings","Best Nextcloud integration"),e("settings","Open source"),e("settings","Good performance"),e("settings","Best security: documents never leave your server"),e("settings","Best ODF compatibility"),e("settings","Best support for legacy files")],learnMoreUrl:"https://nextcloud.com/collaboraonline/",isPrimary:!1}]),_e=j({__name:"OfficeSuiteSwitcher",setup(p){const r=N(),m=G("appstore","isAllInOne",!1),_=F(!1),s=F(y());K(s,l);function y(){for(const i of g){const c=r.apps.find(u=>u.id===i.appId&&u.installed);if(c&&c.active)return i.id}return g.find(i=>i.isPrimary)?.id??null}function w(){s.value=null}async function a(i){const c=r.getAppById(i.appId);c&&Z(c)&&await r.disableApp(i.appId)}async function l(i,c){if(!(_.value||i===c))try{_.value=!0;const u=g.find(h=>h.id===i);if(!u){for(const h of g)await a(h);return}const x=r.getAppById(u.appId);if(Y(x))if(await E({name:e("appstore","Force enable {suite}?",{suite:u.name}),text:e("appstore","Enabling {suite} requires force enabling the app. This may cause issues with your Nextcloud instance. Are you sure you want to proceed?",{suite:u.name}),labelConfirm:e("appstore","Force enable"),labelReject:e("appstore","Cancel"),severity:"warning"}))await r.enableApp(u.appId,!0);else{s.value=c;return}for(const h of g)h.id===i?await r.enableApp(h.appId):await a(h)}finally{_.value=!1}}return(i,c)=>t(m)?(o(),v(t(R),{key:0,type:"info"},{default:I(()=>[d("p",null,n(t(e)("appstore","Office suite switching is managed through the Nextcloud All-in-One interface.")),1),d("p",null,n(t(e)("appstore","Please use the AIO interface to switch between office suites.")),1)]),_:1})):(o(),S("section",{key:1,class:f(i.$style.officeSuiteSwitcher)},[d("h3",{class:f(i.$style.officeSuiteSwitcher__title)},n(t(e)("appstore","Select your preferred office suite.")),3),d("p",null,n(t(e)("appstore","Please note that installing requires manual server setup.")),1),d("fieldset",{class:f(i.$style.officeSuiteSwitcher__cards)},[(o(!0),S($,null,U(t(g),u=>(o(),v(de,{key:u.id,selected:s.value,"onUpdate:selected":c[0]||(c[0]=x=>s.value=x),class:f(i.$style.officeSuiteSwitcher__cardsItem),suite:u,loading:_.value},null,8,["selected","class","suite","loading"]))),128))],2),d("div",{class:f(i.$style.officeSuiteSwitcher__actions)},[b(t(O),{disabled:!s.value,onClick:w},{default:I(()=>[B(n(t(e)("appstore","Disable office suites")),1)]),_:1},8,["disabled"])],2)],2))}}),Se="_officeSuiteSwitcher_1ajfj_2",he="_officeSuiteSwitcher__cards_1ajfj_19",ye="_officeSuiteSwitcher__cardsItem_1ajfj_25",we="_officeSuiteSwitcher__actions_1ajfj_29",ge="_officeSuiteSwitcher__disableButton_1ajfj_33",ve={officeSuiteSwitcher:Se,officeSuiteSwitcher__cards:he,officeSuiteSwitcher__cardsItem:ye,officeSuiteSwitcher__actions:we,officeSuiteSwitcher__disableButton:ge},be={$style:ve},Ie=A(_e,[["__cssModules",be]]),ke=j({__name:"AppstoreBrowse",setup(p){const r=q(),m=N(),_=ee(),s=k(()=>r.params.category),y=k(()=>s.value==="featured"?m.apps.filter(a=>a.level===200):s.value==="supported"?m.apps.filter(a=>a.level===300):m.getAppsByCategory(s.value)),w=V(y);return(a,l)=>(o(),S($,null,[b(z),t(m).isLoadingApps?(o(),v(t(C),{key:0,name:t(e)("appstore","Loading app list")},{icon:I(()=>[b(t(L),{size:64})]),_:1},8,["name"])):(o(),S($,{key:1},[s.value==="office"?(o(),v(Ie,{key:0})):P("",!0),t(w).length?(o(),v(Q(t(_).isGridView?D:te),{key:1,class:f(a.$style.appstoreBrowse),apps:t(w)},null,8,["class","apps"])):(o(),v(t(C),{key:2,name:t(e)("appstore","No matching apps found")},{action:I(()=>[b(t(O),{variant:"primary",onClick:l[0]||(l[0]=i=>a.$router.push({query:a.$route.query,name:"apps-search"}))},{default:I(()=>[B(n(t(e)("appstore","Search everywhere")),1)]),_:1})]),_:1},8,["name"]))],64))],64))}}),Be="_appstoreBrowse_1w3np_2",$e={appstoreBrowse:Be},xe={$style:$e},vt=A(ke,[["__cssModules",xe]]);export{vt as default}; +//# sourceMappingURL=AppstoreBrowse-DO4WaaxR.chunk.mjs.map diff --git a/dist/AppstoreBrowse-B2pgXtc2.chunk.mjs.license b/dist/AppstoreBrowse-DO4WaaxR.chunk.mjs.license similarity index 100% rename from dist/AppstoreBrowse-B2pgXtc2.chunk.mjs.license rename to dist/AppstoreBrowse-DO4WaaxR.chunk.mjs.license diff --git a/dist/AppstoreBrowse-B2pgXtc2.chunk.mjs.map b/dist/AppstoreBrowse-DO4WaaxR.chunk.mjs.map similarity index 99% rename from dist/AppstoreBrowse-B2pgXtc2.chunk.mjs.map rename to dist/AppstoreBrowse-DO4WaaxR.chunk.mjs.map index 5f554744e43e1..3b6e37243ed56 100644 --- a/dist/AppstoreBrowse-B2pgXtc2.chunk.mjs.map +++ b/dist/AppstoreBrowse-DO4WaaxR.chunk.mjs.map @@ -1 +1 @@ -{"version":3,"file":"AppstoreBrowse-B2pgXtc2.chunk.mjs","sources":["../build/frontend/apps/appstore/src/components/AppstoreBrowse/OfficeSuiteSwitcherItem.vue","../build/frontend/apps/appstore/src/service/OfficeSuites.ts","../build/frontend/apps/appstore/src/components/AppstoreBrowse/OfficeSuiteSwitcher.vue","../build/frontend/apps/appstore/src/views/AppstoreBrowse.vue"],"sourcesContent":["\n\n\n\n\n\n\n","/*\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { t } from '@nextcloud/l10n'\n\nexport const OFFICE_SUITES = Object.freeze([\n\t{\n\t\tid: 'nextcloud-office',\n\t\tappId: 'eurooffice',\n\t\tname: 'Nextcloud Office',\n\t\tfeatures: [\n\t\t\tt('settings', 'Powered by Euro-Office'),\n\t\t\tt('settings', 'Good Nextcloud integration'),\n\t\t\tt('settings', 'Open source'),\n\t\t\tt('settings', 'Best performance'),\n\t\t\tt('settings', 'Limited ODF compatibility'),\n\t\t\tt('settings', 'Best Microsoft compatibility'),\n\t\t],\n\t\tlearnMoreUrl: 'https://github.com/Euro-Office',\n\t\tisPrimary: true,\n\t},\n\t{\n\t\tid: 'collabora-office',\n\t\tappId: 'richdocuments',\n\t\tname: 'Collabora Office',\n\t\tfeatures: [\n\t\t\tt('settings', 'Best Nextcloud integration'),\n\t\t\tt('settings', 'Open source'),\n\t\t\tt('settings', 'Good performance'),\n\t\t\tt('settings', 'Best security: documents never leave your server'),\n\t\t\tt('settings', 'Best ODF compatibility'),\n\t\t\tt('settings', 'Best support for legacy files'),\n\t\t],\n\t\tlearnMoreUrl: 'https://nextcloud.com/collaboraonline/',\n\t\tisPrimary: false,\n\t},\n])\n\n/**\n * Get office suite configuration by ID\n *\n * @param id - The suite ID\n * @return The suite configuration or undefined if not found\n */\nexport function getOfficeSuiteById(id: string) {\n\treturn OFFICE_SUITES.find((suite) => suite.id === id)\n}\n\n/**\n * Get office suite configuration by app ID\n *\n * @param appId - The app ID (richdocuments, onlyoffice, etc.)\n * @return The suite configuration or undefined if not found\n */\nexport function getOfficeSuiteByAppId(appId: string) {\n\treturn OFFICE_SUITES.find((suite) => suite.appId === appId)\n}\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n"],"names":["selectedSuiteId","_useModel","__props","headerId","useId","store","useAppsStore","app","computed","isInstalled","cannotInstall","canInstall","_createElementBlock","_normalizeClass","$style","_cache","$event","_createElementVNode","_unref","_openBlock","_hoisted_2","_toDisplayString","t","_createVNode","NcCheckboxRadioSwitch","_Fragment","feature","index","NcButton","_createTextVNode","OFFICE_SUITES","isAllInOne","loadState","isProcessing","ref","getInitialSuite","watch","onSuiteChanged","suite","a","s","disableSuites","disableSuite","canDisable","newSuiteId","oldSuiteId","needForceEnable","showConfirmation","_createBlock","NcNoteCard","_renderList","OfficeSuiteSwitcherItem","route","useRoute","userSettings","useUserSettingsStore","currentCategory","apps","visibleApps","useFilteredApps","AppToolbar","NcEmptyContent","NcLoadingIcon","OfficeSuiteSwitcher","_resolveDynamicComponent","AppGrid","AppTable","$router","$route"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"AppstoreBrowse-DO4WaaxR.chunk.mjs","sources":["../build/frontend/apps/appstore/src/components/AppstoreBrowse/OfficeSuiteSwitcherItem.vue","../build/frontend/apps/appstore/src/service/OfficeSuites.ts","../build/frontend/apps/appstore/src/components/AppstoreBrowse/OfficeSuiteSwitcher.vue","../build/frontend/apps/appstore/src/views/AppstoreBrowse.vue"],"sourcesContent":["\n\n\n\n\n\n\n","/*\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { t } from '@nextcloud/l10n'\n\nexport const OFFICE_SUITES = Object.freeze([\n\t{\n\t\tid: 'nextcloud-office',\n\t\tappId: 'eurooffice',\n\t\tname: 'Nextcloud Office',\n\t\tfeatures: [\n\t\t\tt('settings', 'Powered by Euro-Office'),\n\t\t\tt('settings', 'Good Nextcloud integration'),\n\t\t\tt('settings', 'Open source'),\n\t\t\tt('settings', 'Best performance'),\n\t\t\tt('settings', 'Limited ODF compatibility'),\n\t\t\tt('settings', 'Best Microsoft compatibility'),\n\t\t],\n\t\tlearnMoreUrl: 'https://github.com/Euro-Office',\n\t\tisPrimary: true,\n\t},\n\t{\n\t\tid: 'collabora-office',\n\t\tappId: 'richdocuments',\n\t\tname: 'Collabora Office',\n\t\tfeatures: [\n\t\t\tt('settings', 'Best Nextcloud integration'),\n\t\t\tt('settings', 'Open source'),\n\t\t\tt('settings', 'Good performance'),\n\t\t\tt('settings', 'Best security: documents never leave your server'),\n\t\t\tt('settings', 'Best ODF compatibility'),\n\t\t\tt('settings', 'Best support for legacy files'),\n\t\t],\n\t\tlearnMoreUrl: 'https://nextcloud.com/collaboraonline/',\n\t\tisPrimary: false,\n\t},\n])\n\n/**\n * Get office suite configuration by ID\n *\n * @param id - The suite ID\n * @return The suite configuration or undefined if not found\n */\nexport function getOfficeSuiteById(id: string) {\n\treturn OFFICE_SUITES.find((suite) => suite.id === id)\n}\n\n/**\n * Get office suite configuration by app ID\n *\n * @param appId - The app ID (richdocuments, onlyoffice, etc.)\n * @return The suite configuration or undefined if not found\n */\nexport function getOfficeSuiteByAppId(appId: string) {\n\treturn OFFICE_SUITES.find((suite) => suite.appId === appId)\n}\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n"],"names":["selectedSuiteId","_useModel","__props","headerId","useId","store","useAppsStore","app","computed","isInstalled","cannotInstall","canInstall","_createElementBlock","_normalizeClass","$style","_cache","$event","_createElementVNode","_unref","_openBlock","_hoisted_2","_toDisplayString","t","_createVNode","NcCheckboxRadioSwitch","_Fragment","feature","index","NcButton","_createTextVNode","OFFICE_SUITES","isAllInOne","loadState","isProcessing","ref","getInitialSuite","watch","onSuiteChanged","suite","a","s","disableSuites","disableSuite","canDisable","newSuiteId","oldSuiteId","needForceEnable","showConfirmation","_createBlock","NcNoteCard","_renderList","OfficeSuiteSwitcherItem","route","useRoute","userSettings","useUserSettingsStore","currentCategory","apps","visibleApps","useFilteredApps","AppToolbar","NcEmptyContent","NcLoadingIcon","OfficeSuiteSwitcher","_resolveDynamicComponent","AppGrid","AppTable","$router","$route"],"mappings":"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"} \ No newline at end of file diff --git a/dist/AppstoreBrowse-B2pgXtc2.chunk.mjs.map.license b/dist/AppstoreBrowse-DO4WaaxR.chunk.mjs.map.license similarity index 100% rename from dist/AppstoreBrowse-B2pgXtc2.chunk.mjs.map.license rename to dist/AppstoreBrowse-DO4WaaxR.chunk.mjs.map.license diff --git a/dist/AppstoreDiscover-B-6Ywovb.chunk.mjs b/dist/AppstoreDiscover-WjjPyuuv.chunk.mjs similarity index 94% rename from dist/AppstoreDiscover-B-6Ywovb.chunk.mjs rename to dist/AppstoreDiscover-WjjPyuuv.chunk.mjs index f7fbb2a7498e5..f2574640ee8ea 100644 --- a/dist/AppstoreDiscover-B-6Ywovb.chunk.mjs +++ b/dist/AppstoreDiscover-WjjPyuuv.chunk.mjs @@ -1,3 +1,3 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=[window.OC.filePath('', '', 'dist/DiscoverTypePost-iZg8MLG2.chunk.mjs'),window.OC.filePath('', '', 'dist/mdi-Lt-19ASw.chunk.mjs'),window.OC.filePath('', '', 'dist/logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs'),window.OC.filePath('', '', 'dist/Web-BwmPK40i.chunk.mjs'),window.OC.filePath('', '', 'dist/public-C1mLBHT3.chunk.mjs'),window.OC.filePath('', '', 'dist/createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs'),window.OC.filePath('', '', 'dist/translation-DoG5ZELJ-CFYnqluG.chunk.mjs'),window.OC.filePath('', '', 'dist/index-B-dGqfIG.chunk.mjs'),window.OC.filePath('', '', 'dist/common-createElementId-DhjFt1I9-C_oBIsvc.chunk.css'),window.OC.filePath('', '', 'dist/common-logger-D3RVzcfQ-BE3lcFW4.chunk.css'),window.OC.filePath('', '', 'dist/common-mdi-BWNFKLbC.chunk.css'),window.OC.filePath('', '', 'dist/index-DlyLvrtV.chunk.mjs'),window.OC.filePath('', '', 'dist/appstore-main.mjs'),window.OC.filePath('', '', 'dist/pinia-CLibr4cC.chunk.mjs'),window.OC.filePath('', '', 'dist/NcContent-BhMoPROW-DisoN_bw.chunk.mjs'),window.OC.filePath('', '', 'dist/NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcModal-DUWLRm_F-BsKc2RT9.chunk.css'),window.OC.filePath('', '', 'dist/common-NcContent-BhMoPROW-CuEPejA5.chunk.css'),window.OC.filePath('', '', 'dist/PencilOutline-CJ2aSuY5.chunk.mjs'),window.OC.filePath('', '', 'dist/common-PencilOutline-B3DMd8SU.chunk.css'),window.OC.filePath('', '', 'dist/NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs'),window.OC.filePath('', '', 'dist/index-BOH7nBEM.chunk.mjs'),window.OC.filePath('', '', 'dist/TrashCanOutline-Cv7t-yKN.chunk.mjs'),window.OC.filePath('', '', 'dist/common-TrashCanOutline-BYHcrfvW.chunk.css'),window.OC.filePath('', '', 'dist/common-index-980JFXIN.chunk.css'),window.OC.filePath('', '', 'dist/TrayArrowDown-BI3qCRD6.chunk.mjs'),window.OC.filePath('', '', 'dist/common-TrayArrowDown-CaC9_ffV.chunk.css'),window.OC.filePath('', '', 'dist/NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcInputField-B1bGxYHt-BYHxARP-.chunk.css'),window.OC.filePath('', '', 'dist/index-BW4M2n71.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index-DYA_tnKg.chunk.css'),window.OC.filePath('', '', 'dist/NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs'),window.OC.filePath('', '', 'dist/index-BLNGy7h5.chunk.mjs'),window.OC.filePath('', '', 'dist/util-Alk1iwuj.chunk.mjs'),window.OC.filePath('', '', 'dist/ArrowRight-DKsMJImQ.chunk.mjs'),window.OC.filePath('', '', 'dist/common-ArrowRight-vZpQWIqF.chunk.css'),window.OC.filePath('', '', 'dist/colors-BDeMBgfq-BQ_6MaUU.chunk.mjs'),window.OC.filePath('', '', 'dist/NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcUserStatusIcon-DsviB2Cr-Bq_6hmXG.chunk.css'),window.OC.filePath('', '', 'dist/NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcDateTime-b9UhLDij.chunk.css'),window.OC.filePath('', '', 'dist/common-NcAvatar-M3-CbKbq-DTVmI7NO.chunk.css'),window.OC.filePath('', '', 'dist/NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcEmptyContent-CGAPqk4S-Don1d5Bd.chunk.css'),window.OC.filePath('', '', 'dist/NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs'),window.OC.filePath('', '', 'dist/NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcPasswordField-Be5_qcfm-Crp_EMfV.chunk.css'),window.OC.filePath('', '', 'dist/NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcBreadcrumbs-5gl8Syfa-CfbvucBX.chunk.css'),window.OC.filePath('', '', 'dist/common-NcTextArea-Dxzj4zdb-DIo27L88.chunk.css'),window.OC.filePath('', '', 'dist/NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcCheckboxRadioSwitch-D8Dfv4iw-CPGkDj-p.chunk.css'),window.OC.filePath('', '', 'dist/Plus-DYmK9QaT.chunk.mjs'),window.OC.filePath('', '', 'dist/common-Plus-Som-mR4B.chunk.css'),window.OC.filePath('', '', 'dist/index-BoBLp2fu.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index-bfXBK-tQ.chunk.css'),window.OC.filePath('', '', 'dist/index-CMXcwXc6.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index--xyrXnuf.chunk.css'),window.OC.filePath('', '', 'dist/NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs'),window.OC.filePath('', '', 'dist/emoji-C8k9NUlo-rFKNlNNR.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcEmojiPicker-Bpw-68QP-ChsL0oK6.chunk.css'),window.OC.filePath('', '', 'dist/index-C_wPY1fR.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index-CpSoVYoo.chunk.css'),window.OC.filePath('', '', 'dist/index-xEyWukTf.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index-MZEZ7XGj.chunk.css'),window.OC.filePath('', '', 'dist/NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs'),window.OC.filePath('', '', 'dist/ContentCopy-BF1gBM5z.chunk.mjs'),window.OC.filePath('', '', 'dist/common-ContentCopy-D7mIRwIy.chunk.css'),window.OC.filePath('', '', 'dist/NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcUserBubble-CDQa0hGy-f2DD9EAL.chunk.css'),window.OC.filePath('', '', 'dist/modulepreload-polyfill-BxzAKjcf.chunk.mjs'),window.OC.filePath('', '', 'dist/index-DL1yHC1K-DnBG6QLJ.chunk.mjs'),window.OC.filePath('', '', 'dist/index-BU6wm4Hd.chunk.mjs'),window.OC.filePath('', '', 'dist/appstore-appstore-main-fIugqNvM.chunk.css'),window.OC.filePath('', '', 'dist/common-NcActionSeparator-Ct2RnclR-pXJ_-D_I.chunk.css'),window.OC.filePath('', '', 'dist/common-NcGuestContent-j8ai4O1K-D0718NyY.chunk.css'),window.OC.filePath('', '', 'dist/common-DiscoverTypePost-CpeIz2iE.chunk.css'),window.OC.filePath('', '', 'dist/DiscoverTypeCarousel-D1Tykxta.chunk.mjs'),window.OC.filePath('', '', 'dist/appstore-DiscoverTypeCarousel--4FoDSYW.chunk.css'),window.OC.filePath('', '', 'dist/DiscoverTypeShowcase-_0KyBNPF.chunk.mjs'),window.OC.filePath('', '', 'dist/AppstoreSearch-DwuHwCEU.chunk.mjs'),window.OC.filePath('', '', 'dist/common-AppstoreSearch-CAiP7JM1.chunk.css'),window.OC.filePath('', '', 'dist/appstore-DiscoverTypeShowcase-BsnvP-Fa.chunk.css')])))=>i.map(i=>d[i]); -import{b as _,A as x,o as i,c as u,w as v,k as y,u as e,f as h,F as A,B as N,m as C,C as I,l as w,a as d,_ as l}from"./Web-BwmPK40i.chunk.mjs";import{e as L}from"./mdi-Lt-19ASw.chunk.mjs";import{a as O}from"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import{t as p}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import{N as D}from"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import{N as P}from"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import{N as R}from"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import{c as T}from"./index-BLNGy7h5.chunk.mjs";import{c as V}from"./index-B-dGqfIG.chunk.mjs";import{l as g}from"./appstore-main.mjs";import{_ as b}from"./public-C1mLBHT3.chunk.mjs";import"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import"./index-BW4M2n71.chunk.mjs";import"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";import"./pinia-CLibr4cC.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";/* empty css */import"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./index-xEyWukTf.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import"./ContentCopy-BF1gBM5z.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./index-DlyLvrtV.chunk.mjs";import"./modulepreload-polyfill-BxzAKjcf.chunk.mjs";import"./index-BU6wm4Hd.chunk.mjs";function z(o){const t={...o};if(t.date&&(t.date=Date.parse(t.date)),t.expiryDate&&(t.expiryDate=Date.parse(t.expiryDate)),t.type==="post"||t.type==="showcase"||t.type==="carousel")return t;throw new Error(`Invalid argument, app discover element with type ${o.type??"unknown"} is unknown`)}function F(o){const t=Date.now();return!(o.date&&o.date>t||o.expiryDate&&o.expiryDate(s.order??1/0)<(n.order??1/0)?-1:1),a}function q(o){for(let t=o.length-1;t>0;t--){const a=Math.floor(Math.random()*(t+1));[o[t],o[a]]=[o[a],o[t]]}return o}async function B(){const o=await T.get(V("/apps/appstore/api/v1/discover")),{data:t}=o.data.ocs;return t}const U={key:2,class:"app-discover"},$=_({__name:"AppstoreDiscover",setup(o){const t=d(()=>l(()=>import("./DiscoverTypePost-iZg8MLG2.chunk.mjs").then(r=>r.a),__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]),import.meta.url)),a=d(()=>l(()=>import("./DiscoverTypeCarousel-D1Tykxta.chunk.mjs"),__vite__mapDeps([77,3,4,1,2,5,6,7,8,9,10,0,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,78]),import.meta.url)),s=d(()=>l(()=>import("./DiscoverTypeShowcase-_0KyBNPF.chunk.mjs"),__vite__mapDeps([79,11,3,4,80,6,7,2,5,8,9,42,43,22,23,12,13,14,15,16,17,18,19,20,21,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,1,10,63,64,65,66,67,68,69,70,71,72,73,74,75,81,0,76,82]),import.meta.url)),n=w(!1),m=w([]);x(async()=>{try{m.value=await M()}catch(r){n.value=!0,g.error(r),O(p("appstore","Could not load app discover section"))}});function k(r){return r==="post"?t:r==="carousel"?a:r==="showcase"?s:_({mounted:()=>g.error("Unknown component requested ",r),render:f=>f("div",p("appstore","Could not render element"))})}return(r,f)=>n.value?(i(),u(e(D),{key:0,name:e(p)("appstore","Nothing to show"),description:e(p)("appstore","Could not load section content from app store.")},{icon:v(()=>[y(e(P),{path:e(L),size:64},null,8,["path"])]),_:1},8,["name","description"])):m.value.length===0?(i(),u(e(D),{key:1,name:e(p)("appstore","Loading"),description:e(p)("appstore","Fetching the latest news…")},{icon:v(()=>[y(e(R),{size:64})]),_:1},8,["name","description"])):(i(),h("div",U,[(i(!0),h(A,null,N(m.value,(c,E)=>(i(),u(I(k(c.type)),C({key:c.id??E},{ref_for:!0},c),null,16))),128))]))}}),bt=b($,[["__scopeId","data-v-daf7ec3e"]]);export{bt as default}; -//# sourceMappingURL=AppstoreDiscover-B-6Ywovb.chunk.mjs.map +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=[window.OC.filePath('', '', 'dist/DiscoverTypePost-iZg8MLG2.chunk.mjs'),window.OC.filePath('', '', 'dist/mdi-Lt-19ASw.chunk.mjs'),window.OC.filePath('', '', 'dist/logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs'),window.OC.filePath('', '', 'dist/Web-BwmPK40i.chunk.mjs'),window.OC.filePath('', '', 'dist/public-C1mLBHT3.chunk.mjs'),window.OC.filePath('', '', 'dist/createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs'),window.OC.filePath('', '', 'dist/translation-DoG5ZELJ-CFYnqluG.chunk.mjs'),window.OC.filePath('', '', 'dist/index-B-dGqfIG.chunk.mjs'),window.OC.filePath('', '', 'dist/common-createElementId-DhjFt1I9-C_oBIsvc.chunk.css'),window.OC.filePath('', '', 'dist/common-logger-D3RVzcfQ-BE3lcFW4.chunk.css'),window.OC.filePath('', '', 'dist/common-mdi-BWNFKLbC.chunk.css'),window.OC.filePath('', '', 'dist/index-DlyLvrtV.chunk.mjs'),window.OC.filePath('', '', 'dist/appstore-main.mjs'),window.OC.filePath('', '', 'dist/pinia-CLibr4cC.chunk.mjs'),window.OC.filePath('', '', 'dist/NcContent-BhMoPROW-DisoN_bw.chunk.mjs'),window.OC.filePath('', '', 'dist/NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcModal-DUWLRm_F-BsKc2RT9.chunk.css'),window.OC.filePath('', '', 'dist/common-NcContent-BhMoPROW-CuEPejA5.chunk.css'),window.OC.filePath('', '', 'dist/PencilOutline-CJ2aSuY5.chunk.mjs'),window.OC.filePath('', '', 'dist/common-PencilOutline-B3DMd8SU.chunk.css'),window.OC.filePath('', '', 'dist/NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs'),window.OC.filePath('', '', 'dist/index-BOH7nBEM.chunk.mjs'),window.OC.filePath('', '', 'dist/TrashCanOutline-Cv7t-yKN.chunk.mjs'),window.OC.filePath('', '', 'dist/common-TrashCanOutline-BYHcrfvW.chunk.css'),window.OC.filePath('', '', 'dist/common-index-980JFXIN.chunk.css'),window.OC.filePath('', '', 'dist/TrayArrowDown-BI3qCRD6.chunk.mjs'),window.OC.filePath('', '', 'dist/common-TrayArrowDown-CaC9_ffV.chunk.css'),window.OC.filePath('', '', 'dist/NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcInputField-B1bGxYHt-BYHxARP-.chunk.css'),window.OC.filePath('', '', 'dist/index-BW4M2n71.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index-DYA_tnKg.chunk.css'),window.OC.filePath('', '', 'dist/NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs'),window.OC.filePath('', '', 'dist/index-BLNGy7h5.chunk.mjs'),window.OC.filePath('', '', 'dist/util-Alk1iwuj.chunk.mjs'),window.OC.filePath('', '', 'dist/ArrowRight-DKsMJImQ.chunk.mjs'),window.OC.filePath('', '', 'dist/common-ArrowRight-vZpQWIqF.chunk.css'),window.OC.filePath('', '', 'dist/colors-BDeMBgfq-BQ_6MaUU.chunk.mjs'),window.OC.filePath('', '', 'dist/NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcUserStatusIcon-DsviB2Cr-Bq_6hmXG.chunk.css'),window.OC.filePath('', '', 'dist/NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcDateTime-b9UhLDij.chunk.css'),window.OC.filePath('', '', 'dist/common-NcAvatar-M3-CbKbq-DTVmI7NO.chunk.css'),window.OC.filePath('', '', 'dist/NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcEmptyContent-CGAPqk4S-Don1d5Bd.chunk.css'),window.OC.filePath('', '', 'dist/NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs'),window.OC.filePath('', '', 'dist/NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcPasswordField-Be5_qcfm-Crp_EMfV.chunk.css'),window.OC.filePath('', '', 'dist/NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcBreadcrumbs-5gl8Syfa-CfbvucBX.chunk.css'),window.OC.filePath('', '', 'dist/common-NcTextArea-Dxzj4zdb-B-B2llha.chunk.css'),window.OC.filePath('', '', 'dist/NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcCheckboxRadioSwitch-D8Dfv4iw-CPGkDj-p.chunk.css'),window.OC.filePath('', '', 'dist/Plus-DYmK9QaT.chunk.mjs'),window.OC.filePath('', '', 'dist/common-Plus-Som-mR4B.chunk.css'),window.OC.filePath('', '', 'dist/index-BoBLp2fu.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index-bfXBK-tQ.chunk.css'),window.OC.filePath('', '', 'dist/index-CMXcwXc6.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index--xyrXnuf.chunk.css'),window.OC.filePath('', '', 'dist/NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs'),window.OC.filePath('', '', 'dist/emoji-C8k9NUlo-rFKNlNNR.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcEmojiPicker-Bpw-68QP-ChsL0oK6.chunk.css'),window.OC.filePath('', '', 'dist/index-C_wPY1fR.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index-CpSoVYoo.chunk.css'),window.OC.filePath('', '', 'dist/index-xEyWukTf.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index-MZEZ7XGj.chunk.css'),window.OC.filePath('', '', 'dist/NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs'),window.OC.filePath('', '', 'dist/ContentCopy-BF1gBM5z.chunk.mjs'),window.OC.filePath('', '', 'dist/common-ContentCopy-D7mIRwIy.chunk.css'),window.OC.filePath('', '', 'dist/NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcUserBubble-CDQa0hGy-f2DD9EAL.chunk.css'),window.OC.filePath('', '', 'dist/modulepreload-polyfill-BxzAKjcf.chunk.mjs'),window.OC.filePath('', '', 'dist/index-DL1yHC1K-DnBG6QLJ.chunk.mjs'),window.OC.filePath('', '', 'dist/index-BU6wm4Hd.chunk.mjs'),window.OC.filePath('', '', 'dist/appstore-appstore-main-fIugqNvM.chunk.css'),window.OC.filePath('', '', 'dist/common-NcActionSeparator-Ct2RnclR-pXJ_-D_I.chunk.css'),window.OC.filePath('', '', 'dist/common-NcGuestContent-j8ai4O1K-D0718NyY.chunk.css'),window.OC.filePath('', '', 'dist/common-DiscoverTypePost-CpeIz2iE.chunk.css'),window.OC.filePath('', '', 'dist/DiscoverTypeCarousel-BKROD9d-.chunk.mjs'),window.OC.filePath('', '', 'dist/appstore-DiscoverTypeCarousel--4FoDSYW.chunk.css'),window.OC.filePath('', '', 'dist/DiscoverTypeShowcase-D91mSUxk.chunk.mjs'),window.OC.filePath('', '', 'dist/AppstoreSearch-CPzSIsIZ.chunk.mjs'),window.OC.filePath('', '', 'dist/common-AppstoreSearch-CAiP7JM1.chunk.css'),window.OC.filePath('', '', 'dist/appstore-DiscoverTypeShowcase-BsnvP-Fa.chunk.css')])))=>i.map(i=>d[i]); +import{b as _,A as x,o as i,c as u,w as v,k as y,u as e,f as h,F as A,B as N,m as C,C as I,l as w,a as d,_ as l}from"./Web-BwmPK40i.chunk.mjs";import{e as L}from"./mdi-Lt-19ASw.chunk.mjs";import{a as O}from"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import{t as p}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import{N as D}from"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import{N as P}from"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import{N as R}from"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import{c as T}from"./index-BLNGy7h5.chunk.mjs";import{c as V}from"./index-B-dGqfIG.chunk.mjs";import{l as g}from"./appstore-main.mjs";import{_ as b}from"./public-C1mLBHT3.chunk.mjs";import"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import"./index-BW4M2n71.chunk.mjs";import"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";import"./pinia-CLibr4cC.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";/* empty css */import"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./index-xEyWukTf.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import"./ContentCopy-BF1gBM5z.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./index-DlyLvrtV.chunk.mjs";import"./modulepreload-polyfill-BxzAKjcf.chunk.mjs";import"./index-BU6wm4Hd.chunk.mjs";function z(o){const t={...o};if(t.date&&(t.date=Date.parse(t.date)),t.expiryDate&&(t.expiryDate=Date.parse(t.expiryDate)),t.type==="post"||t.type==="showcase"||t.type==="carousel")return t;throw new Error(`Invalid argument, app discover element with type ${o.type??"unknown"} is unknown`)}function F(o){const t=Date.now();return!(o.date&&o.date>t||o.expiryDate&&o.expiryDate(s.order??1/0)<(n.order??1/0)?-1:1),a}function q(o){for(let t=o.length-1;t>0;t--){const a=Math.floor(Math.random()*(t+1));[o[t],o[a]]=[o[a],o[t]]}return o}async function B(){const o=await T.get(V("/apps/appstore/api/v1/discover")),{data:t}=o.data.ocs;return t}const U={key:2,class:"app-discover"},$=_({__name:"AppstoreDiscover",setup(o){const t=d(()=>l(()=>import("./DiscoverTypePost-iZg8MLG2.chunk.mjs").then(r=>r.a),__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]),import.meta.url)),a=d(()=>l(()=>import("./DiscoverTypeCarousel-BKROD9d-.chunk.mjs"),__vite__mapDeps([77,3,4,1,2,5,6,7,8,9,10,0,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,78]),import.meta.url)),s=d(()=>l(()=>import("./DiscoverTypeShowcase-D91mSUxk.chunk.mjs"),__vite__mapDeps([79,11,3,4,80,6,7,2,5,8,9,42,43,22,23,12,13,14,15,16,17,18,19,20,21,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,1,10,63,64,65,66,67,68,69,70,71,72,73,74,75,81,0,76,82]),import.meta.url)),n=w(!1),m=w([]);x(async()=>{try{m.value=await M()}catch(r){n.value=!0,g.error(r),O(p("appstore","Could not load app discover section"))}});function k(r){return r==="post"?t:r==="carousel"?a:r==="showcase"?s:_({mounted:()=>g.error("Unknown component requested ",r),render:f=>f("div",p("appstore","Could not render element"))})}return(r,f)=>n.value?(i(),u(e(D),{key:0,name:e(p)("appstore","Nothing to show"),description:e(p)("appstore","Could not load section content from app store.")},{icon:v(()=>[y(e(P),{path:e(L),size:64},null,8,["path"])]),_:1},8,["name","description"])):m.value.length===0?(i(),u(e(D),{key:1,name:e(p)("appstore","Loading"),description:e(p)("appstore","Fetching the latest news…")},{icon:v(()=>[y(e(R),{size:64})]),_:1},8,["name","description"])):(i(),h("div",U,[(i(!0),h(A,null,N(m.value,(c,E)=>(i(),u(I(k(c.type)),C({key:c.id??E},{ref_for:!0},c),null,16))),128))]))}}),bt=b($,[["__scopeId","data-v-daf7ec3e"]]);export{bt as default}; +//# sourceMappingURL=AppstoreDiscover-WjjPyuuv.chunk.mjs.map diff --git a/dist/AppstoreDiscover-B-6Ywovb.chunk.mjs.license b/dist/AppstoreDiscover-WjjPyuuv.chunk.mjs.license similarity index 100% rename from dist/AppstoreDiscover-B-6Ywovb.chunk.mjs.license rename to dist/AppstoreDiscover-WjjPyuuv.chunk.mjs.license diff --git a/dist/AppstoreDiscover-B-6Ywovb.chunk.mjs.map b/dist/AppstoreDiscover-WjjPyuuv.chunk.mjs.map similarity index 99% rename from dist/AppstoreDiscover-B-6Ywovb.chunk.mjs.map rename to dist/AppstoreDiscover-WjjPyuuv.chunk.mjs.map index 95a6f9a589ca9..427cc1adccc1f 100644 --- a/dist/AppstoreDiscover-B-6Ywovb.chunk.mjs.map +++ b/dist/AppstoreDiscover-WjjPyuuv.chunk.mjs.map @@ -1 +1 @@ -{"version":3,"mappings":"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","names":["parseApiResponse","element","appElement","filterElements","now","getDiscoverElements","data","loadDiscoverElements","parsedElements","shuffledElements","shuffleArray","a","b","array","i","j","response","axios","generateOcsUrl","PostType","defineAsyncComponent","__vitePreload","n","CarouselType","ShowcaseType","hasError","ref","elements","onBeforeMount","error","logger","showError","t","getComponent","type","defineComponent","h","_createBlock","_unref","NcEmptyContent","_createVNode","NcIconSvgWrapper","mdiEyeOffOutline","NcLoadingIcon","_openBlock","_createElementBlock","_hoisted_1","_Fragment","_renderList","entry","index","_resolveDynamicComponent","_mergeProps"],"ignoreList":[],"sources":["../build/frontend/apps/appstore/src/utils/appDiscoverParser.ts","../build/frontend/apps/appstore/src/service/app-discover.ts","../build/frontend/apps/appstore/src/views/AppstoreDiscover.vue"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { IAppDiscoverCarousel, IAppDiscoverElement, IAppDiscoverElements, IAppDiscoverPost, IAppDiscoverShowcase } from '../constants/AppDiscoverTypes.ts'\n\n/**\n * Helper to transform the JSON API results to proper frontend objects (app discover section elements)\n *\n * @param element The JSON API element to transform\n */\nexport function parseApiResponse(element: Record): IAppDiscoverElements {\n\tconst appElement = { ...element }\n\tif (appElement.date) {\n\t\tappElement.date = Date.parse(appElement.date as string)\n\t}\n\tif (appElement.expiryDate) {\n\t\tappElement.expiryDate = Date.parse(appElement.expiryDate as string)\n\t}\n\n\tif (appElement.type === 'post') {\n\t\treturn appElement as unknown as IAppDiscoverPost\n\t} else if (appElement.type === 'showcase') {\n\t\treturn appElement as unknown as IAppDiscoverShowcase\n\t} else if (appElement.type === 'carousel') {\n\t\treturn appElement as unknown as IAppDiscoverCarousel\n\t}\n\tthrow new Error(`Invalid argument, app discover element with type ${element.type ?? 'unknown'} is unknown`)\n}\n\n/**\n * Filter outdated or upcoming elements\n *\n * @param element Element to check\n */\nexport function filterElements(element: IAppDiscoverElement) {\n\tconst now = Date.now()\n\t// Element not yet published\n\tif (element.date && element.date > now) {\n\t\treturn false\n\t}\n\n\t// Element expired\n\tif (element.expiryDate && element.expiryDate < now) {\n\t\treturn false\n\t}\n\treturn true\n}\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { OCSResponse } from '@nextcloud/typings/ocs'\n\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { filterElements, parseApiResponse } from '../utils/appDiscoverParser.ts'\n\n/**\n * Get app discover elements\n */\nexport async function getDiscoverElements() {\n\tconst data = await loadDiscoverElements()\n\tif (data.length === 0) {\n\t\tthrow new Error('No app discover elements available (empty response)')\n\t}\n\n\t// Parse data to ensure dates are useable and then filter out expired or future elements\n\tconst parsedElements = data.map(parseApiResponse)\n\t\t.filter(filterElements)\n\n\t// Shuffle elements to make it looks more interesting\n\tconst shuffledElements = shuffleArray(parsedElements)\n\t// Sort pinned elements first\n\tshuffledElements.sort((a, b) => (a.order ?? Infinity) < (b.order ?? Infinity) ? -1 : 1)\n\treturn shuffledElements\n}\n\n/**\n * Shuffle using the Fisher-Yates algorithm\n *\n * @param array The array to shuffle (in place)\n */\nfunction shuffleArray(array: T[]): T[] {\n\tfor (let i = array.length - 1; i > 0; i--) {\n\t\tconst j = Math.floor(Math.random() * (i + 1));\n\t\t[array[i], array[j]] = [array[j]!, array[i]!]\n\t}\n\treturn array\n}\n\n/**\n * Load discover elements from the API\n */\nasync function loadDiscoverElements() {\n\tconst response = await axios.get[]>>(generateOcsUrl('/apps/appstore/api/v1/discover'))\n\tconst { data } = response.data.ocs\n\treturn data\n}\n","\n\n\n\n\n\n\n"],"file":"AppstoreDiscover-B-6Ywovb.chunk.mjs"} \ No newline at end of file +{"version":3,"mappings":"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","names":["parseApiResponse","element","appElement","filterElements","now","getDiscoverElements","data","loadDiscoverElements","parsedElements","shuffledElements","shuffleArray","a","b","array","i","j","response","axios","generateOcsUrl","PostType","defineAsyncComponent","__vitePreload","n","CarouselType","ShowcaseType","hasError","ref","elements","onBeforeMount","error","logger","showError","t","getComponent","type","defineComponent","h","_createBlock","_unref","NcEmptyContent","_createVNode","NcIconSvgWrapper","mdiEyeOffOutline","NcLoadingIcon","_openBlock","_createElementBlock","_hoisted_1","_Fragment","_renderList","entry","index","_resolveDynamicComponent","_mergeProps"],"ignoreList":[],"sources":["../build/frontend/apps/appstore/src/utils/appDiscoverParser.ts","../build/frontend/apps/appstore/src/service/app-discover.ts","../build/frontend/apps/appstore/src/views/AppstoreDiscover.vue"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { IAppDiscoverCarousel, IAppDiscoverElement, IAppDiscoverElements, IAppDiscoverPost, IAppDiscoverShowcase } from '../constants/AppDiscoverTypes.ts'\n\n/**\n * Helper to transform the JSON API results to proper frontend objects (app discover section elements)\n *\n * @param element The JSON API element to transform\n */\nexport function parseApiResponse(element: Record): IAppDiscoverElements {\n\tconst appElement = { ...element }\n\tif (appElement.date) {\n\t\tappElement.date = Date.parse(appElement.date as string)\n\t}\n\tif (appElement.expiryDate) {\n\t\tappElement.expiryDate = Date.parse(appElement.expiryDate as string)\n\t}\n\n\tif (appElement.type === 'post') {\n\t\treturn appElement as unknown as IAppDiscoverPost\n\t} else if (appElement.type === 'showcase') {\n\t\treturn appElement as unknown as IAppDiscoverShowcase\n\t} else if (appElement.type === 'carousel') {\n\t\treturn appElement as unknown as IAppDiscoverCarousel\n\t}\n\tthrow new Error(`Invalid argument, app discover element with type ${element.type ?? 'unknown'} is unknown`)\n}\n\n/**\n * Filter outdated or upcoming elements\n *\n * @param element Element to check\n */\nexport function filterElements(element: IAppDiscoverElement) {\n\tconst now = Date.now()\n\t// Element not yet published\n\tif (element.date && element.date > now) {\n\t\treturn false\n\t}\n\n\t// Element expired\n\tif (element.expiryDate && element.expiryDate < now) {\n\t\treturn false\n\t}\n\treturn true\n}\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { OCSResponse } from '@nextcloud/typings/ocs'\n\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { filterElements, parseApiResponse } from '../utils/appDiscoverParser.ts'\n\n/**\n * Get app discover elements\n */\nexport async function getDiscoverElements() {\n\tconst data = await loadDiscoverElements()\n\tif (data.length === 0) {\n\t\tthrow new Error('No app discover elements available (empty response)')\n\t}\n\n\t// Parse data to ensure dates are useable and then filter out expired or future elements\n\tconst parsedElements = data.map(parseApiResponse)\n\t\t.filter(filterElements)\n\n\t// Shuffle elements to make it looks more interesting\n\tconst shuffledElements = shuffleArray(parsedElements)\n\t// Sort pinned elements first\n\tshuffledElements.sort((a, b) => (a.order ?? Infinity) < (b.order ?? Infinity) ? -1 : 1)\n\treturn shuffledElements\n}\n\n/**\n * Shuffle using the Fisher-Yates algorithm\n *\n * @param array The array to shuffle (in place)\n */\nfunction shuffleArray(array: T[]): T[] {\n\tfor (let i = array.length - 1; i > 0; i--) {\n\t\tconst j = Math.floor(Math.random() * (i + 1));\n\t\t[array[i], array[j]] = [array[j]!, array[i]!]\n\t}\n\treturn array\n}\n\n/**\n * Load discover elements from the API\n */\nasync function loadDiscoverElements() {\n\tconst response = await axios.get[]>>(generateOcsUrl('/apps/appstore/api/v1/discover'))\n\tconst { data } = response.data.ocs\n\treturn data\n}\n","\n\n\n\n\n\n\n"],"file":"AppstoreDiscover-WjjPyuuv.chunk.mjs"} \ No newline at end of file diff --git a/dist/AppstoreDiscover-B-6Ywovb.chunk.mjs.map.license b/dist/AppstoreDiscover-WjjPyuuv.chunk.mjs.map.license similarity index 100% rename from dist/AppstoreDiscover-B-6Ywovb.chunk.mjs.map.license rename to dist/AppstoreDiscover-WjjPyuuv.chunk.mjs.map.license diff --git a/dist/AppstoreSearch-DwuHwCEU.chunk.mjs b/dist/AppstoreSearch-CPzSIsIZ.chunk.mjs similarity index 98% rename from dist/AppstoreSearch-DwuHwCEU.chunk.mjs rename to dist/AppstoreSearch-CPzSIsIZ.chunk.mjs index d0634db88fac0..e01a934af58e1 100644 --- a/dist/AppstoreSearch-DwuHwCEU.chunk.mjs +++ b/dist/AppstoreSearch-CPzSIsIZ.chunk.mjs @@ -1,2 +1,2 @@ -import{t as u}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import{s as H,t as R,u as w,v as C,N as L}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import{N as V}from"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import{N as z}from"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import{b as g,B as W,e as D,f as E,u as N,d as A}from"./appstore-main.mjs";import{r as j,o as m,f as h,g as y,L as Q,am as J,y as c,k as n,t as G,n as K,b as f,H as X,c as _,u as e,l as $,w as d,h as B,v as I,a8 as Y,F as M,B as Z,z as S,j as T,a9 as ee,C as U}from"./Web-BwmPK40i.chunk.mjs";import{_ as v}from"./public-C1mLBHT3.chunk.mjs";import{N as ae}from"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import{D as pe,E as te,F as le,G as se,H as re,I as oe}from"./mdi-Lt-19ASw.chunk.mjs";import{a as ie,N as x}from"./PencilOutline-CJ2aSuY5.chunk.mjs";import{_ as ne,N as b,c as me}from"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import{b as de}from"./NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs";import{P as ue}from"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import{d as ce,a as _e}from"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";/* empty css */import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import"./index-B-dGqfIG.chunk.mjs";import"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import"./index-BW4M2n71.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./index-xEyWukTf.chunk.mjs";import"./index-BLNGy7h5.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import"./ContentCopy-BF1gBM5z.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import{w as he}from"./index-DlyLvrtV.chunk.mjs";const ye={name:"NcActionCheckbox",components:{NcIconSvgWrapper:b},mixins:[ie],inject:{isInSemanticMenu:{from:ce,default:!1}},props:{id:{type:String,default:()=>"action-"+me(),validator:r=>r.trim()!==""},modelValue:{type:Boolean,default:!1},value:{type:[String,Number],default:""},disabled:{type:Boolean,default:!1}},emits:["change","check","uncheck","update:modelValue"],setup(r){return{model:K(r,"modelValue"),mdiCheckboxBlankOutline:R,mdiCheckboxMarked:H}},methods:{onChange(r){this.$emit("change",r),r.target.checked?this.$emit("check"):this.$emit("uncheck")}}},be=["role"],ge=["role","aria-checked"],fe={class:"action-checkbox__icon"},ve=["id","value","disabled"],ke={class:"action-checkbox__text"};function Ge(r,l,s,a,p,t){const o=j("NcIconSvgWrapper");return m(),h("li",{class:c(["action",{"action--disabled":s.disabled}]),role:t.isInSemanticMenu&&"presentation"},[y("label",{class:"action-checkbox",role:t.isInSemanticMenu&&"menuitemcheckbox","aria-checked":t.isInSemanticMenu&&a.model.toString()},[y("span",fe,[Q(y("input",{id:s.id,"onUpdate:modelValue":l[0]||(l[0]=i=>a.model=i),type:"checkbox",class:c(["action-checkbox__input",{focusable:!s.disabled}]),value:s.value,disabled:s.disabled,onChange:l[1]||(l[1]=(...i)=>t.onChange&&t.onChange(...i))},null,42,ve),[[J,a.model]]),n(o,{path:a.model?a.mdiCheckboxMarked:a.mdiCheckboxBlankOutline,size:20},null,8,["path"])]),y("span",ke,G(r.text),1)],8,ge)],10,be)}const Ie=ne(ye,[["render",Ge],["__scopeId","data-v-2947bc3b"]]),we=["src"],Se=new ue({concurrency:4}),Ve=f({__name:"AppImage",props:{app:{}},setup(r){const l=r,s=$(!1),a=$(!0);return X(()=>{l.app.screenshot?(s.value=!1,a.value=!0,Se.add(()=>{const p=new Image,{promise:t,resolve:o}=Promise.withResolvers();return p.onload=()=>{a.value=!1,o()},p.onerror=()=>{s.value=!0,a.value=!1,o()},p.src=l.app.screenshot,t})):(a.value=!1,s.value=!1)}),(p,t)=>(m(),h("div",{class:c(p.$style.appImage)},[s.value||!l.app.screenshot?(m(),_(e(b),{key:0,size:80,path:e(pe)},null,8,["path"])):a.value?(m(),_(e(z),{key:1,size:80})):(m(),h("img",{key:2,class:c(p.$style.appImage__image),src:l.app.screenshot,alt:""},null,10,we))],2))}}),xe="_appImage_1ky4h_2",$e="_appImage__image_1ky4h_9",ze={appImage:xe,appImage__image:$e},Me={$style:ze},qe=v(Ve,[["__cssModules",Me]]),Ce=f({__name:"AppGridItem",props:{app:{}},setup(r){const l=g(),s=w(),a=I(()=>({...s,params:{...s.params,id:r.app.id},query:l.getQuery()}));return(p,t)=>{const o=j("RouterLink");return m(),h("li",{class:c(p.$style.appGridItem)},[n(o,{to:a.value},{default:d(()=>[n(qe,{app:r.app,class:c(p.$style.appGridItem__image)},null,8,["app","class"]),y("div",{class:c(p.$style.appGridItem__content)},[y("h3",{class:c(p.$style.appGridItem__name)},G(r.app.name),3),y("p",null,G(r.app.summary),1)],2)]),_:1},8,["to"]),y("div",{class:c(p.$style.appGridItem__badges)},[n(W,{app:r.app},null,8,["app"]),n(D,{level:r.app.level},null,8,["level"]),r.app.app_api&&r.app.daemon?(m(),_(E,{key:0,daemon:r.app.daemon},null,8,["daemon"])):B("",!0)],2)],2)}}}),Le="_appGridItem_6wxsl_2",Ne="_appGridItem__content_6wxsl_17",Ae="_appGridItem__image_6wxsl_21",je="_appGridItem__name_6wxsl_29",Be="_appGridItem__badges_6wxsl_35",Te={appGridItem:Le,appGridItem__content:Ne,appGridItem__image:Ae,appGridItem__name:je,appGridItem__badges:Be},Ue={$style:Te},Oe=v(Ce,[["__cssModules",Ue]]),Pe=f({__name:"AppGrid",props:{apps:{}},setup(r){Y(a=>({dc9c258c:s.value}));const l=g(),s=I(()=>l.gridSizePx);return(a,p)=>(m(),h("ul",{class:c(a.$style.appGrid)},[(m(!0),h(M,null,Z(r.apps,t=>(m(),_(Oe,{key:t.id,app:t},null,8,["app"]))),128))],2))}}),Fe="_appGrid_xjc6e_2",He={appGrid:Fe},Re={$style:He},O=v(Pe,[["__cssModules",Re]]),We=f({__name:"AppToolbar",setup(r){const l=w(),s=C(),a=g();return S(()=>a.isGridView,p=>{s.replace({...l,query:{...l.query,grid:p?null:void 0}})}),S(()=>a.defaultGridSize,p=>{a.isGridView&&s.replace({...l,query:{...l.query,grid:p||null}})}),S(()=>a.showIncompatible,p=>{p?s.replace({...l,query:{...l.query,compatible:void 0}}):s.replace({...l,query:{...l.query,compatible:null}})}),(p,t)=>(m(),h("div",{class:c(p.$style.appToolbar)},[n(e(_e),{class:c(p.$style.appToolbar__filterButton),"aria-label":e(u)("appstore","Filter view"),forceMenu:""},{icon:d(()=>[n(e(b),{path:e(re)},null,8,["path"])]),default:d(()=>[e(a).isGridView?(m(),_(e(de),{key:0,name:e(u)("appstore","Grid size")},{default:d(()=>[n(e(x),{"aria-label":e(u)("appstore","Small grid size"),modelValue:e(a).defaultGridSize==="",type:"radio",value:"","onUpdate:modelValue":t[0]||(t[0]=o=>e(a).defaultGridSize="")},{icon:d(()=>[n(e(b),{path:e(te)},null,8,["path"])]),_:1},8,["aria-label","modelValue"]),n(e(x),{"aria-label":e(u)("appstore","Medium grid size"),modelValue:e(a).defaultGridSize==="m",type:"radio",value:"m","onUpdate:modelValue":t[1]||(t[1]=o=>e(a).defaultGridSize="m")},{icon:d(()=>[n(e(b),{path:e(le)},null,8,["path"])]),_:1},8,["aria-label","modelValue"]),n(e(x),{"aria-label":e(u)("appstore","Large grid size"),modelValue:e(a).defaultGridSize==="l",type:"radio",value:"l","onUpdate:modelValue":t[2]||(t[2]=o=>e(a).defaultGridSize="l")},{icon:d(()=>[n(e(b),{path:e(se)},null,8,["path"])]),_:1},8,["aria-label","modelValue"])]),_:1},8,["name"])):B("",!0),n(e(Ie),{modelValue:e(a).showIncompatible,"onUpdate:modelValue":t[3]||(t[3]=o=>e(a).showIncompatible=o)},{default:d(()=>[T(G(e(u)("appstore","Show incompatible")),1)]),_:1},8,["modelValue"])]),_:1},8,["class","aria-label"]),n(e(L),{pressed:e(a).isGridView,"onUpdate:pressed":t[4]||(t[4]=o=>e(a).isGridView=o),"aria-label":e(u)("appstore","Grid view"),variant:"tertiary"},{icon:d(()=>[n(e(b),{path:e(oe)},null,8,["path"])]),_:1},8,["pressed","aria-label"])],2))}}),De="_appToolbar_1v7y4_2",Ee={appToolbar:De},Qe={$style:Ee},P=v(We,[["__cssModules",Qe]]);function F(r){const l=g(),s=w();return I(()=>{const a=[s.query.q||""].flat()[0];return ee(r).filter(p=>{if(!l.showIncompatible&&p.isCompatible===!1)return!1;if(a){const t=a.trim().toLocaleLowerCase();return p.name.toLocaleLowerCase().includes(t)||p.id.toLocaleLowerCase().includes(t)||p.summary.toLocaleLowerCase().includes(t)}return!0})})}const Je=f({__name:"AppstoreManage",setup(r){const l=w(),s=N(),a=g(),p=I(()=>l.params.category),t=I(()=>p.value==="installed"?s.apps.filter(i=>i.installed):p.value==="enabled"?s.apps.filter(i=>i.active):p.value==="disabled"?s.apps.filter(i=>i.installed&&!i.active):p.value==="updates"?s.apps.filter(i=>i.update):[]),o=F(t);return(i,k)=>(m(),h(M,null,[n(P),e(s).isLoadingApps?(m(),_(e(V),{key:0,name:e(u)("appstore","Loading app list")},{icon:d(()=>[n(e(z),{size:64})]),_:1},8,["name"])):e(o).length?(m(),_(U(e(a).isGridView?O:A),{key:1,class:c(i.$style.appstoreManage),apps:e(o)},null,8,["class","apps"])):(m(),_(e(V),{key:2,name:e(u)("appstore","No matching apps found")},{action:d(()=>[n(e(L),{variant:"primary",onClick:k[0]||(k[0]=q=>i.$router.push({query:i.$route.query,name:"apps-search"}))},{default:d(()=>[T(G(e(u)("appstore","Search everywhere")),1)]),_:1})]),_:1},8,["name"]))],64))}}),Ke="_appstoreManage_msk54_2",Xe={appstoreManage:Ke},Ye={$style:Xe},Ze=v(Je,[["__cssModules",Ye]]),Wa=Object.freeze(Object.defineProperty({__proto__:null,default:Ze},Symbol.toStringTag,{value:"Module"})),ea=f({__name:"AppstoreSearch",setup(r){const l=w(),s=C(),a=N(),p=g(),t=F(()=>a.apps),o=$("");return S(()=>l.query.q,i=>{o.value=[i||""].flat()[0]},{immediate:!0}),he(o,i=>{s.replace({...l,query:{...l.query,q:i.trim()}})},{debounce:500}),(i,k)=>(m(),h(M,null,[n(P),e(a).isLoadingApps?(m(),_(e(V),{key:0,name:e(u)("appstore","Loading app list")},{icon:d(()=>[n(e(z),{size:64})]),_:1},8,["name"])):e(t).length&&o.value.trim().length>2?(m(),_(U(e(p).isGridView?O:A),{key:1,class:c(i.$style.appstoreSearch),apps:e(t)},null,8,["class","apps"])):(m(),_(e(V),{key:2,name:e(u)("appstore","No matching apps found"),description:o.value.trim().length<=2?e(u)("appstore","Please enter more characters to search."):void 0},{action:d(()=>[n(e(ae),{modelValue:o.value,"onUpdate:modelValue":k[0]||(k[0]=q=>o.value=q),type:"search",label:e(u)("appstore","Search apps")},null,8,["modelValue","label"])]),_:1},8,["name","description"]))],64))}}),aa="_appstoreSearch_e0puj_2",pa={appstoreSearch:aa},ta={$style:pa},la=v(ea,[["__cssModules",ta]]),Da=Object.freeze(Object.defineProperty({__proto__:null,default:la},Symbol.toStringTag,{value:"Module"}));export{qe as A,P as a,O as b,Wa as c,Da as d,F as u}; -//# sourceMappingURL=AppstoreSearch-DwuHwCEU.chunk.mjs.map +import{t as u}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import{s as H,t as R,u as w,v as C,N as L}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import{N as V}from"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import{N as z}from"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import{b as g,B as W,e as D,f as E,u as N,d as A}from"./appstore-main.mjs";import{r as j,o as m,f as h,g as y,L as Q,am as J,y as c,k as n,t as G,n as K,b as f,H as X,c as _,u as e,l as $,w as d,h as B,v as I,a8 as Y,F as M,B as Z,z as S,j as T,a9 as ee,C as U}from"./Web-BwmPK40i.chunk.mjs";import{_ as v}from"./public-C1mLBHT3.chunk.mjs";import{N as ae}from"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import{D as pe,E as te,F as le,G as se,H as re,I as oe}from"./mdi-Lt-19ASw.chunk.mjs";import{a as ie,N as x}from"./PencilOutline-CJ2aSuY5.chunk.mjs";import{_ as ne,N as b,c as me}from"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import{b as de}from"./NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs";import{P as ue}from"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import{d as ce,a as _e}from"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";/* empty css */import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import"./index-B-dGqfIG.chunk.mjs";import"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import"./index-BW4M2n71.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./index-xEyWukTf.chunk.mjs";import"./index-BLNGy7h5.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import"./ContentCopy-BF1gBM5z.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import{w as he}from"./index-DlyLvrtV.chunk.mjs";const ye={name:"NcActionCheckbox",components:{NcIconSvgWrapper:b},mixins:[ie],inject:{isInSemanticMenu:{from:ce,default:!1}},props:{id:{type:String,default:()=>"action-"+me(),validator:r=>r.trim()!==""},modelValue:{type:Boolean,default:!1},value:{type:[String,Number],default:""},disabled:{type:Boolean,default:!1}},emits:["change","check","uncheck","update:modelValue"],setup(r){return{model:K(r,"modelValue"),mdiCheckboxBlankOutline:R,mdiCheckboxMarked:H}},methods:{onChange(r){this.$emit("change",r),r.target.checked?this.$emit("check"):this.$emit("uncheck")}}},be=["role"],ge=["role","aria-checked"],fe={class:"action-checkbox__icon"},ve=["id","value","disabled"],ke={class:"action-checkbox__text"};function Ge(r,l,s,a,p,t){const o=j("NcIconSvgWrapper");return m(),h("li",{class:c(["action",{"action--disabled":s.disabled}]),role:t.isInSemanticMenu&&"presentation"},[y("label",{class:"action-checkbox",role:t.isInSemanticMenu&&"menuitemcheckbox","aria-checked":t.isInSemanticMenu&&a.model.toString()},[y("span",fe,[Q(y("input",{id:s.id,"onUpdate:modelValue":l[0]||(l[0]=i=>a.model=i),type:"checkbox",class:c(["action-checkbox__input",{focusable:!s.disabled}]),value:s.value,disabled:s.disabled,onChange:l[1]||(l[1]=(...i)=>t.onChange&&t.onChange(...i))},null,42,ve),[[J,a.model]]),n(o,{path:a.model?a.mdiCheckboxMarked:a.mdiCheckboxBlankOutline,size:20},null,8,["path"])]),y("span",ke,G(r.text),1)],8,ge)],10,be)}const Ie=ne(ye,[["render",Ge],["__scopeId","data-v-2947bc3b"]]),we=["src"],Se=new ue({concurrency:4}),Ve=f({__name:"AppImage",props:{app:{}},setup(r){const l=r,s=$(!1),a=$(!0);return X(()=>{l.app.screenshot?(s.value=!1,a.value=!0,Se.add(()=>{const p=new Image,{promise:t,resolve:o}=Promise.withResolvers();return p.onload=()=>{a.value=!1,o()},p.onerror=()=>{s.value=!0,a.value=!1,o()},p.src=l.app.screenshot,t})):(a.value=!1,s.value=!1)}),(p,t)=>(m(),h("div",{class:c(p.$style.appImage)},[s.value||!l.app.screenshot?(m(),_(e(b),{key:0,size:80,path:e(pe)},null,8,["path"])):a.value?(m(),_(e(z),{key:1,size:80})):(m(),h("img",{key:2,class:c(p.$style.appImage__image),src:l.app.screenshot,alt:""},null,10,we))],2))}}),xe="_appImage_1ky4h_2",$e="_appImage__image_1ky4h_9",ze={appImage:xe,appImage__image:$e},Me={$style:ze},qe=v(Ve,[["__cssModules",Me]]),Ce=f({__name:"AppGridItem",props:{app:{}},setup(r){const l=g(),s=w(),a=I(()=>({...s,params:{...s.params,id:r.app.id},query:l.getQuery()}));return(p,t)=>{const o=j("RouterLink");return m(),h("li",{class:c(p.$style.appGridItem)},[n(o,{to:a.value},{default:d(()=>[n(qe,{app:r.app,class:c(p.$style.appGridItem__image)},null,8,["app","class"]),y("div",{class:c(p.$style.appGridItem__content)},[y("h3",{class:c(p.$style.appGridItem__name)},G(r.app.name),3),y("p",null,G(r.app.summary),1)],2)]),_:1},8,["to"]),y("div",{class:c(p.$style.appGridItem__badges)},[n(W,{app:r.app},null,8,["app"]),n(D,{level:r.app.level},null,8,["level"]),r.app.app_api&&r.app.daemon?(m(),_(E,{key:0,daemon:r.app.daemon},null,8,["daemon"])):B("",!0)],2)],2)}}}),Le="_appGridItem_6wxsl_2",Ne="_appGridItem__content_6wxsl_17",Ae="_appGridItem__image_6wxsl_21",je="_appGridItem__name_6wxsl_29",Be="_appGridItem__badges_6wxsl_35",Te={appGridItem:Le,appGridItem__content:Ne,appGridItem__image:Ae,appGridItem__name:je,appGridItem__badges:Be},Ue={$style:Te},Oe=v(Ce,[["__cssModules",Ue]]),Pe=f({__name:"AppGrid",props:{apps:{}},setup(r){Y(a=>({dc9c258c:s.value}));const l=g(),s=I(()=>l.gridSizePx);return(a,p)=>(m(),h("ul",{class:c(a.$style.appGrid)},[(m(!0),h(M,null,Z(r.apps,t=>(m(),_(Oe,{key:t.id,app:t},null,8,["app"]))),128))],2))}}),Fe="_appGrid_xjc6e_2",He={appGrid:Fe},Re={$style:He},O=v(Pe,[["__cssModules",Re]]),We=f({__name:"AppToolbar",setup(r){const l=w(),s=C(),a=g();return S(()=>a.isGridView,p=>{s.replace({...l,query:{...l.query,grid:p?null:void 0}})}),S(()=>a.defaultGridSize,p=>{a.isGridView&&s.replace({...l,query:{...l.query,grid:p||null}})}),S(()=>a.showIncompatible,p=>{p?s.replace({...l,query:{...l.query,compatible:void 0}}):s.replace({...l,query:{...l.query,compatible:null}})}),(p,t)=>(m(),h("div",{class:c(p.$style.appToolbar)},[n(e(_e),{class:c(p.$style.appToolbar__filterButton),"aria-label":e(u)("appstore","Filter view"),forceMenu:""},{icon:d(()=>[n(e(b),{path:e(re)},null,8,["path"])]),default:d(()=>[e(a).isGridView?(m(),_(e(de),{key:0,name:e(u)("appstore","Grid size")},{default:d(()=>[n(e(x),{"aria-label":e(u)("appstore","Small grid size"),modelValue:e(a).defaultGridSize==="",type:"radio",value:"","onUpdate:modelValue":t[0]||(t[0]=o=>e(a).defaultGridSize="")},{icon:d(()=>[n(e(b),{path:e(te)},null,8,["path"])]),_:1},8,["aria-label","modelValue"]),n(e(x),{"aria-label":e(u)("appstore","Medium grid size"),modelValue:e(a).defaultGridSize==="m",type:"radio",value:"m","onUpdate:modelValue":t[1]||(t[1]=o=>e(a).defaultGridSize="m")},{icon:d(()=>[n(e(b),{path:e(le)},null,8,["path"])]),_:1},8,["aria-label","modelValue"]),n(e(x),{"aria-label":e(u)("appstore","Large grid size"),modelValue:e(a).defaultGridSize==="l",type:"radio",value:"l","onUpdate:modelValue":t[2]||(t[2]=o=>e(a).defaultGridSize="l")},{icon:d(()=>[n(e(b),{path:e(se)},null,8,["path"])]),_:1},8,["aria-label","modelValue"])]),_:1},8,["name"])):B("",!0),n(e(Ie),{modelValue:e(a).showIncompatible,"onUpdate:modelValue":t[3]||(t[3]=o=>e(a).showIncompatible=o)},{default:d(()=>[T(G(e(u)("appstore","Show incompatible")),1)]),_:1},8,["modelValue"])]),_:1},8,["class","aria-label"]),n(e(L),{pressed:e(a).isGridView,"onUpdate:pressed":t[4]||(t[4]=o=>e(a).isGridView=o),"aria-label":e(u)("appstore","Grid view"),variant:"tertiary"},{icon:d(()=>[n(e(b),{path:e(oe)},null,8,["path"])]),_:1},8,["pressed","aria-label"])],2))}}),De="_appToolbar_1v7y4_2",Ee={appToolbar:De},Qe={$style:Ee},P=v(We,[["__cssModules",Qe]]);function F(r){const l=g(),s=w();return I(()=>{const a=[s.query.q||""].flat()[0];return ee(r).filter(p=>{if(!l.showIncompatible&&p.isCompatible===!1)return!1;if(a){const t=a.trim().toLocaleLowerCase();return p.name.toLocaleLowerCase().includes(t)||p.id.toLocaleLowerCase().includes(t)||p.summary.toLocaleLowerCase().includes(t)}return!0})})}const Je=f({__name:"AppstoreManage",setup(r){const l=w(),s=N(),a=g(),p=I(()=>l.params.category),t=I(()=>p.value==="installed"?s.apps.filter(i=>i.installed):p.value==="enabled"?s.apps.filter(i=>i.active):p.value==="disabled"?s.apps.filter(i=>i.installed&&!i.active):p.value==="updates"?s.apps.filter(i=>i.update):[]),o=F(t);return(i,k)=>(m(),h(M,null,[n(P),e(s).isLoadingApps?(m(),_(e(V),{key:0,name:e(u)("appstore","Loading app list")},{icon:d(()=>[n(e(z),{size:64})]),_:1},8,["name"])):e(o).length?(m(),_(U(e(a).isGridView?O:A),{key:1,class:c(i.$style.appstoreManage),apps:e(o)},null,8,["class","apps"])):(m(),_(e(V),{key:2,name:e(u)("appstore","No matching apps found")},{action:d(()=>[n(e(L),{variant:"primary",onClick:k[0]||(k[0]=q=>i.$router.push({query:i.$route.query,name:"apps-search"}))},{default:d(()=>[T(G(e(u)("appstore","Search everywhere")),1)]),_:1})]),_:1},8,["name"]))],64))}}),Ke="_appstoreManage_msk54_2",Xe={appstoreManage:Ke},Ye={$style:Xe},Ze=v(Je,[["__cssModules",Ye]]),Wa=Object.freeze(Object.defineProperty({__proto__:null,default:Ze},Symbol.toStringTag,{value:"Module"})),ea=f({__name:"AppstoreSearch",setup(r){const l=w(),s=C(),a=N(),p=g(),t=F(()=>a.apps),o=$("");return S(()=>l.query.q,i=>{o.value=[i||""].flat()[0]},{immediate:!0}),he(o,i=>{s.replace({...l,query:{...l.query,q:i.trim()}})},{debounce:500}),(i,k)=>(m(),h(M,null,[n(P),e(a).isLoadingApps?(m(),_(e(V),{key:0,name:e(u)("appstore","Loading app list")},{icon:d(()=>[n(e(z),{size:64})]),_:1},8,["name"])):e(t).length&&o.value.trim().length>2?(m(),_(U(e(p).isGridView?O:A),{key:1,class:c(i.$style.appstoreSearch),apps:e(t)},null,8,["class","apps"])):(m(),_(e(V),{key:2,name:e(u)("appstore","No matching apps found"),description:o.value.trim().length<=2?e(u)("appstore","Please enter more characters to search."):void 0},{action:d(()=>[n(e(ae),{modelValue:o.value,"onUpdate:modelValue":k[0]||(k[0]=q=>o.value=q),type:"search",label:e(u)("appstore","Search apps")},null,8,["modelValue","label"])]),_:1},8,["name","description"]))],64))}}),aa="_appstoreSearch_e0puj_2",pa={appstoreSearch:aa},ta={$style:pa},la=v(ea,[["__cssModules",ta]]),Da=Object.freeze(Object.defineProperty({__proto__:null,default:la},Symbol.toStringTag,{value:"Module"}));export{qe as A,P as a,O as b,Wa as c,Da as d,F as u}; +//# sourceMappingURL=AppstoreSearch-CPzSIsIZ.chunk.mjs.map diff --git a/dist/AppstoreSearch-DwuHwCEU.chunk.mjs.license b/dist/AppstoreSearch-CPzSIsIZ.chunk.mjs.license similarity index 100% rename from dist/AppstoreSearch-DwuHwCEU.chunk.mjs.license rename to dist/AppstoreSearch-CPzSIsIZ.chunk.mjs.license diff --git a/dist/AppstoreSearch-DwuHwCEU.chunk.mjs.map b/dist/AppstoreSearch-CPzSIsIZ.chunk.mjs.map similarity index 99% rename from dist/AppstoreSearch-DwuHwCEU.chunk.mjs.map rename to dist/AppstoreSearch-CPzSIsIZ.chunk.mjs.map index 27c546afbc718..6cff57c87914b 100644 --- a/dist/AppstoreSearch-DwuHwCEU.chunk.mjs.map +++ b/dist/AppstoreSearch-CPzSIsIZ.chunk.mjs.map @@ -1 +1 @@ -{"version":3,"file":"AppstoreSearch-DwuHwCEU.chunk.mjs","sources":["../node_modules/@nextcloud/vue/dist/chunks/NcActionCheckbox-DBqiK-AZ.mjs","../build/frontend/apps/appstore/src/components/AppImage.vue","../build/frontend/apps/appstore/src/components/AppGrid/AppGridItem.vue","../build/frontend/apps/appstore/src/components/AppGrid/AppGrid.vue","../build/frontend/apps/appstore/src/components/AppToolbar.vue","../build/frontend/apps/appstore/src/composables/useFilteredApps.ts","../build/frontend/apps/appstore/src/views/AppstoreManage.vue","../build/frontend/apps/appstore/src/views/AppstoreSearch.vue"],"sourcesContent":["import '../assets/NcActionCheckbox-wD8m_a8-.css';\nimport { h as mdiCheckboxMarked, i as mdiCheckboxBlankOutline } from \"./mdi-CpchYUUV.mjs\";\nimport { resolveComponent, openBlock, createElementBlock, normalizeClass, createElementVNode, withDirectives, vModelCheckbox, createVNode, toDisplayString, useModel } from \"vue\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { A as ActionGlobalMixin } from \"./actionGlobal-BZFdtdJL.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { a as NC_ACTIONS_IS_SEMANTIC_MENU } from \"./useNcActions-BzPO2c4h.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n name: \"NcActionCheckbox\",\n components: {\n NcIconSvgWrapper\n },\n mixins: [ActionGlobalMixin],\n inject: {\n isInSemanticMenu: {\n from: NC_ACTIONS_IS_SEMANTIC_MENU,\n default: false\n }\n },\n props: {\n /**\n * id attribute of the checkbox element\n */\n id: {\n type: String,\n default: () => \"action-\" + createElementId(),\n validator: (id) => id.trim() !== \"\"\n },\n /**\n * checked state of the the checkbox element\n */\n modelValue: {\n type: Boolean,\n default: false\n },\n /**\n * value of the checkbox input\n */\n value: {\n type: [String, Number],\n default: \"\"\n },\n /**\n * disabled state of the checkbox element\n */\n disabled: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n /** Native change event */\n \"change\",\n /** Checkbox is checked */\n \"check\",\n /** Checkbox is unchecked */\n \"uncheck\",\n /** Model value changed */\n \"update:modelValue\"\n ],\n setup(props) {\n const model = useModel(props, \"modelValue\");\n return {\n model,\n mdiCheckboxBlankOutline,\n mdiCheckboxMarked\n };\n },\n methods: {\n onChange(event) {\n this.$emit(\"change\", event);\n if (event.target.checked) {\n this.$emit(\"check\");\n } else {\n this.$emit(\"uncheck\");\n }\n }\n }\n};\nconst _hoisted_1 = [\"role\"];\nconst _hoisted_2 = [\"role\", \"aria-checked\"];\nconst _hoisted_3 = { class: \"action-checkbox__icon\" };\nconst _hoisted_4 = [\"id\", \"value\", \"disabled\"];\nconst _hoisted_5 = { class: \"action-checkbox__text\" };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcIconSvgWrapper = resolveComponent(\"NcIconSvgWrapper\");\n return openBlock(), createElementBlock(\"li\", {\n class: normalizeClass([\"action\", { \"action--disabled\": $props.disabled }]),\n role: $options.isInSemanticMenu && \"presentation\"\n }, [\n createElementVNode(\"label\", {\n class: \"action-checkbox\",\n role: $options.isInSemanticMenu && \"menuitemcheckbox\",\n \"aria-checked\": $options.isInSemanticMenu && $setup.model.toString()\n }, [\n createElementVNode(\"span\", _hoisted_3, [\n withDirectives(createElementVNode(\"input\", {\n id: $props.id,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => $setup.model = $event),\n type: \"checkbox\",\n class: normalizeClass([\"action-checkbox__input\", { focusable: !$props.disabled }]),\n value: $props.value,\n disabled: $props.disabled,\n onChange: _cache[1] || (_cache[1] = (...args) => $options.onChange && $options.onChange(...args))\n }, null, 42, _hoisted_4), [\n [vModelCheckbox, $setup.model]\n ]),\n createVNode(_component_NcIconSvgWrapper, {\n path: $setup.model ? $setup.mdiCheckboxMarked : $setup.mdiCheckboxBlankOutline,\n size: 20\n }, null, 8, [\"path\"])\n ]),\n createElementVNode(\"span\", _hoisted_5, toDisplayString(_ctx.text), 1)\n ], 8, _hoisted_2)\n ], 10, _hoisted_1);\n}\nconst NcActionCheckbox = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-2947bc3b\"]]);\nexport {\n NcActionCheckbox as N\n};\n//# sourceMappingURL=NcActionCheckbox-DBqiK-AZ.mjs.map\n","\n\n\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","/*!\n * SPDX-License-Identifier: AGPL-3.0-or-later\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n */\n\nimport type { MaybeRefOrGetter } from 'vue'\nimport type { IAppstoreApp, IAppstoreExApp } from '../apps.d.ts'\n\nimport { computed, toValue } from 'vue'\nimport { useRoute } from 'vue-router'\nimport { useUserSettingsStore } from '../store/userSettings.ts'\n\n/**\n * Get the filtered list of apps based on the user settings\n *\n * @param apps - The apps to filter\n */\nexport function useFilteredApps(apps: MaybeRefOrGetter<(IAppstoreApp | IAppstoreExApp)[]>) {\n\tconst store = useUserSettingsStore()\n\tconst route = useRoute()\n\treturn computed(() => {\n\t\tconst query = [route.query.q || ''].flat()[0]!\n\t\treturn toValue(apps)\n\t\t\t.filter((app) => {\n\t\t\t\tif (!store.showIncompatible && app.isCompatible === false) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (query) {\n\t\t\t\t\tconst needle = query.trim().toLocaleLowerCase()\n\t\t\t\t\treturn app.name.toLocaleLowerCase().includes(needle)\n\t\t\t\t\t\t|| app.id.toLocaleLowerCase().includes(needle)\n\t\t\t\t\t\t|| app.summary.toLocaleLowerCase().includes(needle)\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t})\n\t})\n}\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n"],"names":["_sfc_main","NcIconSvgWrapper","ActionGlobalMixin","NC_ACTIONS_IS_SEMANTIC_MENU","createElementId","id","props","useModel","mdiCheckboxBlankOutline","mdiCheckboxMarked","event","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","_component_NcIconSvgWrapper","resolveComponent","openBlock","createElementBlock","normalizeClass","createElementVNode","withDirectives","$event","args","vModelCheckbox","createVNode","toDisplayString","NcActionCheckbox","_export_sfc","queue","PQueue","__props","isError","ref","isLoading","watchEffect","image","promise","resolve","_createElementBlock","_normalizeClass","$style","_createBlock","_unref","mdiCogOutline","NcLoadingIcon","userSettingsStore","useUserSettingsStore","route","useRoute","routeToDetails","computed","_createVNode","_component_RouterLink","AppImage","_createElementVNode","_toDisplayString","BadgeAppScore","BadgeAppLevel","BadgeAppDaemon","userSettings","gridSize","_Fragment","_renderList","app","AppGridItem","router","useRouter","watch","enabled","newSize","showIncompatible","NcActions","t","mdiFilterVariant","NcActionButtonGroup","NcActionButton","mdiSizeS","mdiSizeM","mdiSizeL","NcButton","mdiViewGrid","useFilteredApps","apps","store","query","toValue","needle","useAppsStore","currentCategory","visibleApps","AppToolbar","NcEmptyContent","_openBlock","_resolveDynamicComponent","AppGrid","AppTable","$router","$route","search","newQuery","watchDebounced","newValue","NcInputField"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"AppstoreSearch-CPzSIsIZ.chunk.mjs","sources":["../node_modules/@nextcloud/vue/dist/chunks/NcActionCheckbox-DBqiK-AZ.mjs","../build/frontend/apps/appstore/src/components/AppImage.vue","../build/frontend/apps/appstore/src/components/AppGrid/AppGridItem.vue","../build/frontend/apps/appstore/src/components/AppGrid/AppGrid.vue","../build/frontend/apps/appstore/src/components/AppToolbar.vue","../build/frontend/apps/appstore/src/composables/useFilteredApps.ts","../build/frontend/apps/appstore/src/views/AppstoreManage.vue","../build/frontend/apps/appstore/src/views/AppstoreSearch.vue"],"sourcesContent":["import '../assets/NcActionCheckbox-wD8m_a8-.css';\nimport { h as mdiCheckboxMarked, i as mdiCheckboxBlankOutline } from \"./mdi-CpchYUUV.mjs\";\nimport { resolveComponent, openBlock, createElementBlock, normalizeClass, createElementVNode, withDirectives, vModelCheckbox, createVNode, toDisplayString, useModel } from \"vue\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { A as ActionGlobalMixin } from \"./actionGlobal-BZFdtdJL.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { a as NC_ACTIONS_IS_SEMANTIC_MENU } from \"./useNcActions-BzPO2c4h.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n name: \"NcActionCheckbox\",\n components: {\n NcIconSvgWrapper\n },\n mixins: [ActionGlobalMixin],\n inject: {\n isInSemanticMenu: {\n from: NC_ACTIONS_IS_SEMANTIC_MENU,\n default: false\n }\n },\n props: {\n /**\n * id attribute of the checkbox element\n */\n id: {\n type: String,\n default: () => \"action-\" + createElementId(),\n validator: (id) => id.trim() !== \"\"\n },\n /**\n * checked state of the the checkbox element\n */\n modelValue: {\n type: Boolean,\n default: false\n },\n /**\n * value of the checkbox input\n */\n value: {\n type: [String, Number],\n default: \"\"\n },\n /**\n * disabled state of the checkbox element\n */\n disabled: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n /** Native change event */\n \"change\",\n /** Checkbox is checked */\n \"check\",\n /** Checkbox is unchecked */\n \"uncheck\",\n /** Model value changed */\n \"update:modelValue\"\n ],\n setup(props) {\n const model = useModel(props, \"modelValue\");\n return {\n model,\n mdiCheckboxBlankOutline,\n mdiCheckboxMarked\n };\n },\n methods: {\n onChange(event) {\n this.$emit(\"change\", event);\n if (event.target.checked) {\n this.$emit(\"check\");\n } else {\n this.$emit(\"uncheck\");\n }\n }\n }\n};\nconst _hoisted_1 = [\"role\"];\nconst _hoisted_2 = [\"role\", \"aria-checked\"];\nconst _hoisted_3 = { class: \"action-checkbox__icon\" };\nconst _hoisted_4 = [\"id\", \"value\", \"disabled\"];\nconst _hoisted_5 = { class: \"action-checkbox__text\" };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcIconSvgWrapper = resolveComponent(\"NcIconSvgWrapper\");\n return openBlock(), createElementBlock(\"li\", {\n class: normalizeClass([\"action\", { \"action--disabled\": $props.disabled }]),\n role: $options.isInSemanticMenu && \"presentation\"\n }, [\n createElementVNode(\"label\", {\n class: \"action-checkbox\",\n role: $options.isInSemanticMenu && \"menuitemcheckbox\",\n \"aria-checked\": $options.isInSemanticMenu && $setup.model.toString()\n }, [\n createElementVNode(\"span\", _hoisted_3, [\n withDirectives(createElementVNode(\"input\", {\n id: $props.id,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => $setup.model = $event),\n type: \"checkbox\",\n class: normalizeClass([\"action-checkbox__input\", { focusable: !$props.disabled }]),\n value: $props.value,\n disabled: $props.disabled,\n onChange: _cache[1] || (_cache[1] = (...args) => $options.onChange && $options.onChange(...args))\n }, null, 42, _hoisted_4), [\n [vModelCheckbox, $setup.model]\n ]),\n createVNode(_component_NcIconSvgWrapper, {\n path: $setup.model ? $setup.mdiCheckboxMarked : $setup.mdiCheckboxBlankOutline,\n size: 20\n }, null, 8, [\"path\"])\n ]),\n createElementVNode(\"span\", _hoisted_5, toDisplayString(_ctx.text), 1)\n ], 8, _hoisted_2)\n ], 10, _hoisted_1);\n}\nconst NcActionCheckbox = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-2947bc3b\"]]);\nexport {\n NcActionCheckbox as N\n};\n//# sourceMappingURL=NcActionCheckbox-DBqiK-AZ.mjs.map\n","\n\n\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","/*!\n * SPDX-License-Identifier: AGPL-3.0-or-later\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n */\n\nimport type { MaybeRefOrGetter } from 'vue'\nimport type { IAppstoreApp, IAppstoreExApp } from '../apps.d.ts'\n\nimport { computed, toValue } from 'vue'\nimport { useRoute } from 'vue-router'\nimport { useUserSettingsStore } from '../store/userSettings.ts'\n\n/**\n * Get the filtered list of apps based on the user settings\n *\n * @param apps - The apps to filter\n */\nexport function useFilteredApps(apps: MaybeRefOrGetter<(IAppstoreApp | IAppstoreExApp)[]>) {\n\tconst store = useUserSettingsStore()\n\tconst route = useRoute()\n\treturn computed(() => {\n\t\tconst query = [route.query.q || ''].flat()[0]!\n\t\treturn toValue(apps)\n\t\t\t.filter((app) => {\n\t\t\t\tif (!store.showIncompatible && app.isCompatible === false) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (query) {\n\t\t\t\t\tconst needle = query.trim().toLocaleLowerCase()\n\t\t\t\t\treturn app.name.toLocaleLowerCase().includes(needle)\n\t\t\t\t\t\t|| app.id.toLocaleLowerCase().includes(needle)\n\t\t\t\t\t\t|| app.summary.toLocaleLowerCase().includes(needle)\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t})\n\t})\n}\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n"],"names":["_sfc_main","NcIconSvgWrapper","ActionGlobalMixin","NC_ACTIONS_IS_SEMANTIC_MENU","createElementId","id","props","useModel","mdiCheckboxBlankOutline","mdiCheckboxMarked","event","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","_component_NcIconSvgWrapper","resolveComponent","openBlock","createElementBlock","normalizeClass","createElementVNode","withDirectives","$event","args","vModelCheckbox","createVNode","toDisplayString","NcActionCheckbox","_export_sfc","queue","PQueue","__props","isError","ref","isLoading","watchEffect","image","promise","resolve","_createElementBlock","_normalizeClass","$style","_createBlock","_unref","mdiCogOutline","NcLoadingIcon","userSettingsStore","useUserSettingsStore","route","useRoute","routeToDetails","computed","_createVNode","_component_RouterLink","AppImage","_createElementVNode","_toDisplayString","BadgeAppScore","BadgeAppLevel","BadgeAppDaemon","userSettings","gridSize","_Fragment","_renderList","app","AppGridItem","router","useRouter","watch","enabled","newSize","showIncompatible","NcActions","t","mdiFilterVariant","NcActionButtonGroup","NcActionButton","mdiSizeS","mdiSizeM","mdiSizeL","NcButton","mdiViewGrid","useFilteredApps","apps","store","query","toValue","needle","useAppsStore","currentCategory","visibleApps","AppToolbar","NcEmptyContent","_openBlock","_resolveDynamicComponent","AppGrid","AppTable","$router","$route","search","newQuery","watchDebounced","newValue","NcInputField"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/dist/AppstoreSearch-DwuHwCEU.chunk.mjs.map.license b/dist/AppstoreSearch-CPzSIsIZ.chunk.mjs.map.license similarity index 100% rename from dist/AppstoreSearch-DwuHwCEU.chunk.mjs.map.license rename to dist/AppstoreSearch-CPzSIsIZ.chunk.mjs.map.license diff --git a/dist/DiscoverTypeCarousel-D1Tykxta.chunk.mjs b/dist/DiscoverTypeCarousel-BKROD9d-.chunk.mjs similarity index 96% rename from dist/DiscoverTypeCarousel-D1Tykxta.chunk.mjs rename to dist/DiscoverTypeCarousel-BKROD9d-.chunk.mjs index c4d9816e508ae..c74925b2d5468 100644 --- a/dist/DiscoverTypeCarousel-D1Tykxta.chunk.mjs +++ b/dist/DiscoverTypeCarousel-BKROD9d-.chunk.mjs @@ -1,2 +1,2 @@ -import{b as w,l as h,z as I,o as p,f as y,t as N,u as a,h as D,g as u,k as r,w as d,c as k,m as M,T,F as q,B as z,v as s,G as A}from"./Web-BwmPK40i.chunk.mjs";import{f as B,g as F,h as G,i as P}from"./mdi-Lt-19ASw.chunk.mjs";import{t as n}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import{N as f}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import{N as g}from"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import{c as S,D as j,u as E}from"./DiscoverTypePost-iZg8MLG2.chunk.mjs";import{_ as H}from"./public-C1mLBHT3.chunk.mjs";import"./index-B-dGqfIG.chunk.mjs";import"./index-DlyLvrtV.chunk.mjs";import"./appstore-main.mjs";import"./pinia-CLibr4cC.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import"./index-BW4M2n71.chunk.mjs";import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./index-BLNGy7h5.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";/* empty css */import"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./index-xEyWukTf.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import"./ContentCopy-BF1gBM5z.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./modulepreload-polyfill-BxzAKjcf.chunk.mjs";import"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import"./index-BU6wm4Hd.chunk.mjs";const J=["aria-roledescription","aria-labelledby"],K=["id"],L={class:"app-discover-carousel__wrapper"},O={class:"app-discover-carousel__button-wrapper"},Q={class:"app-discover-carousel__button-wrapper"},R=["aria-label"],U=w({__name:"DiscoverTypeCarousel",props:{...S,content:{type:Array,required:!0}},setup(m){const t=m,$=E(s(()=>t.headline)),e=h(Math.min(1,t.content.length-1)),c=h(t.content[e.value]),C=s(()=>e.valuee.value>0),l=s(()=>t.id??(Math.random()+1).toString(36).substring(7)),v=s(()=>`${l.value}-h`),b=h("slide-in");return I(()=>e.value,(_,i)=>{_{c.value=t.content[e.value]})}),(_,i)=>(p(),y("section",{"aria-roledescription":a(n)("appstore","Carousel"),"aria-labelledby":v.value?`${v.value}`:void 0},[_.headline?(p(),y("h3",{key:0,id:v.value},N(a($)),9,K)):D("",!0),u("div",L,[u("div",O,[r(a(f),{class:"app-discover-carousel__button app-discover-carousel__button--previous",variant:"tertiary-no-background","aria-label":a(n)("appstore","Previous slide"),disabled:!x.value,onClick:i[0]||(i[0]=o=>e.value-=1)},{icon:d(()=>[r(a(g),{path:a(B)},null,8,["path"])]),_:1},8,["aria-label","disabled"])]),r(T,{name:b.value,mode:"out-in"},{default:d(()=>[(p(),k(j,M(c.value,{key:c.value.id??e.value,"aria-labelledby":`${l.value}-tab-${e.value}`,domId:`${l.value}-tabpanel-${e.value}`,inline:"",role:"tabpanel"}),null,16,["aria-labelledby","domId"]))]),_:1},8,["name"]),u("div",Q,[r(a(f),{class:"app-discover-carousel__button app-discover-carousel__button--next",variant:"tertiary-no-background","aria-label":a(n)("appstore","Next slide"),disabled:!C.value,onClick:i[1]||(i[1]=o=>e.value+=1)},{icon:d(()=>[r(a(g),{path:a(F)},null,8,["path"])]),_:1},8,["aria-label","disabled"])])]),u("div",{class:"app-discover-carousel__tabs",role:"tablist","aria-label":a(n)("appstore","Choose slide to display")},[(p(!0),y(q,null,z(m.content.length,o=>(p(),k(a(f),{id:`${l.value}-tab-${o}`,key:o,"aria-label":a(n)("appstore","{index} of {total}",{index:o,total:m.content.length}),"aria-controls":`${l.value}-tabpanel-${o}`,"aria-selected":`${e.value===o-1}`,role:"tab",variant:"tertiary-no-background",onClick:V=>e.value=o-1},{icon:d(()=>[r(a(g),{path:e.value===o-1?a(G):a(P)},null,8,["path"])]),_:2},1032,["id","aria-label","aria-controls","aria-selected","onClick"]))),128))],8,R)],8,J))}}),Ka=H(U,[["__scopeId","data-v-89f194e4"]]);export{Ka as default}; -//# sourceMappingURL=DiscoverTypeCarousel-D1Tykxta.chunk.mjs.map +import{b as w,l as h,z as I,o as p,f as y,t as N,u as a,h as D,g as u,k as r,w as d,c as k,m as M,T,F as q,B as z,v as s,G as A}from"./Web-BwmPK40i.chunk.mjs";import{f as B,g as F,h as G,i as P}from"./mdi-Lt-19ASw.chunk.mjs";import{t as n}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import{N as f}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import{N as g}from"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import{c as S,D as j,u as E}from"./DiscoverTypePost-iZg8MLG2.chunk.mjs";import{_ as H}from"./public-C1mLBHT3.chunk.mjs";import"./index-B-dGqfIG.chunk.mjs";import"./index-DlyLvrtV.chunk.mjs";import"./appstore-main.mjs";import"./pinia-CLibr4cC.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import"./index-BW4M2n71.chunk.mjs";import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./index-BLNGy7h5.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";/* empty css */import"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./index-xEyWukTf.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import"./ContentCopy-BF1gBM5z.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./modulepreload-polyfill-BxzAKjcf.chunk.mjs";import"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import"./index-BU6wm4Hd.chunk.mjs";const J=["aria-roledescription","aria-labelledby"],K=["id"],L={class:"app-discover-carousel__wrapper"},O={class:"app-discover-carousel__button-wrapper"},Q={class:"app-discover-carousel__button-wrapper"},R=["aria-label"],U=w({__name:"DiscoverTypeCarousel",props:{...S,content:{type:Array,required:!0}},setup(m){const t=m,$=E(s(()=>t.headline)),e=h(Math.min(1,t.content.length-1)),c=h(t.content[e.value]),C=s(()=>e.valuee.value>0),l=s(()=>t.id??(Math.random()+1).toString(36).substring(7)),v=s(()=>`${l.value}-h`),b=h("slide-in");return I(()=>e.value,(_,i)=>{_{c.value=t.content[e.value]})}),(_,i)=>(p(),y("section",{"aria-roledescription":a(n)("appstore","Carousel"),"aria-labelledby":v.value?`${v.value}`:void 0},[_.headline?(p(),y("h3",{key:0,id:v.value},N(a($)),9,K)):D("",!0),u("div",L,[u("div",O,[r(a(f),{class:"app-discover-carousel__button app-discover-carousel__button--previous",variant:"tertiary-no-background","aria-label":a(n)("appstore","Previous slide"),disabled:!x.value,onClick:i[0]||(i[0]=o=>e.value-=1)},{icon:d(()=>[r(a(g),{path:a(B)},null,8,["path"])]),_:1},8,["aria-label","disabled"])]),r(T,{name:b.value,mode:"out-in"},{default:d(()=>[(p(),k(j,M(c.value,{key:c.value.id??e.value,"aria-labelledby":`${l.value}-tab-${e.value}`,domId:`${l.value}-tabpanel-${e.value}`,inline:"",role:"tabpanel"}),null,16,["aria-labelledby","domId"]))]),_:1},8,["name"]),u("div",Q,[r(a(f),{class:"app-discover-carousel__button app-discover-carousel__button--next",variant:"tertiary-no-background","aria-label":a(n)("appstore","Next slide"),disabled:!C.value,onClick:i[1]||(i[1]=o=>e.value+=1)},{icon:d(()=>[r(a(g),{path:a(F)},null,8,["path"])]),_:1},8,["aria-label","disabled"])])]),u("div",{class:"app-discover-carousel__tabs",role:"tablist","aria-label":a(n)("appstore","Choose slide to display")},[(p(!0),y(q,null,z(m.content.length,o=>(p(),k(a(f),{id:`${l.value}-tab-${o}`,key:o,"aria-label":a(n)("appstore","{index} of {total}",{index:o,total:m.content.length}),"aria-controls":`${l.value}-tabpanel-${o}`,"aria-selected":`${e.value===o-1}`,role:"tab",variant:"tertiary-no-background",onClick:V=>e.value=o-1},{icon:d(()=>[r(a(g),{path:e.value===o-1?a(G):a(P)},null,8,["path"])]),_:2},1032,["id","aria-label","aria-controls","aria-selected","onClick"]))),128))],8,R)],8,J))}}),Ka=H(U,[["__scopeId","data-v-89f194e4"]]);export{Ka as default}; +//# sourceMappingURL=DiscoverTypeCarousel-BKROD9d-.chunk.mjs.map diff --git a/dist/DiscoverTypeCarousel-D1Tykxta.chunk.mjs.license b/dist/DiscoverTypeCarousel-BKROD9d-.chunk.mjs.license similarity index 100% rename from dist/DiscoverTypeCarousel-D1Tykxta.chunk.mjs.license rename to dist/DiscoverTypeCarousel-BKROD9d-.chunk.mjs.license diff --git a/dist/DiscoverTypeCarousel-D1Tykxta.chunk.mjs.map b/dist/DiscoverTypeCarousel-BKROD9d-.chunk.mjs.map similarity index 99% rename from dist/DiscoverTypeCarousel-D1Tykxta.chunk.mjs.map rename to dist/DiscoverTypeCarousel-BKROD9d-.chunk.mjs.map index 8d9ad71917b97..26cf2595e6ea3 100644 --- a/dist/DiscoverTypeCarousel-D1Tykxta.chunk.mjs.map +++ b/dist/DiscoverTypeCarousel-BKROD9d-.chunk.mjs.map @@ -1 +1 @@ -{"version":3,"file":"DiscoverTypeCarousel-D1Tykxta.chunk.mjs","sources":["../build/frontend/apps/appstore/src/components/DiscoverType/DiscoverTypeCarousel.vue"],"sourcesContent":["\n\n\n\n\n\n\n\n"],"names":["props","__props","translatedHeadline","useLocalizedValue","computed","currentIndex","ref","shownElement","hasNext","hasPrevious","internalId","headingId","transitionName","watch","o","n","nextTick","_createElementBlock","_unref","t","headline","_hoisted_2","_createElementVNode","_hoisted_3","_hoisted_4","_createVNode","NcButton","NcIconSvgWrapper","mdiChevronLeft","_Transition","_createBlock","DiscoverTypePost","_mergeProps","_hoisted_5","mdiChevronRight","_openBlock","_Fragment","_renderList","index","$event","mdiCircleSlice8","mdiCircleOutline"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"DiscoverTypeCarousel-BKROD9d-.chunk.mjs","sources":["../build/frontend/apps/appstore/src/components/DiscoverType/DiscoverTypeCarousel.vue"],"sourcesContent":["\n\n\n\n\n\n\n\n"],"names":["props","__props","translatedHeadline","useLocalizedValue","computed","currentIndex","ref","shownElement","hasNext","hasPrevious","internalId","headingId","transitionName","watch","o","n","nextTick","_createElementBlock","_unref","t","headline","_hoisted_2","_createElementVNode","_hoisted_3","_hoisted_4","_createVNode","NcButton","NcIconSvgWrapper","mdiChevronLeft","_Transition","_createBlock","DiscoverTypePost","_mergeProps","_hoisted_5","mdiChevronRight","_openBlock","_Fragment","_renderList","index","$event","mdiCircleSlice8","mdiCircleOutline"],"mappings":"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"} \ No newline at end of file diff --git a/dist/DiscoverTypeCarousel-D1Tykxta.chunk.mjs.map.license b/dist/DiscoverTypeCarousel-BKROD9d-.chunk.mjs.map.license similarity index 100% rename from dist/DiscoverTypeCarousel-D1Tykxta.chunk.mjs.map.license rename to dist/DiscoverTypeCarousel-BKROD9d-.chunk.mjs.map.license diff --git a/dist/DiscoverTypeShowcase-_0KyBNPF.chunk.mjs b/dist/DiscoverTypeShowcase-D91mSUxk.chunk.mjs similarity index 96% rename from dist/DiscoverTypeShowcase-_0KyBNPF.chunk.mjs rename to dist/DiscoverTypeShowcase-D91mSUxk.chunk.mjs index aed9d56194005..762174fd6e01f 100644 --- a/dist/DiscoverTypeShowcase-_0KyBNPF.chunk.mjs +++ b/dist/DiscoverTypeShowcase-D91mSUxk.chunk.mjs @@ -1,2 +1,2 @@ -import{u as x}from"./index-DlyLvrtV.chunk.mjs";import{A}from"./AppstoreSearch-DwuHwCEU.chunk.mjs";import{l as B,_ as V}from"./public-C1mLBHT3.chunk.mjs";import{b as D}from"./index-B-dGqfIG.chunk.mjs";import{u as j,R as T}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import{b as w,H as q,o as p,f as l,I,m as v,i as g,c as f,u as _,w as $,h,l as y,J as E,k as d,g as c,j as F,t as k,v as u,F as H,B as J,y as L}from"./Web-BwmPK40i.chunk.mjs";import{u as O,B as R}from"./appstore-main.mjs";import{c as S,D as z,u as C}from"./DiscoverTypePost-iZg8MLG2.chunk.mjs";import"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import"./mdi-Lt-19ASw.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";import"./NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-BW4M2n71.chunk.mjs";import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./index-BLNGy7h5.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";/* empty css */import"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./index-xEyWukTf.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import"./ContentCopy-BF1gBM5z.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./pinia-CLibr4cC.chunk.mjs";import"./modulepreload-polyfill-BxzAKjcf.chunk.mjs";import"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import"./index-BU6wm4Hd.chunk.mjs";const G=w({__name:"AppLink",props:{href:{}},setup(t){const o=t,i=j(),e=Object.fromEntries(B("core","apps").map(a=>[a.app??a.id,a.href])),s=y(),r=y();return q(()=>{const a=o.href.match(/^app:(\/\/)?([^/]+)(\/.+)?$/);if(s.value=void 0,r.value=void 0,a===null){r.value={href:o.href,target:"_blank",rel:"noreferrer noopener"};return}const m=a[2];if(a[3]){r.value={href:D(`/apps/${m}${a[3]}`)};return}if(m in e){r.value={href:e[m]};return}s.value={to:{name:"apps-discover",params:{category:i.params?.category??"discover",id:m}}}}),(a,m)=>r.value?(p(),l("a",I(v({key:0},r.value)),[g(a.$slots,"default")],16)):s.value?(p(),f(_(T),I(v({key:1},s.value)),{default:$(()=>[g(a.$slots,"default")]),_:3},16)):h("",!0)}}),K=["href","title"],M={key:1,class:"app-discover-app"},N={class:"app-discover-app__wrapper"},P={class:"app-discover-app__name"},Q=w({__name:"DiscoverTypeApp",props:{modelValue:{}},setup(t){const o=t,i=O(),e=u(()=>i.getAppById(o.modelValue.appId)),s=u(()=>o.modelValue.appId?`https://apps.nextcloud.com/apps/${o.modelValue.appId}`:"#");return(r,a)=>e.value?(p(),l("article",M,[d(A,{class:"app-discover-app__image",app:e.value},null,8,["app"]),c("div",N,[c("h3",P,[d(G,{href:`app:${e.value.id}`},{default:$(()=>[F(k(e.value.name),1)]),_:1},8,["href"])]),c("p",null,k(e.value.summary),1),d(R,{class:"app-discover-app__score",app:e.value},null,8,["app"])])])):(p(),l("a",{key:0,class:"app-discover-app app-discover-app__skeleton",href:s.value,target:"_blank",title:t.modelValue.appId,rel:"noopener noreferrer"},[...a[0]||(a[0]=[E('',5)])],8,K))}}),U=V(Q,[["__scopeId","data-v-6a756697"]]),W={key:0},X={class:"app-discover-showcase__list"},Y=w({__name:"DiscoverTypeShowcase",props:{...S,content:{type:Array,required:!0}},setup(t){const o=t,i=C(u(()=>o.headline)),e=y(),{width:s}=x(e),r=u(()=>s.value<768),a=u(()=>s.value<512);return(m,Z)=>(p(),l("section",{ref_key:"container",ref:e,class:L(["app-discover-showcase",{"app-discover-showcase--small":r.value,"app-discover-showcase--extra-small":a.value}])},[_(i)?(p(),l("h3",W,k(_(i)),1)):h("",!0),c("ul",X,[(p(!0),l(H,null,J(t.content,(n,b)=>(p(),l("li",{key:"id"in n?n.id:b,class:"app-discover-showcase__item"},[n.type==="post"?(p(),f(z,v({key:0,ref_for:!0},n,{inline:""}),null,16)):n.type==="app"?(p(),f(U,{key:1,modelValue:n},null,8,["modelValue"])):h("",!0)]))),128))])],2))}}),Qa=V(Y,[["__scopeId","data-v-83c1b4dd"]]);export{Qa as default}; -//# sourceMappingURL=DiscoverTypeShowcase-_0KyBNPF.chunk.mjs.map +import{u as x}from"./index-DlyLvrtV.chunk.mjs";import{A}from"./AppstoreSearch-CPzSIsIZ.chunk.mjs";import{l as B,_ as V}from"./public-C1mLBHT3.chunk.mjs";import{b as D}from"./index-B-dGqfIG.chunk.mjs";import{u as j,R as T}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import{b as w,H as q,o as p,f as l,I,m as v,i as g,c as f,u as _,w as $,h,l as y,J as E,k as d,g as c,j as F,t as k,v as u,F as H,B as J,y as L}from"./Web-BwmPK40i.chunk.mjs";import{u as O,B as R}from"./appstore-main.mjs";import{c as S,D as z,u as C}from"./DiscoverTypePost-iZg8MLG2.chunk.mjs";import"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import"./mdi-Lt-19ASw.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";import"./NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-BW4M2n71.chunk.mjs";import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./index-BLNGy7h5.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";/* empty css */import"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./index-xEyWukTf.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import"./ContentCopy-BF1gBM5z.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./pinia-CLibr4cC.chunk.mjs";import"./modulepreload-polyfill-BxzAKjcf.chunk.mjs";import"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import"./index-BU6wm4Hd.chunk.mjs";const G=w({__name:"AppLink",props:{href:{}},setup(t){const o=t,i=j(),e=Object.fromEntries(B("core","apps").map(a=>[a.app??a.id,a.href])),s=y(),r=y();return q(()=>{const a=o.href.match(/^app:(\/\/)?([^/]+)(\/.+)?$/);if(s.value=void 0,r.value=void 0,a===null){r.value={href:o.href,target:"_blank",rel:"noreferrer noopener"};return}const m=a[2];if(a[3]){r.value={href:D(`/apps/${m}${a[3]}`)};return}if(m in e){r.value={href:e[m]};return}s.value={to:{name:"apps-discover",params:{category:i.params?.category??"discover",id:m}}}}),(a,m)=>r.value?(p(),l("a",I(v({key:0},r.value)),[g(a.$slots,"default")],16)):s.value?(p(),f(_(T),I(v({key:1},s.value)),{default:$(()=>[g(a.$slots,"default")]),_:3},16)):h("",!0)}}),K=["href","title"],M={key:1,class:"app-discover-app"},N={class:"app-discover-app__wrapper"},P={class:"app-discover-app__name"},Q=w({__name:"DiscoverTypeApp",props:{modelValue:{}},setup(t){const o=t,i=O(),e=u(()=>i.getAppById(o.modelValue.appId)),s=u(()=>o.modelValue.appId?`https://apps.nextcloud.com/apps/${o.modelValue.appId}`:"#");return(r,a)=>e.value?(p(),l("article",M,[d(A,{class:"app-discover-app__image",app:e.value},null,8,["app"]),c("div",N,[c("h3",P,[d(G,{href:`app:${e.value.id}`},{default:$(()=>[F(k(e.value.name),1)]),_:1},8,["href"])]),c("p",null,k(e.value.summary),1),d(R,{class:"app-discover-app__score",app:e.value},null,8,["app"])])])):(p(),l("a",{key:0,class:"app-discover-app app-discover-app__skeleton",href:s.value,target:"_blank",title:t.modelValue.appId,rel:"noopener noreferrer"},[...a[0]||(a[0]=[E('',5)])],8,K))}}),U=V(Q,[["__scopeId","data-v-6a756697"]]),W={key:0},X={class:"app-discover-showcase__list"},Y=w({__name:"DiscoverTypeShowcase",props:{...S,content:{type:Array,required:!0}},setup(t){const o=t,i=C(u(()=>o.headline)),e=y(),{width:s}=x(e),r=u(()=>s.value<768),a=u(()=>s.value<512);return(m,Z)=>(p(),l("section",{ref_key:"container",ref:e,class:L(["app-discover-showcase",{"app-discover-showcase--small":r.value,"app-discover-showcase--extra-small":a.value}])},[_(i)?(p(),l("h3",W,k(_(i)),1)):h("",!0),c("ul",X,[(p(!0),l(H,null,J(t.content,(n,b)=>(p(),l("li",{key:"id"in n?n.id:b,class:"app-discover-showcase__item"},[n.type==="post"?(p(),f(z,v({key:0,ref_for:!0},n,{inline:""}),null,16)):n.type==="app"?(p(),f(U,{key:1,modelValue:n},null,8,["modelValue"])):h("",!0)]))),128))])],2))}}),Qa=V(Y,[["__scopeId","data-v-83c1b4dd"]]);export{Qa as default}; +//# sourceMappingURL=DiscoverTypeShowcase-D91mSUxk.chunk.mjs.map diff --git a/dist/DiscoverTypeShowcase-_0KyBNPF.chunk.mjs.license b/dist/DiscoverTypeShowcase-D91mSUxk.chunk.mjs.license similarity index 100% rename from dist/DiscoverTypeShowcase-_0KyBNPF.chunk.mjs.license rename to dist/DiscoverTypeShowcase-D91mSUxk.chunk.mjs.license diff --git a/dist/DiscoverTypeShowcase-_0KyBNPF.chunk.mjs.map b/dist/DiscoverTypeShowcase-D91mSUxk.chunk.mjs.map similarity index 99% rename from dist/DiscoverTypeShowcase-_0KyBNPF.chunk.mjs.map rename to dist/DiscoverTypeShowcase-D91mSUxk.chunk.mjs.map index 9d70322ec89c4..42ae9cb7cd780 100644 --- a/dist/DiscoverTypeShowcase-_0KyBNPF.chunk.mjs.map +++ b/dist/DiscoverTypeShowcase-D91mSUxk.chunk.mjs.map @@ -1 +1 @@ -{"version":3,"file":"DiscoverTypeShowcase-_0KyBNPF.chunk.mjs","sources":["../build/frontend/apps/appstore/src/components/AppLink.vue","../build/frontend/apps/appstore/src/components/DiscoverType/DiscoverTypeApp.vue","../build/frontend/apps/appstore/src/components/DiscoverType/DiscoverTypeShowcase.vue"],"sourcesContent":["\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n"],"names":["props","__props","route","useRoute","knownRoutes","loadState","app","routerProps","ref","linkProps","watchEffect","match","appId","generateUrl","_openBlock","_createElementBlock","_renderSlot","_ctx","_createBlock","_unref","store","useAppsStore","computed","appStoreLink","_hoisted_2","_createVNode","AppImage","_createElementVNode","_hoisted_3","_hoisted_4","AppLink","_createTextVNode","_toDisplayString","BadgeAppScore","translatedHeadline","useLocalizedValue","container","containerWidth","useElementSize","isSmallWidth","isExtraSmallWidth","_Fragment","_renderList","item","index","DiscoverTypePost","_mergeProps","DiscoverTypeApp"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"DiscoverTypeShowcase-D91mSUxk.chunk.mjs","sources":["../build/frontend/apps/appstore/src/components/AppLink.vue","../build/frontend/apps/appstore/src/components/DiscoverType/DiscoverTypeApp.vue","../build/frontend/apps/appstore/src/components/DiscoverType/DiscoverTypeShowcase.vue"],"sourcesContent":["\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n"],"names":["props","__props","route","useRoute","knownRoutes","loadState","app","routerProps","ref","linkProps","watchEffect","match","appId","generateUrl","_openBlock","_createElementBlock","_renderSlot","_ctx","_createBlock","_unref","store","useAppsStore","computed","appStoreLink","_hoisted_2","_createVNode","AppImage","_createElementVNode","_hoisted_3","_hoisted_4","AppLink","_createTextVNode","_toDisplayString","BadgeAppScore","translatedHeadline","useLocalizedValue","container","containerWidth","useElementSize","isSmallWidth","isExtraSmallWidth","_Fragment","_renderList","item","index","DiscoverTypePost","_mergeProps","DiscoverTypeApp"],"mappings":"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"} \ No newline at end of file diff --git a/dist/DiscoverTypeShowcase-_0KyBNPF.chunk.mjs.map.license b/dist/DiscoverTypeShowcase-D91mSUxk.chunk.mjs.map.license similarity index 100% rename from dist/DiscoverTypeShowcase-_0KyBNPF.chunk.mjs.map.license rename to dist/DiscoverTypeShowcase-D91mSUxk.chunk.mjs.map.license diff --git a/dist/NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs b/dist/NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs similarity index 99% rename from dist/NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs rename to dist/NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs index 3f0b5243c5778..412a54990edf3 100644 --- a/dist/NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs +++ b/dist/NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs @@ -1,4 +1,4 @@ import{r as I,_ as N,b as $,c as tt,O as ba,N as Be,P as fa,Q as va,t as ya,R as Ca,S as Aa,u as ka,T as _a,U as Ea,V as Gt,W as Ta,X as Sa,Y as Ba,Z as La,l as Na,$ as wa,a0 as Ia,a1 as xa,a2 as $a,a3 as Fa}from"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import{d as Da,w as Qt,x as Yt,c as Zt,a as Lt,y as Ra,l as Oa,z as za}from"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";import{o as u,f as d,t as F,h as b,g as f,i as S,b as X,X as Xt,ak as Ma,p as Nt,l as ee,H as Pa,z as be,D as Ha,E as Ua,y as T,c as E,w as B,a7 as P,k as _,u as M,n as Ce,v as yt,m as U,r as A,L as J,aj as ja,N as w,j as at,I as Va,O as Ka,C as qa,x as Wa,s as fe,G as Ga,ah as Pt,af as Qa,Q as Jt,M as ct,T as Ya,F as Za,B as Xa,ae as Ja,K as ei}from"./Web-BwmPK40i.chunk.mjs";import{s as ti,f as dt,u as ai,d as ii}from"./index-B-dGqfIG.chunk.mjs";import{g as oe,F as ni,G as si,N as it,l as ea,i as pt,e as oi,f as ri}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import{H as li,C as ui}from"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import{I as wt,C as ci,_ as di,N as pi}from"./index-BOH7nBEM.chunk.mjs";import{N as hi}from"./PencilOutline-CJ2aSuY5.chunk.mjs";import{N as ta}from"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import{_ as aa}from"./TrayArrowDown-BI3qCRD6.chunk.mjs";import{N as gi}from"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import{e as ia,b as mi}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import"./index-BW4M2n71.chunk.mjs";import{a as bi,b as fi,N as vi}from"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import{N as yi}from"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import{P as Ci}from"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";import"./index-BLNGy7h5.chunk.mjs";import{g as Ai}from"./public-C1mLBHT3.chunk.mjs";I();const ki=X({name:"NcActionButtonGroup",inject:{isInSemanticMenu:{from:Da,default:!1}},props:{name:{required:!1,default:void 0,type:String}},setup(){return{labelId:tt()}},methods:{t:$}}),_i=["role"],Ei=["id"],Ti=["aria-labelledby"];function Si(e,a,t,s,n,i){return u(),d("li",{class:"nc-button-group-base",role:e.isInSemanticMenu&&"presentation"},[e.name?(u(),d("div",{key:0,id:e.labelId},F(e.name),9,Ei)):b("",!0),f("ul",{class:"nc-button-group-content",role:"group","aria-labelledby":e.name?e.labelId:void 0},[S(e.$slots,"default")],8,Ti)],8,_i)}const _o=N(ki,[["render",Si],["__scopeId","data-v-6a2b8de0"]]),Bi={name:"NcAppNavigationList"},Li={class:"app-navigation-list"};function Ni(e,a,t,s,n,i){return u(),d("ul",Li,[S(e.$slots,"default",{},void 0,!0)])}const wi=N(Bi,[["render",Ni],["__scopeId","data-v-d72957ed"]]);I(ba);const Ii={class:"app-navigation-toggle-wrapper"},xi=X({__name:"NcAppNavigationToggle",props:{open:{type:Boolean,required:!0},openModifiers:{}},emits:["update:open"],setup(e){const a=Ce(e,"open"),t=yt(()=>a.value?$("Close navigation"):$("Open navigation"));return(s,n)=>(u(),d("div",Ii,[_(M(it),{class:"app-navigation-toggle","aria-controls":"app-navigation-vue","aria-expanded":a.value?"true":"false","aria-label":t.value,title:t.value,variant:"tertiary",onClick:n[0]||(n[0]=i=>a.value=!a.value)},{icon:B(()=>[_(Be,{path:a.value?M(ni):M(si)},null,8,["path"])]),_:1},8,["aria-expanded","aria-label","title"])]))}}),$i=N(xi,[["__scopeId","data-v-5a15295d"]]),Fi=["aria-hidden","aria-label","aria-labelledby","inert"],Di={class:"app-navigation__search"},Ri=X({__name:"NcAppNavigation",props:{ariaLabel:{},ariaLabelledby:{}},setup(e){const a=e;let t;const s=Xt(li,()=>Ma(),!1),n=Nt("appNavigationContainer"),i=Zt(),o=ee(!i.value);Pa(()=>{!a.ariaLabel&&a.ariaLabelledby}),be(i,()=>{o.value=!i.value}),be(o,()=>{h()}),Ha(()=>{s(!0),ti("toggle-navigation",p),dt("navigation-toggled",{open:o.value}),t=Qt(n.value,{allowOutsideClick:!0,clickOutsideDeactivates:()=>(i.value&&(t.deactivate({returnFocus:!1}),l(!1)),!1),fallbackFocus:n.value,trapStack:Yt(),escapeDeactivates:!1}),h()}),Ua(()=>{s(!1),ai("toggle-navigation",p),t.deactivate()});function l(c){if(o.value===c){dt("navigation-toggled",{open:o.value});return}o.value=c===void 0?!o.value:c;const v=getComputedStyle(document.body),y=parseInt(v.getPropertyValue("--animation-quick"))||100;setTimeout(()=>{dt("navigation-toggled",{open:o.value})},1.5*y)}function p({open:c}){return l(c)}function h(){i.value&&o.value?t.activate():t.deactivate()}function g(){i.value&&l(!1)}return(c,v)=>(u(),d("div",{ref:"appNavigationContainer",class:T(["app-navigation",{"app-navigation--closed":!o.value,"app-navigation--legacy":M(oe)}])},[f("nav",{id:"app-navigation-vue","aria-hidden":o.value?"false":"true","aria-label":e.ariaLabel||void 0,"aria-labelledby":e.ariaLabelledby||void 0,class:"app-navigation__content",inert:!o.value||void 0,onKeydown:P(g,["esc"])},[f("div",Di,[S(c.$slots,"search",{},void 0,!0)]),f("div",{class:T(["app-navigation__body",{"app-navigation__body--no-list":!c.$slots.list}])},[S(c.$slots,"default",{},void 0,!0)],2),c.$slots.list?(u(),E(wi,{key:0,class:"app-navigation__list"},{default:B(()=>[S(c.$slots,"list",{},void 0,!0)]),_:3})):b("",!0),S(c.$slots,"footer",{},void 0,!0)],40,Fi),_($i,{open:o.value,"onUpdate:open":l},null,8,["open"])],2))}}),Eo=N(Ri,[["__scopeId","data-v-104ef656"]]);({...Lt.props});const Oi={name:"ChevronUpIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},zi=["aria-hidden","aria-label"],Mi=["fill","width","height"],Pi={d:"M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z"},Hi={key:0};function Ui(e,a,t,s,n,i){return u(),d("span",U(e.$attrs,{"aria-hidden":t.title?null:"true","aria-label":t.title,class:"material-design-icon chevron-up-icon",role:"img",onClick:a[0]||(a[0]=o=>e.$emit("click",o))}),[(u(),d("svg",{fill:t.fillColor,class:"material-design-icon__svg",width:t.size,height:t.size,viewBox:"0 0 24 24"},[f("path",Pi,[t.title?(u(),d("title",Hi,F(t.title),1)):b("",!0)])],8,Mi))],16,zi)}const ji=N(Oi,[["render",Ui]]),Vi={name:"ArrowRightIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},Ki=["aria-hidden","aria-label"],qi=["fill","width","height"],Wi={d:"M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z"},Gi={key:0};function Qi(e,a,t,s,n,i){return u(),d("span",U(e.$attrs,{"aria-hidden":t.title?null:"true","aria-label":t.title,class:"material-design-icon arrow-right-icon",role:"img",onClick:a[0]||(a[0]=o=>e.$emit("click",o))}),[(u(),d("svg",{fill:t.fillColor,class:"material-design-icon__svg",width:t.size,height:t.size,viewBox:"0 0 24 24"},[f("path",Wi,[t.title?(u(),d("title",Gi,F(t.title),1)):b("",!0)])],8,qi))],16,Ki)}const na=N(Vi,[["render",Qi]]);I(fa);const Yi={name:"NcInputConfirmCancel",components:{IconArrowRight:na,IconClose:wt,NcButton:it},setup(){return{isLegacy34:oe}},props:{primary:{default:!1,type:Boolean},placeholder:{default:"",type:String},modelValue:{default:"",type:String}},emits:["cancel","confirm","update:modelValue"],data(){return{labelConfirm:$("Confirm changes"),labelCancel:$("Cancel changes")}},computed:{valueModel:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}}},methods:{confirm(){this.$emit("confirm")},cancel(){this.$emit("cancel")},focusInput(){this.$refs.input.focus()}}},Zi=["placeholder"];function Xi(e,a,t,s,n,i){const o=A("IconArrowRight"),l=A("NcButton"),p=A("IconClose");return u(),d("div",{class:T(["app-navigation-input-confirm",{"app-navigation-input-confirm--legacy":s.isLegacy34}])},[f("form",{onSubmit:a[1]||(a[1]=w((...h)=>i.confirm&&i.confirm(...h),["prevent"])),onKeydown:a[2]||(a[2]=P(w((...h)=>i.cancel&&i.cancel(...h),["exact","stop","prevent"]),["esc"])),onClick:a[3]||(a[3]=w(()=>{},["stop","prevent"]))},[J(f("input",{ref:"input","onUpdate:modelValue":a[0]||(a[0]=h=>i.valueModel=h),type:"text",class:"app-navigation-input-confirm__input",placeholder:t.placeholder},null,8,Zi),[[ja,i.valueModel]]),_(l,{"aria-label":n.labelConfirm,type:"submit",variant:"primary",onClick:w(i.confirm,["stop","prevent"])},{icon:B(()=>[_(o,{size:20})]),_:1},8,["aria-label","onClick"]),_(l,{"aria-label":n.labelCancel,type:"reset",variant:t.primary?"primary":"tertiary",onClick:w(i.cancel,["stop","prevent"])},{icon:B(()=>[_(p,{size:20})]),_:1},8,["aria-label","variant","onClick"])],32)],2)}const Ji=N(Yi,[["render",Xi],["__scopeId","data-v-a8724c7f"]]),en={name:"PencilIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},tn=["aria-hidden","aria-label"],an=["fill","width","height"],nn={d:"M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"},sn={key:0};function on(e,a,t,s,n,i){return u(),d("span",U(e.$attrs,{"aria-hidden":t.title?null:"true","aria-label":t.title,class:"material-design-icon pencil-icon",role:"img",onClick:a[0]||(a[0]=o=>e.$emit("click",o))}),[(u(),d("svg",{fill:t.fillColor,class:"material-design-icon__svg",width:t.size,height:t.size,viewBox:"0 0 24 24"},[f("path",nn,[t.title?(u(),d("title",sn,F(t.title),1)):b("",!0)])],8,an))],16,tn)}const rn=N(en,[["render",on]]),ln={name:"UndoIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},un=["aria-hidden","aria-label"],cn=["fill","width","height"],dn={d:"M12.5,8C9.85,8 7.45,9 5.6,10.6L2,7V16H11L7.38,12.38C8.77,11.22 10.54,10.5 12.5,10.5C16.04,10.5 19.05,12.81 20.1,16L22.47,15.22C21.08,11.03 17.15,8 12.5,8Z"},pn={key:0};function hn(e,a,t,s,n,i){return u(),d("span",U(e.$attrs,{"aria-hidden":t.title?null:"true","aria-label":t.title,class:"material-design-icon undo-icon",role:"img",onClick:a[0]||(a[0]=o=>e.$emit("click",o))}),[(u(),d("svg",{fill:t.fillColor,class:"material-design-icon__svg",width:t.size,height:t.size,viewBox:"0 0 24 24"},[f("path",dn,[t.title?(u(),d("title",pn,F(t.title),1)):b("",!0)])],8,cn))],16,un)}const gn=N(ln,[["render",hn]]);I(va);const mn={name:"NcAppNavigationIconCollapsible",components:{NcButton:it,ChevronDown:ci,ChevronUp:ji},setup(){return{isLegacy34:oe}},props:{open:{type:Boolean,required:!0},active:{type:Boolean,required:!0}},emits:["click"],computed:{labelButton(){return this.open?$("Collapse menu"):$("Open menu")}},methods:{onClick(e){this.$emit("click",e)}}};function bn(e,a,t,s,n,i){const o=A("ChevronUp"),l=A("ChevronDown"),p=A("NcButton");return u(),E(p,{class:T(["icon-collapse",{"icon-collapse--active":t.active,"icon-collapse--open":t.open}]),"aria-label":i.labelButton,variant:t.active&&s.isLegacy34?"tertiary-on-primary":"tertiary",onClick:i.onClick},{icon:B(()=>[t.open?(u(),E(o,{key:0,size:20})):(u(),E(l,{key:1,size:20}))]),_:1},8,["class","aria-label","variant","onClick"])}const fn=N(mn,[["render",bn],["__scopeId","data-v-acf5ed2f"]]);I(Ca,ya);const vn={name:"NcAppNavigationItem",components:{NcActions:Lt,NcActionButton:hi,NcAppNavigationIconCollapsible:fn,NcInputConfirmCancel:Ji,NcLoadingIcon:ta,NcVNodes:aa,Pencil:rn,Undo:gn},props:{active:{type:Boolean,default:!1},name:{type:String,required:!0},title:{type:String,default:null},id:{type:String,default:()=>tt(),validator:e=>e.trim()!==""},icon:{type:String,default:""},loading:{type:Boolean,default:!1},to:{type:[String,Object],default:null},href:{type:String,default:null},allowCollapse:{type:Boolean,default:!1},editable:{type:Boolean,default:!1},editLabel:{type:String,default:""},editPlaceholder:{type:String,default:""},pinned:{type:Boolean,default:!1},undo:{type:Boolean,default:!1},open:{type:Boolean,default:!1},menuOpen:{type:Boolean,default:!1},forceMenu:{type:Boolean,default:!1},menuIcon:{type:String,default:void 0},menuPlacement:{type:String,default:"bottom"},ariaDescription:{type:String,default:null},forceDisplayActions:{type:Boolean,default:!1},inlineActions:{type:Number,default:0}},emits:["update:menuOpen","update:open","update:name","click","undo"],setup(){return{isMobile:Zt(),isLegacy34:oe}},data(){return{actionsBoundariesElement:void 0,editingValue:"",opened:this.open,editingActive:!1,menuOpenLocalValue:!1,focused:!1}},computed:{isRouterLink(){return this.to&&!this.href},canHaveChildren(){return this.$parent.$options._componentTag!=="AppNavigationItem"},editButtonAriaLabel(){return this.editLabel?this.editLabel:$("Edit item")},undoButtonAriaLabel(){return $("Undo changes")}},watch:{open(e){this.opened=e}},mounted(){this.actionsBoundariesElement=document.querySelector("#content-vue")||void 0},methods:{onMenuToggle(e){this.$emit("update:menuOpen",e),this.menuOpenLocalValue=e},toggleCollapse(){this.opened=!this.opened,this.$emit("update:open",this.opened)},onClick(e,a,t){this.$emit("click",e),!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&t&&(a?.(e),e.preventDefault())},handleEdit(){this.editingValue=this.name,this.editingActive=!0,this.onMenuToggle(!1),this.$nextTick(()=>{this.$refs.editingInput.focusInput()})},cancelEditing(){this.editingActive=!1},handleEditingDone(){this.$emit("update:name",this.editingValue),this.editingValue="",this.editingActive=!1},handleUndo(){this.$emit("undo")},handleFocus(){this.focused=!0},handleBlur(){this.focused=!1},handleTab(e){this.$refs.actions&&(this.focused?(e.preventDefault(),this.$refs.actions.$refs.triggerButton.$el.focus(),this.focused=!1):this.$refs.actions.$refs.triggerButton.$el.blur())},isExternal(e){return e&&e.match(/[a-z]+:\/\//i)}}},yn=["id"],Cn=["aria-current","aria-description","aria-expanded","href","target","title","onClick"],An={key:0,class:"editingContainer"},kn={key:1,class:"app-navigation-entry__deleted"},_n={class:"app-navigation-entry__deleted-description"},En={key:0,class:"app-navigation-entry__counter-wrapper"},Tn={key:0,class:"app-navigation-entry__children"};function Sn(e,a,t,s,n,i){const o=A("NcLoadingIcon"),l=A("NcInputConfirmCancel"),p=A("Pencil"),h=A("NcActionButton"),g=A("Undo"),c=A("NcActions"),v=A("NcAppNavigationIconCollapsible");return u(),d("li",{id:t.id,class:T([{"app-navigation-entry--opened":n.opened,"app-navigation-entry--pinned":t.pinned,"app-navigation-entry--collapsible":t.allowCollapse&&!!e.$slots.default},"app-navigation-entry-wrapper"])},[(u(),E(qa(i.isRouterLink?"router-link":"NcVNodes"),Va(Ka({...i.isRouterLink&&{custom:!0,to:t.to}})),{default:B(({href:y,navigate:D,isActive:C})=>[f("div",{class:T(["app-navigation-entry",{"app-navigation-entry--editing":n.editingActive,"app-navigation-entry--deleted":t.undo,"app-navigation-entry--legacy":s.isLegacy34,active:t.to&&C||t.active}])},[t.undo?b("",!0):(u(),d("a",{key:0,class:"app-navigation-entry-link","aria-current":t.active||t.to&&C?"page":void 0,"aria-description":t.ariaDescription,"aria-expanded":e.$slots.default?n.opened.toString():void 0,href:t.href||y||"#",target:i.isExternal(t.href)?"_blank":void 0,title:t.title||t.name,onBlur:a[1]||(a[1]=(...k)=>i.handleBlur&&i.handleBlur(...k)),onClick:k=>i.onClick(k,D,y),onFocus:a[2]||(a[2]=(...k)=>i.handleFocus&&i.handleFocus(...k)),onKeydown:a[3]||(a[3]=P(w((...k)=>i.handleTab&&i.handleTab(...k),["exact"]),["tab"]))},[f("div",{class:T(["app-navigation-entry-icon",{[t.icon]:t.icon}])},[t.loading?(u(),E(o,{key:0})):S(e.$slots,"icon",{key:1,active:t.active||t.to&&C},void 0,!0)],2),f("span",{class:T(["app-navigation-entry__name",{"hidden-visually":n.editingActive}])},F(t.name),3),n.editingActive?(u(),d("div",An,[_(l,{ref:"editingInput",modelValue:n.editingValue,"onUpdate:modelValue":a[0]||(a[0]=k=>n.editingValue=k),placeholder:t.editPlaceholder!==""?t.editPlaceholder:t.name,primary:t.to&&C||t.active,onCancel:i.cancelEditing,onConfirm:i.handleEditingDone},null,8,["modelValue","placeholder","primary","onCancel","onConfirm"])])):b("",!0)],40,Cn)),t.undo?(u(),d("div",kn,[f("div",_n,F(t.name),1)])):b("",!0),(e.$slots.actions||e.$slots.counter||t.editable||t.undo)&&!n.editingActive?(u(),d("div",{key:2,class:T(["app-navigation-entry__utils",{"app-navigation-entry__utils--display-actions":t.forceDisplayActions||n.menuOpenLocalValue||t.menuOpen}])},[e.$slots.counter?(u(),d("div",En,[S(e.$slots,"counter",{},void 0,!0)])):b("",!0),e.$slots.actions||t.editable&&!n.editingActive||t.undo?(u(),E(c,{key:1,ref:"actions",class:"app-navigation-entry__actions",container:"#app-navigation-vue",boundariesElement:n.actionsBoundariesElement,inline:t.inlineActions,placement:t.menuPlacement,open:t.menuOpen,forceMenu:t.forceMenu,defaultIcon:t.menuIcon,variant:"tertiary","onUpdate:open":i.onMenuToggle},{icon:B(()=>[S(e.$slots,"menu-icon",{},void 0,!0)]),default:B(()=>[t.editable&&!n.editingActive?(u(),E(h,{key:0,"aria-label":i.editButtonAriaLabel,onClick:i.handleEdit},{icon:B(()=>[_(p,{size:20})]),default:B(()=>[at(" "+F(t.editLabel),1)]),_:1},8,["aria-label","onClick"])):b("",!0),t.undo?(u(),E(h,{key:1,"aria-label":i.undoButtonAriaLabel,onClick:i.handleUndo},{icon:B(()=>[_(g,{size:20})]),_:1},8,["aria-label","onClick"])):b("",!0),S(e.$slots,"actions",{},void 0,!0)]),_:3},8,["boundariesElement","inline","placement","open","forceMenu","defaultIcon","onUpdate:open"])):b("",!0)],2)):b("",!0),t.allowCollapse&&e.$slots.default?(u(),E(v,{key:3,active:t.to&&C||t.active,open:n.opened,onClick:w(i.toggleCollapse,["prevent","stop"])},null,8,["active","open","onClick"])):b("",!0),S(e.$slots,"extra",{},void 0,!0)],2)]),_:3},16)),i.canHaveChildren&&e.$slots.default?(u(),d("ul",Tn,[S(e.$slots,"default",{},void 0,!0)])):b("",!0)],10,yn)}const To=N(vn,[["render",Sn],["__scopeId","data-v-e4d562ae"]]);I(ka,Aa);const Bn=X({__name:"NcAppNavigationSearch",props:fe({label:{type:String,default:$("Search …")},placeholder:{type:String,default:null}},{modelValue:{default:""},modelModifiers:{}}),emits:["update:modelValue"],setup(e){const a=Ce(e,"modelValue"),t=Wa(),s=ee(),{focused:n}=Ra(s),i=Number.parseInt(window.getComputedStyle(window.document.body).getPropertyValue("--animation-quick"))||100,o=Nt("actionsContainer"),l=()=>!!t.actions?.({}),p=ee(!0),h=ee(),g=ee(!1);be(n,()=>{p.value=!n.value,window.clearTimeout(h.value),p.value?g.value=!1:window.setTimeout(()=>{g.value=!p.value},i)});function c(){a.value="",l()&&(p.value=!0,Ga(()=>o.value?.querySelector("button")?.focus()))}return(v,y)=>(u(),d("div",{class:T(["app-navigation-search",{"app-navigation-search--has-actions":l()}])},[_(gi,{ref_key:"inputElement",ref:s,modelValue:a.value,"onUpdate:modelValue":y[0]||(y[0]=D=>a.value=D),"aria-label":e.label,class:"app-navigation-search__input",labelOutside:"",placeholder:e.placeholder??e.label,showTrailingButton:a.value.length>0,trailingButtonLabel:M($)("Clear search"),type:"search",onTrailingButtonClick:c},{"trailing-button-icon":B(()=>[_(wt,{size:20})]),_:1},8,["modelValue","aria-label","placeholder","showTrailingButton","trailingButtonLabel"]),l()?(u(),d("div",{key:0,ref:"actionsContainer",class:T(["app-navigation-search__actions",{"app-navigation-search__actions--hidden":!p.value,"hidden-visually":g.value}])},[S(v.$slots,"actions",{},void 0,!0)],2)):b("",!0)],2))}}),So=N(Bn,[["__scopeId","data-v-191b6717"]]);I(_a),I(Ea),I(Gt);const Ln={mounted(e){e.focus()}},Nn="aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2odyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rck0msd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2oodside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2",wn="ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2",Ct="numeric",At="ascii",kt="alpha",ce="asciinumeric",ue="alphanumeric",_t="domain",sa="emoji",In="scheme",xn="slashscheme",ht="whitespace";function $n(e,a){return e in a||(a[e]=[]),a[e]}function te(e,a,t){a[Ct]&&(a[ce]=!0,a[ue]=!0),a[At]&&(a[ce]=!0,a[kt]=!0),a[ce]&&(a[ue]=!0),a[kt]&&(a[ue]=!0),a[ue]&&(a[_t]=!0),a[sa]&&(a[_t]=!0);for(const s in a){const n=$n(s,t);n.indexOf(e)<0&&n.push(e)}}function Fn(e,a){const t={};for(const s in a)a[s].indexOf(e)>=0&&(t[s]=!0);return t}function H(e=null){this.j={},this.jr=[],this.jd=null,this.t=e}H.groups={},H.prototype={accepts(){return!!this.t},go(e){const a=this,t=a.j[e];if(t)return t;for(let s=0;se.ta(a,t,s,n),L=(e,a,t,s,n)=>e.tr(a,t,s,n),Ht=(e,a,t,s,n)=>e.ts(a,t,s,n),r=(e,a,t,s,n)=>e.tt(a,t,s,n),Q="WORD",Et="UWORD",oa="ASCIINUMERICAL",ra="ALPHANUMERICAL",ve="LOCALHOST",Tt="TLD",St="UTLD",Se="SCHEME",se="SLASH_SCHEME",It="NUM",Bt="WS",xt="NL",de="OPENBRACE",pe="CLOSEBRACE",Le="OPENBRACKET",Ne="CLOSEBRACKET",we="OPENPAREN",Ie="CLOSEPAREN",xe="OPENANGLEBRACKET",$e="CLOSEANGLEBRACKET",Fe="FULLWIDTHLEFTPAREN",De="FULLWIDTHRIGHTPAREN",Re="LEFTCORNERBRACKET",Oe="RIGHTCORNERBRACKET",ze="LEFTWHITECORNERBRACKET",Me="RIGHTWHITECORNERBRACKET",Pe="FULLWIDTHLESSTHAN",He="FULLWIDTHGREATERTHAN",Ue="AMPERSAND",je="APOSTROPHE",Ve="ASTERISK",Z="AT",Ke="BACKSLASH",qe="BACKTICK",We="CARET",ae="COLON",$t="COMMA",Ge="DOLLAR",K="DOT",Qe="EQUALS",Ft="EXCLAMATION",V="HYPHEN",he="PERCENT",Ye="PIPE",Ze="PLUS",Xe="POUND",ge="QUERY",Dt="QUOTE",la="FULLWIDTHMIDDLEDOT",Rt="SEMI",q="SLASH",me="TILDE",Je="UNDERSCORE",ua="EMOJI",et="SYM";var ca=Object.freeze({__proto__:null,ALPHANUMERICAL:ra,AMPERSAND:Ue,APOSTROPHE:je,ASCIINUMERICAL:oa,ASTERISK:Ve,AT:Z,BACKSLASH:Ke,BACKTICK:qe,CARET:We,CLOSEANGLEBRACKET:$e,CLOSEBRACE:pe,CLOSEBRACKET:Ne,CLOSEPAREN:Ie,COLON:ae,COMMA:$t,DOLLAR:Ge,DOT:K,EMOJI:ua,EQUALS:Qe,EXCLAMATION:Ft,FULLWIDTHGREATERTHAN:He,FULLWIDTHLEFTPAREN:Fe,FULLWIDTHLESSTHAN:Pe,FULLWIDTHMIDDLEDOT:la,FULLWIDTHRIGHTPAREN:De,HYPHEN:V,LEFTCORNERBRACKET:Re,LEFTWHITECORNERBRACKET:ze,LOCALHOST:ve,NL:xt,NUM:It,OPENANGLEBRACKET:xe,OPENBRACE:de,OPENBRACKET:Le,OPENPAREN:we,PERCENT:he,PIPE:Ye,PLUS:Ze,POUND:Xe,QUERY:ge,QUOTE:Dt,RIGHTCORNERBRACKET:Oe,RIGHTWHITECORNERBRACKET:Me,SCHEME:Se,SEMI:Rt,SLASH:q,SLASH_SCHEME:se,SYM:et,TILDE:me,TLD:Tt,UNDERSCORE:Je,UTLD:St,UWORD:Et,WORD:Q,WS:Bt});const W=/[a-z]/,le=new RegExp("\\p{L}","u"),gt=new RegExp("\\p{Emoji}","u"),G=/\d/,mt=/\s/,Ut="\r",bt=` `,Dn="️",Rn="‍",ft="";let ke=null,_e=null;function On(e=[]){const a={};H.groups=a;const t=new H;ke==null&&(ke=jt(Nn)),_e==null&&(_e=jt(wn)),r(t,"'",je),r(t,"{",de),r(t,"}",pe),r(t,"[",Le),r(t,"]",Ne),r(t,"(",we),r(t,")",Ie),r(t,"<",xe),r(t,">",$e),r(t,"(",Fe),r(t,")",De),r(t,"「",Re),r(t,"」",Oe),r(t,"『",ze),r(t,"』",Me),r(t,"<",Pe),r(t,">",He),r(t,"&",Ue),r(t,"*",Ve),r(t,"@",Z),r(t,"`",qe),r(t,"^",We),r(t,":",ae),r(t,",",$t),r(t,"$",Ge),r(t,".",K),r(t,"=",Qe),r(t,"!",Ft),r(t,"-",V),r(t,"%",he),r(t,"|",Ye),r(t,"+",Ze),r(t,"#",Xe),r(t,"?",ge),r(t,'"',Dt),r(t,"/",q),r(t,";",Rt),r(t,"~",me),r(t,"_",Je),r(t,"\\",Ke),r(t,"・",la);const s=L(t,G,It,{[Ct]:!0});L(s,G,s);const n=L(s,W,oa,{[ce]:!0}),i=L(s,le,ra,{[ue]:!0}),o=L(t,W,Q,{[At]:!0});L(o,G,n),L(o,W,o),L(n,G,n),L(n,W,n);const l=L(t,le,Et,{[kt]:!0});L(l,W),L(l,G,i),L(l,le,l),L(i,G,i),L(i,W),L(i,le,i);const p=r(t,bt,xt,{[ht]:!0}),h=r(t,Ut,Bt,{[ht]:!0}),g=L(t,mt,Bt,{[ht]:!0});r(t,ft,g),r(h,bt,p),r(h,ft,g),L(h,mt,g),r(g,Ut),r(g,bt),L(g,mt,g),r(g,ft,g);const c=L(t,gt,ua,{[sa]:!0});r(c,"#"),L(c,gt,c),r(c,Dn,c);const v=r(c,Rn);r(v,"#"),L(v,gt,c);const y=[[W,o],[G,n]],D=[[W,null],[le,l],[G,i]];for(let C=0;CC[0]>k[0]?1:-1);for(let C=0;C=0?x[_t]=!0:W.test(k)?G.test(k)?x[ce]=!0:x[At]=!0:x[Ct]=!0,Ht(t,k,k,x)}return Ht(t,"localhost",ve,{ascii:!0}),t.jd=new H(et),{start:t,tokens:Object.assign({groups:a},ca)}}function da(e,a){const t=zn(a.replace(/[A-Z]/g,l=>l.toLowerCase())),s=t.length,n=[];let i=0,o=0;for(;o=0&&(c+=t[o].length,v++),h+=t[o].length,i+=t[o].length,o++;i-=c,o-=v,h-=c,n.push({t:g.t,v:a.slice(i-h,i),s:i-h,e:i})}return n}function zn(e){const a=[],t=e.length;let s=0;for(;s56319||s+1===t||(i=e.charCodeAt(s+1))<56320||i>57343?e[s]:e.slice(s,s+2);a.push(o),s+=o.length}return a}function Y(e,a,t,s,n){let i;const o=a.length;for(let l=0;l=0;)i++;if(i>0){a.push(t.join(""));for(let o=parseInt(e.substring(s,s+i),10);o>0;o--)t.pop();s+=i}else t.push(e[s]),s++}return a}const ye={defaultProtocol:"http",events:null,format:Vt,formatHref:Vt,nl2br:!1,tagName:"a",target:null,rel:null,validate:!0,truncate:1/0,className:null,attributes:null,ignoreTags:[],render:null};function Ot(e,a=null){let t=Object.assign({},ye);e&&(t=Object.assign(t,e instanceof Ot?e.o:e));const s=t.ignoreTags,n=[];for(let i=0;it?s.substring(0,t)+"…":s},toFormattedHref(e){return e.get("formatHref",this.toHref(e.get("defaultProtocol")),this)},startIndex(){return this.tk[0].s},endIndex(){return this.tk[this.tk.length-1].e},toObject(e=ye.defaultProtocol){return{type:this.t,value:this.toString(),isLink:this.isLink,href:this.toHref(e),start:this.startIndex(),end:this.endIndex()}},toFormattedObject(e){return{type:this.t,value:this.toFormattedString(e),isLink:this.isLink,href:this.toFormattedHref(e),start:this.startIndex(),end:this.endIndex()}},validate(e){return e.get("validate",this.toString(),this)},render(e){const a=this,t=this.toHref(e.get("defaultProtocol")),s=e.get("formatHref",t,this),n=e.get("tagName",t,a),i=this.toFormattedString(e),o={},l=e.get("className",t,a),p=e.get("target",t,a),h=e.get("rel",t,a),g=e.getObj("attributes",t,a),c=e.getObj("events",t,a);return o.href=s,l&&(o.class=l),p&&(o.target=p),h&&(o.rel=h),g&&Object.assign(o,g),{tagName:n,attributes:o,content:i,eventListeners:c}}};function nt(e,a){class t extends pa{constructor(n,i){super(n,i),this.t=e}}for(const s in a)t.prototype[s]=a[s];return t.t=e,t}const Mn=nt("email",{isLink:!0,toHref(){return"mailto:"+this.toString()}}),Kt=nt("text"),Pn=nt("nl"),Ee=nt("url",{isLink:!0,toHref(e=ye.defaultProtocol){return this.hasProtocol()?this.v:`${e}://${this.v}`},hasProtocol(){const e=this.tk;return e.length>=2&&e[0].t!==ve&&e[1].t===ae}}),j=e=>new H(e);function Hn({groups:e}){const a=e.domain.concat([Ue,Ve,Z,Ke,qe,We,Ge,Qe,V,It,he,Ye,Ze,Xe,q,et,me,Je]),t=[je,ae,$t,K,Ft,he,ge,Dt,Rt,xe,$e,de,pe,Ne,Le,we,Ie,Fe,De,Re,Oe,ze,Me,Pe,He],s=[Ue,je,Ve,Ke,qe,We,Ge,Qe,V,de,pe,he,Ye,Ze,Xe,ge,q,et,me,Je],n=j(),i=r(n,me);m(i,s,i),m(i,e.domain,i);const o=j(),l=j(),p=j();m(n,e.domain,o),m(n,e.scheme,l),m(n,e.slashscheme,p),m(o,s,i),m(o,e.domain,o);const h=r(o,Z);r(i,Z,h),r(l,Z,h),r(p,Z,h);const g=r(i,K);m(g,s,i),m(g,e.domain,i);const c=j();m(h,e.domain,c),m(c,e.domain,c);const v=r(c,K);m(v,e.domain,c);const y=j(Mn);m(v,e.tld,y),m(v,e.utld,y),r(h,ve,y);const D=r(c,V);r(D,V,D),m(D,e.domain,c),m(y,e.domain,c),r(y,K,v),r(y,V,D);const C=r(o,V),k=r(o,K);r(C,V,C),m(C,e.domain,o),m(k,s,i),m(k,e.domain,o);const x=j(Ee);m(k,e.tld,x),m(k,e.utld,x),m(x,e.domain,o),m(x,s,i),r(x,K,k),r(x,V,C),r(x,Z,h);const st=r(x,ae),z=j(Ee);m(st,e.numeric,z);const R=j(Ee),re=j();m(R,a,R),m(R,t,re),m(re,a,R),m(re,t,re),r(x,q,R),r(z,q,R);const ot=r(l,ae),ga=r(p,ae),ma=r(ga,q),rt=r(ma,q);m(l,e.domain,o),r(l,K,k),r(l,V,C),m(p,e.domain,o),r(p,K,k),r(p,V,C),m(ot,e.domain,R),r(ot,q,R),r(ot,ge,R),m(rt,e.domain,R),m(rt,a,R),r(rt,q,R);const zt=[[de,pe],[Le,Ne],[we,Ie],[xe,$e],[Fe,De],[Re,Oe],[ze,Me],[Pe,He]];for(let lt=0;lt=0&&v++,n++,g++;if(v<0)n-=g,n0&&(i.push(vt(Kt,a,o)),o=[]),n-=v,g-=v;const y=c.t,D=t.slice(n-g,n);i.push(vt(y,a,D))}}return o.length>0&&i.push(vt(Kt,a,o)),i}function vt(e,a,t){const s=t[0].s,n=t[t.length-1].e,i=a.slice(s,n);return new e(i,t)}const O={scanner:null,parser:null,tokenQueue:[],pluginQueue:[],customSchemes:[],initialized:!1};function jn(){O.scanner=On(O.customSchemes);for(let e=0;e `):!n.isLink||!a.check(n)?s.push(ia(n.toString())):s.push(a.render(n));return s.join("")}function Kn(e){return e.replace(/"/g,""")}function qn(e){const a=[];for(const t in e){const s=e[t]+"";a.push(`${t}="${Kn(s)}"`)}return a.join(" ")}function Wn({tagName:e,attributes:a,content:t}){return`<${e} ${qn(a)}>${ia(t)}`}const Gn=function(e,{value:a}){a?.linkify===!0&&(e.innerHTML=Vn(a.text))},Qn=["title"],Yn=X({__name:"NcAppSidebarHeader",props:{name:{},title:{},linkify:{type:Boolean}},setup(e){const a=Xt("NcAppSidebar:header:ref");return(t,s)=>J((u(),d("h2",{ref_key:"headerRef",ref:a,tabindex:"-1",title:e.title},[at(F(e.name),1)],8,Qn)),[[M(Gn),{text:e.name,linkify:e.linkify}]])}}),Zn={name:"DockRightIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},Xn=["aria-hidden","aria-label"],Jn=["fill","width","height"],es={d:"M20 4H4A2 2 0 0 0 2 6V18A2 2 0 0 0 4 20H20A2 2 0 0 0 22 18V6A2 2 0 0 0 20 4M15 18H4V6H15Z"},ts={key:0};function as(e,a,t,s,n,i){return u(),d("span",U(e.$attrs,{"aria-hidden":t.title?null:"true","aria-label":t.title,class:"material-design-icon dock-right-icon",role:"img",onClick:a[0]||(a[0]=o=>e.$emit("click",o))}),[(u(),d("svg",{fill:t.fillColor,class:"material-design-icon__svg",width:t.size,height:t.size,viewBox:"0 0 24 24"},[f("path",es,[t.title?(u(),d("title",ts,F(t.title),1)):b("",!0)])],8,Jn))],16,Xn)}const is=N(Zn,[["render",as]]),ns={name:"StarIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},ss=["aria-hidden","aria-label"],os=["fill","width","height"],rs={d:"M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z"},ls={key:0};function us(e,a,t,s,n,i){return u(),d("span",U(e.$attrs,{"aria-hidden":t.title?null:"true","aria-label":t.title,class:"material-design-icon star-icon",role:"img",onClick:a[0]||(a[0]=o=>e.$emit("click",o))}),[(u(),d("svg",{fill:t.fillColor,class:"material-design-icon__svg",width:t.size,height:t.size,viewBox:"0 0 24 24"},[f("path",rs,[t.title?(u(),d("title",ls,F(t.title),1)):b("",!0)])],8,os))],16,ss)}const cs=N(ns,[["render",us]]),ds={name:"StarOutlineIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},ps=["aria-hidden","aria-label"],hs=["fill","width","height"],gs={d:"M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z"},ms={key:0};function bs(e,a,t,s,n,i){return u(),d("span",U(e.$attrs,{"aria-hidden":t.title?null:"true","aria-label":t.title,class:"material-design-icon star-outline-icon",role:"img",onClick:a[0]||(a[0]=o=>e.$emit("click",o))}),[(u(),d("svg",{fill:t.fillColor,class:"material-design-icon__svg",width:t.size,height:t.size,viewBox:"0 0 24 24"},[f("path",gs,[t.title?(u(),d("title",ms,F(t.title),1)):b("",!0)])],8,hs))],16,ps)}const fs=N(ds,[["render",bs]]),vs=["aria-selected","tabindex"],ys=X({__name:"NcAppSidebarTabsButton",props:fe({tab:{}},{selected:{type:Boolean,required:!0},selectedModifiers:{}}),emits:["update:selected"],setup(e){const a=Ce(e,"selected");return(t,s)=>(u(),d("button",{class:T(["button-vue",[t.$style.sidebarTabsButton,{[t.$style.sidebarTabsButton_selected]:a.value,[t.$style.sidebarTabsButton_legacy]:M(oe)}]]),role:"tab","aria-selected":a.value,tabindex:a.value?0:-1,onClick:s[0]||(s[0]=n=>a.value=!0)},[f("span",{class:T(t.$style.sidebarTabsButton__icon)},[_(aa,{vnodes:e.tab.renderIcon()},{default:B(()=>[f("span",{class:T([t.$style.sidebarTabsButton__legacyIcon,e.tab.icon])},null,2)]),_:1},8,["vnodes"])],2),f("span",{class:T(t.$style.sidebarTabsButton__name)},F(e.tab.name),3)],10,vs))}}),Cs="_sidebarTabsButton_6hxfz",As="_sidebarTabsButton_legacy_Qp20k",ks="_sidebarTabsButton_selected_eBHM-",_s="_sidebarTabsButton__name_YlW5S",Es="_sidebarTabsButton__icon_MPS-D",Ts="_sidebarTabsButton__legacyIcon_rzPOu",Ss={"material-design-icon":"_material-design-icon_m4vbX",sidebarTabsButton:Cs,sidebarTabsButton_legacy:As,sidebarTabsButton_selected:ks,sidebarTabsButton__name:_s,sidebarTabsButton__icon:Es,sidebarTabsButton__legacyIcon:Ts},Bs={$style:Ss},Ls=N(ys,[["__cssModules",Bs]]),Ns={name:"NcAppSidebarTabs",components:{NcAppSidebarTabsButton:Ls},provide(){return{registerTab:this.registerTab,unregisterTab:this.unregisterTab,getActiveTab:()=>this.activeTab,isTablistShown:()=>this.hasMultipleTabs}},props:{active:{type:String,default:""},forceTabs:{type:Boolean,default:!1}},emits:["update:active"],data(e){return{tabs:[],activeTab:e.active,isLegacy34:oe}},computed:{hasMultipleTabs(){return this.tabs.length>1},showForSingleTab(){return this.forceTabs&&this.tabs.length===1},currentTabIndex(){return this.tabs.findIndex(e=>e.id===this.activeTab)}},watch:{tabs(){this.active&&this.updateActive()},active(e){e!==this.activeTab&&this.updateActive()}},methods:{setActive(e){this.activeTab=e,this.$emit("update:active",this.activeTab)},focusPreviousTab(){this.currentTabIndex>0&&this.setActive(this.tabs[this.currentTabIndex-1].id),this.focusActiveTab()},focusNextTab(){this.currentTabIndexe===this.active)?this.active:this.tabs[0]?.id??""},registerTab(e){this.tabs.push(e),this.tabs.sort((a,t)=>a.order===t.order?a.name.localeCompare(t.name,[mi()]):a.order-t.order),this.updateActive()},unregisterTab(e){const a=this.tabs.findIndex(t=>t.id===e);a!==-1&&this.tabs.splice(a,1),this.activeTab===e&&this.updateActive()}}},ws={class:"app-sidebar-tabs"};function Is(e,a,t,s,n,i){const o=A("NcAppSidebarTabsButton");return u(),d("div",ws,[i.hasMultipleTabs||i.showForSingleTab?(u(),d("div",{key:0,role:"tablist",class:T(["app-sidebar-tabs__nav",{"app-sidebar-tabs__nav--legacy":n.isLegacy34}]),onKeydown:[a[0]||(a[0]=P(w((...l)=>i.focusPreviousTab&&i.focusPreviousTab(...l),["exact","prevent","stop"]),["left"])),a[1]||(a[1]=P(w((...l)=>i.focusNextTab&&i.focusNextTab(...l),["exact","prevent","stop"]),["right"])),a[2]||(a[2]=P(w((...l)=>i.focusActiveTabContent&&i.focusActiveTabContent(...l),["exact","prevent","stop"]),["tab"])),a[3]||(a[3]=P(w((...l)=>i.focusFirstTab&&i.focusFirstTab(...l),["exact","prevent","stop"]),["home"])),a[4]||(a[4]=P(w((...l)=>i.focusLastTab&&i.focusLastTab(...l),["exact","prevent","stop"]),["end"])),a[5]||(a[5]=P(w((...l)=>i.focusFirstTab&&i.focusFirstTab(...l),["exact","prevent","stop"]),["page-up"])),a[6]||(a[6]=P(w((...l)=>i.focusLastTab&&i.focusLastTab(...l),["exact","prevent","stop"]),["page-down"]))]},[(u(!0),d(Za,null,Xa(n.tabs,l=>(u(),E(o,{id:`tab-button-${l.id}`,key:l.id,class:"app-sidebar-tabs__tab","aria-controls":`tab-${l.id}`,selected:n.activeTab===l.id,tab:l,"onUpdate:selected":p=>i.setActive(l.id)},null,8,["id","aria-controls","selected","tab","onUpdate:selected"]))),128))],34)):b("",!0),f("div",{class:T(["app-sidebar-tabs__content",{"app-sidebar-tabs__content--multiple":i.hasMultipleTabs}])},[S(e.$slots,"default",{},void 0,!0)],2)])}const xs=N(Ns,[["render",Is],["__scopeId","data-v-e74d1502"]]);I(Ta);const $s={name:"NcAppSidebar",components:{NcActions:Lt,NcAppSidebarHeader:Yn,NcAppSidebarTabs:xs,NcButton:it,NcLoadingIcon:ta,NcEmptyContent:yi,IconArrowRight:na,IconClose:wt,IconDockRight:is,IconStar:cs,IconStarOutline:fs},directives:{Focus:Ln,ClickOutside:bi},inject:{ncContentSelector:{from:ui,default:void 0}},props:{active:{type:String,default:""},name:{type:String,required:!0},nameEditable:{type:Boolean,default:!1},namePlaceholder:{type:String,default:""},subname:{type:String,default:""},subtitle:{type:String,default:""},background:{type:String,default:""},starred:{type:Boolean,default:null},starLoading:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},compact:{type:Boolean,default:!1},empty:{type:Boolean,default:!1},forceMenu:{type:Boolean,default:!1},forceTabs:{type:Boolean,default:!1},linkifyName:{type:Boolean,default:!1},title:{type:String,default:""},open:{type:Boolean,default:!0},toggleClasses:{type:[String,Array,Object],default:""},toggleAttrs:{type:Object,default:void 0},noToggle:{type:Boolean,default:!1}},emits:["close","closed","opened","update:active","update:name","update:nameEditable","update:open","update:starred","submitName","dismissEditing"],setup(){const e=ee(null);return Ja("NcAppSidebar:header:ref",e),{uid:tt(),isMobile:za(),headerRef:e}},data(){return{changeNameTranslated:$("Change name"),closeTranslated:$("Close sidebar"),favoriteTranslated:$("Favorite"),isStarred:this.starred,focusTrap:null,elementToReturnFocus:null}},computed:{canStar(){return this.isStarred!==null},hasFigureClickListener(){return!!this.$attrs.onFigureClick}},watch:{starred(){this.isStarred=this.starred},isMobile(){this.toggleFocusTrap()},open(){this.checkToggleButtonContainerAvailability()}},created(){this.preserveElementToReturnFocus(),this.checkToggleButtonContainerAvailability()},beforeUnmount(){this.$emit("closed"),this.focusTrap?.deactivate()},methods:{isSlotPopulated:Oa,t:$,preserveElementToReturnFocus(){if(document.activeElement&&document.activeElement!==document.body&&(this.elementToReturnFocus=document.activeElement,this.elementToReturnFocus.getAttribute("role")==="menuitem")){const e=this.elementToReturnFocus.closest('[role="menu"]');if(e){const a=document.querySelector(`[aria-controls="${e.id}"]`);this.elementToReturnFocus=a}}},initFocusTrap(){this.focusTrap||(this.focusTrap=Qt([this.$refs.sidebar,document.querySelector("#header")],{allowOutsideClick:!0,fallbackFocus:this.$refs.closeButton.$el,trapStack:Yt(),escapeDeactivates:!1}))},toggleFocusTrap(){this.open&&this.isMobile?(this.initFocusTrap(),this.focusTrap.activate()):this.focusTrap?.deactivate()},onKeydownEsc(e){this.isMobile&&(e.stopPropagation(),this.closeSidebar())},onAfterEnter(e){this.elementToReturnFocus&&this.focus(),this.toggleFocusTrap(),this.$emit("opened",e)},onAfterLeave(e){this.$emit("closed",e),this.toggleFocusTrap(),this.elementToReturnFocus?.focus({focusVisible:!0}),this.elementToReturnFocus=null},closeSidebar(e){this.$emit("close",e),this.$emit("update:open",!1)},onFigureClick(e){this.$emit("figureClick",e)},toggleStarred(){this.isStarred=!this.isStarred,this.$emit("update:starred",this.isStarred)},async editName(){this.$emit("update:nameEditable",!0),this.nameEditable&&(await this.$nextTick(),this.$refs.nameInput.focus())},focus(){if(!this.open&&!this.noToggle){this.$refs.toggle.$el.focus();return}try{this.headerRef.focus()}catch{}},focusActiveTabContent(){this.preserveElementToReturnFocus(),this.$refs.tabs.focusActiveTabContent()},checkToggleButtonContainerAvailability(){this.open===!1&&!this.noToggle&&!this.ncContentSelector&&ea.warn("[NcAppSidebar] It looks like you want to use NcAppSidebar with the built-in toggle button. This feature is only available when NcAppSidebar is used in NcContent.")},onNameInput(e){this.$emit("update:name",e.target.value)},onSubmitName(e){this.$emit("update:nameEditable",!1),this.$emit("submitName",e)},onDismissEditing(){this.$emit("update:nameEditable",!1),this.$emit("dismissEditing")},onUpdateActive(e){this.$emit("update:active",e)}}},Fs=["aria-labelledby"],Ds={class:"app-sidebar-header__info"},Rs={key:0,class:"app-sidebar-header__tertiary-actions"},Os={class:"app-sidebar-header__name-container"},zs={class:"app-sidebar-header__mainname-container"},Ms=["placeholder","value"],Ps=["title"],Hs={key:2,class:"app-sidebar-header__description"};function Us(e,a,t,s,n,i){const o=A("IconDockRight"),l=A("NcButton"),p=A("NcLoadingIcon"),h=A("IconStar"),g=A("IconStarOutline"),c=A("NcAppSidebarHeader"),v=A("IconArrowRight"),y=A("NcActions"),D=A("IconClose"),C=A("NcAppSidebarTabs"),k=A("NcEmptyContent"),x=Pt("focus"),st=Pt("click-outside");return u(),E(Ya,{appear:"",name:"slide-right",onAfterEnter:i.onAfterEnter,onAfterLeave:i.onAfterLeave},{default:B(()=>[J(f("aside",{id:"app-sidebar-vue",ref:"sidebar",class:"app-sidebar","aria-labelledby":`app-sidebar-vue-${s.uid}__header`,onKeydown:a[6]||(a[6]=P((...z)=>i.onKeydownEsc&&i.onKeydownEsc(...z),["esc"]))},[i.ncContentSelector&&!t.open&&!t.noToggle?(u(),E(Qa,{key:0,to:i.ncContentSelector},[_(l,U({ref:"toggle","aria-label":i.t("Open sidebar"),class:["app-sidebar__toggle",t.toggleClasses],variant:"tertiary"},t.toggleAttrs,{onClick:a[0]||(a[0]=z=>e.$emit("update:open",!0))}),{icon:B(()=>[S(e.$slots,"toggle-icon",{},()=>[_(o,{size:20})],!0)]),_:3},16,["aria-label","class"])],8,["to"])):b("",!0),f("header",{class:T(["app-sidebar-header",{"app-sidebar-header--with-figure":i.isSlotPopulated(e.$slots.header?.())||t.background,"app-sidebar-header--compact":t.compact}])},[t.empty?(u(),E(c,{key:1,class:"app-sidebar-header__mainname--hidden",name:t.name,tabindex:"-1"},null,8,["name"])):S(e.$slots,"info",{key:0},()=>[f("div",Ds,[i.isSlotPopulated(e.$slots.header?.())||t.background?(u(),d("div",{key:0,class:T(["app-sidebar-header__figure",{"app-sidebar-header__figure--with-action":i.hasFigureClickListener}]),style:Jt({backgroundImage:`url(${t.background})`}),tabindex:"0",onClick:a[1]||(a[1]=(...z)=>i.onFigureClick&&i.onFigureClick(...z)),onKeydown:a[2]||(a[2]=P((...z)=>i.onFigureClick&&i.onFigureClick(...z),["enter"]))},[S(e.$slots,"header",{class:"app-sidebar-header__background"},void 0,!0)],38)):b("",!0),f("div",{class:T(["app-sidebar-header__desc",{"app-sidebar-header__desc--with-tertiary-action":i.canStar||i.isSlotPopulated(e.$slots["tertiary-actions"]?.()),"app-sidebar-header__desc--editable":t.nameEditable&&!t.subname,"app-sidebar-header__desc--with-subname--editable":t.nameEditable&&t.subname,"app-sidebar-header__desc--without-actions":!i.isSlotPopulated(e.$slots["secondary-actions"]?.())}])},[i.canStar||i.isSlotPopulated(e.$slots["tertiary-actions"]?.())?(u(),d("div",Rs,[S(e.$slots,"tertiary-actions",{},()=>[i.canStar?(u(),E(l,{key:0,"aria-label":n.favoriteTranslated,pressed:n.isStarred,class:"app-sidebar-header__star",variant:"secondary",onClick:w(i.toggleStarred,["prevent"])},{icon:B(()=>[t.starLoading?(u(),E(p,{key:0})):n.isStarred?(u(),E(h,{key:1,size:20})):(u(),E(g,{key:2,size:20}))]),_:1},8,["aria-label","pressed","onClick"])):b("",!0)],!0)])):b("",!0),f("div",Os,[f("div",zs,[J(_(c,{class:"app-sidebar-header__mainname",name:t.name,linkify:t.linkifyName,title:t.title,tabindex:t.nameEditable?0:-1,onClick:w(i.editName,["self"])},null,8,["name","linkify","title","tabindex","onClick"]),[[ct,!t.nameEditable]]),t.nameEditable?J((u(),d("form",{key:0,class:"app-sidebar-header__mainname-form",onSubmit:a[5]||(a[5]=w((...z)=>i.onSubmitName&&i.onSubmitName(...z),["prevent"]))},[J(f("input",{ref:"nameInput",class:"app-sidebar-header__mainname-input",type:"text",placeholder:t.namePlaceholder,value:t.name,onKeydown:a[3]||(a[3]=P(w((...z)=>i.onDismissEditing&&i.onDismissEditing(...z),["stop"]),["esc"])),onInput:a[4]||(a[4]=(...z)=>i.onNameInput&&i.onNameInput(...z))},null,40,Ms),[[x]]),_(l,{"aria-label":n.changeNameTranslated,type:"submit",variant:"tertiary-no-background"},{icon:B(()=>[_(v,{size:20})]),_:1},8,["aria-label"])],32)),[[st,()=>i.onSubmitName()]]):b("",!0),i.isSlotPopulated(e.$slots["secondary-actions"]?.())?(u(),E(y,{key:1,class:"app-sidebar-header__menu",forceMenu:t.forceMenu},{default:B(()=>[S(e.$slots,"secondary-actions",{},void 0,!0)]),_:3},8,["forceMenu"])):b("",!0)]),t.subname.trim()!==""||e.$slots.subname?(u(),d("p",{key:0,title:t.subtitle||void 0,class:"app-sidebar-header__subname"},[S(e.$slots,"subname",{},()=>[at(F(t.subname),1)],!0)],8,Ps)):b("",!0)])],2)])],!0),_(l,{ref:"closeButton","aria-label":n.closeTranslated,title:n.closeTranslated,class:"app-sidebar__close",variant:"tertiary",onClick:w(i.closeSidebar,["prevent"])},{icon:B(()=>[_(D,{size:20})]),_:1},8,["aria-label","title","onClick"]),i.isSlotPopulated(e.$slots.description?.())&&!t.empty?(u(),d("div",Hs,[S(e.$slots,"description",{},void 0,!0)])):b("",!0)],2),J(_(C,{ref:"tabs",active:t.active,forceTabs:t.forceTabs,"onUpdate:active":i.onUpdateActive},{default:B(()=>[S(e.$slots,"default",{},void 0,!0)]),_:3},8,["active","forceTabs","onUpdate:active"]),[[ct,!t.loading]]),t.loading?(u(),E(k,{key:1},{icon:B(()=>[_(p,{size:64})]),_:1})):b("",!0)],40,Fs),[[ct,t.open]])]),_:3},8,["onAfterEnter","onAfterLeave"])}const Bo=N($s,[["render",Us],["__scopeId","data-v-e8979b7f"]]);new Ci({concurrency:5}),I(Sa),I(Ba),I(La),$("More items …");const js=Na().detectLanguage(),Te=js.build();Te.ngettext.bind(Te),Te.gettext.bind(Te),I(wa),I(Gt);const Vs=8,qt=32,Ks={name:"NcListItemIcon",components:{NcAvatar:vi,NcHighlight:di,NcIconSvgWrapper:Be},mixins:[fi],props:{name:{type:String,required:!0},subname:{type:String,default:""},icon:{type:String,default:""},iconSvg:{type:String,default:""},iconName:{type:String,default:""},search:{type:String,default:""},avatarSize:{type:Number,default:qt},noMargin:{type:Boolean,default:!1},displayName:{type:String,default:null},isNoUser:{type:Boolean,default:!1},id:{type:String,default:null}},setup(){return{margin:Vs,defaultSize:qt}},computed:{hasIcon(){return this.icon!==""},hasIconSvg(){return this.iconSvg!==""},isValidSubname(){return this.subname?.trim?.()!==""},isSizeBigEnough(){return this.avatarSize>=26},cssVars(){const e=this.noMargin?0:this.margin;return{"--height":this.avatarSize+2*e+"px","--margin":this.margin+"px"}},searchParts(){const e=/^([^<]*)<([^>]+)>?$/,a=this.search.match(e);return this.isNoUser||!a?[this.search,this.search]:[a[1].trim(),a[2]]}},beforeMount(){!this.isNoUser&&!this.subname&&this.fetchUserStatus(this.user)}},qs=["id"],Ws={class:"option__details"},Gs={key:1},Qs=["aria-label"];function Ys(e,a,t,s,n,i){const o=A("NcAvatar"),l=A("NcHighlight"),p=A("NcIconSvgWrapper");return u(),d("span",{id:t.id,class:T(["option",{"option--compact":t.avatarSize[i.hasIconSvg?(u(),E(p,{key:0,class:"option__icon",svg:t.iconSvg,name:t.iconName},null,8,["svg","name"])):i.hasIcon?(u(),d("span",{key:1,class:T(["icon option__icon",t.icon]),"aria-label":t.iconName},null,10,Qs)):b("",!0)],!0)],14,qs)}const Wt=N(Ks,[["render",Ys],["__scopeId","data-v-0ee94269"]]);Number.parseInt(window.getComputedStyle(document.body).getPropertyValue("--default-grid-baseline")),Number.parseInt(window.getComputedStyle(document.body).getPropertyValue("--default-clickable-area")),Number.parseInt(window.getComputedStyle(document.body).getPropertyValue("--clickable-area-small")),I(Ia),I(xa),Ai()?.circles?.teamResourceProviders,I($a),$("Related resources"),$("Anything shared with the same group of people will show up here");const Zs=X({__name:"NcSelectUsers",props:fe({ariaLabelClearSelected:{},ariaLabelListbox:{},ariaLabelDeselectOption:{type:Function},disabled:{type:Boolean},inputId:{},inputLabel:{},labelOutside:{type:Boolean},keepOpen:{type:Boolean},loading:{type:Boolean},multiple:{type:Boolean},noWrap:{type:Boolean},options:{},placeholder:{},required:{type:Boolean}},{modelValue:{},modelModifiers:{}}),emits:fe(["search"],["update:modelValue"]),setup(e,{emit:a}){const t=Ce(e,"modelValue"),s=a,n=ee("");be(n,()=>s("search",n.value));const i=Number.parseInt(window.getComputedStyle(document.body).getPropertyValue("--default-clickable-area")),o=Number.parseInt(window.getComputedStyle(document.body).getPropertyValue("--default-grid-baseline")),l=i-2*o;function p(h,g,c){const v=/[^<]*<([^>]+)/,y=c.match(v),D=h.subname?.toLocaleLowerCase()??"";return y&&D.indexOf(y[1].toLocaleLowerCase())>-1||`${g} ${h.subname}`.toLocaleLowerCase().indexOf(c.toLocaleLowerCase())>-1}return(h,g)=>(u(),E(M(pi),U({modelValue:t.value,"onUpdate:modelValue":g[0]||(g[0]=c=>t.value=c),class:"nc-select-users"},h.$props,{filterBy:p,label:"displayName",onSearch:g[1]||(g[1]=c=>n.value=c)}),{option:B(c=>[_(M(Wt),U(c,{avatarSize:32,name:c.displayName,search:n.value}),null,16,["name","search"])]),"selected-option":B(c=>[_(M(Wt),U(c,{avatarSize:l,name:c.displayName,noMargin:"",search:n.value}),null,16,["name","search"])]),_:1},16,["modelValue"]))}}),Lo=N(Zs,[["__scopeId","data-v-e8e18fd3"]]);I(Fa),ii(function(e){this.loadGroup(e)},200);const Xs={class:"textarea__main-wrapper"},Js=["id","aria-describedby","disabled","placeholder","value"],eo=["for"],to=["id"],ao=X({inheritAttrs:!1,__name:"NcTextArea",props:fe({disabled:{type:Boolean},error:{type:Boolean},helperText:{default:void 0},id:{default:()=>tt()},inputClass:{default:""},label:{default:void 0},labelOutside:{type:Boolean},placeholder:{default:void 0},resize:{default:"both"},success:{type:Boolean}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(e,{expose:a}){const t=Ce(e,"modelValue"),s=e;a({focus:h,select:g});const n=ei(),i=Nt("input"),o=yt(()=>s.placeholder||(pt?s.label:void 0));be(()=>s.labelOutside,()=>{!s.labelOutside&&!s.label&&ea.warn("[NcTextArea] You need to add a label to the NcInputField component. Either use the prop label or use an external one, as per the example in the documentation.")});const l=yt(()=>{const c=[];return s.helperText&&c.push(`${s.id}-helper-text`),typeof n["aria-describedby"]=="string"&&c.push(n["aria-describedby"]),c.join(" ")||void 0});function p(c){const{value:v}=c.target;t.value=v}function h(c){i.value.focus(c)}function g(){i.value.select()}return(c,v)=>(u(),d("div",{class:T(["textarea",[c.$attrs.class,{"textarea--disabled":e.disabled,"textarea--legacy":M(pt)}]])},[f("div",Xs,[f("textarea",U({...c.$attrs,class:void 0},{id:e.id,ref:"input","aria-describedby":l.value,"aria-live":"polite",class:["textarea__input",[e.inputClass,{"textarea__input--label-outside":e.labelOutside,"textarea__input--legacy":M(pt),"textarea__input--success":e.success,"textarea__input--error":e.error}]],disabled:e.disabled,placeholder:o.value,style:{resize:e.resize},value:t.value,onInput:p}),null,16,Js),e.labelOutside?b("",!0):(u(),d("label",{key:0,class:"textarea__label",for:e.id},F(e.label),9,eo))]),e.helperText?(u(),d("p",{key:0,id:`${e.id}-helper-text`,class:T(["textarea__helper-text-message",{"textarea__helper-text-message--error":e.error,"textarea__helper-text-message--success":e.success}])},[e.success?(u(),E(Be,{key:0,class:"textarea__helper-text-message__icon",path:M(oi),inline:""},null,8,["path"])):e.error?(u(),E(Be,{key:1,class:"textarea__helper-text-message__icon",path:M(ri),inline:""},null,8,["path"])):b("",!0),at(" "+F(e.helperText),1)],10,to)):b("",!0)],2))}}),No=N(ao,[["__scopeId","data-v-d327fb49"]]);export{Lo as N,No as a,_o as b,Eo as c,To as d,So as e,Bo as f}; -//# sourceMappingURL=NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs.map +//# sourceMappingURL=NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs.map diff --git a/dist/NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs.license b/dist/NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs.license similarity index 100% rename from dist/NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs.license rename to dist/NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs.license diff --git a/dist/NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs.map b/dist/NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs.map similarity index 99% rename from dist/NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs.map rename to dist/NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs.map index 7789ccdbba81f..9501187c8de41 100644 --- a/dist/NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs.map +++ b/dist/NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs.map @@ -1 +1 @@ -{"version":3,"file":"NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs","sources":["../node_modules/@nextcloud/vue/dist/chunks/NcActionButtonGroup-B9LfyE-G.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigationList-CGSWabRB.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigation-Bb9-C2eO.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigationCaption-E9iJtiQt.mjs","../node_modules/@nextcloud/vue/dist/chunks/ChevronUp-ChH8oB7p.mjs","../node_modules/@nextcloud/vue/dist/chunks/ArrowRight-B1ncAhus.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcInputConfirmCancel-B6qC3s63.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigationItem-BFAIHyTL.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigationSearch-CiOKjV3M.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigationSettings-fbuQmy-q.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppSettingsDialog-DByPnndK.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppSettingsShortcutsSection-DgqVuZGx.mjs","../node_modules/@nextcloud/vue/dist/directives/Focus/index.mjs","../node_modules/linkifyjs/dist/linkify.mjs","../node_modules/@nextcloud/vue/dist/directives/Linkify/index.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppSidebarHeader.vue_vue_type_script_setup_true_lang-C-QhdyiN.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppSidebar-Ch7Vp7q5.mjs","../node_modules/@nextcloud/vue/dist/functions/preloadImage/index.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcCollectionList-CO-iHqi6.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcDashboardWidget-ftOfMTzx.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcFilePicker-nPCwHMqj.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcKbd-Iyp0KDp4.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcHotkeyList-CmMgGhMr.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcListItemIcon-D_f5AGrh.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcProgressBar-C-ane-Ni.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcRelatedResourcesPanel-C0j0Fs4r.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcSelectUsers-CI8twLn9.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcSettingsSelectGroup-TN64yH4k.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcTextArea-Dxzj4zdb.mjs"],"sourcesContent":["import '../assets/NcActionButtonGroup-Bt8kRk79.css';\nimport { defineComponent, openBlock, createElementBlock, toDisplayString, createCommentVNode, createElementVNode, renderSlot } from \"vue\";\nimport { r as register, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { a as NC_ACTIONS_IS_SEMANTIC_MENU } from \"./useNcActions-BzPO2c4h.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister();\nconst _sfc_main = defineComponent({\n name: \"NcActionButtonGroup\",\n inject: {\n isInSemanticMenu: {\n from: NC_ACTIONS_IS_SEMANTIC_MENU,\n default: false\n }\n },\n props: {\n /**\n * Optional text shown below the button group\n */\n name: {\n required: false,\n default: void 0,\n type: String\n }\n },\n setup() {\n return {\n labelId: createElementId()\n };\n },\n methods: {\n t\n }\n});\nconst _hoisted_1 = [\"role\"];\nconst _hoisted_2 = [\"id\"];\nconst _hoisted_3 = [\"aria-labelledby\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"li\", {\n class: \"nc-button-group-base\",\n role: _ctx.isInSemanticMenu && \"presentation\"\n }, [\n _ctx.name ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n id: _ctx.labelId\n }, toDisplayString(_ctx.name), 9, _hoisted_2)) : createCommentVNode(\"\", true),\n createElementVNode(\"ul\", {\n class: \"nc-button-group-content\",\n role: \"group\",\n \"aria-labelledby\": _ctx.name ? _ctx.labelId : void 0\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 8, _hoisted_3)\n ], 8, _hoisted_1);\n}\nconst NcActionButtonGroup = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-6a2b8de0\"]]);\nexport {\n NcActionButtonGroup as N\n};\n//# sourceMappingURL=NcActionButtonGroup-B9LfyE-G.mjs.map\n","import '../assets/NcAppNavigationList--36j6Acm.css';\nimport { openBlock, createElementBlock, renderSlot } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n name: \"NcAppNavigationList\"\n};\nconst _hoisted_1 = { class: \"app-navigation-list\" };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"ul\", _hoisted_1, [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true)\n ]);\n}\nconst NcAppNavigationList = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-d72957ed\"]]);\nexport {\n NcAppNavigationList as N\n};\n//# sourceMappingURL=NcAppNavigationList-CGSWabRB.mjs.map\n","import '../assets/NcAppNavigation-2b1jxOXM.css';\nimport { defineComponent, useModel, computed, openBlock, createElementBlock, createVNode, unref, withCtx, inject, warn, useTemplateRef, ref, watchEffect, watch, onMounted, onUnmounted, normalizeClass, createElementVNode, withKeys, renderSlot, createBlock, createCommentVNode } from \"vue\";\nimport { subscribe, emit, unsubscribe } from \"@nextcloud/event-bus\";\nimport { createFocusTrap } from \"focus-trap\";\nimport { N as NcAppNavigationList } from \"./NcAppNavigationList-CGSWabRB.mjs\";\nimport { G as mdiMenuOpen, H as mdiMenu } from \"./mdi-CpchYUUV.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { r as register, P as t20, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { useIsMobile } from \"../composables/useIsMobile/index.mjs\";\nimport { g as getTrapStack } from \"./focusTrap-HJQ4pqHV.mjs\";\nimport { i as isLegacy34 } from \"./legacy-BoqDmOCa.mjs\";\nimport { H as HAS_APP_NAVIGATION_KEY } from \"./constants-Ciwvl5xb.mjs\";\nregister(t20);\nconst _hoisted_1$1 = { class: \"app-navigation-toggle-wrapper\" };\nconst _sfc_main$1 = /* @__PURE__ */ defineComponent({\n __name: \"NcAppNavigationToggle\",\n props: {\n \"open\": { type: Boolean, ...{ required: true } },\n \"openModifiers\": {}\n },\n emits: [\"update:open\"],\n setup(__props) {\n const open = useModel(__props, \"open\");\n const title = computed(() => open.value ? t(\"Close navigation\") : t(\"Open navigation\"));\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", _hoisted_1$1, [\n createVNode(unref(NcButton), {\n class: \"app-navigation-toggle\",\n \"aria-controls\": \"app-navigation-vue\",\n \"aria-expanded\": open.value ? \"true\" : \"false\",\n \"aria-label\": title.value,\n title: title.value,\n variant: \"tertiary\",\n onClick: _cache[0] || (_cache[0] = ($event) => open.value = !open.value)\n }, {\n icon: withCtx(() => [\n createVNode(NcIconSvgWrapper, {\n path: open.value ? unref(mdiMenuOpen) : unref(mdiMenu)\n }, null, 8, [\"path\"])\n ]),\n _: 1\n }, 8, [\"aria-expanded\", \"aria-label\", \"title\"])\n ]);\n };\n }\n});\nconst NcAppNavigationToggle = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"__scopeId\", \"data-v-5a15295d\"]]);\nconst _hoisted_1 = [\"aria-hidden\", \"aria-label\", \"aria-labelledby\", \"inert\"];\nconst _hoisted_2 = { class: \"app-navigation__search\" };\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppNavigation\",\n props: {\n ariaLabel: {},\n ariaLabelledby: {}\n },\n setup(__props) {\n const props = __props;\n let focusTrap;\n const setHasAppNavigation = inject(\n HAS_APP_NAVIGATION_KEY,\n () => warn(\"NcAppNavigation is not mounted inside NcContent, this is probably an error.\"),\n false\n );\n const appNavigationContainerElement = useTemplateRef(\"appNavigationContainer\");\n const isMobile = useIsMobile();\n const open = ref(!isMobile.value);\n watchEffect(() => {\n if (!props.ariaLabel && !props.ariaLabelledby) {\n warn(\"NcAppNavigation requires either `ariaLabel` or `ariaLabelledby` to be set for accessibility.\");\n }\n });\n watch(isMobile, () => {\n open.value = !isMobile.value;\n });\n watch(open, () => {\n toggleFocusTrap();\n });\n onMounted(() => {\n setHasAppNavigation(true);\n subscribe(\"toggle-navigation\", toggleNavigationByEventBus);\n emit(\"navigation-toggled\", {\n open: open.value\n });\n focusTrap = createFocusTrap(appNavigationContainerElement.value, {\n allowOutsideClick: true,\n clickOutsideDeactivates: () => {\n if (isMobile.value) {\n focusTrap.deactivate({ returnFocus: false });\n toggleNavigation(false);\n }\n return false;\n },\n fallbackFocus: appNavigationContainerElement.value,\n trapStack: getTrapStack(),\n escapeDeactivates: false\n });\n toggleFocusTrap();\n });\n onUnmounted(() => {\n setHasAppNavigation(false);\n unsubscribe(\"toggle-navigation\", toggleNavigationByEventBus);\n focusTrap.deactivate();\n });\n function toggleNavigation(state) {\n if (open.value === state) {\n emit(\"navigation-toggled\", {\n open: open.value\n });\n return;\n }\n open.value = state === void 0 ? !open.value : state;\n const bodyStyles = getComputedStyle(document.body);\n const animationLength = parseInt(bodyStyles.getPropertyValue(\"--animation-quick\")) || 100;\n setTimeout(() => {\n emit(\"navigation-toggled\", {\n open: open.value\n });\n }, 1.5 * animationLength);\n }\n function toggleNavigationByEventBus({ open: open2 }) {\n return toggleNavigation(open2);\n }\n function toggleFocusTrap() {\n if (isMobile.value && open.value) {\n focusTrap.activate();\n } else {\n focusTrap.deactivate();\n }\n }\n function handleEsc() {\n if (isMobile.value) {\n toggleNavigation(false);\n }\n }\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n ref: \"appNavigationContainer\",\n class: normalizeClass([\"app-navigation\", {\n \"app-navigation--closed\": !open.value,\n \"app-navigation--legacy\": unref(isLegacy34)\n }])\n }, [\n createElementVNode(\"nav\", {\n id: \"app-navigation-vue\",\n \"aria-hidden\": open.value ? \"false\" : \"true\",\n \"aria-label\": __props.ariaLabel || void 0,\n \"aria-labelledby\": __props.ariaLabelledby || void 0,\n class: \"app-navigation__content\",\n inert: !open.value || void 0,\n onKeydown: withKeys(handleEsc, [\"esc\"])\n }, [\n createElementVNode(\"div\", _hoisted_2, [\n renderSlot(_ctx.$slots, \"search\", {}, void 0, true)\n ]),\n createElementVNode(\"div\", {\n class: normalizeClass([\"app-navigation__body\", { \"app-navigation__body--no-list\": !_ctx.$slots.list }])\n }, [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true)\n ], 2),\n _ctx.$slots.list ? (openBlock(), createBlock(NcAppNavigationList, {\n key: 0,\n class: \"app-navigation__list\"\n }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"list\", {}, void 0, true)\n ]),\n _: 3\n })) : createCommentVNode(\"\", true),\n renderSlot(_ctx.$slots, \"footer\", {}, void 0, true)\n ], 40, _hoisted_1),\n createVNode(NcAppNavigationToggle, {\n open: open.value,\n \"onUpdate:open\": toggleNavigation\n }, null, 8, [\"open\"])\n ], 2);\n };\n }\n});\nconst NcAppNavigation = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-104ef656\"]]);\nexport {\n NcAppNavigation as N\n};\n//# sourceMappingURL=NcAppNavigation-Bb9-C2eO.mjs.map\n","import '../assets/NcAppNavigationCaption-ggcWspH2.css';\nimport { N as NcActions } from \"./NcActions-CUmcZ3C3.mjs\";\nimport { resolveComponent, openBlock, createBlock, resolveDynamicComponent, normalizeClass, withCtx, createTextVNode, toDisplayString, createElementBlock, createVNode, normalizeProps, guardReactiveProps, renderSlot, createCommentVNode } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n name: \"NcAppNavigationCaption\",\n components: {\n NcActions\n },\n props: {\n /**\n * The text of the caption\n */\n name: {\n type: String,\n required: true\n },\n /**\n * `id` to set on the inner caption\n * Can be used for connecting the `NcActionCaption` with `NcActionList` using `aria-labelledby`.\n */\n headingId: {\n type: String,\n default: null\n },\n /**\n * Enable when used as a heading\n * e.g. Before NcAppNavigationList\n */\n isHeading: {\n type: Boolean,\n default: false\n },\n /**\n * If `isHeading` is set, this defines the heading level that should be used\n */\n headingLevel: {\n type: Number,\n default: 2\n },\n /**\n * Any [NcActions](#/Components/NcActions?id=ncactions-1) prop\n */\n // Not an actual prop but needed to show in vue-styleguidist docs\n ...NcActions.props\n },\n computed: {\n actionsProps() {\n const actionProps = Object.keys(NcActions.props);\n const props = Object.entries(this.$props).filter(([key, _value]) => actionProps.includes(key));\n return Object.fromEntries(props);\n },\n wrapperTag() {\n return this.isHeading ? \"div\" : \"li\";\n },\n captionTag() {\n const headingLevel = Math.max(2, this.headingLevel);\n return this.isHeading ? `h${headingLevel}` : \"span\";\n }\n }\n};\nconst _hoisted_1 = {\n key: 0,\n class: \"app-navigation-caption__actions\"\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcActions = resolveComponent(\"NcActions\");\n return openBlock(), createBlock(resolveDynamicComponent($options.wrapperTag), {\n class: normalizeClass([\"app-navigation-caption\", { \"app-navigation-caption--heading\": $props.isHeading }])\n }, {\n default: withCtx(() => [\n (openBlock(), createBlock(resolveDynamicComponent($options.captionTag), {\n id: $props.headingId,\n class: \"app-navigation-caption__name\"\n }, {\n default: withCtx(() => [\n createTextVNode(toDisplayString($props.name), 1)\n ]),\n _: 1\n }, 8, [\"id\"])),\n !!_ctx.$slots.actions ? (openBlock(), createElementBlock(\"div\", _hoisted_1, [\n createVNode(_component_NcActions, normalizeProps(guardReactiveProps($options.actionsProps)), {\n icon: withCtx(() => [\n renderSlot(_ctx.$slots, \"actionsTriggerIcon\", {}, void 0, true)\n ]),\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"actions\", {}, void 0, true)\n ]),\n _: 3\n }, 16)\n ])) : createCommentVNode(\"\", true)\n ]),\n _: 3\n }, 8, [\"class\"]);\n}\nconst NcAppNavigationCaption = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-f0e411c2\"]]);\nexport {\n NcAppNavigationCaption as N\n};\n//# sourceMappingURL=NcAppNavigationCaption-E9iJtiQt.mjs.map\n","import { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n name: \"ChevronUpIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3 = { d: \"M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z\" };\nconst _hoisted_4 = { key: 0 };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon chevron-up-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2))\n ], 16, _hoisted_1);\n}\nconst ChevronUp = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nexport {\n ChevronUp as C\n};\n//# sourceMappingURL=ChevronUp-ChH8oB7p.mjs.map\n","import { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n name: \"ArrowRightIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3 = { d: \"M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z\" };\nconst _hoisted_4 = { key: 0 };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon arrow-right-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2))\n ], 16, _hoisted_1);\n}\nconst IconArrowRight = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nexport {\n IconArrowRight as I\n};\n//# sourceMappingURL=ArrowRight-B1ncAhus.mjs.map\n","import '../assets/NcInputConfirmCancel-BEmwC87z.css';\nimport { I as IconArrowRight } from \"./ArrowRight-B1ncAhus.mjs\";\nimport { I as IconClose } from \"./Close-CuhcJnX2.mjs\";\nimport { r as register, k as t14, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { i as isLegacy34 } from \"./legacy-BoqDmOCa.mjs\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { resolveComponent, openBlock, createElementBlock, normalizeClass, createElementVNode, withModifiers, withKeys, withDirectives, vModelText, createVNode, withCtx } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t14);\nconst _sfc_main = {\n name: \"NcInputConfirmCancel\",\n components: {\n IconArrowRight,\n IconClose,\n NcButton\n },\n setup() {\n return { isLegacy34 };\n },\n props: {\n /**\n * If this element is used on a primary element set to true for primary styling.\n */\n primary: {\n default: false,\n type: Boolean\n },\n /**\n * Placeholder of the edit field\n */\n placeholder: {\n default: \"\",\n type: String\n },\n /**\n * The current name (model value)\n */\n modelValue: {\n default: \"\",\n type: String\n }\n },\n emits: [\n \"cancel\",\n \"confirm\",\n \"update:modelValue\"\n ],\n data() {\n return {\n labelConfirm: t(\"Confirm changes\"),\n labelCancel: t(\"Cancel changes\")\n };\n },\n computed: {\n valueModel: {\n get() {\n return this.modelValue;\n },\n set(newValue) {\n this.$emit(\"update:modelValue\", newValue);\n }\n }\n },\n methods: {\n confirm() {\n this.$emit(\"confirm\");\n },\n cancel() {\n this.$emit(\"cancel\");\n },\n focusInput() {\n this.$refs.input.focus();\n }\n }\n};\nconst _hoisted_1 = [\"placeholder\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_IconArrowRight = resolveComponent(\"IconArrowRight\");\n const _component_NcButton = resolveComponent(\"NcButton\");\n const _component_IconClose = resolveComponent(\"IconClose\");\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\"app-navigation-input-confirm\", { \"app-navigation-input-confirm--legacy\": $setup.isLegacy34 }])\n }, [\n createElementVNode(\"form\", {\n onSubmit: _cache[1] || (_cache[1] = withModifiers((...args) => $options.confirm && $options.confirm(...args), [\"prevent\"])),\n onKeydown: _cache[2] || (_cache[2] = withKeys(withModifiers((...args) => $options.cancel && $options.cancel(...args), [\"exact\", \"stop\", \"prevent\"]), [\"esc\"])),\n onClick: _cache[3] || (_cache[3] = withModifiers(() => {\n }, [\"stop\", \"prevent\"]))\n }, [\n withDirectives(createElementVNode(\"input\", {\n ref: \"input\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => $options.valueModel = $event),\n type: \"text\",\n class: \"app-navigation-input-confirm__input\",\n placeholder: $props.placeholder\n }, null, 8, _hoisted_1), [\n [vModelText, $options.valueModel]\n ]),\n createVNode(_component_NcButton, {\n \"aria-label\": $data.labelConfirm,\n type: \"submit\",\n variant: \"primary\",\n onClick: withModifiers($options.confirm, [\"stop\", \"prevent\"])\n }, {\n icon: withCtx(() => [\n createVNode(_component_IconArrowRight, { size: 20 })\n ]),\n _: 1\n }, 8, [\"aria-label\", \"onClick\"]),\n createVNode(_component_NcButton, {\n \"aria-label\": $data.labelCancel,\n type: \"reset\",\n variant: $props.primary ? \"primary\" : \"tertiary\",\n onClick: withModifiers($options.cancel, [\"stop\", \"prevent\"])\n }, {\n icon: withCtx(() => [\n createVNode(_component_IconClose, { size: 20 })\n ]),\n _: 1\n }, 8, [\"aria-label\", \"variant\", \"onClick\"])\n ], 32)\n ], 2);\n}\nconst NcInputConfirmCancel = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-a8724c7f\"]]);\nexport {\n NcInputConfirmCancel as N\n};\n//# sourceMappingURL=NcInputConfirmCancel-B6qC3s63.mjs.map\n","import '../assets/NcAppNavigationItem-BsuZoJAq.css';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode, resolveComponent, createBlock, normalizeClass, withCtx, resolveDynamicComponent, normalizeProps, guardReactiveProps, withKeys, withModifiers, renderSlot, createVNode, createTextVNode } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { C as ChevronDown } from \"./ChevronDown-C6gc637b.mjs\";\nimport { C as ChevronUp } from \"./ChevronUp-ChH8oB7p.mjs\";\nimport { r as register, N as t21, a as t, b as t51, O as t23 } from \"./_l10n-CG4CuN3H.mjs\";\nimport { i as isLegacy34 } from \"./legacy-BoqDmOCa.mjs\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { N as NcInputConfirmCancel } from \"./NcInputConfirmCancel-B6qC3s63.mjs\";\nimport { useIsMobile } from \"../composables/useIsMobile/index.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { N as NcActionButton } from \"./NcActionButton-BO5T5ePT.mjs\";\nimport { N as NcActions } from \"./NcActions-CUmcZ3C3.mjs\";\nimport { N as NcLoadingIcon } from \"./NcLoadingIcon-BOVpFVQz.mjs\";\nimport { _ as _sfc_main$4 } from \"./NcVNodes.vue_vue_type_script_lang-BqUHinRZ.mjs\";\nconst _sfc_main$3 = {\n name: \"PencilIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$2 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$2 = { d: \"M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z\" };\nconst _hoisted_4$2 = { key: 0 };\nfunction _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon pencil-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$2, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$2, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$2))\n ], 16, _hoisted_1$2);\n}\nconst Pencil = /* @__PURE__ */ _export_sfc(_sfc_main$3, [[\"render\", _sfc_render$3]]);\nconst _sfc_main$2 = {\n name: \"UndoIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$1 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$1 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$1 = { d: \"M12.5,8C9.85,8 7.45,9 5.6,10.6L2,7V16H11L7.38,12.38C8.77,11.22 10.54,10.5 12.5,10.5C16.04,10.5 19.05,12.81 20.1,16L22.47,15.22C21.08,11.03 17.15,8 12.5,8Z\" };\nconst _hoisted_4$1 = { key: 0 };\nfunction _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon undo-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$1, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$1, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$1))\n ], 16, _hoisted_1$1);\n}\nconst Undo = /* @__PURE__ */ _export_sfc(_sfc_main$2, [[\"render\", _sfc_render$2]]);\nregister(t21);\nconst _sfc_main$1 = {\n name: \"NcAppNavigationIconCollapsible\",\n components: {\n NcButton,\n ChevronDown,\n ChevronUp\n },\n setup() {\n return { isLegacy34 };\n },\n props: {\n /**\n * Is the list currently open (or collapsed)\n */\n open: {\n type: Boolean,\n required: true\n },\n /**\n * Is the navigation item currently active.\n */\n active: {\n type: Boolean,\n required: true\n }\n },\n emits: [\"click\"],\n computed: {\n labelButton() {\n return this.open ? t(\"Collapse menu\") : t(\"Open menu\");\n }\n },\n methods: {\n onClick(e) {\n this.$emit(\"click\", e);\n }\n }\n};\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_ChevronUp = resolveComponent(\"ChevronUp\");\n const _component_ChevronDown = resolveComponent(\"ChevronDown\");\n const _component_NcButton = resolveComponent(\"NcButton\");\n return openBlock(), createBlock(_component_NcButton, {\n class: normalizeClass([\"icon-collapse\", {\n \"icon-collapse--active\": $props.active,\n \"icon-collapse--open\": $props.open\n }]),\n \"aria-label\": $options.labelButton,\n variant: $props.active && $setup.isLegacy34 ? \"tertiary-on-primary\" : \"tertiary\",\n onClick: $options.onClick\n }, {\n icon: withCtx(() => [\n $props.open ? (openBlock(), createBlock(_component_ChevronUp, {\n key: 0,\n size: 20\n })) : (openBlock(), createBlock(_component_ChevronDown, {\n key: 1,\n size: 20\n }))\n ]),\n _: 1\n }, 8, [\"class\", \"aria-label\", \"variant\", \"onClick\"]);\n}\nconst NcAppNavigationIconCollapsible = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1], [\"__scopeId\", \"data-v-acf5ed2f\"]]);\nregister(t23, t51);\nconst _sfc_main = {\n name: \"NcAppNavigationItem\",\n components: {\n NcActions,\n NcActionButton,\n NcAppNavigationIconCollapsible,\n NcInputConfirmCancel,\n NcLoadingIcon,\n NcVNodes: _sfc_main$4,\n Pencil,\n Undo\n },\n props: {\n /**\n * If you are not using vue-router you can use the property to set this item as the active navigation entry.\n * When using vue-router and the `to` property this is set automatically.\n */\n active: {\n type: Boolean,\n default: false\n },\n /**\n * The main text content of the entry.\n */\n name: {\n type: String,\n required: true\n },\n /**\n * The title attribute of the element.\n */\n title: {\n type: String,\n default: null\n },\n /**\n * id attribute of the list item element\n */\n id: {\n type: String,\n default: () => createElementId(),\n validator: (id) => id.trim() !== \"\"\n },\n /**\n * Refers to the icon on the left, this prop accepts a class\n * like 'icon-category-enabled'.\n */\n icon: {\n type: String,\n default: \"\"\n },\n /**\n * Displays a loading animated icon on the left of the element\n * instead of the icon.\n */\n loading: {\n type: Boolean,\n default: false\n },\n /**\n * Passing in a route will make the root element of this\n * component a `` that points to that route.\n * By leaving this blank, the root element will be a `
  • `.\n */\n to: {\n type: [String, Object],\n default: null\n },\n /**\n * A direct link. This will be used as the `href` attribute.\n * This will ignore any `to` prop being defined.\n */\n href: {\n type: String,\n default: null\n },\n /**\n * Gives the possibility to collapse the children elements into the\n * parent element (true) or expands the children elements (false).\n */\n allowCollapse: {\n type: Boolean,\n default: false\n },\n /**\n * Makes the name of the item editable by providing an `ActionButton`\n * component that toggles a form\n */\n editable: {\n type: Boolean,\n default: false\n },\n /**\n * Only for 'editable' items, sets label for the edit action button.\n */\n editLabel: {\n type: String,\n default: \"\"\n },\n /**\n * Only for items in 'editable' mode, sets the placeholder text for the editing form.\n */\n editPlaceholder: {\n type: String,\n default: \"\"\n },\n /**\n * Pins the item to the bottom left area, above the settings. Do not\n * place 'non-pinned' `AppnavigationItem` components below `pinned`\n * ones.\n */\n pinned: {\n type: Boolean,\n default: false\n },\n /**\n * Puts the item in the 'undo' state.\n */\n undo: {\n type: Boolean,\n default: false\n },\n /**\n * The navigation collapsible state (synced)\n */\n open: {\n type: Boolean,\n default: false\n },\n /**\n * The actions menu open state (synced)\n */\n menuOpen: {\n type: Boolean,\n default: false\n },\n /**\n * Force the actions to display in a three dot menu\n */\n forceMenu: {\n type: Boolean,\n default: false\n },\n /**\n * The action's menu default icon\n */\n menuIcon: {\n type: String,\n default: void 0\n },\n /**\n * The action's menu direction\n */\n menuPlacement: {\n type: String,\n default: \"bottom\"\n },\n /**\n * Entry aria details\n */\n ariaDescription: {\n type: String,\n default: null\n },\n /**\n * To be used only when the elements in the actions menu are very important\n */\n forceDisplayActions: {\n type: Boolean,\n default: false\n },\n /**\n * Number of action items outside the menu\n */\n inlineActions: {\n type: Number,\n default: 0\n }\n },\n emits: [\n \"update:menuOpen\",\n \"update:open\",\n \"update:name\",\n \"click\",\n \"undo\"\n ],\n setup() {\n return {\n isMobile: useIsMobile(),\n isLegacy34\n };\n },\n data() {\n return {\n actionsBoundariesElement: void 0,\n editingValue: \"\",\n opened: this.open,\n // Collapsible state\n editingActive: false,\n /**\n * Tracks the open state of the actions menu\n */\n menuOpenLocalValue: false,\n focused: false\n };\n },\n computed: {\n isRouterLink() {\n return this.to && !this.href;\n },\n // Checks if the component is already a children of another\n // instance of AppNavigationItem\n canHaveChildren() {\n if (this.$parent.$options._componentTag === \"AppNavigationItem\") {\n return false;\n } else {\n return true;\n }\n },\n editButtonAriaLabel() {\n return this.editLabel ? this.editLabel : t(\"Edit item\");\n },\n undoButtonAriaLabel() {\n return t(\"Undo changes\");\n }\n },\n watch: {\n open(newVal) {\n this.opened = newVal;\n }\n },\n mounted() {\n this.actionsBoundariesElement = document.querySelector(\"#content-vue\") || void 0;\n },\n methods: {\n // sync opened menu state with prop\n onMenuToggle(state) {\n this.$emit(\"update:menuOpen\", state);\n this.menuOpenLocalValue = state;\n },\n // toggle the collapsible state\n toggleCollapse() {\n this.opened = !this.opened;\n this.$emit(\"update:open\", this.opened);\n },\n /**\n * Handle link click\n *\n * @param {PointerEvent} event - Native click event\n * @param {Function} [navigate] - VueRouter link's navigate if any\n * @param {string} [routerLinkHref] - VueRouter link's href\n */\n onClick(event, navigate, routerLinkHref) {\n this.$emit(\"click\", event);\n if (event.metaKey || event.altKey || event.ctrlKey || event.shiftKey) {\n return;\n }\n if (routerLinkHref) {\n navigate?.(event);\n event.preventDefault();\n }\n },\n // Edition methods\n handleEdit() {\n this.editingValue = this.name;\n this.editingActive = true;\n this.onMenuToggle(false);\n this.$nextTick(() => {\n this.$refs.editingInput.focusInput();\n });\n },\n cancelEditing() {\n this.editingActive = false;\n },\n handleEditingDone() {\n this.$emit(\"update:name\", this.editingValue);\n this.editingValue = \"\";\n this.editingActive = false;\n },\n // Undo methods\n handleUndo() {\n this.$emit(\"undo\");\n },\n /**\n * Show actions upon focus\n */\n handleFocus() {\n this.focused = true;\n },\n handleBlur() {\n this.focused = false;\n },\n /**\n * This method checks if the root element of the component is focused and\n * if that's the case it focuses the actions button if available\n *\n * @param {Event} e the keydown event\n */\n handleTab(e) {\n if (!this.$refs.actions) {\n return;\n }\n if (this.focused) {\n e.preventDefault();\n this.$refs.actions.$refs.triggerButton.$el.focus();\n this.focused = false;\n } else {\n this.$refs.actions.$refs.triggerButton.$el.blur();\n }\n },\n /**\n * Is this an external link\n *\n * @param {string} href The link to check\n * @return {boolean} Whether it is external or not\n */\n isExternal(href) {\n return href && href.match(/[a-z]+:\\/\\//i);\n }\n }\n};\nconst _hoisted_1 = [\"id\"];\nconst _hoisted_2 = [\"aria-current\", \"aria-description\", \"aria-expanded\", \"href\", \"target\", \"title\", \"onClick\"];\nconst _hoisted_3 = {\n key: 0,\n class: \"editingContainer\"\n};\nconst _hoisted_4 = {\n key: 1,\n class: \"app-navigation-entry__deleted\"\n};\nconst _hoisted_5 = { class: \"app-navigation-entry__deleted-description\" };\nconst _hoisted_6 = {\n key: 0,\n class: \"app-navigation-entry__counter-wrapper\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"app-navigation-entry__children\"\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcLoadingIcon = resolveComponent(\"NcLoadingIcon\");\n const _component_NcInputConfirmCancel = resolveComponent(\"NcInputConfirmCancel\");\n const _component_Pencil = resolveComponent(\"Pencil\");\n const _component_NcActionButton = resolveComponent(\"NcActionButton\");\n const _component_Undo = resolveComponent(\"Undo\");\n const _component_NcActions = resolveComponent(\"NcActions\");\n const _component_NcAppNavigationIconCollapsible = resolveComponent(\"NcAppNavigationIconCollapsible\");\n return openBlock(), createElementBlock(\"li\", {\n id: $props.id,\n class: normalizeClass([{\n \"app-navigation-entry--opened\": $data.opened,\n \"app-navigation-entry--pinned\": $props.pinned,\n \"app-navigation-entry--collapsible\": $props.allowCollapse && !!_ctx.$slots.default\n }, \"app-navigation-entry-wrapper\"])\n }, [\n (openBlock(), createBlock(resolveDynamicComponent($options.isRouterLink ? \"router-link\" : \"NcVNodes\"), normalizeProps(guardReactiveProps({ ...$options.isRouterLink && { custom: true, to: $props.to } })), {\n default: withCtx(({ href: routerLinkHref, navigate, isActive }) => [\n createElementVNode(\"div\", {\n class: normalizeClass([\"app-navigation-entry\", {\n \"app-navigation-entry--editing\": $data.editingActive,\n \"app-navigation-entry--deleted\": $props.undo,\n \"app-navigation-entry--legacy\": $setup.isLegacy34,\n active: $props.to && isActive || $props.active\n }])\n }, [\n !$props.undo ? (openBlock(), createElementBlock(\"a\", {\n key: 0,\n class: \"app-navigation-entry-link\",\n \"aria-current\": $props.active || $props.to && isActive ? \"page\" : void 0,\n \"aria-description\": $props.ariaDescription,\n \"aria-expanded\": !!_ctx.$slots.default ? $data.opened.toString() : void 0,\n href: $props.href || routerLinkHref || \"#\",\n target: $options.isExternal($props.href) ? \"_blank\" : void 0,\n title: $props.title || $props.name,\n onBlur: _cache[1] || (_cache[1] = (...args) => $options.handleBlur && $options.handleBlur(...args)),\n onClick: ($event) => $options.onClick($event, navigate, routerLinkHref),\n onFocus: _cache[2] || (_cache[2] = (...args) => $options.handleFocus && $options.handleFocus(...args)),\n onKeydown: _cache[3] || (_cache[3] = withKeys(withModifiers((...args) => $options.handleTab && $options.handleTab(...args), [\"exact\"]), [\"tab\"]))\n }, [\n createElementVNode(\"div\", {\n class: normalizeClass([\"app-navigation-entry-icon\", { [$props.icon]: $props.icon }])\n }, [\n $props.loading ? (openBlock(), createBlock(_component_NcLoadingIcon, { key: 0 })) : renderSlot(_ctx.$slots, \"icon\", {\n key: 1,\n active: $props.active || $props.to && isActive\n }, void 0, true)\n ], 2),\n createElementVNode(\"span\", {\n class: normalizeClass([\"app-navigation-entry__name\", { \"hidden-visually\": $data.editingActive }])\n }, toDisplayString($props.name), 3),\n $data.editingActive ? (openBlock(), createElementBlock(\"div\", _hoisted_3, [\n createVNode(_component_NcInputConfirmCancel, {\n ref: \"editingInput\",\n modelValue: $data.editingValue,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => $data.editingValue = $event),\n placeholder: $props.editPlaceholder !== \"\" ? $props.editPlaceholder : $props.name,\n primary: $props.to && isActive || $props.active,\n onCancel: $options.cancelEditing,\n onConfirm: $options.handleEditingDone\n }, null, 8, [\"modelValue\", \"placeholder\", \"primary\", \"onCancel\", \"onConfirm\"])\n ])) : createCommentVNode(\"\", true)\n ], 40, _hoisted_2)) : createCommentVNode(\"\", true),\n $props.undo ? (openBlock(), createElementBlock(\"div\", _hoisted_4, [\n createElementVNode(\"div\", _hoisted_5, toDisplayString($props.name), 1)\n ])) : createCommentVNode(\"\", true),\n (!!_ctx.$slots.actions || !!_ctx.$slots.counter || $props.editable || $props.undo) && !$data.editingActive ? (openBlock(), createElementBlock(\"div\", {\n key: 2,\n class: normalizeClass([\"app-navigation-entry__utils\", { \"app-navigation-entry__utils--display-actions\": $props.forceDisplayActions || $data.menuOpenLocalValue || $props.menuOpen }])\n }, [\n !!_ctx.$slots.counter ? (openBlock(), createElementBlock(\"div\", _hoisted_6, [\n renderSlot(_ctx.$slots, \"counter\", {}, void 0, true)\n ])) : createCommentVNode(\"\", true),\n !!_ctx.$slots.actions || $props.editable && !$data.editingActive || $props.undo ? (openBlock(), createBlock(_component_NcActions, {\n key: 1,\n ref: \"actions\",\n class: \"app-navigation-entry__actions\",\n container: \"#app-navigation-vue\",\n boundariesElement: $data.actionsBoundariesElement,\n inline: $props.inlineActions,\n placement: $props.menuPlacement,\n open: $props.menuOpen,\n forceMenu: $props.forceMenu,\n defaultIcon: $props.menuIcon,\n variant: \"tertiary\",\n \"onUpdate:open\": $options.onMenuToggle\n }, {\n icon: withCtx(() => [\n renderSlot(_ctx.$slots, \"menu-icon\", {}, void 0, true)\n ]),\n default: withCtx(() => [\n $props.editable && !$data.editingActive ? (openBlock(), createBlock(_component_NcActionButton, {\n key: 0,\n \"aria-label\": $options.editButtonAriaLabel,\n onClick: $options.handleEdit\n }, {\n icon: withCtx(() => [\n createVNode(_component_Pencil, { size: 20 })\n ]),\n default: withCtx(() => [\n createTextVNode(\" \" + toDisplayString($props.editLabel), 1)\n ]),\n _: 1\n }, 8, [\"aria-label\", \"onClick\"])) : createCommentVNode(\"\", true),\n $props.undo ? (openBlock(), createBlock(_component_NcActionButton, {\n key: 1,\n \"aria-label\": $options.undoButtonAriaLabel,\n onClick: $options.handleUndo\n }, {\n icon: withCtx(() => [\n createVNode(_component_Undo, { size: 20 })\n ]),\n _: 1\n }, 8, [\"aria-label\", \"onClick\"])) : createCommentVNode(\"\", true),\n renderSlot(_ctx.$slots, \"actions\", {}, void 0, true)\n ]),\n _: 3\n }, 8, [\"boundariesElement\", \"inline\", \"placement\", \"open\", \"forceMenu\", \"defaultIcon\", \"onUpdate:open\"])) : createCommentVNode(\"\", true)\n ], 2)) : createCommentVNode(\"\", true),\n $props.allowCollapse && !!_ctx.$slots.default ? (openBlock(), createBlock(_component_NcAppNavigationIconCollapsible, {\n key: 3,\n active: $props.to && isActive || $props.active,\n open: $data.opened,\n onClick: withModifiers($options.toggleCollapse, [\"prevent\", \"stop\"])\n }, null, 8, [\"active\", \"open\", \"onClick\"])) : createCommentVNode(\"\", true),\n renderSlot(_ctx.$slots, \"extra\", {}, void 0, true)\n ], 2)\n ]),\n _: 3\n }, 16)),\n $options.canHaveChildren && !!_ctx.$slots.default ? (openBlock(), createElementBlock(\"ul\", _hoisted_7, [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true)\n ])) : createCommentVNode(\"\", true)\n ], 10, _hoisted_1);\n}\nconst NcAppNavigationItem = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-e4d562ae\"]]);\nexport {\n NcAppNavigationItem as N\n};\n//# sourceMappingURL=NcAppNavigationItem-BFAIHyTL.mjs.map\n","import '../assets/NcAppNavigationSearch-DD7mo6OW.css';\nimport { defineComponent, useModel, useSlots, ref, useTemplateRef, watch, openBlock, createElementBlock, normalizeClass, createVNode, unref, withCtx, renderSlot, createCommentVNode, mergeModels, nextTick } from \"vue\";\nimport { useFocusWithin } from \"@vueuse/core\";\nimport { I as IconClose } from \"./Close-CuhcJnX2.mjs\";\nimport { N as NcInputField } from \"./NcInputField-B1bGxYHt.mjs\";\nimport { r as register, C as t44, u as t16, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t16, t44);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppNavigationSearch\",\n props: /* @__PURE__ */ mergeModels({\n /**\n * Text used to label the search input\n */\n label: {\n type: String,\n default: t(\"Search …\")\n },\n /**\n * Placeholder of the search input\n * By default the value of `label` is used.\n */\n placeholder: {\n type: String,\n default: null\n }\n }, {\n \"modelValue\": { default: \"\" },\n \"modelModifiers\": {}\n }),\n emits: [\"update:modelValue\"],\n setup(__props) {\n const model = useModel(__props, \"modelValue\");\n const slots = useSlots();\n const inputElement = ref();\n const { focused: inputHasFocus } = useFocusWithin(inputElement);\n const transitionTimeout = Number.parseInt(window.getComputedStyle(window.document.body).getPropertyValue(\"--animation-quick\")) || 100;\n const actionsContainerElement = useTemplateRef(\"actionsContainer\");\n const hasActions = () => !!slots.actions?.({});\n const showActions = ref(true);\n const timeoutId = ref();\n const hideActions = ref(false);\n watch(inputHasFocus, () => {\n showActions.value = !inputHasFocus.value;\n window.clearTimeout(timeoutId.value);\n if (showActions.value) {\n hideActions.value = false;\n } else {\n window.setTimeout(() => {\n hideActions.value = !showActions.value;\n }, transitionTimeout);\n }\n });\n function onCloseSearch() {\n model.value = \"\";\n if (hasActions()) {\n showActions.value = true;\n nextTick(() => actionsContainerElement.value?.querySelector(\"button\")?.focus());\n }\n }\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\"app-navigation-search\", {\n \"app-navigation-search--has-actions\": hasActions()\n }])\n }, [\n createVNode(NcInputField, {\n ref_key: \"inputElement\",\n ref: inputElement,\n modelValue: model.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => model.value = $event),\n \"aria-label\": __props.label,\n class: \"app-navigation-search__input\",\n labelOutside: \"\",\n placeholder: __props.placeholder ?? __props.label,\n showTrailingButton: model.value.length > 0,\n trailingButtonLabel: unref(t)(\"Clear search\"),\n type: \"search\",\n onTrailingButtonClick: onCloseSearch\n }, {\n \"trailing-button-icon\": withCtx(() => [\n createVNode(IconClose, { size: 20 })\n ]),\n _: 1\n }, 8, [\"modelValue\", \"aria-label\", \"placeholder\", \"showTrailingButton\", \"trailingButtonLabel\"]),\n hasActions() ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n ref: \"actionsContainer\",\n class: normalizeClass([\"app-navigation-search__actions\", {\n \"app-navigation-search__actions--hidden\": !showActions.value,\n \"hidden-visually\": hideActions.value\n }])\n }, [\n renderSlot(_ctx.$slots, \"actions\", {}, void 0, true)\n ], 2)) : createCommentVNode(\"\", true)\n ], 2);\n };\n }\n});\nconst NcAppNavigationSearch = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-191b6717\"]]);\nexport {\n NcAppNavigationSearch as N\n};\n//# sourceMappingURL=NcAppNavigationSearch-CiOKjV3M.mjs.map\n","import '../assets/NcAppNavigationSettings-HQEDobBQ.css';\nimport { defineComponent, ref, useTemplateRef, computed, openBlock, createElementBlock, normalizeClass, createElementVNode, createVNode, unref, withCtx, createTextVNode, toDisplayString, Transition, withDirectives, renderSlot, vShow } from \"vue\";\nimport { C as mdiCog, D as mdiCogOutline } from \"./mdi-CpchYUUV.mjs\";\nimport { onClickOutside } from \"@vueuse/core\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { r as register, B as t47, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { a as isLegacy } from \"./legacy-BoqDmOCa.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t47);\nconst _hoisted_1 = [\"id\"];\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppNavigationSettings\",\n props: {\n excludeClickOutsideSelectors: { default: () => [] },\n name: { default: () => t(\"Settings\") }\n },\n setup(__props) {\n const contentId = createElementId();\n const open = ref(false);\n const container2 = useTemplateRef(\"wrapperElement\");\n const ignore = computed(() => Array.isArray(__props.excludeClickOutsideSelectors) ? __props.excludeClickOutsideSelectors : __props.excludeClickOutsideSelectors.split(\" \"));\n onClickOutside(container2, () => {\n open.value = false;\n }, { ignore });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n ref: \"wrapperElement\",\n class: normalizeClass(_ctx.$style.container)\n }, [\n createElementVNode(\"div\", {\n class: normalizeClass(_ctx.$style.header)\n }, [\n createVNode(NcButton, {\n \"aria-controls\": unref(contentId),\n \"aria-expanded\": open.value ? \"true\" : \"false\",\n class: normalizeClass(_ctx.$style.button),\n alignment: \"start\",\n variant: \"tertiary\",\n wide: \"\",\n onClick: _cache[0] || (_cache[0] = ($event) => open.value = !open.value)\n }, {\n icon: withCtx(() => [\n createVNode(NcIconSvgWrapper, {\n path: unref(isLegacy) ? unref(mdiCog) : unref(mdiCogOutline)\n }, null, 8, [\"path\"])\n ]),\n default: withCtx(() => [\n createTextVNode(\" \" + toDisplayString(__props.name), 1)\n ]),\n _: 1\n }, 8, [\"aria-controls\", \"aria-expanded\", \"class\"])\n ], 2),\n createVNode(Transition, {\n enterActiveClass: _ctx.$style.animationActive,\n leaveActiveClass: _ctx.$style.animationActive,\n enterFromClass: _ctx.$style.animationStop,\n leaveToClass: _ctx.$style.animationStop\n }, {\n default: withCtx(() => [\n withDirectives(createElementVNode(\"div\", {\n id: unref(contentId),\n class: normalizeClass(_ctx.$style.content)\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 10, _hoisted_1), [\n [vShow, open.value]\n ])\n ]),\n _: 3\n }, 8, [\"enterActiveClass\", \"leaveActiveClass\", \"enterFromClass\", \"leaveToClass\"])\n ], 2);\n };\n }\n});\nconst container = \"_container_RFk6U\";\nconst header = \"_header_2CtDS\";\nconst button = \"_button_tAyis\";\nconst content = \"_content_--KYD\";\nconst animationActive = \"_animationActive_DAG1p\";\nconst animationStop = \"_animationStop_fWYQj\";\nconst style0 = {\n container,\n header,\n button,\n content,\n animationActive,\n animationStop\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcAppNavigationSettings = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n NcAppNavigationSettings as N\n};\n//# sourceMappingURL=NcAppNavigationSettings-fbuQmy-q.mjs.map\n","import '../assets/NcAppSettingsDialog-HsZoLuDy.css';\nimport { defineComponent, inject, openBlock, createElementBlock, normalizeClass, unref, toDisplayString, useModel, provide, toRef, useTemplateRef, ref, computed, onBeforeUnmount, warn, createBlock, createSlots, withCtx, createElementVNode, renderSlot, createCommentVNode, Fragment, renderList, withKeys, withModifiers, mergeModels } from \"vue\";\nimport debounce from \"debounce\";\nimport { N as NcDialog } from \"./NcDialog-kwzJ3A4X.mjs\";\nimport { _ as _sfc_main$2 } from \"./NcVNodes.vue_vue_type_script_lang-BqUHinRZ.mjs\";\nimport { u as useLocalizedAppName, A as APP_VERSION } from \"./appName-DyNMVZpX.mjs\";\nimport { A as APP_SETTINGS_LEGACY_DESIGN_KEY, a as APP_SETTINGS_REGISTRATION_KEY } from \"./useAppSettingsDialog-C73Wx6iQ.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { useIsMobile } from \"../composables/useIsMobile/index.mjs\";\nimport { r as register, I as t48, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { i as isLegacy34 } from \"./legacy-BoqDmOCa.mjs\";\nconst _sfc_main$1 = /* @__PURE__ */ defineComponent({\n __name: \"NcAppSettingsDialogVersion\",\n setup(__props) {\n const legacy = inject(APP_SETTINGS_LEGACY_DESIGN_KEY);\n const localizedAppName = useLocalizedAppName();\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([_ctx.$style.appSettingsDialogVersion, { [_ctx.$style.appSettingsDialogVersion__legacy]: unref(legacy) }])\n }, toDisplayString(unref(localizedAppName)) + \" \" + toDisplayString(unref(APP_VERSION)), 3);\n };\n }\n});\nconst appSettingsDialogVersion = \"_appSettingsDialogVersion_8Xr7R\";\nconst appSettingsDialogVersion__legacy = \"_appSettingsDialogVersion__legacy_7MO71\";\nconst style0 = {\n \"material-design-icon\": \"_material-design-icon_qDIHA\",\n appSettingsDialogVersion,\n appSettingsDialogVersion__legacy\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcAppSettingsDialogVersion = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"__cssModules\", cssModules]]);\nregister(t48);\nconst _hoisted_1 = {\n key: 0,\n class: \"app-settings__title\"\n};\nconst _hoisted_2 = {\n key: 1,\n class: \"navigation-list\"\n};\nconst _hoisted_3 = [\"aria-current\", \"href\", \"onClick\", \"onKeydown\"];\nconst _hoisted_4 = {\n key: 0,\n class: \"navigation-list__link-icon\"\n};\nconst _hoisted_5 = { class: \"navigation-list__link-text\" };\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppSettingsDialog\",\n props: /* @__PURE__ */ mergeModels({\n showNavigation: { type: Boolean },\n container: { default: \"body\" },\n name: { default: \"\" },\n additionalTrapElements: { default: () => [] },\n legacy: { type: Boolean, default: false },\n noVersion: { type: Boolean, default: false }\n }, {\n \"open\": { type: Boolean, ...{ required: true } },\n \"openModifiers\": {}\n }),\n emits: [\"update:open\"],\n setup(__props) {\n const open = useModel(__props, \"open\");\n const props = __props;\n provide(APP_SETTINGS_REGISTRATION_KEY, {\n registerSection,\n unregisterSection\n });\n provide(APP_SETTINGS_LEGACY_DESIGN_KEY, toRef(() => props.legacy));\n const settingsScrollerElement = useTemplateRef(\"settingsScroller\");\n const isMobile = useIsMobile();\n const selectedSection = ref(\"\");\n const linkClicked = ref(false);\n const registeredSections = ref([]);\n const hasNavigation = computed(() => !isMobile.value && props.showNavigation);\n const hasNavigationIcons = computed(() => registeredSections.value.some(({ icon }) => !!icon));\n const unfocusNavigationItem = debounce(() => {\n selectedSection.value = \"\";\n if (document.activeElement?.className.includes(\"navigation-list__link\")) {\n document.activeElement.blur();\n }\n }, 300);\n const sectionsOrderMap = /* @__PURE__ */ new Map();\n onBeforeUnmount(() => {\n sectionsOrderMap.clear();\n });\n function handleSettingsNavigationClick(item) {\n linkClicked.value = true;\n document.getElementById(\"settings-section_\" + item).scrollIntoView({\n behavior: \"smooth\",\n inline: \"nearest\"\n });\n selectedSection.value = item;\n setTimeout(() => {\n linkClicked.value = false;\n }, 1e3);\n }\n function handleCloseModal(isOpen) {\n if (isOpen) {\n return;\n }\n open.value = false;\n settingsScrollerElement.value.scrollTop = 0;\n }\n function handleScroll() {\n if (open.value && !linkClicked.value) {\n unfocusNavigationItem();\n }\n }\n function registerSection(id, name, order, icon) {\n if (registeredSections.value.some(({ id: otherId }) => id === otherId)) {\n throw new Error(`Duplicate section id found: ${id}. Settings navigation sections must have unique section ids.`);\n }\n if (registeredSections.value.some(({ name: otherName }) => name === otherName)) {\n warn(`Duplicate section name found: ${name}. Settings navigation sections must have unique section names.`);\n }\n if (order !== void 0) {\n sectionsOrderMap.set(id, order);\n } else if (sectionsOrderMap.has(id)) {\n order = sectionsOrderMap.get(id);\n } else {\n order = Math.max(0, ...sectionsOrderMap.values()) + 1;\n sectionsOrderMap.set(id, order);\n }\n registeredSections.value = [...registeredSections.value, { id, name, order, icon }].sort(({ order: orderA }, { order: orderB }) => {\n return orderA - orderB;\n });\n if (registeredSections.value.length === 1) {\n selectedSection.value = id;\n }\n }\n function unregisterSection(id) {\n registeredSections.value = registeredSections.value.filter(({ id: otherId }) => id !== otherId);\n if (selectedSection.value === id) {\n selectedSection.value = registeredSections.value[0]?.id ?? \"\";\n }\n }\n return (_ctx, _cache) => {\n return open.value ? (openBlock(), createBlock(NcDialog, {\n key: 0,\n class: normalizeClass([\"app-settings\", { \"app-settings--legacy\": unref(isLegacy34) }]),\n contentClasses: \"app-settings__content\",\n navigationClasses: \"app-settings__navigation\",\n additionalTrapElements: __props.additionalTrapElements,\n container: __props.container,\n closeOnClickOutside: \"\",\n \"navigation-aria-label\": unref(t)(\"Settings navigation\"),\n size: \"large\",\n name: __props.name,\n \"onUpdate:open\": handleCloseModal\n }, createSlots({\n default: withCtx(() => [\n createElementVNode(\"div\", {\n ref: \"settingsScroller\",\n onScroll: handleScroll\n }, [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true),\n !__props.noVersion ? (openBlock(), createBlock(NcAppSettingsDialogVersion, { key: 0 })) : createCommentVNode(\"\", true)\n ], 544)\n ]),\n _: 2\n }, [\n hasNavigation.value ? {\n name: \"navigation\",\n fn: withCtx(({ isCollapsed }) => [\n !unref(isLegacy34) ? (openBlock(), createElementBlock(\"div\", _hoisted_1, toDisplayString(__props.name), 1)) : createCommentVNode(\"\", true),\n !isCollapsed ? (openBlock(), createElementBlock(\"ul\", _hoisted_2, [\n (openBlock(true), createElementBlock(Fragment, null, renderList(registeredSections.value, (section) => {\n return openBlock(), createElementBlock(\"li\", {\n key: section.id\n }, [\n createElementVNode(\"a\", {\n \"aria-current\": `${section.id === selectedSection.value}`,\n class: normalizeClass([\"navigation-list__link\", {\n \"navigation-list__link--active\": section.id === selectedSection.value,\n \"navigation-list__link--icon\": hasNavigationIcons.value\n }]),\n href: `#settings-section_${section.id}`,\n tabindex: \"0\",\n onClick: withModifiers(($event) => handleSettingsNavigationClick(section.id), [\"prevent\"]),\n onKeydown: withKeys(($event) => handleSettingsNavigationClick(section.id), [\"enter\"])\n }, [\n hasNavigationIcons.value ? (openBlock(), createElementBlock(\"div\", _hoisted_4, [\n section.icon ? (openBlock(), createBlock(_sfc_main$2, {\n key: 0,\n vnodes: section.icon\n }, null, 8, [\"vnodes\"])) : createCommentVNode(\"\", true)\n ])) : createCommentVNode(\"\", true),\n createElementVNode(\"span\", _hoisted_5, toDisplayString(section.name), 1)\n ], 42, _hoisted_3)\n ]);\n }), 128))\n ])) : createCommentVNode(\"\", true)\n ]),\n key: \"0\"\n } : void 0\n ]), 1032, [\"class\", \"additionalTrapElements\", \"container\", \"navigation-aria-label\", \"name\"])) : createCommentVNode(\"\", true);\n };\n }\n});\nconst NcAppSettingsDialog = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-e669a5ef\"]]);\nexport {\n NcAppSettingsDialog as N\n};\n//# sourceMappingURL=NcAppSettingsDialog-DByPnndK.mjs.map\n","import '../assets/NcAppSettingsShortcutsSection-BonG0SgH.css';\nimport { defineComponent, openBlock, createBlock, unref, withCtx, createElementVNode, normalizeClass, renderSlot } from \"vue\";\nimport { N as NcAppSettingsSection } from \"./NcAppSettingsSection-BosSmisT.mjs\";\nimport { r as register, p as t31, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t31);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppSettingsShortcutsSection\",\n setup(__props) {\n return (_ctx, _cache) => {\n return openBlock(), createBlock(NcAppSettingsSection, {\n id: \"keyboard-shortcuts\",\n name: unref(t)(\"Keyboard shortcuts\")\n }, {\n default: withCtx(() => [\n createElementVNode(\"div\", {\n class: normalizeClass(_ctx.$style.appSettingsSectionShortcuts)\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 2)\n ]),\n _: 3\n }, 8, [\"name\"]);\n };\n }\n});\nconst appSettingsSectionShortcuts = \"_appSettingsSectionShortcuts_RqpkA\";\nconst style0 = {\n appSettingsSectionShortcuts\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcAppSettingsShortcutsSection = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n NcAppSettingsShortcutsSection as N\n};\n//# sourceMappingURL=NcAppSettingsShortcutsSection-DgqVuZGx.mjs.map\n","const directive = {\n mounted(el) {\n el.focus();\n }\n};\nexport {\n directive as default\n};\n//# sourceMappingURL=index.mjs.map\n","// THIS FILE IS AUTOMATICALLY GENERATED DO NOT EDIT DIRECTLY\n// See update-tlds.js for encoding/decoding format\n// https://data.iana.org/TLD/tlds-alpha-by-domain.txt\nconst encodedTlds = 'aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2odyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rck0msd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2oodside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2';\n// Internationalized domain names containing non-ASCII\nconst encodedUtlds = 'ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2';\n\n/**\n * Finite State Machine generation utilities\n */\n\n/**\n * @template T\n * @typedef {{ [group: string]: T[] }} Collections\n */\n\n/**\n * @typedef {{ [group: string]: true }} Flags\n */\n\n// Keys in scanner Collections instances\nconst numeric = 'numeric';\nconst ascii = 'ascii';\nconst alpha = 'alpha';\nconst asciinumeric = 'asciinumeric';\nconst alphanumeric = 'alphanumeric';\nconst domain = 'domain';\nconst emoji = 'emoji';\nconst scheme = 'scheme';\nconst slashscheme = 'slashscheme';\nconst whitespace = 'whitespace';\n\n/**\n * @template T\n * @param {string} name\n * @param {Collections} groups to register in\n * @returns {T[]} Current list of tokens in the given collection\n */\nfunction registerGroup(name, groups) {\n if (!(name in groups)) {\n groups[name] = [];\n }\n return groups[name];\n}\n\n/**\n * @template T\n * @param {T} t token to add\n * @param {Collections} groups\n * @param {Flags} flags\n */\nfunction addToGroups(t, flags, groups) {\n if (flags[numeric]) {\n flags[asciinumeric] = true;\n flags[alphanumeric] = true;\n }\n if (flags[ascii]) {\n flags[asciinumeric] = true;\n flags[alpha] = true;\n }\n if (flags[asciinumeric]) {\n flags[alphanumeric] = true;\n }\n if (flags[alpha]) {\n flags[alphanumeric] = true;\n }\n if (flags[alphanumeric]) {\n flags[domain] = true;\n }\n if (flags[emoji]) {\n flags[domain] = true;\n }\n for (const k in flags) {\n const group = registerGroup(k, groups);\n if (group.indexOf(t) < 0) {\n group.push(t);\n }\n }\n}\n\n/**\n * @template T\n * @param {T} t token to check\n * @param {Collections} groups\n * @returns {Flags} group flags that contain this token\n */\nfunction flagsForToken(t, groups) {\n const result = {};\n for (const c in groups) {\n if (groups[c].indexOf(t) >= 0) {\n result[c] = true;\n }\n }\n return result;\n}\n\n/**\n * @template T\n * @typedef {null | T } Transition\n */\n\n/**\n * Define a basic state machine state. j is the list of character transitions,\n * jr is the list of regex-match transitions, jd is the default state to\n * transition to t is the accepting token type, if any. If this is the terminal\n * state, then it does not emit a token.\n *\n * The template type T represents the type of the token this state accepts. This\n * should be a string (such as of the token exports in `text.js`) or a\n * MultiToken subclass (from `multi.js`)\n *\n * @template T\n * @param {T} [token] Token that this state emits\n */\nfunction State(token = null) {\n // this.n = null; // DEBUG: State name\n /** @type {{ [input: string]: State }} j */\n this.j = {}; // IMPLEMENTATION 1\n // this.j = []; // IMPLEMENTATION 2\n /** @type {[RegExp, State][]} jr */\n this.jr = [];\n /** @type {?State} jd */\n this.jd = null;\n /** @type {?T} t */\n this.t = token;\n}\n\n/**\n * Scanner token groups\n * @type Collections\n */\nState.groups = {};\nState.prototype = {\n accepts() {\n return !!this.t;\n },\n /**\n * Follow an existing transition from the given input to the next state.\n * Does not mutate.\n * @param {string} input character or token type to transition on\n * @returns {?State} the next state, if any\n */\n go(input) {\n const state = this;\n const nextState = state.j[input];\n if (nextState) {\n return nextState;\n }\n for (let i = 0; i < state.jr.length; i++) {\n const regex = state.jr[i][0];\n const nextState = state.jr[i][1]; // note: might be empty to prevent default jump\n if (nextState && regex.test(input)) {\n return nextState;\n }\n }\n // Nowhere left to jump! Return default, if any\n return state.jd;\n },\n /**\n * Whether the state has a transition for the given input. Set the second\n * argument to true to only look for an exact match (and not a default or\n * regular-expression-based transition)\n * @param {string} input\n * @param {boolean} exactOnly\n */\n has(input, exactOnly = false) {\n return exactOnly ? input in this.j : !!this.go(input);\n },\n /**\n * Short for \"transition all\"; create a transition from the array of items\n * in the given list to the same final resulting state.\n * @param {string | string[]} inputs Group of inputs to transition on\n * @param {Transition | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of token groups\n */\n ta(inputs, next, flags, groups) {\n for (let i = 0; i < inputs.length; i++) {\n this.tt(inputs[i], next, flags, groups);\n }\n },\n /**\n * Short for \"take regexp transition\"; defines a transition for this state\n * when it encounters a token which matches the given regular expression\n * @param {RegExp} regexp Regular expression transition (populate first)\n * @param {T | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of token groups\n * @returns {State} taken after the given input\n */\n tr(regexp, next, flags, groups) {\n groups = groups || State.groups;\n let nextState;\n if (next && next.j) {\n nextState = next;\n } else {\n // Token with maybe token groups\n nextState = new State(next);\n if (flags && groups) {\n addToGroups(next, flags, groups);\n }\n }\n this.jr.push([regexp, nextState]);\n return nextState;\n },\n /**\n * Short for \"take transitions\", will take as many sequential transitions as\n * the length of the given input and returns the\n * resulting final state.\n * @param {string | string[]} input\n * @param {T | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of token groups\n * @returns {State} taken after the given input\n */\n ts(input, next, flags, groups) {\n let state = this;\n const len = input.length;\n if (!len) {\n return state;\n }\n for (let i = 0; i < len - 1; i++) {\n state = state.tt(input[i]);\n }\n return state.tt(input[len - 1], next, flags, groups);\n },\n /**\n * Short for \"take transition\", this is a method for building/working with\n * state machines.\n *\n * If a state already exists for the given input, returns it.\n *\n * If a token is specified, that state will emit that token when reached by\n * the linkify engine.\n *\n * If no state exists, it will be initialized with some default transitions\n * that resemble existing default transitions.\n *\n * If a state is given for the second argument, that state will be\n * transitioned to on the given input regardless of what that input\n * previously did.\n *\n * Specify a token group flags to define groups that this token belongs to.\n * The token will be added to corresponding entires in the given groups\n * object.\n *\n * @param {string} input character, token type to transition on\n * @param {T | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of groups\n * @returns {State} taken after the given input\n */\n tt(input, next, flags, groups) {\n groups = groups || State.groups;\n const state = this;\n\n // Check if existing state given, just a basic transition\n if (next && next.j) {\n state.j[input] = next;\n return next;\n }\n const t = next;\n\n // Take the transition with the usual default mechanisms and use that as\n // a template for creating the next state\n let nextState,\n templateState = state.go(input);\n if (templateState) {\n nextState = new State();\n Object.assign(nextState.j, templateState.j);\n nextState.jr.push.apply(nextState.jr, templateState.jr);\n nextState.jd = templateState.jd;\n nextState.t = templateState.t;\n } else {\n nextState = new State();\n }\n if (t) {\n // Ensure newly token is in the same groups as the old token\n if (groups) {\n if (nextState.t && typeof nextState.t === 'string') {\n const allFlags = Object.assign(flagsForToken(nextState.t, groups), flags);\n addToGroups(t, allFlags, groups);\n } else if (flags) {\n addToGroups(t, flags, groups);\n }\n }\n nextState.t = t; // overwrite anything that was previously there\n }\n state.j[input] = nextState;\n return nextState;\n }\n};\n\n// Helper functions to improve minification (not exported outside linkifyjs module)\n\n/**\n * @template T\n * @param {State} state\n * @param {string | string[]} input\n * @param {Flags} [flags]\n * @param {Collections} [groups]\n */\nconst ta = (state, input, next, flags, groups) => state.ta(input, next, flags, groups);\n\n/**\n * @template T\n * @param {State} state\n * @param {RegExp} regexp\n * @param {T | State} [next]\n * @param {Flags} [flags]\n * @param {Collections} [groups]\n */\nconst tr = (state, regexp, next, flags, groups) => state.tr(regexp, next, flags, groups);\n\n/**\n * @template T\n * @param {State} state\n * @param {string | string[]} input\n * @param {T | State} [next]\n * @param {Flags} [flags]\n * @param {Collections} [groups]\n */\nconst ts = (state, input, next, flags, groups) => state.ts(input, next, flags, groups);\n\n/**\n * @template T\n * @param {State} state\n * @param {string} input\n * @param {T | State} [next]\n * @param {Collections} [groups]\n * @param {Flags} [flags]\n */\nconst tt = (state, input, next, flags, groups) => state.tt(input, next, flags, groups);\n\n/******************************************************************************\nText Tokens\nIdentifiers for token outputs from the regexp scanner\n******************************************************************************/\n\n// A valid web domain token\nconst WORD = 'WORD'; // only contains a-z\nconst UWORD = 'UWORD'; // contains letters other than a-z, used for IDN\nconst ASCIINUMERICAL = 'ASCIINUMERICAL'; // contains a-z, 0-9\nconst ALPHANUMERICAL = 'ALPHANUMERICAL'; // contains numbers and letters other than a-z, used for IDN\n\n// Special case of word\nconst LOCALHOST = 'LOCALHOST';\n\n// Valid top-level domain, special case of WORD (see tlds.js)\nconst TLD = 'TLD';\n\n// Valid IDN TLD, special case of UWORD (see tlds.js)\nconst UTLD = 'UTLD';\n\n// The scheme portion of a web URI protocol. Supported types include: `mailto`,\n// `file`, and user-defined custom protocols. Limited to schemes that contain\n// only letters\nconst SCHEME = 'SCHEME';\n\n// Similar to SCHEME, except makes distinction for schemes that must always be\n// followed by `://`, not just `:`. Supported types include `http`, `https`,\n// `ftp`, `ftps`\nconst SLASH_SCHEME = 'SLASH_SCHEME';\n\n// Any sequence of digits 0-9\nconst NUM = 'NUM';\n\n// Any number of consecutive whitespace characters that are not newline\nconst WS = 'WS';\n\n// New line (unix style)\nconst NL = 'NL'; // \\n\n\n// Opening/closing bracket classes\n// TODO: Rename OPEN -> LEFT and CLOSE -> RIGHT in v5 to fit with Unicode names\n// Also rename angle brackes to LESSTHAN and GREATER THAN\nconst OPENBRACE = 'OPENBRACE'; // {\nconst CLOSEBRACE = 'CLOSEBRACE'; // }\nconst OPENBRACKET = 'OPENBRACKET'; // [\nconst CLOSEBRACKET = 'CLOSEBRACKET'; // ]\nconst OPENPAREN = 'OPENPAREN'; // (\nconst CLOSEPAREN = 'CLOSEPAREN'; // )\nconst OPENANGLEBRACKET = 'OPENANGLEBRACKET'; // <\nconst CLOSEANGLEBRACKET = 'CLOSEANGLEBRACKET'; // >\nconst FULLWIDTHLEFTPAREN = 'FULLWIDTHLEFTPAREN'; // (\nconst FULLWIDTHRIGHTPAREN = 'FULLWIDTHRIGHTPAREN'; // )\nconst LEFTCORNERBRACKET = 'LEFTCORNERBRACKET'; // 「\nconst RIGHTCORNERBRACKET = 'RIGHTCORNERBRACKET'; // 」\nconst LEFTWHITECORNERBRACKET = 'LEFTWHITECORNERBRACKET'; // 『\nconst RIGHTWHITECORNERBRACKET = 'RIGHTWHITECORNERBRACKET'; // 』\nconst FULLWIDTHLESSTHAN = 'FULLWIDTHLESSTHAN'; // <\nconst FULLWIDTHGREATERTHAN = 'FULLWIDTHGREATERTHAN'; // >\n\n// Various symbols\nconst AMPERSAND = 'AMPERSAND'; // &\nconst APOSTROPHE = 'APOSTROPHE'; // '\nconst ASTERISK = 'ASTERISK'; // *\nconst AT = 'AT'; // @\nconst BACKSLASH = 'BACKSLASH'; // \\\nconst BACKTICK = 'BACKTICK'; // `\nconst CARET = 'CARET'; // ^\nconst COLON = 'COLON'; // :\nconst COMMA = 'COMMA'; // ,\nconst DOLLAR = 'DOLLAR'; // $\nconst DOT = 'DOT'; // .\nconst EQUALS = 'EQUALS'; // =\nconst EXCLAMATION = 'EXCLAMATION'; // !\nconst HYPHEN = 'HYPHEN'; // -\nconst PERCENT = 'PERCENT'; // %\nconst PIPE = 'PIPE'; // |\nconst PLUS = 'PLUS'; // +\nconst POUND = 'POUND'; // #\nconst QUERY = 'QUERY'; // ?\nconst QUOTE = 'QUOTE'; // \"\nconst FULLWIDTHMIDDLEDOT = 'FULLWIDTHMIDDLEDOT'; // ・\n\nconst SEMI = 'SEMI'; // ;\nconst SLASH = 'SLASH'; // /\nconst TILDE = 'TILDE'; // ~\nconst UNDERSCORE = 'UNDERSCORE'; // _\n\n// Emoji symbol\nconst EMOJI$1 = 'EMOJI';\n\n// Default token - anything that is not one of the above\nconst SYM = 'SYM';\n\nvar tk = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tALPHANUMERICAL: ALPHANUMERICAL,\n\tAMPERSAND: AMPERSAND,\n\tAPOSTROPHE: APOSTROPHE,\n\tASCIINUMERICAL: ASCIINUMERICAL,\n\tASTERISK: ASTERISK,\n\tAT: AT,\n\tBACKSLASH: BACKSLASH,\n\tBACKTICK: BACKTICK,\n\tCARET: CARET,\n\tCLOSEANGLEBRACKET: CLOSEANGLEBRACKET,\n\tCLOSEBRACE: CLOSEBRACE,\n\tCLOSEBRACKET: CLOSEBRACKET,\n\tCLOSEPAREN: CLOSEPAREN,\n\tCOLON: COLON,\n\tCOMMA: COMMA,\n\tDOLLAR: DOLLAR,\n\tDOT: DOT,\n\tEMOJI: EMOJI$1,\n\tEQUALS: EQUALS,\n\tEXCLAMATION: EXCLAMATION,\n\tFULLWIDTHGREATERTHAN: FULLWIDTHGREATERTHAN,\n\tFULLWIDTHLEFTPAREN: FULLWIDTHLEFTPAREN,\n\tFULLWIDTHLESSTHAN: FULLWIDTHLESSTHAN,\n\tFULLWIDTHMIDDLEDOT: FULLWIDTHMIDDLEDOT,\n\tFULLWIDTHRIGHTPAREN: FULLWIDTHRIGHTPAREN,\n\tHYPHEN: HYPHEN,\n\tLEFTCORNERBRACKET: LEFTCORNERBRACKET,\n\tLEFTWHITECORNERBRACKET: LEFTWHITECORNERBRACKET,\n\tLOCALHOST: LOCALHOST,\n\tNL: NL,\n\tNUM: NUM,\n\tOPENANGLEBRACKET: OPENANGLEBRACKET,\n\tOPENBRACE: OPENBRACE,\n\tOPENBRACKET: OPENBRACKET,\n\tOPENPAREN: OPENPAREN,\n\tPERCENT: PERCENT,\n\tPIPE: PIPE,\n\tPLUS: PLUS,\n\tPOUND: POUND,\n\tQUERY: QUERY,\n\tQUOTE: QUOTE,\n\tRIGHTCORNERBRACKET: RIGHTCORNERBRACKET,\n\tRIGHTWHITECORNERBRACKET: RIGHTWHITECORNERBRACKET,\n\tSCHEME: SCHEME,\n\tSEMI: SEMI,\n\tSLASH: SLASH,\n\tSLASH_SCHEME: SLASH_SCHEME,\n\tSYM: SYM,\n\tTILDE: TILDE,\n\tTLD: TLD,\n\tUNDERSCORE: UNDERSCORE,\n\tUTLD: UTLD,\n\tUWORD: UWORD,\n\tWORD: WORD,\n\tWS: WS\n});\n\n// Note that these two Unicode ones expand into a really big one with Babel\nconst ASCII_LETTER = /[a-z]/;\nconst LETTER = /\\p{L}/u; // Any Unicode character with letter data type\nconst EMOJI = /\\p{Emoji}/u; // Any Unicode emoji character\nconst EMOJI_VARIATION$1 = /\\ufe0f/;\nconst DIGIT = /\\d/;\nconst SPACE = /\\s/;\n\nvar regexp = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tASCII_LETTER: ASCII_LETTER,\n\tDIGIT: DIGIT,\n\tEMOJI: EMOJI,\n\tEMOJI_VARIATION: EMOJI_VARIATION$1,\n\tLETTER: LETTER,\n\tSPACE: SPACE\n});\n\n/**\n\tThe scanner provides an interface that takes a string of text as input, and\n\toutputs an array of tokens instances that can be used for easy URL parsing.\n*/\n\nconst CR = '\\r'; // carriage-return character\nconst LF = '\\n'; // line-feed character\nconst EMOJI_VARIATION = '\\ufe0f'; // Variation selector, follows heart and others\nconst EMOJI_JOINER = '\\u200d'; // zero-width joiner\nconst OBJECT_REPLACEMENT = '\\ufffc'; // whitespace placeholder that sometimes appears in rich text editors\n\nlet tlds = null,\n utlds = null; // don't change so only have to be computed once\n\n/**\n * Scanner output token:\n * - `t` is the token name (e.g., 'NUM', 'EMOJI', 'TLD')\n * - `v` is the value of the token (e.g., '123', '❤️', 'com')\n * - `s` is the start index of the token in the original string\n * - `e` is the end index of the token in the original string\n * @typedef {{t: string, v: string, s: number, e: number}} Token\n */\n\n/**\n * @template T\n * @typedef {{ [collection: string]: T[] }} Collections\n */\n\n/**\n * Initialize the scanner character-based state machine for the given start\n * state\n * @param {[string, boolean][]} customSchemes List of custom schemes, where each\n * item is a length-2 tuple with the first element set to the string scheme, and\n * the second element set to `true` if the `://` after the scheme is optional\n */\nfunction init$2(customSchemes = []) {\n // Frequently used states (name argument removed during minification)\n /** @type Collections */\n const groups = {}; // of tokens\n State.groups = groups;\n /** @type State */\n const Start = new State();\n if (tlds == null) {\n tlds = decodeTlds(encodedTlds);\n }\n if (utlds == null) {\n utlds = decodeTlds(encodedUtlds);\n }\n\n // States for special URL symbols that accept immediately after start\n tt(Start, \"'\", APOSTROPHE);\n tt(Start, '{', OPENBRACE);\n tt(Start, '}', CLOSEBRACE);\n tt(Start, '[', OPENBRACKET);\n tt(Start, ']', CLOSEBRACKET);\n tt(Start, '(', OPENPAREN);\n tt(Start, ')', CLOSEPAREN);\n tt(Start, '<', OPENANGLEBRACKET);\n tt(Start, '>', CLOSEANGLEBRACKET);\n tt(Start, '(', FULLWIDTHLEFTPAREN);\n tt(Start, ')', FULLWIDTHRIGHTPAREN);\n tt(Start, '「', LEFTCORNERBRACKET);\n tt(Start, '」', RIGHTCORNERBRACKET);\n tt(Start, '『', LEFTWHITECORNERBRACKET);\n tt(Start, '』', RIGHTWHITECORNERBRACKET);\n tt(Start, '<', FULLWIDTHLESSTHAN);\n tt(Start, '>', FULLWIDTHGREATERTHAN);\n tt(Start, '&', AMPERSAND);\n tt(Start, '*', ASTERISK);\n tt(Start, '@', AT);\n tt(Start, '`', BACKTICK);\n tt(Start, '^', CARET);\n tt(Start, ':', COLON);\n tt(Start, ',', COMMA);\n tt(Start, '$', DOLLAR);\n tt(Start, '.', DOT);\n tt(Start, '=', EQUALS);\n tt(Start, '!', EXCLAMATION);\n tt(Start, '-', HYPHEN);\n tt(Start, '%', PERCENT);\n tt(Start, '|', PIPE);\n tt(Start, '+', PLUS);\n tt(Start, '#', POUND);\n tt(Start, '?', QUERY);\n tt(Start, '\"', QUOTE);\n tt(Start, '/', SLASH);\n tt(Start, ';', SEMI);\n tt(Start, '~', TILDE);\n tt(Start, '_', UNDERSCORE);\n tt(Start, '\\\\', BACKSLASH);\n tt(Start, '・', FULLWIDTHMIDDLEDOT);\n const Num = tr(Start, DIGIT, NUM, {\n [numeric]: true\n });\n tr(Num, DIGIT, Num);\n const Asciinumeric = tr(Num, ASCII_LETTER, ASCIINUMERICAL, {\n [asciinumeric]: true\n });\n const Alphanumeric = tr(Num, LETTER, ALPHANUMERICAL, {\n [alphanumeric]: true\n });\n\n // State which emits a word token\n const Word = tr(Start, ASCII_LETTER, WORD, {\n [ascii]: true\n });\n tr(Word, DIGIT, Asciinumeric);\n tr(Word, ASCII_LETTER, Word);\n tr(Asciinumeric, DIGIT, Asciinumeric);\n tr(Asciinumeric, ASCII_LETTER, Asciinumeric);\n\n // Same as previous, but specific to non-fsm.ascii alphabet words\n const UWord = tr(Start, LETTER, UWORD, {\n [alpha]: true\n });\n tr(UWord, ASCII_LETTER); // Non-accepting\n tr(UWord, DIGIT, Alphanumeric);\n tr(UWord, LETTER, UWord);\n tr(Alphanumeric, DIGIT, Alphanumeric);\n tr(Alphanumeric, ASCII_LETTER); // Non-accepting\n tr(Alphanumeric, LETTER, Alphanumeric); // Non-accepting\n\n // Whitespace jumps\n // Tokens of only non-newline whitespace are arbitrarily long\n // If any whitespace except newline, more whitespace!\n const Nl = tt(Start, LF, NL, {\n [whitespace]: true\n });\n const Cr = tt(Start, CR, WS, {\n [whitespace]: true\n });\n const Ws = tr(Start, SPACE, WS, {\n [whitespace]: true\n });\n tt(Start, OBJECT_REPLACEMENT, Ws);\n tt(Cr, LF, Nl); // \\r\\n\n tt(Cr, OBJECT_REPLACEMENT, Ws);\n tr(Cr, SPACE, Ws);\n tt(Ws, CR); // non-accepting state to avoid mixing whitespaces\n tt(Ws, LF); // non-accepting state to avoid mixing whitespaces\n tr(Ws, SPACE, Ws);\n tt(Ws, OBJECT_REPLACEMENT, Ws);\n\n // Emoji tokens. They are not grouped by the scanner except in cases where a\n // zero-width joiner is present\n const Emoji = tr(Start, EMOJI, EMOJI$1, {\n [emoji]: true\n });\n tt(Emoji, '#'); // no transition, emoji regex seems to match #\n tr(Emoji, EMOJI, Emoji);\n tt(Emoji, EMOJI_VARIATION, Emoji);\n // tt(Start, EMOJI_VARIATION, Emoji); // This one is sketchy\n\n const EmojiJoiner = tt(Emoji, EMOJI_JOINER);\n tt(EmojiJoiner, '#');\n tr(EmojiJoiner, EMOJI, Emoji);\n // tt(EmojiJoiner, EMOJI_VARIATION, Emoji); // also sketchy\n\n // Generates states for top-level domains\n // Note that this is most accurate when tlds are in alphabetical order\n const wordjr = [[ASCII_LETTER, Word], [DIGIT, Asciinumeric]];\n const uwordjr = [[ASCII_LETTER, null], [LETTER, UWord], [DIGIT, Alphanumeric]];\n for (let i = 0; i < tlds.length; i++) {\n fastts(Start, tlds[i], TLD, WORD, wordjr);\n }\n for (let i = 0; i < utlds.length; i++) {\n fastts(Start, utlds[i], UTLD, UWORD, uwordjr);\n }\n addToGroups(TLD, {\n tld: true,\n ascii: true\n }, groups);\n addToGroups(UTLD, {\n utld: true,\n alpha: true\n }, groups);\n\n // Collect the states generated by different protocols. NOTE: If any new TLDs\n // get added that are also protocols, set the token to be the same as the\n // protocol to ensure parsing works as expected.\n fastts(Start, 'file', SCHEME, WORD, wordjr);\n fastts(Start, 'mailto', SCHEME, WORD, wordjr);\n fastts(Start, 'http', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'https', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'ftp', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'ftps', SLASH_SCHEME, WORD, wordjr);\n addToGroups(SCHEME, {\n scheme: true,\n ascii: true\n }, groups);\n addToGroups(SLASH_SCHEME, {\n slashscheme: true,\n ascii: true\n }, groups);\n\n // Register custom schemes. Assumes each scheme is asciinumeric with hyphens\n customSchemes = customSchemes.sort((a, b) => a[0] > b[0] ? 1 : -1);\n for (let i = 0; i < customSchemes.length; i++) {\n const sch = customSchemes[i][0];\n const optionalSlashSlash = customSchemes[i][1];\n const flags = optionalSlashSlash ? {\n [scheme]: true\n } : {\n [slashscheme]: true\n };\n if (sch.indexOf('-') >= 0) {\n flags[domain] = true;\n } else if (!ASCII_LETTER.test(sch)) {\n flags[numeric] = true; // numbers only\n } else if (DIGIT.test(sch)) {\n flags[asciinumeric] = true;\n } else {\n flags[ascii] = true;\n }\n ts(Start, sch, sch, flags);\n }\n\n // Localhost token\n ts(Start, 'localhost', LOCALHOST, {\n ascii: true\n });\n\n // Set default transition for start state (some symbol)\n Start.jd = new State(SYM);\n return {\n start: Start,\n tokens: Object.assign({\n groups\n }, tk)\n };\n}\n\n/**\n\tGiven a string, returns an array of TOKEN instances representing the\n\tcomposition of that string.\n\n\t@method run\n\t@param {State} start scanner starting state\n\t@param {string} str input string to scan\n\t@return {Token[]} list of tokens, each with a type and value\n*/\nfunction run$1(start, str) {\n // State machine is not case sensitive, so input is tokenized in lowercased\n // form (still returns regular case). Uses selective `toLowerCase` because\n // lowercasing the entire string causes the length and character position to\n // vary in some non-English strings with V8-based runtimes.\n const iterable = stringToArray(str.replace(/[A-Z]/g, c => c.toLowerCase()));\n const charCount = iterable.length; // <= len if there are emojis, etc\n const tokens = []; // return value\n\n // cursor through the string itself, accounting for characters that have\n // width with length 2 such as emojis\n let cursor = 0;\n\n // Cursor through the array-representation of the string\n let charCursor = 0;\n\n // Tokenize the string\n while (charCursor < charCount) {\n let state = start;\n let nextState = null;\n let tokenLength = 0;\n let latestAccepting = null;\n let sinceAccepts = -1;\n let charsSinceAccepts = -1;\n while (charCursor < charCount && (nextState = state.go(iterable[charCursor]))) {\n state = nextState;\n\n // Keep track of the latest accepting state\n if (state.accepts()) {\n sinceAccepts = 0;\n charsSinceAccepts = 0;\n latestAccepting = state;\n } else if (sinceAccepts >= 0) {\n sinceAccepts += iterable[charCursor].length;\n charsSinceAccepts++;\n }\n tokenLength += iterable[charCursor].length;\n cursor += iterable[charCursor].length;\n charCursor++;\n }\n\n // Roll back to the latest accepting state\n cursor -= sinceAccepts;\n charCursor -= charsSinceAccepts;\n tokenLength -= sinceAccepts;\n\n // No more jumps, just make a new token from the last accepting one\n tokens.push({\n t: latestAccepting.t,\n // token type/name\n v: str.slice(cursor - tokenLength, cursor),\n // string value\n s: cursor - tokenLength,\n // start index\n e: cursor // end index (excluding)\n });\n }\n return tokens;\n}\n\n/**\n * Convert a String to an Array of characters, taking into account that some\n * characters like emojis take up two string indexes.\n *\n * Adapted from core-js (MIT license)\n * https://github.com/zloirock/core-js/blob/2d69cf5f99ab3ea3463c395df81e5a15b68f49d9/packages/core-js/internals/string-multibyte.js\n *\n * @function stringToArray\n * @param {string} str\n * @returns {string[]}\n */\nfunction stringToArray(str) {\n const result = [];\n const len = str.length;\n let index = 0;\n while (index < len) {\n let first = str.charCodeAt(index);\n let second;\n let char = first < 0xd800 || first > 0xdbff || index + 1 === len || (second = str.charCodeAt(index + 1)) < 0xdc00 || second > 0xdfff ? str[index] // single character\n : str.slice(index, index + 2); // two-index characters\n result.push(char);\n index += char.length;\n }\n return result;\n}\n\n/**\n * Fast version of ts function for when transition defaults are well known\n * @param {State} state\n * @param {string} input\n * @param {string} t\n * @param {string} defaultt\n * @param {[RegExp, State][]} jr\n * @returns {State}\n */\nfunction fastts(state, input, t, defaultt, jr) {\n let next;\n const len = input.length;\n for (let i = 0; i < len - 1; i++) {\n const char = input[i];\n if (state.j[char]) {\n next = state.j[char];\n } else {\n next = new State(defaultt);\n next.jr = jr.slice();\n state.j[char] = next;\n }\n state = next;\n }\n next = new State(t);\n next.jr = jr.slice();\n state.j[input[len - 1]] = next;\n return next;\n}\n\n/**\n * Converts a string of Top-Level Domain names encoded in update-tlds.js back\n * into a list of strings.\n * @param {str} encoded encoded TLDs string\n * @returns {str[]} original TLDs list\n */\nfunction decodeTlds(encoded) {\n const words = [];\n const stack = [];\n let i = 0;\n let digits = '0123456789';\n while (i < encoded.length) {\n let popDigitCount = 0;\n while (digits.indexOf(encoded[i + popDigitCount]) >= 0) {\n popDigitCount++; // encountered some digits, have to pop to go one level up trie\n }\n if (popDigitCount > 0) {\n words.push(stack.join('')); // whatever preceded the pop digits must be a word\n for (let popCount = parseInt(encoded.substring(i, i + popDigitCount), 10); popCount > 0; popCount--) {\n stack.pop();\n }\n i += popDigitCount;\n } else {\n stack.push(encoded[i]); // drop down a level into the trie\n i++;\n }\n }\n return words;\n}\n\n/**\n * An object where each key is a valid DOM Event Name such as `click` or `focus`\n * and each value is an event handler function.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/Element#events\n * @typedef {?{ [event: string]: Function }} EventListeners\n */\n\n/**\n * All formatted properties required to render a link, including `tagName`,\n * `attributes`, `content` and `eventListeners`.\n * @typedef {{ tagName: any, attributes: {[attr: string]: any}, content: string,\n * eventListeners: EventListeners }} IntermediateRepresentation\n */\n\n/**\n * Specify either an object described by the template type `O` or a function.\n *\n * The function takes a string value (usually the link's href attribute), the\n * link type (`'url'`, `'hashtag`', etc.) and an internal token representation\n * of the link. It should return an object of the template type `O`\n * @template O\n * @typedef {O | ((value: string, type: string, token: MultiToken) => O)} OptObj\n */\n\n/**\n * Specify either a function described by template type `F` or an object.\n *\n * Each key in the object should be a link type (`'url'`, `'hashtag`', etc.). Each\n * value should be a function with template type `F` that is called when the\n * corresponding link type is encountered.\n * @template F\n * @typedef {F | { [type: string]: F}} OptFn\n */\n\n/**\n * Specify either a value with template type `V`, a function that returns `V` or\n * an object where each value resolves to `V`.\n *\n * The function takes a string value (usually the link's href attribute), the\n * link type (`'url'`, `'hashtag`', etc.) and an internal token representation\n * of the link. It should return an object of the template type `V`\n *\n * For the object, each key should be a link type (`'url'`, `'hashtag`', etc.).\n * Each value should either have type `V` or a function that returns V. This\n * function similarly takes a string value and a token.\n *\n * Example valid types for `Opt`:\n *\n * ```js\n * 'hello'\n * (value, type, token) => 'world'\n * { url: 'hello', email: (value, token) => 'world'}\n * ```\n * @template V\n * @typedef {V | ((value: string, type: string, token: MultiToken) => V) | { [type: string]: V | ((value: string, token: MultiToken) => V) }} Opt\n */\n\n/**\n * See available options: https://linkify.js.org/docs/options.html\n * @typedef {{\n * \tdefaultProtocol?: string,\n * events?: OptObj,\n * \tformat?: Opt,\n * \tformatHref?: Opt,\n * \tnl2br?: boolean,\n * \ttagName?: Opt,\n * \ttarget?: Opt,\n * \trel?: Opt,\n * \tvalidate?: Opt,\n * \ttruncate?: Opt,\n * \tclassName?: Opt,\n * \tattributes?: OptObj<({ [attr: string]: any })>,\n * ignoreTags?: string[],\n * \trender?: OptFn<((ir: IntermediateRepresentation) => any)>\n * }} Opts\n */\n\n/**\n * @type Required\n */\nconst defaults = {\n defaultProtocol: 'http',\n events: null,\n format: noop,\n formatHref: noop,\n nl2br: false,\n tagName: 'a',\n target: null,\n rel: null,\n validate: true,\n truncate: Infinity,\n className: null,\n attributes: null,\n ignoreTags: [],\n render: null\n};\n\n/**\n * Utility class for linkify interfaces to apply specified\n * {@link Opts formatting and rendering options}.\n *\n * @param {Opts | Options} [opts] Option value overrides.\n * @param {(ir: IntermediateRepresentation) => any} [defaultRender] (For\n * internal use) default render function that determines how to generate an\n * HTML element based on a link token's derived tagName, attributes and HTML.\n * Similar to render option\n */\nfunction Options(opts, defaultRender = null) {\n let o = Object.assign({}, defaults);\n if (opts) {\n o = Object.assign(o, opts instanceof Options ? opts.o : opts);\n }\n\n // Ensure all ignored tags are uppercase\n const ignoredTags = o.ignoreTags;\n const uppercaseIgnoredTags = [];\n for (let i = 0; i < ignoredTags.length; i++) {\n uppercaseIgnoredTags.push(ignoredTags[i].toUpperCase());\n }\n /** @protected */\n this.o = o;\n if (defaultRender) {\n this.defaultRender = defaultRender;\n }\n this.ignoreTags = uppercaseIgnoredTags;\n}\nOptions.prototype = {\n o: defaults,\n /**\n * @type string[]\n */\n ignoreTags: [],\n /**\n * @param {IntermediateRepresentation} ir\n * @returns {any}\n */\n defaultRender(ir) {\n return ir;\n },\n /**\n * Returns true or false based on whether a token should be displayed as a\n * link based on the user options.\n * @param {MultiToken} token\n * @returns {boolean}\n */\n check(token) {\n return this.get('validate', token.toString(), token);\n },\n // Private methods\n\n /**\n * Resolve an option's value based on the value of the option and the given\n * params. If operator and token are specified and the target option is\n * callable, automatically calls the function with the given argument.\n * @template {keyof Opts} K\n * @param {K} key Name of option to use\n * @param {string} [operator] will be passed to the target option if it's a\n * function. If not specified, RAW function value gets returned\n * @param {MultiToken} [token] The token from linkify.tokenize\n * @returns {Opts[K] | any}\n */\n get(key, operator, token) {\n const isCallable = operator != null;\n let option = this.o[key];\n if (!option) {\n return option;\n }\n if (typeof option === 'object') {\n option = token.t in option ? option[token.t] : defaults[key];\n if (typeof option === 'function' && isCallable) {\n option = option(operator, token);\n }\n } else if (typeof option === 'function' && isCallable) {\n option = option(operator, token.t, token);\n }\n return option;\n },\n /**\n * @template {keyof Opts} L\n * @param {L} key Name of options object to use\n * @param {string} [operator]\n * @param {MultiToken} [token]\n * @returns {Opts[L] | any}\n */\n getObj(key, operator, token) {\n let obj = this.o[key];\n if (typeof obj === 'function' && operator != null) {\n obj = obj(operator, token.t, token);\n }\n return obj;\n },\n /**\n * Convert the given token to a rendered element that may be added to the\n * calling-interface's DOM\n * @param {MultiToken} token Token to render to an HTML element\n * @returns {any} Render result; e.g., HTML string, DOM element, React\n * Component, etc.\n */\n render(token) {\n const ir = token.render(this); // intermediate representation\n const renderFn = this.get('render', null, token) || this.defaultRender;\n return renderFn(ir, token.t, token);\n }\n};\nfunction noop(val) {\n return val;\n}\n\nvar options = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tOptions: Options,\n\tdefaults: defaults\n});\n\n/******************************************************************************\n\tMulti-Tokens\n\tTokens composed of arrays of TextTokens\n******************************************************************************/\n\n/**\n * @param {string} value\n * @param {Token[]} tokens\n */\nfunction MultiToken(value, tokens) {\n this.t = 'token';\n this.v = value;\n this.tk = tokens;\n}\n\n/**\n * Abstract class used for manufacturing tokens of text tokens. That is rather\n * than the value for a token being a small string of text, it's value an array\n * of text tokens.\n *\n * Used for grouping together URLs, emails, hashtags, and other potential\n * creations.\n * @class MultiToken\n * @property {string} t\n * @property {string} v\n * @property {Token[]} tk\n * @abstract\n */\nMultiToken.prototype = {\n isLink: false,\n /**\n * Return the string this token represents.\n * @return {string}\n */\n toString() {\n return this.v;\n },\n /**\n * What should the value for this token be in the `href` HTML attribute?\n * Returns the `.toString` value by default.\n * @param {string} [scheme]\n * @return {string}\n */\n toHref(scheme) {\n return this.toString();\n },\n /**\n * @param {Options} options Formatting options\n * @returns {string}\n */\n toFormattedString(options) {\n const val = this.toString();\n const truncate = options.get('truncate', val, this);\n const formatted = options.get('format', val, this);\n return truncate && formatted.length > truncate ? formatted.substring(0, truncate) + '…' : formatted;\n },\n /**\n *\n * @param {Options} options\n * @returns {string}\n */\n toFormattedHref(options) {\n return options.get('formatHref', this.toHref(options.get('defaultProtocol')), this);\n },\n /**\n * The start index of this token in the original input string\n * @returns {number}\n */\n startIndex() {\n return this.tk[0].s;\n },\n /**\n * The end index of this token in the original input string (up to this\n * index but not including it)\n * @returns {number}\n */\n endIndex() {\n return this.tk[this.tk.length - 1].e;\n },\n /**\n \tReturns an object of relevant values for this token, which includes keys\n \t* type - Kind of token ('url', 'email', etc.)\n \t* value - Original text\n \t* href - The value that should be added to the anchor tag's href\n \t\tattribute\n \t\t@method toObject\n \t@param {string} [protocol] `'http'` by default\n */\n toObject(protocol = defaults.defaultProtocol) {\n return {\n type: this.t,\n value: this.toString(),\n isLink: this.isLink,\n href: this.toHref(protocol),\n start: this.startIndex(),\n end: this.endIndex()\n };\n },\n /**\n *\n * @param {Options} options Formatting option\n */\n toFormattedObject(options) {\n return {\n type: this.t,\n value: this.toFormattedString(options),\n isLink: this.isLink,\n href: this.toFormattedHref(options),\n start: this.startIndex(),\n end: this.endIndex()\n };\n },\n /**\n * Whether this token should be rendered as a link according to the given options\n * @param {Options} options\n * @returns {boolean}\n */\n validate(options) {\n return options.get('validate', this.toString(), this);\n },\n /**\n * Return an object that represents how this link should be rendered.\n * @param {Options} options Formattinng options\n */\n render(options) {\n const token = this;\n const href = this.toHref(options.get('defaultProtocol'));\n const formattedHref = options.get('formatHref', href, this);\n const tagName = options.get('tagName', href, token);\n const content = this.toFormattedString(options);\n const attributes = {};\n const className = options.get('className', href, token);\n const target = options.get('target', href, token);\n const rel = options.get('rel', href, token);\n const attrs = options.getObj('attributes', href, token);\n const eventListeners = options.getObj('events', href, token);\n attributes.href = formattedHref;\n if (className) {\n attributes.class = className;\n }\n if (target) {\n attributes.target = target;\n }\n if (rel) {\n attributes.rel = rel;\n }\n if (attrs) {\n Object.assign(attributes, attrs);\n }\n return {\n tagName,\n attributes,\n content,\n eventListeners\n };\n }\n};\n\n/**\n * Create a new token that can be emitted by the parser state machine\n * @param {string} type readable type of the token\n * @param {object} props properties to assign or override, including isLink = true or false\n * @returns {new (value: string, tokens: Token[]) => MultiToken} new token class\n */\nfunction createTokenClass(type, props) {\n class Token extends MultiToken {\n constructor(value, tokens) {\n super(value, tokens);\n this.t = type;\n }\n }\n for (const p in props) {\n Token.prototype[p] = props[p];\n }\n Token.t = type;\n return Token;\n}\n\n/**\n\tRepresents a list of tokens making up a valid email address\n*/\nconst Email = createTokenClass('email', {\n isLink: true,\n toHref() {\n return 'mailto:' + this.toString();\n }\n});\n\n/**\n\tRepresents some plain text\n*/\nconst Text = createTokenClass('text');\n\n/**\n\tMulti-linebreak token - represents a line break\n\t@class Nl\n*/\nconst Nl = createTokenClass('nl');\n\n/**\n\tRepresents a list of text tokens making up a valid URL\n\t@class Url\n*/\nconst Url = createTokenClass('url', {\n isLink: true,\n /**\n \tLowercases relevant parts of the domain and adds the protocol if\n \trequired. Note that this will not escape unsafe HTML characters in the\n \tURL.\n \t\t@param {string} [scheme] default scheme (e.g., 'https')\n \t@return {string} the full href\n */\n toHref(scheme = defaults.defaultProtocol) {\n // Check if already has a prefix scheme\n return this.hasProtocol() ? this.v : `${scheme}://${this.v}`;\n },\n /**\n * Check whether this URL token has a protocol\n * @return {boolean}\n */\n hasProtocol() {\n const tokens = this.tk;\n return tokens.length >= 2 && tokens[0].t !== LOCALHOST && tokens[1].t === COLON;\n }\n});\n\nvar multi = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBase: MultiToken,\n\tEmail: Email,\n\tMultiToken: MultiToken,\n\tNl: Nl,\n\tText: Text,\n\tUrl: Url,\n\tcreateTokenClass: createTokenClass\n});\n\n/**\n\tNot exactly parser, more like the second-stage scanner (although we can\n\ttheoretically hotswap the code here with a real parser in the future... but\n\tfor a little URL-finding utility abstract syntax trees may be a little\n\toverkill).\n\n\tURL format: http://en.wikipedia.org/wiki/URI_scheme\n\tEmail format: http://en.wikipedia.org/wiki/EmailAddress (links to RFC in\n\treference)\n\n\t@module linkify\n\t@submodule parser\n\t@main run\n*/\n\nconst makeState = arg => new State(arg);\n\n/**\n * Generate the parser multi token-based state machine\n * @param {{ groups: Collections }} tokens\n */\nfunction init$1({\n groups\n}) {\n // Types of characters the URL can definitely end in\n const qsAccepting = groups.domain.concat([AMPERSAND, ASTERISK, AT, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, NUM, PERCENT, PIPE, PLUS, POUND, SLASH, SYM, TILDE, UNDERSCORE]);\n\n // Types of tokens that can follow a URL and be part of the query string\n // but cannot be the very last characters\n // Characters that cannot appear in the URL at all should be excluded\n const qsNonAccepting = [APOSTROPHE, COLON, COMMA, DOT, EXCLAMATION, PERCENT, QUERY, QUOTE, SEMI, OPENANGLEBRACKET, CLOSEANGLEBRACKET, OPENBRACE, CLOSEBRACE, CLOSEBRACKET, OPENBRACKET, OPENPAREN, CLOSEPAREN, FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN, LEFTCORNERBRACKET, RIGHTCORNERBRACKET, LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET, FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN];\n\n // For addresses without the mailto prefix\n // Tokens allowed in the localpart of the email\n const localpartAccepting = [AMPERSAND, APOSTROPHE, ASTERISK, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, OPENBRACE, CLOSEBRACE, PERCENT, PIPE, PLUS, POUND, QUERY, SLASH, SYM, TILDE, UNDERSCORE];\n\n // The universal starting state.\n /**\n * @type State\n */\n const Start = makeState();\n const Localpart = tt(Start, TILDE); // Local part of the email address\n ta(Localpart, localpartAccepting, Localpart);\n ta(Localpart, groups.domain, Localpart);\n const Domain = makeState(),\n Scheme = makeState(),\n SlashScheme = makeState();\n ta(Start, groups.domain, Domain); // parsed string ends with a potential domain name (A)\n ta(Start, groups.scheme, Scheme); // e.g., 'mailto'\n ta(Start, groups.slashscheme, SlashScheme); // e.g., 'http'\n\n ta(Domain, localpartAccepting, Localpart);\n ta(Domain, groups.domain, Domain);\n const LocalpartAt = tt(Domain, AT); // Local part of the email address plus @\n\n tt(Localpart, AT, LocalpartAt); // close to an email address now\n\n // Local part of an email address can be e.g. 'http' or 'mailto'\n tt(Scheme, AT, LocalpartAt);\n tt(SlashScheme, AT, LocalpartAt);\n const LocalpartDot = tt(Localpart, DOT); // Local part of the email address plus '.' (localpart cannot end in .)\n ta(LocalpartDot, localpartAccepting, Localpart);\n ta(LocalpartDot, groups.domain, Localpart);\n const EmailDomain = makeState();\n ta(LocalpartAt, groups.domain, EmailDomain); // parsed string starts with local email info + @ with a potential domain name\n ta(EmailDomain, groups.domain, EmailDomain);\n const EmailDomainDot = tt(EmailDomain, DOT); // domain followed by DOT\n ta(EmailDomainDot, groups.domain, EmailDomain);\n const Email$1 = makeState(Email); // Possible email address (could have more tlds)\n ta(EmailDomainDot, groups.tld, Email$1);\n ta(EmailDomainDot, groups.utld, Email$1);\n tt(LocalpartAt, LOCALHOST, Email$1);\n\n // Hyphen can jump back to a domain name\n const EmailDomainHyphen = tt(EmailDomain, HYPHEN); // parsed string starts with local email info + @ with a potential domain name\n tt(EmailDomainHyphen, HYPHEN, EmailDomainHyphen);\n ta(EmailDomainHyphen, groups.domain, EmailDomain);\n ta(Email$1, groups.domain, EmailDomain);\n tt(Email$1, DOT, EmailDomainDot);\n tt(Email$1, HYPHEN, EmailDomainHyphen);\n\n // Account for dots and hyphens. Hyphens are usually parts of domain names\n // (but not TLDs)\n const DomainHyphen = tt(Domain, HYPHEN); // domain followed by hyphen\n const DomainDot = tt(Domain, DOT); // domain followed by DOT\n tt(DomainHyphen, HYPHEN, DomainHyphen);\n ta(DomainHyphen, groups.domain, Domain);\n ta(DomainDot, localpartAccepting, Localpart);\n ta(DomainDot, groups.domain, Domain);\n const DomainDotTld = makeState(Url); // Simplest possible URL with no query string\n ta(DomainDot, groups.tld, DomainDotTld);\n ta(DomainDot, groups.utld, DomainDotTld);\n ta(DomainDotTld, groups.domain, Domain);\n ta(DomainDotTld, localpartAccepting, Localpart);\n tt(DomainDotTld, DOT, DomainDot);\n tt(DomainDotTld, HYPHEN, DomainHyphen);\n tt(DomainDotTld, AT, LocalpartAt);\n const DomainDotTldColon = tt(DomainDotTld, COLON); // URL followed by colon (potential port number here)\n const DomainDotTldColonPort = makeState(Url); // TLD followed by a port number\n ta(DomainDotTldColon, groups.numeric, DomainDotTldColonPort);\n\n // Long URL with optional port and maybe query string\n const Url$1 = makeState(Url);\n\n // URL with extra symbols at the end, followed by an opening bracket\n const UrlNonaccept = makeState(); // URL followed by some symbols (will not be part of the final URL)\n\n // Query strings\n ta(Url$1, qsAccepting, Url$1);\n ta(Url$1, qsNonAccepting, UrlNonaccept);\n ta(UrlNonaccept, qsAccepting, Url$1);\n ta(UrlNonaccept, qsNonAccepting, UrlNonaccept);\n\n // Become real URLs after `SLASH` or `COLON NUM SLASH`\n // Here works with or without scheme:// prefix\n tt(DomainDotTld, SLASH, Url$1);\n tt(DomainDotTldColonPort, SLASH, Url$1);\n\n // Note that domains that begin with schemes are treated slighly differently\n const SchemeColon = tt(Scheme, COLON); // e.g., 'mailto:'\n const SlashSchemeColon = tt(SlashScheme, COLON); // e.g., 'http:'\n const SlashSchemeColonSlash = tt(SlashSchemeColon, SLASH); // e.g., 'http:/'\n\n const UriPrefix = tt(SlashSchemeColonSlash, SLASH); // e.g., 'http://'\n\n // Scheme states can transition to domain states\n ta(Scheme, groups.domain, Domain);\n tt(Scheme, DOT, DomainDot);\n tt(Scheme, HYPHEN, DomainHyphen);\n ta(SlashScheme, groups.domain, Domain);\n tt(SlashScheme, DOT, DomainDot);\n tt(SlashScheme, HYPHEN, DomainHyphen);\n\n // Force URL with scheme prefix followed by anything sane\n ta(SchemeColon, groups.domain, Url$1);\n tt(SchemeColon, SLASH, Url$1);\n tt(SchemeColon, QUERY, Url$1);\n ta(UriPrefix, groups.domain, Url$1);\n ta(UriPrefix, qsAccepting, Url$1);\n tt(UriPrefix, SLASH, Url$1);\n const bracketPairs = [[OPENBRACE, CLOSEBRACE],\n // {}\n [OPENBRACKET, CLOSEBRACKET],\n // []\n [OPENPAREN, CLOSEPAREN],\n // ()\n [OPENANGLEBRACKET, CLOSEANGLEBRACKET],\n // <>\n [FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN],\n // ()\n [LEFTCORNERBRACKET, RIGHTCORNERBRACKET],\n // 「」\n [LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET],\n // 『』\n [FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN] // <>\n ];\n for (let i = 0; i < bracketPairs.length; i++) {\n const [OPEN, CLOSE] = bracketPairs[i];\n const UrlOpen = tt(Url$1, OPEN); // URL followed by open bracket\n\n // Continue not accepting for open brackets\n tt(UrlNonaccept, OPEN, UrlOpen);\n\n // URL that begins with an opening bracket, followed by a symbols.\n // Note that the final state can still be `UrlOpen` (if the URL has a\n // single opening bracket for some reason).\n const UrlOpenQ = makeState(Url);\n ta(UrlOpen, qsAccepting, UrlOpenQ);\n const UrlOpenSyms = makeState(); // UrlOpen followed by some symbols it cannot end it\n ta(UrlOpen, qsNonAccepting, UrlOpenSyms);\n\n // Closing bracket component. This character WILL be included in the URL.\n // Must come after qsNonAccepting (which includes all close-bracket tokens)\n // so that CLOSE -> Url wins over CLOSE -> UrlOpenSyms.\n tt(UrlOpen, CLOSE, Url$1);\n\n // URL that begins with an opening bracket, followed by some symbols\n ta(UrlOpenQ, qsAccepting, UrlOpenQ);\n ta(UrlOpenQ, qsNonAccepting, UrlOpenSyms);\n ta(UrlOpenSyms, qsAccepting, UrlOpenQ);\n ta(UrlOpenSyms, qsNonAccepting, UrlOpenSyms);\n\n // Close brace/bracket to become regular URL\n tt(UrlOpenQ, CLOSE, Url$1);\n tt(UrlOpenSyms, CLOSE, Url$1);\n }\n tt(Start, LOCALHOST, DomainDotTld); // localhost is a valid URL state\n tt(Start, NL, Nl); // single new line\n\n return {\n start: Start,\n tokens: tk\n };\n}\n\n/**\n * Run the parser state machine on a list of scanned string-based tokens to\n * create a list of multi tokens, each of which represents a URL, email address,\n * plain text, etc.\n *\n * @param {State} start parser start state\n * @param {string} input the original input used to generate the given tokens\n * @param {Token[]} tokens list of scanned tokens\n * @returns {MultiToken[]}\n */\nfunction run(start, input, tokens) {\n let len = tokens.length;\n let cursor = 0;\n let multis = [];\n let textTokens = [];\n while (cursor < len) {\n let state = start;\n let secondState = null;\n let nextState = null;\n let multiLength = 0;\n let latestAccepting = null;\n let sinceAccepts = -1;\n while (cursor < len && !(secondState = state.go(tokens[cursor].t))) {\n // Starting tokens with nowhere to jump to.\n // Consider these to be just plain text\n textTokens.push(tokens[cursor++]);\n }\n while (cursor < len && (nextState = secondState || state.go(tokens[cursor].t))) {\n // Get the next state\n secondState = null;\n state = nextState;\n\n // Keep track of the latest accepting state\n if (state.accepts()) {\n sinceAccepts = 0;\n latestAccepting = state;\n } else if (sinceAccepts >= 0) {\n sinceAccepts++;\n }\n cursor++;\n multiLength++;\n }\n if (sinceAccepts < 0) {\n // No accepting state was found, part of a regular text token add\n // the first text token to the text tokens array and try again from\n // the next\n cursor -= multiLength;\n if (cursor < len) {\n textTokens.push(tokens[cursor]);\n cursor++;\n }\n } else {\n // Accepting state!\n // First close off the textTokens (if available)\n if (textTokens.length > 0) {\n multis.push(initMultiToken(Text, input, textTokens));\n textTokens = [];\n }\n\n // Roll back to the latest accepting state\n cursor -= sinceAccepts;\n multiLength -= sinceAccepts;\n\n // Create a new multitoken\n const Multi = latestAccepting.t;\n const subtokens = tokens.slice(cursor - multiLength, cursor);\n multis.push(initMultiToken(Multi, input, subtokens));\n }\n }\n\n // Finally close off the textTokens (if available)\n if (textTokens.length > 0) {\n multis.push(initMultiToken(Text, input, textTokens));\n }\n return multis;\n}\n\n/**\n * Utility function for instantiating a new multitoken with all the relevant\n * fields during parsing.\n * @param {new (value: string, tokens: Token[]) => MultiToken} Multi class to instantiate\n * @param {string} input original input string\n * @param {Token[]} tokens consecutive tokens scanned from input string\n * @returns {MultiToken}\n */\nfunction initMultiToken(Multi, input, tokens) {\n const startIdx = tokens[0].s;\n const endIdx = tokens[tokens.length - 1].e;\n const value = input.slice(startIdx, endIdx);\n return new Multi(value, tokens);\n}\n\nconst warn = typeof console !== 'undefined' && console && console.warn || (() => {});\nconst warnAdvice = 'until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.';\n\n// Side-effect initialization state\nconst INIT = {\n scanner: null,\n parser: null,\n tokenQueue: [],\n pluginQueue: [],\n customSchemes: [],\n initialized: false\n};\n\n/**\n * @typedef {{\n * \tstart: State,\n * \ttokens: { groups: Collections } & typeof tk\n * }} ScannerInit\n */\n\n/**\n * @typedef {{\n * \tstart: State,\n * \ttokens: typeof multi\n * }} ParserInit\n */\n\n/**\n * @typedef {(arg: { scanner: ScannerInit }) => void} TokenPlugin\n */\n\n/**\n * @typedef {(arg: { scanner: ScannerInit, parser: ParserInit }) => void} Plugin\n */\n\n/**\n * De-register all plugins and reset the internal state-machine. Used for\n * testing; not required in practice.\n * @private\n */\nfunction reset() {\n State.groups = {};\n INIT.scanner = null;\n INIT.parser = null;\n INIT.tokenQueue = [];\n INIT.pluginQueue = [];\n INIT.customSchemes = [];\n INIT.initialized = false;\n return INIT;\n}\n\n/**\n * Register a token plugin to allow the scanner to recognize additional token\n * types before the parser state machine is constructed from the results.\n * @param {string} name of plugin to register\n * @param {TokenPlugin} plugin function that accepts the scanner state machine\n * and available scanner tokens and collections and extends the state machine to\n * recognize additional tokens or groups.\n */\nfunction registerTokenPlugin(name, plugin) {\n if (typeof plugin !== 'function') {\n throw new Error(`linkifyjs: Invalid token plugin ${plugin} (expects function)`);\n }\n for (let i = 0; i < INIT.tokenQueue.length; i++) {\n if (name === INIT.tokenQueue[i][0]) {\n warn(`linkifyjs: token plugin \"${name}\" already registered - will be overwritten`);\n INIT.tokenQueue[i] = [name, plugin];\n return;\n }\n }\n INIT.tokenQueue.push([name, plugin]);\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register token plugin \"${name}\" ${warnAdvice}`);\n }\n}\n\n/**\n * Register a linkify plugin\n * @param {string} name of plugin to register\n * @param {Plugin} plugin function that accepts the parser state machine and\n * extends the parser to recognize additional link types\n */\nfunction registerPlugin(name, plugin) {\n if (typeof plugin !== 'function') {\n throw new Error(`linkifyjs: Invalid plugin ${plugin} (expects function)`);\n }\n for (let i = 0; i < INIT.pluginQueue.length; i++) {\n if (name === INIT.pluginQueue[i][0]) {\n warn(`linkifyjs: plugin \"${name}\" already registered - will be overwritten`);\n INIT.pluginQueue[i] = [name, plugin];\n return;\n }\n }\n INIT.pluginQueue.push([name, plugin]);\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register plugin \"${name}\" ${warnAdvice}`);\n }\n}\n\n/**\n * Detect URLs with the following additional protocol. Anything with format\n * \"protocol://...\" will be considered a link. If `optionalSlashSlash` is set to\n * `true`, anything with format \"protocol:...\" will be considered a link.\n * @param {string} scheme\n * @param {boolean} [optionalSlashSlash]\n */\nfunction registerCustomProtocol(scheme, optionalSlashSlash = false) {\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register custom scheme \"${scheme}\" ${warnAdvice}`);\n }\n if (!/^[0-9a-z]+(-[0-9a-z]+)*$/.test(scheme)) {\n throw new Error(`linkifyjs: incorrect scheme format.\n1. Must only contain digits, lowercase ASCII letters or \"-\"\n2. Cannot start or end with \"-\"\n3. \"-\" cannot repeat`);\n }\n INIT.customSchemes.push([scheme, optionalSlashSlash]);\n}\n\n/**\n * Initialize the linkify state machine. Called automatically the first time\n * linkify is called on a string, but may be called manually as well.\n */\nfunction init() {\n // Initialize scanner state machine and plugins\n INIT.scanner = init$2(INIT.customSchemes);\n for (let i = 0; i < INIT.tokenQueue.length; i++) {\n INIT.tokenQueue[i][1]({\n scanner: INIT.scanner\n });\n }\n\n // Initialize parser state machine and plugins\n INIT.parser = init$1(INIT.scanner.tokens);\n for (let i = 0; i < INIT.pluginQueue.length; i++) {\n INIT.pluginQueue[i][1]({\n scanner: INIT.scanner,\n parser: INIT.parser\n });\n }\n INIT.initialized = true;\n return INIT;\n}\n\n/**\n * Parse a string into tokens that represent linkable and non-linkable sub-components\n * @param {string} str\n * @return {MultiToken[]} tokens\n */\nfunction tokenize(str) {\n if (!INIT.initialized) {\n init();\n }\n return run(INIT.parser.start, str, run$1(INIT.scanner.start, str));\n}\ntokenize.scan = run$1; // for testing\n\n/**\n * Find a list of linkable items in the given string.\n * @param {string} str string to find links in\n * @param {string | Opts} [type] either formatting options or specific type of\n * links to find, e.g., 'url' or 'email'\n * @param {Opts} [opts] formatting options for final output. Cannot be specified\n * if opts already provided in `type` argument\n */\nfunction find(str, type = null, opts = null) {\n if (type && typeof type === 'object') {\n if (opts) {\n throw Error(`linkifyjs: Invalid link type ${type}; must be a string`);\n }\n opts = type;\n type = null;\n }\n const options = new Options(opts);\n const tokens = tokenize(str);\n const filtered = [];\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n if (token.isLink && (!type || token.t === type) && options.check(token)) {\n filtered.push(token.toFormattedObject(options));\n }\n }\n return filtered;\n}\n\n/**\n * Is the given string valid linkable text of some sort. Note that this does not\n * trim the text for you.\n *\n * Optionally pass in a second `type` param, which is the type of link to test\n * for.\n *\n * For example,\n *\n * linkify.test(str, 'email');\n *\n * Returns `true` if str is a valid email.\n * @param {string} str string to test for links\n * @param {string} [type] optional specific link type to look for\n * @returns boolean true/false\n */\nfunction test(str, type = null) {\n const tokens = tokenize(str);\n return tokens.length === 1 && tokens[0].isLink && (!type || tokens[0].t === type);\n}\n\nexport { MultiToken, Options, State, createTokenClass, find, init, multi, options, regexp, registerCustomProtocol, registerPlugin, registerTokenPlugin, reset, stringToArray, test, multi as text, tokenize };\n","import escapeHTML from \"escape-html\";\nimport { Options, tokenize } from \"linkifyjs\";\nfunction linkifyString(str) {\n const options = new Options({\n defaultProtocol: \"https\",\n target: \"_blank\",\n className: \"external linkified\",\n attributes: {\n rel: \"nofollow noopener noreferrer\"\n }\n }, defaultRender);\n const tokens = tokenize(str);\n const result = [];\n for (const token of tokens) {\n if (token.t === \"nl\" && options.get(\"nl2br\")) {\n result.push(\"
    \\n\");\n } else if (!token.isLink || !options.check(token)) {\n result.push(escapeHTML(token.toString()));\n } else {\n result.push(options.render(token));\n }\n }\n return result.join(\"\");\n}\nfunction escapeAttr(href) {\n return href.replace(/\"/g, \""\");\n}\nfunction attributesToString(attributes) {\n const result = [];\n for (const attr in attributes) {\n const val = attributes[attr] + \"\";\n result.push(`${attr}=\"${escapeAttr(val)}\"`);\n }\n return result.join(\" \");\n}\nfunction defaultRender({ tagName, attributes, content }) {\n return `<${tagName} ${attributesToString(attributes)}>${escapeHTML(content)}`;\n}\nconst directive = function(el, { value }) {\n if (value?.linkify === true) {\n el.innerHTML = linkifyString(value.text);\n }\n};\nexport {\n directive as default\n};\n//# sourceMappingURL=index.mjs.map\n","import { defineComponent, inject, withDirectives, openBlock, createElementBlock, createTextVNode, toDisplayString, unref } from \"vue\";\nimport directive from \"../directives/Linkify/index.mjs\";\nconst _hoisted_1 = [\"title\"];\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppSidebarHeader\",\n props: {\n name: {},\n title: {},\n linkify: { type: Boolean }\n },\n setup(__props) {\n const headerRef = inject(\"NcAppSidebar:header:ref\");\n return (_ctx, _cache) => {\n return withDirectives((openBlock(), createElementBlock(\"h2\", {\n ref_key: \"headerRef\",\n ref: headerRef,\n tabindex: \"-1\",\n title: __props.title\n }, [\n createTextVNode(toDisplayString(__props.name), 1)\n ], 8, _hoisted_1)), [\n [unref(directive), { text: __props.name, linkify: __props.linkify }]\n ]);\n };\n }\n});\nexport {\n _sfc_main as _\n};\n//# sourceMappingURL=NcAppSidebarHeader.vue_vue_type_script_setup_true_lang-C-QhdyiN.mjs.map\n","import '../assets/NcAppSidebar-dHtSShIl.css';\nimport { vOnClickOutside } from \"@vueuse/components\";\nimport { createFocusTrap } from \"focus-trap\";\nimport { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode, defineComponent, useModel, normalizeClass, unref, createVNode, withCtx, mergeModels, resolveComponent, withKeys, withModifiers, Fragment, renderList, createBlock, renderSlot, resolveDirective, Transition, withDirectives, Teleport, normalizeStyle, vShow, createTextVNode, warn, ref, provide } from \"vue\";\nimport { I as IconArrowRight } from \"./ArrowRight-B1ncAhus.mjs\";\nimport { I as IconClose } from \"./Close-CuhcJnX2.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { getCanonicalLocale } from \"@nextcloud/l10n\";\nimport { _ as _sfc_main$6 } from \"./NcVNodes.vue_vue_type_script_lang-BqUHinRZ.mjs\";\nimport { i as isLegacy34 } from \"./legacy-BoqDmOCa.mjs\";\nimport { useIsSmallMobile } from \"../composables/useIsMobile/index.mjs\";\nimport directive from \"../directives/Focus/index.mjs\";\nimport { r as register, V as t15, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { g as getTrapStack } from \"./focusTrap-HJQ4pqHV.mjs\";\nimport { i as isSlotPopulated, N as NcActions } from \"./NcActions-CUmcZ3C3.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { _ as _sfc_main$7 } from \"./NcAppSidebarHeader.vue_vue_type_script_setup_true_lang-C-QhdyiN.mjs\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { C as CONTENT_SELECTOR_KEY } from \"./constants-Ciwvl5xb.mjs\";\nimport { N as NcEmptyContent } from \"./NcEmptyContent-CGAPqk4S.mjs\";\nimport { N as NcLoadingIcon } from \"./NcLoadingIcon-BOVpFVQz.mjs\";\nconst _sfc_main$5 = {\n name: \"DockRightIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$5 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$3 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$3 = { d: \"M20 4H4A2 2 0 0 0 2 6V18A2 2 0 0 0 4 20H20A2 2 0 0 0 22 18V6A2 2 0 0 0 20 4M15 18H4V6H15Z\" };\nconst _hoisted_4$3 = { key: 0 };\nfunction _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon dock-right-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$3, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$3, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$3))\n ], 16, _hoisted_1$5);\n}\nconst IconDockRight = /* @__PURE__ */ _export_sfc(_sfc_main$5, [[\"render\", _sfc_render$4]]);\nconst _sfc_main$4 = {\n name: \"StarIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$4 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$2 = { d: \"M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z\" };\nconst _hoisted_4$2 = { key: 0 };\nfunction _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon star-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$2, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$2, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$2))\n ], 16, _hoisted_1$4);\n}\nconst IconStar = /* @__PURE__ */ _export_sfc(_sfc_main$4, [[\"render\", _sfc_render$3]]);\nconst _sfc_main$3 = {\n name: \"StarOutlineIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$3 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$1 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$1 = { d: \"M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z\" };\nconst _hoisted_4$1 = { key: 0 };\nfunction _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon star-outline-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$1, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$1, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$1))\n ], 16, _hoisted_1$3);\n}\nconst IconStarOutline = /* @__PURE__ */ _export_sfc(_sfc_main$3, [[\"render\", _sfc_render$2]]);\nconst _hoisted_1$2 = [\"aria-selected\", \"tabindex\"];\nconst _sfc_main$2 = /* @__PURE__ */ defineComponent({\n __name: \"NcAppSidebarTabsButton\",\n props: /* @__PURE__ */ mergeModels({\n tab: {}\n }, {\n \"selected\": { type: Boolean, ...{ required: true } },\n \"selectedModifiers\": {}\n }),\n emits: [\"update:selected\"],\n setup(__props) {\n const selected = useModel(__props, \"selected\");\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"button\", {\n class: normalizeClass([\"button-vue\", [_ctx.$style.sidebarTabsButton, {\n [_ctx.$style.sidebarTabsButton_selected]: selected.value,\n [_ctx.$style.sidebarTabsButton_legacy]: unref(isLegacy34)\n }]]),\n role: \"tab\",\n \"aria-selected\": selected.value,\n tabindex: selected.value ? 0 : -1,\n onClick: _cache[0] || (_cache[0] = ($event) => selected.value = true)\n }, [\n createElementVNode(\"span\", {\n class: normalizeClass(_ctx.$style.sidebarTabsButton__icon)\n }, [\n createVNode(_sfc_main$6, {\n vnodes: __props.tab.renderIcon()\n }, {\n default: withCtx(() => [\n createElementVNode(\"span\", {\n class: normalizeClass([_ctx.$style.sidebarTabsButton__legacyIcon, __props.tab.icon])\n }, null, 2)\n ]),\n _: 1\n }, 8, [\"vnodes\"])\n ], 2),\n createElementVNode(\"span\", {\n class: normalizeClass(_ctx.$style.sidebarTabsButton__name)\n }, toDisplayString(__props.tab.name), 3)\n ], 10, _hoisted_1$2);\n };\n }\n});\nconst sidebarTabsButton = \"_sidebarTabsButton_6hxfz\";\nconst sidebarTabsButton_legacy = \"_sidebarTabsButton_legacy_Qp20k\";\nconst sidebarTabsButton_selected = \"_sidebarTabsButton_selected_eBHM-\";\nconst sidebarTabsButton__name = \"_sidebarTabsButton__name_YlW5S\";\nconst sidebarTabsButton__icon = \"_sidebarTabsButton__icon_MPS-D\";\nconst sidebarTabsButton__legacyIcon = \"_sidebarTabsButton__legacyIcon_rzPOu\";\nconst style0 = {\n \"material-design-icon\": \"_material-design-icon_m4vbX\",\n sidebarTabsButton,\n sidebarTabsButton_legacy,\n sidebarTabsButton_selected,\n sidebarTabsButton__name,\n sidebarTabsButton__icon,\n sidebarTabsButton__legacyIcon\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcAppSidebarTabsButton = /* @__PURE__ */ _export_sfc(_sfc_main$2, [[\"__cssModules\", cssModules]]);\nconst _sfc_main$1 = {\n name: \"NcAppSidebarTabs\",\n components: {\n NcAppSidebarTabsButton\n },\n provide() {\n return {\n registerTab: this.registerTab,\n unregisterTab: this.unregisterTab,\n // Getter as an alternative to Vue 2.7 computed(() => this.activeTab)\n getActiveTab: () => this.activeTab,\n // Used to check whether the tab header is shown so the tabs can reference the tab header for `aria-labelledby` or not\n isTablistShown: () => this.hasMultipleTabs\n };\n },\n props: {\n /**\n * Id of the tab to activate\n */\n active: {\n type: String,\n default: \"\"\n },\n /**\n * Force the tab navigation to display even if there is only one tab\n */\n forceTabs: {\n type: Boolean,\n default: false\n }\n },\n emits: [\"update:active\"],\n data(props) {\n return {\n /**\n * Tab descriptions from the passed NcSidebarTab components' props to build the tab navbar from.\n */\n tabs: [],\n /**\n * Local active (open) tab's ID. It allows to use component without v-model:active\n */\n activeTab: props.active,\n isLegacy34\n };\n },\n computed: {\n /**\n * Has multiple tabs. If only one tab - its content is shown without navigation\n *\n * @return {boolean}\n */\n hasMultipleTabs() {\n return this.tabs.length > 1;\n },\n showForSingleTab() {\n return this.forceTabs && this.tabs.length === 1;\n },\n currentTabIndex() {\n return this.tabs.findIndex((tab) => tab.id === this.activeTab);\n }\n },\n watch: {\n tabs() {\n if (this.active) {\n this.updateActive();\n }\n },\n active(active) {\n if (active !== this.activeTab) {\n this.updateActive();\n }\n }\n },\n methods: {\n /**\n * Set the current active tab\n *\n * @param {string} id the id of the tab\n */\n setActive(id) {\n this.activeTab = id;\n this.$emit(\"update:active\", this.activeTab);\n },\n /**\n * Focus the previous tab\n * and emit to the parent component\n */\n focusPreviousTab() {\n if (this.currentTabIndex > 0) {\n this.setActive(this.tabs[this.currentTabIndex - 1].id);\n }\n this.focusActiveTab();\n },\n /**\n * Focus the next tab\n * and emit to the parent component\n */\n focusNextTab() {\n if (this.currentTabIndex < this.tabs.length - 1) {\n this.setActive(this.tabs[this.currentTabIndex + 1].id);\n }\n this.focusActiveTab();\n },\n /**\n * Focus the first tab\n * and emit to the parent component\n */\n focusFirstTab() {\n this.setActive(this.tabs[0].id);\n this.focusActiveTab();\n },\n /**\n * Focus the last tab\n * and emit to the parent component\n */\n focusLastTab() {\n this.setActive(this.tabs[this.tabs.length - 1].id);\n this.focusActiveTab();\n },\n /**\n * Focus the current active tab\n */\n focusActiveTab() {\n this.$el.querySelector(`#tab-button-${this.activeTab}`).focus();\n },\n /**\n * Focus the content on tab\n * see aria accessibility guidelines\n */\n focusActiveTabContent() {\n this.$el.querySelector(\"#tab-\" + this.activeTab).focus();\n },\n /**\n * Update the current active tab\n */\n updateActive() {\n this.activeTab = this.active && this.tabs.some(({ id }) => id === this.active) ? this.active : this.tabs[0]?.id ?? \"\";\n },\n /**\n * Register child tab in the tabs\n *\n * @param {object} tab child tab passed to slot\n */\n registerTab(tab) {\n this.tabs.push(tab);\n this.tabs.sort((a, b) => {\n if (a.order === b.order) {\n return a.name.localeCompare(b.name, [getCanonicalLocale()]);\n }\n return a.order - b.order;\n });\n this.updateActive();\n },\n /**\n * Unregister child tab from the tabs\n *\n * @param {string} id tab's id\n */\n unregisterTab(id) {\n const tabIndex = this.tabs.findIndex((tab) => tab.id === id);\n if (tabIndex !== -1) {\n this.tabs.splice(tabIndex, 1);\n }\n if (this.activeTab === id) {\n this.updateActive();\n }\n }\n }\n};\nconst _hoisted_1$1 = { class: \"app-sidebar-tabs\" };\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcAppSidebarTabsButton = resolveComponent(\"NcAppSidebarTabsButton\");\n return openBlock(), createElementBlock(\"div\", _hoisted_1$1, [\n $options.hasMultipleTabs || $options.showForSingleTab ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n role: \"tablist\",\n class: normalizeClass([\"app-sidebar-tabs__nav\", { \"app-sidebar-tabs__nav--legacy\": $data.isLegacy34 }]),\n onKeydown: [\n _cache[0] || (_cache[0] = withKeys(withModifiers((...args) => $options.focusPreviousTab && $options.focusPreviousTab(...args), [\"exact\", \"prevent\", \"stop\"]), [\"left\"])),\n _cache[1] || (_cache[1] = withKeys(withModifiers((...args) => $options.focusNextTab && $options.focusNextTab(...args), [\"exact\", \"prevent\", \"stop\"]), [\"right\"])),\n _cache[2] || (_cache[2] = withKeys(withModifiers((...args) => $options.focusActiveTabContent && $options.focusActiveTabContent(...args), [\"exact\", \"prevent\", \"stop\"]), [\"tab\"])),\n _cache[3] || (_cache[3] = withKeys(withModifiers((...args) => $options.focusFirstTab && $options.focusFirstTab(...args), [\"exact\", \"prevent\", \"stop\"]), [\"home\"])),\n _cache[4] || (_cache[4] = withKeys(withModifiers((...args) => $options.focusLastTab && $options.focusLastTab(...args), [\"exact\", \"prevent\", \"stop\"]), [\"end\"])),\n _cache[5] || (_cache[5] = withKeys(withModifiers((...args) => $options.focusFirstTab && $options.focusFirstTab(...args), [\"exact\", \"prevent\", \"stop\"]), [\"page-up\"])),\n _cache[6] || (_cache[6] = withKeys(withModifiers((...args) => $options.focusLastTab && $options.focusLastTab(...args), [\"exact\", \"prevent\", \"stop\"]), [\"page-down\"]))\n ]\n }, [\n (openBlock(true), createElementBlock(Fragment, null, renderList($data.tabs, (tab) => {\n return openBlock(), createBlock(_component_NcAppSidebarTabsButton, {\n id: `tab-button-${tab.id}`,\n key: tab.id,\n class: \"app-sidebar-tabs__tab\",\n \"aria-controls\": `tab-${tab.id}`,\n selected: $data.activeTab === tab.id,\n tab,\n \"onUpdate:selected\": ($event) => $options.setActive(tab.id)\n }, null, 8, [\"id\", \"aria-controls\", \"selected\", \"tab\", \"onUpdate:selected\"]);\n }), 128))\n ], 34)) : createCommentVNode(\"\", true),\n createElementVNode(\"div\", {\n class: normalizeClass([\"app-sidebar-tabs__content\", { \"app-sidebar-tabs__content--multiple\": $options.hasMultipleTabs }])\n }, [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true)\n ], 2)\n ]);\n}\nconst NcAppSidebarTabs = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1], [\"__scopeId\", \"data-v-e74d1502\"]]);\nregister(t15);\nconst _sfc_main = {\n name: \"NcAppSidebar\",\n components: {\n NcActions,\n NcAppSidebarHeader: _sfc_main$7,\n NcAppSidebarTabs,\n NcButton,\n NcLoadingIcon,\n NcEmptyContent,\n IconArrowRight,\n IconClose,\n IconDockRight,\n IconStar,\n IconStarOutline\n },\n directives: {\n Focus: directive,\n /** @type {import('vue').ObjectDirective} */\n ClickOutside: vOnClickOutside\n },\n inject: {\n ncContentSelector: {\n from: CONTENT_SELECTOR_KEY,\n default: void 0\n }\n },\n props: {\n /**\n * The active tab\n */\n active: {\n type: String,\n default: \"\"\n },\n /**\n * Main text of the sidebar\n */\n name: {\n type: String,\n required: true\n },\n /**\n * Allow to edit the sidebar name.\n */\n nameEditable: {\n type: Boolean,\n default: false\n },\n /**\n * Placeholder in the edit field if the name is editable.\n */\n namePlaceholder: {\n type: String,\n default: \"\"\n },\n /**\n * Secondary name of the sidebar (subline)\n */\n subname: {\n type: String,\n default: \"\"\n },\n /**\n * Title to display for the subname.\n */\n subtitle: {\n type: String,\n default: \"\"\n },\n /**\n * Url to the top header background image\n * Applied with css\n */\n background: {\n type: String,\n default: \"\"\n },\n /**\n * Enable the favourite icon if not null\n * See fired events\n */\n starred: {\n type: Boolean,\n default: null\n },\n /**\n * Show loading spinner instead of the star icon\n */\n starLoading: {\n type: Boolean,\n default: false\n },\n /**\n * Show loading spinner instead of tabs\n */\n loading: {\n type: Boolean,\n default: false\n },\n /**\n * Display the sidebar in compact mode\n */\n compact: {\n type: Boolean,\n default: false\n },\n /**\n * Only display close button and default slot content.\n * Don't display other header content and primary and secondary actions.\n * Useful when showing the EmptyContent component as content.\n */\n empty: {\n type: Boolean,\n default: false\n },\n /**\n * Force the actions to display in a three dot menu\n */\n forceMenu: {\n type: Boolean,\n default: false\n },\n /**\n * Force the tab navigation to display even if there is only one tab\n */\n forceTabs: {\n type: Boolean,\n default: false\n },\n /**\n * Linkify the name\n */\n linkifyName: {\n type: Boolean,\n default: false\n },\n /**\n * Title to display for the name.\n * Can be set to the same text in case it's too long.\n */\n title: {\n type: String,\n default: \"\"\n },\n /**\n * Allow to conditionally show the sidebar\n * You can also use `v-if` on the sidebar, but using the open prop allow to keep\n * the sidebar inside the DOM for performance if it is opened and closed multiple times.\n *\n * When using the `open` property to close the sidebar a built-in toggle button will be shown to reopen it,\n * similar to the app navigation. You can remove this button with the `no-toggle` prop.\n */\n open: {\n type: Boolean,\n default: true\n },\n /**\n * Custom classes to assign to the sidebar toggle button.\n * If needed this can be used to assign styles to the button using `:deep()` selector.\n */\n toggleClasses: {\n type: [String, Array, Object],\n default: \"\"\n },\n /**\n * Custom attrs to assign to the sidebar toggle button.\n */\n toggleAttrs: {\n type: Object,\n default: void 0\n },\n /**\n * Do not add the built-in toggle button with `open` prop.\n */\n noToggle: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n \"close\",\n \"closed\",\n \"opened\",\n // 'figureClick', not emitted on purpose to make \"hasFigureClickListener\" work\n \"update:active\",\n \"update:name\",\n \"update:nameEditable\",\n \"update:open\",\n \"update:starred\",\n \"submitName\",\n \"dismissEditing\"\n ],\n setup() {\n const headerRef = ref(null);\n provide(\"NcAppSidebar:header:ref\", headerRef);\n return {\n uid: createElementId(),\n isMobile: useIsSmallMobile(),\n headerRef\n };\n },\n data() {\n return {\n changeNameTranslated: t(\"Change name\"),\n closeTranslated: t(\"Close sidebar\"),\n favoriteTranslated: t(\"Favorite\"),\n isStarred: this.starred,\n focusTrap: null,\n elementToReturnFocus: null\n };\n },\n computed: {\n canStar() {\n return this.isStarred !== null;\n },\n hasFigureClickListener() {\n return !!this.$attrs.onFigureClick;\n }\n },\n watch: {\n starred() {\n this.isStarred = this.starred;\n },\n isMobile() {\n this.toggleFocusTrap();\n },\n open() {\n this.checkToggleButtonContainerAvailability();\n }\n },\n created() {\n this.preserveElementToReturnFocus();\n this.checkToggleButtonContainerAvailability();\n },\n beforeUnmount() {\n this.$emit(\"closed\");\n this.focusTrap?.deactivate();\n },\n methods: {\n isSlotPopulated,\n t,\n preserveElementToReturnFocus() {\n if (document.activeElement && document.activeElement !== document.body) {\n this.elementToReturnFocus = document.activeElement;\n if (this.elementToReturnFocus.getAttribute(\"role\") === \"menuitem\") {\n const menu = this.elementToReturnFocus.closest('[role=\"menu\"]');\n if (menu) {\n const menuTrigger = document.querySelector(`[aria-controls=\"${menu.id}\"]`);\n this.elementToReturnFocus = menuTrigger;\n }\n }\n }\n },\n initFocusTrap() {\n if (this.focusTrap) {\n return;\n }\n this.focusTrap = createFocusTrap([\n // The sidebar itself\n this.$refs.sidebar,\n // Nextcloud Server header navigation\n document.querySelector(\"#header\")\n ], {\n allowOutsideClick: true,\n fallbackFocus: this.$refs.closeButton.$el,\n trapStack: getTrapStack(),\n escapeDeactivates: false\n });\n },\n /**\n * Activate focus trap if it is currently needed, otherwise deactivate\n */\n toggleFocusTrap() {\n if (this.open && this.isMobile) {\n this.initFocusTrap();\n this.focusTrap.activate();\n } else {\n this.focusTrap?.deactivate();\n }\n },\n /**\n * Close the sidebar on pressing the escape key on mobile\n *\n * @param {KeyboardEvent} event key down event\n */\n onKeydownEsc(event) {\n if (this.isMobile) {\n event.stopPropagation();\n this.closeSidebar();\n }\n },\n onAfterEnter(element) {\n if (this.elementToReturnFocus) {\n this.focus();\n }\n this.toggleFocusTrap();\n this.$emit(\"opened\", element);\n },\n onAfterLeave(element) {\n this.$emit(\"closed\", element);\n this.toggleFocusTrap();\n this.elementToReturnFocus?.focus({ focusVisible: true });\n this.elementToReturnFocus = null;\n },\n /**\n * Used to tell parent component the user asked to close the sidebar\n *\n * @param {Event} e close icon click event\n */\n closeSidebar(e) {\n this.$emit(\"close\", e);\n this.$emit(\"update:open\", false);\n },\n /**\n * Emit figure click event to parent component\n *\n * @param {Event} e click event\n */\n onFigureClick(e) {\n this.$emit(\"figureClick\", e);\n },\n /**\n * Toggle the favourite state\n * and emit to the parent component\n */\n toggleStarred() {\n this.isStarred = !this.isStarred;\n this.$emit(\"update:starred\", this.isStarred);\n },\n async editName() {\n this.$emit(\"update:nameEditable\", true);\n if (this.nameEditable) {\n await this.$nextTick();\n this.$refs.nameInput.focus();\n }\n },\n /**\n * Focus the sidebar\n *\n * @public\n */\n focus() {\n if (!this.open && !this.noToggle) {\n this.$refs.toggle.$el.focus();\n return;\n }\n try {\n this.headerRef.focus();\n } catch {\n warn(\"NcAppSidebar should have focusable header for accessibility reasons. Use NcAppSidebarHeader component.\");\n }\n },\n /**\n * Focus the active tab\n *\n * @public\n */\n focusActiveTabContent() {\n this.preserveElementToReturnFocus();\n this.$refs.tabs.focusActiveTabContent();\n },\n /**\n * Check if the toggle button container is available\n */\n checkToggleButtonContainerAvailability() {\n if (this.open === false && !this.noToggle && !this.ncContentSelector) {\n logger.warn(\"[NcAppSidebar] It looks like you want to use NcAppSidebar with the built-in toggle button. This feature is only available when NcAppSidebar is used in NcContent.\");\n }\n },\n /**\n * Emit name change event to parent component\n *\n * @param {Event} event input event\n */\n onNameInput(event) {\n this.$emit(\"update:name\", event.target.value);\n },\n /**\n * Emit when the name form edit confirm button is pressed in order\n * to change the name.\n *\n * @param {Event} event submit event\n */\n onSubmitName(event) {\n this.$emit(\"update:nameEditable\", false);\n this.$emit(\"submitName\", event);\n },\n onDismissEditing() {\n this.$emit(\"update:nameEditable\", false);\n this.$emit(\"dismissEditing\");\n },\n onUpdateActive(activeTab) {\n this.$emit(\"update:active\", activeTab);\n }\n }\n};\nconst _hoisted_1 = [\"aria-labelledby\"];\nconst _hoisted_2 = { class: \"app-sidebar-header__info\" };\nconst _hoisted_3 = {\n key: 0,\n class: \"app-sidebar-header__tertiary-actions\"\n};\nconst _hoisted_4 = { class: \"app-sidebar-header__name-container\" };\nconst _hoisted_5 = { class: \"app-sidebar-header__mainname-container\" };\nconst _hoisted_6 = [\"placeholder\", \"value\"];\nconst _hoisted_7 = [\"title\"];\nconst _hoisted_8 = {\n key: 2,\n class: \"app-sidebar-header__description\"\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_IconDockRight = resolveComponent(\"IconDockRight\");\n const _component_NcButton = resolveComponent(\"NcButton\");\n const _component_NcLoadingIcon = resolveComponent(\"NcLoadingIcon\");\n const _component_IconStar = resolveComponent(\"IconStar\");\n const _component_IconStarOutline = resolveComponent(\"IconStarOutline\");\n const _component_NcAppSidebarHeader = resolveComponent(\"NcAppSidebarHeader\");\n const _component_IconArrowRight = resolveComponent(\"IconArrowRight\");\n const _component_NcActions = resolveComponent(\"NcActions\");\n const _component_IconClose = resolveComponent(\"IconClose\");\n const _component_NcAppSidebarTabs = resolveComponent(\"NcAppSidebarTabs\");\n const _component_NcEmptyContent = resolveComponent(\"NcEmptyContent\");\n const _directive_focus = resolveDirective(\"focus\");\n const _directive_click_outside = resolveDirective(\"click-outside\");\n return openBlock(), createBlock(Transition, {\n appear: \"\",\n name: \"slide-right\",\n onAfterEnter: $options.onAfterEnter,\n onAfterLeave: $options.onAfterLeave\n }, {\n default: withCtx(() => [\n withDirectives(createElementVNode(\"aside\", {\n id: \"app-sidebar-vue\",\n ref: \"sidebar\",\n class: \"app-sidebar\",\n \"aria-labelledby\": `app-sidebar-vue-${$setup.uid}__header`,\n onKeydown: _cache[6] || (_cache[6] = withKeys((...args) => $options.onKeydownEsc && $options.onKeydownEsc(...args), [\"esc\"]))\n }, [\n $options.ncContentSelector && !$props.open && !$props.noToggle ? (openBlock(), createBlock(Teleport, {\n key: 0,\n to: $options.ncContentSelector\n }, [\n createVNode(_component_NcButton, mergeProps({\n ref: \"toggle\",\n \"aria-label\": $options.t(\"Open sidebar\"),\n class: [\"app-sidebar__toggle\", $props.toggleClasses],\n variant: \"tertiary\"\n }, $props.toggleAttrs, {\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"update:open\", true))\n }), {\n icon: withCtx(() => [\n renderSlot(_ctx.$slots, \"toggle-icon\", {}, () => [\n createVNode(_component_IconDockRight, { size: 20 })\n ], true)\n ]),\n _: 3\n }, 16, [\"aria-label\", \"class\"])\n ], 8, [\"to\"])) : createCommentVNode(\"\", true),\n createElementVNode(\"header\", {\n class: normalizeClass([\"app-sidebar-header\", {\n \"app-sidebar-header--with-figure\": $options.isSlotPopulated(_ctx.$slots.header?.()) || $props.background,\n \"app-sidebar-header--compact\": $props.compact\n }])\n }, [\n !$props.empty ? renderSlot(_ctx.$slots, \"info\", { key: 0 }, () => [\n createElementVNode(\"div\", _hoisted_2, [\n $options.isSlotPopulated(_ctx.$slots.header?.()) || $props.background ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n class: normalizeClass([\"app-sidebar-header__figure\", {\n \"app-sidebar-header__figure--with-action\": $options.hasFigureClickListener\n }]),\n style: normalizeStyle({\n backgroundImage: `url(${$props.background})`\n }),\n tabindex: \"0\",\n onClick: _cache[1] || (_cache[1] = (...args) => $options.onFigureClick && $options.onFigureClick(...args)),\n onKeydown: _cache[2] || (_cache[2] = withKeys((...args) => $options.onFigureClick && $options.onFigureClick(...args), [\"enter\"]))\n }, [\n renderSlot(_ctx.$slots, \"header\", { class: \"app-sidebar-header__background\" }, void 0, true)\n ], 38)) : createCommentVNode(\"\", true),\n createElementVNode(\"div\", {\n class: normalizeClass([\"app-sidebar-header__desc\", {\n \"app-sidebar-header__desc--with-tertiary-action\": $options.canStar || $options.isSlotPopulated(_ctx.$slots[\"tertiary-actions\"]?.()),\n \"app-sidebar-header__desc--editable\": $props.nameEditable && !$props.subname,\n \"app-sidebar-header__desc--with-subname--editable\": $props.nameEditable && $props.subname,\n \"app-sidebar-header__desc--without-actions\": !$options.isSlotPopulated(_ctx.$slots[\"secondary-actions\"]?.())\n }])\n }, [\n $options.canStar || $options.isSlotPopulated(_ctx.$slots[\"tertiary-actions\"]?.()) ? (openBlock(), createElementBlock(\"div\", _hoisted_3, [\n renderSlot(_ctx.$slots, \"tertiary-actions\", {}, () => [\n $options.canStar ? (openBlock(), createBlock(_component_NcButton, {\n key: 0,\n \"aria-label\": $data.favoriteTranslated,\n pressed: $data.isStarred,\n class: \"app-sidebar-header__star\",\n variant: \"secondary\",\n onClick: withModifiers($options.toggleStarred, [\"prevent\"])\n }, {\n icon: withCtx(() => [\n $props.starLoading ? (openBlock(), createBlock(_component_NcLoadingIcon, { key: 0 })) : $data.isStarred ? (openBlock(), createBlock(_component_IconStar, {\n key: 1,\n size: 20\n })) : (openBlock(), createBlock(_component_IconStarOutline, {\n key: 2,\n size: 20\n }))\n ]),\n _: 1\n }, 8, [\"aria-label\", \"pressed\", \"onClick\"])) : createCommentVNode(\"\", true)\n ], true)\n ])) : createCommentVNode(\"\", true),\n createElementVNode(\"div\", _hoisted_4, [\n createElementVNode(\"div\", _hoisted_5, [\n withDirectives(createVNode(_component_NcAppSidebarHeader, {\n class: \"app-sidebar-header__mainname\",\n name: $props.name,\n linkify: $props.linkifyName,\n title: $props.title,\n tabindex: $props.nameEditable ? 0 : -1,\n onClick: withModifiers($options.editName, [\"self\"])\n }, null, 8, [\"name\", \"linkify\", \"title\", \"tabindex\", \"onClick\"]), [\n [vShow, !$props.nameEditable]\n ]),\n $props.nameEditable ? withDirectives((openBlock(), createElementBlock(\"form\", {\n key: 0,\n class: \"app-sidebar-header__mainname-form\",\n onSubmit: _cache[5] || (_cache[5] = withModifiers((...args) => $options.onSubmitName && $options.onSubmitName(...args), [\"prevent\"]))\n }, [\n withDirectives(createElementVNode(\"input\", {\n ref: \"nameInput\",\n class: \"app-sidebar-header__mainname-input\",\n type: \"text\",\n placeholder: $props.namePlaceholder,\n value: $props.name,\n onKeydown: _cache[3] || (_cache[3] = withKeys(withModifiers((...args) => $options.onDismissEditing && $options.onDismissEditing(...args), [\"stop\"]), [\"esc\"])),\n onInput: _cache[4] || (_cache[4] = (...args) => $options.onNameInput && $options.onNameInput(...args))\n }, null, 40, _hoisted_6), [\n [_directive_focus]\n ]),\n createVNode(_component_NcButton, {\n \"aria-label\": $data.changeNameTranslated,\n type: \"submit\",\n variant: \"tertiary-no-background\"\n }, {\n icon: withCtx(() => [\n createVNode(_component_IconArrowRight, { size: 20 })\n ]),\n _: 1\n }, 8, [\"aria-label\"])\n ], 32)), [\n [_directive_click_outside, () => $options.onSubmitName()]\n ]) : createCommentVNode(\"\", true),\n $options.isSlotPopulated(_ctx.$slots[\"secondary-actions\"]?.()) ? (openBlock(), createBlock(_component_NcActions, {\n key: 1,\n class: \"app-sidebar-header__menu\",\n forceMenu: $props.forceMenu\n }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"secondary-actions\", {}, void 0, true)\n ]),\n _: 3\n }, 8, [\"forceMenu\"])) : createCommentVNode(\"\", true)\n ]),\n $props.subname.trim() !== \"\" || _ctx.$slots[\"subname\"] ? (openBlock(), createElementBlock(\"p\", {\n key: 0,\n title: $props.subtitle || void 0,\n class: \"app-sidebar-header__subname\"\n }, [\n renderSlot(_ctx.$slots, \"subname\", {}, () => [\n createTextVNode(toDisplayString($props.subname), 1)\n ], true)\n ], 8, _hoisted_7)) : createCommentVNode(\"\", true)\n ])\n ], 2)\n ])\n ], true) : (openBlock(), createBlock(_component_NcAppSidebarHeader, {\n key: 1,\n class: \"app-sidebar-header__mainname--hidden\",\n name: $props.name,\n tabindex: \"-1\"\n }, null, 8, [\"name\"])),\n createVNode(_component_NcButton, {\n ref: \"closeButton\",\n \"aria-label\": $data.closeTranslated,\n title: $data.closeTranslated,\n class: \"app-sidebar__close\",\n variant: \"tertiary\",\n onClick: withModifiers($options.closeSidebar, [\"prevent\"])\n }, {\n icon: withCtx(() => [\n createVNode(_component_IconClose, { size: 20 })\n ]),\n _: 1\n }, 8, [\"aria-label\", \"title\", \"onClick\"]),\n $options.isSlotPopulated(_ctx.$slots.description?.()) && !$props.empty ? (openBlock(), createElementBlock(\"div\", _hoisted_8, [\n renderSlot(_ctx.$slots, \"description\", {}, void 0, true)\n ])) : createCommentVNode(\"\", true)\n ], 2),\n withDirectives(createVNode(_component_NcAppSidebarTabs, {\n ref: \"tabs\",\n active: $props.active,\n forceTabs: $props.forceTabs,\n \"onUpdate:active\": $options.onUpdateActive\n }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true)\n ]),\n _: 3\n }, 8, [\"active\", \"forceTabs\", \"onUpdate:active\"]), [\n [vShow, !$props.loading]\n ]),\n $props.loading ? (openBlock(), createBlock(_component_NcEmptyContent, { key: 1 }, {\n icon: withCtx(() => [\n createVNode(_component_NcLoadingIcon, { size: 64 })\n ]),\n _: 1\n })) : createCommentVNode(\"\", true)\n ], 40, _hoisted_1), [\n [vShow, $props.open]\n ])\n ]),\n _: 3\n }, 8, [\"onAfterEnter\", \"onAfterLeave\"]);\n}\nconst NcAppSidebar = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-e8979b7f\"]]);\nexport {\n NcAppSidebar as N\n};\n//# sourceMappingURL=NcAppSidebar-Ch7Vp7q5.mjs.map\n","import PQueue from \"p-queue\";\nconst queue = new PQueue({ concurrency: 5 });\nfunction preloadImage(url) {\n const { resolve, promise } = Promise.withResolvers();\n queue.add(() => {\n const image = new Image();\n image.onerror = () => resolve(false);\n image.onload = () => resolve(true);\n image.src = url;\n return promise;\n });\n return promise;\n}\nexport {\n preloadImage\n};\n//# sourceMappingURL=index.mjs.map\n","import '../assets/NcCollectionList-e5JFvzqX.css';\nimport debounce from \"debounce\";\nimport { resolveComponent, openBlock, createElementBlock, createVNode, toDisplayString, withModifiers, normalizeClass, withDirectives, createElementVNode, vModelText, Fragment, renderList, createBlock, resolveDynamicComponent, withCtx, createCommentVNode, createTextVNode, Transition, ref } from \"vue\";\nimport { r as register, L as t28, a as t, M as t6 } from \"./_l10n-CG4CuN3H.mjs\";\nimport { N as NcActionButton } from \"./NcActionButton-BO5T5ePT.mjs\";\nimport { N as NcActions } from \"./NcActions-CUmcZ3C3.mjs\";\nimport { N as NcAvatar } from \"./NcAvatar-M3-CbKbq.mjs\";\nimport { g as getRoute } from \"./autolink-BT8u-IL-.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { N as NcSelect } from \"./NcSelect-BOFzoCwK.mjs\";\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nregister(t28);\nconst _sfc_main$1 = {\n name: \"NcCollectionListItem\",\n components: {\n NcAvatar,\n NcActions,\n NcActionButton\n },\n props: {\n /**\n * The collection\n */\n collection: {\n type: Object,\n default: null\n },\n /**\n * Current error if any\n */\n error: {\n type: String,\n default: void 0\n }\n },\n emits: [\n \"removeResource\",\n \"renameCollection\"\n ],\n data() {\n return {\n detailsOpen: false,\n newName: null\n };\n },\n computed: {\n getIcon() {\n return (resource) => [resource.iconClass];\n },\n typeClass() {\n return (resource) => \"resource-type-\" + resource.type;\n },\n resources() {\n return this.collection.resources?.filter((resource) => !Array.isArray(resource)) ?? [];\n },\n getComponent() {\n return (resource) => {\n const route = getRoute(this.$router, resource.link);\n return route ? { component: \"router-link\", to: route, href: void 0 } : { component: \"a\", to: void 0, href: resource.link };\n };\n },\n iconUrl() {\n return (resource) => {\n if (resource.mimetype) {\n return OC.MimeType.getIconUrl(resource.mimetype);\n }\n if (resource.iconUrl) {\n return resource.iconUrl;\n }\n return \"\";\n };\n }\n },\n methods: {\n t,\n toggleDetails() {\n this.detailsOpen = !this.detailsOpen;\n },\n showDetails() {\n this.detailsOpen = true;\n },\n removeResource(collection, resource) {\n this.$emit(\"removeResource\", {\n collectionId: collection.id,\n resourceType: resource.type,\n resourceId: resource.id\n });\n },\n openRename() {\n this.newName = this.collection.name;\n },\n renameCollection() {\n if (this.newName) {\n this.$emit(\"renameCollection\", {\n collectionId: this.collection.id,\n name: this.newName\n });\n }\n this.newName = null;\n }\n }\n};\nconst _hoisted_1$1 = { class: \"collection-list-item\" };\nconst _hoisted_2$1 = {\n key: 2,\n class: \"linked-icons\"\n};\nconst _hoisted_3$1 = [\"src\", \"alt\"];\nconst _hoisted_4$1 = {\n key: 3,\n class: \"sharingOptionsGroup\"\n};\nconst _hoisted_5$1 = {\n key: 0,\n class: \"error\"\n};\nconst _hoisted_6$1 = {\n key: 0,\n class: \"resource-list-details\"\n};\nconst _hoisted_7$1 = [\"src\", \"alt\"];\nconst _hoisted_8$1 = { class: \"resource-name\" };\nconst _hoisted_9 = [\"onClick\"];\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcAvatar = resolveComponent(\"NcAvatar\");\n const _component_NcActionButton = resolveComponent(\"NcActionButton\");\n const _component_NcActions = resolveComponent(\"NcActions\");\n return openBlock(), createElementBlock(\"li\", _hoisted_1$1, [\n createVNode(_component_NcAvatar, {\n displayName: $props.collection.name,\n allowPlaceholder: \"\",\n class: \"collection-avatar\"\n }, null, 8, [\"displayName\"]),\n $data.newName === null ? (openBlock(), createElementBlock(\"span\", {\n key: 0,\n class: \"collection-item-name\",\n title: \"\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.showDetails && $options.showDetails(...args))\n }, toDisplayString($props.collection.name), 1)) : (openBlock(), createElementBlock(\"form\", {\n key: 1,\n class: normalizeClass({ \"should-shake\": $props.error }),\n onSubmit: _cache[2] || (_cache[2] = withModifiers((...args) => $options.renameCollection && $options.renameCollection(...args), [\"prevent\"]))\n }, [\n withDirectives(createElementVNode(\"input\", {\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event) => $data.newName = $event),\n type: \"text\",\n autocomplete: \"off\",\n autocapitalize: \"off\"\n }, null, 512), [\n [vModelText, $data.newName]\n ]),\n _cache[3] || (_cache[3] = createElementVNode(\"input\", {\n type: \"submit\",\n value: \"\",\n class: \"icon-confirm\"\n }, null, -1))\n ], 34)),\n !$data.detailsOpen && $data.newName === null ? (openBlock(), createElementBlock(\"div\", _hoisted_2$1, [\n (openBlock(true), createElementBlock(Fragment, null, renderList($options.resources.slice(0, 2), (resource) => {\n return openBlock(), createBlock(resolveDynamicComponent($options.getComponent(resource).component), {\n key: resource.type + \"|\" + resource.id,\n title: resource.name,\n to: $options.getComponent(resource).to,\n href: $options.getComponent(resource).href,\n class: normalizeClass($options.typeClass(resource))\n }, {\n default: withCtx(() => [\n createElementVNode(\"img\", {\n src: $options.iconUrl(resource),\n alt: resource.name\n }, null, 8, _hoisted_3$1)\n ]),\n _: 2\n }, 1032, [\"title\", \"to\", \"href\", \"class\"]);\n }), 128))\n ])) : createCommentVNode(\"\", true),\n $data.newName === null ? (openBlock(), createElementBlock(\"span\", _hoisted_4$1, [\n createVNode(_component_NcActions, null, {\n default: withCtx(() => [\n createVNode(_component_NcActionButton, {\n icon: \"icon-info\",\n onClick: withModifiers($options.toggleDetails, [\"prevent\"])\n }, {\n default: withCtx(() => [\n createTextVNode(toDisplayString($data.detailsOpen ? $options.t(\"Hide details\") : $options.t(\"Show details\")), 1)\n ]),\n _: 1\n }, 8, [\"onClick\"]),\n createVNode(_component_NcActionButton, {\n icon: \"icon-rename\",\n onClick: withModifiers($options.openRename, [\"prevent\"])\n }, {\n default: withCtx(() => [\n createTextVNode(toDisplayString($options.t(\"Rename project\")), 1)\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ]),\n _: 1\n })\n ])) : createCommentVNode(\"\", true),\n createVNode(Transition, { name: \"fade\" }, {\n default: withCtx(() => [\n $props.error ? (openBlock(), createElementBlock(\"div\", _hoisted_5$1, toDisplayString($props.error), 1)) : createCommentVNode(\"\", true)\n ]),\n _: 1\n }),\n createVNode(Transition, { name: \"fade\" }, {\n default: withCtx(() => [\n $data.detailsOpen ? (openBlock(), createElementBlock(\"ul\", _hoisted_6$1, [\n (openBlock(true), createElementBlock(Fragment, null, renderList($options.resources, (resource) => {\n return openBlock(), createElementBlock(\"li\", {\n key: resource.type + \"|\" + resource.id,\n class: normalizeClass($options.typeClass(resource))\n }, [\n (openBlock(), createBlock(resolveDynamicComponent($options.getComponent(resource).component), {\n to: $options.getComponent(resource).to,\n href: $options.getComponent(resource).href\n }, {\n default: withCtx(() => [\n createElementVNode(\"img\", {\n src: $options.iconUrl(resource),\n alt: resource.name\n }, null, 8, _hoisted_7$1),\n createElementVNode(\"span\", _hoisted_8$1, toDisplayString(resource.name || \"\"), 1)\n ]),\n _: 2\n }, 1032, [\"to\", \"href\"])),\n createElementVNode(\"span\", {\n class: \"icon-close\",\n onClick: ($event) => $options.removeResource($props.collection, resource)\n }, null, 8, _hoisted_9)\n ], 2);\n }), 128))\n ])) : createCommentVNode(\"\", true)\n ]),\n _: 1\n })\n ]);\n}\nconst NcCollectionListItem = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1], [\"__scopeId\", \"data-v-8ebb9fc1\"]]);\nregister(t6);\nfunction extractOcsData(response) {\n return response.data.ocs.data;\n}\nfunction renameCollectionService(collectionId, collectionName) {\n return axios.put(generateOcsUrl(\"collaboration/resources/collections/{collectionId}\", { collectionId }), { collectionName }).then(extractOcsData);\n}\nfunction getCollectionsByResourceService(resourceType, resourceId) {\n return axios.get(generateOcsUrl(\"collaboration/resources/{resourceType}/{resourceId}\", { resourceType, resourceId })).then(extractOcsData);\n}\nfunction createCollectionService(resourceType, resourceId, name) {\n return axios.post(generateOcsUrl(\"collaboration/resources/{resourceType}/{resourceId}\", { resourceType, resourceId }), { name }).then(extractOcsData);\n}\nfunction addResourceService(collectionId, resourceType, resourceId) {\n return axios.post(generateOcsUrl(\"collaboration/resources/collections/{collectionId}\", { collectionId }), { resourceType, resourceId }).then(extractOcsData);\n}\nfunction removeResourceService(collectionId, resourceType, resourceId) {\n return axios.delete(generateOcsUrl(\"collaboration/resources/collections/{collectionId}\", { collectionId }), { params: { resourceType, resourceId } }).then(extractOcsData);\n}\nfunction searchService(query) {\n return axios.get(generateOcsUrl(\"collaboration/resources/collections/search/{query}\", { query })).then(extractOcsData);\n}\nfunction useCollections() {\n const storedCollections = ref([]);\n const addCollections = (collections) => {\n storedCollections.value = collections;\n };\n const addCollection = (collection) => {\n storedCollections.value.push(collection);\n };\n const removeCollection = (collectionId) => {\n storedCollections.value = storedCollections.value.filter((item) => item.id !== collectionId);\n };\n const updateCollection = (collection) => {\n const index = storedCollections.value.findIndex((item) => item.id === collection.id);\n if (index !== -1) {\n storedCollections.value[index] = collection;\n } else {\n addCollection(collection);\n }\n };\n const fetchCollectionsByResource = async ({ resourceType, resourceId }) => {\n const collections = await getCollectionsByResourceService(resourceType, resourceId);\n addCollections(collections);\n };\n const createCollection = async ({ baseResourceType, baseResourceId, resourceType, resourceId, name }) => {\n const collection = await createCollectionService(baseResourceType, baseResourceId, name);\n addCollection(collection);\n await addResourceToCollection({\n collectionId: collection.id,\n resourceType,\n resourceId\n });\n };\n const renameCollection = async ({ collectionId, name }) => {\n const collection = await renameCollectionService(collectionId, name);\n updateCollection(collection);\n };\n async function addResourceToCollection({ collectionId, resourceType, resourceId }) {\n const collection = await addResourceService(collectionId, resourceType, String(resourceId));\n updateCollection(collection);\n }\n const removeResourceFromCollection = async ({ collectionId, resourceType, resourceId }) => {\n const collection = await removeResourceService(collectionId, resourceType, String(resourceId));\n if (collection.resources.length > 0) {\n updateCollection(collection);\n } else {\n removeCollection(collectionId);\n }\n };\n return {\n storedCollections,\n fetchCollectionsByResource,\n createCollection,\n renameCollection,\n addResourceToCollection,\n removeResourceFromCollection\n };\n}\nconst METHOD_CREATE_COLLECTION = 0;\nconst METHOD_ADD_TO_COLLECTION = 1;\nconst _sfc_main = {\n name: \"NcCollectionList\",\n components: {\n NcCollectionListItem,\n NcAvatar,\n NcSelect\n },\n props: {\n /**\n * Resource type identifier\n */\n type: {\n type: String,\n default: null\n },\n /**\n * Unique id of the resource\n */\n id: {\n type: String,\n default: null\n },\n /**\n * Name of the resource\n */\n name: {\n type: String,\n default: \"\"\n },\n /**\n * Whether the component is active (to start fetch resources)\n */\n isActive: {\n type: Boolean,\n default: true\n }\n },\n setup() {\n const {\n storedCollections,\n fetchCollectionsByResource,\n createCollection,\n addResourceToCollection,\n removeResourceFromCollection,\n renameCollection\n } = useCollections();\n const searchCollections = ref([]);\n const search = debounce(function(query, loading) {\n if (query !== \"\") {\n loading(true);\n searchService(query).then((collections) => {\n searchCollections.value = collections;\n }).catch((error) => {\n logger.error(\"Failed to search for collections\", { error });\n }).finally(() => {\n loading(false);\n });\n }\n }, 500);\n return {\n storedCollections,\n fetchCollectionsByResource,\n createCollection,\n addResourceToCollection,\n removeResourceFromCollection,\n renameCollection,\n searchCollections,\n search\n };\n },\n data() {\n return {\n selectIsOpen: false,\n generatingCodes: false,\n codes: void 0,\n value: null,\n model: {},\n collectionsError: {},\n error: null,\n isSelectOpen: false\n };\n },\n computed: {\n collections() {\n return this.storedCollections.filter((collection) => collection.resources.some((resource) => resource && resource.id === String(this.id) && resource.type === this.type));\n },\n placeholder() {\n return this.isSelectOpen ? t(\"Type to search for existing projects\") : t(\"Add to a project\");\n },\n options() {\n const options = [];\n window.OCP.Collaboration.getTypes().sort().forEach((type) => {\n options.push({\n method: METHOD_CREATE_COLLECTION,\n type,\n title: window.OCP.Collaboration.getLabel(type),\n class: window.OCP.Collaboration.getIcon(type),\n action: () => window.OCP.Collaboration.trigger(type)\n });\n });\n for (const index in this.searchCollections) {\n if (!this.collections.find((collection) => collection.id === this.searchCollections[index].id)) {\n options.push({\n method: METHOD_ADD_TO_COLLECTION,\n title: this.searchCollections[index].name,\n collectionId: this.searchCollections[index].id\n });\n }\n }\n return options;\n },\n resourceIdentifier() {\n return {\n resourceType: this.type,\n resourceId: this.id,\n isActive: this.isActive\n };\n }\n },\n watch: {\n resourceIdentifier: {\n deep: true,\n immediate: true,\n handler(resourceIdentifier) {\n if (!resourceIdentifier.isActive || !resourceIdentifier.resourceId || !resourceIdentifier.resourceType) {\n return;\n }\n this.fetchCollectionsByResource(resourceIdentifier);\n }\n }\n },\n methods: {\n t,\n select(selectedOption) {\n if (selectedOption.method === METHOD_CREATE_COLLECTION) {\n selectedOption.action().then((resourceId) => {\n this.createCollection({\n baseResourceType: this.type,\n baseResourceId: this.id,\n resourceType: selectedOption.type,\n resourceId,\n name: this.name\n }).catch((e) => {\n this.setError(t(\"Failed to create a project\"), e);\n });\n }).catch((e) => {\n logger.error(\"[NcCollectionList] No resource selected\", e);\n });\n }\n if (selectedOption.method === METHOD_ADD_TO_COLLECTION) {\n this.addResourceToCollection({\n collectionId: selectedOption.collectionId,\n resourceType: this.type,\n resourceId: this.id\n }).catch((e) => {\n this.setError(t(\"Failed to add the item to the project\"), e);\n });\n }\n this.value = null;\n },\n showSelect() {\n this.selectIsOpen = true;\n this.$refs.select.$el.focus();\n },\n setError(error, e) {\n logger.error(error, { error: e });\n this.error = error;\n setTimeout(() => {\n this.error = null;\n }, 5e3);\n },\n renameCollectionFromItem({ collectionId, name }) {\n this.renameCollection({ collectionId, name }).catch((e) => {\n logger.error(t(\"Failed to rename the project\"), { error: e });\n this.collectionsError[collectionId] = t(\"Failed to rename the project\");\n setTimeout(() => {\n this.collectionsError[collectionId] = null;\n }, 5e3);\n });\n }\n }\n};\nconst _hoisted_1 = {\n key: 0,\n id: \"collection-list\",\n class: \"collection-list\"\n};\nconst _hoisted_2 = { id: \"collection-select-container\" };\nconst _hoisted_3 = { class: \"option__desc\" };\nconst _hoisted_4 = { class: \"option__title\" };\nconst _hoisted_5 = { class: \"option__wrapper\" };\nconst _hoisted_6 = { class: \"option__title\" };\nconst _hoisted_7 = { class: \"hint\" };\nconst _hoisted_8 = {\n key: 0,\n class: \"error\"\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcAvatar = resolveComponent(\"NcAvatar\");\n const _component_NcSelect = resolveComponent(\"NcSelect\");\n const _component_NcCollectionListItem = resolveComponent(\"NcCollectionListItem\");\n return $options.collections && $props.type && $props.id ? (openBlock(), createElementBlock(\"ul\", _hoisted_1, [\n createElementVNode(\"li\", {\n onClick: _cache[3] || (_cache[3] = (...args) => $options.showSelect && $options.showSelect(...args))\n }, [\n _cache[4] || (_cache[4] = createElementVNode(\"div\", { class: \"avatar\" }, [\n createElementVNode(\"span\", { class: \"icon-projects\" })\n ], -1)),\n createElementVNode(\"div\", _hoisted_2, [\n createVNode(_component_NcSelect, {\n ref: \"select\",\n modelValue: $data.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => $data.value = $event),\n \"aria-label-combobox\": $options.t(\"Add to a project\"),\n options: $options.options,\n placeholder: $options.placeholder,\n label: \"title\",\n limit: 5,\n onClose: _cache[1] || (_cache[1] = ($event) => $data.isSelectOpen = false),\n onOpen: _cache[2] || (_cache[2] = ($event) => $data.isSelectOpen = true),\n \"onOption:selected\": $options.select,\n onSearch: $setup.search\n }, {\n \"selected-option\": withCtx((option) => [\n createElementVNode(\"span\", _hoisted_3, [\n createElementVNode(\"span\", _hoisted_4, toDisplayString(option.title), 1)\n ])\n ]),\n option: withCtx((option) => [\n createElementVNode(\"span\", _hoisted_5, [\n option.class ? (openBlock(), createElementBlock(\"span\", {\n key: 0,\n class: normalizeClass([option.class, \"avatar\"])\n }, null, 2)) : option.method !== 2 ? (openBlock(), createBlock(_component_NcAvatar, {\n key: 1,\n allowPlaceholder: \"\",\n displayName: option.title\n }, null, 8, [\"displayName\"])) : createCommentVNode(\"\", true),\n createElementVNode(\"span\", _hoisted_6, toDisplayString(option.title), 1)\n ])\n ]),\n default: withCtx(() => [\n createElementVNode(\"p\", _hoisted_7, toDisplayString($options.t(\"Connect items to a project to make them easier to find\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\", \"aria-label-combobox\", \"options\", \"placeholder\", \"onOption:selected\", \"onSearch\"])\n ])\n ]),\n createVNode(Transition, { name: \"fade\" }, {\n default: withCtx(() => [\n $data.error ? (openBlock(), createElementBlock(\"li\", _hoisted_8, toDisplayString($data.error), 1)) : createCommentVNode(\"\", true)\n ]),\n _: 1\n }),\n (openBlock(true), createElementBlock(Fragment, null, renderList($options.collections, (collection) => {\n return openBlock(), createBlock(_component_NcCollectionListItem, {\n key: collection.id,\n collection,\n error: $data.collectionsError[collection.id],\n onRenameCollection: $options.renameCollectionFromItem,\n onRemoveResource: $setup.removeResourceFromCollection\n }, null, 8, [\"collection\", \"error\", \"onRenameCollection\", \"onRemoveResource\"]);\n }), 128))\n ])) : createCommentVNode(\"\", true);\n}\nconst NcCollectionList = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-0e169eff\"]]);\nexport {\n NcCollectionList as N\n};\n//# sourceMappingURL=NcCollectionList-CO-iHqi6.mjs.map\n","import '../assets/NcDashboardWidget-nZuIL1UN.css';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode, resolveComponent, createBlock, withCtx, renderSlot, createVNode, Fragment, renderList, toHandlers } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { r as register, z as t35, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { N as NcAvatar } from \"./NcAvatar-M3-CbKbq.mjs\";\nimport { N as NcDashboardWidgetItem } from \"./NcDashboardWidgetItem-BwwFiNOL.mjs\";\nimport { N as NcEmptyContent } from \"./NcEmptyContent-CGAPqk4S.mjs\";\nconst _sfc_main$1 = {\n name: \"CheckIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$1 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$1 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$1 = { d: \"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\" };\nconst _hoisted_4 = { key: 0 };\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon check-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$1, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$1))\n ], 16, _hoisted_1$1);\n}\nconst Check = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1]]);\nregister(t35);\nconst _sfc_main = {\n name: \"NcDashboardWidget\",\n components: {\n NcAvatar,\n NcDashboardWidgetItem,\n NcEmptyContent,\n Check\n },\n props: {\n /**\n * An array containing the items to show (specific structure must be respected,\n * except if you override item rendering in the default slot).\n */\n items: {\n type: Array,\n default: () => {\n return [];\n }\n },\n /**\n * If this is set, a \"show more\" text is displayed on the widget's bottom.\n * It's a link pointing to this URL.\n */\n showMoreUrl: {\n type: String,\n default: \"\"\n },\n /**\n * The text of show more button.\n *\n * Expected to be in the form \"More {itemName} …\"\n */\n showMoreLabel: {\n type: String,\n default: t(\"More items …\")\n },\n /**\n * A boolean to put the widget in a loading state.\n */\n loading: {\n type: Boolean,\n default: false\n },\n /**\n * An object containing context menu entries that will be displayed for each item.\n */\n itemMenu: {\n type: Object,\n default: () => {\n return {};\n }\n },\n /**\n * Whether both the items and the empty content message are shown.\n * Usefull for e.g. showing \"No mentions\" and a list of elements.\n */\n showItemsAndEmptyContent: {\n type: Boolean,\n default: false\n },\n /**\n * The text to show in the empty content area.\n */\n emptyContentMessage: {\n type: String,\n default: \"\"\n },\n /**\n * The text to show in the half empty content area.\n */\n halfEmptyContentMessage: {\n type: String,\n default: \"\"\n }\n },\n computed: {\n // forward menu events to my parent\n handlers() {\n const h = {};\n for (const evName in this.itemMenu) {\n h[evName] = (it) => {\n this.$emit(evName, it);\n };\n }\n return h;\n },\n displayedItems() {\n const nbItems = this.showMoreUrl && this.items.length >= this.maxItemNumber ? this.maxItemNumber - 1 : this.maxItemNumber;\n return this.items.slice(0, nbItems);\n },\n showHalfEmptyContentArea() {\n return this.showItemsAndEmptyContent && this.halfEmptyContentString && this.items.length !== 0;\n },\n halfEmptyContentString() {\n return this.halfEmptyContentMessage || this.emptyContentMessage;\n },\n maxItemNumber() {\n return this.showItemsAndEmptyContent ? 5 : 7;\n },\n showMore() {\n return this.showMoreUrl && this.items.length >= this.maxItemNumber;\n }\n }\n};\nconst _hoisted_1 = { class: \"dashboard-widget\" };\nconst _hoisted_2 = { key: 1 };\nconst _hoisted_3 = [\"href\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_Check = resolveComponent(\"Check\");\n const _component_NcEmptyContent = resolveComponent(\"NcEmptyContent\");\n const _component_NcDashboardWidgetItem = resolveComponent(\"NcDashboardWidgetItem\");\n const _component_NcAvatar = resolveComponent(\"NcAvatar\");\n return openBlock(), createElementBlock(\"div\", _hoisted_1, [\n $options.showHalfEmptyContentArea ? (openBlock(), createBlock(_component_NcEmptyContent, {\n key: 0,\n description: $options.halfEmptyContentString,\n class: \"half-screen\"\n }, {\n icon: withCtx(() => [\n renderSlot(_ctx.$slots, \"halfEmptyContentIcon\", {}, () => [\n createVNode(_component_Check)\n ], true)\n ]),\n _: 3\n }, 8, [\"description\"])) : createCommentVNode(\"\", true),\n createElementVNode(\"ul\", null, [\n (openBlock(true), createElementBlock(Fragment, null, renderList($options.displayedItems, (item) => {\n return openBlock(), createElementBlock(\"li\", {\n key: item.id\n }, [\n renderSlot(_ctx.$slots, \"default\", { item }, () => [\n createVNode(_component_NcDashboardWidgetItem, mergeProps({ ref_for: true }, item, { itemMenu: $props.itemMenu }, toHandlers($options.handlers)), null, 16, [\"itemMenu\"])\n ], true)\n ]);\n }), 128))\n ]),\n $props.loading ? (openBlock(), createElementBlock(\"div\", _hoisted_2, [\n (openBlock(), createElementBlock(Fragment, null, renderList(7, (i) => {\n return createElementVNode(\"div\", {\n key: i,\n class: \"item-list__entry\"\n }, [\n createVNode(_component_NcAvatar, {\n class: \"item-avatar\",\n size: 44\n }),\n _cache[0] || (_cache[0] = createElementVNode(\"div\", { class: \"item__details\" }, [\n createElementVNode(\"h3\", null, \" \"),\n createElementVNode(\"p\", { class: \"message\" }, \"   \")\n ], -1))\n ]);\n }), 64))\n ])) : $props.items.length === 0 ? renderSlot(_ctx.$slots, \"empty-content\", { key: 2 }, () => [\n $props.emptyContentMessage ? (openBlock(), createBlock(_component_NcEmptyContent, {\n key: 0,\n description: $props.emptyContentMessage\n }, {\n icon: withCtx(() => [\n renderSlot(_ctx.$slots, \"emptyContentIcon\", {}, void 0, true)\n ]),\n _: 3\n }, 8, [\"description\"])) : createCommentVNode(\"\", true)\n ], true) : $options.showMore ? (openBlock(), createElementBlock(\"a\", {\n key: 3,\n href: $props.showMoreUrl,\n target: \"_blank\",\n class: \"more\",\n tabindex: \"0\"\n }, toDisplayString($props.showMoreLabel), 9, _hoisted_3)) : createCommentVNode(\"\", true)\n ]);\n}\nconst NcDashboardWidget = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-8dabc003\"]]);\nexport {\n NcDashboardWidget as N\n};\n//# sourceMappingURL=NcDashboardWidget-ftOfMTzx.mjs.map\n","import '../assets/NcFilePicker-CimiKIH1.css';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode, defineComponent, useTemplateRef, computed, normalizeClass, createVNode, withCtx, createBlock, createTextVNode, unref, Fragment, renderList, renderSlot, nextTick } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { N as NcActionButton } from \"./NcActionButton-BO5T5ePT.mjs\";\nimport { N as NcActionCaption } from \"./NcActionCaption-f7L9gBlT.mjs\";\nimport { N as NcActions } from \"./NcActions-CUmcZ3C3.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { N as NcLoadingIcon } from \"./NcLoadingIcon-BOVpFVQz.mjs\";\nimport { getGettextBuilder } from \"@nextcloud/l10n/gettext\";\nconst _sfc_main$3 = {\n name: \"FolderUploadIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$3 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$2 = { d: \"M20,6A2,2 0 0,1 22,8V18A2,2 0 0,1 20,20H4A2,2 0 0,1 2,18V6A2,2 0 0,1 4,4H10L12,6H20M10.75,13H14V17H16V13H19.25L15,8.75\" };\nconst _hoisted_4$2 = { key: 0 };\nfunction _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon folder-upload-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$2, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$2, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$2))\n ], 16, _hoisted_1$3);\n}\nconst IconFolderUpload = /* @__PURE__ */ _export_sfc(_sfc_main$3, [[\"render\", _sfc_render$2]]);\nconst _sfc_main$2 = {\n name: \"PlusIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$2 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$1 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$1 = { d: \"M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z\" };\nconst _hoisted_4$1 = { key: 0 };\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon plus-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$1, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$1, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$1))\n ], 16, _hoisted_1$2);\n}\nconst IconPlus = /* @__PURE__ */ _export_sfc(_sfc_main$2, [[\"render\", _sfc_render$1]]);\nconst _sfc_main$1 = {\n name: \"UploadIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$1 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3 = { d: \"M9,16V10H5L12,3L19,10H15V16H9M5,20V18H19V20H5Z\" };\nconst _hoisted_4 = { key: 0 };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon upload-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2))\n ], 16, _hoisted_1$1);\n}\nconst IconUpload = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render]]);\n/*!\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nconst gtBuilder = getGettextBuilder().detectLanguage();\nconst gt = gtBuilder.build();\ngt.ngettext.bind(gt);\nconst t = gt.gettext.bind(gt);\nconst _hoisted_1 = [\"accept\", \"multiple\"];\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcFilePicker\",\n props: {\n accept: { default: void 0 },\n actionCaption: { default: \"\" },\n actions: { default: () => [] },\n directory: { type: Boolean },\n directoryOnly: { type: Boolean },\n disabled: { type: Boolean },\n iconOnly: { type: Boolean },\n label: { default: void 0 },\n loading: { type: Boolean },\n multiple: { type: Boolean },\n variant: { default: \"primary\" }\n },\n emits: [\"pick\"],\n setup(__props, { expose: __expose, emit: __emit }) {\n const props = __props;\n const emit = __emit;\n __expose({\n reset\n });\n const formElement = useTemplateRef(\"form\");\n const inputElement = useTemplateRef(\"input\");\n const currentLabel = computed(() => {\n if (props.loading) {\n return t(\"Uploading …\");\n } else if (props.label) {\n return props.label;\n } else if (props.directoryOnly) {\n return t(\"Pick folder\");\n }\n return props.multiple ? t(\"Pick files\") : t(\"Pick file\");\n });\n const canUploadFolders = computed(() => {\n return (props.directory || props.directoryOnly) && \"webkitdirectory\" in HTMLInputElement.prototype;\n });\n function triggerPickFiles(uploadFolders) {\n reset();\n if (canUploadFolders.value) {\n inputElement.value.webkitdirectory = uploadFolders;\n }\n nextTick(() => inputElement.value.click());\n }\n function onPick() {\n const files = inputElement.value?.files ? Array.from(inputElement.value.files) : [];\n emit(\"pick\", files);\n }\n function reset() {\n formElement.value.reset();\n }\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"form\", {\n ref: \"form\",\n class: normalizeClass(_ctx.$style.filePicker)\n }, [\n createVNode(NcActions, {\n \"aria-label\": currentLabel.value,\n disabled: __props.disabled || __props.loading,\n menuName: __props.iconOnly ? void 0 : currentLabel.value,\n forceName: !__props.iconOnly,\n variant: __props.variant\n }, {\n icon: withCtx(() => [\n !__props.loading ? renderSlot(_ctx.$slots, \"icon\", { key: 0 }, () => [\n createVNode(IconPlus, { size: 20 })\n ]) : (openBlock(), createBlock(NcLoadingIcon, { key: 1 }))\n ]),\n default: withCtx(() => [\n __props.actionCaption ? (openBlock(), createBlock(NcActionCaption, {\n key: 0,\n name: __props.actionCaption\n }, null, 8, [\"name\"])) : createCommentVNode(\"\", true),\n !__props.directoryOnly ? (openBlock(), createBlock(NcActionButton, {\n key: 1,\n closeAfterClick: \"\",\n onClick: _cache[0] || (_cache[0] = ($event) => triggerPickFiles(false))\n }, {\n icon: withCtx(() => [\n createVNode(IconUpload, { size: 20 })\n ]),\n default: withCtx(() => [\n createTextVNode(\" \" + toDisplayString(canUploadFolders.value || _ctx.$slots.actions ? __props.multiple ? unref(t)(\"Upload files\") : unref(t)(\"Upload file\") : currentLabel.value), 1)\n ]),\n _: 1\n })) : createCommentVNode(\"\", true),\n canUploadFolders.value ? (openBlock(), createBlock(NcActionButton, {\n key: 2,\n closeAfterClick: \"\",\n onClick: _cache[1] || (_cache[1] = ($event) => triggerPickFiles(true))\n }, {\n icon: withCtx(() => [\n createVNode(IconFolderUpload, {\n style: { \"color\": \"var(--color-primary-element)\" },\n size: 20\n })\n ]),\n default: withCtx(() => [\n createTextVNode(\" \" + toDisplayString(!__props.directoryOnly || _ctx.$slots.actions ? unref(t)(\"Upload folder\") : currentLabel.value), 1)\n ]),\n _: 1\n })) : createCommentVNode(\"\", true),\n (openBlock(true), createElementBlock(Fragment, null, renderList(__props.actions, (group) => {\n return openBlock(), createElementBlock(Fragment, null, [\n group.caption ? (openBlock(), createBlock(NcActionCaption, {\n key: group.caption,\n name: group.caption\n }, null, 8, [\"name\"])) : createCommentVNode(\"\", true),\n (openBlock(true), createElementBlock(Fragment, null, renderList(group.actions ?? [group], (action) => {\n return openBlock(), createBlock(NcActionButton, {\n key: action.label,\n closeAfterClick: \"\",\n onClick: action.onClick\n }, {\n icon: withCtx(() => [\n createVNode(NcIconSvgWrapper, {\n svg: action.iconSvg\n }, null, 8, [\"svg\"])\n ]),\n default: withCtx(() => [\n createTextVNode(\" \" + toDisplayString(action.label), 1)\n ]),\n _: 2\n }, 1032, [\"onClick\"]);\n }), 128))\n ], 64);\n }), 256))\n ]),\n _: 3\n }, 8, [\"aria-label\", \"disabled\", \"menuName\", \"forceName\", \"variant\"]),\n createElementVNode(\"input\", {\n ref: \"input\",\n accept: __props.accept?.join(\", \"),\n \"aria-hidden\": \"true\",\n class: \"hidden-visually\",\n multiple: __props.multiple,\n type: \"file\",\n onChange: onPick\n }, null, 40, _hoisted_1),\n renderSlot(_ctx.$slots, \"default\")\n ], 2);\n };\n }\n});\nconst filePicker = \"_filePicker_UHtO-\";\nconst style0 = {\n filePicker\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcFilePicker = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n NcFilePicker as N\n};\n//# sourceMappingURL=NcFilePicker-nPCwHMqj.mjs.map\n","import '../assets/NcKbd-BeQpGp0b.css';\nimport { defineComponent, computed, openBlock, createElementBlock, normalizeClass, renderSlot, createTextVNode, toDisplayString } from \"vue\";\nimport { r as register, o as t7, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { i as isMac } from \"./platform-CC2ecGvV.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t7);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcKbd\",\n props: {\n symbol: { default: () => void 0 },\n mac: { type: Boolean, default: () => isMac }\n },\n setup(__props) {\n const labels = computed(() => ({\n ArrowUp: \"↑\",\n ArrowDown: \"↓\",\n ArrowLeft: \"←\",\n ArrowRight: \"→\",\n Control: !__props.mac ? t(\"Ctrl\") : \"⌘\",\n Alt: !__props.mac ? t(\"Alt\") : \"⌥\",\n Shift: !__props.mac ? t(\"Shift\") : \"⇧\",\n Enter: !__props.mac ? t(\"Enter\") : \"⏎\",\n Tab: !__props.mac ? t(\"Tab\") : \"⇥\",\n Delete: !__props.mac ? t(\"Delete\") : \"⌫\",\n Escape: !__props.mac ? t(\"Escape\") : \"⎋\",\n Space: t(\"Space\")\n // TRANSLATORS: Space key on keyboard\n }));\n const label = computed(() => __props.symbol && labels.value[__props.symbol] || __props.symbol);\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"kbd\", {\n class: normalizeClass(_ctx.$style.kbd)\n }, [\n renderSlot(_ctx.$slots, \"default\", {}, () => [\n createTextVNode(toDisplayString(label.value), 1)\n ])\n ], 2);\n };\n }\n});\nconst kbd = \"_kbd_3V7rw\";\nconst style0 = {\n \"material-design-icon\": \"_material-design-icon_FHHYV\",\n kbd\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcKbd = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n NcKbd as N\n};\n//# sourceMappingURL=NcKbd-Iyp0KDp4.mjs.map\n","import '../assets/NcHotkeyList-BfrEkKmK.css';\nimport { defineComponent, openBlock, createElementBlock, normalizeClass, createElementVNode, toDisplayString, unref, renderSlot } from \"vue\";\nimport { r as register, p as t31, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t31);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcHotkeyList\",\n props: {\n label: { default: () => void 0 }\n },\n setup(__props) {\n const labelId = `NcHotkeyList_${createElementId()}`;\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass(_ctx.$style.hotkeyList)\n }, [\n createElementVNode(\"div\", {\n id: labelId,\n class: normalizeClass([_ctx.$style.hotkeyList__heading, { \"hidden-visually\": !__props.label }])\n }, toDisplayString(__props.label || unref(t)(\"Keyboard shortcuts\")), 3),\n createElementVNode(\"ul\", { \"aria-labelledby\": labelId }, [\n renderSlot(_ctx.$slots, \"default\")\n ])\n ], 2);\n };\n }\n});\nconst hotkeyList = \"_hotkeyList_xNXCh\";\nconst hotkeyList__heading = \"_hotkeyList__heading_j6G86\";\nconst style0 = {\n hotkeyList,\n hotkeyList__heading\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcHotkeyList = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n NcHotkeyList as N\n};\n//# sourceMappingURL=NcHotkeyList-CmMgGhMr.mjs.map\n","import '../assets/NcListItemIcon-DJRcmlo1.css';\nimport \"escape-html\";\nimport \"striptags\";\nimport { resolveComponent, openBlock, createElementBlock, normalizeStyle, normalizeClass, createVNode, mergeProps, createElementVNode, createBlock, toDisplayString, createCommentVNode, renderSlot } from \"vue\";\nimport \"../composables/useIsDarkTheme/index.mjs\";\nimport \"@nextcloud/router\";\nimport \"../functions/isDarkTheme/index.mjs\";\nimport \"./NcMentionBubble.vue_vue_type_style_index_0_scoped_45238efd_lang-BX_KxRP-.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { u as userStatus, N as NcAvatar } from \"./NcAvatar-M3-CbKbq.mjs\";\nimport { _ as _sfc_main$1 } from \"./NcHighlight.vue_vue_type_script_lang-DnWQDM_2.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nconst margin = 8;\nconst defaultSize = 32;\nconst _sfc_main = {\n name: \"NcListItemIcon\",\n components: {\n NcAvatar,\n NcHighlight: _sfc_main$1,\n NcIconSvgWrapper\n },\n mixins: [\n userStatus\n ],\n props: {\n /**\n * Default first line text\n */\n name: {\n type: String,\n required: true\n },\n /**\n * Secondary optional line\n * Only visible on size of 32 and above\n */\n subname: {\n type: String,\n default: \"\"\n },\n /**\n * Icon class to be displayed at the end of the component\n */\n icon: {\n type: String,\n default: \"\"\n },\n /**\n * SVG icon to be displayed at the end of the component\n */\n iconSvg: {\n type: String,\n default: \"\"\n },\n /**\n * Descriptive name for the icon\n */\n iconName: {\n type: String,\n default: \"\"\n },\n /**\n * Search within the highlight of name/subname\n */\n search: {\n type: String,\n default: \"\"\n },\n /**\n * Set a size in px that will define the avatar height/width\n * and therefore, the height of the component\n */\n avatarSize: {\n type: Number,\n default: defaultSize\n },\n /**\n * Disable the margins of this component.\n * Useful for integration in `NcSelect` for example\n */\n noMargin: {\n type: Boolean,\n default: false\n },\n /**\n * See the [Avatar](#Avatar) displayName prop\n * Fallback to name\n */\n displayName: {\n type: String,\n default: null\n },\n /**\n * See the [Avatar](#Avatar) isNoUser prop\n * Enable/disable the UserStatus fetching\n */\n isNoUser: {\n type: Boolean,\n default: false\n },\n /**\n * Unique list item ID\n */\n id: {\n type: String,\n default: null\n }\n },\n setup() {\n return {\n margin,\n defaultSize\n };\n },\n computed: {\n hasIcon() {\n return this.icon !== \"\";\n },\n hasIconSvg() {\n return this.iconSvg !== \"\";\n },\n isValidSubname() {\n return this.subname?.trim?.() !== \"\";\n },\n isSizeBigEnough() {\n return this.avatarSize >= 26;\n },\n cssVars() {\n const margin2 = this.noMargin ? 0 : this.margin;\n return {\n \"--height\": this.avatarSize + 2 * margin2 + \"px\",\n \"--margin\": this.margin + \"px\"\n };\n },\n /**\n * Separates the search property into two parts, the first one is the search part on the name, the second on the subname.\n *\n * @return {[string, string]}\n */\n searchParts() {\n const EMAIL_NOTATION = /^([^<]*)<([^>]+)>?$/;\n const match = this.search.match(EMAIL_NOTATION);\n if (this.isNoUser || !match) {\n return [this.search, this.search];\n }\n return [match[1].trim(), match[2]];\n }\n },\n beforeMount() {\n if (!this.isNoUser && !this.subname) {\n this.fetchUserStatus(this.user);\n }\n }\n};\nconst _hoisted_1 = [\"id\"];\nconst _hoisted_2 = { class: \"option__details\" };\nconst _hoisted_3 = { key: 1 };\nconst _hoisted_4 = [\"aria-label\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcAvatar = resolveComponent(\"NcAvatar\");\n const _component_NcHighlight = resolveComponent(\"NcHighlight\");\n const _component_NcIconSvgWrapper = resolveComponent(\"NcIconSvgWrapper\");\n return openBlock(), createElementBlock(\"span\", {\n id: $props.id,\n class: normalizeClass([\"option\", { \"option--compact\": $props.avatarSize < $setup.defaultSize }]),\n style: normalizeStyle($options.cssVars)\n }, [\n createVNode(_component_NcAvatar, mergeProps(_ctx.$attrs, {\n disableMenu: \"\",\n disableTooltip: \"\",\n displayName: $props.displayName || $props.name,\n isNoUser: $props.isNoUser,\n size: $props.avatarSize,\n class: \"option__avatar\"\n }), null, 16, [\"displayName\", \"isNoUser\", \"size\"]),\n createElementVNode(\"div\", _hoisted_2, [\n createVNode(_component_NcHighlight, {\n class: \"option__lineone\",\n text: $props.name,\n search: $options.searchParts[0]\n }, null, 8, [\"text\", \"search\"]),\n $options.isValidSubname && $options.isSizeBigEnough ? (openBlock(), createBlock(_component_NcHighlight, {\n key: 0,\n class: \"option__linetwo\",\n text: $props.subname,\n search: $options.searchParts[1]\n }, null, 8, [\"text\", \"search\"])) : _ctx.hasStatus ? (openBlock(), createElementBlock(\"span\", _hoisted_3, [\n createElementVNode(\"span\", null, toDisplayString(_ctx.userStatus.icon), 1),\n createElementVNode(\"span\", null, toDisplayString(_ctx.userStatus.message), 1)\n ])) : createCommentVNode(\"\", true)\n ]),\n renderSlot(_ctx.$slots, \"default\", {}, () => [\n $options.hasIconSvg ? (openBlock(), createBlock(_component_NcIconSvgWrapper, {\n key: 0,\n class: \"option__icon\",\n svg: $props.iconSvg,\n name: $props.iconName\n }, null, 8, [\"svg\", \"name\"])) : $options.hasIcon ? (openBlock(), createElementBlock(\"span\", {\n key: 1,\n class: normalizeClass([\"icon option__icon\", $props.icon]),\n \"aria-label\": $props.iconName\n }, null, 10, _hoisted_4)) : createCommentVNode(\"\", true)\n ], true)\n ], 14, _hoisted_1);\n}\nconst NcListItemIcon = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-0ee94269\"]]);\nexport {\n NcListItemIcon as N\n};\n//# sourceMappingURL=NcListItemIcon-D_f5AGrh.mjs.map\n","import '../assets/NcProgressBar-B6wveIA1.css';\nimport { defineComponent, useCssVars, computed, openBlock, createElementBlock, normalizeClass, createElementVNode, toDisplayString, createCommentVNode } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _hoisted_1 = [\"aria-valuenow\"];\nconst _hoisted_2 = [\"height\", \"width\"];\nconst _hoisted_3 = [\"stroke-dasharray\", \"stroke-dashoffset\", \"stroke-width\", \"r\", \"cx\", \"cy\"];\nconst _hoisted_4 = [\"stroke-dasharray\", \"stroke-dashoffset\", \"stroke-width\", \"r\", \"cx\", \"cy\"];\nconst _hoisted_5 = {\n key: 1,\n class: \"progress-bar-container\"\n};\nconst _hoisted_6 = [\"value\"];\nconst _hoisted_7 = {\n key: 0,\n class: \"progress-bar__value\"\n};\nconst gridBaseline = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--default-grid-baseline\"));\nconst clickableArea = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--default-clickable-area\"));\nconst clickableAreaSmall = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--clickable-area-small\"));\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcProgressBar\",\n props: {\n value: { default: 0 },\n size: { default: \"small\" },\n error: { type: Boolean },\n type: { default: \"linear\" },\n color: { default: \"var(--color-primary-element)\" },\n showValue: { type: Boolean, default: false }\n },\n setup(__props) {\n useCssVars((_ctx) => ({\n \"v3a86fec2\": _ctx.color,\n \"v57442460\": heightPx.value\n }));\n const props = __props;\n const normalizedProgress = computed(() => Math.max(0, Math.min(100, props.value)) / 100);\n const height = computed(() => {\n if (typeof props.size === \"number\") {\n return Math.round(props.size);\n }\n if (props.type === \"circular\") {\n if (props.size === \"medium\") {\n return clickableArea;\n } else {\n return clickableAreaSmall;\n }\n }\n if (props.size === \"medium\") {\n return 1.5 * gridBaseline;\n }\n return gridBaseline;\n });\n const heightPx = computed(() => `${height.value}px`);\n const strokeWidth = computed(() => Math.max(gridBaseline, height.value / clickableArea * gridBaseline));\n const circleCenterPosition = computed(() => height.value / 2);\n const circleRadius = computed(() => height.value / 2 - strokeWidth.value);\n const circumference = computed(() => circleRadius.value * 2 * Math.PI);\n return (_ctx, _cache) => {\n return __props.type === \"circular\" ? (openBlock(), createElementBlock(\"span\", {\n key: 0,\n role: \"progressbar\",\n \"aria-valuenow\": __props.value,\n class: normalizeClass([{ \"progress-bar--error\": __props.error }, \"progress-bar progress-bar--circular\"])\n }, [\n (openBlock(), createElementBlock(\"svg\", {\n height: height.value,\n width: height.value\n }, [\n createElementVNode(\"circle\", {\n stroke: \"currentColor\",\n fill: \"transparent\",\n \"stroke-dasharray\": `${normalizedProgress.value * circumference.value} ${(1 - normalizedProgress.value) * circumference.value}`,\n \"stroke-dashoffset\": 0.25 * circumference.value,\n \"stroke-width\": strokeWidth.value,\n r: circleRadius.value,\n cx: circleCenterPosition.value,\n cy: circleCenterPosition.value\n }, null, 8, _hoisted_3),\n createElementVNode(\"circle\", {\n stroke: \"var(--color-background-darker)\",\n fill: \"transparent\",\n \"stroke-dasharray\": `${(1 - normalizedProgress.value) * circumference.value} ${normalizedProgress.value * circumference.value}`,\n \"stroke-dashoffset\": (0.25 - normalizedProgress.value) * circumference.value,\n \"stroke-width\": strokeWidth.value,\n r: circleRadius.value,\n cx: circleCenterPosition.value,\n cy: circleCenterPosition.value\n }, null, 8, _hoisted_4)\n ], 8, _hoisted_2))\n ], 10, _hoisted_1)) : (openBlock(), createElementBlock(\"div\", _hoisted_5, [\n createElementVNode(\"progress\", {\n class: normalizeClass([\"progress-bar progress-bar--linear vue\", { \"progress-bar--error\": __props.error }]),\n value: __props.value,\n max: \"100\"\n }, null, 10, _hoisted_6),\n __props.showValue ? (openBlock(), createElementBlock(\"span\", _hoisted_7, toDisplayString(__props.value) + \"%\", 1)) : createCommentVNode(\"\", true)\n ]));\n };\n }\n});\nconst NcProgressBar = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-353fa414\"]]);\nexport {\n NcProgressBar as N\n};\n//# sourceMappingURL=NcProgressBar-C-ane-Ni.mjs.map\n","import '../assets/NcRelatedResourcesPanel-CiG_Ixb6.css';\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nimport { r as register, S as t38, a as t, T as t42, U as t9 } from \"./_l10n-CG4CuN3H.mjs\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { g as getRoute } from \"./autolink-BT8u-IL-.mjs\";\nimport { resolveComponent, openBlock, createElementBlock, createVNode, withCtx, createTextVNode, toDisplayString, createElementVNode, mergeProps, createCommentVNode, Fragment, renderList, createBlock } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { getCapabilities } from \"@nextcloud/capabilities\";\nimport { C as ChevronDown } from \"./ChevronDown-C6gc637b.mjs\";\nimport { C as ChevronUp } from \"./ChevronUp-ChH8oB7p.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nregister(t38);\nconst _sfc_main$4 = {\n name: \"NcResource\",\n components: {\n NcButton\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n icon: {\n type: String,\n required: true\n },\n name: {\n type: String,\n required: true\n },\n url: {\n type: String,\n required: true\n }\n },\n data() {\n return {\n labelTranslated: t('Open link to \"{resourceName}\"', { resourceName: this.name })\n };\n },\n computed: {\n route() {\n return getRoute(this.$router, this.url);\n }\n },\n methods: {\n t\n }\n};\nconst _hoisted_1$4 = { class: \"resource\" };\nconst _hoisted_2$4 = { class: \"resource__icon\" };\nconst _hoisted_3$3 = [\"src\"];\nfunction _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcButton = resolveComponent(\"NcButton\");\n return openBlock(), createElementBlock(\"li\", _hoisted_1$4, [\n createVNode(_component_NcButton, {\n class: \"resource__button\",\n \"aria-label\": $data.labelTranslated,\n to: $options.route,\n href: $options.route ? null : $props.url,\n variant: \"tertiary\"\n }, {\n icon: withCtx(() => [\n createElementVNode(\"div\", _hoisted_2$4, [\n createElementVNode(\"img\", { src: $props.icon }, null, 8, _hoisted_3$3)\n ])\n ]),\n default: withCtx(() => [\n createTextVNode(\" \" + toDisplayString($props.name), 1)\n ]),\n _: 1\n }, 8, [\"aria-label\", \"to\", \"href\"])\n ]);\n}\nconst NcResource = /* @__PURE__ */ _export_sfc(_sfc_main$4, [[\"render\", _sfc_render$4], [\"__scopeId\", \"data-v-77577e58\"]]);\nconst _sfc_main$3 = {\n name: \"AccountGroupIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$3 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$3 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$2 = { d: \"M12,5.5A3.5,3.5 0 0,1 15.5,9A3.5,3.5 0 0,1 12,12.5A3.5,3.5 0 0,1 8.5,9A3.5,3.5 0 0,1 12,5.5M5,8C5.56,8 6.08,8.15 6.53,8.42C6.38,9.85 6.8,11.27 7.66,12.38C7.16,13.34 6.16,14 5,14A3,3 0 0,1 2,11A3,3 0 0,1 5,8M19,8A3,3 0 0,1 22,11A3,3 0 0,1 19,14C17.84,14 16.84,13.34 16.34,12.38C17.2,11.27 17.62,9.85 17.47,8.42C17.92,8.15 18.44,8 19,8M5.5,18.25C5.5,16.18 8.41,14.5 12,14.5C15.59,14.5 18.5,16.18 18.5,18.25V20H5.5V18.25M0,20V18.5C0,17.11 1.89,15.94 4.45,15.6C3.86,16.28 3.5,17.22 3.5,18.25V20H0M24,20H20.5V18.25C20.5,17.22 20.14,16.28 19.55,15.6C22.11,15.94 24,17.11 24,18.5V20Z\" };\nconst _hoisted_4$2 = { key: 0 };\nfunction _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon account-group-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$2, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$2, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$3))\n ], 16, _hoisted_1$3);\n}\nconst AccountGroup = /* @__PURE__ */ _export_sfc(_sfc_main$3, [[\"render\", _sfc_render$3]]);\nconst _sfc_main$2 = {\n name: \"OpenInNewIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$2 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$1 = { d: \"M14,3V5H17.59L7.76,14.83L9.17,16.24L19,6.41V10H21V3M19,19H5V5H12V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V12H19V19Z\" };\nconst _hoisted_4$1 = { key: 0 };\nfunction _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon open-in-new-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$1, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$1, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$2))\n ], 16, _hoisted_1$2);\n}\nconst OpenInNew = /* @__PURE__ */ _export_sfc(_sfc_main$2, [[\"render\", _sfc_render$2]]);\nregister(t42);\nconst teamResourceProviders = getCapabilities()?.circles?.teamResourceProviders ?? [];\nconst _sfc_main$1 = {\n name: \"NcTeamResources\",\n components: {\n AccountGroup,\n ChevronDown,\n ChevronUp,\n OpenInNew,\n NcButton,\n NcIconSvgWrapper\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n providerId: {\n type: String,\n default: null\n },\n itemId: {\n type: [String, Number],\n default: null\n }\n },\n data() {\n return {\n appEnabled: OC?.appswebroots?.circles !== void 0 && (OC.config.version.split(\".\")[0] ?? 0) >= 29,\n loading: false,\n teamResources: null,\n teamOpen: []\n };\n },\n computed: {\n isVisible() {\n return !this.loading && this.teamResources?.length > 0;\n },\n teamProviders() {\n return (teamId) => {\n const team = this.teamResources.find((t2) => t2.teamId === teamId);\n return team.resources?.reduce((acc, resource) => {\n if (resource.provider.id === this.providerId && resource.id === String(this.itemId)) {\n return acc;\n }\n if (!acc[resource.provider.id]) {\n acc[resource.provider.id] = resource.provider;\n acc[resource.provider.id].resources = [];\n }\n if (resource.provider.id === this.providerId && resource.id === String(this.itemId)) {\n return acc;\n }\n acc[resource.provider.id].resources.push(resource);\n return acc;\n }, {});\n };\n },\n open() {\n return (teamId) => {\n return this.teamOpen.indexOf(teamId) !== -1;\n };\n }\n },\n watch: {\n providerId() {\n this.fetchTeamResources();\n },\n itemId() {\n this.fetchTeamResources();\n }\n },\n created() {\n this.fetchTeamResources();\n },\n methods: {\n t,\n async fetchTeamResources() {\n if (!teamResourceProviders.includes(this.providerId)) {\n return;\n }\n try {\n this.loading = true;\n const response = await axios.get(generateOcsUrl(`/teams/resources/${this.providerId}/${this.itemId}`));\n this.teamResources = response.data.ocs.data.teams;\n this.teamOpen = [this.teamResources[0]?.teamId];\n } catch (error) {\n this.teamResources = null;\n logger.error(\"[NcTeamResources] Failed to fetch resources\", { error });\n } finally {\n this.loading = false;\n }\n },\n toggleOpen(teamId, open) {\n if (open) {\n this.teamOpen.push(teamId);\n } else {\n this.teamOpen.splice(this.teamOpen.indexOf(teamId), 1);\n }\n }\n }\n};\nconst _hoisted_1$1 = {\n key: 0,\n class: \"team-resources\"\n};\nconst _hoisted_2$1 = { class: \"team-resources__header\" };\nconst _hoisted_3 = [\"open\", \"onToggle\"];\nconst _hoisted_4 = { class: \"related-team__header\" };\nconst _hoisted_5 = { class: \"related-team__name\" };\nconst _hoisted_6 = { key: 0 };\nconst _hoisted_7 = [\"href\"];\nconst _hoisted_8 = {\n key: 0,\n class: \"resource__icon\"\n};\nconst _hoisted_9 = {\n key: 2,\n class: \"resource__icon\"\n};\nconst _hoisted_10 = [\"src\"];\nconst _hoisted_11 = { class: \"resource__name\" };\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_AccountGroup = resolveComponent(\"AccountGroup\");\n const _component_OpenInNew = resolveComponent(\"OpenInNew\");\n const _component_NcButton = resolveComponent(\"NcButton\");\n const _component_ChevronUp = resolveComponent(\"ChevronUp\");\n const _component_ChevronDown = resolveComponent(\"ChevronDown\");\n const _component_NcIconSvgWrapper = resolveComponent(\"NcIconSvgWrapper\");\n return $data.appEnabled && $options.isVisible ? (openBlock(), createElementBlock(\"div\", _hoisted_1$1, [\n createElementVNode(\"h5\", _hoisted_2$1, toDisplayString($options.t(\"Related team resources\")), 1),\n (openBlock(true), createElementBlock(Fragment, null, renderList($data.teamResources, (team) => {\n return openBlock(), createElementBlock(\"details\", {\n key: team.teamId,\n name: \"Team resources\",\n class: \"related-team\",\n open: $options.open(team.teamId),\n onToggle: (event) => $options.toggleOpen(team.teamId, event.target.open)\n }, [\n createElementVNode(\"summary\", _hoisted_4, [\n createElementVNode(\"h5\", _hoisted_5, [\n createVNode(_component_AccountGroup, { size: 20 }),\n createTextVNode(\" \" + toDisplayString(team.displayName), 1)\n ]),\n createVNode(_component_NcButton, {\n \"aria-label\": $options.t(\"View team\"),\n href: team.link,\n title: $options.t(\"View team\"),\n variant: \"tertiary\"\n }, {\n icon: withCtx(() => [\n createVNode(_component_OpenInNew, { size: 20 })\n ]),\n _: 1\n }, 8, [\"aria-label\", \"href\", \"title\"]),\n $options.open(team.teamId) ? (openBlock(), createBlock(_component_ChevronUp, {\n key: 0,\n size: 20\n })) : (openBlock(), createBlock(_component_ChevronDown, {\n key: 1,\n size: 20\n }))\n ]),\n createElementVNode(\"div\", null, [\n (openBlock(true), createElementBlock(Fragment, null, renderList($options.teamProviders(team.teamId), (provider) => {\n return openBlock(), createElementBlock(\"div\", {\n key: provider.id,\n class: \"related-team-provider\"\n }, [\n provider.resources.length > 0 ? (openBlock(), createElementBlock(\"h6\", _hoisted_6, toDisplayString(provider.name), 1)) : createCommentVNode(\"\", true),\n createElementVNode(\"ul\", null, [\n (openBlock(true), createElementBlock(Fragment, null, renderList(provider.resources, (resource) => {\n return openBlock(), createElementBlock(\"li\", {\n key: resource.url,\n class: \"related-team-resource\"\n }, [\n createElementVNode(\"a\", {\n href: resource.url,\n class: \"related-team-resource__link\"\n }, [\n resource.iconEmoji ? (openBlock(), createElementBlock(\"span\", _hoisted_8, toDisplayString(resource.iconEmoji), 1)) : resource.iconSvg ? (openBlock(), createBlock(_component_NcIconSvgWrapper, {\n key: 1,\n class: \"resource__icon\",\n svg: resource.iconSvg,\n size: 20\n }, null, 8, [\"svg\"])) : resource.iconURL ? (openBlock(), createElementBlock(\"span\", _hoisted_9, [\n createElementVNode(\"img\", {\n src: resource.iconURL,\n alt: \"\"\n }, null, 8, _hoisted_10)\n ])) : createCommentVNode(\"\", true),\n createElementVNode(\"span\", _hoisted_11, toDisplayString(resource.label), 1)\n ], 8, _hoisted_7)\n ]);\n }), 128))\n ])\n ]);\n }), 128))\n ])\n ], 40, _hoisted_3);\n }), 128))\n ])) : createCommentVNode(\"\", true);\n}\nconst NcTeamResources = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1], [\"__scopeId\", \"data-v-10ef45ac\"]]);\nregister(t9);\nconst _sfc_main = {\n name: \"NcRelatedResourcesPanel\",\n components: {\n NcResource,\n NcTeamResources\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n /**\n * The provider id implemented with `\\OCA\\RelatedResources\\IRelatedResourceProvider::getProviderId()`\n */\n providerId: {\n type: String,\n default: null\n },\n /**\n * The item id which uniquely identities the e.g. Calendar event, Deck board, file, Talk room, etc.\n */\n itemId: {\n type: [String, Number],\n default: null\n },\n /**\n * Limits to specific resource type. i.e. any provider id implemented with `\\OCA\\RelatedResources\\IRelatedResourceProvider::getProviderId()`\n */\n resourceType: {\n type: String,\n default: \"\"\n },\n /**\n * Set the maximum number of resources to load\n */\n limit: {\n type: Number,\n default: 0\n },\n /**\n * Only used by the files sidebar\n *\n * File info is passed when registered with `OCA.Sharing.ShareTabSections.registerSection()`\n */\n fileInfo: {\n type: Object,\n default: null\n },\n /**\n * Make the header name dynamic\n */\n header: {\n type: String,\n default: t(\"Related resources\")\n },\n description: {\n type: String,\n default: t(\"Anything shared with the same group of people will show up here\")\n },\n /**\n * If this element is used on a primary element set to true for primary styling.\n */\n primary: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n \"hasError\",\n \"hasResources\"\n ],\n data() {\n return {\n appEnabled: OC?.appswebroots?.related_resources !== void 0,\n loading: false,\n error: null,\n resources: []\n };\n },\n computed: {\n isVisible() {\n if (this.loading) {\n return false;\n }\n return this.error ?? this.resources.length > 0;\n },\n subline() {\n if (this.error) {\n return t(\"Error getting related resources. Please contact your system administrator if you have any questions.\");\n }\n return this.description;\n },\n hasResourceInfo() {\n if (this.providerId !== null && this.itemId !== null) {\n return true;\n }\n if (this.fileInfo !== null) {\n return true;\n }\n return false;\n },\n isFiles() {\n return this.fileInfo?.id !== void 0;\n },\n url() {\n let providerId;\n let itemId;\n if (this.isFiles) {\n providerId = \"files\";\n itemId = this.fileInfo.id;\n } else {\n providerId = this.providerId;\n itemId = this.itemId;\n }\n return generateOcsUrl(\"/apps/related_resources/related/{providerId}?itemId={itemId}&resourceType={resourceType}&limit={limit}&format=json\", {\n providerId,\n itemId,\n resourceType: this.resourceType,\n limit: this.limit\n });\n }\n },\n watch: {\n providerId() {\n this.fetchRelatedResources();\n },\n itemId() {\n this.fetchRelatedResources();\n },\n fileInfo() {\n this.fetchRelatedResources();\n },\n error(error) {\n this.$emit(\"hasError\", Boolean(error));\n },\n resources(resources) {\n this.$emit(\"hasResources\", resources.length > 0);\n }\n },\n created() {\n this.fetchRelatedResources();\n },\n methods: {\n t,\n async fetchRelatedResources() {\n if (!this.appEnabled || !this.hasResourceInfo) {\n return;\n }\n this.loading = true;\n this.error = null;\n this.resources = [];\n try {\n const response = await axios.get(this.url);\n this.resources = response.data.ocs?.data;\n } catch (error) {\n this.error = error;\n logger.error(\"[NcRelatedResourcesPanel] Failed to fetch resources\", { error });\n } finally {\n this.loading = false;\n }\n }\n }\n};\nconst _hoisted_1 = {\n key: 0,\n class: \"related-resources\"\n};\nconst _hoisted_2 = { class: \"related-resources__header\" };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcTeamResources = resolveComponent(\"NcTeamResources\");\n const _component_NcResource = resolveComponent(\"NcResource\");\n return openBlock(), createElementBlock(\"div\", null, [\n createVNode(_component_NcTeamResources, {\n providerId: $props.providerId,\n itemId: $props.itemId\n }, null, 8, [\"providerId\", \"itemId\"]),\n $data.appEnabled && $options.isVisible ? (openBlock(), createElementBlock(\"div\", _hoisted_1, [\n createElementVNode(\"div\", _hoisted_2, [\n createElementVNode(\"h5\", null, toDisplayString($props.header), 1),\n createElementVNode(\"p\", null, toDisplayString($options.subline), 1)\n ]),\n (openBlock(true), createElementBlock(Fragment, null, renderList($data.resources, (resource) => {\n return openBlock(), createBlock(_component_NcResource, {\n key: resource.itemId,\n class: \"related-resources__entry\",\n icon: resource.icon,\n name: resource.title,\n url: resource.url\n }, null, 8, [\"icon\", \"name\", \"url\"]);\n }), 128))\n ])) : createCommentVNode(\"\", true)\n ]);\n}\nconst NcRelatedResourcesPanel = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-78029c82\"]]);\nexport {\n NcRelatedResourcesPanel as N\n};\n//# sourceMappingURL=NcRelatedResourcesPanel-C0j0Fs4r.mjs.map\n","import '../assets/NcSelectUsers-YF5729PJ.css';\nimport { defineComponent, useModel, ref, watch, openBlock, createBlock, unref, mergeProps, withCtx, createVNode, mergeModels } from \"vue\";\nimport { N as NcListItemIcon } from \"./NcListItemIcon-D_f5AGrh.mjs\";\nimport { N as NcSelect } from \"./NcSelect-BOFzoCwK.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcSelectUsers\",\n props: /* @__PURE__ */ mergeModels({\n ariaLabelClearSelected: {},\n ariaLabelListbox: {},\n ariaLabelDeselectOption: { type: Function },\n disabled: { type: Boolean },\n inputId: {},\n inputLabel: {},\n labelOutside: { type: Boolean },\n keepOpen: { type: Boolean },\n loading: { type: Boolean },\n multiple: { type: Boolean },\n noWrap: { type: Boolean },\n options: {},\n placeholder: {},\n required: { type: Boolean }\n }, {\n \"modelValue\": {},\n \"modelModifiers\": {}\n }),\n emits: /* @__PURE__ */ mergeModels([\"search\"], [\"update:modelValue\"]),\n setup(__props, { emit: __emit }) {\n const modelValue = useModel(__props, \"modelValue\");\n const emit = __emit;\n const search = ref(\"\");\n watch(search, () => emit(\"search\", search.value));\n const clickableArea = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--default-clickable-area\"));\n const gridBaseLine = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--default-grid-baseline\"));\n const avatarSize = clickableArea - 2 * gridBaseLine;\n function filterBy(option, label, search2) {\n const EMAIL_NOTATION = /[^<]*<([^>]+)/;\n const match = search2.match(EMAIL_NOTATION);\n const subname = option.subname?.toLocaleLowerCase() ?? \"\";\n return match && subname.indexOf(match[1].toLocaleLowerCase()) > -1 || `${label} ${option.subname}`.toLocaleLowerCase().indexOf(search2.toLocaleLowerCase()) > -1;\n }\n return (_ctx, _cache) => {\n return openBlock(), createBlock(unref(NcSelect), mergeProps({\n modelValue: modelValue.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),\n class: \"nc-select-users\"\n }, _ctx.$props, {\n filterBy,\n label: \"displayName\",\n onSearch: _cache[1] || (_cache[1] = ($event) => search.value = $event)\n }), {\n option: withCtx((option) => [\n createVNode(unref(NcListItemIcon), mergeProps(option, {\n avatarSize: 32,\n name: option.displayName,\n search: search.value\n }), null, 16, [\"name\", \"search\"])\n ]),\n \"selected-option\": withCtx((selectedOption) => [\n createVNode(unref(NcListItemIcon), mergeProps(selectedOption, {\n avatarSize,\n name: selectedOption.displayName,\n noMargin: \"\",\n search: search.value\n }), null, 16, [\"name\", \"search\"])\n ]),\n _: 1\n }, 16, [\"modelValue\"]);\n };\n }\n});\nconst NcSelectUsers = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-e8e18fd3\"]]);\nexport {\n NcSelectUsers as N\n};\n//# sourceMappingURL=NcSelectUsers-CI8twLn9.mjs.map\n","import '../assets/NcSettingsSelectGroup-D_fSrafm.css';\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nimport debounce from \"debounce\";\nimport { N as NcSelect } from \"./NcSelect-BOFzoCwK.mjs\";\nimport { r as register, i as t50, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { resolveComponent, openBlock, createElementBlock, toDisplayString, createCommentVNode, createVNode, withDirectives, createElementVNode, vShow } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t50);\nconst _sfc_main = {\n name: \"NcSettingsSelectGroup\",\n components: {\n NcSelect\n },\n props: {\n /**\n * The text of the label element of the select group input\n */\n label: {\n type: String,\n required: true\n },\n /**\n * Placeholder for the input element\n * For backwards compatibility it falls back to the `label` value\n */\n placeholder: {\n type: String,\n default: \"\"\n },\n /**\n * id attribute of the select group element\n */\n id: {\n type: String,\n default: () => \"action-\" + createElementId(),\n validator: (id) => id.trim() !== \"\"\n },\n /**\n * value of the select group input\n * A list of group IDs can be provided\n */\n modelValue: {\n type: Array,\n default: () => []\n },\n /**\n * disabled state of the settings select group input\n */\n disabled: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n \"error\",\n \"input\",\n \"update:modelValue\"\n ],\n data() {\n return {\n /** Temporary store to cache groups */\n groups: {},\n randId: createElementId(),\n errorMessage: \"\"\n };\n },\n computed: {\n /**\n * If the error message should be shown\n */\n hasError() {\n return this.errorMessage !== \"\";\n },\n /**\n * Validate input value and only return valid strings (group IDs)\n *\n * @return {string[]}\n */\n filteredValue() {\n return this.modelValue.filter((group) => group !== \"\" && typeof group === \"string\");\n },\n /**\n * value property converted to an array of group objects used as input for the NcSelect\n */\n inputValue() {\n return this.filteredValue.map((id) => {\n if (typeof this.groups[id] === \"undefined\") {\n return {\n id,\n displayname: id\n };\n }\n return this.groups[id];\n });\n },\n /**\n * Convert groups object to array of groups required for NcSelect.options\n * Filter out currently selected values\n *\n * @return {object[]}\n */\n groupsArray() {\n return Object.values(this.groups).filter((g) => !this.modelValue.includes(g.id));\n }\n },\n watch: {\n /**\n * If the value is changed, check that all groups are loaded so we show the correct display name\n */\n modelValue: {\n handler() {\n const loadedGroupIds = Object.keys(this.groups);\n const missing = this.filteredValue.filter((group) => !loadedGroupIds.includes(group));\n missing.forEach((groupId) => {\n this.loadGroup(groupId);\n });\n },\n // Run the watch handler also when the component is initially mounted\n immediate: true\n }\n },\n /**\n * Load groups matching the empty query to reduce API calls\n */\n async mounted() {\n const storageName = `${appName}:${appVersion}/initialGroups`;\n let savedGroups = window.sessionStorage.getItem(storageName);\n if (savedGroups) {\n savedGroups = Object.fromEntries(JSON.parse(savedGroups).map((group) => [group.id, group]));\n this.groups = { ...this.groups, ...savedGroups };\n } else {\n await this.loadGroup(\"\");\n window.sessionStorage.setItem(storageName, JSON.stringify(Object.values(this.groups)));\n }\n },\n methods: {\n t,\n /**\n * Called when a new group is selected or previous group is deselected to emit the update event\n *\n * @param {object[]} updatedValue Array of selected groups\n */\n update(updatedValue) {\n const value = updatedValue.map((element) => element.id);\n this.$emit(\"update:modelValue\", value);\n },\n /**\n * Use provisioning API to search for given group and save it in the groups object\n *\n * @param {string} query The query like parts of the id oder display name\n * @return {boolean}\n */\n async loadGroup(query) {\n try {\n query = typeof query === \"string\" ? encodeURI(query) : \"\";\n const response = await axios.get(generateOcsUrl(`cloud/groups/details?search=${query}&limit=10`, 2));\n if (this.errorMessage !== \"\") {\n window.setTimeout(() => {\n this.errorMessage = \"\";\n }, 5e3);\n }\n if (Object.keys(response.data.ocs.data.groups).length > 0) {\n const newGroups = Object.fromEntries(response.data.ocs.data.groups.map((element) => [element.id, element]));\n this.groups = { ...this.groups, ...newGroups };\n return true;\n }\n } catch (error) {\n this.$emit(\"error\", error);\n this.errorMessage = t(\"Unable to search the group\");\n }\n return false;\n },\n /**\n * Custom filter function for `NcSelect` to filter by ID *and* display name\n *\n * @param {object} option One of the groups\n * @param {string} label The label property of the group\n * @param {string} search The current search string\n */\n filterGroups(option, label, search) {\n return `${label || \"\"} ${option.id}`.toLocaleLowerCase().indexOf(search.toLocaleLowerCase()) > -1;\n },\n /**\n * Debounce the group search (reduce API calls)\n */\n onSearch: debounce(function(query) {\n this.loadGroup(query);\n }, 200)\n }\n};\nconst _hoisted_1 = [\"for\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcSelect = resolveComponent(\"NcSelect\");\n return openBlock(), createElementBlock(\"div\", null, [\n $props.label ? (openBlock(), createElementBlock(\"label\", {\n key: 0,\n for: $props.id,\n class: \"hidden-visually\"\n }, toDisplayString($props.label), 9, _hoisted_1)) : createCommentVNode(\"\", true),\n createVNode(_component_NcSelect, {\n modelValue: $options.inputValue,\n options: $options.groupsArray,\n placeholder: $props.placeholder || $props.label,\n filterBy: $options.filterGroups,\n inputId: $props.id,\n limit: 5,\n label: \"displayname\",\n multiple: true,\n closeOnSelect: false,\n disabled: $props.disabled,\n \"onUpdate:modelValue\": $options.update,\n onSearch: $options.onSearch\n }, null, 8, [\"modelValue\", \"options\", \"placeholder\", \"filterBy\", \"inputId\", \"disabled\", \"onUpdate:modelValue\", \"onSearch\"]),\n withDirectives(createElementVNode(\"div\", { class: \"select-group-error\" }, toDisplayString($data.errorMessage), 513), [\n [vShow, $options.hasError]\n ])\n ]);\n}\nconst NcSettingsSelectGroup = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-f2b71592\"]]);\nexport {\n NcSettingsSelectGroup as N\n};\n//# sourceMappingURL=NcSettingsSelectGroup-TN64yH4k.mjs.map\n","import '../assets/NcTextArea-BxGe3Lqn.css';\nimport { defineComponent, useModel, useAttrs, useTemplateRef, computed, watch, openBlock, createElementBlock, normalizeClass, unref, createElementVNode, mergeProps, toDisplayString, createCommentVNode, createBlock, createTextVNode, mergeModels } from \"vue\";\nimport { d as mdiCheck, j as mdiAlertCircleOutline } from \"./mdi-CpchYUUV.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { a as isLegacy } from \"./legacy-BoqDmOCa.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _hoisted_1 = { class: \"textarea__main-wrapper\" };\nconst _hoisted_2 = [\"id\", \"aria-describedby\", \"disabled\", \"placeholder\", \"value\"];\nconst _hoisted_3 = [\"for\"];\nconst _hoisted_4 = [\"id\"];\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...{ inheritAttrs: false },\n __name: \"NcTextArea\",\n props: /* @__PURE__ */ mergeModels({\n disabled: { type: Boolean },\n error: { type: Boolean },\n helperText: { default: void 0 },\n id: { default: () => createElementId() },\n inputClass: { default: \"\" },\n label: { default: void 0 },\n labelOutside: { type: Boolean },\n placeholder: { default: void 0 },\n resize: { default: \"both\" },\n success: { type: Boolean }\n }, {\n \"modelValue\": { required: true },\n \"modelModifiers\": {}\n }),\n emits: [\"update:modelValue\"],\n setup(__props, { expose: __expose }) {\n const modelValue = useModel(__props, \"modelValue\");\n const props = __props;\n __expose({\n focus,\n select\n });\n const attrs = useAttrs();\n const textAreaElement = useTemplateRef(\"input\");\n const internalPlaceholder = computed(() => props.placeholder || (isLegacy ? props.label : void 0));\n watch(() => props.labelOutside, () => {\n if (!props.labelOutside && !props.label) {\n logger.warn(\"[NcTextArea] You need to add a label to the NcInputField component. Either use the prop label or use an external one, as per the example in the documentation.\");\n }\n });\n const ariaDescribedby = computed(() => {\n const ariaDescribedby2 = [];\n if (props.helperText) {\n ariaDescribedby2.push(`${props.id}-helper-text`);\n }\n if (typeof attrs[\"aria-describedby\"] === \"string\") {\n ariaDescribedby2.push(attrs[\"aria-describedby\"]);\n }\n return ariaDescribedby2.join(\" \") || void 0;\n });\n function handleInput(event) {\n const { value } = event.target;\n modelValue.value = value;\n }\n function focus(options) {\n textAreaElement.value.focus(options);\n }\n function select() {\n textAreaElement.value.select();\n }\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\"textarea\", [\n _ctx.$attrs.class,\n {\n \"textarea--disabled\": __props.disabled,\n \"textarea--legacy\": unref(isLegacy)\n }\n ]])\n }, [\n createElementVNode(\"div\", _hoisted_1, [\n createElementVNode(\"textarea\", mergeProps({ ..._ctx.$attrs, class: void 0 }, {\n id: __props.id,\n ref: \"input\",\n \"aria-describedby\": ariaDescribedby.value,\n \"aria-live\": \"polite\",\n class: [\"textarea__input\", [\n __props.inputClass,\n {\n \"textarea__input--label-outside\": __props.labelOutside,\n \"textarea__input--legacy\": unref(isLegacy),\n \"textarea__input--success\": __props.success,\n \"textarea__input--error\": __props.error\n }\n ]],\n disabled: __props.disabled,\n placeholder: internalPlaceholder.value,\n style: { resize: __props.resize },\n value: modelValue.value,\n onInput: handleInput\n }), null, 16, _hoisted_2),\n !__props.labelOutside ? (openBlock(), createElementBlock(\"label\", {\n key: 0,\n class: \"textarea__label\",\n for: __props.id\n }, toDisplayString(__props.label), 9, _hoisted_3)) : createCommentVNode(\"\", true)\n ]),\n __props.helperText ? (openBlock(), createElementBlock(\"p\", {\n key: 0,\n id: `${__props.id}-helper-text`,\n class: normalizeClass([\"textarea__helper-text-message\", {\n \"textarea__helper-text-message--error\": __props.error,\n \"textarea__helper-text-message--success\": __props.success\n }])\n }, [\n __props.success ? (openBlock(), createBlock(NcIconSvgWrapper, {\n key: 0,\n class: \"textarea__helper-text-message__icon\",\n path: unref(mdiCheck),\n inline: \"\"\n }, null, 8, [\"path\"])) : __props.error ? (openBlock(), createBlock(NcIconSvgWrapper, {\n key: 1,\n class: \"textarea__helper-text-message__icon\",\n path: unref(mdiAlertCircleOutline),\n inline: \"\"\n }, null, 8, [\"path\"])) : createCommentVNode(\"\", true),\n createTextVNode(\" \" + toDisplayString(__props.helperText), 1)\n ], 10, _hoisted_4)) : createCommentVNode(\"\", true)\n ], 2);\n };\n }\n});\nconst NcTextArea = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-d327fb49\"]]);\nexport {\n NcTextArea as N\n};\n//# sourceMappingURL=NcTextArea-Dxzj4zdb.mjs.map\n"],"names":["register","_sfc_main","defineComponent","NC_ACTIONS_IS_SEMANTIC_MENU","createElementId","t","_hoisted_1","_hoisted_2","_hoisted_3","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","toDisplayString","createCommentVNode","createElementVNode","renderSlot","NcActionButtonGroup","_export_sfc","NcAppNavigationList","t20","_hoisted_1$1","_sfc_main$1","__props","open","useModel","title","computed","createVNode","unref","NcButton","$event","withCtx","NcIconSvgWrapper","mdiMenuOpen","mdiMenu","NcAppNavigationToggle","props","focusTrap","setHasAppNavigation","inject","HAS_APP_NAVIGATION_KEY","warn","appNavigationContainerElement","useTemplateRef","isMobile","useIsMobile","ref","watchEffect","watch","toggleFocusTrap","onMounted","subscribe","toggleNavigationByEventBus","emit","createFocusTrap","toggleNavigation","getTrapStack","onUnmounted","unsubscribe","state","bodyStyles","animationLength","open2","handleEsc","normalizeClass","isLegacy34","withKeys","createBlock","NcAppNavigation","NcActions","_hoisted_4","mergeProps","ChevronUp","IconArrowRight","t14","IconClose","newValue","_component_IconArrowRight","resolveComponent","_component_NcButton","_component_IconClose","withModifiers","args","withDirectives","vModelText","NcInputConfirmCancel","_sfc_main$3","_hoisted_1$2","_hoisted_2$2","_hoisted_3$2","_hoisted_4$2","_sfc_render$3","Pencil","_sfc_main$2","_hoisted_2$1","_hoisted_3$1","_hoisted_4$1","_sfc_render$2","Undo","t21","ChevronDown","_sfc_render$1","_component_ChevronUp","_component_ChevronDown","NcAppNavigationIconCollapsible","t23","t51","NcActionButton","NcLoadingIcon","_sfc_main$4","id","newVal","event","navigate","routerLinkHref","href","_hoisted_5","_hoisted_6","_hoisted_7","_component_NcLoadingIcon","_component_NcInputConfirmCancel","_component_Pencil","_component_NcActionButton","_component_Undo","_component_NcActions","_component_NcAppNavigationIconCollapsible","resolveDynamicComponent","normalizeProps","guardReactiveProps","isActive","createTextVNode","NcAppNavigationItem","t16","t44","mergeModels","model","slots","useSlots","inputElement","inputHasFocus","useFocusWithin","transitionTimeout","actionsContainerElement","hasActions","showActions","timeoutId","hideActions","onCloseSearch","nextTick","NcInputField","NcAppNavigationSearch","t47","t48","t31","directive","el","encodedTlds","encodedUtlds","numeric","ascii","alpha","asciinumeric","alphanumeric","domain","emoji","scheme","slashscheme","whitespace","registerGroup","name","groups","addToGroups","flags","k","group","flagsForToken","result","c","State","token","input","nextState","i","regex","exactOnly","inputs","next","regexp","len","templateState","allFlags","ta","tr","ts","tt","WORD","UWORD","ASCIINUMERICAL","ALPHANUMERICAL","LOCALHOST","TLD","UTLD","SCHEME","SLASH_SCHEME","NUM","WS","NL","OPENBRACE","CLOSEBRACE","OPENBRACKET","CLOSEBRACKET","OPENPAREN","CLOSEPAREN","OPENANGLEBRACKET","CLOSEANGLEBRACKET","FULLWIDTHLEFTPAREN","FULLWIDTHRIGHTPAREN","LEFTCORNERBRACKET","RIGHTCORNERBRACKET","LEFTWHITECORNERBRACKET","RIGHTWHITECORNERBRACKET","FULLWIDTHLESSTHAN","FULLWIDTHGREATERTHAN","AMPERSAND","APOSTROPHE","ASTERISK","AT","BACKSLASH","BACKTICK","CARET","COLON","COMMA","DOLLAR","DOT","EQUALS","EXCLAMATION","HYPHEN","PERCENT","PIPE","PLUS","POUND","QUERY","QUOTE","FULLWIDTHMIDDLEDOT","SEMI","SLASH","TILDE","UNDERSCORE","EMOJI$1","SYM","tk","ASCII_LETTER","LETTER","EMOJI","DIGIT","SPACE","CR","LF","EMOJI_VARIATION","EMOJI_JOINER","OBJECT_REPLACEMENT","tlds","utlds","init$2","customSchemes","Start","decodeTlds","Num","Asciinumeric","Alphanumeric","Word","UWord","Nl","Cr","Ws","Emoji","EmojiJoiner","wordjr","uwordjr","fastts","a","b","sch","run$1","start","str","iterable","stringToArray","charCount","tokens","cursor","charCursor","tokenLength","latestAccepting","sinceAccepts","charsSinceAccepts","index","first","second","char","defaultt","jr","encoded","words","stack","digits","popDigitCount","popCount","defaults","noop","Options","opts","defaultRender","o","ignoredTags","uppercaseIgnoredTags","ir","key","operator","isCallable","option","obj","val","MultiToken","value","options","truncate","formatted","protocol","formattedHref","tagName","content","attributes","className","target","rel","attrs","eventListeners","createTokenClass","type","Token","p","Email","Text","Url","makeState","arg","init$1","qsAccepting","qsNonAccepting","localpartAccepting","Localpart","Domain","Scheme","SlashScheme","LocalpartAt","LocalpartDot","EmailDomain","EmailDomainDot","Email$1","EmailDomainHyphen","DomainHyphen","DomainDot","DomainDotTld","DomainDotTldColon","DomainDotTldColonPort","Url$1","UrlNonaccept","SchemeColon","SlashSchemeColon","SlashSchemeColonSlash","UriPrefix","bracketPairs","OPEN","CLOSE","UrlOpen","UrlOpenQ","UrlOpenSyms","run","multis","textTokens","secondState","multiLength","initMultiToken","Multi","subtokens","startIdx","endIdx","INIT","init","tokenize","linkifyString","escapeHTML","escapeAttr","attributesToString","attr","headerRef","_sfc_main$5","_hoisted_1$5","_hoisted_2$3","_hoisted_3$3","_hoisted_4$3","_sfc_render$4","IconDockRight","_hoisted_1$4","IconStar","_hoisted_1$3","IconStarOutline","selected","_sfc_main$6","sidebarTabsButton","sidebarTabsButton_legacy","sidebarTabsButton_selected","sidebarTabsButton__name","sidebarTabsButton__icon","sidebarTabsButton__legacyIcon","style0","cssModules","NcAppSidebarTabsButton","tab","active","getCanonicalLocale","tabIndex","_component_NcAppSidebarTabsButton","Fragment","renderList","NcAppSidebarTabs","t15","_sfc_main$7","NcEmptyContent","vOnClickOutside","CONTENT_SELECTOR_KEY","provide","useIsSmallMobile","isSlotPopulated","menu","menuTrigger","element","logger","activeTab","_hoisted_8","_component_IconDockRight","_component_IconStar","_component_IconStarOutline","_component_NcAppSidebarHeader","_component_NcAppSidebarTabs","_component_NcEmptyContent","_directive_focus","resolveDirective","_directive_click_outside","Transition","Teleport","normalizeStyle","vShow","NcAppSidebar","PQueue","t28","t6","t35","gtBuilder","getGettextBuilder","gt","t7","margin","defaultSize","NcAvatar","userStatus","margin2","EMAIL_NOTATION","match","_component_NcAvatar","_component_NcHighlight","_component_NcIconSvgWrapper","NcListItemIcon","t38","t42","getCapabilities","t9","__emit","modelValue","search","clickableArea","gridBaseLine","avatarSize","filterBy","label","search2","subname","NcSelect","selectedOption","NcSelectUsers","t50","debounce","query","__expose","focus","select","useAttrs","textAreaElement","internalPlaceholder","isLegacy","ariaDescribedby","ariaDescribedby2","handleInput","mdiCheck","mdiAlertCircleOutline","NcTextArea"],"mappings":"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","x_google_ignoreList":[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]} \ No newline at end of file +{"version":3,"file":"NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs","sources":["../node_modules/@nextcloud/vue/dist/chunks/NcActionButtonGroup-B9LfyE-G.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigationList-CGSWabRB.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigation-Bb9-C2eO.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigationCaption-E9iJtiQt.mjs","../node_modules/@nextcloud/vue/dist/chunks/ChevronUp-ChH8oB7p.mjs","../node_modules/@nextcloud/vue/dist/chunks/ArrowRight-B1ncAhus.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcInputConfirmCancel-B6qC3s63.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigationItem-BFAIHyTL.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigationSearch-CiOKjV3M.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppNavigationSettings-fbuQmy-q.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppSettingsDialog-DByPnndK.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppSettingsShortcutsSection-DgqVuZGx.mjs","../node_modules/@nextcloud/vue/dist/directives/Focus/index.mjs","../node_modules/linkifyjs/dist/linkify.mjs","../node_modules/@nextcloud/vue/dist/directives/Linkify/index.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppSidebarHeader.vue_vue_type_script_setup_true_lang-C-QhdyiN.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAppSidebar-Ch7Vp7q5.mjs","../node_modules/@nextcloud/vue/dist/functions/preloadImage/index.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcCollectionList-CO-iHqi6.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcDashboardWidget-ftOfMTzx.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcFilePicker-nPCwHMqj.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcKbd-Iyp0KDp4.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcHotkeyList-CmMgGhMr.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcListItemIcon-D_f5AGrh.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcProgressBar-C-ane-Ni.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcRelatedResourcesPanel-C0j0Fs4r.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcSelectUsers-CI8twLn9.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcSettingsSelectGroup-TN64yH4k.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcTextArea-Dxzj4zdb.mjs"],"sourcesContent":["import '../assets/NcActionButtonGroup-Bt8kRk79.css';\nimport { defineComponent, openBlock, createElementBlock, toDisplayString, createCommentVNode, createElementVNode, renderSlot } from \"vue\";\nimport { r as register, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { a as NC_ACTIONS_IS_SEMANTIC_MENU } from \"./useNcActions-BzPO2c4h.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister();\nconst _sfc_main = defineComponent({\n name: \"NcActionButtonGroup\",\n inject: {\n isInSemanticMenu: {\n from: NC_ACTIONS_IS_SEMANTIC_MENU,\n default: false\n }\n },\n props: {\n /**\n * Optional text shown below the button group\n */\n name: {\n required: false,\n default: void 0,\n type: String\n }\n },\n setup() {\n return {\n labelId: createElementId()\n };\n },\n methods: {\n t\n }\n});\nconst _hoisted_1 = [\"role\"];\nconst _hoisted_2 = [\"id\"];\nconst _hoisted_3 = [\"aria-labelledby\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"li\", {\n class: \"nc-button-group-base\",\n role: _ctx.isInSemanticMenu && \"presentation\"\n }, [\n _ctx.name ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n id: _ctx.labelId\n }, toDisplayString(_ctx.name), 9, _hoisted_2)) : createCommentVNode(\"\", true),\n createElementVNode(\"ul\", {\n class: \"nc-button-group-content\",\n role: \"group\",\n \"aria-labelledby\": _ctx.name ? _ctx.labelId : void 0\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 8, _hoisted_3)\n ], 8, _hoisted_1);\n}\nconst NcActionButtonGroup = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-6a2b8de0\"]]);\nexport {\n NcActionButtonGroup as N\n};\n//# sourceMappingURL=NcActionButtonGroup-B9LfyE-G.mjs.map\n","import '../assets/NcAppNavigationList--36j6Acm.css';\nimport { openBlock, createElementBlock, renderSlot } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n name: \"NcAppNavigationList\"\n};\nconst _hoisted_1 = { class: \"app-navigation-list\" };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"ul\", _hoisted_1, [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true)\n ]);\n}\nconst NcAppNavigationList = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-d72957ed\"]]);\nexport {\n NcAppNavigationList as N\n};\n//# sourceMappingURL=NcAppNavigationList-CGSWabRB.mjs.map\n","import '../assets/NcAppNavigation-2b1jxOXM.css';\nimport { defineComponent, useModel, computed, openBlock, createElementBlock, createVNode, unref, withCtx, inject, warn, useTemplateRef, ref, watchEffect, watch, onMounted, onUnmounted, normalizeClass, createElementVNode, withKeys, renderSlot, createBlock, createCommentVNode } from \"vue\";\nimport { subscribe, emit, unsubscribe } from \"@nextcloud/event-bus\";\nimport { createFocusTrap } from \"focus-trap\";\nimport { N as NcAppNavigationList } from \"./NcAppNavigationList-CGSWabRB.mjs\";\nimport { G as mdiMenuOpen, H as mdiMenu } from \"./mdi-CpchYUUV.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { r as register, P as t20, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { useIsMobile } from \"../composables/useIsMobile/index.mjs\";\nimport { g as getTrapStack } from \"./focusTrap-HJQ4pqHV.mjs\";\nimport { i as isLegacy34 } from \"./legacy-BoqDmOCa.mjs\";\nimport { H as HAS_APP_NAVIGATION_KEY } from \"./constants-Ciwvl5xb.mjs\";\nregister(t20);\nconst _hoisted_1$1 = { class: \"app-navigation-toggle-wrapper\" };\nconst _sfc_main$1 = /* @__PURE__ */ defineComponent({\n __name: \"NcAppNavigationToggle\",\n props: {\n \"open\": { type: Boolean, ...{ required: true } },\n \"openModifiers\": {}\n },\n emits: [\"update:open\"],\n setup(__props) {\n const open = useModel(__props, \"open\");\n const title = computed(() => open.value ? t(\"Close navigation\") : t(\"Open navigation\"));\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", _hoisted_1$1, [\n createVNode(unref(NcButton), {\n class: \"app-navigation-toggle\",\n \"aria-controls\": \"app-navigation-vue\",\n \"aria-expanded\": open.value ? \"true\" : \"false\",\n \"aria-label\": title.value,\n title: title.value,\n variant: \"tertiary\",\n onClick: _cache[0] || (_cache[0] = ($event) => open.value = !open.value)\n }, {\n icon: withCtx(() => [\n createVNode(NcIconSvgWrapper, {\n path: open.value ? unref(mdiMenuOpen) : unref(mdiMenu)\n }, null, 8, [\"path\"])\n ]),\n _: 1\n }, 8, [\"aria-expanded\", \"aria-label\", \"title\"])\n ]);\n };\n }\n});\nconst NcAppNavigationToggle = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"__scopeId\", \"data-v-5a15295d\"]]);\nconst _hoisted_1 = [\"aria-hidden\", \"aria-label\", \"aria-labelledby\", \"inert\"];\nconst _hoisted_2 = { class: \"app-navigation__search\" };\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppNavigation\",\n props: {\n ariaLabel: {},\n ariaLabelledby: {}\n },\n setup(__props) {\n const props = __props;\n let focusTrap;\n const setHasAppNavigation = inject(\n HAS_APP_NAVIGATION_KEY,\n () => warn(\"NcAppNavigation is not mounted inside NcContent, this is probably an error.\"),\n false\n );\n const appNavigationContainerElement = useTemplateRef(\"appNavigationContainer\");\n const isMobile = useIsMobile();\n const open = ref(!isMobile.value);\n watchEffect(() => {\n if (!props.ariaLabel && !props.ariaLabelledby) {\n warn(\"NcAppNavigation requires either `ariaLabel` or `ariaLabelledby` to be set for accessibility.\");\n }\n });\n watch(isMobile, () => {\n open.value = !isMobile.value;\n });\n watch(open, () => {\n toggleFocusTrap();\n });\n onMounted(() => {\n setHasAppNavigation(true);\n subscribe(\"toggle-navigation\", toggleNavigationByEventBus);\n emit(\"navigation-toggled\", {\n open: open.value\n });\n focusTrap = createFocusTrap(appNavigationContainerElement.value, {\n allowOutsideClick: true,\n clickOutsideDeactivates: () => {\n if (isMobile.value) {\n focusTrap.deactivate({ returnFocus: false });\n toggleNavigation(false);\n }\n return false;\n },\n fallbackFocus: appNavigationContainerElement.value,\n trapStack: getTrapStack(),\n escapeDeactivates: false\n });\n toggleFocusTrap();\n });\n onUnmounted(() => {\n setHasAppNavigation(false);\n unsubscribe(\"toggle-navigation\", toggleNavigationByEventBus);\n focusTrap.deactivate();\n });\n function toggleNavigation(state) {\n if (open.value === state) {\n emit(\"navigation-toggled\", {\n open: open.value\n });\n return;\n }\n open.value = state === void 0 ? !open.value : state;\n const bodyStyles = getComputedStyle(document.body);\n const animationLength = parseInt(bodyStyles.getPropertyValue(\"--animation-quick\")) || 100;\n setTimeout(() => {\n emit(\"navigation-toggled\", {\n open: open.value\n });\n }, 1.5 * animationLength);\n }\n function toggleNavigationByEventBus({ open: open2 }) {\n return toggleNavigation(open2);\n }\n function toggleFocusTrap() {\n if (isMobile.value && open.value) {\n focusTrap.activate();\n } else {\n focusTrap.deactivate();\n }\n }\n function handleEsc() {\n if (isMobile.value) {\n toggleNavigation(false);\n }\n }\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n ref: \"appNavigationContainer\",\n class: normalizeClass([\"app-navigation\", {\n \"app-navigation--closed\": !open.value,\n \"app-navigation--legacy\": unref(isLegacy34)\n }])\n }, [\n createElementVNode(\"nav\", {\n id: \"app-navigation-vue\",\n \"aria-hidden\": open.value ? \"false\" : \"true\",\n \"aria-label\": __props.ariaLabel || void 0,\n \"aria-labelledby\": __props.ariaLabelledby || void 0,\n class: \"app-navigation__content\",\n inert: !open.value || void 0,\n onKeydown: withKeys(handleEsc, [\"esc\"])\n }, [\n createElementVNode(\"div\", _hoisted_2, [\n renderSlot(_ctx.$slots, \"search\", {}, void 0, true)\n ]),\n createElementVNode(\"div\", {\n class: normalizeClass([\"app-navigation__body\", { \"app-navigation__body--no-list\": !_ctx.$slots.list }])\n }, [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true)\n ], 2),\n _ctx.$slots.list ? (openBlock(), createBlock(NcAppNavigationList, {\n key: 0,\n class: \"app-navigation__list\"\n }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"list\", {}, void 0, true)\n ]),\n _: 3\n })) : createCommentVNode(\"\", true),\n renderSlot(_ctx.$slots, \"footer\", {}, void 0, true)\n ], 40, _hoisted_1),\n createVNode(NcAppNavigationToggle, {\n open: open.value,\n \"onUpdate:open\": toggleNavigation\n }, null, 8, [\"open\"])\n ], 2);\n };\n }\n});\nconst NcAppNavigation = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-104ef656\"]]);\nexport {\n NcAppNavigation as N\n};\n//# sourceMappingURL=NcAppNavigation-Bb9-C2eO.mjs.map\n","import '../assets/NcAppNavigationCaption-ggcWspH2.css';\nimport { N as NcActions } from \"./NcActions-CUmcZ3C3.mjs\";\nimport { resolveComponent, openBlock, createBlock, resolveDynamicComponent, normalizeClass, withCtx, createTextVNode, toDisplayString, createElementBlock, createVNode, normalizeProps, guardReactiveProps, renderSlot, createCommentVNode } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n name: \"NcAppNavigationCaption\",\n components: {\n NcActions\n },\n props: {\n /**\n * The text of the caption\n */\n name: {\n type: String,\n required: true\n },\n /**\n * `id` to set on the inner caption\n * Can be used for connecting the `NcActionCaption` with `NcActionList` using `aria-labelledby`.\n */\n headingId: {\n type: String,\n default: null\n },\n /**\n * Enable when used as a heading\n * e.g. Before NcAppNavigationList\n */\n isHeading: {\n type: Boolean,\n default: false\n },\n /**\n * If `isHeading` is set, this defines the heading level that should be used\n */\n headingLevel: {\n type: Number,\n default: 2\n },\n /**\n * Any [NcActions](#/Components/NcActions?id=ncactions-1) prop\n */\n // Not an actual prop but needed to show in vue-styleguidist docs\n ...NcActions.props\n },\n computed: {\n actionsProps() {\n const actionProps = Object.keys(NcActions.props);\n const props = Object.entries(this.$props).filter(([key, _value]) => actionProps.includes(key));\n return Object.fromEntries(props);\n },\n wrapperTag() {\n return this.isHeading ? \"div\" : \"li\";\n },\n captionTag() {\n const headingLevel = Math.max(2, this.headingLevel);\n return this.isHeading ? `h${headingLevel}` : \"span\";\n }\n }\n};\nconst _hoisted_1 = {\n key: 0,\n class: \"app-navigation-caption__actions\"\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcActions = resolveComponent(\"NcActions\");\n return openBlock(), createBlock(resolveDynamicComponent($options.wrapperTag), {\n class: normalizeClass([\"app-navigation-caption\", { \"app-navigation-caption--heading\": $props.isHeading }])\n }, {\n default: withCtx(() => [\n (openBlock(), createBlock(resolveDynamicComponent($options.captionTag), {\n id: $props.headingId,\n class: \"app-navigation-caption__name\"\n }, {\n default: withCtx(() => [\n createTextVNode(toDisplayString($props.name), 1)\n ]),\n _: 1\n }, 8, [\"id\"])),\n !!_ctx.$slots.actions ? (openBlock(), createElementBlock(\"div\", _hoisted_1, [\n createVNode(_component_NcActions, normalizeProps(guardReactiveProps($options.actionsProps)), {\n icon: withCtx(() => [\n renderSlot(_ctx.$slots, \"actionsTriggerIcon\", {}, void 0, true)\n ]),\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"actions\", {}, void 0, true)\n ]),\n _: 3\n }, 16)\n ])) : createCommentVNode(\"\", true)\n ]),\n _: 3\n }, 8, [\"class\"]);\n}\nconst NcAppNavigationCaption = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-f0e411c2\"]]);\nexport {\n NcAppNavigationCaption as N\n};\n//# sourceMappingURL=NcAppNavigationCaption-E9iJtiQt.mjs.map\n","import { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n name: \"ChevronUpIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3 = { d: \"M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z\" };\nconst _hoisted_4 = { key: 0 };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon chevron-up-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2))\n ], 16, _hoisted_1);\n}\nconst ChevronUp = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nexport {\n ChevronUp as C\n};\n//# sourceMappingURL=ChevronUp-ChH8oB7p.mjs.map\n","import { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n name: \"ArrowRightIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3 = { d: \"M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z\" };\nconst _hoisted_4 = { key: 0 };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon arrow-right-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2))\n ], 16, _hoisted_1);\n}\nconst IconArrowRight = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nexport {\n IconArrowRight as I\n};\n//# sourceMappingURL=ArrowRight-B1ncAhus.mjs.map\n","import '../assets/NcInputConfirmCancel-BEmwC87z.css';\nimport { I as IconArrowRight } from \"./ArrowRight-B1ncAhus.mjs\";\nimport { I as IconClose } from \"./Close-CuhcJnX2.mjs\";\nimport { r as register, k as t14, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { i as isLegacy34 } from \"./legacy-BoqDmOCa.mjs\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { resolveComponent, openBlock, createElementBlock, normalizeClass, createElementVNode, withModifiers, withKeys, withDirectives, vModelText, createVNode, withCtx } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t14);\nconst _sfc_main = {\n name: \"NcInputConfirmCancel\",\n components: {\n IconArrowRight,\n IconClose,\n NcButton\n },\n setup() {\n return { isLegacy34 };\n },\n props: {\n /**\n * If this element is used on a primary element set to true for primary styling.\n */\n primary: {\n default: false,\n type: Boolean\n },\n /**\n * Placeholder of the edit field\n */\n placeholder: {\n default: \"\",\n type: String\n },\n /**\n * The current name (model value)\n */\n modelValue: {\n default: \"\",\n type: String\n }\n },\n emits: [\n \"cancel\",\n \"confirm\",\n \"update:modelValue\"\n ],\n data() {\n return {\n labelConfirm: t(\"Confirm changes\"),\n labelCancel: t(\"Cancel changes\")\n };\n },\n computed: {\n valueModel: {\n get() {\n return this.modelValue;\n },\n set(newValue) {\n this.$emit(\"update:modelValue\", newValue);\n }\n }\n },\n methods: {\n confirm() {\n this.$emit(\"confirm\");\n },\n cancel() {\n this.$emit(\"cancel\");\n },\n focusInput() {\n this.$refs.input.focus();\n }\n }\n};\nconst _hoisted_1 = [\"placeholder\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_IconArrowRight = resolveComponent(\"IconArrowRight\");\n const _component_NcButton = resolveComponent(\"NcButton\");\n const _component_IconClose = resolveComponent(\"IconClose\");\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\"app-navigation-input-confirm\", { \"app-navigation-input-confirm--legacy\": $setup.isLegacy34 }])\n }, [\n createElementVNode(\"form\", {\n onSubmit: _cache[1] || (_cache[1] = withModifiers((...args) => $options.confirm && $options.confirm(...args), [\"prevent\"])),\n onKeydown: _cache[2] || (_cache[2] = withKeys(withModifiers((...args) => $options.cancel && $options.cancel(...args), [\"exact\", \"stop\", \"prevent\"]), [\"esc\"])),\n onClick: _cache[3] || (_cache[3] = withModifiers(() => {\n }, [\"stop\", \"prevent\"]))\n }, [\n withDirectives(createElementVNode(\"input\", {\n ref: \"input\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => $options.valueModel = $event),\n type: \"text\",\n class: \"app-navigation-input-confirm__input\",\n placeholder: $props.placeholder\n }, null, 8, _hoisted_1), [\n [vModelText, $options.valueModel]\n ]),\n createVNode(_component_NcButton, {\n \"aria-label\": $data.labelConfirm,\n type: \"submit\",\n variant: \"primary\",\n onClick: withModifiers($options.confirm, [\"stop\", \"prevent\"])\n }, {\n icon: withCtx(() => [\n createVNode(_component_IconArrowRight, { size: 20 })\n ]),\n _: 1\n }, 8, [\"aria-label\", \"onClick\"]),\n createVNode(_component_NcButton, {\n \"aria-label\": $data.labelCancel,\n type: \"reset\",\n variant: $props.primary ? \"primary\" : \"tertiary\",\n onClick: withModifiers($options.cancel, [\"stop\", \"prevent\"])\n }, {\n icon: withCtx(() => [\n createVNode(_component_IconClose, { size: 20 })\n ]),\n _: 1\n }, 8, [\"aria-label\", \"variant\", \"onClick\"])\n ], 32)\n ], 2);\n}\nconst NcInputConfirmCancel = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-a8724c7f\"]]);\nexport {\n NcInputConfirmCancel as N\n};\n//# sourceMappingURL=NcInputConfirmCancel-B6qC3s63.mjs.map\n","import '../assets/NcAppNavigationItem-BsuZoJAq.css';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode, resolveComponent, createBlock, normalizeClass, withCtx, resolveDynamicComponent, normalizeProps, guardReactiveProps, withKeys, withModifiers, renderSlot, createVNode, createTextVNode } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { C as ChevronDown } from \"./ChevronDown-C6gc637b.mjs\";\nimport { C as ChevronUp } from \"./ChevronUp-ChH8oB7p.mjs\";\nimport { r as register, N as t21, a as t, b as t51, O as t23 } from \"./_l10n-CG4CuN3H.mjs\";\nimport { i as isLegacy34 } from \"./legacy-BoqDmOCa.mjs\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { N as NcInputConfirmCancel } from \"./NcInputConfirmCancel-B6qC3s63.mjs\";\nimport { useIsMobile } from \"../composables/useIsMobile/index.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { N as NcActionButton } from \"./NcActionButton-BO5T5ePT.mjs\";\nimport { N as NcActions } from \"./NcActions-CUmcZ3C3.mjs\";\nimport { N as NcLoadingIcon } from \"./NcLoadingIcon-BOVpFVQz.mjs\";\nimport { _ as _sfc_main$4 } from \"./NcVNodes.vue_vue_type_script_lang-BqUHinRZ.mjs\";\nconst _sfc_main$3 = {\n name: \"PencilIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$2 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$2 = { d: \"M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z\" };\nconst _hoisted_4$2 = { key: 0 };\nfunction _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon pencil-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$2, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$2, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$2))\n ], 16, _hoisted_1$2);\n}\nconst Pencil = /* @__PURE__ */ _export_sfc(_sfc_main$3, [[\"render\", _sfc_render$3]]);\nconst _sfc_main$2 = {\n name: \"UndoIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$1 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$1 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$1 = { d: \"M12.5,8C9.85,8 7.45,9 5.6,10.6L2,7V16H11L7.38,12.38C8.77,11.22 10.54,10.5 12.5,10.5C16.04,10.5 19.05,12.81 20.1,16L22.47,15.22C21.08,11.03 17.15,8 12.5,8Z\" };\nconst _hoisted_4$1 = { key: 0 };\nfunction _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon undo-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$1, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$1, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$1))\n ], 16, _hoisted_1$1);\n}\nconst Undo = /* @__PURE__ */ _export_sfc(_sfc_main$2, [[\"render\", _sfc_render$2]]);\nregister(t21);\nconst _sfc_main$1 = {\n name: \"NcAppNavigationIconCollapsible\",\n components: {\n NcButton,\n ChevronDown,\n ChevronUp\n },\n setup() {\n return { isLegacy34 };\n },\n props: {\n /**\n * Is the list currently open (or collapsed)\n */\n open: {\n type: Boolean,\n required: true\n },\n /**\n * Is the navigation item currently active.\n */\n active: {\n type: Boolean,\n required: true\n }\n },\n emits: [\"click\"],\n computed: {\n labelButton() {\n return this.open ? t(\"Collapse menu\") : t(\"Open menu\");\n }\n },\n methods: {\n onClick(e) {\n this.$emit(\"click\", e);\n }\n }\n};\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_ChevronUp = resolveComponent(\"ChevronUp\");\n const _component_ChevronDown = resolveComponent(\"ChevronDown\");\n const _component_NcButton = resolveComponent(\"NcButton\");\n return openBlock(), createBlock(_component_NcButton, {\n class: normalizeClass([\"icon-collapse\", {\n \"icon-collapse--active\": $props.active,\n \"icon-collapse--open\": $props.open\n }]),\n \"aria-label\": $options.labelButton,\n variant: $props.active && $setup.isLegacy34 ? \"tertiary-on-primary\" : \"tertiary\",\n onClick: $options.onClick\n }, {\n icon: withCtx(() => [\n $props.open ? (openBlock(), createBlock(_component_ChevronUp, {\n key: 0,\n size: 20\n })) : (openBlock(), createBlock(_component_ChevronDown, {\n key: 1,\n size: 20\n }))\n ]),\n _: 1\n }, 8, [\"class\", \"aria-label\", \"variant\", \"onClick\"]);\n}\nconst NcAppNavigationIconCollapsible = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1], [\"__scopeId\", \"data-v-acf5ed2f\"]]);\nregister(t23, t51);\nconst _sfc_main = {\n name: \"NcAppNavigationItem\",\n components: {\n NcActions,\n NcActionButton,\n NcAppNavigationIconCollapsible,\n NcInputConfirmCancel,\n NcLoadingIcon,\n NcVNodes: _sfc_main$4,\n Pencil,\n Undo\n },\n props: {\n /**\n * If you are not using vue-router you can use the property to set this item as the active navigation entry.\n * When using vue-router and the `to` property this is set automatically.\n */\n active: {\n type: Boolean,\n default: false\n },\n /**\n * The main text content of the entry.\n */\n name: {\n type: String,\n required: true\n },\n /**\n * The title attribute of the element.\n */\n title: {\n type: String,\n default: null\n },\n /**\n * id attribute of the list item element\n */\n id: {\n type: String,\n default: () => createElementId(),\n validator: (id) => id.trim() !== \"\"\n },\n /**\n * Refers to the icon on the left, this prop accepts a class\n * like 'icon-category-enabled'.\n */\n icon: {\n type: String,\n default: \"\"\n },\n /**\n * Displays a loading animated icon on the left of the element\n * instead of the icon.\n */\n loading: {\n type: Boolean,\n default: false\n },\n /**\n * Passing in a route will make the root element of this\n * component a `` that points to that route.\n * By leaving this blank, the root element will be a `
  • `.\n */\n to: {\n type: [String, Object],\n default: null\n },\n /**\n * A direct link. This will be used as the `href` attribute.\n * This will ignore any `to` prop being defined.\n */\n href: {\n type: String,\n default: null\n },\n /**\n * Gives the possibility to collapse the children elements into the\n * parent element (true) or expands the children elements (false).\n */\n allowCollapse: {\n type: Boolean,\n default: false\n },\n /**\n * Makes the name of the item editable by providing an `ActionButton`\n * component that toggles a form\n */\n editable: {\n type: Boolean,\n default: false\n },\n /**\n * Only for 'editable' items, sets label for the edit action button.\n */\n editLabel: {\n type: String,\n default: \"\"\n },\n /**\n * Only for items in 'editable' mode, sets the placeholder text for the editing form.\n */\n editPlaceholder: {\n type: String,\n default: \"\"\n },\n /**\n * Pins the item to the bottom left area, above the settings. Do not\n * place 'non-pinned' `AppnavigationItem` components below `pinned`\n * ones.\n */\n pinned: {\n type: Boolean,\n default: false\n },\n /**\n * Puts the item in the 'undo' state.\n */\n undo: {\n type: Boolean,\n default: false\n },\n /**\n * The navigation collapsible state (synced)\n */\n open: {\n type: Boolean,\n default: false\n },\n /**\n * The actions menu open state (synced)\n */\n menuOpen: {\n type: Boolean,\n default: false\n },\n /**\n * Force the actions to display in a three dot menu\n */\n forceMenu: {\n type: Boolean,\n default: false\n },\n /**\n * The action's menu default icon\n */\n menuIcon: {\n type: String,\n default: void 0\n },\n /**\n * The action's menu direction\n */\n menuPlacement: {\n type: String,\n default: \"bottom\"\n },\n /**\n * Entry aria details\n */\n ariaDescription: {\n type: String,\n default: null\n },\n /**\n * To be used only when the elements in the actions menu are very important\n */\n forceDisplayActions: {\n type: Boolean,\n default: false\n },\n /**\n * Number of action items outside the menu\n */\n inlineActions: {\n type: Number,\n default: 0\n }\n },\n emits: [\n \"update:menuOpen\",\n \"update:open\",\n \"update:name\",\n \"click\",\n \"undo\"\n ],\n setup() {\n return {\n isMobile: useIsMobile(),\n isLegacy34\n };\n },\n data() {\n return {\n actionsBoundariesElement: void 0,\n editingValue: \"\",\n opened: this.open,\n // Collapsible state\n editingActive: false,\n /**\n * Tracks the open state of the actions menu\n */\n menuOpenLocalValue: false,\n focused: false\n };\n },\n computed: {\n isRouterLink() {\n return this.to && !this.href;\n },\n // Checks if the component is already a children of another\n // instance of AppNavigationItem\n canHaveChildren() {\n if (this.$parent.$options._componentTag === \"AppNavigationItem\") {\n return false;\n } else {\n return true;\n }\n },\n editButtonAriaLabel() {\n return this.editLabel ? this.editLabel : t(\"Edit item\");\n },\n undoButtonAriaLabel() {\n return t(\"Undo changes\");\n }\n },\n watch: {\n open(newVal) {\n this.opened = newVal;\n }\n },\n mounted() {\n this.actionsBoundariesElement = document.querySelector(\"#content-vue\") || void 0;\n },\n methods: {\n // sync opened menu state with prop\n onMenuToggle(state) {\n this.$emit(\"update:menuOpen\", state);\n this.menuOpenLocalValue = state;\n },\n // toggle the collapsible state\n toggleCollapse() {\n this.opened = !this.opened;\n this.$emit(\"update:open\", this.opened);\n },\n /**\n * Handle link click\n *\n * @param {PointerEvent} event - Native click event\n * @param {Function} [navigate] - VueRouter link's navigate if any\n * @param {string} [routerLinkHref] - VueRouter link's href\n */\n onClick(event, navigate, routerLinkHref) {\n this.$emit(\"click\", event);\n if (event.metaKey || event.altKey || event.ctrlKey || event.shiftKey) {\n return;\n }\n if (routerLinkHref) {\n navigate?.(event);\n event.preventDefault();\n }\n },\n // Edition methods\n handleEdit() {\n this.editingValue = this.name;\n this.editingActive = true;\n this.onMenuToggle(false);\n this.$nextTick(() => {\n this.$refs.editingInput.focusInput();\n });\n },\n cancelEditing() {\n this.editingActive = false;\n },\n handleEditingDone() {\n this.$emit(\"update:name\", this.editingValue);\n this.editingValue = \"\";\n this.editingActive = false;\n },\n // Undo methods\n handleUndo() {\n this.$emit(\"undo\");\n },\n /**\n * Show actions upon focus\n */\n handleFocus() {\n this.focused = true;\n },\n handleBlur() {\n this.focused = false;\n },\n /**\n * This method checks if the root element of the component is focused and\n * if that's the case it focuses the actions button if available\n *\n * @param {Event} e the keydown event\n */\n handleTab(e) {\n if (!this.$refs.actions) {\n return;\n }\n if (this.focused) {\n e.preventDefault();\n this.$refs.actions.$refs.triggerButton.$el.focus();\n this.focused = false;\n } else {\n this.$refs.actions.$refs.triggerButton.$el.blur();\n }\n },\n /**\n * Is this an external link\n *\n * @param {string} href The link to check\n * @return {boolean} Whether it is external or not\n */\n isExternal(href) {\n return href && href.match(/[a-z]+:\\/\\//i);\n }\n }\n};\nconst _hoisted_1 = [\"id\"];\nconst _hoisted_2 = [\"aria-current\", \"aria-description\", \"aria-expanded\", \"href\", \"target\", \"title\", \"onClick\"];\nconst _hoisted_3 = {\n key: 0,\n class: \"editingContainer\"\n};\nconst _hoisted_4 = {\n key: 1,\n class: \"app-navigation-entry__deleted\"\n};\nconst _hoisted_5 = { class: \"app-navigation-entry__deleted-description\" };\nconst _hoisted_6 = {\n key: 0,\n class: \"app-navigation-entry__counter-wrapper\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"app-navigation-entry__children\"\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcLoadingIcon = resolveComponent(\"NcLoadingIcon\");\n const _component_NcInputConfirmCancel = resolveComponent(\"NcInputConfirmCancel\");\n const _component_Pencil = resolveComponent(\"Pencil\");\n const _component_NcActionButton = resolveComponent(\"NcActionButton\");\n const _component_Undo = resolveComponent(\"Undo\");\n const _component_NcActions = resolveComponent(\"NcActions\");\n const _component_NcAppNavigationIconCollapsible = resolveComponent(\"NcAppNavigationIconCollapsible\");\n return openBlock(), createElementBlock(\"li\", {\n id: $props.id,\n class: normalizeClass([{\n \"app-navigation-entry--opened\": $data.opened,\n \"app-navigation-entry--pinned\": $props.pinned,\n \"app-navigation-entry--collapsible\": $props.allowCollapse && !!_ctx.$slots.default\n }, \"app-navigation-entry-wrapper\"])\n }, [\n (openBlock(), createBlock(resolveDynamicComponent($options.isRouterLink ? \"router-link\" : \"NcVNodes\"), normalizeProps(guardReactiveProps({ ...$options.isRouterLink && { custom: true, to: $props.to } })), {\n default: withCtx(({ href: routerLinkHref, navigate, isActive }) => [\n createElementVNode(\"div\", {\n class: normalizeClass([\"app-navigation-entry\", {\n \"app-navigation-entry--editing\": $data.editingActive,\n \"app-navigation-entry--deleted\": $props.undo,\n \"app-navigation-entry--legacy\": $setup.isLegacy34,\n active: $props.to && isActive || $props.active\n }])\n }, [\n !$props.undo ? (openBlock(), createElementBlock(\"a\", {\n key: 0,\n class: \"app-navigation-entry-link\",\n \"aria-current\": $props.active || $props.to && isActive ? \"page\" : void 0,\n \"aria-description\": $props.ariaDescription,\n \"aria-expanded\": !!_ctx.$slots.default ? $data.opened.toString() : void 0,\n href: $props.href || routerLinkHref || \"#\",\n target: $options.isExternal($props.href) ? \"_blank\" : void 0,\n title: $props.title || $props.name,\n onBlur: _cache[1] || (_cache[1] = (...args) => $options.handleBlur && $options.handleBlur(...args)),\n onClick: ($event) => $options.onClick($event, navigate, routerLinkHref),\n onFocus: _cache[2] || (_cache[2] = (...args) => $options.handleFocus && $options.handleFocus(...args)),\n onKeydown: _cache[3] || (_cache[3] = withKeys(withModifiers((...args) => $options.handleTab && $options.handleTab(...args), [\"exact\"]), [\"tab\"]))\n }, [\n createElementVNode(\"div\", {\n class: normalizeClass([\"app-navigation-entry-icon\", { [$props.icon]: $props.icon }])\n }, [\n $props.loading ? (openBlock(), createBlock(_component_NcLoadingIcon, { key: 0 })) : renderSlot(_ctx.$slots, \"icon\", {\n key: 1,\n active: $props.active || $props.to && isActive\n }, void 0, true)\n ], 2),\n createElementVNode(\"span\", {\n class: normalizeClass([\"app-navigation-entry__name\", { \"hidden-visually\": $data.editingActive }])\n }, toDisplayString($props.name), 3),\n $data.editingActive ? (openBlock(), createElementBlock(\"div\", _hoisted_3, [\n createVNode(_component_NcInputConfirmCancel, {\n ref: \"editingInput\",\n modelValue: $data.editingValue,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => $data.editingValue = $event),\n placeholder: $props.editPlaceholder !== \"\" ? $props.editPlaceholder : $props.name,\n primary: $props.to && isActive || $props.active,\n onCancel: $options.cancelEditing,\n onConfirm: $options.handleEditingDone\n }, null, 8, [\"modelValue\", \"placeholder\", \"primary\", \"onCancel\", \"onConfirm\"])\n ])) : createCommentVNode(\"\", true)\n ], 40, _hoisted_2)) : createCommentVNode(\"\", true),\n $props.undo ? (openBlock(), createElementBlock(\"div\", _hoisted_4, [\n createElementVNode(\"div\", _hoisted_5, toDisplayString($props.name), 1)\n ])) : createCommentVNode(\"\", true),\n (!!_ctx.$slots.actions || !!_ctx.$slots.counter || $props.editable || $props.undo) && !$data.editingActive ? (openBlock(), createElementBlock(\"div\", {\n key: 2,\n class: normalizeClass([\"app-navigation-entry__utils\", { \"app-navigation-entry__utils--display-actions\": $props.forceDisplayActions || $data.menuOpenLocalValue || $props.menuOpen }])\n }, [\n !!_ctx.$slots.counter ? (openBlock(), createElementBlock(\"div\", _hoisted_6, [\n renderSlot(_ctx.$slots, \"counter\", {}, void 0, true)\n ])) : createCommentVNode(\"\", true),\n !!_ctx.$slots.actions || $props.editable && !$data.editingActive || $props.undo ? (openBlock(), createBlock(_component_NcActions, {\n key: 1,\n ref: \"actions\",\n class: \"app-navigation-entry__actions\",\n container: \"#app-navigation-vue\",\n boundariesElement: $data.actionsBoundariesElement,\n inline: $props.inlineActions,\n placement: $props.menuPlacement,\n open: $props.menuOpen,\n forceMenu: $props.forceMenu,\n defaultIcon: $props.menuIcon,\n variant: \"tertiary\",\n \"onUpdate:open\": $options.onMenuToggle\n }, {\n icon: withCtx(() => [\n renderSlot(_ctx.$slots, \"menu-icon\", {}, void 0, true)\n ]),\n default: withCtx(() => [\n $props.editable && !$data.editingActive ? (openBlock(), createBlock(_component_NcActionButton, {\n key: 0,\n \"aria-label\": $options.editButtonAriaLabel,\n onClick: $options.handleEdit\n }, {\n icon: withCtx(() => [\n createVNode(_component_Pencil, { size: 20 })\n ]),\n default: withCtx(() => [\n createTextVNode(\" \" + toDisplayString($props.editLabel), 1)\n ]),\n _: 1\n }, 8, [\"aria-label\", \"onClick\"])) : createCommentVNode(\"\", true),\n $props.undo ? (openBlock(), createBlock(_component_NcActionButton, {\n key: 1,\n \"aria-label\": $options.undoButtonAriaLabel,\n onClick: $options.handleUndo\n }, {\n icon: withCtx(() => [\n createVNode(_component_Undo, { size: 20 })\n ]),\n _: 1\n }, 8, [\"aria-label\", \"onClick\"])) : createCommentVNode(\"\", true),\n renderSlot(_ctx.$slots, \"actions\", {}, void 0, true)\n ]),\n _: 3\n }, 8, [\"boundariesElement\", \"inline\", \"placement\", \"open\", \"forceMenu\", \"defaultIcon\", \"onUpdate:open\"])) : createCommentVNode(\"\", true)\n ], 2)) : createCommentVNode(\"\", true),\n $props.allowCollapse && !!_ctx.$slots.default ? (openBlock(), createBlock(_component_NcAppNavigationIconCollapsible, {\n key: 3,\n active: $props.to && isActive || $props.active,\n open: $data.opened,\n onClick: withModifiers($options.toggleCollapse, [\"prevent\", \"stop\"])\n }, null, 8, [\"active\", \"open\", \"onClick\"])) : createCommentVNode(\"\", true),\n renderSlot(_ctx.$slots, \"extra\", {}, void 0, true)\n ], 2)\n ]),\n _: 3\n }, 16)),\n $options.canHaveChildren && !!_ctx.$slots.default ? (openBlock(), createElementBlock(\"ul\", _hoisted_7, [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true)\n ])) : createCommentVNode(\"\", true)\n ], 10, _hoisted_1);\n}\nconst NcAppNavigationItem = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-e4d562ae\"]]);\nexport {\n NcAppNavigationItem as N\n};\n//# sourceMappingURL=NcAppNavigationItem-BFAIHyTL.mjs.map\n","import '../assets/NcAppNavigationSearch-DD7mo6OW.css';\nimport { defineComponent, useModel, useSlots, ref, useTemplateRef, watch, openBlock, createElementBlock, normalizeClass, createVNode, unref, withCtx, renderSlot, createCommentVNode, mergeModels, nextTick } from \"vue\";\nimport { useFocusWithin } from \"@vueuse/core\";\nimport { I as IconClose } from \"./Close-CuhcJnX2.mjs\";\nimport { N as NcInputField } from \"./NcInputField-B1bGxYHt.mjs\";\nimport { r as register, C as t44, u as t16, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t16, t44);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppNavigationSearch\",\n props: /* @__PURE__ */ mergeModels({\n /**\n * Text used to label the search input\n */\n label: {\n type: String,\n default: t(\"Search …\")\n },\n /**\n * Placeholder of the search input\n * By default the value of `label` is used.\n */\n placeholder: {\n type: String,\n default: null\n }\n }, {\n \"modelValue\": { default: \"\" },\n \"modelModifiers\": {}\n }),\n emits: [\"update:modelValue\"],\n setup(__props) {\n const model = useModel(__props, \"modelValue\");\n const slots = useSlots();\n const inputElement = ref();\n const { focused: inputHasFocus } = useFocusWithin(inputElement);\n const transitionTimeout = Number.parseInt(window.getComputedStyle(window.document.body).getPropertyValue(\"--animation-quick\")) || 100;\n const actionsContainerElement = useTemplateRef(\"actionsContainer\");\n const hasActions = () => !!slots.actions?.({});\n const showActions = ref(true);\n const timeoutId = ref();\n const hideActions = ref(false);\n watch(inputHasFocus, () => {\n showActions.value = !inputHasFocus.value;\n window.clearTimeout(timeoutId.value);\n if (showActions.value) {\n hideActions.value = false;\n } else {\n window.setTimeout(() => {\n hideActions.value = !showActions.value;\n }, transitionTimeout);\n }\n });\n function onCloseSearch() {\n model.value = \"\";\n if (hasActions()) {\n showActions.value = true;\n nextTick(() => actionsContainerElement.value?.querySelector(\"button\")?.focus());\n }\n }\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\"app-navigation-search\", {\n \"app-navigation-search--has-actions\": hasActions()\n }])\n }, [\n createVNode(NcInputField, {\n ref_key: \"inputElement\",\n ref: inputElement,\n modelValue: model.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => model.value = $event),\n \"aria-label\": __props.label,\n class: \"app-navigation-search__input\",\n labelOutside: \"\",\n placeholder: __props.placeholder ?? __props.label,\n showTrailingButton: model.value.length > 0,\n trailingButtonLabel: unref(t)(\"Clear search\"),\n type: \"search\",\n onTrailingButtonClick: onCloseSearch\n }, {\n \"trailing-button-icon\": withCtx(() => [\n createVNode(IconClose, { size: 20 })\n ]),\n _: 1\n }, 8, [\"modelValue\", \"aria-label\", \"placeholder\", \"showTrailingButton\", \"trailingButtonLabel\"]),\n hasActions() ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n ref: \"actionsContainer\",\n class: normalizeClass([\"app-navigation-search__actions\", {\n \"app-navigation-search__actions--hidden\": !showActions.value,\n \"hidden-visually\": hideActions.value\n }])\n }, [\n renderSlot(_ctx.$slots, \"actions\", {}, void 0, true)\n ], 2)) : createCommentVNode(\"\", true)\n ], 2);\n };\n }\n});\nconst NcAppNavigationSearch = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-191b6717\"]]);\nexport {\n NcAppNavigationSearch as N\n};\n//# sourceMappingURL=NcAppNavigationSearch-CiOKjV3M.mjs.map\n","import '../assets/NcAppNavigationSettings-HQEDobBQ.css';\nimport { defineComponent, ref, useTemplateRef, computed, openBlock, createElementBlock, normalizeClass, createElementVNode, createVNode, unref, withCtx, createTextVNode, toDisplayString, Transition, withDirectives, renderSlot, vShow } from \"vue\";\nimport { C as mdiCog, D as mdiCogOutline } from \"./mdi-CpchYUUV.mjs\";\nimport { onClickOutside } from \"@vueuse/core\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { r as register, B as t47, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { a as isLegacy } from \"./legacy-BoqDmOCa.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t47);\nconst _hoisted_1 = [\"id\"];\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppNavigationSettings\",\n props: {\n excludeClickOutsideSelectors: { default: () => [] },\n name: { default: () => t(\"Settings\") }\n },\n setup(__props) {\n const contentId = createElementId();\n const open = ref(false);\n const container2 = useTemplateRef(\"wrapperElement\");\n const ignore = computed(() => Array.isArray(__props.excludeClickOutsideSelectors) ? __props.excludeClickOutsideSelectors : __props.excludeClickOutsideSelectors.split(\" \"));\n onClickOutside(container2, () => {\n open.value = false;\n }, { ignore });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n ref: \"wrapperElement\",\n class: normalizeClass(_ctx.$style.container)\n }, [\n createElementVNode(\"div\", {\n class: normalizeClass(_ctx.$style.header)\n }, [\n createVNode(NcButton, {\n \"aria-controls\": unref(contentId),\n \"aria-expanded\": open.value ? \"true\" : \"false\",\n class: normalizeClass(_ctx.$style.button),\n alignment: \"start\",\n variant: \"tertiary\",\n wide: \"\",\n onClick: _cache[0] || (_cache[0] = ($event) => open.value = !open.value)\n }, {\n icon: withCtx(() => [\n createVNode(NcIconSvgWrapper, {\n path: unref(isLegacy) ? unref(mdiCog) : unref(mdiCogOutline)\n }, null, 8, [\"path\"])\n ]),\n default: withCtx(() => [\n createTextVNode(\" \" + toDisplayString(__props.name), 1)\n ]),\n _: 1\n }, 8, [\"aria-controls\", \"aria-expanded\", \"class\"])\n ], 2),\n createVNode(Transition, {\n enterActiveClass: _ctx.$style.animationActive,\n leaveActiveClass: _ctx.$style.animationActive,\n enterFromClass: _ctx.$style.animationStop,\n leaveToClass: _ctx.$style.animationStop\n }, {\n default: withCtx(() => [\n withDirectives(createElementVNode(\"div\", {\n id: unref(contentId),\n class: normalizeClass(_ctx.$style.content)\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 10, _hoisted_1), [\n [vShow, open.value]\n ])\n ]),\n _: 3\n }, 8, [\"enterActiveClass\", \"leaveActiveClass\", \"enterFromClass\", \"leaveToClass\"])\n ], 2);\n };\n }\n});\nconst container = \"_container_RFk6U\";\nconst header = \"_header_2CtDS\";\nconst button = \"_button_tAyis\";\nconst content = \"_content_--KYD\";\nconst animationActive = \"_animationActive_DAG1p\";\nconst animationStop = \"_animationStop_fWYQj\";\nconst style0 = {\n container,\n header,\n button,\n content,\n animationActive,\n animationStop\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcAppNavigationSettings = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n NcAppNavigationSettings as N\n};\n//# sourceMappingURL=NcAppNavigationSettings-fbuQmy-q.mjs.map\n","import '../assets/NcAppSettingsDialog-HsZoLuDy.css';\nimport { defineComponent, inject, openBlock, createElementBlock, normalizeClass, unref, toDisplayString, useModel, provide, toRef, useTemplateRef, ref, computed, onBeforeUnmount, warn, createBlock, createSlots, withCtx, createElementVNode, renderSlot, createCommentVNode, Fragment, renderList, withKeys, withModifiers, mergeModels } from \"vue\";\nimport debounce from \"debounce\";\nimport { N as NcDialog } from \"./NcDialog-kwzJ3A4X.mjs\";\nimport { _ as _sfc_main$2 } from \"./NcVNodes.vue_vue_type_script_lang-BqUHinRZ.mjs\";\nimport { u as useLocalizedAppName, A as APP_VERSION } from \"./appName-DyNMVZpX.mjs\";\nimport { A as APP_SETTINGS_LEGACY_DESIGN_KEY, a as APP_SETTINGS_REGISTRATION_KEY } from \"./useAppSettingsDialog-C73Wx6iQ.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { useIsMobile } from \"../composables/useIsMobile/index.mjs\";\nimport { r as register, I as t48, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { i as isLegacy34 } from \"./legacy-BoqDmOCa.mjs\";\nconst _sfc_main$1 = /* @__PURE__ */ defineComponent({\n __name: \"NcAppSettingsDialogVersion\",\n setup(__props) {\n const legacy = inject(APP_SETTINGS_LEGACY_DESIGN_KEY);\n const localizedAppName = useLocalizedAppName();\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([_ctx.$style.appSettingsDialogVersion, { [_ctx.$style.appSettingsDialogVersion__legacy]: unref(legacy) }])\n }, toDisplayString(unref(localizedAppName)) + \" \" + toDisplayString(unref(APP_VERSION)), 3);\n };\n }\n});\nconst appSettingsDialogVersion = \"_appSettingsDialogVersion_8Xr7R\";\nconst appSettingsDialogVersion__legacy = \"_appSettingsDialogVersion__legacy_7MO71\";\nconst style0 = {\n \"material-design-icon\": \"_material-design-icon_qDIHA\",\n appSettingsDialogVersion,\n appSettingsDialogVersion__legacy\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcAppSettingsDialogVersion = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"__cssModules\", cssModules]]);\nregister(t48);\nconst _hoisted_1 = {\n key: 0,\n class: \"app-settings__title\"\n};\nconst _hoisted_2 = {\n key: 1,\n class: \"navigation-list\"\n};\nconst _hoisted_3 = [\"aria-current\", \"href\", \"onClick\", \"onKeydown\"];\nconst _hoisted_4 = {\n key: 0,\n class: \"navigation-list__link-icon\"\n};\nconst _hoisted_5 = { class: \"navigation-list__link-text\" };\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppSettingsDialog\",\n props: /* @__PURE__ */ mergeModels({\n showNavigation: { type: Boolean },\n container: { default: \"body\" },\n name: { default: \"\" },\n additionalTrapElements: { default: () => [] },\n legacy: { type: Boolean, default: false },\n noVersion: { type: Boolean, default: false }\n }, {\n \"open\": { type: Boolean, ...{ required: true } },\n \"openModifiers\": {}\n }),\n emits: [\"update:open\"],\n setup(__props) {\n const open = useModel(__props, \"open\");\n const props = __props;\n provide(APP_SETTINGS_REGISTRATION_KEY, {\n registerSection,\n unregisterSection\n });\n provide(APP_SETTINGS_LEGACY_DESIGN_KEY, toRef(() => props.legacy));\n const settingsScrollerElement = useTemplateRef(\"settingsScroller\");\n const isMobile = useIsMobile();\n const selectedSection = ref(\"\");\n const linkClicked = ref(false);\n const registeredSections = ref([]);\n const hasNavigation = computed(() => !isMobile.value && props.showNavigation);\n const hasNavigationIcons = computed(() => registeredSections.value.some(({ icon }) => !!icon));\n const unfocusNavigationItem = debounce(() => {\n selectedSection.value = \"\";\n if (document.activeElement?.className.includes(\"navigation-list__link\")) {\n document.activeElement.blur();\n }\n }, 300);\n const sectionsOrderMap = /* @__PURE__ */ new Map();\n onBeforeUnmount(() => {\n sectionsOrderMap.clear();\n });\n function handleSettingsNavigationClick(item) {\n linkClicked.value = true;\n document.getElementById(\"settings-section_\" + item).scrollIntoView({\n behavior: \"smooth\",\n inline: \"nearest\"\n });\n selectedSection.value = item;\n setTimeout(() => {\n linkClicked.value = false;\n }, 1e3);\n }\n function handleCloseModal(isOpen) {\n if (isOpen) {\n return;\n }\n open.value = false;\n settingsScrollerElement.value.scrollTop = 0;\n }\n function handleScroll() {\n if (open.value && !linkClicked.value) {\n unfocusNavigationItem();\n }\n }\n function registerSection(id, name, order, icon) {\n if (registeredSections.value.some(({ id: otherId }) => id === otherId)) {\n throw new Error(`Duplicate section id found: ${id}. Settings navigation sections must have unique section ids.`);\n }\n if (registeredSections.value.some(({ name: otherName }) => name === otherName)) {\n warn(`Duplicate section name found: ${name}. Settings navigation sections must have unique section names.`);\n }\n if (order !== void 0) {\n sectionsOrderMap.set(id, order);\n } else if (sectionsOrderMap.has(id)) {\n order = sectionsOrderMap.get(id);\n } else {\n order = Math.max(0, ...sectionsOrderMap.values()) + 1;\n sectionsOrderMap.set(id, order);\n }\n registeredSections.value = [...registeredSections.value, { id, name, order, icon }].sort(({ order: orderA }, { order: orderB }) => {\n return orderA - orderB;\n });\n if (registeredSections.value.length === 1) {\n selectedSection.value = id;\n }\n }\n function unregisterSection(id) {\n registeredSections.value = registeredSections.value.filter(({ id: otherId }) => id !== otherId);\n if (selectedSection.value === id) {\n selectedSection.value = registeredSections.value[0]?.id ?? \"\";\n }\n }\n return (_ctx, _cache) => {\n return open.value ? (openBlock(), createBlock(NcDialog, {\n key: 0,\n class: normalizeClass([\"app-settings\", { \"app-settings--legacy\": unref(isLegacy34) }]),\n contentClasses: \"app-settings__content\",\n navigationClasses: \"app-settings__navigation\",\n additionalTrapElements: __props.additionalTrapElements,\n container: __props.container,\n closeOnClickOutside: \"\",\n \"navigation-aria-label\": unref(t)(\"Settings navigation\"),\n size: \"large\",\n name: __props.name,\n \"onUpdate:open\": handleCloseModal\n }, createSlots({\n default: withCtx(() => [\n createElementVNode(\"div\", {\n ref: \"settingsScroller\",\n onScroll: handleScroll\n }, [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true),\n !__props.noVersion ? (openBlock(), createBlock(NcAppSettingsDialogVersion, { key: 0 })) : createCommentVNode(\"\", true)\n ], 544)\n ]),\n _: 2\n }, [\n hasNavigation.value ? {\n name: \"navigation\",\n fn: withCtx(({ isCollapsed }) => [\n !unref(isLegacy34) ? (openBlock(), createElementBlock(\"div\", _hoisted_1, toDisplayString(__props.name), 1)) : createCommentVNode(\"\", true),\n !isCollapsed ? (openBlock(), createElementBlock(\"ul\", _hoisted_2, [\n (openBlock(true), createElementBlock(Fragment, null, renderList(registeredSections.value, (section) => {\n return openBlock(), createElementBlock(\"li\", {\n key: section.id\n }, [\n createElementVNode(\"a\", {\n \"aria-current\": `${section.id === selectedSection.value}`,\n class: normalizeClass([\"navigation-list__link\", {\n \"navigation-list__link--active\": section.id === selectedSection.value,\n \"navigation-list__link--icon\": hasNavigationIcons.value\n }]),\n href: `#settings-section_${section.id}`,\n tabindex: \"0\",\n onClick: withModifiers(($event) => handleSettingsNavigationClick(section.id), [\"prevent\"]),\n onKeydown: withKeys(($event) => handleSettingsNavigationClick(section.id), [\"enter\"])\n }, [\n hasNavigationIcons.value ? (openBlock(), createElementBlock(\"div\", _hoisted_4, [\n section.icon ? (openBlock(), createBlock(_sfc_main$2, {\n key: 0,\n vnodes: section.icon\n }, null, 8, [\"vnodes\"])) : createCommentVNode(\"\", true)\n ])) : createCommentVNode(\"\", true),\n createElementVNode(\"span\", _hoisted_5, toDisplayString(section.name), 1)\n ], 42, _hoisted_3)\n ]);\n }), 128))\n ])) : createCommentVNode(\"\", true)\n ]),\n key: \"0\"\n } : void 0\n ]), 1032, [\"class\", \"additionalTrapElements\", \"container\", \"navigation-aria-label\", \"name\"])) : createCommentVNode(\"\", true);\n };\n }\n});\nconst NcAppSettingsDialog = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-e669a5ef\"]]);\nexport {\n NcAppSettingsDialog as N\n};\n//# sourceMappingURL=NcAppSettingsDialog-DByPnndK.mjs.map\n","import '../assets/NcAppSettingsShortcutsSection-BonG0SgH.css';\nimport { defineComponent, openBlock, createBlock, unref, withCtx, createElementVNode, normalizeClass, renderSlot } from \"vue\";\nimport { N as NcAppSettingsSection } from \"./NcAppSettingsSection-BosSmisT.mjs\";\nimport { r as register, p as t31, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t31);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppSettingsShortcutsSection\",\n setup(__props) {\n return (_ctx, _cache) => {\n return openBlock(), createBlock(NcAppSettingsSection, {\n id: \"keyboard-shortcuts\",\n name: unref(t)(\"Keyboard shortcuts\")\n }, {\n default: withCtx(() => [\n createElementVNode(\"div\", {\n class: normalizeClass(_ctx.$style.appSettingsSectionShortcuts)\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 2)\n ]),\n _: 3\n }, 8, [\"name\"]);\n };\n }\n});\nconst appSettingsSectionShortcuts = \"_appSettingsSectionShortcuts_RqpkA\";\nconst style0 = {\n appSettingsSectionShortcuts\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcAppSettingsShortcutsSection = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n NcAppSettingsShortcutsSection as N\n};\n//# sourceMappingURL=NcAppSettingsShortcutsSection-DgqVuZGx.mjs.map\n","const directive = {\n mounted(el) {\n el.focus();\n }\n};\nexport {\n directive as default\n};\n//# sourceMappingURL=index.mjs.map\n","// THIS FILE IS AUTOMATICALLY GENERATED DO NOT EDIT DIRECTLY\n// See update-tlds.js for encoding/decoding format\n// https://data.iana.org/TLD/tlds-alpha-by-domain.txt\nconst encodedTlds = 'aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2odyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rck0msd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2oodside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2';\n// Internationalized domain names containing non-ASCII\nconst encodedUtlds = 'ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2';\n\n/**\n * Finite State Machine generation utilities\n */\n\n/**\n * @template T\n * @typedef {{ [group: string]: T[] }} Collections\n */\n\n/**\n * @typedef {{ [group: string]: true }} Flags\n */\n\n// Keys in scanner Collections instances\nconst numeric = 'numeric';\nconst ascii = 'ascii';\nconst alpha = 'alpha';\nconst asciinumeric = 'asciinumeric';\nconst alphanumeric = 'alphanumeric';\nconst domain = 'domain';\nconst emoji = 'emoji';\nconst scheme = 'scheme';\nconst slashscheme = 'slashscheme';\nconst whitespace = 'whitespace';\n\n/**\n * @template T\n * @param {string} name\n * @param {Collections} groups to register in\n * @returns {T[]} Current list of tokens in the given collection\n */\nfunction registerGroup(name, groups) {\n if (!(name in groups)) {\n groups[name] = [];\n }\n return groups[name];\n}\n\n/**\n * @template T\n * @param {T} t token to add\n * @param {Collections} groups\n * @param {Flags} flags\n */\nfunction addToGroups(t, flags, groups) {\n if (flags[numeric]) {\n flags[asciinumeric] = true;\n flags[alphanumeric] = true;\n }\n if (flags[ascii]) {\n flags[asciinumeric] = true;\n flags[alpha] = true;\n }\n if (flags[asciinumeric]) {\n flags[alphanumeric] = true;\n }\n if (flags[alpha]) {\n flags[alphanumeric] = true;\n }\n if (flags[alphanumeric]) {\n flags[domain] = true;\n }\n if (flags[emoji]) {\n flags[domain] = true;\n }\n for (const k in flags) {\n const group = registerGroup(k, groups);\n if (group.indexOf(t) < 0) {\n group.push(t);\n }\n }\n}\n\n/**\n * @template T\n * @param {T} t token to check\n * @param {Collections} groups\n * @returns {Flags} group flags that contain this token\n */\nfunction flagsForToken(t, groups) {\n const result = {};\n for (const c in groups) {\n if (groups[c].indexOf(t) >= 0) {\n result[c] = true;\n }\n }\n return result;\n}\n\n/**\n * @template T\n * @typedef {null | T } Transition\n */\n\n/**\n * Define a basic state machine state. j is the list of character transitions,\n * jr is the list of regex-match transitions, jd is the default state to\n * transition to t is the accepting token type, if any. If this is the terminal\n * state, then it does not emit a token.\n *\n * The template type T represents the type of the token this state accepts. This\n * should be a string (such as of the token exports in `text.js`) or a\n * MultiToken subclass (from `multi.js`)\n *\n * @template T\n * @param {T} [token] Token that this state emits\n */\nfunction State(token = null) {\n // this.n = null; // DEBUG: State name\n /** @type {{ [input: string]: State }} j */\n this.j = {}; // IMPLEMENTATION 1\n // this.j = []; // IMPLEMENTATION 2\n /** @type {[RegExp, State][]} jr */\n this.jr = [];\n /** @type {?State} jd */\n this.jd = null;\n /** @type {?T} t */\n this.t = token;\n}\n\n/**\n * Scanner token groups\n * @type Collections\n */\nState.groups = {};\nState.prototype = {\n accepts() {\n return !!this.t;\n },\n /**\n * Follow an existing transition from the given input to the next state.\n * Does not mutate.\n * @param {string} input character or token type to transition on\n * @returns {?State} the next state, if any\n */\n go(input) {\n const state = this;\n const nextState = state.j[input];\n if (nextState) {\n return nextState;\n }\n for (let i = 0; i < state.jr.length; i++) {\n const regex = state.jr[i][0];\n const nextState = state.jr[i][1]; // note: might be empty to prevent default jump\n if (nextState && regex.test(input)) {\n return nextState;\n }\n }\n // Nowhere left to jump! Return default, if any\n return state.jd;\n },\n /**\n * Whether the state has a transition for the given input. Set the second\n * argument to true to only look for an exact match (and not a default or\n * regular-expression-based transition)\n * @param {string} input\n * @param {boolean} exactOnly\n */\n has(input, exactOnly = false) {\n return exactOnly ? input in this.j : !!this.go(input);\n },\n /**\n * Short for \"transition all\"; create a transition from the array of items\n * in the given list to the same final resulting state.\n * @param {string | string[]} inputs Group of inputs to transition on\n * @param {Transition | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of token groups\n */\n ta(inputs, next, flags, groups) {\n for (let i = 0; i < inputs.length; i++) {\n this.tt(inputs[i], next, flags, groups);\n }\n },\n /**\n * Short for \"take regexp transition\"; defines a transition for this state\n * when it encounters a token which matches the given regular expression\n * @param {RegExp} regexp Regular expression transition (populate first)\n * @param {T | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of token groups\n * @returns {State} taken after the given input\n */\n tr(regexp, next, flags, groups) {\n groups = groups || State.groups;\n let nextState;\n if (next && next.j) {\n nextState = next;\n } else {\n // Token with maybe token groups\n nextState = new State(next);\n if (flags && groups) {\n addToGroups(next, flags, groups);\n }\n }\n this.jr.push([regexp, nextState]);\n return nextState;\n },\n /**\n * Short for \"take transitions\", will take as many sequential transitions as\n * the length of the given input and returns the\n * resulting final state.\n * @param {string | string[]} input\n * @param {T | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of token groups\n * @returns {State} taken after the given input\n */\n ts(input, next, flags, groups) {\n let state = this;\n const len = input.length;\n if (!len) {\n return state;\n }\n for (let i = 0; i < len - 1; i++) {\n state = state.tt(input[i]);\n }\n return state.tt(input[len - 1], next, flags, groups);\n },\n /**\n * Short for \"take transition\", this is a method for building/working with\n * state machines.\n *\n * If a state already exists for the given input, returns it.\n *\n * If a token is specified, that state will emit that token when reached by\n * the linkify engine.\n *\n * If no state exists, it will be initialized with some default transitions\n * that resemble existing default transitions.\n *\n * If a state is given for the second argument, that state will be\n * transitioned to on the given input regardless of what that input\n * previously did.\n *\n * Specify a token group flags to define groups that this token belongs to.\n * The token will be added to corresponding entires in the given groups\n * object.\n *\n * @param {string} input character, token type to transition on\n * @param {T | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of groups\n * @returns {State} taken after the given input\n */\n tt(input, next, flags, groups) {\n groups = groups || State.groups;\n const state = this;\n\n // Check if existing state given, just a basic transition\n if (next && next.j) {\n state.j[input] = next;\n return next;\n }\n const t = next;\n\n // Take the transition with the usual default mechanisms and use that as\n // a template for creating the next state\n let nextState,\n templateState = state.go(input);\n if (templateState) {\n nextState = new State();\n Object.assign(nextState.j, templateState.j);\n nextState.jr.push.apply(nextState.jr, templateState.jr);\n nextState.jd = templateState.jd;\n nextState.t = templateState.t;\n } else {\n nextState = new State();\n }\n if (t) {\n // Ensure newly token is in the same groups as the old token\n if (groups) {\n if (nextState.t && typeof nextState.t === 'string') {\n const allFlags = Object.assign(flagsForToken(nextState.t, groups), flags);\n addToGroups(t, allFlags, groups);\n } else if (flags) {\n addToGroups(t, flags, groups);\n }\n }\n nextState.t = t; // overwrite anything that was previously there\n }\n state.j[input] = nextState;\n return nextState;\n }\n};\n\n// Helper functions to improve minification (not exported outside linkifyjs module)\n\n/**\n * @template T\n * @param {State} state\n * @param {string | string[]} input\n * @param {Flags} [flags]\n * @param {Collections} [groups]\n */\nconst ta = (state, input, next, flags, groups) => state.ta(input, next, flags, groups);\n\n/**\n * @template T\n * @param {State} state\n * @param {RegExp} regexp\n * @param {T | State} [next]\n * @param {Flags} [flags]\n * @param {Collections} [groups]\n */\nconst tr = (state, regexp, next, flags, groups) => state.tr(regexp, next, flags, groups);\n\n/**\n * @template T\n * @param {State} state\n * @param {string | string[]} input\n * @param {T | State} [next]\n * @param {Flags} [flags]\n * @param {Collections} [groups]\n */\nconst ts = (state, input, next, flags, groups) => state.ts(input, next, flags, groups);\n\n/**\n * @template T\n * @param {State} state\n * @param {string} input\n * @param {T | State} [next]\n * @param {Collections} [groups]\n * @param {Flags} [flags]\n */\nconst tt = (state, input, next, flags, groups) => state.tt(input, next, flags, groups);\n\n/******************************************************************************\nText Tokens\nIdentifiers for token outputs from the regexp scanner\n******************************************************************************/\n\n// A valid web domain token\nconst WORD = 'WORD'; // only contains a-z\nconst UWORD = 'UWORD'; // contains letters other than a-z, used for IDN\nconst ASCIINUMERICAL = 'ASCIINUMERICAL'; // contains a-z, 0-9\nconst ALPHANUMERICAL = 'ALPHANUMERICAL'; // contains numbers and letters other than a-z, used for IDN\n\n// Special case of word\nconst LOCALHOST = 'LOCALHOST';\n\n// Valid top-level domain, special case of WORD (see tlds.js)\nconst TLD = 'TLD';\n\n// Valid IDN TLD, special case of UWORD (see tlds.js)\nconst UTLD = 'UTLD';\n\n// The scheme portion of a web URI protocol. Supported types include: `mailto`,\n// `file`, and user-defined custom protocols. Limited to schemes that contain\n// only letters\nconst SCHEME = 'SCHEME';\n\n// Similar to SCHEME, except makes distinction for schemes that must always be\n// followed by `://`, not just `:`. Supported types include `http`, `https`,\n// `ftp`, `ftps`\nconst SLASH_SCHEME = 'SLASH_SCHEME';\n\n// Any sequence of digits 0-9\nconst NUM = 'NUM';\n\n// Any number of consecutive whitespace characters that are not newline\nconst WS = 'WS';\n\n// New line (unix style)\nconst NL = 'NL'; // \\n\n\n// Opening/closing bracket classes\n// TODO: Rename OPEN -> LEFT and CLOSE -> RIGHT in v5 to fit with Unicode names\n// Also rename angle brackes to LESSTHAN and GREATER THAN\nconst OPENBRACE = 'OPENBRACE'; // {\nconst CLOSEBRACE = 'CLOSEBRACE'; // }\nconst OPENBRACKET = 'OPENBRACKET'; // [\nconst CLOSEBRACKET = 'CLOSEBRACKET'; // ]\nconst OPENPAREN = 'OPENPAREN'; // (\nconst CLOSEPAREN = 'CLOSEPAREN'; // )\nconst OPENANGLEBRACKET = 'OPENANGLEBRACKET'; // <\nconst CLOSEANGLEBRACKET = 'CLOSEANGLEBRACKET'; // >\nconst FULLWIDTHLEFTPAREN = 'FULLWIDTHLEFTPAREN'; // (\nconst FULLWIDTHRIGHTPAREN = 'FULLWIDTHRIGHTPAREN'; // )\nconst LEFTCORNERBRACKET = 'LEFTCORNERBRACKET'; // 「\nconst RIGHTCORNERBRACKET = 'RIGHTCORNERBRACKET'; // 」\nconst LEFTWHITECORNERBRACKET = 'LEFTWHITECORNERBRACKET'; // 『\nconst RIGHTWHITECORNERBRACKET = 'RIGHTWHITECORNERBRACKET'; // 』\nconst FULLWIDTHLESSTHAN = 'FULLWIDTHLESSTHAN'; // <\nconst FULLWIDTHGREATERTHAN = 'FULLWIDTHGREATERTHAN'; // >\n\n// Various symbols\nconst AMPERSAND = 'AMPERSAND'; // &\nconst APOSTROPHE = 'APOSTROPHE'; // '\nconst ASTERISK = 'ASTERISK'; // *\nconst AT = 'AT'; // @\nconst BACKSLASH = 'BACKSLASH'; // \\\nconst BACKTICK = 'BACKTICK'; // `\nconst CARET = 'CARET'; // ^\nconst COLON = 'COLON'; // :\nconst COMMA = 'COMMA'; // ,\nconst DOLLAR = 'DOLLAR'; // $\nconst DOT = 'DOT'; // .\nconst EQUALS = 'EQUALS'; // =\nconst EXCLAMATION = 'EXCLAMATION'; // !\nconst HYPHEN = 'HYPHEN'; // -\nconst PERCENT = 'PERCENT'; // %\nconst PIPE = 'PIPE'; // |\nconst PLUS = 'PLUS'; // +\nconst POUND = 'POUND'; // #\nconst QUERY = 'QUERY'; // ?\nconst QUOTE = 'QUOTE'; // \"\nconst FULLWIDTHMIDDLEDOT = 'FULLWIDTHMIDDLEDOT'; // ・\n\nconst SEMI = 'SEMI'; // ;\nconst SLASH = 'SLASH'; // /\nconst TILDE = 'TILDE'; // ~\nconst UNDERSCORE = 'UNDERSCORE'; // _\n\n// Emoji symbol\nconst EMOJI$1 = 'EMOJI';\n\n// Default token - anything that is not one of the above\nconst SYM = 'SYM';\n\nvar tk = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tALPHANUMERICAL: ALPHANUMERICAL,\n\tAMPERSAND: AMPERSAND,\n\tAPOSTROPHE: APOSTROPHE,\n\tASCIINUMERICAL: ASCIINUMERICAL,\n\tASTERISK: ASTERISK,\n\tAT: AT,\n\tBACKSLASH: BACKSLASH,\n\tBACKTICK: BACKTICK,\n\tCARET: CARET,\n\tCLOSEANGLEBRACKET: CLOSEANGLEBRACKET,\n\tCLOSEBRACE: CLOSEBRACE,\n\tCLOSEBRACKET: CLOSEBRACKET,\n\tCLOSEPAREN: CLOSEPAREN,\n\tCOLON: COLON,\n\tCOMMA: COMMA,\n\tDOLLAR: DOLLAR,\n\tDOT: DOT,\n\tEMOJI: EMOJI$1,\n\tEQUALS: EQUALS,\n\tEXCLAMATION: EXCLAMATION,\n\tFULLWIDTHGREATERTHAN: FULLWIDTHGREATERTHAN,\n\tFULLWIDTHLEFTPAREN: FULLWIDTHLEFTPAREN,\n\tFULLWIDTHLESSTHAN: FULLWIDTHLESSTHAN,\n\tFULLWIDTHMIDDLEDOT: FULLWIDTHMIDDLEDOT,\n\tFULLWIDTHRIGHTPAREN: FULLWIDTHRIGHTPAREN,\n\tHYPHEN: HYPHEN,\n\tLEFTCORNERBRACKET: LEFTCORNERBRACKET,\n\tLEFTWHITECORNERBRACKET: LEFTWHITECORNERBRACKET,\n\tLOCALHOST: LOCALHOST,\n\tNL: NL,\n\tNUM: NUM,\n\tOPENANGLEBRACKET: OPENANGLEBRACKET,\n\tOPENBRACE: OPENBRACE,\n\tOPENBRACKET: OPENBRACKET,\n\tOPENPAREN: OPENPAREN,\n\tPERCENT: PERCENT,\n\tPIPE: PIPE,\n\tPLUS: PLUS,\n\tPOUND: POUND,\n\tQUERY: QUERY,\n\tQUOTE: QUOTE,\n\tRIGHTCORNERBRACKET: RIGHTCORNERBRACKET,\n\tRIGHTWHITECORNERBRACKET: RIGHTWHITECORNERBRACKET,\n\tSCHEME: SCHEME,\n\tSEMI: SEMI,\n\tSLASH: SLASH,\n\tSLASH_SCHEME: SLASH_SCHEME,\n\tSYM: SYM,\n\tTILDE: TILDE,\n\tTLD: TLD,\n\tUNDERSCORE: UNDERSCORE,\n\tUTLD: UTLD,\n\tUWORD: UWORD,\n\tWORD: WORD,\n\tWS: WS\n});\n\n// Note that these two Unicode ones expand into a really big one with Babel\nconst ASCII_LETTER = /[a-z]/;\nconst LETTER = /\\p{L}/u; // Any Unicode character with letter data type\nconst EMOJI = /\\p{Emoji}/u; // Any Unicode emoji character\nconst EMOJI_VARIATION$1 = /\\ufe0f/;\nconst DIGIT = /\\d/;\nconst SPACE = /\\s/;\n\nvar regexp = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tASCII_LETTER: ASCII_LETTER,\n\tDIGIT: DIGIT,\n\tEMOJI: EMOJI,\n\tEMOJI_VARIATION: EMOJI_VARIATION$1,\n\tLETTER: LETTER,\n\tSPACE: SPACE\n});\n\n/**\n\tThe scanner provides an interface that takes a string of text as input, and\n\toutputs an array of tokens instances that can be used for easy URL parsing.\n*/\n\nconst CR = '\\r'; // carriage-return character\nconst LF = '\\n'; // line-feed character\nconst EMOJI_VARIATION = '\\ufe0f'; // Variation selector, follows heart and others\nconst EMOJI_JOINER = '\\u200d'; // zero-width joiner\nconst OBJECT_REPLACEMENT = '\\ufffc'; // whitespace placeholder that sometimes appears in rich text editors\n\nlet tlds = null,\n utlds = null; // don't change so only have to be computed once\n\n/**\n * Scanner output token:\n * - `t` is the token name (e.g., 'NUM', 'EMOJI', 'TLD')\n * - `v` is the value of the token (e.g., '123', '❤️', 'com')\n * - `s` is the start index of the token in the original string\n * - `e` is the end index of the token in the original string\n * @typedef {{t: string, v: string, s: number, e: number}} Token\n */\n\n/**\n * @template T\n * @typedef {{ [collection: string]: T[] }} Collections\n */\n\n/**\n * Initialize the scanner character-based state machine for the given start\n * state\n * @param {[string, boolean][]} customSchemes List of custom schemes, where each\n * item is a length-2 tuple with the first element set to the string scheme, and\n * the second element set to `true` if the `://` after the scheme is optional\n */\nfunction init$2(customSchemes = []) {\n // Frequently used states (name argument removed during minification)\n /** @type Collections */\n const groups = {}; // of tokens\n State.groups = groups;\n /** @type State */\n const Start = new State();\n if (tlds == null) {\n tlds = decodeTlds(encodedTlds);\n }\n if (utlds == null) {\n utlds = decodeTlds(encodedUtlds);\n }\n\n // States for special URL symbols that accept immediately after start\n tt(Start, \"'\", APOSTROPHE);\n tt(Start, '{', OPENBRACE);\n tt(Start, '}', CLOSEBRACE);\n tt(Start, '[', OPENBRACKET);\n tt(Start, ']', CLOSEBRACKET);\n tt(Start, '(', OPENPAREN);\n tt(Start, ')', CLOSEPAREN);\n tt(Start, '<', OPENANGLEBRACKET);\n tt(Start, '>', CLOSEANGLEBRACKET);\n tt(Start, '(', FULLWIDTHLEFTPAREN);\n tt(Start, ')', FULLWIDTHRIGHTPAREN);\n tt(Start, '「', LEFTCORNERBRACKET);\n tt(Start, '」', RIGHTCORNERBRACKET);\n tt(Start, '『', LEFTWHITECORNERBRACKET);\n tt(Start, '』', RIGHTWHITECORNERBRACKET);\n tt(Start, '<', FULLWIDTHLESSTHAN);\n tt(Start, '>', FULLWIDTHGREATERTHAN);\n tt(Start, '&', AMPERSAND);\n tt(Start, '*', ASTERISK);\n tt(Start, '@', AT);\n tt(Start, '`', BACKTICK);\n tt(Start, '^', CARET);\n tt(Start, ':', COLON);\n tt(Start, ',', COMMA);\n tt(Start, '$', DOLLAR);\n tt(Start, '.', DOT);\n tt(Start, '=', EQUALS);\n tt(Start, '!', EXCLAMATION);\n tt(Start, '-', HYPHEN);\n tt(Start, '%', PERCENT);\n tt(Start, '|', PIPE);\n tt(Start, '+', PLUS);\n tt(Start, '#', POUND);\n tt(Start, '?', QUERY);\n tt(Start, '\"', QUOTE);\n tt(Start, '/', SLASH);\n tt(Start, ';', SEMI);\n tt(Start, '~', TILDE);\n tt(Start, '_', UNDERSCORE);\n tt(Start, '\\\\', BACKSLASH);\n tt(Start, '・', FULLWIDTHMIDDLEDOT);\n const Num = tr(Start, DIGIT, NUM, {\n [numeric]: true\n });\n tr(Num, DIGIT, Num);\n const Asciinumeric = tr(Num, ASCII_LETTER, ASCIINUMERICAL, {\n [asciinumeric]: true\n });\n const Alphanumeric = tr(Num, LETTER, ALPHANUMERICAL, {\n [alphanumeric]: true\n });\n\n // State which emits a word token\n const Word = tr(Start, ASCII_LETTER, WORD, {\n [ascii]: true\n });\n tr(Word, DIGIT, Asciinumeric);\n tr(Word, ASCII_LETTER, Word);\n tr(Asciinumeric, DIGIT, Asciinumeric);\n tr(Asciinumeric, ASCII_LETTER, Asciinumeric);\n\n // Same as previous, but specific to non-fsm.ascii alphabet words\n const UWord = tr(Start, LETTER, UWORD, {\n [alpha]: true\n });\n tr(UWord, ASCII_LETTER); // Non-accepting\n tr(UWord, DIGIT, Alphanumeric);\n tr(UWord, LETTER, UWord);\n tr(Alphanumeric, DIGIT, Alphanumeric);\n tr(Alphanumeric, ASCII_LETTER); // Non-accepting\n tr(Alphanumeric, LETTER, Alphanumeric); // Non-accepting\n\n // Whitespace jumps\n // Tokens of only non-newline whitespace are arbitrarily long\n // If any whitespace except newline, more whitespace!\n const Nl = tt(Start, LF, NL, {\n [whitespace]: true\n });\n const Cr = tt(Start, CR, WS, {\n [whitespace]: true\n });\n const Ws = tr(Start, SPACE, WS, {\n [whitespace]: true\n });\n tt(Start, OBJECT_REPLACEMENT, Ws);\n tt(Cr, LF, Nl); // \\r\\n\n tt(Cr, OBJECT_REPLACEMENT, Ws);\n tr(Cr, SPACE, Ws);\n tt(Ws, CR); // non-accepting state to avoid mixing whitespaces\n tt(Ws, LF); // non-accepting state to avoid mixing whitespaces\n tr(Ws, SPACE, Ws);\n tt(Ws, OBJECT_REPLACEMENT, Ws);\n\n // Emoji tokens. They are not grouped by the scanner except in cases where a\n // zero-width joiner is present\n const Emoji = tr(Start, EMOJI, EMOJI$1, {\n [emoji]: true\n });\n tt(Emoji, '#'); // no transition, emoji regex seems to match #\n tr(Emoji, EMOJI, Emoji);\n tt(Emoji, EMOJI_VARIATION, Emoji);\n // tt(Start, EMOJI_VARIATION, Emoji); // This one is sketchy\n\n const EmojiJoiner = tt(Emoji, EMOJI_JOINER);\n tt(EmojiJoiner, '#');\n tr(EmojiJoiner, EMOJI, Emoji);\n // tt(EmojiJoiner, EMOJI_VARIATION, Emoji); // also sketchy\n\n // Generates states for top-level domains\n // Note that this is most accurate when tlds are in alphabetical order\n const wordjr = [[ASCII_LETTER, Word], [DIGIT, Asciinumeric]];\n const uwordjr = [[ASCII_LETTER, null], [LETTER, UWord], [DIGIT, Alphanumeric]];\n for (let i = 0; i < tlds.length; i++) {\n fastts(Start, tlds[i], TLD, WORD, wordjr);\n }\n for (let i = 0; i < utlds.length; i++) {\n fastts(Start, utlds[i], UTLD, UWORD, uwordjr);\n }\n addToGroups(TLD, {\n tld: true,\n ascii: true\n }, groups);\n addToGroups(UTLD, {\n utld: true,\n alpha: true\n }, groups);\n\n // Collect the states generated by different protocols. NOTE: If any new TLDs\n // get added that are also protocols, set the token to be the same as the\n // protocol to ensure parsing works as expected.\n fastts(Start, 'file', SCHEME, WORD, wordjr);\n fastts(Start, 'mailto', SCHEME, WORD, wordjr);\n fastts(Start, 'http', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'https', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'ftp', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'ftps', SLASH_SCHEME, WORD, wordjr);\n addToGroups(SCHEME, {\n scheme: true,\n ascii: true\n }, groups);\n addToGroups(SLASH_SCHEME, {\n slashscheme: true,\n ascii: true\n }, groups);\n\n // Register custom schemes. Assumes each scheme is asciinumeric with hyphens\n customSchemes = customSchemes.sort((a, b) => a[0] > b[0] ? 1 : -1);\n for (let i = 0; i < customSchemes.length; i++) {\n const sch = customSchemes[i][0];\n const optionalSlashSlash = customSchemes[i][1];\n const flags = optionalSlashSlash ? {\n [scheme]: true\n } : {\n [slashscheme]: true\n };\n if (sch.indexOf('-') >= 0) {\n flags[domain] = true;\n } else if (!ASCII_LETTER.test(sch)) {\n flags[numeric] = true; // numbers only\n } else if (DIGIT.test(sch)) {\n flags[asciinumeric] = true;\n } else {\n flags[ascii] = true;\n }\n ts(Start, sch, sch, flags);\n }\n\n // Localhost token\n ts(Start, 'localhost', LOCALHOST, {\n ascii: true\n });\n\n // Set default transition for start state (some symbol)\n Start.jd = new State(SYM);\n return {\n start: Start,\n tokens: Object.assign({\n groups\n }, tk)\n };\n}\n\n/**\n\tGiven a string, returns an array of TOKEN instances representing the\n\tcomposition of that string.\n\n\t@method run\n\t@param {State} start scanner starting state\n\t@param {string} str input string to scan\n\t@return {Token[]} list of tokens, each with a type and value\n*/\nfunction run$1(start, str) {\n // State machine is not case sensitive, so input is tokenized in lowercased\n // form (still returns regular case). Uses selective `toLowerCase` because\n // lowercasing the entire string causes the length and character position to\n // vary in some non-English strings with V8-based runtimes.\n const iterable = stringToArray(str.replace(/[A-Z]/g, c => c.toLowerCase()));\n const charCount = iterable.length; // <= len if there are emojis, etc\n const tokens = []; // return value\n\n // cursor through the string itself, accounting for characters that have\n // width with length 2 such as emojis\n let cursor = 0;\n\n // Cursor through the array-representation of the string\n let charCursor = 0;\n\n // Tokenize the string\n while (charCursor < charCount) {\n let state = start;\n let nextState = null;\n let tokenLength = 0;\n let latestAccepting = null;\n let sinceAccepts = -1;\n let charsSinceAccepts = -1;\n while (charCursor < charCount && (nextState = state.go(iterable[charCursor]))) {\n state = nextState;\n\n // Keep track of the latest accepting state\n if (state.accepts()) {\n sinceAccepts = 0;\n charsSinceAccepts = 0;\n latestAccepting = state;\n } else if (sinceAccepts >= 0) {\n sinceAccepts += iterable[charCursor].length;\n charsSinceAccepts++;\n }\n tokenLength += iterable[charCursor].length;\n cursor += iterable[charCursor].length;\n charCursor++;\n }\n\n // Roll back to the latest accepting state\n cursor -= sinceAccepts;\n charCursor -= charsSinceAccepts;\n tokenLength -= sinceAccepts;\n\n // No more jumps, just make a new token from the last accepting one\n tokens.push({\n t: latestAccepting.t,\n // token type/name\n v: str.slice(cursor - tokenLength, cursor),\n // string value\n s: cursor - tokenLength,\n // start index\n e: cursor // end index (excluding)\n });\n }\n return tokens;\n}\n\n/**\n * Convert a String to an Array of characters, taking into account that some\n * characters like emojis take up two string indexes.\n *\n * Adapted from core-js (MIT license)\n * https://github.com/zloirock/core-js/blob/2d69cf5f99ab3ea3463c395df81e5a15b68f49d9/packages/core-js/internals/string-multibyte.js\n *\n * @function stringToArray\n * @param {string} str\n * @returns {string[]}\n */\nfunction stringToArray(str) {\n const result = [];\n const len = str.length;\n let index = 0;\n while (index < len) {\n let first = str.charCodeAt(index);\n let second;\n let char = first < 0xd800 || first > 0xdbff || index + 1 === len || (second = str.charCodeAt(index + 1)) < 0xdc00 || second > 0xdfff ? str[index] // single character\n : str.slice(index, index + 2); // two-index characters\n result.push(char);\n index += char.length;\n }\n return result;\n}\n\n/**\n * Fast version of ts function for when transition defaults are well known\n * @param {State} state\n * @param {string} input\n * @param {string} t\n * @param {string} defaultt\n * @param {[RegExp, State][]} jr\n * @returns {State}\n */\nfunction fastts(state, input, t, defaultt, jr) {\n let next;\n const len = input.length;\n for (let i = 0; i < len - 1; i++) {\n const char = input[i];\n if (state.j[char]) {\n next = state.j[char];\n } else {\n next = new State(defaultt);\n next.jr = jr.slice();\n state.j[char] = next;\n }\n state = next;\n }\n next = new State(t);\n next.jr = jr.slice();\n state.j[input[len - 1]] = next;\n return next;\n}\n\n/**\n * Converts a string of Top-Level Domain names encoded in update-tlds.js back\n * into a list of strings.\n * @param {str} encoded encoded TLDs string\n * @returns {str[]} original TLDs list\n */\nfunction decodeTlds(encoded) {\n const words = [];\n const stack = [];\n let i = 0;\n let digits = '0123456789';\n while (i < encoded.length) {\n let popDigitCount = 0;\n while (digits.indexOf(encoded[i + popDigitCount]) >= 0) {\n popDigitCount++; // encountered some digits, have to pop to go one level up trie\n }\n if (popDigitCount > 0) {\n words.push(stack.join('')); // whatever preceded the pop digits must be a word\n for (let popCount = parseInt(encoded.substring(i, i + popDigitCount), 10); popCount > 0; popCount--) {\n stack.pop();\n }\n i += popDigitCount;\n } else {\n stack.push(encoded[i]); // drop down a level into the trie\n i++;\n }\n }\n return words;\n}\n\n/**\n * An object where each key is a valid DOM Event Name such as `click` or `focus`\n * and each value is an event handler function.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/Element#events\n * @typedef {?{ [event: string]: Function }} EventListeners\n */\n\n/**\n * All formatted properties required to render a link, including `tagName`,\n * `attributes`, `content` and `eventListeners`.\n * @typedef {{ tagName: any, attributes: {[attr: string]: any}, content: string,\n * eventListeners: EventListeners }} IntermediateRepresentation\n */\n\n/**\n * Specify either an object described by the template type `O` or a function.\n *\n * The function takes a string value (usually the link's href attribute), the\n * link type (`'url'`, `'hashtag`', etc.) and an internal token representation\n * of the link. It should return an object of the template type `O`\n * @template O\n * @typedef {O | ((value: string, type: string, token: MultiToken) => O)} OptObj\n */\n\n/**\n * Specify either a function described by template type `F` or an object.\n *\n * Each key in the object should be a link type (`'url'`, `'hashtag`', etc.). Each\n * value should be a function with template type `F` that is called when the\n * corresponding link type is encountered.\n * @template F\n * @typedef {F | { [type: string]: F}} OptFn\n */\n\n/**\n * Specify either a value with template type `V`, a function that returns `V` or\n * an object where each value resolves to `V`.\n *\n * The function takes a string value (usually the link's href attribute), the\n * link type (`'url'`, `'hashtag`', etc.) and an internal token representation\n * of the link. It should return an object of the template type `V`\n *\n * For the object, each key should be a link type (`'url'`, `'hashtag`', etc.).\n * Each value should either have type `V` or a function that returns V. This\n * function similarly takes a string value and a token.\n *\n * Example valid types for `Opt`:\n *\n * ```js\n * 'hello'\n * (value, type, token) => 'world'\n * { url: 'hello', email: (value, token) => 'world'}\n * ```\n * @template V\n * @typedef {V | ((value: string, type: string, token: MultiToken) => V) | { [type: string]: V | ((value: string, token: MultiToken) => V) }} Opt\n */\n\n/**\n * See available options: https://linkify.js.org/docs/options.html\n * @typedef {{\n * \tdefaultProtocol?: string,\n * events?: OptObj,\n * \tformat?: Opt,\n * \tformatHref?: Opt,\n * \tnl2br?: boolean,\n * \ttagName?: Opt,\n * \ttarget?: Opt,\n * \trel?: Opt,\n * \tvalidate?: Opt,\n * \ttruncate?: Opt,\n * \tclassName?: Opt,\n * \tattributes?: OptObj<({ [attr: string]: any })>,\n * ignoreTags?: string[],\n * \trender?: OptFn<((ir: IntermediateRepresentation) => any)>\n * }} Opts\n */\n\n/**\n * @type Required\n */\nconst defaults = {\n defaultProtocol: 'http',\n events: null,\n format: noop,\n formatHref: noop,\n nl2br: false,\n tagName: 'a',\n target: null,\n rel: null,\n validate: true,\n truncate: Infinity,\n className: null,\n attributes: null,\n ignoreTags: [],\n render: null\n};\n\n/**\n * Utility class for linkify interfaces to apply specified\n * {@link Opts formatting and rendering options}.\n *\n * @param {Opts | Options} [opts] Option value overrides.\n * @param {(ir: IntermediateRepresentation) => any} [defaultRender] (For\n * internal use) default render function that determines how to generate an\n * HTML element based on a link token's derived tagName, attributes and HTML.\n * Similar to render option\n */\nfunction Options(opts, defaultRender = null) {\n let o = Object.assign({}, defaults);\n if (opts) {\n o = Object.assign(o, opts instanceof Options ? opts.o : opts);\n }\n\n // Ensure all ignored tags are uppercase\n const ignoredTags = o.ignoreTags;\n const uppercaseIgnoredTags = [];\n for (let i = 0; i < ignoredTags.length; i++) {\n uppercaseIgnoredTags.push(ignoredTags[i].toUpperCase());\n }\n /** @protected */\n this.o = o;\n if (defaultRender) {\n this.defaultRender = defaultRender;\n }\n this.ignoreTags = uppercaseIgnoredTags;\n}\nOptions.prototype = {\n o: defaults,\n /**\n * @type string[]\n */\n ignoreTags: [],\n /**\n * @param {IntermediateRepresentation} ir\n * @returns {any}\n */\n defaultRender(ir) {\n return ir;\n },\n /**\n * Returns true or false based on whether a token should be displayed as a\n * link based on the user options.\n * @param {MultiToken} token\n * @returns {boolean}\n */\n check(token) {\n return this.get('validate', token.toString(), token);\n },\n // Private methods\n\n /**\n * Resolve an option's value based on the value of the option and the given\n * params. If operator and token are specified and the target option is\n * callable, automatically calls the function with the given argument.\n * @template {keyof Opts} K\n * @param {K} key Name of option to use\n * @param {string} [operator] will be passed to the target option if it's a\n * function. If not specified, RAW function value gets returned\n * @param {MultiToken} [token] The token from linkify.tokenize\n * @returns {Opts[K] | any}\n */\n get(key, operator, token) {\n const isCallable = operator != null;\n let option = this.o[key];\n if (!option) {\n return option;\n }\n if (typeof option === 'object') {\n option = token.t in option ? option[token.t] : defaults[key];\n if (typeof option === 'function' && isCallable) {\n option = option(operator, token);\n }\n } else if (typeof option === 'function' && isCallable) {\n option = option(operator, token.t, token);\n }\n return option;\n },\n /**\n * @template {keyof Opts} L\n * @param {L} key Name of options object to use\n * @param {string} [operator]\n * @param {MultiToken} [token]\n * @returns {Opts[L] | any}\n */\n getObj(key, operator, token) {\n let obj = this.o[key];\n if (typeof obj === 'function' && operator != null) {\n obj = obj(operator, token.t, token);\n }\n return obj;\n },\n /**\n * Convert the given token to a rendered element that may be added to the\n * calling-interface's DOM\n * @param {MultiToken} token Token to render to an HTML element\n * @returns {any} Render result; e.g., HTML string, DOM element, React\n * Component, etc.\n */\n render(token) {\n const ir = token.render(this); // intermediate representation\n const renderFn = this.get('render', null, token) || this.defaultRender;\n return renderFn(ir, token.t, token);\n }\n};\nfunction noop(val) {\n return val;\n}\n\nvar options = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tOptions: Options,\n\tdefaults: defaults\n});\n\n/******************************************************************************\n\tMulti-Tokens\n\tTokens composed of arrays of TextTokens\n******************************************************************************/\n\n/**\n * @param {string} value\n * @param {Token[]} tokens\n */\nfunction MultiToken(value, tokens) {\n this.t = 'token';\n this.v = value;\n this.tk = tokens;\n}\n\n/**\n * Abstract class used for manufacturing tokens of text tokens. That is rather\n * than the value for a token being a small string of text, it's value an array\n * of text tokens.\n *\n * Used for grouping together URLs, emails, hashtags, and other potential\n * creations.\n * @class MultiToken\n * @property {string} t\n * @property {string} v\n * @property {Token[]} tk\n * @abstract\n */\nMultiToken.prototype = {\n isLink: false,\n /**\n * Return the string this token represents.\n * @return {string}\n */\n toString() {\n return this.v;\n },\n /**\n * What should the value for this token be in the `href` HTML attribute?\n * Returns the `.toString` value by default.\n * @param {string} [scheme]\n * @return {string}\n */\n toHref(scheme) {\n return this.toString();\n },\n /**\n * @param {Options} options Formatting options\n * @returns {string}\n */\n toFormattedString(options) {\n const val = this.toString();\n const truncate = options.get('truncate', val, this);\n const formatted = options.get('format', val, this);\n return truncate && formatted.length > truncate ? formatted.substring(0, truncate) + '…' : formatted;\n },\n /**\n *\n * @param {Options} options\n * @returns {string}\n */\n toFormattedHref(options) {\n return options.get('formatHref', this.toHref(options.get('defaultProtocol')), this);\n },\n /**\n * The start index of this token in the original input string\n * @returns {number}\n */\n startIndex() {\n return this.tk[0].s;\n },\n /**\n * The end index of this token in the original input string (up to this\n * index but not including it)\n * @returns {number}\n */\n endIndex() {\n return this.tk[this.tk.length - 1].e;\n },\n /**\n \tReturns an object of relevant values for this token, which includes keys\n \t* type - Kind of token ('url', 'email', etc.)\n \t* value - Original text\n \t* href - The value that should be added to the anchor tag's href\n \t\tattribute\n \t\t@method toObject\n \t@param {string} [protocol] `'http'` by default\n */\n toObject(protocol = defaults.defaultProtocol) {\n return {\n type: this.t,\n value: this.toString(),\n isLink: this.isLink,\n href: this.toHref(protocol),\n start: this.startIndex(),\n end: this.endIndex()\n };\n },\n /**\n *\n * @param {Options} options Formatting option\n */\n toFormattedObject(options) {\n return {\n type: this.t,\n value: this.toFormattedString(options),\n isLink: this.isLink,\n href: this.toFormattedHref(options),\n start: this.startIndex(),\n end: this.endIndex()\n };\n },\n /**\n * Whether this token should be rendered as a link according to the given options\n * @param {Options} options\n * @returns {boolean}\n */\n validate(options) {\n return options.get('validate', this.toString(), this);\n },\n /**\n * Return an object that represents how this link should be rendered.\n * @param {Options} options Formattinng options\n */\n render(options) {\n const token = this;\n const href = this.toHref(options.get('defaultProtocol'));\n const formattedHref = options.get('formatHref', href, this);\n const tagName = options.get('tagName', href, token);\n const content = this.toFormattedString(options);\n const attributes = {};\n const className = options.get('className', href, token);\n const target = options.get('target', href, token);\n const rel = options.get('rel', href, token);\n const attrs = options.getObj('attributes', href, token);\n const eventListeners = options.getObj('events', href, token);\n attributes.href = formattedHref;\n if (className) {\n attributes.class = className;\n }\n if (target) {\n attributes.target = target;\n }\n if (rel) {\n attributes.rel = rel;\n }\n if (attrs) {\n Object.assign(attributes, attrs);\n }\n return {\n tagName,\n attributes,\n content,\n eventListeners\n };\n }\n};\n\n/**\n * Create a new token that can be emitted by the parser state machine\n * @param {string} type readable type of the token\n * @param {object} props properties to assign or override, including isLink = true or false\n * @returns {new (value: string, tokens: Token[]) => MultiToken} new token class\n */\nfunction createTokenClass(type, props) {\n class Token extends MultiToken {\n constructor(value, tokens) {\n super(value, tokens);\n this.t = type;\n }\n }\n for (const p in props) {\n Token.prototype[p] = props[p];\n }\n Token.t = type;\n return Token;\n}\n\n/**\n\tRepresents a list of tokens making up a valid email address\n*/\nconst Email = createTokenClass('email', {\n isLink: true,\n toHref() {\n return 'mailto:' + this.toString();\n }\n});\n\n/**\n\tRepresents some plain text\n*/\nconst Text = createTokenClass('text');\n\n/**\n\tMulti-linebreak token - represents a line break\n\t@class Nl\n*/\nconst Nl = createTokenClass('nl');\n\n/**\n\tRepresents a list of text tokens making up a valid URL\n\t@class Url\n*/\nconst Url = createTokenClass('url', {\n isLink: true,\n /**\n \tLowercases relevant parts of the domain and adds the protocol if\n \trequired. Note that this will not escape unsafe HTML characters in the\n \tURL.\n \t\t@param {string} [scheme] default scheme (e.g., 'https')\n \t@return {string} the full href\n */\n toHref(scheme = defaults.defaultProtocol) {\n // Check if already has a prefix scheme\n return this.hasProtocol() ? this.v : `${scheme}://${this.v}`;\n },\n /**\n * Check whether this URL token has a protocol\n * @return {boolean}\n */\n hasProtocol() {\n const tokens = this.tk;\n return tokens.length >= 2 && tokens[0].t !== LOCALHOST && tokens[1].t === COLON;\n }\n});\n\nvar multi = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBase: MultiToken,\n\tEmail: Email,\n\tMultiToken: MultiToken,\n\tNl: Nl,\n\tText: Text,\n\tUrl: Url,\n\tcreateTokenClass: createTokenClass\n});\n\n/**\n\tNot exactly parser, more like the second-stage scanner (although we can\n\ttheoretically hotswap the code here with a real parser in the future... but\n\tfor a little URL-finding utility abstract syntax trees may be a little\n\toverkill).\n\n\tURL format: http://en.wikipedia.org/wiki/URI_scheme\n\tEmail format: http://en.wikipedia.org/wiki/EmailAddress (links to RFC in\n\treference)\n\n\t@module linkify\n\t@submodule parser\n\t@main run\n*/\n\nconst makeState = arg => new State(arg);\n\n/**\n * Generate the parser multi token-based state machine\n * @param {{ groups: Collections }} tokens\n */\nfunction init$1({\n groups\n}) {\n // Types of characters the URL can definitely end in\n const qsAccepting = groups.domain.concat([AMPERSAND, ASTERISK, AT, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, NUM, PERCENT, PIPE, PLUS, POUND, SLASH, SYM, TILDE, UNDERSCORE]);\n\n // Types of tokens that can follow a URL and be part of the query string\n // but cannot be the very last characters\n // Characters that cannot appear in the URL at all should be excluded\n const qsNonAccepting = [APOSTROPHE, COLON, COMMA, DOT, EXCLAMATION, PERCENT, QUERY, QUOTE, SEMI, OPENANGLEBRACKET, CLOSEANGLEBRACKET, OPENBRACE, CLOSEBRACE, CLOSEBRACKET, OPENBRACKET, OPENPAREN, CLOSEPAREN, FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN, LEFTCORNERBRACKET, RIGHTCORNERBRACKET, LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET, FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN];\n\n // For addresses without the mailto prefix\n // Tokens allowed in the localpart of the email\n const localpartAccepting = [AMPERSAND, APOSTROPHE, ASTERISK, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, OPENBRACE, CLOSEBRACE, PERCENT, PIPE, PLUS, POUND, QUERY, SLASH, SYM, TILDE, UNDERSCORE];\n\n // The universal starting state.\n /**\n * @type State\n */\n const Start = makeState();\n const Localpart = tt(Start, TILDE); // Local part of the email address\n ta(Localpart, localpartAccepting, Localpart);\n ta(Localpart, groups.domain, Localpart);\n const Domain = makeState(),\n Scheme = makeState(),\n SlashScheme = makeState();\n ta(Start, groups.domain, Domain); // parsed string ends with a potential domain name (A)\n ta(Start, groups.scheme, Scheme); // e.g., 'mailto'\n ta(Start, groups.slashscheme, SlashScheme); // e.g., 'http'\n\n ta(Domain, localpartAccepting, Localpart);\n ta(Domain, groups.domain, Domain);\n const LocalpartAt = tt(Domain, AT); // Local part of the email address plus @\n\n tt(Localpart, AT, LocalpartAt); // close to an email address now\n\n // Local part of an email address can be e.g. 'http' or 'mailto'\n tt(Scheme, AT, LocalpartAt);\n tt(SlashScheme, AT, LocalpartAt);\n const LocalpartDot = tt(Localpart, DOT); // Local part of the email address plus '.' (localpart cannot end in .)\n ta(LocalpartDot, localpartAccepting, Localpart);\n ta(LocalpartDot, groups.domain, Localpart);\n const EmailDomain = makeState();\n ta(LocalpartAt, groups.domain, EmailDomain); // parsed string starts with local email info + @ with a potential domain name\n ta(EmailDomain, groups.domain, EmailDomain);\n const EmailDomainDot = tt(EmailDomain, DOT); // domain followed by DOT\n ta(EmailDomainDot, groups.domain, EmailDomain);\n const Email$1 = makeState(Email); // Possible email address (could have more tlds)\n ta(EmailDomainDot, groups.tld, Email$1);\n ta(EmailDomainDot, groups.utld, Email$1);\n tt(LocalpartAt, LOCALHOST, Email$1);\n\n // Hyphen can jump back to a domain name\n const EmailDomainHyphen = tt(EmailDomain, HYPHEN); // parsed string starts with local email info + @ with a potential domain name\n tt(EmailDomainHyphen, HYPHEN, EmailDomainHyphen);\n ta(EmailDomainHyphen, groups.domain, EmailDomain);\n ta(Email$1, groups.domain, EmailDomain);\n tt(Email$1, DOT, EmailDomainDot);\n tt(Email$1, HYPHEN, EmailDomainHyphen);\n\n // Account for dots and hyphens. Hyphens are usually parts of domain names\n // (but not TLDs)\n const DomainHyphen = tt(Domain, HYPHEN); // domain followed by hyphen\n const DomainDot = tt(Domain, DOT); // domain followed by DOT\n tt(DomainHyphen, HYPHEN, DomainHyphen);\n ta(DomainHyphen, groups.domain, Domain);\n ta(DomainDot, localpartAccepting, Localpart);\n ta(DomainDot, groups.domain, Domain);\n const DomainDotTld = makeState(Url); // Simplest possible URL with no query string\n ta(DomainDot, groups.tld, DomainDotTld);\n ta(DomainDot, groups.utld, DomainDotTld);\n ta(DomainDotTld, groups.domain, Domain);\n ta(DomainDotTld, localpartAccepting, Localpart);\n tt(DomainDotTld, DOT, DomainDot);\n tt(DomainDotTld, HYPHEN, DomainHyphen);\n tt(DomainDotTld, AT, LocalpartAt);\n const DomainDotTldColon = tt(DomainDotTld, COLON); // URL followed by colon (potential port number here)\n const DomainDotTldColonPort = makeState(Url); // TLD followed by a port number\n ta(DomainDotTldColon, groups.numeric, DomainDotTldColonPort);\n\n // Long URL with optional port and maybe query string\n const Url$1 = makeState(Url);\n\n // URL with extra symbols at the end, followed by an opening bracket\n const UrlNonaccept = makeState(); // URL followed by some symbols (will not be part of the final URL)\n\n // Query strings\n ta(Url$1, qsAccepting, Url$1);\n ta(Url$1, qsNonAccepting, UrlNonaccept);\n ta(UrlNonaccept, qsAccepting, Url$1);\n ta(UrlNonaccept, qsNonAccepting, UrlNonaccept);\n\n // Become real URLs after `SLASH` or `COLON NUM SLASH`\n // Here works with or without scheme:// prefix\n tt(DomainDotTld, SLASH, Url$1);\n tt(DomainDotTldColonPort, SLASH, Url$1);\n\n // Note that domains that begin with schemes are treated slighly differently\n const SchemeColon = tt(Scheme, COLON); // e.g., 'mailto:'\n const SlashSchemeColon = tt(SlashScheme, COLON); // e.g., 'http:'\n const SlashSchemeColonSlash = tt(SlashSchemeColon, SLASH); // e.g., 'http:/'\n\n const UriPrefix = tt(SlashSchemeColonSlash, SLASH); // e.g., 'http://'\n\n // Scheme states can transition to domain states\n ta(Scheme, groups.domain, Domain);\n tt(Scheme, DOT, DomainDot);\n tt(Scheme, HYPHEN, DomainHyphen);\n ta(SlashScheme, groups.domain, Domain);\n tt(SlashScheme, DOT, DomainDot);\n tt(SlashScheme, HYPHEN, DomainHyphen);\n\n // Force URL with scheme prefix followed by anything sane\n ta(SchemeColon, groups.domain, Url$1);\n tt(SchemeColon, SLASH, Url$1);\n tt(SchemeColon, QUERY, Url$1);\n ta(UriPrefix, groups.domain, Url$1);\n ta(UriPrefix, qsAccepting, Url$1);\n tt(UriPrefix, SLASH, Url$1);\n const bracketPairs = [[OPENBRACE, CLOSEBRACE],\n // {}\n [OPENBRACKET, CLOSEBRACKET],\n // []\n [OPENPAREN, CLOSEPAREN],\n // ()\n [OPENANGLEBRACKET, CLOSEANGLEBRACKET],\n // <>\n [FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN],\n // ()\n [LEFTCORNERBRACKET, RIGHTCORNERBRACKET],\n // 「」\n [LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET],\n // 『』\n [FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN] // <>\n ];\n for (let i = 0; i < bracketPairs.length; i++) {\n const [OPEN, CLOSE] = bracketPairs[i];\n const UrlOpen = tt(Url$1, OPEN); // URL followed by open bracket\n\n // Continue not accepting for open brackets\n tt(UrlNonaccept, OPEN, UrlOpen);\n\n // URL that begins with an opening bracket, followed by a symbols.\n // Note that the final state can still be `UrlOpen` (if the URL has a\n // single opening bracket for some reason).\n const UrlOpenQ = makeState(Url);\n ta(UrlOpen, qsAccepting, UrlOpenQ);\n const UrlOpenSyms = makeState(); // UrlOpen followed by some symbols it cannot end it\n ta(UrlOpen, qsNonAccepting, UrlOpenSyms);\n\n // Closing bracket component. This character WILL be included in the URL.\n // Must come after qsNonAccepting (which includes all close-bracket tokens)\n // so that CLOSE -> Url wins over CLOSE -> UrlOpenSyms.\n tt(UrlOpen, CLOSE, Url$1);\n\n // URL that begins with an opening bracket, followed by some symbols\n ta(UrlOpenQ, qsAccepting, UrlOpenQ);\n ta(UrlOpenQ, qsNonAccepting, UrlOpenSyms);\n ta(UrlOpenSyms, qsAccepting, UrlOpenQ);\n ta(UrlOpenSyms, qsNonAccepting, UrlOpenSyms);\n\n // Close brace/bracket to become regular URL\n tt(UrlOpenQ, CLOSE, Url$1);\n tt(UrlOpenSyms, CLOSE, Url$1);\n }\n tt(Start, LOCALHOST, DomainDotTld); // localhost is a valid URL state\n tt(Start, NL, Nl); // single new line\n\n return {\n start: Start,\n tokens: tk\n };\n}\n\n/**\n * Run the parser state machine on a list of scanned string-based tokens to\n * create a list of multi tokens, each of which represents a URL, email address,\n * plain text, etc.\n *\n * @param {State} start parser start state\n * @param {string} input the original input used to generate the given tokens\n * @param {Token[]} tokens list of scanned tokens\n * @returns {MultiToken[]}\n */\nfunction run(start, input, tokens) {\n let len = tokens.length;\n let cursor = 0;\n let multis = [];\n let textTokens = [];\n while (cursor < len) {\n let state = start;\n let secondState = null;\n let nextState = null;\n let multiLength = 0;\n let latestAccepting = null;\n let sinceAccepts = -1;\n while (cursor < len && !(secondState = state.go(tokens[cursor].t))) {\n // Starting tokens with nowhere to jump to.\n // Consider these to be just plain text\n textTokens.push(tokens[cursor++]);\n }\n while (cursor < len && (nextState = secondState || state.go(tokens[cursor].t))) {\n // Get the next state\n secondState = null;\n state = nextState;\n\n // Keep track of the latest accepting state\n if (state.accepts()) {\n sinceAccepts = 0;\n latestAccepting = state;\n } else if (sinceAccepts >= 0) {\n sinceAccepts++;\n }\n cursor++;\n multiLength++;\n }\n if (sinceAccepts < 0) {\n // No accepting state was found, part of a regular text token add\n // the first text token to the text tokens array and try again from\n // the next\n cursor -= multiLength;\n if (cursor < len) {\n textTokens.push(tokens[cursor]);\n cursor++;\n }\n } else {\n // Accepting state!\n // First close off the textTokens (if available)\n if (textTokens.length > 0) {\n multis.push(initMultiToken(Text, input, textTokens));\n textTokens = [];\n }\n\n // Roll back to the latest accepting state\n cursor -= sinceAccepts;\n multiLength -= sinceAccepts;\n\n // Create a new multitoken\n const Multi = latestAccepting.t;\n const subtokens = tokens.slice(cursor - multiLength, cursor);\n multis.push(initMultiToken(Multi, input, subtokens));\n }\n }\n\n // Finally close off the textTokens (if available)\n if (textTokens.length > 0) {\n multis.push(initMultiToken(Text, input, textTokens));\n }\n return multis;\n}\n\n/**\n * Utility function for instantiating a new multitoken with all the relevant\n * fields during parsing.\n * @param {new (value: string, tokens: Token[]) => MultiToken} Multi class to instantiate\n * @param {string} input original input string\n * @param {Token[]} tokens consecutive tokens scanned from input string\n * @returns {MultiToken}\n */\nfunction initMultiToken(Multi, input, tokens) {\n const startIdx = tokens[0].s;\n const endIdx = tokens[tokens.length - 1].e;\n const value = input.slice(startIdx, endIdx);\n return new Multi(value, tokens);\n}\n\nconst warn = typeof console !== 'undefined' && console && console.warn || (() => {});\nconst warnAdvice = 'until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.';\n\n// Side-effect initialization state\nconst INIT = {\n scanner: null,\n parser: null,\n tokenQueue: [],\n pluginQueue: [],\n customSchemes: [],\n initialized: false\n};\n\n/**\n * @typedef {{\n * \tstart: State,\n * \ttokens: { groups: Collections } & typeof tk\n * }} ScannerInit\n */\n\n/**\n * @typedef {{\n * \tstart: State,\n * \ttokens: typeof multi\n * }} ParserInit\n */\n\n/**\n * @typedef {(arg: { scanner: ScannerInit }) => void} TokenPlugin\n */\n\n/**\n * @typedef {(arg: { scanner: ScannerInit, parser: ParserInit }) => void} Plugin\n */\n\n/**\n * De-register all plugins and reset the internal state-machine. Used for\n * testing; not required in practice.\n * @private\n */\nfunction reset() {\n State.groups = {};\n INIT.scanner = null;\n INIT.parser = null;\n INIT.tokenQueue = [];\n INIT.pluginQueue = [];\n INIT.customSchemes = [];\n INIT.initialized = false;\n return INIT;\n}\n\n/**\n * Register a token plugin to allow the scanner to recognize additional token\n * types before the parser state machine is constructed from the results.\n * @param {string} name of plugin to register\n * @param {TokenPlugin} plugin function that accepts the scanner state machine\n * and available scanner tokens and collections and extends the state machine to\n * recognize additional tokens or groups.\n */\nfunction registerTokenPlugin(name, plugin) {\n if (typeof plugin !== 'function') {\n throw new Error(`linkifyjs: Invalid token plugin ${plugin} (expects function)`);\n }\n for (let i = 0; i < INIT.tokenQueue.length; i++) {\n if (name === INIT.tokenQueue[i][0]) {\n warn(`linkifyjs: token plugin \"${name}\" already registered - will be overwritten`);\n INIT.tokenQueue[i] = [name, plugin];\n return;\n }\n }\n INIT.tokenQueue.push([name, plugin]);\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register token plugin \"${name}\" ${warnAdvice}`);\n }\n}\n\n/**\n * Register a linkify plugin\n * @param {string} name of plugin to register\n * @param {Plugin} plugin function that accepts the parser state machine and\n * extends the parser to recognize additional link types\n */\nfunction registerPlugin(name, plugin) {\n if (typeof plugin !== 'function') {\n throw new Error(`linkifyjs: Invalid plugin ${plugin} (expects function)`);\n }\n for (let i = 0; i < INIT.pluginQueue.length; i++) {\n if (name === INIT.pluginQueue[i][0]) {\n warn(`linkifyjs: plugin \"${name}\" already registered - will be overwritten`);\n INIT.pluginQueue[i] = [name, plugin];\n return;\n }\n }\n INIT.pluginQueue.push([name, plugin]);\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register plugin \"${name}\" ${warnAdvice}`);\n }\n}\n\n/**\n * Detect URLs with the following additional protocol. Anything with format\n * \"protocol://...\" will be considered a link. If `optionalSlashSlash` is set to\n * `true`, anything with format \"protocol:...\" will be considered a link.\n * @param {string} scheme\n * @param {boolean} [optionalSlashSlash]\n */\nfunction registerCustomProtocol(scheme, optionalSlashSlash = false) {\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register custom scheme \"${scheme}\" ${warnAdvice}`);\n }\n if (!/^[0-9a-z]+(-[0-9a-z]+)*$/.test(scheme)) {\n throw new Error(`linkifyjs: incorrect scheme format.\n1. Must only contain digits, lowercase ASCII letters or \"-\"\n2. Cannot start or end with \"-\"\n3. \"-\" cannot repeat`);\n }\n INIT.customSchemes.push([scheme, optionalSlashSlash]);\n}\n\n/**\n * Initialize the linkify state machine. Called automatically the first time\n * linkify is called on a string, but may be called manually as well.\n */\nfunction init() {\n // Initialize scanner state machine and plugins\n INIT.scanner = init$2(INIT.customSchemes);\n for (let i = 0; i < INIT.tokenQueue.length; i++) {\n INIT.tokenQueue[i][1]({\n scanner: INIT.scanner\n });\n }\n\n // Initialize parser state machine and plugins\n INIT.parser = init$1(INIT.scanner.tokens);\n for (let i = 0; i < INIT.pluginQueue.length; i++) {\n INIT.pluginQueue[i][1]({\n scanner: INIT.scanner,\n parser: INIT.parser\n });\n }\n INIT.initialized = true;\n return INIT;\n}\n\n/**\n * Parse a string into tokens that represent linkable and non-linkable sub-components\n * @param {string} str\n * @return {MultiToken[]} tokens\n */\nfunction tokenize(str) {\n if (!INIT.initialized) {\n init();\n }\n return run(INIT.parser.start, str, run$1(INIT.scanner.start, str));\n}\ntokenize.scan = run$1; // for testing\n\n/**\n * Find a list of linkable items in the given string.\n * @param {string} str string to find links in\n * @param {string | Opts} [type] either formatting options or specific type of\n * links to find, e.g., 'url' or 'email'\n * @param {Opts} [opts] formatting options for final output. Cannot be specified\n * if opts already provided in `type` argument\n */\nfunction find(str, type = null, opts = null) {\n if (type && typeof type === 'object') {\n if (opts) {\n throw Error(`linkifyjs: Invalid link type ${type}; must be a string`);\n }\n opts = type;\n type = null;\n }\n const options = new Options(opts);\n const tokens = tokenize(str);\n const filtered = [];\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n if (token.isLink && (!type || token.t === type) && options.check(token)) {\n filtered.push(token.toFormattedObject(options));\n }\n }\n return filtered;\n}\n\n/**\n * Is the given string valid linkable text of some sort. Note that this does not\n * trim the text for you.\n *\n * Optionally pass in a second `type` param, which is the type of link to test\n * for.\n *\n * For example,\n *\n * linkify.test(str, 'email');\n *\n * Returns `true` if str is a valid email.\n * @param {string} str string to test for links\n * @param {string} [type] optional specific link type to look for\n * @returns boolean true/false\n */\nfunction test(str, type = null) {\n const tokens = tokenize(str);\n return tokens.length === 1 && tokens[0].isLink && (!type || tokens[0].t === type);\n}\n\nexport { MultiToken, Options, State, createTokenClass, find, init, multi, options, regexp, registerCustomProtocol, registerPlugin, registerTokenPlugin, reset, stringToArray, test, multi as text, tokenize };\n","import escapeHTML from \"escape-html\";\nimport { Options, tokenize } from \"linkifyjs\";\nfunction linkifyString(str) {\n const options = new Options({\n defaultProtocol: \"https\",\n target: \"_blank\",\n className: \"external linkified\",\n attributes: {\n rel: \"nofollow noopener noreferrer\"\n }\n }, defaultRender);\n const tokens = tokenize(str);\n const result = [];\n for (const token of tokens) {\n if (token.t === \"nl\" && options.get(\"nl2br\")) {\n result.push(\"
    \\n\");\n } else if (!token.isLink || !options.check(token)) {\n result.push(escapeHTML(token.toString()));\n } else {\n result.push(options.render(token));\n }\n }\n return result.join(\"\");\n}\nfunction escapeAttr(href) {\n return href.replace(/\"/g, \""\");\n}\nfunction attributesToString(attributes) {\n const result = [];\n for (const attr in attributes) {\n const val = attributes[attr] + \"\";\n result.push(`${attr}=\"${escapeAttr(val)}\"`);\n }\n return result.join(\" \");\n}\nfunction defaultRender({ tagName, attributes, content }) {\n return `<${tagName} ${attributesToString(attributes)}>${escapeHTML(content)}`;\n}\nconst directive = function(el, { value }) {\n if (value?.linkify === true) {\n el.innerHTML = linkifyString(value.text);\n }\n};\nexport {\n directive as default\n};\n//# sourceMappingURL=index.mjs.map\n","import { defineComponent, inject, withDirectives, openBlock, createElementBlock, createTextVNode, toDisplayString, unref } from \"vue\";\nimport directive from \"../directives/Linkify/index.mjs\";\nconst _hoisted_1 = [\"title\"];\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcAppSidebarHeader\",\n props: {\n name: {},\n title: {},\n linkify: { type: Boolean }\n },\n setup(__props) {\n const headerRef = inject(\"NcAppSidebar:header:ref\");\n return (_ctx, _cache) => {\n return withDirectives((openBlock(), createElementBlock(\"h2\", {\n ref_key: \"headerRef\",\n ref: headerRef,\n tabindex: \"-1\",\n title: __props.title\n }, [\n createTextVNode(toDisplayString(__props.name), 1)\n ], 8, _hoisted_1)), [\n [unref(directive), { text: __props.name, linkify: __props.linkify }]\n ]);\n };\n }\n});\nexport {\n _sfc_main as _\n};\n//# sourceMappingURL=NcAppSidebarHeader.vue_vue_type_script_setup_true_lang-C-QhdyiN.mjs.map\n","import '../assets/NcAppSidebar-dHtSShIl.css';\nimport { vOnClickOutside } from \"@vueuse/components\";\nimport { createFocusTrap } from \"focus-trap\";\nimport { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode, defineComponent, useModel, normalizeClass, unref, createVNode, withCtx, mergeModels, resolveComponent, withKeys, withModifiers, Fragment, renderList, createBlock, renderSlot, resolveDirective, Transition, withDirectives, Teleport, normalizeStyle, vShow, createTextVNode, warn, ref, provide } from \"vue\";\nimport { I as IconArrowRight } from \"./ArrowRight-B1ncAhus.mjs\";\nimport { I as IconClose } from \"./Close-CuhcJnX2.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { getCanonicalLocale } from \"@nextcloud/l10n\";\nimport { _ as _sfc_main$6 } from \"./NcVNodes.vue_vue_type_script_lang-BqUHinRZ.mjs\";\nimport { i as isLegacy34 } from \"./legacy-BoqDmOCa.mjs\";\nimport { useIsSmallMobile } from \"../composables/useIsMobile/index.mjs\";\nimport directive from \"../directives/Focus/index.mjs\";\nimport { r as register, V as t15, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { g as getTrapStack } from \"./focusTrap-HJQ4pqHV.mjs\";\nimport { i as isSlotPopulated, N as NcActions } from \"./NcActions-CUmcZ3C3.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { _ as _sfc_main$7 } from \"./NcAppSidebarHeader.vue_vue_type_script_setup_true_lang-C-QhdyiN.mjs\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { C as CONTENT_SELECTOR_KEY } from \"./constants-Ciwvl5xb.mjs\";\nimport { N as NcEmptyContent } from \"./NcEmptyContent-CGAPqk4S.mjs\";\nimport { N as NcLoadingIcon } from \"./NcLoadingIcon-BOVpFVQz.mjs\";\nconst _sfc_main$5 = {\n name: \"DockRightIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$5 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$3 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$3 = { d: \"M20 4H4A2 2 0 0 0 2 6V18A2 2 0 0 0 4 20H20A2 2 0 0 0 22 18V6A2 2 0 0 0 20 4M15 18H4V6H15Z\" };\nconst _hoisted_4$3 = { key: 0 };\nfunction _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon dock-right-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$3, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$3, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$3))\n ], 16, _hoisted_1$5);\n}\nconst IconDockRight = /* @__PURE__ */ _export_sfc(_sfc_main$5, [[\"render\", _sfc_render$4]]);\nconst _sfc_main$4 = {\n name: \"StarIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$4 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$2 = { d: \"M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z\" };\nconst _hoisted_4$2 = { key: 0 };\nfunction _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon star-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$2, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$2, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$2))\n ], 16, _hoisted_1$4);\n}\nconst IconStar = /* @__PURE__ */ _export_sfc(_sfc_main$4, [[\"render\", _sfc_render$3]]);\nconst _sfc_main$3 = {\n name: \"StarOutlineIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$3 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$1 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$1 = { d: \"M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z\" };\nconst _hoisted_4$1 = { key: 0 };\nfunction _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon star-outline-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$1, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$1, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$1))\n ], 16, _hoisted_1$3);\n}\nconst IconStarOutline = /* @__PURE__ */ _export_sfc(_sfc_main$3, [[\"render\", _sfc_render$2]]);\nconst _hoisted_1$2 = [\"aria-selected\", \"tabindex\"];\nconst _sfc_main$2 = /* @__PURE__ */ defineComponent({\n __name: \"NcAppSidebarTabsButton\",\n props: /* @__PURE__ */ mergeModels({\n tab: {}\n }, {\n \"selected\": { type: Boolean, ...{ required: true } },\n \"selectedModifiers\": {}\n }),\n emits: [\"update:selected\"],\n setup(__props) {\n const selected = useModel(__props, \"selected\");\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"button\", {\n class: normalizeClass([\"button-vue\", [_ctx.$style.sidebarTabsButton, {\n [_ctx.$style.sidebarTabsButton_selected]: selected.value,\n [_ctx.$style.sidebarTabsButton_legacy]: unref(isLegacy34)\n }]]),\n role: \"tab\",\n \"aria-selected\": selected.value,\n tabindex: selected.value ? 0 : -1,\n onClick: _cache[0] || (_cache[0] = ($event) => selected.value = true)\n }, [\n createElementVNode(\"span\", {\n class: normalizeClass(_ctx.$style.sidebarTabsButton__icon)\n }, [\n createVNode(_sfc_main$6, {\n vnodes: __props.tab.renderIcon()\n }, {\n default: withCtx(() => [\n createElementVNode(\"span\", {\n class: normalizeClass([_ctx.$style.sidebarTabsButton__legacyIcon, __props.tab.icon])\n }, null, 2)\n ]),\n _: 1\n }, 8, [\"vnodes\"])\n ], 2),\n createElementVNode(\"span\", {\n class: normalizeClass(_ctx.$style.sidebarTabsButton__name)\n }, toDisplayString(__props.tab.name), 3)\n ], 10, _hoisted_1$2);\n };\n }\n});\nconst sidebarTabsButton = \"_sidebarTabsButton_6hxfz\";\nconst sidebarTabsButton_legacy = \"_sidebarTabsButton_legacy_Qp20k\";\nconst sidebarTabsButton_selected = \"_sidebarTabsButton_selected_eBHM-\";\nconst sidebarTabsButton__name = \"_sidebarTabsButton__name_YlW5S\";\nconst sidebarTabsButton__icon = \"_sidebarTabsButton__icon_MPS-D\";\nconst sidebarTabsButton__legacyIcon = \"_sidebarTabsButton__legacyIcon_rzPOu\";\nconst style0 = {\n \"material-design-icon\": \"_material-design-icon_m4vbX\",\n sidebarTabsButton,\n sidebarTabsButton_legacy,\n sidebarTabsButton_selected,\n sidebarTabsButton__name,\n sidebarTabsButton__icon,\n sidebarTabsButton__legacyIcon\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcAppSidebarTabsButton = /* @__PURE__ */ _export_sfc(_sfc_main$2, [[\"__cssModules\", cssModules]]);\nconst _sfc_main$1 = {\n name: \"NcAppSidebarTabs\",\n components: {\n NcAppSidebarTabsButton\n },\n provide() {\n return {\n registerTab: this.registerTab,\n unregisterTab: this.unregisterTab,\n // Getter as an alternative to Vue 2.7 computed(() => this.activeTab)\n getActiveTab: () => this.activeTab,\n // Used to check whether the tab header is shown so the tabs can reference the tab header for `aria-labelledby` or not\n isTablistShown: () => this.hasMultipleTabs\n };\n },\n props: {\n /**\n * Id of the tab to activate\n */\n active: {\n type: String,\n default: \"\"\n },\n /**\n * Force the tab navigation to display even if there is only one tab\n */\n forceTabs: {\n type: Boolean,\n default: false\n }\n },\n emits: [\"update:active\"],\n data(props) {\n return {\n /**\n * Tab descriptions from the passed NcSidebarTab components' props to build the tab navbar from.\n */\n tabs: [],\n /**\n * Local active (open) tab's ID. It allows to use component without v-model:active\n */\n activeTab: props.active,\n isLegacy34\n };\n },\n computed: {\n /**\n * Has multiple tabs. If only one tab - its content is shown without navigation\n *\n * @return {boolean}\n */\n hasMultipleTabs() {\n return this.tabs.length > 1;\n },\n showForSingleTab() {\n return this.forceTabs && this.tabs.length === 1;\n },\n currentTabIndex() {\n return this.tabs.findIndex((tab) => tab.id === this.activeTab);\n }\n },\n watch: {\n tabs() {\n if (this.active) {\n this.updateActive();\n }\n },\n active(active) {\n if (active !== this.activeTab) {\n this.updateActive();\n }\n }\n },\n methods: {\n /**\n * Set the current active tab\n *\n * @param {string} id the id of the tab\n */\n setActive(id) {\n this.activeTab = id;\n this.$emit(\"update:active\", this.activeTab);\n },\n /**\n * Focus the previous tab\n * and emit to the parent component\n */\n focusPreviousTab() {\n if (this.currentTabIndex > 0) {\n this.setActive(this.tabs[this.currentTabIndex - 1].id);\n }\n this.focusActiveTab();\n },\n /**\n * Focus the next tab\n * and emit to the parent component\n */\n focusNextTab() {\n if (this.currentTabIndex < this.tabs.length - 1) {\n this.setActive(this.tabs[this.currentTabIndex + 1].id);\n }\n this.focusActiveTab();\n },\n /**\n * Focus the first tab\n * and emit to the parent component\n */\n focusFirstTab() {\n this.setActive(this.tabs[0].id);\n this.focusActiveTab();\n },\n /**\n * Focus the last tab\n * and emit to the parent component\n */\n focusLastTab() {\n this.setActive(this.tabs[this.tabs.length - 1].id);\n this.focusActiveTab();\n },\n /**\n * Focus the current active tab\n */\n focusActiveTab() {\n this.$el.querySelector(`#tab-button-${this.activeTab}`).focus();\n },\n /**\n * Focus the content on tab\n * see aria accessibility guidelines\n */\n focusActiveTabContent() {\n this.$el.querySelector(\"#tab-\" + this.activeTab).focus();\n },\n /**\n * Update the current active tab\n */\n updateActive() {\n this.activeTab = this.active && this.tabs.some(({ id }) => id === this.active) ? this.active : this.tabs[0]?.id ?? \"\";\n },\n /**\n * Register child tab in the tabs\n *\n * @param {object} tab child tab passed to slot\n */\n registerTab(tab) {\n this.tabs.push(tab);\n this.tabs.sort((a, b) => {\n if (a.order === b.order) {\n return a.name.localeCompare(b.name, [getCanonicalLocale()]);\n }\n return a.order - b.order;\n });\n this.updateActive();\n },\n /**\n * Unregister child tab from the tabs\n *\n * @param {string} id tab's id\n */\n unregisterTab(id) {\n const tabIndex = this.tabs.findIndex((tab) => tab.id === id);\n if (tabIndex !== -1) {\n this.tabs.splice(tabIndex, 1);\n }\n if (this.activeTab === id) {\n this.updateActive();\n }\n }\n }\n};\nconst _hoisted_1$1 = { class: \"app-sidebar-tabs\" };\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcAppSidebarTabsButton = resolveComponent(\"NcAppSidebarTabsButton\");\n return openBlock(), createElementBlock(\"div\", _hoisted_1$1, [\n $options.hasMultipleTabs || $options.showForSingleTab ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n role: \"tablist\",\n class: normalizeClass([\"app-sidebar-tabs__nav\", { \"app-sidebar-tabs__nav--legacy\": $data.isLegacy34 }]),\n onKeydown: [\n _cache[0] || (_cache[0] = withKeys(withModifiers((...args) => $options.focusPreviousTab && $options.focusPreviousTab(...args), [\"exact\", \"prevent\", \"stop\"]), [\"left\"])),\n _cache[1] || (_cache[1] = withKeys(withModifiers((...args) => $options.focusNextTab && $options.focusNextTab(...args), [\"exact\", \"prevent\", \"stop\"]), [\"right\"])),\n _cache[2] || (_cache[2] = withKeys(withModifiers((...args) => $options.focusActiveTabContent && $options.focusActiveTabContent(...args), [\"exact\", \"prevent\", \"stop\"]), [\"tab\"])),\n _cache[3] || (_cache[3] = withKeys(withModifiers((...args) => $options.focusFirstTab && $options.focusFirstTab(...args), [\"exact\", \"prevent\", \"stop\"]), [\"home\"])),\n _cache[4] || (_cache[4] = withKeys(withModifiers((...args) => $options.focusLastTab && $options.focusLastTab(...args), [\"exact\", \"prevent\", \"stop\"]), [\"end\"])),\n _cache[5] || (_cache[5] = withKeys(withModifiers((...args) => $options.focusFirstTab && $options.focusFirstTab(...args), [\"exact\", \"prevent\", \"stop\"]), [\"page-up\"])),\n _cache[6] || (_cache[6] = withKeys(withModifiers((...args) => $options.focusLastTab && $options.focusLastTab(...args), [\"exact\", \"prevent\", \"stop\"]), [\"page-down\"]))\n ]\n }, [\n (openBlock(true), createElementBlock(Fragment, null, renderList($data.tabs, (tab) => {\n return openBlock(), createBlock(_component_NcAppSidebarTabsButton, {\n id: `tab-button-${tab.id}`,\n key: tab.id,\n class: \"app-sidebar-tabs__tab\",\n \"aria-controls\": `tab-${tab.id}`,\n selected: $data.activeTab === tab.id,\n tab,\n \"onUpdate:selected\": ($event) => $options.setActive(tab.id)\n }, null, 8, [\"id\", \"aria-controls\", \"selected\", \"tab\", \"onUpdate:selected\"]);\n }), 128))\n ], 34)) : createCommentVNode(\"\", true),\n createElementVNode(\"div\", {\n class: normalizeClass([\"app-sidebar-tabs__content\", { \"app-sidebar-tabs__content--multiple\": $options.hasMultipleTabs }])\n }, [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true)\n ], 2)\n ]);\n}\nconst NcAppSidebarTabs = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1], [\"__scopeId\", \"data-v-e74d1502\"]]);\nregister(t15);\nconst _sfc_main = {\n name: \"NcAppSidebar\",\n components: {\n NcActions,\n NcAppSidebarHeader: _sfc_main$7,\n NcAppSidebarTabs,\n NcButton,\n NcLoadingIcon,\n NcEmptyContent,\n IconArrowRight,\n IconClose,\n IconDockRight,\n IconStar,\n IconStarOutline\n },\n directives: {\n Focus: directive,\n /** @type {import('vue').ObjectDirective} */\n ClickOutside: vOnClickOutside\n },\n inject: {\n ncContentSelector: {\n from: CONTENT_SELECTOR_KEY,\n default: void 0\n }\n },\n props: {\n /**\n * The active tab\n */\n active: {\n type: String,\n default: \"\"\n },\n /**\n * Main text of the sidebar\n */\n name: {\n type: String,\n required: true\n },\n /**\n * Allow to edit the sidebar name.\n */\n nameEditable: {\n type: Boolean,\n default: false\n },\n /**\n * Placeholder in the edit field if the name is editable.\n */\n namePlaceholder: {\n type: String,\n default: \"\"\n },\n /**\n * Secondary name of the sidebar (subline)\n */\n subname: {\n type: String,\n default: \"\"\n },\n /**\n * Title to display for the subname.\n */\n subtitle: {\n type: String,\n default: \"\"\n },\n /**\n * Url to the top header background image\n * Applied with css\n */\n background: {\n type: String,\n default: \"\"\n },\n /**\n * Enable the favourite icon if not null\n * See fired events\n */\n starred: {\n type: Boolean,\n default: null\n },\n /**\n * Show loading spinner instead of the star icon\n */\n starLoading: {\n type: Boolean,\n default: false\n },\n /**\n * Show loading spinner instead of tabs\n */\n loading: {\n type: Boolean,\n default: false\n },\n /**\n * Display the sidebar in compact mode\n */\n compact: {\n type: Boolean,\n default: false\n },\n /**\n * Only display close button and default slot content.\n * Don't display other header content and primary and secondary actions.\n * Useful when showing the EmptyContent component as content.\n */\n empty: {\n type: Boolean,\n default: false\n },\n /**\n * Force the actions to display in a three dot menu\n */\n forceMenu: {\n type: Boolean,\n default: false\n },\n /**\n * Force the tab navigation to display even if there is only one tab\n */\n forceTabs: {\n type: Boolean,\n default: false\n },\n /**\n * Linkify the name\n */\n linkifyName: {\n type: Boolean,\n default: false\n },\n /**\n * Title to display for the name.\n * Can be set to the same text in case it's too long.\n */\n title: {\n type: String,\n default: \"\"\n },\n /**\n * Allow to conditionally show the sidebar\n * You can also use `v-if` on the sidebar, but using the open prop allow to keep\n * the sidebar inside the DOM for performance if it is opened and closed multiple times.\n *\n * When using the `open` property to close the sidebar a built-in toggle button will be shown to reopen it,\n * similar to the app navigation. You can remove this button with the `no-toggle` prop.\n */\n open: {\n type: Boolean,\n default: true\n },\n /**\n * Custom classes to assign to the sidebar toggle button.\n * If needed this can be used to assign styles to the button using `:deep()` selector.\n */\n toggleClasses: {\n type: [String, Array, Object],\n default: \"\"\n },\n /**\n * Custom attrs to assign to the sidebar toggle button.\n */\n toggleAttrs: {\n type: Object,\n default: void 0\n },\n /**\n * Do not add the built-in toggle button with `open` prop.\n */\n noToggle: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n \"close\",\n \"closed\",\n \"opened\",\n // 'figureClick', not emitted on purpose to make \"hasFigureClickListener\" work\n \"update:active\",\n \"update:name\",\n \"update:nameEditable\",\n \"update:open\",\n \"update:starred\",\n \"submitName\",\n \"dismissEditing\"\n ],\n setup() {\n const headerRef = ref(null);\n provide(\"NcAppSidebar:header:ref\", headerRef);\n return {\n uid: createElementId(),\n isMobile: useIsSmallMobile(),\n headerRef\n };\n },\n data() {\n return {\n changeNameTranslated: t(\"Change name\"),\n closeTranslated: t(\"Close sidebar\"),\n favoriteTranslated: t(\"Favorite\"),\n isStarred: this.starred,\n focusTrap: null,\n elementToReturnFocus: null\n };\n },\n computed: {\n canStar() {\n return this.isStarred !== null;\n },\n hasFigureClickListener() {\n return !!this.$attrs.onFigureClick;\n }\n },\n watch: {\n starred() {\n this.isStarred = this.starred;\n },\n isMobile() {\n this.toggleFocusTrap();\n },\n open() {\n this.checkToggleButtonContainerAvailability();\n }\n },\n created() {\n this.preserveElementToReturnFocus();\n this.checkToggleButtonContainerAvailability();\n },\n beforeUnmount() {\n this.$emit(\"closed\");\n this.focusTrap?.deactivate();\n },\n methods: {\n isSlotPopulated,\n t,\n preserveElementToReturnFocus() {\n if (document.activeElement && document.activeElement !== document.body) {\n this.elementToReturnFocus = document.activeElement;\n if (this.elementToReturnFocus.getAttribute(\"role\") === \"menuitem\") {\n const menu = this.elementToReturnFocus.closest('[role=\"menu\"]');\n if (menu) {\n const menuTrigger = document.querySelector(`[aria-controls=\"${menu.id}\"]`);\n this.elementToReturnFocus = menuTrigger;\n }\n }\n }\n },\n initFocusTrap() {\n if (this.focusTrap) {\n return;\n }\n this.focusTrap = createFocusTrap([\n // The sidebar itself\n this.$refs.sidebar,\n // Nextcloud Server header navigation\n document.querySelector(\"#header\")\n ], {\n allowOutsideClick: true,\n fallbackFocus: this.$refs.closeButton.$el,\n trapStack: getTrapStack(),\n escapeDeactivates: false\n });\n },\n /**\n * Activate focus trap if it is currently needed, otherwise deactivate\n */\n toggleFocusTrap() {\n if (this.open && this.isMobile) {\n this.initFocusTrap();\n this.focusTrap.activate();\n } else {\n this.focusTrap?.deactivate();\n }\n },\n /**\n * Close the sidebar on pressing the escape key on mobile\n *\n * @param {KeyboardEvent} event key down event\n */\n onKeydownEsc(event) {\n if (this.isMobile) {\n event.stopPropagation();\n this.closeSidebar();\n }\n },\n onAfterEnter(element) {\n if (this.elementToReturnFocus) {\n this.focus();\n }\n this.toggleFocusTrap();\n this.$emit(\"opened\", element);\n },\n onAfterLeave(element) {\n this.$emit(\"closed\", element);\n this.toggleFocusTrap();\n this.elementToReturnFocus?.focus({ focusVisible: true });\n this.elementToReturnFocus = null;\n },\n /**\n * Used to tell parent component the user asked to close the sidebar\n *\n * @param {Event} e close icon click event\n */\n closeSidebar(e) {\n this.$emit(\"close\", e);\n this.$emit(\"update:open\", false);\n },\n /**\n * Emit figure click event to parent component\n *\n * @param {Event} e click event\n */\n onFigureClick(e) {\n this.$emit(\"figureClick\", e);\n },\n /**\n * Toggle the favourite state\n * and emit to the parent component\n */\n toggleStarred() {\n this.isStarred = !this.isStarred;\n this.$emit(\"update:starred\", this.isStarred);\n },\n async editName() {\n this.$emit(\"update:nameEditable\", true);\n if (this.nameEditable) {\n await this.$nextTick();\n this.$refs.nameInput.focus();\n }\n },\n /**\n * Focus the sidebar\n *\n * @public\n */\n focus() {\n if (!this.open && !this.noToggle) {\n this.$refs.toggle.$el.focus();\n return;\n }\n try {\n this.headerRef.focus();\n } catch {\n warn(\"NcAppSidebar should have focusable header for accessibility reasons. Use NcAppSidebarHeader component.\");\n }\n },\n /**\n * Focus the active tab\n *\n * @public\n */\n focusActiveTabContent() {\n this.preserveElementToReturnFocus();\n this.$refs.tabs.focusActiveTabContent();\n },\n /**\n * Check if the toggle button container is available\n */\n checkToggleButtonContainerAvailability() {\n if (this.open === false && !this.noToggle && !this.ncContentSelector) {\n logger.warn(\"[NcAppSidebar] It looks like you want to use NcAppSidebar with the built-in toggle button. This feature is only available when NcAppSidebar is used in NcContent.\");\n }\n },\n /**\n * Emit name change event to parent component\n *\n * @param {Event} event input event\n */\n onNameInput(event) {\n this.$emit(\"update:name\", event.target.value);\n },\n /**\n * Emit when the name form edit confirm button is pressed in order\n * to change the name.\n *\n * @param {Event} event submit event\n */\n onSubmitName(event) {\n this.$emit(\"update:nameEditable\", false);\n this.$emit(\"submitName\", event);\n },\n onDismissEditing() {\n this.$emit(\"update:nameEditable\", false);\n this.$emit(\"dismissEditing\");\n },\n onUpdateActive(activeTab) {\n this.$emit(\"update:active\", activeTab);\n }\n }\n};\nconst _hoisted_1 = [\"aria-labelledby\"];\nconst _hoisted_2 = { class: \"app-sidebar-header__info\" };\nconst _hoisted_3 = {\n key: 0,\n class: \"app-sidebar-header__tertiary-actions\"\n};\nconst _hoisted_4 = { class: \"app-sidebar-header__name-container\" };\nconst _hoisted_5 = { class: \"app-sidebar-header__mainname-container\" };\nconst _hoisted_6 = [\"placeholder\", \"value\"];\nconst _hoisted_7 = [\"title\"];\nconst _hoisted_8 = {\n key: 2,\n class: \"app-sidebar-header__description\"\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_IconDockRight = resolveComponent(\"IconDockRight\");\n const _component_NcButton = resolveComponent(\"NcButton\");\n const _component_NcLoadingIcon = resolveComponent(\"NcLoadingIcon\");\n const _component_IconStar = resolveComponent(\"IconStar\");\n const _component_IconStarOutline = resolveComponent(\"IconStarOutline\");\n const _component_NcAppSidebarHeader = resolveComponent(\"NcAppSidebarHeader\");\n const _component_IconArrowRight = resolveComponent(\"IconArrowRight\");\n const _component_NcActions = resolveComponent(\"NcActions\");\n const _component_IconClose = resolveComponent(\"IconClose\");\n const _component_NcAppSidebarTabs = resolveComponent(\"NcAppSidebarTabs\");\n const _component_NcEmptyContent = resolveComponent(\"NcEmptyContent\");\n const _directive_focus = resolveDirective(\"focus\");\n const _directive_click_outside = resolveDirective(\"click-outside\");\n return openBlock(), createBlock(Transition, {\n appear: \"\",\n name: \"slide-right\",\n onAfterEnter: $options.onAfterEnter,\n onAfterLeave: $options.onAfterLeave\n }, {\n default: withCtx(() => [\n withDirectives(createElementVNode(\"aside\", {\n id: \"app-sidebar-vue\",\n ref: \"sidebar\",\n class: \"app-sidebar\",\n \"aria-labelledby\": `app-sidebar-vue-${$setup.uid}__header`,\n onKeydown: _cache[6] || (_cache[6] = withKeys((...args) => $options.onKeydownEsc && $options.onKeydownEsc(...args), [\"esc\"]))\n }, [\n $options.ncContentSelector && !$props.open && !$props.noToggle ? (openBlock(), createBlock(Teleport, {\n key: 0,\n to: $options.ncContentSelector\n }, [\n createVNode(_component_NcButton, mergeProps({\n ref: \"toggle\",\n \"aria-label\": $options.t(\"Open sidebar\"),\n class: [\"app-sidebar__toggle\", $props.toggleClasses],\n variant: \"tertiary\"\n }, $props.toggleAttrs, {\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"update:open\", true))\n }), {\n icon: withCtx(() => [\n renderSlot(_ctx.$slots, \"toggle-icon\", {}, () => [\n createVNode(_component_IconDockRight, { size: 20 })\n ], true)\n ]),\n _: 3\n }, 16, [\"aria-label\", \"class\"])\n ], 8, [\"to\"])) : createCommentVNode(\"\", true),\n createElementVNode(\"header\", {\n class: normalizeClass([\"app-sidebar-header\", {\n \"app-sidebar-header--with-figure\": $options.isSlotPopulated(_ctx.$slots.header?.()) || $props.background,\n \"app-sidebar-header--compact\": $props.compact\n }])\n }, [\n !$props.empty ? renderSlot(_ctx.$slots, \"info\", { key: 0 }, () => [\n createElementVNode(\"div\", _hoisted_2, [\n $options.isSlotPopulated(_ctx.$slots.header?.()) || $props.background ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n class: normalizeClass([\"app-sidebar-header__figure\", {\n \"app-sidebar-header__figure--with-action\": $options.hasFigureClickListener\n }]),\n style: normalizeStyle({\n backgroundImage: `url(${$props.background})`\n }),\n tabindex: \"0\",\n onClick: _cache[1] || (_cache[1] = (...args) => $options.onFigureClick && $options.onFigureClick(...args)),\n onKeydown: _cache[2] || (_cache[2] = withKeys((...args) => $options.onFigureClick && $options.onFigureClick(...args), [\"enter\"]))\n }, [\n renderSlot(_ctx.$slots, \"header\", { class: \"app-sidebar-header__background\" }, void 0, true)\n ], 38)) : createCommentVNode(\"\", true),\n createElementVNode(\"div\", {\n class: normalizeClass([\"app-sidebar-header__desc\", {\n \"app-sidebar-header__desc--with-tertiary-action\": $options.canStar || $options.isSlotPopulated(_ctx.$slots[\"tertiary-actions\"]?.()),\n \"app-sidebar-header__desc--editable\": $props.nameEditable && !$props.subname,\n \"app-sidebar-header__desc--with-subname--editable\": $props.nameEditable && $props.subname,\n \"app-sidebar-header__desc--without-actions\": !$options.isSlotPopulated(_ctx.$slots[\"secondary-actions\"]?.())\n }])\n }, [\n $options.canStar || $options.isSlotPopulated(_ctx.$slots[\"tertiary-actions\"]?.()) ? (openBlock(), createElementBlock(\"div\", _hoisted_3, [\n renderSlot(_ctx.$slots, \"tertiary-actions\", {}, () => [\n $options.canStar ? (openBlock(), createBlock(_component_NcButton, {\n key: 0,\n \"aria-label\": $data.favoriteTranslated,\n pressed: $data.isStarred,\n class: \"app-sidebar-header__star\",\n variant: \"secondary\",\n onClick: withModifiers($options.toggleStarred, [\"prevent\"])\n }, {\n icon: withCtx(() => [\n $props.starLoading ? (openBlock(), createBlock(_component_NcLoadingIcon, { key: 0 })) : $data.isStarred ? (openBlock(), createBlock(_component_IconStar, {\n key: 1,\n size: 20\n })) : (openBlock(), createBlock(_component_IconStarOutline, {\n key: 2,\n size: 20\n }))\n ]),\n _: 1\n }, 8, [\"aria-label\", \"pressed\", \"onClick\"])) : createCommentVNode(\"\", true)\n ], true)\n ])) : createCommentVNode(\"\", true),\n createElementVNode(\"div\", _hoisted_4, [\n createElementVNode(\"div\", _hoisted_5, [\n withDirectives(createVNode(_component_NcAppSidebarHeader, {\n class: \"app-sidebar-header__mainname\",\n name: $props.name,\n linkify: $props.linkifyName,\n title: $props.title,\n tabindex: $props.nameEditable ? 0 : -1,\n onClick: withModifiers($options.editName, [\"self\"])\n }, null, 8, [\"name\", \"linkify\", \"title\", \"tabindex\", \"onClick\"]), [\n [vShow, !$props.nameEditable]\n ]),\n $props.nameEditable ? withDirectives((openBlock(), createElementBlock(\"form\", {\n key: 0,\n class: \"app-sidebar-header__mainname-form\",\n onSubmit: _cache[5] || (_cache[5] = withModifiers((...args) => $options.onSubmitName && $options.onSubmitName(...args), [\"prevent\"]))\n }, [\n withDirectives(createElementVNode(\"input\", {\n ref: \"nameInput\",\n class: \"app-sidebar-header__mainname-input\",\n type: \"text\",\n placeholder: $props.namePlaceholder,\n value: $props.name,\n onKeydown: _cache[3] || (_cache[3] = withKeys(withModifiers((...args) => $options.onDismissEditing && $options.onDismissEditing(...args), [\"stop\"]), [\"esc\"])),\n onInput: _cache[4] || (_cache[4] = (...args) => $options.onNameInput && $options.onNameInput(...args))\n }, null, 40, _hoisted_6), [\n [_directive_focus]\n ]),\n createVNode(_component_NcButton, {\n \"aria-label\": $data.changeNameTranslated,\n type: \"submit\",\n variant: \"tertiary-no-background\"\n }, {\n icon: withCtx(() => [\n createVNode(_component_IconArrowRight, { size: 20 })\n ]),\n _: 1\n }, 8, [\"aria-label\"])\n ], 32)), [\n [_directive_click_outside, () => $options.onSubmitName()]\n ]) : createCommentVNode(\"\", true),\n $options.isSlotPopulated(_ctx.$slots[\"secondary-actions\"]?.()) ? (openBlock(), createBlock(_component_NcActions, {\n key: 1,\n class: \"app-sidebar-header__menu\",\n forceMenu: $props.forceMenu\n }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"secondary-actions\", {}, void 0, true)\n ]),\n _: 3\n }, 8, [\"forceMenu\"])) : createCommentVNode(\"\", true)\n ]),\n $props.subname.trim() !== \"\" || _ctx.$slots[\"subname\"] ? (openBlock(), createElementBlock(\"p\", {\n key: 0,\n title: $props.subtitle || void 0,\n class: \"app-sidebar-header__subname\"\n }, [\n renderSlot(_ctx.$slots, \"subname\", {}, () => [\n createTextVNode(toDisplayString($props.subname), 1)\n ], true)\n ], 8, _hoisted_7)) : createCommentVNode(\"\", true)\n ])\n ], 2)\n ])\n ], true) : (openBlock(), createBlock(_component_NcAppSidebarHeader, {\n key: 1,\n class: \"app-sidebar-header__mainname--hidden\",\n name: $props.name,\n tabindex: \"-1\"\n }, null, 8, [\"name\"])),\n createVNode(_component_NcButton, {\n ref: \"closeButton\",\n \"aria-label\": $data.closeTranslated,\n title: $data.closeTranslated,\n class: \"app-sidebar__close\",\n variant: \"tertiary\",\n onClick: withModifiers($options.closeSidebar, [\"prevent\"])\n }, {\n icon: withCtx(() => [\n createVNode(_component_IconClose, { size: 20 })\n ]),\n _: 1\n }, 8, [\"aria-label\", \"title\", \"onClick\"]),\n $options.isSlotPopulated(_ctx.$slots.description?.()) && !$props.empty ? (openBlock(), createElementBlock(\"div\", _hoisted_8, [\n renderSlot(_ctx.$slots, \"description\", {}, void 0, true)\n ])) : createCommentVNode(\"\", true)\n ], 2),\n withDirectives(createVNode(_component_NcAppSidebarTabs, {\n ref: \"tabs\",\n active: $props.active,\n forceTabs: $props.forceTabs,\n \"onUpdate:active\": $options.onUpdateActive\n }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"default\", {}, void 0, true)\n ]),\n _: 3\n }, 8, [\"active\", \"forceTabs\", \"onUpdate:active\"]), [\n [vShow, !$props.loading]\n ]),\n $props.loading ? (openBlock(), createBlock(_component_NcEmptyContent, { key: 1 }, {\n icon: withCtx(() => [\n createVNode(_component_NcLoadingIcon, { size: 64 })\n ]),\n _: 1\n })) : createCommentVNode(\"\", true)\n ], 40, _hoisted_1), [\n [vShow, $props.open]\n ])\n ]),\n _: 3\n }, 8, [\"onAfterEnter\", \"onAfterLeave\"]);\n}\nconst NcAppSidebar = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-e8979b7f\"]]);\nexport {\n NcAppSidebar as N\n};\n//# sourceMappingURL=NcAppSidebar-Ch7Vp7q5.mjs.map\n","import PQueue from \"p-queue\";\nconst queue = new PQueue({ concurrency: 5 });\nfunction preloadImage(url) {\n const { resolve, promise } = Promise.withResolvers();\n queue.add(() => {\n const image = new Image();\n image.onerror = () => resolve(false);\n image.onload = () => resolve(true);\n image.src = url;\n return promise;\n });\n return promise;\n}\nexport {\n preloadImage\n};\n//# sourceMappingURL=index.mjs.map\n","import '../assets/NcCollectionList-e5JFvzqX.css';\nimport debounce from \"debounce\";\nimport { resolveComponent, openBlock, createElementBlock, createVNode, toDisplayString, withModifiers, normalizeClass, withDirectives, createElementVNode, vModelText, Fragment, renderList, createBlock, resolveDynamicComponent, withCtx, createCommentVNode, createTextVNode, Transition, ref } from \"vue\";\nimport { r as register, L as t28, a as t, M as t6 } from \"./_l10n-CG4CuN3H.mjs\";\nimport { N as NcActionButton } from \"./NcActionButton-BO5T5ePT.mjs\";\nimport { N as NcActions } from \"./NcActions-CUmcZ3C3.mjs\";\nimport { N as NcAvatar } from \"./NcAvatar-M3-CbKbq.mjs\";\nimport { g as getRoute } from \"./autolink-BT8u-IL-.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { N as NcSelect } from \"./NcSelect-BOFzoCwK.mjs\";\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nregister(t28);\nconst _sfc_main$1 = {\n name: \"NcCollectionListItem\",\n components: {\n NcAvatar,\n NcActions,\n NcActionButton\n },\n props: {\n /**\n * The collection\n */\n collection: {\n type: Object,\n default: null\n },\n /**\n * Current error if any\n */\n error: {\n type: String,\n default: void 0\n }\n },\n emits: [\n \"removeResource\",\n \"renameCollection\"\n ],\n data() {\n return {\n detailsOpen: false,\n newName: null\n };\n },\n computed: {\n getIcon() {\n return (resource) => [resource.iconClass];\n },\n typeClass() {\n return (resource) => \"resource-type-\" + resource.type;\n },\n resources() {\n return this.collection.resources?.filter((resource) => !Array.isArray(resource)) ?? [];\n },\n getComponent() {\n return (resource) => {\n const route = getRoute(this.$router, resource.link);\n return route ? { component: \"router-link\", to: route, href: void 0 } : { component: \"a\", to: void 0, href: resource.link };\n };\n },\n iconUrl() {\n return (resource) => {\n if (resource.mimetype) {\n return OC.MimeType.getIconUrl(resource.mimetype);\n }\n if (resource.iconUrl) {\n return resource.iconUrl;\n }\n return \"\";\n };\n }\n },\n methods: {\n t,\n toggleDetails() {\n this.detailsOpen = !this.detailsOpen;\n },\n showDetails() {\n this.detailsOpen = true;\n },\n removeResource(collection, resource) {\n this.$emit(\"removeResource\", {\n collectionId: collection.id,\n resourceType: resource.type,\n resourceId: resource.id\n });\n },\n openRename() {\n this.newName = this.collection.name;\n },\n renameCollection() {\n if (this.newName) {\n this.$emit(\"renameCollection\", {\n collectionId: this.collection.id,\n name: this.newName\n });\n }\n this.newName = null;\n }\n }\n};\nconst _hoisted_1$1 = { class: \"collection-list-item\" };\nconst _hoisted_2$1 = {\n key: 2,\n class: \"linked-icons\"\n};\nconst _hoisted_3$1 = [\"src\", \"alt\"];\nconst _hoisted_4$1 = {\n key: 3,\n class: \"sharingOptionsGroup\"\n};\nconst _hoisted_5$1 = {\n key: 0,\n class: \"error\"\n};\nconst _hoisted_6$1 = {\n key: 0,\n class: \"resource-list-details\"\n};\nconst _hoisted_7$1 = [\"src\", \"alt\"];\nconst _hoisted_8$1 = { class: \"resource-name\" };\nconst _hoisted_9 = [\"onClick\"];\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcAvatar = resolveComponent(\"NcAvatar\");\n const _component_NcActionButton = resolveComponent(\"NcActionButton\");\n const _component_NcActions = resolveComponent(\"NcActions\");\n return openBlock(), createElementBlock(\"li\", _hoisted_1$1, [\n createVNode(_component_NcAvatar, {\n displayName: $props.collection.name,\n allowPlaceholder: \"\",\n class: \"collection-avatar\"\n }, null, 8, [\"displayName\"]),\n $data.newName === null ? (openBlock(), createElementBlock(\"span\", {\n key: 0,\n class: \"collection-item-name\",\n title: \"\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.showDetails && $options.showDetails(...args))\n }, toDisplayString($props.collection.name), 1)) : (openBlock(), createElementBlock(\"form\", {\n key: 1,\n class: normalizeClass({ \"should-shake\": $props.error }),\n onSubmit: _cache[2] || (_cache[2] = withModifiers((...args) => $options.renameCollection && $options.renameCollection(...args), [\"prevent\"]))\n }, [\n withDirectives(createElementVNode(\"input\", {\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event) => $data.newName = $event),\n type: \"text\",\n autocomplete: \"off\",\n autocapitalize: \"off\"\n }, null, 512), [\n [vModelText, $data.newName]\n ]),\n _cache[3] || (_cache[3] = createElementVNode(\"input\", {\n type: \"submit\",\n value: \"\",\n class: \"icon-confirm\"\n }, null, -1))\n ], 34)),\n !$data.detailsOpen && $data.newName === null ? (openBlock(), createElementBlock(\"div\", _hoisted_2$1, [\n (openBlock(true), createElementBlock(Fragment, null, renderList($options.resources.slice(0, 2), (resource) => {\n return openBlock(), createBlock(resolveDynamicComponent($options.getComponent(resource).component), {\n key: resource.type + \"|\" + resource.id,\n title: resource.name,\n to: $options.getComponent(resource).to,\n href: $options.getComponent(resource).href,\n class: normalizeClass($options.typeClass(resource))\n }, {\n default: withCtx(() => [\n createElementVNode(\"img\", {\n src: $options.iconUrl(resource),\n alt: resource.name\n }, null, 8, _hoisted_3$1)\n ]),\n _: 2\n }, 1032, [\"title\", \"to\", \"href\", \"class\"]);\n }), 128))\n ])) : createCommentVNode(\"\", true),\n $data.newName === null ? (openBlock(), createElementBlock(\"span\", _hoisted_4$1, [\n createVNode(_component_NcActions, null, {\n default: withCtx(() => [\n createVNode(_component_NcActionButton, {\n icon: \"icon-info\",\n onClick: withModifiers($options.toggleDetails, [\"prevent\"])\n }, {\n default: withCtx(() => [\n createTextVNode(toDisplayString($data.detailsOpen ? $options.t(\"Hide details\") : $options.t(\"Show details\")), 1)\n ]),\n _: 1\n }, 8, [\"onClick\"]),\n createVNode(_component_NcActionButton, {\n icon: \"icon-rename\",\n onClick: withModifiers($options.openRename, [\"prevent\"])\n }, {\n default: withCtx(() => [\n createTextVNode(toDisplayString($options.t(\"Rename project\")), 1)\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ]),\n _: 1\n })\n ])) : createCommentVNode(\"\", true),\n createVNode(Transition, { name: \"fade\" }, {\n default: withCtx(() => [\n $props.error ? (openBlock(), createElementBlock(\"div\", _hoisted_5$1, toDisplayString($props.error), 1)) : createCommentVNode(\"\", true)\n ]),\n _: 1\n }),\n createVNode(Transition, { name: \"fade\" }, {\n default: withCtx(() => [\n $data.detailsOpen ? (openBlock(), createElementBlock(\"ul\", _hoisted_6$1, [\n (openBlock(true), createElementBlock(Fragment, null, renderList($options.resources, (resource) => {\n return openBlock(), createElementBlock(\"li\", {\n key: resource.type + \"|\" + resource.id,\n class: normalizeClass($options.typeClass(resource))\n }, [\n (openBlock(), createBlock(resolveDynamicComponent($options.getComponent(resource).component), {\n to: $options.getComponent(resource).to,\n href: $options.getComponent(resource).href\n }, {\n default: withCtx(() => [\n createElementVNode(\"img\", {\n src: $options.iconUrl(resource),\n alt: resource.name\n }, null, 8, _hoisted_7$1),\n createElementVNode(\"span\", _hoisted_8$1, toDisplayString(resource.name || \"\"), 1)\n ]),\n _: 2\n }, 1032, [\"to\", \"href\"])),\n createElementVNode(\"span\", {\n class: \"icon-close\",\n onClick: ($event) => $options.removeResource($props.collection, resource)\n }, null, 8, _hoisted_9)\n ], 2);\n }), 128))\n ])) : createCommentVNode(\"\", true)\n ]),\n _: 1\n })\n ]);\n}\nconst NcCollectionListItem = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1], [\"__scopeId\", \"data-v-8ebb9fc1\"]]);\nregister(t6);\nfunction extractOcsData(response) {\n return response.data.ocs.data;\n}\nfunction renameCollectionService(collectionId, collectionName) {\n return axios.put(generateOcsUrl(\"collaboration/resources/collections/{collectionId}\", { collectionId }), { collectionName }).then(extractOcsData);\n}\nfunction getCollectionsByResourceService(resourceType, resourceId) {\n return axios.get(generateOcsUrl(\"collaboration/resources/{resourceType}/{resourceId}\", { resourceType, resourceId })).then(extractOcsData);\n}\nfunction createCollectionService(resourceType, resourceId, name) {\n return axios.post(generateOcsUrl(\"collaboration/resources/{resourceType}/{resourceId}\", { resourceType, resourceId }), { name }).then(extractOcsData);\n}\nfunction addResourceService(collectionId, resourceType, resourceId) {\n return axios.post(generateOcsUrl(\"collaboration/resources/collections/{collectionId}\", { collectionId }), { resourceType, resourceId }).then(extractOcsData);\n}\nfunction removeResourceService(collectionId, resourceType, resourceId) {\n return axios.delete(generateOcsUrl(\"collaboration/resources/collections/{collectionId}\", { collectionId }), { params: { resourceType, resourceId } }).then(extractOcsData);\n}\nfunction searchService(query) {\n return axios.get(generateOcsUrl(\"collaboration/resources/collections/search/{query}\", { query })).then(extractOcsData);\n}\nfunction useCollections() {\n const storedCollections = ref([]);\n const addCollections = (collections) => {\n storedCollections.value = collections;\n };\n const addCollection = (collection) => {\n storedCollections.value.push(collection);\n };\n const removeCollection = (collectionId) => {\n storedCollections.value = storedCollections.value.filter((item) => item.id !== collectionId);\n };\n const updateCollection = (collection) => {\n const index = storedCollections.value.findIndex((item) => item.id === collection.id);\n if (index !== -1) {\n storedCollections.value[index] = collection;\n } else {\n addCollection(collection);\n }\n };\n const fetchCollectionsByResource = async ({ resourceType, resourceId }) => {\n const collections = await getCollectionsByResourceService(resourceType, resourceId);\n addCollections(collections);\n };\n const createCollection = async ({ baseResourceType, baseResourceId, resourceType, resourceId, name }) => {\n const collection = await createCollectionService(baseResourceType, baseResourceId, name);\n addCollection(collection);\n await addResourceToCollection({\n collectionId: collection.id,\n resourceType,\n resourceId\n });\n };\n const renameCollection = async ({ collectionId, name }) => {\n const collection = await renameCollectionService(collectionId, name);\n updateCollection(collection);\n };\n async function addResourceToCollection({ collectionId, resourceType, resourceId }) {\n const collection = await addResourceService(collectionId, resourceType, String(resourceId));\n updateCollection(collection);\n }\n const removeResourceFromCollection = async ({ collectionId, resourceType, resourceId }) => {\n const collection = await removeResourceService(collectionId, resourceType, String(resourceId));\n if (collection.resources.length > 0) {\n updateCollection(collection);\n } else {\n removeCollection(collectionId);\n }\n };\n return {\n storedCollections,\n fetchCollectionsByResource,\n createCollection,\n renameCollection,\n addResourceToCollection,\n removeResourceFromCollection\n };\n}\nconst METHOD_CREATE_COLLECTION = 0;\nconst METHOD_ADD_TO_COLLECTION = 1;\nconst _sfc_main = {\n name: \"NcCollectionList\",\n components: {\n NcCollectionListItem,\n NcAvatar,\n NcSelect\n },\n props: {\n /**\n * Resource type identifier\n */\n type: {\n type: String,\n default: null\n },\n /**\n * Unique id of the resource\n */\n id: {\n type: String,\n default: null\n },\n /**\n * Name of the resource\n */\n name: {\n type: String,\n default: \"\"\n },\n /**\n * Whether the component is active (to start fetch resources)\n */\n isActive: {\n type: Boolean,\n default: true\n }\n },\n setup() {\n const {\n storedCollections,\n fetchCollectionsByResource,\n createCollection,\n addResourceToCollection,\n removeResourceFromCollection,\n renameCollection\n } = useCollections();\n const searchCollections = ref([]);\n const search = debounce(function(query, loading) {\n if (query !== \"\") {\n loading(true);\n searchService(query).then((collections) => {\n searchCollections.value = collections;\n }).catch((error) => {\n logger.error(\"Failed to search for collections\", { error });\n }).finally(() => {\n loading(false);\n });\n }\n }, 500);\n return {\n storedCollections,\n fetchCollectionsByResource,\n createCollection,\n addResourceToCollection,\n removeResourceFromCollection,\n renameCollection,\n searchCollections,\n search\n };\n },\n data() {\n return {\n selectIsOpen: false,\n generatingCodes: false,\n codes: void 0,\n value: null,\n model: {},\n collectionsError: {},\n error: null,\n isSelectOpen: false\n };\n },\n computed: {\n collections() {\n return this.storedCollections.filter((collection) => collection.resources.some((resource) => resource && resource.id === String(this.id) && resource.type === this.type));\n },\n placeholder() {\n return this.isSelectOpen ? t(\"Type to search for existing projects\") : t(\"Add to a project\");\n },\n options() {\n const options = [];\n window.OCP.Collaboration.getTypes().sort().forEach((type) => {\n options.push({\n method: METHOD_CREATE_COLLECTION,\n type,\n title: window.OCP.Collaboration.getLabel(type),\n class: window.OCP.Collaboration.getIcon(type),\n action: () => window.OCP.Collaboration.trigger(type)\n });\n });\n for (const index in this.searchCollections) {\n if (!this.collections.find((collection) => collection.id === this.searchCollections[index].id)) {\n options.push({\n method: METHOD_ADD_TO_COLLECTION,\n title: this.searchCollections[index].name,\n collectionId: this.searchCollections[index].id\n });\n }\n }\n return options;\n },\n resourceIdentifier() {\n return {\n resourceType: this.type,\n resourceId: this.id,\n isActive: this.isActive\n };\n }\n },\n watch: {\n resourceIdentifier: {\n deep: true,\n immediate: true,\n handler(resourceIdentifier) {\n if (!resourceIdentifier.isActive || !resourceIdentifier.resourceId || !resourceIdentifier.resourceType) {\n return;\n }\n this.fetchCollectionsByResource(resourceIdentifier);\n }\n }\n },\n methods: {\n t,\n select(selectedOption) {\n if (selectedOption.method === METHOD_CREATE_COLLECTION) {\n selectedOption.action().then((resourceId) => {\n this.createCollection({\n baseResourceType: this.type,\n baseResourceId: this.id,\n resourceType: selectedOption.type,\n resourceId,\n name: this.name\n }).catch((e) => {\n this.setError(t(\"Failed to create a project\"), e);\n });\n }).catch((e) => {\n logger.error(\"[NcCollectionList] No resource selected\", e);\n });\n }\n if (selectedOption.method === METHOD_ADD_TO_COLLECTION) {\n this.addResourceToCollection({\n collectionId: selectedOption.collectionId,\n resourceType: this.type,\n resourceId: this.id\n }).catch((e) => {\n this.setError(t(\"Failed to add the item to the project\"), e);\n });\n }\n this.value = null;\n },\n showSelect() {\n this.selectIsOpen = true;\n this.$refs.select.$el.focus();\n },\n setError(error, e) {\n logger.error(error, { error: e });\n this.error = error;\n setTimeout(() => {\n this.error = null;\n }, 5e3);\n },\n renameCollectionFromItem({ collectionId, name }) {\n this.renameCollection({ collectionId, name }).catch((e) => {\n logger.error(t(\"Failed to rename the project\"), { error: e });\n this.collectionsError[collectionId] = t(\"Failed to rename the project\");\n setTimeout(() => {\n this.collectionsError[collectionId] = null;\n }, 5e3);\n });\n }\n }\n};\nconst _hoisted_1 = {\n key: 0,\n id: \"collection-list\",\n class: \"collection-list\"\n};\nconst _hoisted_2 = { id: \"collection-select-container\" };\nconst _hoisted_3 = { class: \"option__desc\" };\nconst _hoisted_4 = { class: \"option__title\" };\nconst _hoisted_5 = { class: \"option__wrapper\" };\nconst _hoisted_6 = { class: \"option__title\" };\nconst _hoisted_7 = { class: \"hint\" };\nconst _hoisted_8 = {\n key: 0,\n class: \"error\"\n};\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcAvatar = resolveComponent(\"NcAvatar\");\n const _component_NcSelect = resolveComponent(\"NcSelect\");\n const _component_NcCollectionListItem = resolveComponent(\"NcCollectionListItem\");\n return $options.collections && $props.type && $props.id ? (openBlock(), createElementBlock(\"ul\", _hoisted_1, [\n createElementVNode(\"li\", {\n onClick: _cache[3] || (_cache[3] = (...args) => $options.showSelect && $options.showSelect(...args))\n }, [\n _cache[4] || (_cache[4] = createElementVNode(\"div\", { class: \"avatar\" }, [\n createElementVNode(\"span\", { class: \"icon-projects\" })\n ], -1)),\n createElementVNode(\"div\", _hoisted_2, [\n createVNode(_component_NcSelect, {\n ref: \"select\",\n modelValue: $data.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => $data.value = $event),\n \"aria-label-combobox\": $options.t(\"Add to a project\"),\n options: $options.options,\n placeholder: $options.placeholder,\n label: \"title\",\n limit: 5,\n onClose: _cache[1] || (_cache[1] = ($event) => $data.isSelectOpen = false),\n onOpen: _cache[2] || (_cache[2] = ($event) => $data.isSelectOpen = true),\n \"onOption:selected\": $options.select,\n onSearch: $setup.search\n }, {\n \"selected-option\": withCtx((option) => [\n createElementVNode(\"span\", _hoisted_3, [\n createElementVNode(\"span\", _hoisted_4, toDisplayString(option.title), 1)\n ])\n ]),\n option: withCtx((option) => [\n createElementVNode(\"span\", _hoisted_5, [\n option.class ? (openBlock(), createElementBlock(\"span\", {\n key: 0,\n class: normalizeClass([option.class, \"avatar\"])\n }, null, 2)) : option.method !== 2 ? (openBlock(), createBlock(_component_NcAvatar, {\n key: 1,\n allowPlaceholder: \"\",\n displayName: option.title\n }, null, 8, [\"displayName\"])) : createCommentVNode(\"\", true),\n createElementVNode(\"span\", _hoisted_6, toDisplayString(option.title), 1)\n ])\n ]),\n default: withCtx(() => [\n createElementVNode(\"p\", _hoisted_7, toDisplayString($options.t(\"Connect items to a project to make them easier to find\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\", \"aria-label-combobox\", \"options\", \"placeholder\", \"onOption:selected\", \"onSearch\"])\n ])\n ]),\n createVNode(Transition, { name: \"fade\" }, {\n default: withCtx(() => [\n $data.error ? (openBlock(), createElementBlock(\"li\", _hoisted_8, toDisplayString($data.error), 1)) : createCommentVNode(\"\", true)\n ]),\n _: 1\n }),\n (openBlock(true), createElementBlock(Fragment, null, renderList($options.collections, (collection) => {\n return openBlock(), createBlock(_component_NcCollectionListItem, {\n key: collection.id,\n collection,\n error: $data.collectionsError[collection.id],\n onRenameCollection: $options.renameCollectionFromItem,\n onRemoveResource: $setup.removeResourceFromCollection\n }, null, 8, [\"collection\", \"error\", \"onRenameCollection\", \"onRemoveResource\"]);\n }), 128))\n ])) : createCommentVNode(\"\", true);\n}\nconst NcCollectionList = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-0e169eff\"]]);\nexport {\n NcCollectionList as N\n};\n//# sourceMappingURL=NcCollectionList-CO-iHqi6.mjs.map\n","import '../assets/NcDashboardWidget-nZuIL1UN.css';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode, resolveComponent, createBlock, withCtx, renderSlot, createVNode, Fragment, renderList, toHandlers } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { r as register, z as t35, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { N as NcAvatar } from \"./NcAvatar-M3-CbKbq.mjs\";\nimport { N as NcDashboardWidgetItem } from \"./NcDashboardWidgetItem-BwwFiNOL.mjs\";\nimport { N as NcEmptyContent } from \"./NcEmptyContent-CGAPqk4S.mjs\";\nconst _sfc_main$1 = {\n name: \"CheckIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$1 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$1 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$1 = { d: \"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\" };\nconst _hoisted_4 = { key: 0 };\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon check-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$1, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$1))\n ], 16, _hoisted_1$1);\n}\nconst Check = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1]]);\nregister(t35);\nconst _sfc_main = {\n name: \"NcDashboardWidget\",\n components: {\n NcAvatar,\n NcDashboardWidgetItem,\n NcEmptyContent,\n Check\n },\n props: {\n /**\n * An array containing the items to show (specific structure must be respected,\n * except if you override item rendering in the default slot).\n */\n items: {\n type: Array,\n default: () => {\n return [];\n }\n },\n /**\n * If this is set, a \"show more\" text is displayed on the widget's bottom.\n * It's a link pointing to this URL.\n */\n showMoreUrl: {\n type: String,\n default: \"\"\n },\n /**\n * The text of show more button.\n *\n * Expected to be in the form \"More {itemName} …\"\n */\n showMoreLabel: {\n type: String,\n default: t(\"More items …\")\n },\n /**\n * A boolean to put the widget in a loading state.\n */\n loading: {\n type: Boolean,\n default: false\n },\n /**\n * An object containing context menu entries that will be displayed for each item.\n */\n itemMenu: {\n type: Object,\n default: () => {\n return {};\n }\n },\n /**\n * Whether both the items and the empty content message are shown.\n * Usefull for e.g. showing \"No mentions\" and a list of elements.\n */\n showItemsAndEmptyContent: {\n type: Boolean,\n default: false\n },\n /**\n * The text to show in the empty content area.\n */\n emptyContentMessage: {\n type: String,\n default: \"\"\n },\n /**\n * The text to show in the half empty content area.\n */\n halfEmptyContentMessage: {\n type: String,\n default: \"\"\n }\n },\n computed: {\n // forward menu events to my parent\n handlers() {\n const h = {};\n for (const evName in this.itemMenu) {\n h[evName] = (it) => {\n this.$emit(evName, it);\n };\n }\n return h;\n },\n displayedItems() {\n const nbItems = this.showMoreUrl && this.items.length >= this.maxItemNumber ? this.maxItemNumber - 1 : this.maxItemNumber;\n return this.items.slice(0, nbItems);\n },\n showHalfEmptyContentArea() {\n return this.showItemsAndEmptyContent && this.halfEmptyContentString && this.items.length !== 0;\n },\n halfEmptyContentString() {\n return this.halfEmptyContentMessage || this.emptyContentMessage;\n },\n maxItemNumber() {\n return this.showItemsAndEmptyContent ? 5 : 7;\n },\n showMore() {\n return this.showMoreUrl && this.items.length >= this.maxItemNumber;\n }\n }\n};\nconst _hoisted_1 = { class: \"dashboard-widget\" };\nconst _hoisted_2 = { key: 1 };\nconst _hoisted_3 = [\"href\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_Check = resolveComponent(\"Check\");\n const _component_NcEmptyContent = resolveComponent(\"NcEmptyContent\");\n const _component_NcDashboardWidgetItem = resolveComponent(\"NcDashboardWidgetItem\");\n const _component_NcAvatar = resolveComponent(\"NcAvatar\");\n return openBlock(), createElementBlock(\"div\", _hoisted_1, [\n $options.showHalfEmptyContentArea ? (openBlock(), createBlock(_component_NcEmptyContent, {\n key: 0,\n description: $options.halfEmptyContentString,\n class: \"half-screen\"\n }, {\n icon: withCtx(() => [\n renderSlot(_ctx.$slots, \"halfEmptyContentIcon\", {}, () => [\n createVNode(_component_Check)\n ], true)\n ]),\n _: 3\n }, 8, [\"description\"])) : createCommentVNode(\"\", true),\n createElementVNode(\"ul\", null, [\n (openBlock(true), createElementBlock(Fragment, null, renderList($options.displayedItems, (item) => {\n return openBlock(), createElementBlock(\"li\", {\n key: item.id\n }, [\n renderSlot(_ctx.$slots, \"default\", { item }, () => [\n createVNode(_component_NcDashboardWidgetItem, mergeProps({ ref_for: true }, item, { itemMenu: $props.itemMenu }, toHandlers($options.handlers)), null, 16, [\"itemMenu\"])\n ], true)\n ]);\n }), 128))\n ]),\n $props.loading ? (openBlock(), createElementBlock(\"div\", _hoisted_2, [\n (openBlock(), createElementBlock(Fragment, null, renderList(7, (i) => {\n return createElementVNode(\"div\", {\n key: i,\n class: \"item-list__entry\"\n }, [\n createVNode(_component_NcAvatar, {\n class: \"item-avatar\",\n size: 44\n }),\n _cache[0] || (_cache[0] = createElementVNode(\"div\", { class: \"item__details\" }, [\n createElementVNode(\"h3\", null, \" \"),\n createElementVNode(\"p\", { class: \"message\" }, \"   \")\n ], -1))\n ]);\n }), 64))\n ])) : $props.items.length === 0 ? renderSlot(_ctx.$slots, \"empty-content\", { key: 2 }, () => [\n $props.emptyContentMessage ? (openBlock(), createBlock(_component_NcEmptyContent, {\n key: 0,\n description: $props.emptyContentMessage\n }, {\n icon: withCtx(() => [\n renderSlot(_ctx.$slots, \"emptyContentIcon\", {}, void 0, true)\n ]),\n _: 3\n }, 8, [\"description\"])) : createCommentVNode(\"\", true)\n ], true) : $options.showMore ? (openBlock(), createElementBlock(\"a\", {\n key: 3,\n href: $props.showMoreUrl,\n target: \"_blank\",\n class: \"more\",\n tabindex: \"0\"\n }, toDisplayString($props.showMoreLabel), 9, _hoisted_3)) : createCommentVNode(\"\", true)\n ]);\n}\nconst NcDashboardWidget = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-8dabc003\"]]);\nexport {\n NcDashboardWidget as N\n};\n//# sourceMappingURL=NcDashboardWidget-ftOfMTzx.mjs.map\n","import '../assets/NcFilePicker-CimiKIH1.css';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode, defineComponent, useTemplateRef, computed, normalizeClass, createVNode, withCtx, createBlock, createTextVNode, unref, Fragment, renderList, renderSlot, nextTick } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { N as NcActionButton } from \"./NcActionButton-BO5T5ePT.mjs\";\nimport { N as NcActionCaption } from \"./NcActionCaption-f7L9gBlT.mjs\";\nimport { N as NcActions } from \"./NcActions-CUmcZ3C3.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { N as NcLoadingIcon } from \"./NcLoadingIcon-BOVpFVQz.mjs\";\nimport { getGettextBuilder } from \"@nextcloud/l10n/gettext\";\nconst _sfc_main$3 = {\n name: \"FolderUploadIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$3 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$2 = { d: \"M20,6A2,2 0 0,1 22,8V18A2,2 0 0,1 20,20H4A2,2 0 0,1 2,18V6A2,2 0 0,1 4,4H10L12,6H20M10.75,13H14V17H16V13H19.25L15,8.75\" };\nconst _hoisted_4$2 = { key: 0 };\nfunction _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon folder-upload-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$2, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$2, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$2))\n ], 16, _hoisted_1$3);\n}\nconst IconFolderUpload = /* @__PURE__ */ _export_sfc(_sfc_main$3, [[\"render\", _sfc_render$2]]);\nconst _sfc_main$2 = {\n name: \"PlusIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$2 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$1 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$1 = { d: \"M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z\" };\nconst _hoisted_4$1 = { key: 0 };\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon plus-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$1, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$1, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$1))\n ], 16, _hoisted_1$2);\n}\nconst IconPlus = /* @__PURE__ */ _export_sfc(_sfc_main$2, [[\"render\", _sfc_render$1]]);\nconst _sfc_main$1 = {\n name: \"UploadIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$1 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3 = { d: \"M9,16V10H5L12,3L19,10H15V16H9M5,20V18H19V20H5Z\" };\nconst _hoisted_4 = { key: 0 };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon upload-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2))\n ], 16, _hoisted_1$1);\n}\nconst IconUpload = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render]]);\n/*!\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nconst gtBuilder = getGettextBuilder().detectLanguage();\nconst gt = gtBuilder.build();\ngt.ngettext.bind(gt);\nconst t = gt.gettext.bind(gt);\nconst _hoisted_1 = [\"accept\", \"multiple\"];\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcFilePicker\",\n props: {\n accept: { default: void 0 },\n actionCaption: { default: \"\" },\n actions: { default: () => [] },\n directory: { type: Boolean },\n directoryOnly: { type: Boolean },\n disabled: { type: Boolean },\n iconOnly: { type: Boolean },\n label: { default: void 0 },\n loading: { type: Boolean },\n multiple: { type: Boolean },\n variant: { default: \"primary\" }\n },\n emits: [\"pick\"],\n setup(__props, { expose: __expose, emit: __emit }) {\n const props = __props;\n const emit = __emit;\n __expose({\n reset\n });\n const formElement = useTemplateRef(\"form\");\n const inputElement = useTemplateRef(\"input\");\n const currentLabel = computed(() => {\n if (props.loading) {\n return t(\"Uploading …\");\n } else if (props.label) {\n return props.label;\n } else if (props.directoryOnly) {\n return t(\"Pick folder\");\n }\n return props.multiple ? t(\"Pick files\") : t(\"Pick file\");\n });\n const canUploadFolders = computed(() => {\n return (props.directory || props.directoryOnly) && \"webkitdirectory\" in HTMLInputElement.prototype;\n });\n function triggerPickFiles(uploadFolders) {\n reset();\n if (canUploadFolders.value) {\n inputElement.value.webkitdirectory = uploadFolders;\n }\n nextTick(() => inputElement.value.click());\n }\n function onPick() {\n const files = inputElement.value?.files ? Array.from(inputElement.value.files) : [];\n emit(\"pick\", files);\n }\n function reset() {\n formElement.value.reset();\n }\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"form\", {\n ref: \"form\",\n class: normalizeClass(_ctx.$style.filePicker)\n }, [\n createVNode(NcActions, {\n \"aria-label\": currentLabel.value,\n disabled: __props.disabled || __props.loading,\n menuName: __props.iconOnly ? void 0 : currentLabel.value,\n forceName: !__props.iconOnly,\n variant: __props.variant\n }, {\n icon: withCtx(() => [\n !__props.loading ? renderSlot(_ctx.$slots, \"icon\", { key: 0 }, () => [\n createVNode(IconPlus, { size: 20 })\n ]) : (openBlock(), createBlock(NcLoadingIcon, { key: 1 }))\n ]),\n default: withCtx(() => [\n __props.actionCaption ? (openBlock(), createBlock(NcActionCaption, {\n key: 0,\n name: __props.actionCaption\n }, null, 8, [\"name\"])) : createCommentVNode(\"\", true),\n !__props.directoryOnly ? (openBlock(), createBlock(NcActionButton, {\n key: 1,\n closeAfterClick: \"\",\n onClick: _cache[0] || (_cache[0] = ($event) => triggerPickFiles(false))\n }, {\n icon: withCtx(() => [\n createVNode(IconUpload, { size: 20 })\n ]),\n default: withCtx(() => [\n createTextVNode(\" \" + toDisplayString(canUploadFolders.value || _ctx.$slots.actions ? __props.multiple ? unref(t)(\"Upload files\") : unref(t)(\"Upload file\") : currentLabel.value), 1)\n ]),\n _: 1\n })) : createCommentVNode(\"\", true),\n canUploadFolders.value ? (openBlock(), createBlock(NcActionButton, {\n key: 2,\n closeAfterClick: \"\",\n onClick: _cache[1] || (_cache[1] = ($event) => triggerPickFiles(true))\n }, {\n icon: withCtx(() => [\n createVNode(IconFolderUpload, {\n style: { \"color\": \"var(--color-primary-element)\" },\n size: 20\n })\n ]),\n default: withCtx(() => [\n createTextVNode(\" \" + toDisplayString(!__props.directoryOnly || _ctx.$slots.actions ? unref(t)(\"Upload folder\") : currentLabel.value), 1)\n ]),\n _: 1\n })) : createCommentVNode(\"\", true),\n (openBlock(true), createElementBlock(Fragment, null, renderList(__props.actions, (group) => {\n return openBlock(), createElementBlock(Fragment, null, [\n group.caption ? (openBlock(), createBlock(NcActionCaption, {\n key: group.caption,\n name: group.caption\n }, null, 8, [\"name\"])) : createCommentVNode(\"\", true),\n (openBlock(true), createElementBlock(Fragment, null, renderList(group.actions ?? [group], (action) => {\n return openBlock(), createBlock(NcActionButton, {\n key: action.label,\n closeAfterClick: \"\",\n onClick: action.onClick\n }, {\n icon: withCtx(() => [\n createVNode(NcIconSvgWrapper, {\n svg: action.iconSvg\n }, null, 8, [\"svg\"])\n ]),\n default: withCtx(() => [\n createTextVNode(\" \" + toDisplayString(action.label), 1)\n ]),\n _: 2\n }, 1032, [\"onClick\"]);\n }), 128))\n ], 64);\n }), 256))\n ]),\n _: 3\n }, 8, [\"aria-label\", \"disabled\", \"menuName\", \"forceName\", \"variant\"]),\n createElementVNode(\"input\", {\n ref: \"input\",\n accept: __props.accept?.join(\", \"),\n \"aria-hidden\": \"true\",\n class: \"hidden-visually\",\n multiple: __props.multiple,\n type: \"file\",\n onChange: onPick\n }, null, 40, _hoisted_1),\n renderSlot(_ctx.$slots, \"default\")\n ], 2);\n };\n }\n});\nconst filePicker = \"_filePicker_UHtO-\";\nconst style0 = {\n filePicker\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcFilePicker = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n NcFilePicker as N\n};\n//# sourceMappingURL=NcFilePicker-nPCwHMqj.mjs.map\n","import '../assets/NcKbd-BeQpGp0b.css';\nimport { defineComponent, computed, openBlock, createElementBlock, normalizeClass, renderSlot, createTextVNode, toDisplayString } from \"vue\";\nimport { r as register, o as t7, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { i as isMac } from \"./platform-CC2ecGvV.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t7);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcKbd\",\n props: {\n symbol: { default: () => void 0 },\n mac: { type: Boolean, default: () => isMac }\n },\n setup(__props) {\n const labels = computed(() => ({\n ArrowUp: \"↑\",\n ArrowDown: \"↓\",\n ArrowLeft: \"←\",\n ArrowRight: \"→\",\n Control: !__props.mac ? t(\"Ctrl\") : \"⌘\",\n Alt: !__props.mac ? t(\"Alt\") : \"⌥\",\n Shift: !__props.mac ? t(\"Shift\") : \"⇧\",\n Enter: !__props.mac ? t(\"Enter\") : \"⏎\",\n Tab: !__props.mac ? t(\"Tab\") : \"⇥\",\n Delete: !__props.mac ? t(\"Delete\") : \"⌫\",\n Escape: !__props.mac ? t(\"Escape\") : \"⎋\",\n Space: t(\"Space\")\n // TRANSLATORS: Space key on keyboard\n }));\n const label = computed(() => __props.symbol && labels.value[__props.symbol] || __props.symbol);\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"kbd\", {\n class: normalizeClass(_ctx.$style.kbd)\n }, [\n renderSlot(_ctx.$slots, \"default\", {}, () => [\n createTextVNode(toDisplayString(label.value), 1)\n ])\n ], 2);\n };\n }\n});\nconst kbd = \"_kbd_3V7rw\";\nconst style0 = {\n \"material-design-icon\": \"_material-design-icon_FHHYV\",\n kbd\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcKbd = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n NcKbd as N\n};\n//# sourceMappingURL=NcKbd-Iyp0KDp4.mjs.map\n","import '../assets/NcHotkeyList-BfrEkKmK.css';\nimport { defineComponent, openBlock, createElementBlock, normalizeClass, createElementVNode, toDisplayString, unref, renderSlot } from \"vue\";\nimport { r as register, p as t31, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t31);\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcHotkeyList\",\n props: {\n label: { default: () => void 0 }\n },\n setup(__props) {\n const labelId = `NcHotkeyList_${createElementId()}`;\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass(_ctx.$style.hotkeyList)\n }, [\n createElementVNode(\"div\", {\n id: labelId,\n class: normalizeClass([_ctx.$style.hotkeyList__heading, { \"hidden-visually\": !__props.label }])\n }, toDisplayString(__props.label || unref(t)(\"Keyboard shortcuts\")), 3),\n createElementVNode(\"ul\", { \"aria-labelledby\": labelId }, [\n renderSlot(_ctx.$slots, \"default\")\n ])\n ], 2);\n };\n }\n});\nconst hotkeyList = \"_hotkeyList_xNXCh\";\nconst hotkeyList__heading = \"_hotkeyList__heading_j6G86\";\nconst style0 = {\n hotkeyList,\n hotkeyList__heading\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcHotkeyList = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n NcHotkeyList as N\n};\n//# sourceMappingURL=NcHotkeyList-CmMgGhMr.mjs.map\n","import '../assets/NcListItemIcon-DJRcmlo1.css';\nimport \"escape-html\";\nimport \"striptags\";\nimport { resolveComponent, openBlock, createElementBlock, normalizeStyle, normalizeClass, createVNode, mergeProps, createElementVNode, createBlock, toDisplayString, createCommentVNode, renderSlot } from \"vue\";\nimport \"../composables/useIsDarkTheme/index.mjs\";\nimport \"@nextcloud/router\";\nimport \"../functions/isDarkTheme/index.mjs\";\nimport \"./NcMentionBubble.vue_vue_type_style_index_0_scoped_45238efd_lang-BX_KxRP-.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { u as userStatus, N as NcAvatar } from \"./NcAvatar-M3-CbKbq.mjs\";\nimport { _ as _sfc_main$1 } from \"./NcHighlight.vue_vue_type_script_lang-DnWQDM_2.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nconst margin = 8;\nconst defaultSize = 32;\nconst _sfc_main = {\n name: \"NcListItemIcon\",\n components: {\n NcAvatar,\n NcHighlight: _sfc_main$1,\n NcIconSvgWrapper\n },\n mixins: [\n userStatus\n ],\n props: {\n /**\n * Default first line text\n */\n name: {\n type: String,\n required: true\n },\n /**\n * Secondary optional line\n * Only visible on size of 32 and above\n */\n subname: {\n type: String,\n default: \"\"\n },\n /**\n * Icon class to be displayed at the end of the component\n */\n icon: {\n type: String,\n default: \"\"\n },\n /**\n * SVG icon to be displayed at the end of the component\n */\n iconSvg: {\n type: String,\n default: \"\"\n },\n /**\n * Descriptive name for the icon\n */\n iconName: {\n type: String,\n default: \"\"\n },\n /**\n * Search within the highlight of name/subname\n */\n search: {\n type: String,\n default: \"\"\n },\n /**\n * Set a size in px that will define the avatar height/width\n * and therefore, the height of the component\n */\n avatarSize: {\n type: Number,\n default: defaultSize\n },\n /**\n * Disable the margins of this component.\n * Useful for integration in `NcSelect` for example\n */\n noMargin: {\n type: Boolean,\n default: false\n },\n /**\n * See the [Avatar](#Avatar) displayName prop\n * Fallback to name\n */\n displayName: {\n type: String,\n default: null\n },\n /**\n * See the [Avatar](#Avatar) isNoUser prop\n * Enable/disable the UserStatus fetching\n */\n isNoUser: {\n type: Boolean,\n default: false\n },\n /**\n * Unique list item ID\n */\n id: {\n type: String,\n default: null\n }\n },\n setup() {\n return {\n margin,\n defaultSize\n };\n },\n computed: {\n hasIcon() {\n return this.icon !== \"\";\n },\n hasIconSvg() {\n return this.iconSvg !== \"\";\n },\n isValidSubname() {\n return this.subname?.trim?.() !== \"\";\n },\n isSizeBigEnough() {\n return this.avatarSize >= 26;\n },\n cssVars() {\n const margin2 = this.noMargin ? 0 : this.margin;\n return {\n \"--height\": this.avatarSize + 2 * margin2 + \"px\",\n \"--margin\": this.margin + \"px\"\n };\n },\n /**\n * Separates the search property into two parts, the first one is the search part on the name, the second on the subname.\n *\n * @return {[string, string]}\n */\n searchParts() {\n const EMAIL_NOTATION = /^([^<]*)<([^>]+)>?$/;\n const match = this.search.match(EMAIL_NOTATION);\n if (this.isNoUser || !match) {\n return [this.search, this.search];\n }\n return [match[1].trim(), match[2]];\n }\n },\n beforeMount() {\n if (!this.isNoUser && !this.subname) {\n this.fetchUserStatus(this.user);\n }\n }\n};\nconst _hoisted_1 = [\"id\"];\nconst _hoisted_2 = { class: \"option__details\" };\nconst _hoisted_3 = { key: 1 };\nconst _hoisted_4 = [\"aria-label\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcAvatar = resolveComponent(\"NcAvatar\");\n const _component_NcHighlight = resolveComponent(\"NcHighlight\");\n const _component_NcIconSvgWrapper = resolveComponent(\"NcIconSvgWrapper\");\n return openBlock(), createElementBlock(\"span\", {\n id: $props.id,\n class: normalizeClass([\"option\", { \"option--compact\": $props.avatarSize < $setup.defaultSize }]),\n style: normalizeStyle($options.cssVars)\n }, [\n createVNode(_component_NcAvatar, mergeProps(_ctx.$attrs, {\n disableMenu: \"\",\n disableTooltip: \"\",\n displayName: $props.displayName || $props.name,\n isNoUser: $props.isNoUser,\n size: $props.avatarSize,\n class: \"option__avatar\"\n }), null, 16, [\"displayName\", \"isNoUser\", \"size\"]),\n createElementVNode(\"div\", _hoisted_2, [\n createVNode(_component_NcHighlight, {\n class: \"option__lineone\",\n text: $props.name,\n search: $options.searchParts[0]\n }, null, 8, [\"text\", \"search\"]),\n $options.isValidSubname && $options.isSizeBigEnough ? (openBlock(), createBlock(_component_NcHighlight, {\n key: 0,\n class: \"option__linetwo\",\n text: $props.subname,\n search: $options.searchParts[1]\n }, null, 8, [\"text\", \"search\"])) : _ctx.hasStatus ? (openBlock(), createElementBlock(\"span\", _hoisted_3, [\n createElementVNode(\"span\", null, toDisplayString(_ctx.userStatus.icon), 1),\n createElementVNode(\"span\", null, toDisplayString(_ctx.userStatus.message), 1)\n ])) : createCommentVNode(\"\", true)\n ]),\n renderSlot(_ctx.$slots, \"default\", {}, () => [\n $options.hasIconSvg ? (openBlock(), createBlock(_component_NcIconSvgWrapper, {\n key: 0,\n class: \"option__icon\",\n svg: $props.iconSvg,\n name: $props.iconName\n }, null, 8, [\"svg\", \"name\"])) : $options.hasIcon ? (openBlock(), createElementBlock(\"span\", {\n key: 1,\n class: normalizeClass([\"icon option__icon\", $props.icon]),\n \"aria-label\": $props.iconName\n }, null, 10, _hoisted_4)) : createCommentVNode(\"\", true)\n ], true)\n ], 14, _hoisted_1);\n}\nconst NcListItemIcon = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-0ee94269\"]]);\nexport {\n NcListItemIcon as N\n};\n//# sourceMappingURL=NcListItemIcon-D_f5AGrh.mjs.map\n","import '../assets/NcProgressBar-B6wveIA1.css';\nimport { defineComponent, useCssVars, computed, openBlock, createElementBlock, normalizeClass, createElementVNode, toDisplayString, createCommentVNode } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _hoisted_1 = [\"aria-valuenow\"];\nconst _hoisted_2 = [\"height\", \"width\"];\nconst _hoisted_3 = [\"stroke-dasharray\", \"stroke-dashoffset\", \"stroke-width\", \"r\", \"cx\", \"cy\"];\nconst _hoisted_4 = [\"stroke-dasharray\", \"stroke-dashoffset\", \"stroke-width\", \"r\", \"cx\", \"cy\"];\nconst _hoisted_5 = {\n key: 1,\n class: \"progress-bar-container\"\n};\nconst _hoisted_6 = [\"value\"];\nconst _hoisted_7 = {\n key: 0,\n class: \"progress-bar__value\"\n};\nconst gridBaseline = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--default-grid-baseline\"));\nconst clickableArea = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--default-clickable-area\"));\nconst clickableAreaSmall = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--clickable-area-small\"));\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcProgressBar\",\n props: {\n value: { default: 0 },\n size: { default: \"small\" },\n error: { type: Boolean },\n type: { default: \"linear\" },\n color: { default: \"var(--color-primary-element)\" },\n showValue: { type: Boolean, default: false }\n },\n setup(__props) {\n useCssVars((_ctx) => ({\n \"v3a86fec2\": _ctx.color,\n \"v57442460\": heightPx.value\n }));\n const props = __props;\n const normalizedProgress = computed(() => Math.max(0, Math.min(100, props.value)) / 100);\n const height = computed(() => {\n if (typeof props.size === \"number\") {\n return Math.round(props.size);\n }\n if (props.type === \"circular\") {\n if (props.size === \"medium\") {\n return clickableArea;\n } else {\n return clickableAreaSmall;\n }\n }\n if (props.size === \"medium\") {\n return 1.5 * gridBaseline;\n }\n return gridBaseline;\n });\n const heightPx = computed(() => `${height.value}px`);\n const strokeWidth = computed(() => Math.max(gridBaseline, height.value / clickableArea * gridBaseline));\n const circleCenterPosition = computed(() => height.value / 2);\n const circleRadius = computed(() => height.value / 2 - strokeWidth.value);\n const circumference = computed(() => circleRadius.value * 2 * Math.PI);\n return (_ctx, _cache) => {\n return __props.type === \"circular\" ? (openBlock(), createElementBlock(\"span\", {\n key: 0,\n role: \"progressbar\",\n \"aria-valuenow\": __props.value,\n class: normalizeClass([{ \"progress-bar--error\": __props.error }, \"progress-bar progress-bar--circular\"])\n }, [\n (openBlock(), createElementBlock(\"svg\", {\n height: height.value,\n width: height.value\n }, [\n createElementVNode(\"circle\", {\n stroke: \"currentColor\",\n fill: \"transparent\",\n \"stroke-dasharray\": `${normalizedProgress.value * circumference.value} ${(1 - normalizedProgress.value) * circumference.value}`,\n \"stroke-dashoffset\": 0.25 * circumference.value,\n \"stroke-width\": strokeWidth.value,\n r: circleRadius.value,\n cx: circleCenterPosition.value,\n cy: circleCenterPosition.value\n }, null, 8, _hoisted_3),\n createElementVNode(\"circle\", {\n stroke: \"var(--color-background-darker)\",\n fill: \"transparent\",\n \"stroke-dasharray\": `${(1 - normalizedProgress.value) * circumference.value} ${normalizedProgress.value * circumference.value}`,\n \"stroke-dashoffset\": (0.25 - normalizedProgress.value) * circumference.value,\n \"stroke-width\": strokeWidth.value,\n r: circleRadius.value,\n cx: circleCenterPosition.value,\n cy: circleCenterPosition.value\n }, null, 8, _hoisted_4)\n ], 8, _hoisted_2))\n ], 10, _hoisted_1)) : (openBlock(), createElementBlock(\"div\", _hoisted_5, [\n createElementVNode(\"progress\", {\n class: normalizeClass([\"progress-bar progress-bar--linear vue\", { \"progress-bar--error\": __props.error }]),\n value: __props.value,\n max: \"100\"\n }, null, 10, _hoisted_6),\n __props.showValue ? (openBlock(), createElementBlock(\"span\", _hoisted_7, toDisplayString(__props.value) + \"%\", 1)) : createCommentVNode(\"\", true)\n ]));\n };\n }\n});\nconst NcProgressBar = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-353fa414\"]]);\nexport {\n NcProgressBar as N\n};\n//# sourceMappingURL=NcProgressBar-C-ane-Ni.mjs.map\n","import '../assets/NcRelatedResourcesPanel-CiG_Ixb6.css';\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nimport { r as register, S as t38, a as t, T as t42, U as t9 } from \"./_l10n-CG4CuN3H.mjs\";\nimport { N as NcButton } from \"./NcButton-QbPBynlU.mjs\";\nimport { g as getRoute } from \"./autolink-BT8u-IL-.mjs\";\nimport { resolveComponent, openBlock, createElementBlock, createVNode, withCtx, createTextVNode, toDisplayString, createElementVNode, mergeProps, createCommentVNode, Fragment, renderList, createBlock } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { getCapabilities } from \"@nextcloud/capabilities\";\nimport { C as ChevronDown } from \"./ChevronDown-C6gc637b.mjs\";\nimport { C as ChevronUp } from \"./ChevronUp-ChH8oB7p.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nregister(t38);\nconst _sfc_main$4 = {\n name: \"NcResource\",\n components: {\n NcButton\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n icon: {\n type: String,\n required: true\n },\n name: {\n type: String,\n required: true\n },\n url: {\n type: String,\n required: true\n }\n },\n data() {\n return {\n labelTranslated: t('Open link to \"{resourceName}\"', { resourceName: this.name })\n };\n },\n computed: {\n route() {\n return getRoute(this.$router, this.url);\n }\n },\n methods: {\n t\n }\n};\nconst _hoisted_1$4 = { class: \"resource\" };\nconst _hoisted_2$4 = { class: \"resource__icon\" };\nconst _hoisted_3$3 = [\"src\"];\nfunction _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcButton = resolveComponent(\"NcButton\");\n return openBlock(), createElementBlock(\"li\", _hoisted_1$4, [\n createVNode(_component_NcButton, {\n class: \"resource__button\",\n \"aria-label\": $data.labelTranslated,\n to: $options.route,\n href: $options.route ? null : $props.url,\n variant: \"tertiary\"\n }, {\n icon: withCtx(() => [\n createElementVNode(\"div\", _hoisted_2$4, [\n createElementVNode(\"img\", { src: $props.icon }, null, 8, _hoisted_3$3)\n ])\n ]),\n default: withCtx(() => [\n createTextVNode(\" \" + toDisplayString($props.name), 1)\n ]),\n _: 1\n }, 8, [\"aria-label\", \"to\", \"href\"])\n ]);\n}\nconst NcResource = /* @__PURE__ */ _export_sfc(_sfc_main$4, [[\"render\", _sfc_render$4], [\"__scopeId\", \"data-v-77577e58\"]]);\nconst _sfc_main$3 = {\n name: \"AccountGroupIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$3 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$3 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$2 = { d: \"M12,5.5A3.5,3.5 0 0,1 15.5,9A3.5,3.5 0 0,1 12,12.5A3.5,3.5 0 0,1 8.5,9A3.5,3.5 0 0,1 12,5.5M5,8C5.56,8 6.08,8.15 6.53,8.42C6.38,9.85 6.8,11.27 7.66,12.38C7.16,13.34 6.16,14 5,14A3,3 0 0,1 2,11A3,3 0 0,1 5,8M19,8A3,3 0 0,1 22,11A3,3 0 0,1 19,14C17.84,14 16.84,13.34 16.34,12.38C17.2,11.27 17.62,9.85 17.47,8.42C17.92,8.15 18.44,8 19,8M5.5,18.25C5.5,16.18 8.41,14.5 12,14.5C15.59,14.5 18.5,16.18 18.5,18.25V20H5.5V18.25M0,20V18.5C0,17.11 1.89,15.94 4.45,15.6C3.86,16.28 3.5,17.22 3.5,18.25V20H0M24,20H20.5V18.25C20.5,17.22 20.14,16.28 19.55,15.6C22.11,15.94 24,17.11 24,18.5V20Z\" };\nconst _hoisted_4$2 = { key: 0 };\nfunction _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon account-group-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$2, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$2, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$3))\n ], 16, _hoisted_1$3);\n}\nconst AccountGroup = /* @__PURE__ */ _export_sfc(_sfc_main$3, [[\"render\", _sfc_render$3]]);\nconst _sfc_main$2 = {\n name: \"OpenInNewIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nconst _hoisted_1$2 = [\"aria-hidden\", \"aria-label\"];\nconst _hoisted_2$2 = [\"fill\", \"width\", \"height\"];\nconst _hoisted_3$1 = { d: \"M14,3V5H17.59L7.76,14.83L9.17,16.24L19,6.41V10H21V3M19,19H5V5H12V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V12H19V19Z\" };\nconst _hoisted_4$1 = { key: 0 };\nfunction _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"span\", mergeProps(_ctx.$attrs, {\n \"aria-hidden\": $props.title ? null : \"true\",\n \"aria-label\": $props.title,\n class: \"material-design-icon open-in-new-icon\",\n role: \"img\",\n onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit(\"click\", $event))\n }), [\n (openBlock(), createElementBlock(\"svg\", {\n fill: $props.fillColor,\n class: \"material-design-icon__svg\",\n width: $props.size,\n height: $props.size,\n viewBox: \"0 0 24 24\"\n }, [\n createElementVNode(\"path\", _hoisted_3$1, [\n $props.title ? (openBlock(), createElementBlock(\"title\", _hoisted_4$1, toDisplayString($props.title), 1)) : createCommentVNode(\"\", true)\n ])\n ], 8, _hoisted_2$2))\n ], 16, _hoisted_1$2);\n}\nconst OpenInNew = /* @__PURE__ */ _export_sfc(_sfc_main$2, [[\"render\", _sfc_render$2]]);\nregister(t42);\nconst teamResourceProviders = getCapabilities()?.circles?.teamResourceProviders ?? [];\nconst _sfc_main$1 = {\n name: \"NcTeamResources\",\n components: {\n AccountGroup,\n ChevronDown,\n ChevronUp,\n OpenInNew,\n NcButton,\n NcIconSvgWrapper\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n providerId: {\n type: String,\n default: null\n },\n itemId: {\n type: [String, Number],\n default: null\n }\n },\n data() {\n return {\n appEnabled: OC?.appswebroots?.circles !== void 0 && (OC.config.version.split(\".\")[0] ?? 0) >= 29,\n loading: false,\n teamResources: null,\n teamOpen: []\n };\n },\n computed: {\n isVisible() {\n return !this.loading && this.teamResources?.length > 0;\n },\n teamProviders() {\n return (teamId) => {\n const team = this.teamResources.find((t2) => t2.teamId === teamId);\n return team.resources?.reduce((acc, resource) => {\n if (resource.provider.id === this.providerId && resource.id === String(this.itemId)) {\n return acc;\n }\n if (!acc[resource.provider.id]) {\n acc[resource.provider.id] = resource.provider;\n acc[resource.provider.id].resources = [];\n }\n if (resource.provider.id === this.providerId && resource.id === String(this.itemId)) {\n return acc;\n }\n acc[resource.provider.id].resources.push(resource);\n return acc;\n }, {});\n };\n },\n open() {\n return (teamId) => {\n return this.teamOpen.indexOf(teamId) !== -1;\n };\n }\n },\n watch: {\n providerId() {\n this.fetchTeamResources();\n },\n itemId() {\n this.fetchTeamResources();\n }\n },\n created() {\n this.fetchTeamResources();\n },\n methods: {\n t,\n async fetchTeamResources() {\n if (!teamResourceProviders.includes(this.providerId)) {\n return;\n }\n try {\n this.loading = true;\n const response = await axios.get(generateOcsUrl(`/teams/resources/${this.providerId}/${this.itemId}`));\n this.teamResources = response.data.ocs.data.teams;\n this.teamOpen = [this.teamResources[0]?.teamId];\n } catch (error) {\n this.teamResources = null;\n logger.error(\"[NcTeamResources] Failed to fetch resources\", { error });\n } finally {\n this.loading = false;\n }\n },\n toggleOpen(teamId, open) {\n if (open) {\n this.teamOpen.push(teamId);\n } else {\n this.teamOpen.splice(this.teamOpen.indexOf(teamId), 1);\n }\n }\n }\n};\nconst _hoisted_1$1 = {\n key: 0,\n class: \"team-resources\"\n};\nconst _hoisted_2$1 = { class: \"team-resources__header\" };\nconst _hoisted_3 = [\"open\", \"onToggle\"];\nconst _hoisted_4 = { class: \"related-team__header\" };\nconst _hoisted_5 = { class: \"related-team__name\" };\nconst _hoisted_6 = { key: 0 };\nconst _hoisted_7 = [\"href\"];\nconst _hoisted_8 = {\n key: 0,\n class: \"resource__icon\"\n};\nconst _hoisted_9 = {\n key: 2,\n class: \"resource__icon\"\n};\nconst _hoisted_10 = [\"src\"];\nconst _hoisted_11 = { class: \"resource__name\" };\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_AccountGroup = resolveComponent(\"AccountGroup\");\n const _component_OpenInNew = resolveComponent(\"OpenInNew\");\n const _component_NcButton = resolveComponent(\"NcButton\");\n const _component_ChevronUp = resolveComponent(\"ChevronUp\");\n const _component_ChevronDown = resolveComponent(\"ChevronDown\");\n const _component_NcIconSvgWrapper = resolveComponent(\"NcIconSvgWrapper\");\n return $data.appEnabled && $options.isVisible ? (openBlock(), createElementBlock(\"div\", _hoisted_1$1, [\n createElementVNode(\"h5\", _hoisted_2$1, toDisplayString($options.t(\"Related team resources\")), 1),\n (openBlock(true), createElementBlock(Fragment, null, renderList($data.teamResources, (team) => {\n return openBlock(), createElementBlock(\"details\", {\n key: team.teamId,\n name: \"Team resources\",\n class: \"related-team\",\n open: $options.open(team.teamId),\n onToggle: (event) => $options.toggleOpen(team.teamId, event.target.open)\n }, [\n createElementVNode(\"summary\", _hoisted_4, [\n createElementVNode(\"h5\", _hoisted_5, [\n createVNode(_component_AccountGroup, { size: 20 }),\n createTextVNode(\" \" + toDisplayString(team.displayName), 1)\n ]),\n createVNode(_component_NcButton, {\n \"aria-label\": $options.t(\"View team\"),\n href: team.link,\n title: $options.t(\"View team\"),\n variant: \"tertiary\"\n }, {\n icon: withCtx(() => [\n createVNode(_component_OpenInNew, { size: 20 })\n ]),\n _: 1\n }, 8, [\"aria-label\", \"href\", \"title\"]),\n $options.open(team.teamId) ? (openBlock(), createBlock(_component_ChevronUp, {\n key: 0,\n size: 20\n })) : (openBlock(), createBlock(_component_ChevronDown, {\n key: 1,\n size: 20\n }))\n ]),\n createElementVNode(\"div\", null, [\n (openBlock(true), createElementBlock(Fragment, null, renderList($options.teamProviders(team.teamId), (provider) => {\n return openBlock(), createElementBlock(\"div\", {\n key: provider.id,\n class: \"related-team-provider\"\n }, [\n provider.resources.length > 0 ? (openBlock(), createElementBlock(\"h6\", _hoisted_6, toDisplayString(provider.name), 1)) : createCommentVNode(\"\", true),\n createElementVNode(\"ul\", null, [\n (openBlock(true), createElementBlock(Fragment, null, renderList(provider.resources, (resource) => {\n return openBlock(), createElementBlock(\"li\", {\n key: resource.url,\n class: \"related-team-resource\"\n }, [\n createElementVNode(\"a\", {\n href: resource.url,\n class: \"related-team-resource__link\"\n }, [\n resource.iconEmoji ? (openBlock(), createElementBlock(\"span\", _hoisted_8, toDisplayString(resource.iconEmoji), 1)) : resource.iconSvg ? (openBlock(), createBlock(_component_NcIconSvgWrapper, {\n key: 1,\n class: \"resource__icon\",\n svg: resource.iconSvg,\n size: 20\n }, null, 8, [\"svg\"])) : resource.iconURL ? (openBlock(), createElementBlock(\"span\", _hoisted_9, [\n createElementVNode(\"img\", {\n src: resource.iconURL,\n alt: \"\"\n }, null, 8, _hoisted_10)\n ])) : createCommentVNode(\"\", true),\n createElementVNode(\"span\", _hoisted_11, toDisplayString(resource.label), 1)\n ], 8, _hoisted_7)\n ]);\n }), 128))\n ])\n ]);\n }), 128))\n ])\n ], 40, _hoisted_3);\n }), 128))\n ])) : createCommentVNode(\"\", true);\n}\nconst NcTeamResources = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1], [\"__scopeId\", \"data-v-10ef45ac\"]]);\nregister(t9);\nconst _sfc_main = {\n name: \"NcRelatedResourcesPanel\",\n components: {\n NcResource,\n NcTeamResources\n },\n /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n props: {\n /**\n * The provider id implemented with `\\OCA\\RelatedResources\\IRelatedResourceProvider::getProviderId()`\n */\n providerId: {\n type: String,\n default: null\n },\n /**\n * The item id which uniquely identities the e.g. Calendar event, Deck board, file, Talk room, etc.\n */\n itemId: {\n type: [String, Number],\n default: null\n },\n /**\n * Limits to specific resource type. i.e. any provider id implemented with `\\OCA\\RelatedResources\\IRelatedResourceProvider::getProviderId()`\n */\n resourceType: {\n type: String,\n default: \"\"\n },\n /**\n * Set the maximum number of resources to load\n */\n limit: {\n type: Number,\n default: 0\n },\n /**\n * Only used by the files sidebar\n *\n * File info is passed when registered with `OCA.Sharing.ShareTabSections.registerSection()`\n */\n fileInfo: {\n type: Object,\n default: null\n },\n /**\n * Make the header name dynamic\n */\n header: {\n type: String,\n default: t(\"Related resources\")\n },\n description: {\n type: String,\n default: t(\"Anything shared with the same group of people will show up here\")\n },\n /**\n * If this element is used on a primary element set to true for primary styling.\n */\n primary: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n \"hasError\",\n \"hasResources\"\n ],\n data() {\n return {\n appEnabled: OC?.appswebroots?.related_resources !== void 0,\n loading: false,\n error: null,\n resources: []\n };\n },\n computed: {\n isVisible() {\n if (this.loading) {\n return false;\n }\n return this.error ?? this.resources.length > 0;\n },\n subline() {\n if (this.error) {\n return t(\"Error getting related resources. Please contact your system administrator if you have any questions.\");\n }\n return this.description;\n },\n hasResourceInfo() {\n if (this.providerId !== null && this.itemId !== null) {\n return true;\n }\n if (this.fileInfo !== null) {\n return true;\n }\n return false;\n },\n isFiles() {\n return this.fileInfo?.id !== void 0;\n },\n url() {\n let providerId;\n let itemId;\n if (this.isFiles) {\n providerId = \"files\";\n itemId = this.fileInfo.id;\n } else {\n providerId = this.providerId;\n itemId = this.itemId;\n }\n return generateOcsUrl(\"/apps/related_resources/related/{providerId}?itemId={itemId}&resourceType={resourceType}&limit={limit}&format=json\", {\n providerId,\n itemId,\n resourceType: this.resourceType,\n limit: this.limit\n });\n }\n },\n watch: {\n providerId() {\n this.fetchRelatedResources();\n },\n itemId() {\n this.fetchRelatedResources();\n },\n fileInfo() {\n this.fetchRelatedResources();\n },\n error(error) {\n this.$emit(\"hasError\", Boolean(error));\n },\n resources(resources) {\n this.$emit(\"hasResources\", resources.length > 0);\n }\n },\n created() {\n this.fetchRelatedResources();\n },\n methods: {\n t,\n async fetchRelatedResources() {\n if (!this.appEnabled || !this.hasResourceInfo) {\n return;\n }\n this.loading = true;\n this.error = null;\n this.resources = [];\n try {\n const response = await axios.get(this.url);\n this.resources = response.data.ocs?.data;\n } catch (error) {\n this.error = error;\n logger.error(\"[NcRelatedResourcesPanel] Failed to fetch resources\", { error });\n } finally {\n this.loading = false;\n }\n }\n }\n};\nconst _hoisted_1 = {\n key: 0,\n class: \"related-resources\"\n};\nconst _hoisted_2 = { class: \"related-resources__header\" };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcTeamResources = resolveComponent(\"NcTeamResources\");\n const _component_NcResource = resolveComponent(\"NcResource\");\n return openBlock(), createElementBlock(\"div\", null, [\n createVNode(_component_NcTeamResources, {\n providerId: $props.providerId,\n itemId: $props.itemId\n }, null, 8, [\"providerId\", \"itemId\"]),\n $data.appEnabled && $options.isVisible ? (openBlock(), createElementBlock(\"div\", _hoisted_1, [\n createElementVNode(\"div\", _hoisted_2, [\n createElementVNode(\"h5\", null, toDisplayString($props.header), 1),\n createElementVNode(\"p\", null, toDisplayString($options.subline), 1)\n ]),\n (openBlock(true), createElementBlock(Fragment, null, renderList($data.resources, (resource) => {\n return openBlock(), createBlock(_component_NcResource, {\n key: resource.itemId,\n class: \"related-resources__entry\",\n icon: resource.icon,\n name: resource.title,\n url: resource.url\n }, null, 8, [\"icon\", \"name\", \"url\"]);\n }), 128))\n ])) : createCommentVNode(\"\", true)\n ]);\n}\nconst NcRelatedResourcesPanel = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-78029c82\"]]);\nexport {\n NcRelatedResourcesPanel as N\n};\n//# sourceMappingURL=NcRelatedResourcesPanel-C0j0Fs4r.mjs.map\n","import '../assets/NcSelectUsers-YF5729PJ.css';\nimport { defineComponent, useModel, ref, watch, openBlock, createBlock, unref, mergeProps, withCtx, createVNode, mergeModels } from \"vue\";\nimport { N as NcListItemIcon } from \"./NcListItemIcon-D_f5AGrh.mjs\";\nimport { N as NcSelect } from \"./NcSelect-BOFzoCwK.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcSelectUsers\",\n props: /* @__PURE__ */ mergeModels({\n ariaLabelClearSelected: {},\n ariaLabelListbox: {},\n ariaLabelDeselectOption: { type: Function },\n disabled: { type: Boolean },\n inputId: {},\n inputLabel: {},\n labelOutside: { type: Boolean },\n keepOpen: { type: Boolean },\n loading: { type: Boolean },\n multiple: { type: Boolean },\n noWrap: { type: Boolean },\n options: {},\n placeholder: {},\n required: { type: Boolean }\n }, {\n \"modelValue\": {},\n \"modelModifiers\": {}\n }),\n emits: /* @__PURE__ */ mergeModels([\"search\"], [\"update:modelValue\"]),\n setup(__props, { emit: __emit }) {\n const modelValue = useModel(__props, \"modelValue\");\n const emit = __emit;\n const search = ref(\"\");\n watch(search, () => emit(\"search\", search.value));\n const clickableArea = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--default-clickable-area\"));\n const gridBaseLine = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue(\"--default-grid-baseline\"));\n const avatarSize = clickableArea - 2 * gridBaseLine;\n function filterBy(option, label, search2) {\n const EMAIL_NOTATION = /[^<]*<([^>]+)/;\n const match = search2.match(EMAIL_NOTATION);\n const subname = option.subname?.toLocaleLowerCase() ?? \"\";\n return match && subname.indexOf(match[1].toLocaleLowerCase()) > -1 || `${label} ${option.subname}`.toLocaleLowerCase().indexOf(search2.toLocaleLowerCase()) > -1;\n }\n return (_ctx, _cache) => {\n return openBlock(), createBlock(unref(NcSelect), mergeProps({\n modelValue: modelValue.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),\n class: \"nc-select-users\"\n }, _ctx.$props, {\n filterBy,\n label: \"displayName\",\n onSearch: _cache[1] || (_cache[1] = ($event) => search.value = $event)\n }), {\n option: withCtx((option) => [\n createVNode(unref(NcListItemIcon), mergeProps(option, {\n avatarSize: 32,\n name: option.displayName,\n search: search.value\n }), null, 16, [\"name\", \"search\"])\n ]),\n \"selected-option\": withCtx((selectedOption) => [\n createVNode(unref(NcListItemIcon), mergeProps(selectedOption, {\n avatarSize,\n name: selectedOption.displayName,\n noMargin: \"\",\n search: search.value\n }), null, 16, [\"name\", \"search\"])\n ]),\n _: 1\n }, 16, [\"modelValue\"]);\n };\n }\n});\nconst NcSelectUsers = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-e8e18fd3\"]]);\nexport {\n NcSelectUsers as N\n};\n//# sourceMappingURL=NcSelectUsers-CI8twLn9.mjs.map\n","import '../assets/NcSettingsSelectGroup-D_fSrafm.css';\nimport axios from \"@nextcloud/axios\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nimport debounce from \"debounce\";\nimport { N as NcSelect } from \"./NcSelect-BOFzoCwK.mjs\";\nimport { r as register, i as t50, a as t } from \"./_l10n-CG4CuN3H.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { resolveComponent, openBlock, createElementBlock, toDisplayString, createCommentVNode, createVNode, withDirectives, createElementVNode, vShow } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nregister(t50);\nconst _sfc_main = {\n name: \"NcSettingsSelectGroup\",\n components: {\n NcSelect\n },\n props: {\n /**\n * The text of the label element of the select group input\n */\n label: {\n type: String,\n required: true\n },\n /**\n * Placeholder for the input element\n * For backwards compatibility it falls back to the `label` value\n */\n placeholder: {\n type: String,\n default: \"\"\n },\n /**\n * id attribute of the select group element\n */\n id: {\n type: String,\n default: () => \"action-\" + createElementId(),\n validator: (id) => id.trim() !== \"\"\n },\n /**\n * value of the select group input\n * A list of group IDs can be provided\n */\n modelValue: {\n type: Array,\n default: () => []\n },\n /**\n * disabled state of the settings select group input\n */\n disabled: {\n type: Boolean,\n default: false\n }\n },\n emits: [\n \"error\",\n \"input\",\n \"update:modelValue\"\n ],\n data() {\n return {\n /** Temporary store to cache groups */\n groups: {},\n randId: createElementId(),\n errorMessage: \"\"\n };\n },\n computed: {\n /**\n * If the error message should be shown\n */\n hasError() {\n return this.errorMessage !== \"\";\n },\n /**\n * Validate input value and only return valid strings (group IDs)\n *\n * @return {string[]}\n */\n filteredValue() {\n return this.modelValue.filter((group) => group !== \"\" && typeof group === \"string\");\n },\n /**\n * value property converted to an array of group objects used as input for the NcSelect\n */\n inputValue() {\n return this.filteredValue.map((id) => {\n if (typeof this.groups[id] === \"undefined\") {\n return {\n id,\n displayname: id\n };\n }\n return this.groups[id];\n });\n },\n /**\n * Convert groups object to array of groups required for NcSelect.options\n * Filter out currently selected values\n *\n * @return {object[]}\n */\n groupsArray() {\n return Object.values(this.groups).filter((g) => !this.modelValue.includes(g.id));\n }\n },\n watch: {\n /**\n * If the value is changed, check that all groups are loaded so we show the correct display name\n */\n modelValue: {\n handler() {\n const loadedGroupIds = Object.keys(this.groups);\n const missing = this.filteredValue.filter((group) => !loadedGroupIds.includes(group));\n missing.forEach((groupId) => {\n this.loadGroup(groupId);\n });\n },\n // Run the watch handler also when the component is initially mounted\n immediate: true\n }\n },\n /**\n * Load groups matching the empty query to reduce API calls\n */\n async mounted() {\n const storageName = `${appName}:${appVersion}/initialGroups`;\n let savedGroups = window.sessionStorage.getItem(storageName);\n if (savedGroups) {\n savedGroups = Object.fromEntries(JSON.parse(savedGroups).map((group) => [group.id, group]));\n this.groups = { ...this.groups, ...savedGroups };\n } else {\n await this.loadGroup(\"\");\n window.sessionStorage.setItem(storageName, JSON.stringify(Object.values(this.groups)));\n }\n },\n methods: {\n t,\n /**\n * Called when a new group is selected or previous group is deselected to emit the update event\n *\n * @param {object[]} updatedValue Array of selected groups\n */\n update(updatedValue) {\n const value = updatedValue.map((element) => element.id);\n this.$emit(\"update:modelValue\", value);\n },\n /**\n * Use provisioning API to search for given group and save it in the groups object\n *\n * @param {string} query The query like parts of the id oder display name\n * @return {boolean}\n */\n async loadGroup(query) {\n try {\n query = typeof query === \"string\" ? encodeURI(query) : \"\";\n const response = await axios.get(generateOcsUrl(`cloud/groups/details?search=${query}&limit=10`, 2));\n if (this.errorMessage !== \"\") {\n window.setTimeout(() => {\n this.errorMessage = \"\";\n }, 5e3);\n }\n if (Object.keys(response.data.ocs.data.groups).length > 0) {\n const newGroups = Object.fromEntries(response.data.ocs.data.groups.map((element) => [element.id, element]));\n this.groups = { ...this.groups, ...newGroups };\n return true;\n }\n } catch (error) {\n this.$emit(\"error\", error);\n this.errorMessage = t(\"Unable to search the group\");\n }\n return false;\n },\n /**\n * Custom filter function for `NcSelect` to filter by ID *and* display name\n *\n * @param {object} option One of the groups\n * @param {string} label The label property of the group\n * @param {string} search The current search string\n */\n filterGroups(option, label, search) {\n return `${label || \"\"} ${option.id}`.toLocaleLowerCase().indexOf(search.toLocaleLowerCase()) > -1;\n },\n /**\n * Debounce the group search (reduce API calls)\n */\n onSearch: debounce(function(query) {\n this.loadGroup(query);\n }, 200)\n }\n};\nconst _hoisted_1 = [\"for\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_NcSelect = resolveComponent(\"NcSelect\");\n return openBlock(), createElementBlock(\"div\", null, [\n $props.label ? (openBlock(), createElementBlock(\"label\", {\n key: 0,\n for: $props.id,\n class: \"hidden-visually\"\n }, toDisplayString($props.label), 9, _hoisted_1)) : createCommentVNode(\"\", true),\n createVNode(_component_NcSelect, {\n modelValue: $options.inputValue,\n options: $options.groupsArray,\n placeholder: $props.placeholder || $props.label,\n filterBy: $options.filterGroups,\n inputId: $props.id,\n limit: 5,\n label: \"displayname\",\n multiple: true,\n closeOnSelect: false,\n disabled: $props.disabled,\n \"onUpdate:modelValue\": $options.update,\n onSearch: $options.onSearch\n }, null, 8, [\"modelValue\", \"options\", \"placeholder\", \"filterBy\", \"inputId\", \"disabled\", \"onUpdate:modelValue\", \"onSearch\"]),\n withDirectives(createElementVNode(\"div\", { class: \"select-group-error\" }, toDisplayString($data.errorMessage), 513), [\n [vShow, $options.hasError]\n ])\n ]);\n}\nconst NcSettingsSelectGroup = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-f2b71592\"]]);\nexport {\n NcSettingsSelectGroup as N\n};\n//# sourceMappingURL=NcSettingsSelectGroup-TN64yH4k.mjs.map\n","import '../assets/NcTextArea-BxGe3Lqn.css';\nimport { defineComponent, useModel, useAttrs, useTemplateRef, computed, watch, openBlock, createElementBlock, normalizeClass, unref, createElementVNode, mergeProps, toDisplayString, createCommentVNode, createBlock, createTextVNode, mergeModels } from \"vue\";\nimport { d as mdiCheck, j as mdiAlertCircleOutline } from \"./mdi-CpchYUUV.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { a as isLegacy } from \"./legacy-BoqDmOCa.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _hoisted_1 = { class: \"textarea__main-wrapper\" };\nconst _hoisted_2 = [\"id\", \"aria-describedby\", \"disabled\", \"placeholder\", \"value\"];\nconst _hoisted_3 = [\"for\"];\nconst _hoisted_4 = [\"id\"];\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...{ inheritAttrs: false },\n __name: \"NcTextArea\",\n props: /* @__PURE__ */ mergeModels({\n disabled: { type: Boolean },\n error: { type: Boolean },\n helperText: { default: void 0 },\n id: { default: () => createElementId() },\n inputClass: { default: \"\" },\n label: { default: void 0 },\n labelOutside: { type: Boolean },\n placeholder: { default: void 0 },\n resize: { default: \"both\" },\n success: { type: Boolean }\n }, {\n \"modelValue\": { required: true },\n \"modelModifiers\": {}\n }),\n emits: [\"update:modelValue\"],\n setup(__props, { expose: __expose }) {\n const modelValue = useModel(__props, \"modelValue\");\n const props = __props;\n __expose({\n focus,\n select\n });\n const attrs = useAttrs();\n const textAreaElement = useTemplateRef(\"input\");\n const internalPlaceholder = computed(() => props.placeholder || (isLegacy ? props.label : void 0));\n watch(() => props.labelOutside, () => {\n if (!props.labelOutside && !props.label) {\n logger.warn(\"[NcTextArea] You need to add a label to the NcInputField component. Either use the prop label or use an external one, as per the example in the documentation.\");\n }\n });\n const ariaDescribedby = computed(() => {\n const ariaDescribedby2 = [];\n if (props.helperText) {\n ariaDescribedby2.push(`${props.id}-helper-text`);\n }\n if (typeof attrs[\"aria-describedby\"] === \"string\") {\n ariaDescribedby2.push(attrs[\"aria-describedby\"]);\n }\n return ariaDescribedby2.join(\" \") || void 0;\n });\n function handleInput(event) {\n const { value } = event.target;\n modelValue.value = value;\n }\n function focus(options) {\n textAreaElement.value.focus(options);\n }\n function select() {\n textAreaElement.value.select();\n }\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\"textarea\", [\n _ctx.$attrs.class,\n {\n \"textarea--disabled\": __props.disabled,\n \"textarea--legacy\": unref(isLegacy)\n }\n ]])\n }, [\n createElementVNode(\"div\", _hoisted_1, [\n createElementVNode(\"textarea\", mergeProps({ ..._ctx.$attrs, class: void 0 }, {\n id: __props.id,\n ref: \"input\",\n \"aria-describedby\": ariaDescribedby.value,\n \"aria-live\": \"polite\",\n class: [\"textarea__input\", [\n __props.inputClass,\n {\n \"textarea__input--label-outside\": __props.labelOutside,\n \"textarea__input--legacy\": unref(isLegacy),\n \"textarea__input--success\": __props.success,\n \"textarea__input--error\": __props.error\n }\n ]],\n disabled: __props.disabled,\n placeholder: internalPlaceholder.value,\n style: { resize: __props.resize },\n value: modelValue.value,\n onInput: handleInput\n }), null, 16, _hoisted_2),\n !__props.labelOutside ? (openBlock(), createElementBlock(\"label\", {\n key: 0,\n class: \"textarea__label\",\n for: __props.id\n }, toDisplayString(__props.label), 9, _hoisted_3)) : createCommentVNode(\"\", true)\n ]),\n __props.helperText ? (openBlock(), createElementBlock(\"p\", {\n key: 0,\n id: `${__props.id}-helper-text`,\n class: normalizeClass([\"textarea__helper-text-message\", {\n \"textarea__helper-text-message--error\": __props.error,\n \"textarea__helper-text-message--success\": __props.success\n }])\n }, [\n __props.success ? (openBlock(), createBlock(NcIconSvgWrapper, {\n key: 0,\n class: \"textarea__helper-text-message__icon\",\n path: unref(mdiCheck),\n inline: \"\"\n }, null, 8, [\"path\"])) : __props.error ? (openBlock(), createBlock(NcIconSvgWrapper, {\n key: 1,\n class: \"textarea__helper-text-message__icon\",\n path: unref(mdiAlertCircleOutline),\n inline: \"\"\n }, null, 8, [\"path\"])) : createCommentVNode(\"\", true),\n createTextVNode(\" \" + toDisplayString(__props.helperText), 1)\n ], 10, _hoisted_4)) : createCommentVNode(\"\", true)\n ], 2);\n };\n }\n});\nconst NcTextArea = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__scopeId\", \"data-v-d327fb49\"]]);\nexport {\n NcTextArea as N\n};\n//# sourceMappingURL=NcTextArea-Dxzj4zdb.mjs.map\n"],"names":["register","_sfc_main","defineComponent","NC_ACTIONS_IS_SEMANTIC_MENU","createElementId","t","_hoisted_1","_hoisted_2","_hoisted_3","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","toDisplayString","createCommentVNode","createElementVNode","renderSlot","NcActionButtonGroup","_export_sfc","NcAppNavigationList","t20","_hoisted_1$1","_sfc_main$1","__props","open","useModel","title","computed","createVNode","unref","NcButton","$event","withCtx","NcIconSvgWrapper","mdiMenuOpen","mdiMenu","NcAppNavigationToggle","props","focusTrap","setHasAppNavigation","inject","HAS_APP_NAVIGATION_KEY","warn","appNavigationContainerElement","useTemplateRef","isMobile","useIsMobile","ref","watchEffect","watch","toggleFocusTrap","onMounted","subscribe","toggleNavigationByEventBus","emit","createFocusTrap","toggleNavigation","getTrapStack","onUnmounted","unsubscribe","state","bodyStyles","animationLength","open2","handleEsc","normalizeClass","isLegacy34","withKeys","createBlock","NcAppNavigation","NcActions","_hoisted_4","mergeProps","ChevronUp","IconArrowRight","t14","IconClose","newValue","_component_IconArrowRight","resolveComponent","_component_NcButton","_component_IconClose","withModifiers","args","withDirectives","vModelText","NcInputConfirmCancel","_sfc_main$3","_hoisted_1$2","_hoisted_2$2","_hoisted_3$2","_hoisted_4$2","_sfc_render$3","Pencil","_sfc_main$2","_hoisted_2$1","_hoisted_3$1","_hoisted_4$1","_sfc_render$2","Undo","t21","ChevronDown","_sfc_render$1","_component_ChevronUp","_component_ChevronDown","NcAppNavigationIconCollapsible","t23","t51","NcActionButton","NcLoadingIcon","_sfc_main$4","id","newVal","event","navigate","routerLinkHref","href","_hoisted_5","_hoisted_6","_hoisted_7","_component_NcLoadingIcon","_component_NcInputConfirmCancel","_component_Pencil","_component_NcActionButton","_component_Undo","_component_NcActions","_component_NcAppNavigationIconCollapsible","resolveDynamicComponent","normalizeProps","guardReactiveProps","isActive","createTextVNode","NcAppNavigationItem","t16","t44","mergeModels","model","slots","useSlots","inputElement","inputHasFocus","useFocusWithin","transitionTimeout","actionsContainerElement","hasActions","showActions","timeoutId","hideActions","onCloseSearch","nextTick","NcInputField","NcAppNavigationSearch","t47","t48","t31","directive","el","encodedTlds","encodedUtlds","numeric","ascii","alpha","asciinumeric","alphanumeric","domain","emoji","scheme","slashscheme","whitespace","registerGroup","name","groups","addToGroups","flags","k","group","flagsForToken","result","c","State","token","input","nextState","i","regex","exactOnly","inputs","next","regexp","len","templateState","allFlags","ta","tr","ts","tt","WORD","UWORD","ASCIINUMERICAL","ALPHANUMERICAL","LOCALHOST","TLD","UTLD","SCHEME","SLASH_SCHEME","NUM","WS","NL","OPENBRACE","CLOSEBRACE","OPENBRACKET","CLOSEBRACKET","OPENPAREN","CLOSEPAREN","OPENANGLEBRACKET","CLOSEANGLEBRACKET","FULLWIDTHLEFTPAREN","FULLWIDTHRIGHTPAREN","LEFTCORNERBRACKET","RIGHTCORNERBRACKET","LEFTWHITECORNERBRACKET","RIGHTWHITECORNERBRACKET","FULLWIDTHLESSTHAN","FULLWIDTHGREATERTHAN","AMPERSAND","APOSTROPHE","ASTERISK","AT","BACKSLASH","BACKTICK","CARET","COLON","COMMA","DOLLAR","DOT","EQUALS","EXCLAMATION","HYPHEN","PERCENT","PIPE","PLUS","POUND","QUERY","QUOTE","FULLWIDTHMIDDLEDOT","SEMI","SLASH","TILDE","UNDERSCORE","EMOJI$1","SYM","tk","ASCII_LETTER","LETTER","EMOJI","DIGIT","SPACE","CR","LF","EMOJI_VARIATION","EMOJI_JOINER","OBJECT_REPLACEMENT","tlds","utlds","init$2","customSchemes","Start","decodeTlds","Num","Asciinumeric","Alphanumeric","Word","UWord","Nl","Cr","Ws","Emoji","EmojiJoiner","wordjr","uwordjr","fastts","a","b","sch","run$1","start","str","iterable","stringToArray","charCount","tokens","cursor","charCursor","tokenLength","latestAccepting","sinceAccepts","charsSinceAccepts","index","first","second","char","defaultt","jr","encoded","words","stack","digits","popDigitCount","popCount","defaults","noop","Options","opts","defaultRender","o","ignoredTags","uppercaseIgnoredTags","ir","key","operator","isCallable","option","obj","val","MultiToken","value","options","truncate","formatted","protocol","formattedHref","tagName","content","attributes","className","target","rel","attrs","eventListeners","createTokenClass","type","Token","p","Email","Text","Url","makeState","arg","init$1","qsAccepting","qsNonAccepting","localpartAccepting","Localpart","Domain","Scheme","SlashScheme","LocalpartAt","LocalpartDot","EmailDomain","EmailDomainDot","Email$1","EmailDomainHyphen","DomainHyphen","DomainDot","DomainDotTld","DomainDotTldColon","DomainDotTldColonPort","Url$1","UrlNonaccept","SchemeColon","SlashSchemeColon","SlashSchemeColonSlash","UriPrefix","bracketPairs","OPEN","CLOSE","UrlOpen","UrlOpenQ","UrlOpenSyms","run","multis","textTokens","secondState","multiLength","initMultiToken","Multi","subtokens","startIdx","endIdx","INIT","init","tokenize","linkifyString","escapeHTML","escapeAttr","attributesToString","attr","headerRef","_sfc_main$5","_hoisted_1$5","_hoisted_2$3","_hoisted_3$3","_hoisted_4$3","_sfc_render$4","IconDockRight","_hoisted_1$4","IconStar","_hoisted_1$3","IconStarOutline","selected","_sfc_main$6","sidebarTabsButton","sidebarTabsButton_legacy","sidebarTabsButton_selected","sidebarTabsButton__name","sidebarTabsButton__icon","sidebarTabsButton__legacyIcon","style0","cssModules","NcAppSidebarTabsButton","tab","active","getCanonicalLocale","tabIndex","_component_NcAppSidebarTabsButton","Fragment","renderList","NcAppSidebarTabs","t15","_sfc_main$7","NcEmptyContent","vOnClickOutside","CONTENT_SELECTOR_KEY","provide","useIsSmallMobile","isSlotPopulated","menu","menuTrigger","element","logger","activeTab","_hoisted_8","_component_IconDockRight","_component_IconStar","_component_IconStarOutline","_component_NcAppSidebarHeader","_component_NcAppSidebarTabs","_component_NcEmptyContent","_directive_focus","resolveDirective","_directive_click_outside","Transition","Teleport","normalizeStyle","vShow","NcAppSidebar","PQueue","t28","t6","t35","gtBuilder","getGettextBuilder","gt","t7","margin","defaultSize","NcAvatar","userStatus","margin2","EMAIL_NOTATION","match","_component_NcAvatar","_component_NcHighlight","_component_NcIconSvgWrapper","NcListItemIcon","t38","t42","getCapabilities","t9","__emit","modelValue","search","clickableArea","gridBaseLine","avatarSize","filterBy","label","search2","subname","NcSelect","selectedOption","NcSelectUsers","t50","debounce","query","__expose","focus","select","useAttrs","textAreaElement","internalPlaceholder","isLegacy","ariaDescribedby","ariaDescribedby2","handleInput","mdiCheck","mdiAlertCircleOutline","NcTextArea"],"mappings":"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","x_google_ignoreList":[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]} \ No newline at end of file diff --git a/dist/NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs.map.license b/dist/NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs.map.license similarity index 100% rename from dist/NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs.map.license rename to dist/NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs.map.license diff --git a/dist/appstore-main.css b/dist/appstore-main.css index 48dde504a853a..1eacd239b5c68 100644 --- a/dist/appstore-main.css +++ b/dist/appstore-main.css @@ -17,7 +17,7 @@ @import './common-NcEmptyContent-CGAPqk4S-Don1d5Bd.chunk.css'; @import './common-NcPasswordField-Be5_qcfm-Crp_EMfV.chunk.css'; @import './common-NcBreadcrumbs-5gl8Syfa-CfbvucBX.chunk.css'; -@import './common-NcTextArea-Dxzj4zdb-DIo27L88.chunk.css'; +@import './common-NcTextArea-Dxzj4zdb-B-B2llha.chunk.css'; @import './common-NcActionSeparator-Ct2RnclR-pXJ_-D_I.chunk.css'; @import './common-NcCheckboxRadioSwitch-D8Dfv4iw-CPGkDj-p.chunk.css'; @import './common-Plus-Som-mR4B.chunk.css'; diff --git a/dist/appstore-main.mjs b/dist/appstore-main.mjs index 359cbae2f4858..0b0941b7b3e5c 100644 --- a/dist/appstore-main.mjs +++ b/dist/appstore-main.mjs @@ -1,5 +1,5 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=[window.OC.filePath('', '', 'dist/AppstoreDiscover-B-6Ywovb.chunk.mjs'),window.OC.filePath('', '', 'dist/Web-BwmPK40i.chunk.mjs'),window.OC.filePath('', '', 'dist/public-C1mLBHT3.chunk.mjs'),window.OC.filePath('', '', 'dist/mdi-Lt-19ASw.chunk.mjs'),window.OC.filePath('', '', 'dist/logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs'),window.OC.filePath('', '', 'dist/createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs'),window.OC.filePath('', '', 'dist/translation-DoG5ZELJ-CFYnqluG.chunk.mjs'),window.OC.filePath('', '', 'dist/index-B-dGqfIG.chunk.mjs'),window.OC.filePath('', '', 'dist/common-createElementId-DhjFt1I9-C_oBIsvc.chunk.css'),window.OC.filePath('', '', 'dist/common-logger-D3RVzcfQ-BE3lcFW4.chunk.css'),window.OC.filePath('', '', 'dist/common-mdi-BWNFKLbC.chunk.css'),window.OC.filePath('', '', 'dist/index-DL1yHC1K-DnBG6QLJ.chunk.mjs'),window.OC.filePath('', '', 'dist/index-BW4M2n71.chunk.mjs'),window.OC.filePath('', '', 'dist/NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcModal-DUWLRm_F-BsKc2RT9.chunk.css'),window.OC.filePath('', '', 'dist/TrashCanOutline-Cv7t-yKN.chunk.mjs'),window.OC.filePath('', '', 'dist/common-TrashCanOutline-BYHcrfvW.chunk.css'),window.OC.filePath('', '', 'dist/common-index-DYA_tnKg.chunk.css'),window.OC.filePath('', '', 'dist/NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcEmptyContent-CGAPqk4S-Don1d5Bd.chunk.css'),window.OC.filePath('', '', 'dist/index-BLNGy7h5.chunk.mjs'),window.OC.filePath('', '', 'dist/util-Alk1iwuj.chunk.mjs'),window.OC.filePath('', '', 'dist/pinia-CLibr4cC.chunk.mjs'),window.OC.filePath('', '', 'dist/NcContent-BhMoPROW-DisoN_bw.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcContent-BhMoPROW-CuEPejA5.chunk.css'),window.OC.filePath('', '', 'dist/PencilOutline-CJ2aSuY5.chunk.mjs'),window.OC.filePath('', '', 'dist/common-PencilOutline-B3DMd8SU.chunk.css'),window.OC.filePath('', '', 'dist/NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs'),window.OC.filePath('', '', 'dist/index-BOH7nBEM.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index-980JFXIN.chunk.css'),window.OC.filePath('', '', 'dist/TrayArrowDown-BI3qCRD6.chunk.mjs'),window.OC.filePath('', '', 'dist/common-TrayArrowDown-CaC9_ffV.chunk.css'),window.OC.filePath('', '', 'dist/NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcInputField-B1bGxYHt-BYHxARP-.chunk.css'),window.OC.filePath('', '', 'dist/NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs'),window.OC.filePath('', '', 'dist/ArrowRight-DKsMJImQ.chunk.mjs'),window.OC.filePath('', '', 'dist/common-ArrowRight-vZpQWIqF.chunk.css'),window.OC.filePath('', '', 'dist/colors-BDeMBgfq-BQ_6MaUU.chunk.mjs'),window.OC.filePath('', '', 'dist/NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcUserStatusIcon-DsviB2Cr-Bq_6hmXG.chunk.css'),window.OC.filePath('', '', 'dist/NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcDateTime-b9UhLDij.chunk.css'),window.OC.filePath('', '', 'dist/common-NcAvatar-M3-CbKbq-DTVmI7NO.chunk.css'),window.OC.filePath('', '', 'dist/NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs'),window.OC.filePath('', '', 'dist/NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcPasswordField-Be5_qcfm-Crp_EMfV.chunk.css'),window.OC.filePath('', '', 'dist/NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcBreadcrumbs-5gl8Syfa-CfbvucBX.chunk.css'),window.OC.filePath('', '', 'dist/common-NcTextArea-Dxzj4zdb-DIo27L88.chunk.css'),window.OC.filePath('', '', 'dist/NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcCheckboxRadioSwitch-D8Dfv4iw-CPGkDj-p.chunk.css'),window.OC.filePath('', '', 'dist/Plus-DYmK9QaT.chunk.mjs'),window.OC.filePath('', '', 'dist/common-Plus-Som-mR4B.chunk.css'),window.OC.filePath('', '', 'dist/index-BoBLp2fu.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index-bfXBK-tQ.chunk.css'),window.OC.filePath('', '', 'dist/index-CMXcwXc6.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index--xyrXnuf.chunk.css'),window.OC.filePath('', '', 'dist/NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs'),window.OC.filePath('', '', 'dist/emoji-C8k9NUlo-rFKNlNNR.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcEmojiPicker-Bpw-68QP-ChsL0oK6.chunk.css'),window.OC.filePath('', '', 'dist/index-C_wPY1fR.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index-CpSoVYoo.chunk.css'),window.OC.filePath('', '', 'dist/index-xEyWukTf.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index-MZEZ7XGj.chunk.css'),window.OC.filePath('', '', 'dist/NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs'),window.OC.filePath('', '', 'dist/ContentCopy-BF1gBM5z.chunk.mjs'),window.OC.filePath('', '', 'dist/common-ContentCopy-D7mIRwIy.chunk.css'),window.OC.filePath('', '', 'dist/NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcUserBubble-CDQa0hGy-f2DD9EAL.chunk.css'),window.OC.filePath('', '', 'dist/index-DlyLvrtV.chunk.mjs'),window.OC.filePath('', '', 'dist/modulepreload-polyfill-BxzAKjcf.chunk.mjs'),window.OC.filePath('', '', 'dist/index-BU6wm4Hd.chunk.mjs'),window.OC.filePath('', '', 'dist/appstore-AppstoreDiscover-D5SWaP1O.chunk.css'),window.OC.filePath('', '', 'dist/common-NcActionSeparator-Ct2RnclR-pXJ_-D_I.chunk.css'),window.OC.filePath('', '', 'dist/common-NcGuestContent-j8ai4O1K-D0718NyY.chunk.css'),window.OC.filePath('', '', 'dist/AppstoreSearch-DwuHwCEU.chunk.mjs'),window.OC.filePath('', '', 'dist/common-AppstoreSearch-CAiP7JM1.chunk.css'),window.OC.filePath('', '', 'dist/AppstoreBrowse-B2pgXtc2.chunk.mjs'),window.OC.filePath('', '', 'dist/appstore-AppstoreBrowse-D_DYi-hc.chunk.css')])))=>i.map(i=>d[i]); -import{d as ke,c as Vt}from"./pinia-CLibr4cC.chunk.mjs";import{b as B,o as u,f as x,g as _,t as v,i as Wt,y as w,c as D,u as o,N as Xt,w as y,j as N,v as $,F as M,B as Z,k,l as E,aa as dt,p as ht,z as re,h as I,q as Me,a9 as fe,U as Yt,a as Jt,_ as oe,H as Kt,D as ea,r as ta,e as aa}from"./Web-BwmPK40i.chunk.mjs";import{t as c,p as na,g as sa}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import{N as ie,v as Oe,u as _e,H as la,I as ra}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import{N as ia,a as oa}from"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import{c as Ge,f as gt,g as pa,b as K}from"./index-B-dGqfIG.chunk.mjs";import{_ as q,l as ee}from"./public-C1mLBHT3.chunk.mjs";import{N as ca}from"./PencilOutline-CJ2aSuY5.chunk.mjs";import{_ as mt,N as L}from"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import{c as ua,d as J,e as da,f as ha,N as ga}from"./NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs";import{P as ft}from"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import{N as ma,a as fa,_ as ba}from"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import{M as ka,a as _a}from"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";/* empty css */import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import{N as Ie}from"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import{N as ya}from"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import{N as wa,a as va}from"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import{N as bt,s as kt}from"./index-BW4M2n71.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import{N as He}from"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import{J as xa,K as $a,L as Ta,M as Aa,O as Sa,P as Ra,Q as Da,R as za,S as Ia,T as Ca,U as La,w as Ea,V as Ba,D as Se,W as Pa,X as Na,Y as Ze,y as je,Z as _t,_ as qa,$ as yt,q as wt,a0 as Ma,a1 as Oa,a2 as Ga,a3 as vt,a4 as Ha,a5 as Za,a6 as xt,N as at,a7 as ja,a8 as Ua,a9 as Fa,aa as Qa,ab as Va,ac as Wa,ad as Xa,l as Ya,ae as Ja,af as Ka,v as en,ag as tn}from"./mdi-Lt-19ASw.chunk.mjs";import"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./index-xEyWukTf.chunk.mjs";import{c as O}from"./index-BLNGy7h5.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import"./ContentCopy-BF1gBM5z.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import{w as an,b as nn,u as sn}from"./index-DlyLvrtV.chunk.mjs";import"./modulepreload-polyfill-BxzAKjcf.chunk.mjs";import{a as be}from"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import{a as ln,P as ye,c as Ue}from"./index-BU6wm4Hd.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";const rn={class:"app-navigation-spacer"},on=B({__name:"NcAppNavigationSpacer",setup(e){return(t,n)=>(u(),x("li",rn))}}),pn=mt(on,[["__scopeId","data-v-277fa710"]]),cn={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(e){this.$el.scrollHeight-this.$el.scrollTop===this.$el.clientHeight&&this.$emit("bottomReached",e),this.$emit("scroll",e)},renderIcon(){return this.$slots.icon?.()}}},un=["id","aria-hidden","aria-label","aria-labelledby","role","tabindex"],dn={class:"hidden-visually"};function hn(e,t,n,s,a,r){return u(),x("section",{id:`tab-${n.id}`,"aria-hidden":!r.isActive,"aria-label":r.isTablistShown()?void 0:n.name,"aria-labelledby":r.isTablistShown()?`tab-button-${n.id}`:void 0,class:w(["app-sidebar__tab",{"app-sidebar__tab--active":r.isActive}]),role:r.isTablistShown()?"tabpanel":void 0,tabindex:r.isTablistShown()?0:-1,onScroll:t[0]||(t[0]=(...l)=>r.onScroll&&r.onScroll(...l))},[_("h3",dn,v(n.name),1),Wt(e.$slots,"default",{},void 0,!0)],42,un)}const Ce=mt(cn,[["render",hn],["__scopeId","data-v-dba10798"]]),W=Object.freeze({discover:c("appstore","Discover"),installed:c("appstore","Your apps"),enabled:c("appstore","Active apps"),disabled:c("appstore","Disabled apps"),updates:c("appstore","Updates"),bundles:c("appstore","App bundles"),featured:c("appstore","Featured apps"),supported:c("appstore","Supported apps"),search:c("appstore","Search results")}),X=Object.freeze({discover:Oa,installed:Ma,enabled:wt,disabled:yt,bundles:qa,supported:_t,featured:je,updates:Ze,ai:Na,auth:Pa,customization:Se,dashboard:Ba,files:Ea,games:La,integration:Ca,monitoring:Ia,multimedia:za,office:Da,organization:Ra,search:Sa,security:Aa,social:Ta,tools:$a,workflow:xa}),Ki=["post","showcase","carousel"];ln(O);const te=Ge("apps/appstore/api/v1"),se=Object.freeze({apps:`${te}/apps`,categories:`${te}/apps/categories`,enable:`${te}/apps/enable`,disable:`${te}/apps/disable`,uninstall:`${te}/apps/uninstall`,update:`${te}/apps/update`,bundleEnable:`${te}/bundles/enable`}),we=new ft({concurrency:1});async function nt(e,t=!1,n){return we.add(async()=>{await O.post(se.enable,{appId:e,groups:n,force:t||void 0},{confirmPassword:ye.Strict})})}async function gn(e){return we.add(async()=>{await O.post(se.disable,{appId:e},{confirmPassword:ye.Lax})})}async function mn(e){return we.add(async()=>{await O.post(se.update,{appId:e},{confirmPassword:ye.Strict})})}async function fn(e){return we.add(async()=>{await O.post(se.uninstall,{appId:e},{confirmPassword:ye.Strict})})}async function bn(){const{data:e}=await O.get(se.apps);return e.ocs.data}async function kn(){const{data:e}=await O.get(se.categories);for(const t of e.ocs.data)t.icon=X[t.id]??"";return e.ocs.data}async function _n(e){return we.add(async()=>{await O.post(se.bundleEnable,{bundleId:e},{confirmPassword:ye.Strict})})}async function ge(){const{data:e}=await O.get(Ge("core/navigation/apps?format=json"));e.ocs.meta.statuscode===200&&(gt("nextcloud:app-menu.refresh",{apps:e.ocs.data}),window.dispatchEvent(new Event("resize")))}function pe(e){return e.installed||e.internal?!1:e.missingDependencies===void 0||e.missingDependencies.length===0||!e.isCompatible&&e.missingDependencies.length===1}function $t(e){return e.installed&&e.removable&&!e.active}function Tt(e){return!Rt(e)&&!Dt(e)&&At(e)&&e.isCompatible}function At(e){return!e.active&&(e.installed||pe(e))}function ve(e){return!e.active&&!e.isCompatible}function St(e){return!Rt(e)&&!Dt(e)&&e.active&&!e.internal}function yn(e){return e.update!==void 0}const wn=["filesystem","prelogin","authentication","logging","prevent_group_restriction"];function Fe(e){return!e.active&&!e.installed||!e.active&&ve(e)?!1:e.types?e.types.every(t=>!wn.includes(t)):!0}function Rt(e){return e.app_api&&(e.status.action==="init"||e.status.action==="healthcheck")}function Dt(e){return e.app_api&&e.status.action==="deploy"}const U=pa().setApp("appstore").detectUser().build(),vn=B({__name:"DaemonSelectionDialogListEntry",props:{daemon:{},isDefault:{type:Boolean}},emits:["selected"],setup(e,{emit:t}){const n=e,s=t,a=$(()=>`${n.daemon.name} - ${n.daemon.display_name}`);return(r,l)=>(u(),D(o(wa),{active:e.isDefault,counterNumber:e.daemon.exAppsCount,counterType:"highlighted",details:e.isDefault?o(c)("appstore","Default"):"",forceDisplayActions:"",name:a.value,onClick:l[0]||(l[0]=Xt(p=>s("selected"),["stop"]))},{subname:y(()=>[N(v(e.daemon.accepts_deploy_id),1)]),_:1},8,["active","counterNumber","details","name"]))}}),xn=["aria-label"],$n=B({__name:"DaemonSelectionDialogList",emits:["selected"],setup(e){const t=xe();return(n,s)=>(u(),x("ul",{class:w(n.$style.DaemonSelectionDialogList),"aria-label":o(c)("appstore","Registered Deploy daemons list")},[(u(!0),x(M,null,Z(o(t).dockerDaemons,a=>(u(),D(vn,{key:a.id,daemon:a,isDefault:o(t).defaultDaemon?.name===a.name,onSelected:r=>n.$emit("selected",a)},null,8,["daemon","isDefault","onSelected"]))),128))],10,xn))}}),Tn="_DaemonSelectionDialogList_x38pt_2",An={DaemonSelectionDialogList:Tn},Sn={$style:An},Rn=q($n,[["__cssModules",Sn]]),Dn=B({__name:"DaemonSelectionDialog",props:{app:{}},emits:["close"],setup(e){const t=xe(),n=K("/settings/admin/app_api");return(s,a)=>(u(),D(o(bt),{name:o(c)("appstore","Choose Deploy Daemon for {appName}",{appName:e.app.name}),size:"normal","onUpdate:open":a[1]||(a[1]=r=>r||s.$emit("close"))},{default:y(()=>[o(t).dockerDaemons.length===0?(u(),D(o(He),{key:0,class:"daemon-selection-list__empty-content",name:o(c)("appstore","No Deploy daemons configured"),description:o(c)("appstore","Register a custom one or setup from available templates")},{icon:y(()=>[k(o(L),{path:o(Ga)},null,8,["path"])]),action:y(()=>[k(o(ie),{href:o(n)},{default:y(()=>[N(v(o(c)("appstore","Manage Deploy daemons")),1)]),_:1},8,["href"])]),_:1},8,["name","description"])):(u(),D(Rn,{key:1,app:e.app,onSelected:a[0]||(a[0]=r=>s.$emit("close",r))},null,8,["app"]))]),_:1},8,["name"]))}});async function zn(){const{data:e}=await O.get(K("/apps/app_api/apps/list"));return e.apps}async function In(e){const{data:t}=await O.get(K(`/apps/app_api/apps/status/${e}`));return t}async function Be(e,t,n){await Ue(),await O.post(K(`/apps/app_api/apps/enable/${e.id}/${t.name}`),{deployOptions:n})}async function Cn(e){await Ue(),await O.post(K("/apps/app_api/apps/force"),{appId:e})}async function st(e){await Ue(),await O.get(K(`apps/app_api/apps/disable/${e}`))}const xe=ke("external-apps",()=>{const e=ee("appstore","appApiEnabled",!1),t=E([]),n=E(ee("appstore","appstoreExAppUpdateCount",0));let s=null;const a=E(ee("appstore","defaultDaemonConfigAccessible",!1)),r=E(ee("appstore","defaultDaemonConfig",null)),l=E([]),p=$(()=>t.value.filter(m=>m?.status?.action&&m.status.type!==""&&(m?.status?.action==="deploy"||m.status.action==="init"||m.status.action==="healthcheck")));function i(m){return t.value.find(({id:f})=>f===m)??null}async function g(m){const f=i(m);if(!f)throw new Error(`App with id ${m} not found`);f.loading=!0;try{if(l.value.length===1&&f.needsDownload)Be(f,l[0]),f.daemon=l[0];else if(f.needsDownload){const H=await kt(Dn,{app:f});if(!H)throw new Error("No daemon selected");await Be(f,H),f.daemon=H}else await Be(f,f.daemon);f.installed||(f.needsDownload=!1,f.status={type:"install",action:"deploy",init:0,deploy:0}),f.removable=!0,delete f.error,await T(m)}finally{f.loading=!1}}async function h(m){const f=i(m);if(!f)throw new Error(`App with id ${m} not found`);f.loading=!0;try{await Cn(m),await R(!0),f.active=!1}finally{f.loading=!1}}async function d(m){const f=i(m);if(!f)throw new Error(`App with id ${m} not found`);f.loading=!0;try{await st(m),f.active=!1}finally{f.loading=!1}}async function b(m){const f=i(m);if(!f)throw new Error(`App with id ${m} not found`);f.loading=!0;try{await st(m),f.active=!1,f.needsDownload=!0,f.installed=!1,f.daemon=null,f.status={},f.update!==null&&n.value--,delete f.update,delete f.error}finally{f.loading=!1}}async function S(m){const f=i(m);if(!f)throw new Error(`App with id ${m} not found`);f.loading=!0;try{await O.get(K(`/apps/app_api/apps/update/${m}`)),f.version=f.update||f.version,f.status={type:"update",action:"deploy",init:0,deploy:0},delete f.update,delete f.error,n.value--,await T(m)}catch(H){U.error("Failed to update ex app",{appId:m,error:H}),be(c("appstore","Could not update the app. Please try again later."))}finally{f.loading=!1}}async function R(m=!1){(m||!r.value||!l.value.length)&&await P(),(m||t.value.length===0)&&await Y()}return{isEnabled:e,apps:t,updateCount:n,defaultDaemon:r,dockerDaemons:l,daemonAccessible:a,getById:i,disableApp:d,enableApp:g,forceEnableApp:h,updateApp:S,uninstallApp:b,initialize:R};async function P(){try{const{data:m}=await O.get(K("/apps/app_api/daemons"));r.value=m.daemons.find(f=>f.name===m.default_daemon_config),l.value=m.daemons.filter(f=>f.accepts_deploy_id==="docker-install")}catch(m){return U.error("[app-api-store] Failed to fetch Docker daemons",{error:m}),!1}return!0}async function Y(){try{t.value=await zn()}catch(m){U.error("An error occurred while fetching apps",{error:m}),be(c("appstore","An error occurred during the request. Unable to proceed."))}}async function T(m){const f=i(m);if(!f){U.error("[app-api-store] app not found while fetching status",{appId:m});return}f.loading=!0;try{const H=await In(m);f.status=H,U.debug("[app-api-store] initializingOrDeployingApps after setAppStatus",{initializingOrDeployingApps:p}),p.value.length===0&&(U.debug("[app-api-store] Clearing interval"),clearInterval(s),s=null),f.status.error&&p.value.length===1&&(clearInterval(s),s=null)}catch(H){throw A(),H}finally{f.loading=!1}}function A(){clearInterval(s),p.value.length!==0&&(s=window.setInterval(()=>{U.debug("[app-api-store] initializingOrDeployingApps",{initializingOrDeployingApps:p});for(const m of p.value)T(m.id)},2e3))}}),j=ke("apps",()=>{const e=xe(),t=E([]),n=E([]),s=dt(ee("appstore","appstoreBundles")),a=E(!1),r=E(!1),l=$(()=>[...t.value,...e.isEnabled?e.apps:[]]);function p(T){return n.value.find(({id:A})=>A===T)??null}function i(T){return l.value.find(({id:A})=>A===T)??null}function g(T){return l.value.filter(A=>[A.category].flat().includes(T))}async function h(T,A=!1){const m=i(T);if(!m)throw new Error(`App with id ${T} not found`);if(m.active||!m.installed&&!pe(m))throw new Error(`App with id ${T} cannot be enabled`);if(!A&&ve(m))throw new Error(`App with id ${T} requires force enable`);m.loading=!0;try{m.app_api?await e.enableApp(T):await nt(T,A),A&&(m.isCompatible=!0),m.active=!0,m.installed=!0,m.removable=!0,await ge()}finally{m.loading=!1}}async function d(T){const A=i(T);if(!A)throw new Error(`App with id ${T} not found`);if(!St(A))throw new Error(`App with id ${T} cannot be disabled`);A.loading=!0;try{A.app_api?await e.disableApp(T):await gn(T),A.active=!1,A.isCompatible=A.missingDependencies===void 0||A.missingDependencies.length===0,await ge()}finally{A.loading=!1}}async function b(T){const A=i(T);if(!A)throw new Error(`App with id ${T} not found`);if(!$t(A))throw new Error(`App with id ${T} cannot be uninstalled`);A.loading=!0;try{A.app_api?await e.uninstallApp(T):await fn(T),A.active=!1,A.installed=!1,await ge()}finally{A.loading=!1}}async function S(T,A){const m=i(T);if(!m)throw new Error(`App with id ${T} not found`);if(!Fe(m))throw new Error(`App with id ${T} cannot be limited to groups`);if(!m.app_api)try{m.loading=!0,await nt(T,!1,A),m.groups=A}finally{m.loading=!1}}async function R(T){const A=s.find(m=>m.id===T);if(!A)throw new Error(`Bundle with id ${T} not found`);try{for(const m of A.appIdentifiers){const f=i(m);f.loading=!0}await _n(A.id);for(const m of A.appIdentifiers){const f=i(m);f.active=!0,f.installed=!0,f.removable=!0,await ge()}}finally{for(const m of A.appIdentifiers){const f=i(m);f.loading=!1}}}async function P(){try{r.value=!0,n.value=await kn()}catch(T){U.error("Failed to load app categories",{error:T}),be(c("appstore","Could not load app categories. Please try again later."))}finally{r.value=!1}}async function Y(){try{a.value=!0,t.value=await bn()}catch(T){U.error("Failed to load apps list",{error:T}),be(c("appstore","Could not load apps list. Please try again later."))}finally{a.value=!1}}return Y(),P(),{apps:l,bundles:s,categories:n,isLoadingApps:a,isLoadingCategories:r,disableApp:d,enableApp:h,uninstallApp:b,enableBundle:R,getAppById:i,getAppsByCategory:g,getCategoryById:p,limitAppToGroups:S}}),zt=ke("updates",()=>{const e=xe(),t=E(ee("appstore","appstoreUpdateCount",0)),n=$(()=>t.value+e.updateCount);async function s(a){const r=j().getAppById(a);if(!r)throw new Error(`App with id ${a} not found`);try{"app_api"in r&&r.app_api?await e.updateApp(a):(await mn(a),t.value=Math.max(t.value-1,0)),ge()}catch(l){U.error("Failed to update app",{appId:a,error:l}),be(c("appstore","Could not update the app. Please try again later."))}}return{updateCount:n,updateApp:s}}),It=ke("userSettings",()=>{const e=E(""),t=E(!1),n=E(!0),s=$(()=>e.value==="m"?"468px":e.value==="l"?"512px":"320px");function a(l){return{...(_e()??{}).query,grid:l??t.value?e.value||null:void 0,compatible:n.value?void 0:null}}return Oe().afterEach(l=>{r(l.query)}),{defaultGridSize:e,gridSizePx:s,isGridView:t,showIncompatible:n,getQuery:a};function r(l){t.value="grid"in l,e.value=[l.grid??""].flat()[0].toLowerCase(),n.value=!("compatible"in l)}}),Ln=B({__name:"AppstoreNavigation",setup(e){const t=ee("settings","appstoreEnabled",!0),n=j(),s=zt(),a=It(),r=$(()=>n.categories),l=$(()=>n.isLoadingCategories),p=_e(),i=Oe(),g=ht("search");ka("f",()=>{g.value?.$refs.inputElement||(gt("toggle-navigation",{open:!0}),window.setTimeout(()=>g.value?.$refs.inputElement?.focus(),400)),g.value?.$refs.inputElement?.focus()},{ctrl:!0,stop:!0,prevent:!0});const h=E("");re(()=>p.query.q,b=>{h.value=[b||""].flat()[0]},{immediate:!0}),an(h,(b,S)=>{if(b.trim()!==S.trim()){if(i.currentRoute.value.name==="apps-discover"||i.currentRoute.value.name==="apps-manage"&&p.params.category==="bundles"){i.push({name:"apps-search",query:{...p.query,q:b.trim()||void 0}});return}i.replace({...p,query:{...p.query,q:b.trim()||void 0}})}},{debounce:500});const d=$(()=>n.apps.find(({level:b})=>b===300)!==void 0);return(b,S)=>(u(),D(o(ua),{"aria-label":o(c)("appstore","Appstore categories")},{search:y(()=>[k(o(da),{ref_key:"search",ref:h,modelValue:h.value,"onUpdate:modelValue":S[0]||(S[0]=R=>h.value=R),label:o(c)("appstore","Search apps…")},null,8,["modelValue","label"])]),list:y(()=>[o(t)?(u(),D(o(J),{key:0,to:{name:"apps-discover"},name:o(W).discover},{icon:y(()=>[k(o(L),{path:o(X).discover},null,8,["path"])]),_:1},8,["name"])):I("",!0),k(o(J),{to:{name:"apps-manage",params:{category:"installed"}},name:o(W).installed},{icon:y(()=>[k(o(L),{path:o(X).installed},null,8,["path"])]),_:1},8,["name"]),k(o(J),{to:{name:"apps-manage",params:{category:"enabled"}},name:o(W).enabled},{icon:y(()=>[k(o(L),{path:o(X).enabled},null,8,["path"])]),_:1},8,["name"]),k(o(J),{to:{name:"apps-manage",params:{category:"disabled"}},name:o(W).disabled},{icon:y(()=>[k(o(L),{path:o(X).disabled},null,8,["path"])]),_:1},8,["name"]),o(s).updateCount>0?(u(),D(o(J),{key:1,to:{name:"apps-manage",params:{category:"updates"}},name:o(W).updates},{counter:y(()=>[k(o(va),{count:o(s).updateCount},null,8,["count"])]),icon:y(()=>[k(o(L),{path:o(X).updates},null,8,["path"])]),_:1},8,["name"])):I("",!0),k(o(J),{to:{name:"apps-bundles"},name:o(W).bundles},{icon:y(()=>[k(o(L),{path:o(X).bundles},null,8,["path"])]),_:1},8,["name"]),k(o(pn)),o(t)&&l.value?(u(),x("li",{key:2,class:w(b.$style.appstoreNavigation__categories_loading)},[k(o(Ie),{size:20,name:o(c)("appstore","Loading categories")},null,8,["name"])],2)):o(t)&&!l.value?(u(),x(M,{key:3},[d.value?(u(),D(o(J),{key:0,id:"app-category-supported",to:{name:"apps-category",params:{category:"supported"},query:o(a).getQuery(!0)},name:o(W).supported},{icon:y(()=>[k(o(L),{path:o(X).supported},null,8,["path"])]),_:1},8,["to","name"])):I("",!0),k(o(J),{id:"app-category-featured",to:{name:"apps-category",params:{category:"featured"},query:o(a).getQuery(!0)},name:o(W).featured},{icon:y(()=>[k(o(L),{path:o(X).featured},null,8,["path"])]),_:1},8,["to","name"]),(u(!0),x(M,null,Z(r.value,R=>(u(),D(o(J),{id:`app-category-${R.id}`,key:R.id,name:R.displayName,to:{name:"apps-category",params:{category:R.id},query:o(a).getQuery(!0)}},{icon:y(()=>[k(o(L),{path:R.icon},null,8,["path"])]),_:2},1032,["id","name","to"]))),128))],64)):I("",!0)]),_:1},8,["aria-label"]))}}),En="_appstoreNavigation__categories_loading_1fsn2_2",Bn={appstoreNavigation__categories_loading:En},Pn={$style:Bn},Nn=q(Ln,[["__cssModules",Pn]]),qn=B({__name:"AppActions",props:{app:{},actions:{},maxInlineActions:{default:1},iconOnly:{type:Boolean}},setup(e){const t=$(()=>e.actions.length<=e.maxInlineActions?e.actions:e.actions.filter(s=>s.inline!==!1).slice(0,e.maxInlineActions)),n=$(()=>e.actions.filter(s=>!t.value.includes(s)));return(s,a)=>(u(),x("div",{class:w(s.$style.appActions)},[(u(!0),x(M,null,Z(t.value,r=>(u(),D(o(ie),{key:r.id,ariaLabel:e.iconOnly?r.label(e.app):void 0,title:e.iconOnly?r.label(e.app):void 0,variant:r.variant,href:"href"in r?r.href(e.app):void 0,to:"to"in r?r.to(e.app):void 0,target:"href"in r?"_blank":void 0,onClick:l=>"callback"in r&&r.callback(e.app)},Me({icon:y(()=>[k(o(L),{path:r.icon},null,8,["path"])]),_:2},[e.iconOnly?void 0:{name:"default",fn:y(()=>[N(v(r.label(e.app)),1)]),key:"0"}]),1032,["ariaLabel","title","variant","href","to","target","onClick"]))),128)),k(o(_a),{forceMenu:""},{default:y(()=>[(u(!0),x(M,null,Z(n.value,r=>(u(),x(M,null,["callback"in r?(u(),D(o(ca),{key:"callback-"+r.id,closeAfterClick:"",variant:r.variant,onClick:l=>r.callback(e.app)},{icon:y(()=>[k(o(L),{path:r.icon},null,8,["path"])]),default:y(()=>[N(" "+v(r.label(e.app)),1)]),_:2},1032,["variant","onClick"])):"href"in r?(u(),D(o(ma),{key:"link-"+r.id,closeAfterClick:"",variant:r.variant,href:r.href(e.app)},{icon:y(()=>[k(o(L),{path:r.icon},null,8,["path"])]),default:y(()=>[N(" "+v(r.label(e.app)),1)]),_:2},1032,["variant","href"])):(u(),D(o(fa),{key:"route-"+r.id,closeAfterClick:"",variant:r.variant,to:r.to(e.app)},{icon:y(()=>[k(o(L),{path:r.icon},null,8,["path"])]),default:y(()=>[N(" "+v(r.label(e.app)),1)]),_:2},1032,["variant","to"]))],64))),256))]),_:1})],2))}}),Mn="_appActions_lrf6h_2",On={appActions:Mn},Gn={$style:On},Ct=q(qn,[["__cssModules",Gn]]),Hn=B({__name:"AppDeployDaemonTab",props:{app:{}},setup(e){const t=E(e.app?.daemon?.deploy_config?.computeDevice?.id!=="cpu"||!1);return(n,s)=>e.app?.daemon?(u(),D(o(Ce),{key:0,id:"daemon",name:o(c)("appstore","Daemon"),order:5},{icon:y(()=>[k(o(L),{path:o(vt),size:24},null,8,["path"])]),default:y(()=>[_("div",{class:w(n.$style.appDeployDaemonTab)},[_("h4",null,v(o(c)("appstore","Deploy Daemon")),1),_("p",null,[_("b",null,v(o(c)("appstore","Type")),1),N(": "+v(e.app?.daemon.accepts_deploy_id),1)]),_("p",null,[_("b",null,v(o(c)("appstore","Name")),1),N(": "+v(e.app?.daemon.name),1)]),_("p",null,[_("b",null,v(o(c)("appstore","Display Name")),1),N(": "+v(e.app?.daemon.display_name),1)]),_("p",null,[_("b",null,v(o(c)("appstore","GPUs support")),1),N(": "+v(t.value),1)]),_("p",null,[_("b",null,v(o(c)("appstore","Compute device")),1),N(": "+v(e.app?.daemon?.deploy_config?.computeDevice?.label),1)])],2)]),_:1},8,["name"])):I("",!0)}}),Zn="_appDeployDaemonTab_1xkhp_2",jn={appDeployDaemonTab:Zn},Un={$style:jn},Fn=q(Hn,[["__cssModules",Un]]);function Qe(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var le=Qe();function lt(e){le=e}var ne={exec:()=>null};function z(e,t=""){let n=typeof e=="string"?e:e.source,s={replace:(a,r)=>{let l=typeof r=="string"?r:r.source;return l=l.replace(G.caret,"$1"),n=n.replace(a,l),s},getRegex:()=>new RegExp(n,t)};return s}var Qn=(()=>{try{return!!new RegExp("(?<=1)(?/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i"),blockquoteBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}>`)},Vn=/^(?:[ \t]*(?:\n|$))+/,Wn=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Xn=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,$e=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Yn=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Ve=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,Lt=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Et=z(Lt).replace(/bull/g,Ve).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),Jn=z(Lt).replace(/bull/g,Ve).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),We=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Kn=/^[^\n]+/,Xe=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,es=z(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",Xe).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),ts=z(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Ve).getRegex(),Le="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",Ye=/|$))/,as=z("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",Ye).replace("tag",Le).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Bt=z(We).replace("hr",$e).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Le).getRegex(),ns=z(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Bt).getRegex(),Je={blockquote:ns,code:Wn,def:es,fences:Xn,heading:Yn,hr:$e,html:as,lheading:Et,list:ts,newline:Vn,paragraph:Bt,table:ne,text:Kn},rt=z("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",$e).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Le).getRegex(),ss={...Je,lheading:Jn,table:rt,paragraph:z(We).replace("hr",$e).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",rt).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Le).getRegex()},ls={...Je,html:z(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",Ye).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:ne,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:z(We).replace("hr",$e).replace("heading",` *#{1,6} *[^ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=[window.OC.filePath('', '', 'dist/AppstoreDiscover-WjjPyuuv.chunk.mjs'),window.OC.filePath('', '', 'dist/Web-BwmPK40i.chunk.mjs'),window.OC.filePath('', '', 'dist/public-C1mLBHT3.chunk.mjs'),window.OC.filePath('', '', 'dist/mdi-Lt-19ASw.chunk.mjs'),window.OC.filePath('', '', 'dist/logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs'),window.OC.filePath('', '', 'dist/createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs'),window.OC.filePath('', '', 'dist/translation-DoG5ZELJ-CFYnqluG.chunk.mjs'),window.OC.filePath('', '', 'dist/index-B-dGqfIG.chunk.mjs'),window.OC.filePath('', '', 'dist/common-createElementId-DhjFt1I9-C_oBIsvc.chunk.css'),window.OC.filePath('', '', 'dist/common-logger-D3RVzcfQ-BE3lcFW4.chunk.css'),window.OC.filePath('', '', 'dist/common-mdi-BWNFKLbC.chunk.css'),window.OC.filePath('', '', 'dist/index-DL1yHC1K-DnBG6QLJ.chunk.mjs'),window.OC.filePath('', '', 'dist/index-BW4M2n71.chunk.mjs'),window.OC.filePath('', '', 'dist/NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcModal-DUWLRm_F-BsKc2RT9.chunk.css'),window.OC.filePath('', '', 'dist/TrashCanOutline-Cv7t-yKN.chunk.mjs'),window.OC.filePath('', '', 'dist/common-TrashCanOutline-BYHcrfvW.chunk.css'),window.OC.filePath('', '', 'dist/common-index-DYA_tnKg.chunk.css'),window.OC.filePath('', '', 'dist/NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcEmptyContent-CGAPqk4S-Don1d5Bd.chunk.css'),window.OC.filePath('', '', 'dist/index-BLNGy7h5.chunk.mjs'),window.OC.filePath('', '', 'dist/util-Alk1iwuj.chunk.mjs'),window.OC.filePath('', '', 'dist/pinia-CLibr4cC.chunk.mjs'),window.OC.filePath('', '', 'dist/NcContent-BhMoPROW-DisoN_bw.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcContent-BhMoPROW-CuEPejA5.chunk.css'),window.OC.filePath('', '', 'dist/PencilOutline-CJ2aSuY5.chunk.mjs'),window.OC.filePath('', '', 'dist/common-PencilOutline-B3DMd8SU.chunk.css'),window.OC.filePath('', '', 'dist/NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs'),window.OC.filePath('', '', 'dist/index-BOH7nBEM.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index-980JFXIN.chunk.css'),window.OC.filePath('', '', 'dist/TrayArrowDown-BI3qCRD6.chunk.mjs'),window.OC.filePath('', '', 'dist/common-TrayArrowDown-CaC9_ffV.chunk.css'),window.OC.filePath('', '', 'dist/NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcInputField-B1bGxYHt-BYHxARP-.chunk.css'),window.OC.filePath('', '', 'dist/NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs'),window.OC.filePath('', '', 'dist/ArrowRight-DKsMJImQ.chunk.mjs'),window.OC.filePath('', '', 'dist/common-ArrowRight-vZpQWIqF.chunk.css'),window.OC.filePath('', '', 'dist/colors-BDeMBgfq-BQ_6MaUU.chunk.mjs'),window.OC.filePath('', '', 'dist/NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcUserStatusIcon-DsviB2Cr-Bq_6hmXG.chunk.css'),window.OC.filePath('', '', 'dist/NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcDateTime-b9UhLDij.chunk.css'),window.OC.filePath('', '', 'dist/common-NcAvatar-M3-CbKbq-DTVmI7NO.chunk.css'),window.OC.filePath('', '', 'dist/NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs'),window.OC.filePath('', '', 'dist/NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcPasswordField-Be5_qcfm-Crp_EMfV.chunk.css'),window.OC.filePath('', '', 'dist/NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcBreadcrumbs-5gl8Syfa-CfbvucBX.chunk.css'),window.OC.filePath('', '', 'dist/common-NcTextArea-Dxzj4zdb-B-B2llha.chunk.css'),window.OC.filePath('', '', 'dist/NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcCheckboxRadioSwitch-D8Dfv4iw-CPGkDj-p.chunk.css'),window.OC.filePath('', '', 'dist/Plus-DYmK9QaT.chunk.mjs'),window.OC.filePath('', '', 'dist/common-Plus-Som-mR4B.chunk.css'),window.OC.filePath('', '', 'dist/index-BoBLp2fu.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index-bfXBK-tQ.chunk.css'),window.OC.filePath('', '', 'dist/index-CMXcwXc6.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index--xyrXnuf.chunk.css'),window.OC.filePath('', '', 'dist/NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs'),window.OC.filePath('', '', 'dist/emoji-C8k9NUlo-rFKNlNNR.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcEmojiPicker-Bpw-68QP-ChsL0oK6.chunk.css'),window.OC.filePath('', '', 'dist/index-C_wPY1fR.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index-CpSoVYoo.chunk.css'),window.OC.filePath('', '', 'dist/index-xEyWukTf.chunk.mjs'),window.OC.filePath('', '', 'dist/common-index-MZEZ7XGj.chunk.css'),window.OC.filePath('', '', 'dist/NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs'),window.OC.filePath('', '', 'dist/ContentCopy-BF1gBM5z.chunk.mjs'),window.OC.filePath('', '', 'dist/common-ContentCopy-D7mIRwIy.chunk.css'),window.OC.filePath('', '', 'dist/NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs'),window.OC.filePath('', '', 'dist/common-NcUserBubble-CDQa0hGy-f2DD9EAL.chunk.css'),window.OC.filePath('', '', 'dist/index-DlyLvrtV.chunk.mjs'),window.OC.filePath('', '', 'dist/modulepreload-polyfill-BxzAKjcf.chunk.mjs'),window.OC.filePath('', '', 'dist/index-BU6wm4Hd.chunk.mjs'),window.OC.filePath('', '', 'dist/appstore-AppstoreDiscover-D5SWaP1O.chunk.css'),window.OC.filePath('', '', 'dist/common-NcActionSeparator-Ct2RnclR-pXJ_-D_I.chunk.css'),window.OC.filePath('', '', 'dist/common-NcGuestContent-j8ai4O1K-D0718NyY.chunk.css'),window.OC.filePath('', '', 'dist/AppstoreSearch-CPzSIsIZ.chunk.mjs'),window.OC.filePath('', '', 'dist/common-AppstoreSearch-CAiP7JM1.chunk.css'),window.OC.filePath('', '', 'dist/AppstoreBrowse-DO4WaaxR.chunk.mjs'),window.OC.filePath('', '', 'dist/appstore-AppstoreBrowse-D_DYi-hc.chunk.css')])))=>i.map(i=>d[i]); +import{d as ke,c as Vt}from"./pinia-CLibr4cC.chunk.mjs";import{b as B,o as u,f as x,g as _,t as v,i as Wt,y as w,c as D,u as o,N as Xt,w as y,j as N,v as $,F as M,B as Z,k,l as E,aa as dt,p as ht,z as re,h as I,q as Me,a9 as fe,U as Yt,a as Jt,_ as oe,H as Kt,D as ea,r as ta,e as aa}from"./Web-BwmPK40i.chunk.mjs";import{t as c,p as na,g as sa}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import{N as ie,v as Oe,u as _e,H as la,I as ra}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import{N as ia,a as oa}from"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import{c as Ge,f as gt,g as pa,b as K}from"./index-B-dGqfIG.chunk.mjs";import{_ as q,l as ee}from"./public-C1mLBHT3.chunk.mjs";import{N as ca}from"./PencilOutline-CJ2aSuY5.chunk.mjs";import{_ as mt,N as L}from"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import{c as ua,d as J,e as da,f as ha,N as ga}from"./NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs";import{P as ft}from"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import{N as ma,a as fa,_ as ba}from"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import{M as ka,a as _a}from"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";/* empty css */import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import{N as Ie}from"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import{N as ya}from"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import{N as wa,a as va}from"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import{N as bt,s as kt}from"./index-BW4M2n71.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import{N as He}from"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import{J as xa,K as $a,L as Ta,M as Aa,O as Sa,P as Ra,Q as Da,R as za,S as Ia,T as Ca,U as La,w as Ea,V as Ba,D as Se,W as Pa,X as Na,Y as Ze,y as je,Z as _t,_ as qa,$ as yt,q as wt,a0 as Ma,a1 as Oa,a2 as Ga,a3 as vt,a4 as Ha,a5 as Za,a6 as xt,N as at,a7 as ja,a8 as Ua,a9 as Fa,aa as Qa,ab as Va,ac as Wa,ad as Xa,l as Ya,ae as Ja,af as Ka,v as en,ag as tn}from"./mdi-Lt-19ASw.chunk.mjs";import"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./index-xEyWukTf.chunk.mjs";import{c as O}from"./index-BLNGy7h5.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import"./ContentCopy-BF1gBM5z.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import{w as an,b as nn,u as sn}from"./index-DlyLvrtV.chunk.mjs";import"./modulepreload-polyfill-BxzAKjcf.chunk.mjs";import{a as be}from"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import{a as ln,P as ye,c as Ue}from"./index-BU6wm4Hd.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";const rn={class:"app-navigation-spacer"},on=B({__name:"NcAppNavigationSpacer",setup(e){return(t,n)=>(u(),x("li",rn))}}),pn=mt(on,[["__scopeId","data-v-277fa710"]]),cn={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(e){this.$el.scrollHeight-this.$el.scrollTop===this.$el.clientHeight&&this.$emit("bottomReached",e),this.$emit("scroll",e)},renderIcon(){return this.$slots.icon?.()}}},un=["id","aria-hidden","aria-label","aria-labelledby","role","tabindex"],dn={class:"hidden-visually"};function hn(e,t,n,s,a,r){return u(),x("section",{id:`tab-${n.id}`,"aria-hidden":!r.isActive,"aria-label":r.isTablistShown()?void 0:n.name,"aria-labelledby":r.isTablistShown()?`tab-button-${n.id}`:void 0,class:w(["app-sidebar__tab",{"app-sidebar__tab--active":r.isActive}]),role:r.isTablistShown()?"tabpanel":void 0,tabindex:r.isTablistShown()?0:-1,onScroll:t[0]||(t[0]=(...l)=>r.onScroll&&r.onScroll(...l))},[_("h3",dn,v(n.name),1),Wt(e.$slots,"default",{},void 0,!0)],42,un)}const Ce=mt(cn,[["render",hn],["__scopeId","data-v-dba10798"]]),W=Object.freeze({discover:c("appstore","Discover"),installed:c("appstore","Your apps"),enabled:c("appstore","Active apps"),disabled:c("appstore","Disabled apps"),updates:c("appstore","Updates"),bundles:c("appstore","App bundles"),featured:c("appstore","Featured apps"),supported:c("appstore","Supported apps"),search:c("appstore","Search results")}),X=Object.freeze({discover:Oa,installed:Ma,enabled:wt,disabled:yt,bundles:qa,supported:_t,featured:je,updates:Ze,ai:Na,auth:Pa,customization:Se,dashboard:Ba,files:Ea,games:La,integration:Ca,monitoring:Ia,multimedia:za,office:Da,organization:Ra,search:Sa,security:Aa,social:Ta,tools:$a,workflow:xa}),Ki=["post","showcase","carousel"];ln(O);const te=Ge("apps/appstore/api/v1"),se=Object.freeze({apps:`${te}/apps`,categories:`${te}/apps/categories`,enable:`${te}/apps/enable`,disable:`${te}/apps/disable`,uninstall:`${te}/apps/uninstall`,update:`${te}/apps/update`,bundleEnable:`${te}/bundles/enable`}),we=new ft({concurrency:1});async function nt(e,t=!1,n){return we.add(async()=>{await O.post(se.enable,{appId:e,groups:n,force:t||void 0},{confirmPassword:ye.Strict})})}async function gn(e){return we.add(async()=>{await O.post(se.disable,{appId:e},{confirmPassword:ye.Lax})})}async function mn(e){return we.add(async()=>{await O.post(se.update,{appId:e},{confirmPassword:ye.Strict})})}async function fn(e){return we.add(async()=>{await O.post(se.uninstall,{appId:e},{confirmPassword:ye.Strict})})}async function bn(){const{data:e}=await O.get(se.apps);return e.ocs.data}async function kn(){const{data:e}=await O.get(se.categories);for(const t of e.ocs.data)t.icon=X[t.id]??"";return e.ocs.data}async function _n(e){return we.add(async()=>{await O.post(se.bundleEnable,{bundleId:e},{confirmPassword:ye.Strict})})}async function ge(){const{data:e}=await O.get(Ge("core/navigation/apps?format=json"));e.ocs.meta.statuscode===200&&(gt("nextcloud:app-menu.refresh",{apps:e.ocs.data}),window.dispatchEvent(new Event("resize")))}function pe(e){return e.installed||e.internal?!1:e.missingDependencies===void 0||e.missingDependencies.length===0||!e.isCompatible&&e.missingDependencies.length===1}function $t(e){return e.installed&&e.removable&&!e.active}function Tt(e){return!Rt(e)&&!Dt(e)&&At(e)&&e.isCompatible}function At(e){return!e.active&&(e.installed||pe(e))}function ve(e){return!e.active&&!e.isCompatible}function St(e){return!Rt(e)&&!Dt(e)&&e.active&&!e.internal}function yn(e){return e.update!==void 0}const wn=["filesystem","prelogin","authentication","logging","prevent_group_restriction"];function Fe(e){return!e.active&&!e.installed||!e.active&&ve(e)?!1:e.types?e.types.every(t=>!wn.includes(t)):!0}function Rt(e){return e.app_api&&(e.status.action==="init"||e.status.action==="healthcheck")}function Dt(e){return e.app_api&&e.status.action==="deploy"}const U=pa().setApp("appstore").detectUser().build(),vn=B({__name:"DaemonSelectionDialogListEntry",props:{daemon:{},isDefault:{type:Boolean}},emits:["selected"],setup(e,{emit:t}){const n=e,s=t,a=$(()=>`${n.daemon.name} - ${n.daemon.display_name}`);return(r,l)=>(u(),D(o(wa),{active:e.isDefault,counterNumber:e.daemon.exAppsCount,counterType:"highlighted",details:e.isDefault?o(c)("appstore","Default"):"",forceDisplayActions:"",name:a.value,onClick:l[0]||(l[0]=Xt(p=>s("selected"),["stop"]))},{subname:y(()=>[N(v(e.daemon.accepts_deploy_id),1)]),_:1},8,["active","counterNumber","details","name"]))}}),xn=["aria-label"],$n=B({__name:"DaemonSelectionDialogList",emits:["selected"],setup(e){const t=xe();return(n,s)=>(u(),x("ul",{class:w(n.$style.DaemonSelectionDialogList),"aria-label":o(c)("appstore","Registered Deploy daemons list")},[(u(!0),x(M,null,Z(o(t).dockerDaemons,a=>(u(),D(vn,{key:a.id,daemon:a,isDefault:o(t).defaultDaemon?.name===a.name,onSelected:r=>n.$emit("selected",a)},null,8,["daemon","isDefault","onSelected"]))),128))],10,xn))}}),Tn="_DaemonSelectionDialogList_x38pt_2",An={DaemonSelectionDialogList:Tn},Sn={$style:An},Rn=q($n,[["__cssModules",Sn]]),Dn=B({__name:"DaemonSelectionDialog",props:{app:{}},emits:["close"],setup(e){const t=xe(),n=K("/settings/admin/app_api");return(s,a)=>(u(),D(o(bt),{name:o(c)("appstore","Choose Deploy Daemon for {appName}",{appName:e.app.name}),size:"normal","onUpdate:open":a[1]||(a[1]=r=>r||s.$emit("close"))},{default:y(()=>[o(t).dockerDaemons.length===0?(u(),D(o(He),{key:0,class:"daemon-selection-list__empty-content",name:o(c)("appstore","No Deploy daemons configured"),description:o(c)("appstore","Register a custom one or setup from available templates")},{icon:y(()=>[k(o(L),{path:o(Ga)},null,8,["path"])]),action:y(()=>[k(o(ie),{href:o(n)},{default:y(()=>[N(v(o(c)("appstore","Manage Deploy daemons")),1)]),_:1},8,["href"])]),_:1},8,["name","description"])):(u(),D(Rn,{key:1,app:e.app,onSelected:a[0]||(a[0]=r=>s.$emit("close",r))},null,8,["app"]))]),_:1},8,["name"]))}});async function zn(){const{data:e}=await O.get(K("/apps/app_api/apps/list"));return e.apps}async function In(e){const{data:t}=await O.get(K(`/apps/app_api/apps/status/${e}`));return t}async function Be(e,t,n){await Ue(),await O.post(K(`/apps/app_api/apps/enable/${e.id}/${t.name}`),{deployOptions:n})}async function Cn(e){await Ue(),await O.post(K("/apps/app_api/apps/force"),{appId:e})}async function st(e){await Ue(),await O.get(K(`apps/app_api/apps/disable/${e}`))}const xe=ke("external-apps",()=>{const e=ee("appstore","appApiEnabled",!1),t=E([]),n=E(ee("appstore","appstoreExAppUpdateCount",0));let s=null;const a=E(ee("appstore","defaultDaemonConfigAccessible",!1)),r=E(ee("appstore","defaultDaemonConfig",null)),l=E([]),p=$(()=>t.value.filter(m=>m?.status?.action&&m.status.type!==""&&(m?.status?.action==="deploy"||m.status.action==="init"||m.status.action==="healthcheck")));function i(m){return t.value.find(({id:f})=>f===m)??null}async function g(m){const f=i(m);if(!f)throw new Error(`App with id ${m} not found`);f.loading=!0;try{if(l.value.length===1&&f.needsDownload)Be(f,l[0]),f.daemon=l[0];else if(f.needsDownload){const H=await kt(Dn,{app:f});if(!H)throw new Error("No daemon selected");await Be(f,H),f.daemon=H}else await Be(f,f.daemon);f.installed||(f.needsDownload=!1,f.status={type:"install",action:"deploy",init:0,deploy:0}),f.removable=!0,delete f.error,await T(m)}finally{f.loading=!1}}async function h(m){const f=i(m);if(!f)throw new Error(`App with id ${m} not found`);f.loading=!0;try{await Cn(m),await R(!0),f.active=!1}finally{f.loading=!1}}async function d(m){const f=i(m);if(!f)throw new Error(`App with id ${m} not found`);f.loading=!0;try{await st(m),f.active=!1}finally{f.loading=!1}}async function b(m){const f=i(m);if(!f)throw new Error(`App with id ${m} not found`);f.loading=!0;try{await st(m),f.active=!1,f.needsDownload=!0,f.installed=!1,f.daemon=null,f.status={},f.update!==null&&n.value--,delete f.update,delete f.error}finally{f.loading=!1}}async function S(m){const f=i(m);if(!f)throw new Error(`App with id ${m} not found`);f.loading=!0;try{await O.get(K(`/apps/app_api/apps/update/${m}`)),f.version=f.update||f.version,f.status={type:"update",action:"deploy",init:0,deploy:0},delete f.update,delete f.error,n.value--,await T(m)}catch(H){U.error("Failed to update ex app",{appId:m,error:H}),be(c("appstore","Could not update the app. Please try again later."))}finally{f.loading=!1}}async function R(m=!1){(m||!r.value||!l.value.length)&&await P(),(m||t.value.length===0)&&await Y()}return{isEnabled:e,apps:t,updateCount:n,defaultDaemon:r,dockerDaemons:l,daemonAccessible:a,getById:i,disableApp:d,enableApp:g,forceEnableApp:h,updateApp:S,uninstallApp:b,initialize:R};async function P(){try{const{data:m}=await O.get(K("/apps/app_api/daemons"));r.value=m.daemons.find(f=>f.name===m.default_daemon_config),l.value=m.daemons.filter(f=>f.accepts_deploy_id==="docker-install")}catch(m){return U.error("[app-api-store] Failed to fetch Docker daemons",{error:m}),!1}return!0}async function Y(){try{t.value=await zn()}catch(m){U.error("An error occurred while fetching apps",{error:m}),be(c("appstore","An error occurred during the request. Unable to proceed."))}}async function T(m){const f=i(m);if(!f){U.error("[app-api-store] app not found while fetching status",{appId:m});return}f.loading=!0;try{const H=await In(m);f.status=H,U.debug("[app-api-store] initializingOrDeployingApps after setAppStatus",{initializingOrDeployingApps:p}),p.value.length===0&&(U.debug("[app-api-store] Clearing interval"),clearInterval(s),s=null),f.status.error&&p.value.length===1&&(clearInterval(s),s=null)}catch(H){throw A(),H}finally{f.loading=!1}}function A(){clearInterval(s),p.value.length!==0&&(s=window.setInterval(()=>{U.debug("[app-api-store] initializingOrDeployingApps",{initializingOrDeployingApps:p});for(const m of p.value)T(m.id)},2e3))}}),j=ke("apps",()=>{const e=xe(),t=E([]),n=E([]),s=dt(ee("appstore","appstoreBundles")),a=E(!1),r=E(!1),l=$(()=>[...t.value,...e.isEnabled?e.apps:[]]);function p(T){return n.value.find(({id:A})=>A===T)??null}function i(T){return l.value.find(({id:A})=>A===T)??null}function g(T){return l.value.filter(A=>[A.category].flat().includes(T))}async function h(T,A=!1){const m=i(T);if(!m)throw new Error(`App with id ${T} not found`);if(m.active||!m.installed&&!pe(m))throw new Error(`App with id ${T} cannot be enabled`);if(!A&&ve(m))throw new Error(`App with id ${T} requires force enable`);m.loading=!0;try{m.app_api?await e.enableApp(T):await nt(T,A),A&&(m.isCompatible=!0),m.active=!0,m.installed=!0,m.removable=!0,await ge()}finally{m.loading=!1}}async function d(T){const A=i(T);if(!A)throw new Error(`App with id ${T} not found`);if(!St(A))throw new Error(`App with id ${T} cannot be disabled`);A.loading=!0;try{A.app_api?await e.disableApp(T):await gn(T),A.active=!1,A.isCompatible=A.missingDependencies===void 0||A.missingDependencies.length===0,await ge()}finally{A.loading=!1}}async function b(T){const A=i(T);if(!A)throw new Error(`App with id ${T} not found`);if(!$t(A))throw new Error(`App with id ${T} cannot be uninstalled`);A.loading=!0;try{A.app_api?await e.uninstallApp(T):await fn(T),A.active=!1,A.installed=!1,await ge()}finally{A.loading=!1}}async function S(T,A){const m=i(T);if(!m)throw new Error(`App with id ${T} not found`);if(!Fe(m))throw new Error(`App with id ${T} cannot be limited to groups`);if(!m.app_api)try{m.loading=!0,await nt(T,!1,A),m.groups=A}finally{m.loading=!1}}async function R(T){const A=s.find(m=>m.id===T);if(!A)throw new Error(`Bundle with id ${T} not found`);try{for(const m of A.appIdentifiers){const f=i(m);f.loading=!0}await _n(A.id);for(const m of A.appIdentifiers){const f=i(m);f.active=!0,f.installed=!0,f.removable=!0,await ge()}}finally{for(const m of A.appIdentifiers){const f=i(m);f.loading=!1}}}async function P(){try{r.value=!0,n.value=await kn()}catch(T){U.error("Failed to load app categories",{error:T}),be(c("appstore","Could not load app categories. Please try again later."))}finally{r.value=!1}}async function Y(){try{a.value=!0,t.value=await bn()}catch(T){U.error("Failed to load apps list",{error:T}),be(c("appstore","Could not load apps list. Please try again later."))}finally{a.value=!1}}return Y(),P(),{apps:l,bundles:s,categories:n,isLoadingApps:a,isLoadingCategories:r,disableApp:d,enableApp:h,uninstallApp:b,enableBundle:R,getAppById:i,getAppsByCategory:g,getCategoryById:p,limitAppToGroups:S}}),zt=ke("updates",()=>{const e=xe(),t=E(ee("appstore","appstoreUpdateCount",0)),n=$(()=>t.value+e.updateCount);async function s(a){const r=j().getAppById(a);if(!r)throw new Error(`App with id ${a} not found`);try{"app_api"in r&&r.app_api?await e.updateApp(a):(await mn(a),t.value=Math.max(t.value-1,0)),ge()}catch(l){U.error("Failed to update app",{appId:a,error:l}),be(c("appstore","Could not update the app. Please try again later."))}}return{updateCount:n,updateApp:s}}),It=ke("userSettings",()=>{const e=E(""),t=E(!1),n=E(!0),s=$(()=>e.value==="m"?"468px":e.value==="l"?"512px":"320px");function a(l){return{...(_e()??{}).query,grid:l??t.value?e.value||null:void 0,compatible:n.value?void 0:null}}return Oe().afterEach(l=>{r(l.query)}),{defaultGridSize:e,gridSizePx:s,isGridView:t,showIncompatible:n,getQuery:a};function r(l){t.value="grid"in l,e.value=[l.grid??""].flat()[0].toLowerCase(),n.value=!("compatible"in l)}}),Ln=B({__name:"AppstoreNavigation",setup(e){const t=ee("settings","appstoreEnabled",!0),n=j(),s=zt(),a=It(),r=$(()=>n.categories),l=$(()=>n.isLoadingCategories),p=_e(),i=Oe(),g=ht("search");ka("f",()=>{g.value?.$refs.inputElement||(gt("toggle-navigation",{open:!0}),window.setTimeout(()=>g.value?.$refs.inputElement?.focus(),400)),g.value?.$refs.inputElement?.focus()},{ctrl:!0,stop:!0,prevent:!0});const h=E("");re(()=>p.query.q,b=>{h.value=[b||""].flat()[0]},{immediate:!0}),an(h,(b,S)=>{if(b.trim()!==S.trim()){if(i.currentRoute.value.name==="apps-discover"||i.currentRoute.value.name==="apps-manage"&&p.params.category==="bundles"){i.push({name:"apps-search",query:{...p.query,q:b.trim()||void 0}});return}i.replace({...p,query:{...p.query,q:b.trim()||void 0}})}},{debounce:500});const d=$(()=>n.apps.find(({level:b})=>b===300)!==void 0);return(b,S)=>(u(),D(o(ua),{"aria-label":o(c)("appstore","Appstore categories")},{search:y(()=>[k(o(da),{ref_key:"search",ref:h,modelValue:h.value,"onUpdate:modelValue":S[0]||(S[0]=R=>h.value=R),label:o(c)("appstore","Search apps…")},null,8,["modelValue","label"])]),list:y(()=>[o(t)?(u(),D(o(J),{key:0,to:{name:"apps-discover"},name:o(W).discover},{icon:y(()=>[k(o(L),{path:o(X).discover},null,8,["path"])]),_:1},8,["name"])):I("",!0),k(o(J),{to:{name:"apps-manage",params:{category:"installed"}},name:o(W).installed},{icon:y(()=>[k(o(L),{path:o(X).installed},null,8,["path"])]),_:1},8,["name"]),k(o(J),{to:{name:"apps-manage",params:{category:"enabled"}},name:o(W).enabled},{icon:y(()=>[k(o(L),{path:o(X).enabled},null,8,["path"])]),_:1},8,["name"]),k(o(J),{to:{name:"apps-manage",params:{category:"disabled"}},name:o(W).disabled},{icon:y(()=>[k(o(L),{path:o(X).disabled},null,8,["path"])]),_:1},8,["name"]),o(s).updateCount>0?(u(),D(o(J),{key:1,to:{name:"apps-manage",params:{category:"updates"}},name:o(W).updates},{counter:y(()=>[k(o(va),{count:o(s).updateCount},null,8,["count"])]),icon:y(()=>[k(o(L),{path:o(X).updates},null,8,["path"])]),_:1},8,["name"])):I("",!0),k(o(J),{to:{name:"apps-bundles"},name:o(W).bundles},{icon:y(()=>[k(o(L),{path:o(X).bundles},null,8,["path"])]),_:1},8,["name"]),k(o(pn)),o(t)&&l.value?(u(),x("li",{key:2,class:w(b.$style.appstoreNavigation__categories_loading)},[k(o(Ie),{size:20,name:o(c)("appstore","Loading categories")},null,8,["name"])],2)):o(t)&&!l.value?(u(),x(M,{key:3},[d.value?(u(),D(o(J),{key:0,id:"app-category-supported",to:{name:"apps-category",params:{category:"supported"},query:o(a).getQuery(!0)},name:o(W).supported},{icon:y(()=>[k(o(L),{path:o(X).supported},null,8,["path"])]),_:1},8,["to","name"])):I("",!0),k(o(J),{id:"app-category-featured",to:{name:"apps-category",params:{category:"featured"},query:o(a).getQuery(!0)},name:o(W).featured},{icon:y(()=>[k(o(L),{path:o(X).featured},null,8,["path"])]),_:1},8,["to","name"]),(u(!0),x(M,null,Z(r.value,R=>(u(),D(o(J),{id:`app-category-${R.id}`,key:R.id,name:R.displayName,to:{name:"apps-category",params:{category:R.id},query:o(a).getQuery(!0)}},{icon:y(()=>[k(o(L),{path:R.icon},null,8,["path"])]),_:2},1032,["id","name","to"]))),128))],64)):I("",!0)]),_:1},8,["aria-label"]))}}),En="_appstoreNavigation__categories_loading_1fsn2_2",Bn={appstoreNavigation__categories_loading:En},Pn={$style:Bn},Nn=q(Ln,[["__cssModules",Pn]]),qn=B({__name:"AppActions",props:{app:{},actions:{},maxInlineActions:{default:1},iconOnly:{type:Boolean}},setup(e){const t=$(()=>e.actions.length<=e.maxInlineActions?e.actions:e.actions.filter(s=>s.inline!==!1).slice(0,e.maxInlineActions)),n=$(()=>e.actions.filter(s=>!t.value.includes(s)));return(s,a)=>(u(),x("div",{class:w(s.$style.appActions)},[(u(!0),x(M,null,Z(t.value,r=>(u(),D(o(ie),{key:r.id,ariaLabel:e.iconOnly?r.label(e.app):void 0,title:e.iconOnly?r.label(e.app):void 0,variant:r.variant,href:"href"in r?r.href(e.app):void 0,to:"to"in r?r.to(e.app):void 0,target:"href"in r?"_blank":void 0,onClick:l=>"callback"in r&&r.callback(e.app)},Me({icon:y(()=>[k(o(L),{path:r.icon},null,8,["path"])]),_:2},[e.iconOnly?void 0:{name:"default",fn:y(()=>[N(v(r.label(e.app)),1)]),key:"0"}]),1032,["ariaLabel","title","variant","href","to","target","onClick"]))),128)),k(o(_a),{forceMenu:""},{default:y(()=>[(u(!0),x(M,null,Z(n.value,r=>(u(),x(M,null,["callback"in r?(u(),D(o(ca),{key:"callback-"+r.id,closeAfterClick:"",variant:r.variant,onClick:l=>r.callback(e.app)},{icon:y(()=>[k(o(L),{path:r.icon},null,8,["path"])]),default:y(()=>[N(" "+v(r.label(e.app)),1)]),_:2},1032,["variant","onClick"])):"href"in r?(u(),D(o(ma),{key:"link-"+r.id,closeAfterClick:"",variant:r.variant,href:r.href(e.app)},{icon:y(()=>[k(o(L),{path:r.icon},null,8,["path"])]),default:y(()=>[N(" "+v(r.label(e.app)),1)]),_:2},1032,["variant","href"])):(u(),D(o(fa),{key:"route-"+r.id,closeAfterClick:"",variant:r.variant,to:r.to(e.app)},{icon:y(()=>[k(o(L),{path:r.icon},null,8,["path"])]),default:y(()=>[N(" "+v(r.label(e.app)),1)]),_:2},1032,["variant","to"]))],64))),256))]),_:1})],2))}}),Mn="_appActions_lrf6h_2",On={appActions:Mn},Gn={$style:On},Ct=q(qn,[["__cssModules",Gn]]),Hn=B({__name:"AppDeployDaemonTab",props:{app:{}},setup(e){const t=E(e.app?.daemon?.deploy_config?.computeDevice?.id!=="cpu"||!1);return(n,s)=>e.app?.daemon?(u(),D(o(Ce),{key:0,id:"daemon",name:o(c)("appstore","Daemon"),order:5},{icon:y(()=>[k(o(L),{path:o(vt),size:24},null,8,["path"])]),default:y(()=>[_("div",{class:w(n.$style.appDeployDaemonTab)},[_("h4",null,v(o(c)("appstore","Deploy Daemon")),1),_("p",null,[_("b",null,v(o(c)("appstore","Type")),1),N(": "+v(e.app?.daemon.accepts_deploy_id),1)]),_("p",null,[_("b",null,v(o(c)("appstore","Name")),1),N(": "+v(e.app?.daemon.name),1)]),_("p",null,[_("b",null,v(o(c)("appstore","Display Name")),1),N(": "+v(e.app?.daemon.display_name),1)]),_("p",null,[_("b",null,v(o(c)("appstore","GPUs support")),1),N(": "+v(t.value),1)]),_("p",null,[_("b",null,v(o(c)("appstore","Compute device")),1),N(": "+v(e.app?.daemon?.deploy_config?.computeDevice?.label),1)])],2)]),_:1},8,["name"])):I("",!0)}}),Zn="_appDeployDaemonTab_1xkhp_2",jn={appDeployDaemonTab:Zn},Un={$style:jn},Fn=q(Hn,[["__cssModules",Un]]);function Qe(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var le=Qe();function lt(e){le=e}var ne={exec:()=>null};function z(e,t=""){let n=typeof e=="string"?e:e.source,s={replace:(a,r)=>{let l=typeof r=="string"?r:r.source;return l=l.replace(G.caret,"$1"),n=n.replace(a,l),s},getRegex:()=>new RegExp(n,t)};return s}var Qn=(()=>{try{return!!new RegExp("(?<=1)(?/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i"),blockquoteBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}>`)},Vn=/^(?:[ \t]*(?:\n|$))+/,Wn=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Xn=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,$e=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Yn=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Ve=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,Lt=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Et=z(Lt).replace(/bull/g,Ve).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),Jn=z(Lt).replace(/bull/g,Ve).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),We=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Kn=/^[^\n]+/,Xe=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,es=z(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",Xe).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),ts=z(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Ve).getRegex(),Le="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",Ye=/|$))/,as=z("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",Ye).replace("tag",Le).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Bt=z(We).replace("hr",$e).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Le).getRegex(),ns=z(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Bt).getRegex(),Je={blockquote:ns,code:Wn,def:es,fences:Xn,heading:Yn,hr:$e,html:as,lheading:Et,list:ts,newline:Vn,paragraph:Bt,table:ne,text:Kn},rt=z("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",$e).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Le).getRegex(),ss={...Je,lheading:Jn,table:rt,paragraph:z(We).replace("hr",$e).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",rt).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Le).getRegex()},ls={...Je,html:z(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",Ye).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:ne,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:z(We).replace("hr",$e).replace("heading",` *#{1,6} *[^ ]`).replace("lheading",Et).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},rs=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,is=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Pt=/^( {2,}|\\)\n(?!\s*$)/,os=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\`+)[^`]+\k(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",Qn?"(?`+)[^`]+\k(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),qt=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,hs=z(qt,"u").replace(/punct/g,ce).getRegex(),gs=z(qt,"u").replace(/punct/g,Nt).getRegex(),Mt="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",ms=z(Mt,"gu").replace(/notPunctSpace/g,Ke).replace(/punctSpace/g,Ee).replace(/punct/g,ce).getRegex(),fs=z(Mt,"gu").replace(/notPunctSpace/g,us).replace(/punctSpace/g,cs).replace(/punct/g,Nt).getRegex(),bs=z("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,Ke).replace(/punctSpace/g,Ee).replace(/punct/g,ce).getRegex(),ks=z(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,ce).getRegex(),_s="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",ys=z(_s,"gu").replace(/notPunctSpace/g,Ke).replace(/punctSpace/g,Ee).replace(/punct/g,ce).getRegex(),ws=z(/\\(punct)/,"gu").replace(/punct/g,ce).getRegex(),vs=z(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),xs=z(Ye).replace("(?:-->|$)","-->").getRegex(),$s=z("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",xs).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Re=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,Ts=z(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",Re).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Ot=z(/^!?\[(label)\]\[(ref)\]/).replace("label",Re).replace("ref",Xe).getRegex(),Gt=z(/^!?\[(ref)\](?:\[\])?/).replace("ref",Xe).getRegex(),As=z("reflink|nolink(?!\\()","g").replace("reflink",Ot).replace("nolink",Gt).getRegex(),it=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,et={_backpedal:ne,anyPunctuation:ws,autolink:vs,blockSkip:ds,br:Pt,code:is,del:ne,delLDelim:ne,delRDelim:ne,emStrongLDelim:hs,emStrongRDelimAst:ms,emStrongRDelimUnd:bs,escape:rs,link:Ts,nolink:Gt,punctuation:ps,reflink:Ot,reflinkSearch:As,tag:$s,text:os,url:ne},Ss={...et,link:z(/^!?\[(label)\]\((.*?)\)/).replace("label",Re).getRegex(),reflink:z(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Re).getRegex()},Pe={...et,emStrongRDelimAst:fs,emStrongLDelim:gs,delLDelim:ks,delRDelim:ys,url:z(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",it).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:z(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},ot=e=>Ds[e];function V(e,t){if(t){if(G.escapeTest.test(e))return e.replace(G.escapeReplace,ot)}else if(G.escapeTestNoEncode.test(e))return e.replace(G.escapeReplaceNoEncode,ot);return e}function pt(e){try{e=encodeURI(e).replace(G.percentDecode,"%")}catch{return null}return e}function ct(e,t){let n=e.replace(G.findPipe,(r,l,p)=>{let i=!1,g=l;for(;--g>=0&&p[g]==="\\";)i=!i;return i?"|":" |"}),s=n.split(G.splitPipe),a=0;if(s[0].trim()||s.shift(),s.length>0&&!s.at(-1)?.trim()&&s.pop(),t)if(s.length>t)s.splice(t);else for(;s.length0?-2:-1}function Is(e,t=0){let n=t,s="";for(let a of e)if(a===" "){let r=4-n%4;s+=" ".repeat(r),n+=r}else s+=a,n++;return s}function ut(e,t,n,s,a){let r=t.href,l=t.title||null,p=e[1].replace(a.other.outputLinkReplace,"$1");s.state.inLink=!0;let i={type:e[0].charAt(0)==="!"?"image":"link",raw:n,href:r,title:l,text:p,tokens:s.inlineTokens(p)};return s.state.inLink=!1,i}function Cs(e,t,n){let s=e.match(n.other.indentCodeCompensation);if(s===null)return t;let a=s[1];return t.split(` `).map(r=>{let l=r.match(n.other.beginningSpace);if(l===null)return r;let[p]=l;return p.length>=a.length?r.slice(a.length):r}).join(` `)}var De=class{options;rules;lexer;constructor(e){this.options=e||le}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?n:he(n,` @@ -57,5 +57,5 @@ ${this.parser.parse(e)} ${e} `}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+` `}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:n}){let s=this.parser.parseInline(n),a=pt(e);if(a===null)return s;e=a;let r='
    ",r}image({href:e,title:t,text:n,tokens:s}){s&&(n=this.parser.parseInline(s,this.parser.textRenderer));let a=pt(e);if(a===null)return V(n);e=a;let r=`${V(n)}{let l=a[r].flat(1/0);n=n.concat(this.walkTokens(l,t))}):a.tokens&&(n=n.concat(this.walkTokens(a.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let s={...n};if(s.async=this.defaults.async||s.async||!1,n.extensions&&(n.extensions.forEach(a=>{if(!a.name)throw new Error("extension name required");if("renderer"in a){let r=t.renderers[a.name];r?t.renderers[a.name]=function(...l){let p=a.renderer.apply(this,l);return p===!1&&(p=r.apply(this,l)),p}:t.renderers[a.name]=a.renderer}if("tokenizer"in a){if(!a.level||a.level!=="block"&&a.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let r=t[a.level];r?r.unshift(a.tokenizer):t[a.level]=[a.tokenizer],a.start&&(a.level==="block"?t.startBlock?t.startBlock.push(a.start):t.startBlock=[a.start]:a.level==="inline"&&(t.startInline?t.startInline.push(a.start):t.startInline=[a.start]))}"childTokens"in a&&a.childTokens&&(t.childTokens[a.name]=a.childTokens)}),s.extensions=t),n.renderer){let a=this.defaults.renderer||new ze(this.defaults);for(let r in n.renderer){if(!(r in a))throw new Error(`renderer '${r}' does not exist`);if(["options","parser"].includes(r))continue;let l=r,p=n.renderer[l],i=a[l];a[l]=(...g)=>{let h=p.apply(a,g);return h===!1&&(h=i.apply(a,g)),h||""}}s.renderer=a}if(n.tokenizer){let a=this.defaults.tokenizer||new De(this.defaults);for(let r in n.tokenizer){if(!(r in a))throw new Error(`tokenizer '${r}' does not exist`);if(["options","rules","lexer"].includes(r))continue;let l=r,p=n.tokenizer[l],i=a[l];a[l]=(...g)=>{let h=p.apply(a,g);return h===!1&&(h=i.apply(a,g)),h}}s.tokenizer=a}if(n.hooks){let a=this.defaults.hooks||new me;for(let r in n.hooks){if(!(r in a))throw new Error(`hook '${r}' does not exist`);if(["options","block"].includes(r))continue;let l=r,p=n.hooks[l],i=a[l];me.passThroughHooks.has(r)?a[l]=g=>{if(this.defaults.async&&me.passThroughHooksRespectAsync.has(r))return(async()=>{let d=await p.call(a,g);return i.call(a,d)})();let h=p.call(a,g);return i.call(a,h)}:a[l]=(...g)=>{if(this.defaults.async)return(async()=>{let d=await p.apply(a,g);return d===!1&&(d=await i.apply(a,g)),d})();let h=p.apply(a,g);return h===!1&&(h=i.apply(a,g)),h}}s.hooks=a}if(n.walkTokens){let a=this.defaults.walkTokens,r=n.walkTokens;s.walkTokens=function(l){let p=[];return p.push(r.call(this,l)),a&&(p=p.concat(a.call(this,l))),p}}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,n)=>{let s={...n},a={...this.defaults,...s},r=this.onError(!!a.silent,!!a.async);if(this.defaults.async===!0&&s.async===!1)return r(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 r(new Error("marked(): input parameter is undefined or null"));if(typeof t!="string")return r(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));if(a.hooks&&(a.hooks.options=a,a.hooks.block=e),a.async)return(async()=>{let l=a.hooks?await a.hooks.preprocess(t):t,p=await(a.hooks?await a.hooks.provideLexer(e):e?F.lex:F.lexInline)(l,a),i=a.hooks?await a.hooks.processAllTokens(p):p;a.walkTokens&&await Promise.all(this.walkTokens(i,a.walkTokens));let g=await(a.hooks?await a.hooks.provideParser(e):e?Q.parse:Q.parseInline)(i,a);return a.hooks?await a.hooks.postprocess(g):g})().catch(r);try{a.hooks&&(t=a.hooks.preprocess(t));let l=(a.hooks?a.hooks.provideLexer(e):e?F.lex:F.lexInline)(t,a);a.hooks&&(l=a.hooks.processAllTokens(l)),a.walkTokens&&this.walkTokens(l,a.walkTokens);let p=(a.hooks?a.hooks.provideParser(e):e?Q.parse:Q.parseInline)(l,a);return a.hooks&&(p=a.hooks.postprocess(p)),p}catch(l){return r(l)}}}onError(e,t){return n=>{if(n.message+=` -Please report this to https://github.com/markedjs/marked.`,e){let s="

    An error occurred:

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

    An error occurred:

    "+V(n.message+"",!0)+"
    ";return t?Promise.resolve(s):s}if(t)return Promise.reject(n);throw n}}},ae=new Ls;function C(e,t){return ae.parse(e,t)}C.options=C.setOptions=function(e){return ae.setOptions(e),C.defaults=ae.defaults,lt(C.defaults),C},C.getDefaults=Qe,C.defaults=le,C.use=function(...e){return ae.use(...e),C.defaults=ae.defaults,lt(C.defaults),C},C.walkTokens=function(e,t){return ae.walkTokens(e,t)},C.parseInline=ae.parseInline,C.Parser=Q,C.parser=Q.parse,C.Renderer=ze,C.TextRenderer=tt,C.Lexer=F,C.lexer=F.lex,C.Tokenizer=De,C.Hooks=me,C.parse=C,C.options,C.setOptions,C.use,C.walkTokens,C.parseInline,Q.parse,F.lex;function Es(e,t){const n=new C.Renderer;return n.blockquote=Ns,n.link=Bs,n.image=Ps,$(()=>{const s=t?.minHeadingLevel??1;n.heading=qs(s);const a=fe(e).trim();return na.sanitize(C(a,{async:!1,renderer:n,gfm:!1,breaks:!1,pedantic:!1}),{ALLOWED_TAGS:["h1","h2","h3","h4","h5","h6","strong","p","a","ul","ol","li","em","del","blockquote"]})})}function Bs({href:e,title:t,text:n}){let s;try{s=new URL(e)}catch{return""}if(s.protocol!=="http:"&&s.protocol!=="https:")return"";let a='
    ",a}function Ps({title:e,text:t}){return t||(e??"")}function Ns({text:e}){return`
    ${e}
    `}function qs(e){return({text:t,depth:n})=>(n=Math.min(6,n+(e-1)),`${t}`)}const Ms=["innerHTML"],Os=B({__name:"MarkdownPreview",props:{text:{},minHeadingLevel:{default:1}},setup(e){const t=Es(()=>e.text,{minHeadingLevel:e.minHeadingLevel});return(n,s)=>(u(),x("div",{class:"settings-markdown",innerHTML:o(t)},null,8,Ms))}}),Ht=q(Os,[["__scopeId","data-v-cf1f9874"]]),Gs=B({__name:"AppDescriptionTab",props:{app:{}},setup(e){return(t,n)=>(u(),D(o(Ce),{id:"desc",name:o(c)("appstore","Description"),order:0},{icon:y(()=>[k(o(L),{path:o(Ha)},null,8,["path"])]),default:y(()=>[_("div",{class:w(t.$style.appDescriptionTab)},[k(Ht,{text:e.app.description,minHeadingLevel:3},null,8,["text"])],2)]),_:1},8,["name"]))}}),Hs="_appDescriptionTab_118mz_2",Zs={appDescriptionTab:Hs},js={$style:Zs},Us=q(Gs,[["__cssModules",js]]),Fs=["title"],Qs=B({__name:"BadgeAppDaemon",props:{daemon:{}},setup(e){return(t,n)=>e.daemon?(u(),x("span",{key:0,class:w(t.$style.appDaemonBadge),title:e.daemon.name},[k(o(L),{path:o(vt),size:20,inline:""},null,8,["path"]),N(" "+v(e.daemon.display_name),1)],10,Fs)):I("",!0)}}),Vs="_appDaemonBadge_1n34s_2",Ws={appDaemonBadge:Vs},Xs={$style:Ws},Zt=q(Qs,[["__cssModules",Xs]]),Ys=["title"],Js=B({__name:"BadgeAppLevel",props:{level:{}},setup(e){const t=e,n=$(()=>t.level===300),s=$(()=>t.level===200),a=$(()=>n.value?_t:je),r=$(()=>n.value?c("appstore","Supported"):c("appstore","Featured")),l=$(()=>n.value?c("appstore","This app is supported via your current Nextcloud subscription."):c("appstore","Featured apps are developed by and within the community. They offer central functionality and are ready for production use."));return(p,i)=>n.value||s.value?(u(),x("span",{key:0,class:w([p.$style.appLevelBadge,{[p.$style.appLevelBadge__supported]:n.value}]),title:l.value},[k(o(L),{path:a.value,size:20,inline:""},null,8,["path"]),N(" "+v(r.value),1)],10,Ys)):I("",!0)}}),Ks="_appLevelBadge_q2et3_2",el="_appLevelBadge__supported_q2et3_15",tl={appLevelBadge:Ks,appLevelBadge__supported:el},al={$style:tl},jt=q(Js,[["__cssModules",al]]),nl=["aria-label","title"],sl=B({__name:"BadgeAppScore",props:{app:{}},setup(e){const t=$(()=>!e.app.shipped&&e.app.ratingNumOverall&&e.app.ratingNumOverall>5),n=$(()=>e.app.ratingOverall??4),s=$(()=>{const p=(n.value*5).toFixed(1);return c("appstore","Community rating: {score}/5",{score:p})}),a=$(()=>Math.floor(n.value*5+.25)),r=$(()=>Math.min(Math.floor((1-n.value)*5+.25),5-a.value)),l=$(()=>a.value+r.value<5);return(p,i)=>t.value?(u(),x("span",{key:0,role:"img","aria-label":s.value,title:s.value,class:w(p.$style.badgeAppScore)},[(u(!0),x(M,null,Z(a.value,g=>(u(),D(o(L),{key:`full-star-${g}`,path:o(je),inline:""},null,8,["path"]))),128)),l.value?(u(),D(o(L),{key:0,path:o(Za),inline:""},null,8,["path"])):I("",!0),(u(!0),x(M,null,Z(r.value,g=>(u(),D(o(L),{key:`empty-star-${g}`,path:o(xt),inline:""},null,8,["path"]))),128))],10,nl)):I("",!0)}}),ll="_badgeAppScore_1t97c_2",rl={badgeAppScore:ll},il={$style:rl},ol=q(sl,[["__cssModules",il]]),pl=new ft({concurrency:3}),Ut=ke("groups",()=>{const e=E(new Map);async function t(r){return await pl.add(()=>a(r))}async function n(r){const l=Ge("/cloud/groups/details");try{const{data:p}=await O.get(l,{params:{search:r.trim(),limit:10}});for(const i of p.ocs.data.groups)e.value.has(i.id)||e.value.set(i.id,{id:i.id,displayName:i.displayname,isNoUser:!0})}catch(p){U.error("Failed to search groups",{error:p})}}function s(r){return e.value.get(r)}return{groups:$(()=>Array.from(e.value.values())),searchGroups:n,getGroupById:s,fetchGroupById:t};async function a(r){return e.value.has(r)||await n(r),e.value.get(r)}});function Ft(e){const t=Ut(),n=E([]);return re(()=>fe(e).groups,async()=>{const s=fe(e).groups;if(s===void 0){n.value=[];return}const a=s.map(l=>t.fetchGroupById(l)),r=await Promise.all(a);n.value=r.filter(Boolean)},{immediate:!0}),dt(n)}const cl={class:"app-details"},ul=["aria-label"],dl=["id"],hl=["aria-labelledby"],gl=["title"],ml=["aria-label"],fl=["href"],bl=B({__name:"AppDetailsTab",props:{app:{}},setup(e){const t=j(),n=Yt(),s=$(()=>e.app.releases?.map(d=>d.lastModified).map(d=>Date.parse(d)).sort().at(-1)),a=$(()=>e.app?[e.app.author].flat().map(h).sort((d,b)=>d.split(" ").at(-1).localeCompare(b.split(" ").at(-1))).join(", "):""),r=$(()=>`https://apps.nextcloud.com/apps/${e.app.id}`),l=Ft(()=>e.app),p=$(()=>{const d=[];return e.app.internal||d.push({id:"appstore",href:r.value,label:c("appstore","View in store")}),e.app.website&&d.push({id:"website",href:e.app.website,label:c("appstore","Visit website")}),e.app.documentation&&(e.app.documentation.user&&d.push({id:"doc-user",href:e.app.documentation.user,label:c("appstore","Usage documentation")}),e.app.documentation.admin&&d.push({id:"doc-admin",href:e.app.documentation.admin,label:c("appstore","Admin documentation")}),e.app.documentation.developer&&d.push({id:"doc-developer",href:e.app.documentation.developer,label:c("appstore","Developer documentation")})),d}),i=$(()=>[e.app.category].flat().map(d=>t.getCategoryById(d)?.displayName??d).join(", ")),g=$(()=>e.app.active&&!Fe(e.app));function h(d){return d["@value"]?d["@value"]:d}return(d,b)=>(u(),D(o(Ce),{id:"details",name:o(c)("appstore","Details"),order:1},{icon:y(()=>[k(o(L),{path:o(ja)},null,8,["path"])]),default:y(()=>[_("div",cl,[_("div",{class:w(d.$style.appstoreDetailsTab__badges)},[k(jt,{level:e.app.level},null,8,["level"]),e.app.app_api&&e.app.daemon?(u(),D(Zt,{key:0,daemon:e.app.daemon},null,8,["daemon"])):I("",!0),k(ol,{app:e.app},null,8,["app"])],2),!e.app.isCompatible&&e.app.missingDependencies&&e.app.missingDependencies.length?(u(),D(o(at),{key:0,type:"error"},{default:y(()=>[N(v(o(c)("appstore","This app cannot be installed because the following dependencies are not fulfilled:"))+" ",1),_("ul",{"aria-label":o(c)("appstore","Missing dependencies"),class:w(d.$style.appstoreDetailsTab__missingDependencies)},[(u(!0),x(M,null,Z(e.app.missingDependencies,(S,R)=>(u(),x("li",{key:R},v(S),1))),128))],10,ul)]),_:1})):I("",!0),g.value?(u(),D(o(at),{key:1,type:"info"},{default:y(()=>[N(v(o(c)("appstore","This app cannot be limited to groups because it provides functionality that is executed before group membership is determined.")),1)]),_:1})):I("",!0),o(l).length?(u(),x("div",{key:2,class:w(d.$style.appstoreDetailsTab__section)},[_("h4",{id:o(n)},v(o(c)("appstore","Limited to groups")),9,dl),_("ul",{"aria-labelledby":o(n),class:w(d.$style.appstoreDetailsTab__sectionDetails)},[(u(!0),x(M,null,Z(o(l),S=>(u(),x("li",{key:S.id,title:S.id},v(S.displayName),9,gl))),128))],10,hl)],2)):I("",!0),s.value&&!e.app.shipped?(u(),x("div",{key:3,class:w(d.$style.appstoreDetailsTab__section)},[_("h4",null,v(o(c)("appstore","Latest updated")),1),k(o(ba),{class:w(d.$style.appstoreDetailsTab__sectionDetails),timestamp:s.value},null,8,["class","timestamp"])],2)):I("",!0),_("div",{class:w(d.$style.appstoreDetailsTab__section)},[_("h4",null,v(o(c)("appstore","Author")),1),_("p",{class:w(d.$style.appstoreDetailsTab__sectionDetails)},v(a.value),3)],2),_("div",{class:w(d.$style.appstoreDetailsTab__section)},[_("h4",null,v(o(c)("appstore","Categories")),1),_("p",{class:w(d.$style.appstoreDetailsTab__sectionDetails)},v(i.value),3)],2),p.value.length>0?(u(),x("div",{key:4,class:w(d.$style.appstoreDetailsTab__section)},[_("h4",null,v(o(c)("appstore","Resources")),1),_("ul",{class:w(d.$style.appstoreDetailsTab__resources),"aria-label":o(c)("appstore","Documentation resources")},[(u(!0),x(M,null,Z(p.value,S=>(u(),x("li",{key:S.id,class:w(d.$style.appstoreDetailsTab__resourcesItem)},[_("a",{class:w(d.$style.appstoreDetailsTab__resourcesLink),href:S.href,target:"_blank",rel:"noreferrer noopener"},v(S.label)+" ↗ ",11,fl)],2))),128))],10,ml)],2)):I("",!0)])]),_:1},8,["name"]))}}),kl="_appstoreDetailsTab__badges_4x76r_2",_l="_appstoreDetailsTab__section_4x76r_8",yl="_appstoreDetailsTab__sectionDetails_4x76r_18",wl="_appstoreDetailsTab__missingDependencies_4x76r_22",vl="_appstoreDetailsTab__resourcesLink_4x76r_28",xl="_appstoreDetailsTab__resourcesItem_4x76r_32",$l={appstoreDetailsTab__badges:kl,appstoreDetailsTab__section:_l,appstoreDetailsTab__sectionDetails:yl,appstoreDetailsTab__missingDependencies:wl,appstoreDetailsTab__resourcesLink:vl,appstoreDetailsTab__resourcesItem:xl},Tl={$style:$l},Al=q(bl,[["__cssModules",Tl]]),Sl=B({__name:"AppReleasesTab",props:{app:{}},setup(e){const t=e,n=$(()=>(t.app.releases??[]).filter(a=>{const r=Object.values(a.translations??{});return r.length>0&&r.some(({changelog:l})=>!!l)}));function s(a){return a.translations[sa()]?.changelog??a.translations.en?.changelog??""}return(a,r)=>n.value.length>0?(u(),D(o(Ce),{key:0,id:"changelog",name:o(c)("appstore","Changelog"),order:2},{icon:y(()=>[k(o(L),{path:o(Ua),size:24},null,8,["path"])]),default:y(()=>[(u(!0),x(M,null,Z(n.value,l=>(u(),x("div",{key:l.version,class:w(a.$style.appReleasesTab)},[_("h3",{class:w(a.$style.appReleasesTab__heading)},v(l.version),3),k(Ht,{class:w(a.$style.appReleasesTab__text),minHeadingLevel:3,text:s(l)},null,8,["class","text"])],2))),128))]),_:1},8,["name"])):I("",!0)}}),Rl="_appReleasesTab__heading_9xawz_2",Dl="_appReleasesTab__text_9xawz_7",zl={appReleasesTab__heading:Rl,appReleasesTab__text:Dl},Il={$style:zl},Cl=q(Sl,[["__cssModules",Il]]),Ll={id:"disable",icon:yt,order:10,enabled:St,label:()=>c("appstore","Disable"),async callback(e){await j().disableApp(e.id)}},El={id:"enable",icon:wt,order:1,variant:"primary",enabled(e){return!pe(e)&&Tt(e)},label:()=>c("appstore","Enable"),async callback(e){await j().enableApp(e.id)}},Bl={id:"force-enable",icon:Fa,order:3,inline:!1,variant:"warning",label:()=>c("appstore","Force enable"),enabled(e){return!pe(e)&&At(e)&&ve(e)},async callback(e){await j().enableApp(e.id,!0)}},Pl={id:"install",icon:Ze,order:5,enabled(e){return pe(e)&&!ve(e)},label:e=>e.app_api?c("appstore","Deploy and enable"):e.needsDownload?c("appstore","Download and enable"):c("appstore","Install and enable"),async callback(e){await j().enableApp(e.id)}},Nl={id:"install-forced",icon:Ze,order:5,inline:!1,enabled(e){return pe(e)&&ve(e)},label:e=>e.app_api?c("appstore","Deploy and force enable"):e.needsDownload?c("appstore","Download and force enable"):c("appstore","Install and force enable"),async callback(e){await j().enableApp(e.id,!0)}},ql=[{id:"rate",icon:xt,order:30,inline:!1,label:()=>c("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:Qa,order:32,inline:!1,label:()=>c("appstore","Report a bug"),enabled(e){return!!e.bugs},href(e){return e.bugs}},{id:"discussion",icon:Va,order:35,inline:!1,label:()=>c("appstore","Ask questions or discuss the app"),enabled(e){return!!e.discussion},href(e){return e.discussion}},{id:"website",icon:Wa,order:38,inline:!1,label:()=>c("appstore","Visit the website"),enabled(e){return!!e.website},href(e){return e.website}}],Ml=Jt(()=>oe(()=>Promise.resolve().then(()=>br),void 0,import.meta.url)),Ol={id:"limit-to-group",icon:Xa,order:16,inline:!1,label:()=>c("appstore","Limit to groups"),enabled:Fe,async callback(e){await kt(Ml,{app:e})}},Gl={id:"remove",order:20,icon:Ya,variant:"error",inline:!1,enabled:$t,label:()=>c("appstore","Remove"),async callback(e){await j().uninstallApp(e.id)}},Hl={id:"update",icon:Ja,variant:"primary",order:0,enabled(e){return yn(e)?e.app_api?e.daemon&&e.daemon?.accepts_deploy_id==="manual-install"?!0:xe().daemonAccessible:!0:!1},label:e=>c("appstore","Update to {version}",{version:e.update}),async callback(e){await zt().updateApp(e.id)}},Zl=[Hl,El,Ll,Bl,Pl,Nl,Gl,Ol,...ql].sort((e,t)=>e.order-t.order);function Qt(e){return $(()=>fe(e)?Zl.filter(t=>t.enabled(fe(e))):[])}function jl(e){const t=E(null),n=$(()=>{let s;return e.value?.app_api?s=Se:s=[e.value?.category??[]].flat().map(a=>X[a]).filter(a=>!!a).at(0)??(e.value?.app_api?Se:Ka),s?``:null});return Kt(async()=>{if(!e.value?.icon)t.value=n.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=n.value,U.error("Could not load app icon",{error:s})}}}),{appIcon:t}}const Ul=B({__name:"AppstoreSidebar",setup(e){const t=_e(),n=Oe(),s=j(),a=It(),r=$(()=>[t.params.id].flat()[0]),l=$(()=>s.getAppById(r.value)??null),{appIcon:p}=jl(l),i=$(()=>l.value?l.value.license?c("appstore","Version {version}, {license}-licensed",{version:l.value.version,license:String(l.value.license).toUpperCase()}):c("appstore","Version {version}",{version:l.value.version}):""),g=E("details");re([l],()=>{g.value="details"});function h(){n.replace({name:t.name,params:{...t.params,id:void 0},query:a.getQuery()})}const d=E(!1),b=$(()=>l.value?.screenshot&&d.value);function S(){if(l.value?.releases&&l.value?.screenshot){const P=new Image;P.onload=()=>{d.value=!0},P.src=l.value.screenshot}}re([l],S),ea(S);const R=Qt(()=>l.value);return(P,Y)=>(u(),D(o(ha),{active:g.value,"onUpdate:active":Y[0]||(Y[0]=T=>g.value=T),class:w([P.$style.appstoreSidebar,{[P.$style.appstoreSidebar_withScreenshot]:b.value}]),background:b.value?l.value.screenshot:void 0,compact:!b.value,name:l.value?.name??r.value,title:l.value?.name??r.value,subname:i.value,subtitle:i.value,onClose:h},Me({default:y(()=>[l.value?(u(),x(M,{key:1},[k(Us,{app:l.value},null,8,["app"]),k(Cl,{app:l.value},null,8,["app"]),k(Al,{app:l.value},null,8,["app"]),l.value.app_api?(u(),D(Fn,{key:0,app:l.value},null,8,["app"])):I("",!0)],64)):(u(),D(o(He),{key:0,name:"No such app"}))]),_:2},[b.value?void 0:{name:"header",fn:y(()=>[k(o(L),{class:w(P.$style.appstoreSidebar__fallbackIcon),svg:o(p)??"",size:64},null,8,["class","svg"])]),key:"0"},l.value?{name:"description",fn:y(()=>[k(Ct,{app:l.value,actions:o(R),iconOnly:"",maxInlineActions:6},null,8,["app","actions"])]),key:"1"}:void 0]),1032,["active","class","background","compact","name","title","subname","subtitle"]))}}),Fl="_appstoreSidebar_withScreenshot_1224s_3",Ql="_appstoreSidebar__fallbackIcon_1224s_9",Vl={appstoreSidebar_withScreenshot:Fl,appstoreSidebar__fallbackIcon:Ql},Wl={$style:Vl},Xl=q(Ul,[["__cssModules",Wl]]),Yl=B({__name:"AppstoreApp",setup(e){const t=_e(),n=j(),s=$(()=>t.params.category?[t.params.category].flat()[0]:t.name==="apps-bundles"?"bundles":t.name==="apps-search"?"search":"discover"),a=$(()=>s.value in W?W[s.value]:n.getCategoryById(s.value)?.displayName??s.value),r=$(()=>`${a.value} - ${c("appstore","App store")}`),l=$(()=>!!t.params.id);return(p,i)=>{const g=ta("router-view");return u(),D(o(oa),{appName:"appstore"},{default:y(()=>[k(Nn),k(o(ia),{class:w(p.$style.appstoreApp__content),pageHeading:o(c)("appstore","App store"),pageTitle:r.value},{default:y(()=>[a.value?(u(),x("h2",{key:0,class:w(p.$style.appstoreApp__heading)},v(a.value),3)):I("",!0),k(g)]),_:1},8,["class","pageHeading","pageTitle"]),l.value?(u(),D(Xl,{key:0})):I("",!0)]),_:1})}}}),Jl="_appstoreApp__content_1pi7x_2",Kl="_appstoreApp__heading_1pi7x_7",er={appstoreApp__content:Jl,appstoreApp__heading:Kl},tr={$style:er},ar=q(Yl,[["__cssModules",tr]]),nr=ee("appstore","appstoreEnabled",!0),sr=()=>oe(()=>import("./AppstoreDiscover-WjjPyuuv.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),lr=()=>oe(()=>import("./AppstoreSearch-CPzSIsIZ.chunk.mjs").then(e=>e.c),__vite__mapDeps([75,6,7,4,1,2,5,8,9,18,19,15,16,32,33,3,10,25,13,14,26,27,23,24,28,29,30,31,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,76,73,74]),import.meta.url),rr=()=>oe(()=>Promise.resolve().then(()=>ii),void 0,import.meta.url),ir=()=>oe(()=>import("./AppstoreBrowse-DO4WaaxR.chunk.mjs"),__vite__mapDeps([77,6,7,4,1,2,5,8,9,18,19,15,16,75,32,33,3,10,25,13,14,26,27,23,24,28,29,30,31,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,76,73,74,11,22,70,71,78]),import.meta.url),or=()=>oe(()=>import("./AppstoreSearch-CPzSIsIZ.chunk.mjs").then(e=>e.d),__vite__mapDeps([75,6,7,4,1,2,5,8,9,18,19,15,16,32,33,3,10,25,13,14,26,27,23,24,28,29,30,31,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,76,73,74]),import.meta.url),pr=[{path:"/:index(index.php/)?settings/apps",name:"apps",redirect:nr?{name:"apps-discover"}:{name:"apps-manage",params:{category:"installed"}},children:[{path:"discover/:id?",name:"apps-discover",component:sr},{path:"bundles/:id?",name:"apps-bundles",component:rr},{path:":category(installed|enabled|disabled|updates)/:id?",name:"apps-manage",component:lr},{path:":category/:id?",name:"apps-category",component:ir},{path:"search/:id?",name:"apps-search",component:or}]}],cr=la({history:ra(K("")),linkActiveClass:"active",routes:pr}),ur=Vt(),Ae=aa(ar);Ae.config.idPrefix="appstore",Ae.use(ur),Ae.use(cr),Ae.mount("#content");const dr=B({__name:"LimitToGroupDialog",props:{app:{}},emits:["close"],setup(e,{emit:t}){const n=t,s=j(),a=Ut(),r=E(!1),l=E([]);re(()=>e.app,()=>{l.value=(e.app.groups??[]).map(d=>{const b=a.getGroupById(d);return b||a.searchGroups(d),b??{id:d,displayName:d,isNoUser:!0}})},{immediate:!0});const p=$(()=>a.groups.filter(d=>!l.value.includes(d))),i=nn(a.searchGroups,400);async function g(){try{r.value=!0,await s.limitAppToGroups(e.app.id,l.value.map(d=>d.id)),n("close")}finally{r.value=!1}}async function h(){try{r.value=!0,await s.limitAppToGroups(e.app.id,[]),n("close")}finally{r.value=!1}}return(d,b)=>(u(),D(o(bt),{isForm:"",name:o(c)("appstore","Limit to groups"),onSubmit:g,onReset:h},{actions:y(()=>[k(o(ie),{disabled:r.value,type:"reset"},{default:y(()=>[N(v(o(c)("appstore","Reset limitation")),1)]),_:1},8,["disabled"]),k(o(ie),{disabled:r.value,type:"submit",variant:"primary"},Me({default:y(()=>[N(" "+v(o(c)("appstore","Save")),1)]),_:2},[r.value?{name:"icon",fn:y(()=>[k(o(Ie))]),key:"0"}:void 0]),1032,["disabled"])]),default:y(()=>[_("p",null,v(o(c)("appstore","Restrict the usage of {app} to members of the following groups.",{app:e.app.name})),1),k(o(ga),{modelValue:l.value,"onUpdate:modelValue":b[0]||(b[0]=S=>l.value=S),class:w(d.$style.limitToGroupDialog__input),keepOpen:"",labelOutside:"",multiple:"",options:p.value,onSearch:o(i)},null,8,["modelValue","class","options","onSearch"])]),_:1},8,["name"]))}}),hr="_limitToGroupDialog__input_sofp5_2",gr={limitToGroupDialog__input:hr},mr={$style:gr},fr=q(dr,[["__cssModules",mr]]),br=Object.freeze(Object.defineProperty({__proto__:null,default:fr},Symbol.toStringTag,{value:"Module"})),kr=["src","height","width"],_r=B({__name:"AppIcon",props:{app:{},noFallback:{type:Boolean},size:{default:20}},setup(e){const t=$(()=>e.app.icon?.endsWith(".svg")),n=E("");return re(()=>e.app.icon,async()=>{if(n.value="",e.app.icon?.endsWith(".svg")){const s=await fetch(e.app.icon);s.ok&&(n.value=await s.text())}},{immediate:!0}),(s,a)=>(u(),x("span",{class:w(s.$style.appIcon)},[n.value?(u(),D(o(L),{key:0,size:e.size,svg:n.value},null,8,["size","svg"])):e.app.icon&&!t.value?(u(),x("img",{key:1,class:w(s.$style.appIcon__image),alt:"",src:e.app.icon,height:e.size,width:e.size},null,10,kr)):e.noFallback?I("",!0):(u(),D(o(L),{key:2,path:o(Se),size:e.size},null,8,["path","size"]))],2))}}),yr="_appIcon_mcsmb_2",wr="_appIcon__image_mcsmb_7",vr={appIcon:yr,appIcon__image:wr},xr={$style:vr},$r=q(_r,[["__cssModules",xr]]),Tr={key:0,class:"hidden-visually"},Ar={class:"hidden-visually"},Sr={key:0},Rr={key:1},Dr=["title"],zr={key:0,"aria-hidden":"true"},Ir=B({__name:"AppTableRow",props:{app:{},isNarrow:{type:Boolean},isWide:{type:Boolean}},setup(e){const t=_e(),n=$(()=>({...t,params:{...t.params,id:e.app.id},query:{...t.query}})),s=$(()=>({id:"details",order:99,enabled:()=>!0,label:()=>c("appstore","Show details"),icon:en,to:()=>n.value,inline:!1})),a=Ft(()=>e.app),r=Qt(()=>e.app),l=$(()=>[...r.value,s.value]);return(p,i)=>(u(),x("tr",{class:w(p.$style.appTableRow)},[_("td",{class:w(p.$style.appTableRow__nameCell)},[k(o(ie),{alignment:"start",title:o(c)("appstore","Show details"),to:n.value,variant:"tertiary-no-background",wide:""},{icon:y(()=>[e.app.loading?(u(),D(o(Ie),{key:0,size:24})):(u(),D($r,{key:1,app:e.app,size:24},null,8,["app"]))]),default:y(()=>[N(" "+v(e.app.name)+" ",1),e.app.loading?(u(),x("span",Tr,"("+v(o(c)("appstore","is loading…"))+")",1)):I("",!0),_("span",Ar,"("+v(o(c)("appstore","Show details"))+")",1)]),_:1},8,["title","to"])],2),_("td",null,[_("span",{class:w(p.$style.appTableRow__versionCell)},v(e.app.version),3)]),e.isNarrow?I("",!0):(u(),x("td",Sr,[_("div",{class:w(p.$style.appTableRow__levelCell)},[e.app.level?(u(),D(jt,{key:0,level:e.app.level},null,8,["level"])):I("",!0),"daemon"in e.app&&e.app.daemon?(u(),D(Zt,{key:1,daemon:e.app.daemon},null,8,["daemon"])):I("",!0)],2)])),e.isWide?(u(),x("td",Rr,[o(a).length>0?(u(),x("ul",{key:0,class:w(p.$style.appTableRow__groupsCell),title:o(a).map(g=>g.displayName).join(", ")},[(u(!0),x(M,null,Z(o(a),(g,h)=>(u(),x(M,{key:g.id},[h===3?(u(),x("li",zr," … ")):I("",!0),_("li",{class:w({"hidden-visually":h>2})},[k(o(ya),{text:g.displayName,noClose:""},null,8,["text"])],2)],64))),128))],10,Dr)):I("",!0)])):I("",!0),_("td",null,[_("div",{class:w(p.$style.appTableRow__actionsCell)},[k(Ct,{class:w(p.$style.appTableRow__actionsCellActions),app:e.app,actions:l.value,iconOnly:e.isNarrow},null,8,["class","app","actions","iconOnly"])],2)])],2))}}),Cr="_appTableRow_yekky_2",Lr="_appTableRow__nameCell_yekky_11",Er="_appTableRow__levelCell_yekky_16",Br="_appTableRow__versionCell_yekky_22",Pr="_appTableRow__groupsCell_yekky_26",Nr="_appTableRow__actionsCell_yekky_31",qr="_appTableRow__actionsCellActions_yekky_37",Mr={appTableRow:Cr,appTableRow__nameCell:Lr,appTableRow__levelCell:Er,appTableRow__versionCell:Br,appTableRow__groupsCell:Pr,appTableRow__actionsCell:Nr,appTableRow__actionsCellActions:qr},Or={$style:Mr},Gr=q(Ir,[["__cssModules",Or]]),Hr={hidden:""},Zr={key:0},jr={key:1},Ur=B({__name:"AppTable",props:{apps:{}},setup(e){const t=ht("table"),{width:n}=sn(t),s=$(()=>n.value<768),a=$(()=>n.value>=1280);return(r,l)=>(u(),x("table",{ref:"table",class:w([r.$style.appTable,{[r.$style.appTable_narrow]:s.value,[r.$style.appTable_wide]:a.value}])},[_("colgroup",null,[_("col",{class:w(r.$style.appTable__colName)},null,2),_("col",{class:w(r.$style.appTable__colVersion)},null,2),s.value?I("",!0):(u(),x("col",{key:0,class:w(r.$style.appTable__colSupport)},null,2)),a.value?(u(),x("col",{key:1,class:w(r.$style.appTable__colGroups)},null,2)):I("",!0),_("col",{class:w(r.$style.appTable__colActions)},null,2)]),_("thead",Hr,[_("tr",null,[_("th",null,v(o(c)("appstore","App name")),1),_("th",null,v(o(c)("appstore","Version")),1),s.value?I("",!0):(u(),x("th",Zr,v(o(c)("appstore","Support level")),1)),a.value?(u(),x("th",jr,v(o(c)("appstore","Groups")),1)):I("",!0),_("th",null,v(o(c)("appstore","Actions")),1)])]),_("tbody",null,[(u(!0),x(M,null,Z(e.apps,p=>(u(),D(Gr,{key:p.id,app:p,isNarrow:s.value,isWide:a.value},null,8,["app","isNarrow","isWide"]))),128))])],2))}}),Fr="_appTable_ss46x_2",Qr="_appTable__colName_ss46x_7",Vr="_appTable_narrow_ss46x_11",Wr="_appTable_wide_ss46x_15",Xr="_appTable__colSupport_ss46x_19",Yr="_appTable__colActions_ss46x_27",Jr={appTable:Fr,appTable__colName:Qr,appTable_narrow:Vr,appTable_wide:Wr,appTable__colSupport:Xr,appTable__colActions:Yr},Kr={$style:Jr},ei=q(Ur,[["__cssModules",Kr]]),ti=B({__name:"AppstoreBundles",setup(e){const t=j(),n=$(()=>t.bundles.map(l=>({...l,apps:l.appIdentifiers.map(p=>t.apps.find(i=>i.id===p)).filter(Boolean),isEnabling:!1})));function s(l){return l.appIdentifiers.every(p=>{const i=t.apps.find(g=>g.id===p);return i&&(i.active||Tt(i))})}function a(l){return l.appIdentifiers.every(p=>{const i=t.apps.find(g=>g.id===p);return i&&i.active})}async function r(l){l.isEnabling=!0,await t.enableBundle(l.id),l.isEnabling=!1}return(l,p)=>o(t).isLoadingApps?(u(),D(o(He),{key:0,name:o(c)("appstore","Loading app list")},{icon:y(()=>[k(o(Ie),{size:64})]),_:1},8,["name"])):(u(!0),x(M,{key:1},Z(n.value,i=>(u(),x("section",{key:i.id},[_("div",{class:w(l.$style.appstoreBundles__header)},[_("h3",null,v(i.name),1),a(i)?I("",!0):(u(),D(o(ie),{key:0,disabled:!s(i),variant:"primary",onClick:g=>r(i)},{icon:y(()=>[k(o(L),{path:o(tn)},null,8,["path"])]),default:y(()=>[N(" "+v(o(c)("appstore","Download and enable all")),1)]),_:1},8,["disabled","onClick"]))],2),k(ei,{class:w(l.$style.appstoreBundles__appTable),apps:i.apps},null,8,["class","apps"])]))),128))}}),ai="_appstoreBundles__header_oplvy_2",ni="_appstoreBundles__appTable_oplvy_11",si={appstoreBundles__header:ai,appstoreBundles__appTable:ni},li={$style:si},ri=q(ti,[["__cssModules",li]]),ii=Object.freeze(Object.defineProperty({__proto__:null,default:ri},Symbol.toStringTag,{value:"Module"}));export{Ki as A,ol as B,St as a,It as b,pe as c,ei as d,jt as e,Zt as f,U as l,ve as n,j as u}; //# sourceMappingURL=appstore-main.mjs.map diff --git a/dist/common-NcTextArea-Dxzj4zdb-DIo27L88.chunk.css b/dist/common-NcTextArea-Dxzj4zdb-B-B2llha.chunk.css similarity index 71% rename from dist/common-NcTextArea-Dxzj4zdb-DIo27L88.chunk.css rename to dist/common-NcTextArea-Dxzj4zdb-B-B2llha.chunk.css index 40137ccbda4e2..f3be09ecbe8f4 100644 --- a/dist/common-NcTextArea-Dxzj4zdb-DIo27L88.chunk.css +++ b/dist/common-NcTextArea-Dxzj4zdb-B-B2llha.chunk.css @@ -1,7 +1,7 @@ -.material-design-icon[data-v-6a2b8de0]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.nc-button-group-base>div[data-v-6a2b8de0]{text-align:center;color:var(--color-text-maxcontrast)}.nc-button-group-base ul.nc-button-group-content[data-v-6a2b8de0]{display:flex;gap:4px;justify-content:space-between}.nc-button-group-base ul.nc-button-group-content li[data-v-6a2b8de0-s]{flex:1 1}.nc-button-group-base ul.nc-button-group-content[data-v-6a2b8de0] .action-button{padding:0!important;width:100%;display:flex;justify-content:center}.nc-button-group-base ul.nc-button-group-content[data-v-6a2b8de0] .action-button.action-button--active{background-color:var(--color-primary-element);border-radius:var(--border-radius-element);color:var(--color-primary-element-text)}.nc-button-group-base ul.nc-button-group-content[data-v-6a2b8de0] .action-button.action-button--active:hover,.nc-button-group-base ul.nc-button-group-content[data-v-6a2b8de0] .action-button.action-button--active:focus,.nc-button-group-base ul.nc-button-group-content[data-v-6a2b8de0] .action-button.action-button--active:focus-within{background-color:var(--color-primary-element-hover)}.nc-button-group-base ul.nc-button-group-content[data-v-6a2b8de0] .action-button .action-button__pressed-icon{display:none}.material-design-icon[data-v-1009e96c]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-caption[data-v-1009e96c]{color:var(--color-text-maxcontrast);line-height:var(--default-clickable-area);white-space:nowrap;text-overflow:ellipsis;box-shadow:none!important;-webkit-user-select:none;user-select:none;pointer-events:none;margin-inline-start:12px;padding-inline-end:14px;height:var(--default-clickable-area);display:flex;align-items:center}.material-design-icon[data-v-2947bc3b]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}li.action[data-v-2947bc3b]:hover,li.action.active[data-v-2947bc3b]{border-radius:6px;padding:0}li.action[data-v-2947bc3b]:hover{background-color:var(--color-background-hover)}.action--disabled[data-v-2947bc3b]{pointer-events:none;opacity:.5}.action--disabled[data-v-2947bc3b]:hover,.action--disabled[data-v-2947bc3b]:focus{cursor:default;opacity:.5}.action--disabled[data-v-2947bc3b] *{opacity:1!important}.action-checkbox[data-v-2947bc3b]{display:flex;align-items:flex-start;width:100%;height:auto;margin:0;padding:0;padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2);box-sizing:border-box;cursor:pointer;white-space:nowrap;color:var(--color-main-text);border:0;border-radius:0;background-color:transparent;box-shadow:none;font-weight:var(--font-weight-element, normal);font-size:var(--default-font-size);line-height:var(--default-clickable-area)}.action-checkbox>span[data-v-2947bc3b]{cursor:pointer;white-space:nowrap}.action-checkbox__icon[data-v-2947bc3b]{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1;background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px;background-repeat:no-repeat}.action-checkbox[data-v-2947bc3b] .material-design-icon{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1}.action-checkbox[data-v-2947bc3b] .material-design-icon .material-design-icon__svg{vertical-align:middle}.action-checkbox__longtext-wrapper[data-v-2947bc3b],.action-checkbox__longtext[data-v-2947bc3b]{max-width:220px;line-height:1.6em;padding:calc((var(--default-clickable-area) - 1.6em) / 2) 0;cursor:pointer;text-align:start;overflow:hidden;text-overflow:ellipsis}.action-checkbox__longtext[data-v-2947bc3b]{cursor:pointer;white-space:pre-wrap!important}.action-checkbox__name[data-v-2947bc3b]{font-weight:var(--font-weight-heading, bold);text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:100%;display:block}.action-checkbox__description[data-v-2947bc3b]{display:block;white-space:pre-wrap;font-size:var(--font-size-small);font-weight:var(--font-weight-default, normal);line-height:var(--default-line-height);color:var(--color-text-maxcontrast);cursor:pointer}.action-checkbox__menu-icon[data-v-2947bc3b]{margin-inline:auto calc((var(--default-clickable-area) - 16px) / 2 * -1)}.action[data-v-2947bc3b]:has(:focus-visible){outline:2px solid currentColor}.action-checkbox__icon[data-v-2947bc3b]{color:var(--color-primary-element)}.action-checkbox__input[data-v-2947bc3b]{width:20px;height:20px;margin:auto;position:absolute;z-index:-1;opacity:0!important}.material-design-icon[data-v-6c208ddd]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}li.action[data-v-6c208ddd]:hover,li.action.active[data-v-6c208ddd]{border-radius:6px;padding:0}li.action[data-v-6c208ddd]:hover{background-color:var(--color-background-hover)}.action--disabled[data-v-6c208ddd]{pointer-events:none;opacity:.5}.action--disabled[data-v-6c208ddd]:hover,.action--disabled[data-v-6c208ddd]:focus{cursor:default;opacity:.5}.action--disabled[data-v-6c208ddd] *{opacity:1!important}.action-radio[data-v-6c208ddd]{display:flex;align-items:flex-start;width:100%;height:auto;margin:0;padding:0;padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2);box-sizing:border-box;cursor:pointer;white-space:nowrap;color:var(--color-main-text);border:0;border-radius:0;background-color:transparent;box-shadow:none;font-weight:var(--font-weight-element, normal);font-size:var(--default-font-size);line-height:var(--default-clickable-area)}.action-radio>span[data-v-6c208ddd]{cursor:pointer;white-space:nowrap}.action-radio__icon[data-v-6c208ddd]{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1;background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px;background-repeat:no-repeat}.action-radio[data-v-6c208ddd] .material-design-icon{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1}.action-radio[data-v-6c208ddd] .material-design-icon .material-design-icon__svg{vertical-align:middle}.action-radio__longtext-wrapper[data-v-6c208ddd],.action-radio__longtext[data-v-6c208ddd]{max-width:220px;line-height:1.6em;padding:calc((var(--default-clickable-area) - 1.6em) / 2) 0;cursor:pointer;text-align:start;overflow:hidden;text-overflow:ellipsis}.action-radio__longtext[data-v-6c208ddd]{cursor:pointer;white-space:pre-wrap!important}.action-radio__name[data-v-6c208ddd]{font-weight:var(--font-weight-heading, bold);text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:100%;display:block}.action-radio__description[data-v-6c208ddd]{display:block;white-space:pre-wrap;font-size:var(--font-size-small);font-weight:var(--font-weight-default, normal);line-height:var(--default-line-height);color:var(--color-text-maxcontrast);cursor:pointer}.action-radio__menu-icon[data-v-6c208ddd]{margin-inline:auto calc((var(--default-clickable-area) - 16px) / 2 * -1)}.action[data-v-6c208ddd]:has(:focus-visible){outline:2px solid currentColor}.action-radio__icon[data-v-6c208ddd]{color:var(--color-primary-element)}.action-radio__input[data-v-6c208ddd]{width:20px;height:20px;margin:auto;position:absolute;z-index:-1;opacity:0!important}.material-design-icon[data-v-30af16d1]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}button[data-v-30af16d1]:not(.button-vue),input[data-v-30af16d1]:not([type=range]),textarea[data-v-30af16d1]{margin:0;padding:7px 6px;cursor:text;color:var(--color-main-text);border:1px solid var(--color-border-dark);border-radius:var(--border-radius-element);outline:none;background-color:var(--color-main-background);font-size:13px}button[data-v-30af16d1]:not(.button-vue):not(:disabled):not(.primary):hover,button[data-v-30af16d1]:not(.button-vue):not(:disabled):not(.primary):focus,button:not(.button-vue):not(:disabled):not(.primary).active[data-v-30af16d1],input[data-v-30af16d1]:not([type=range]):not(:disabled):not(.primary):hover,input[data-v-30af16d1]:not([type=range]):not(:disabled):not(.primary):focus,input:not([type=range]):not(:disabled):not(.primary).active[data-v-30af16d1],textarea[data-v-30af16d1]:not(:disabled):not(.primary):hover,textarea[data-v-30af16d1]:not(:disabled):not(.primary):focus,textarea:not(:disabled):not(.primary).active[data-v-30af16d1]{border-color:var(--color-primary-element);outline:none}button[data-v-30af16d1]:not(.button-vue):not(:disabled):not(.primary):active,input[data-v-30af16d1]:not([type=range]):not(:disabled):not(.primary):active,textarea[data-v-30af16d1]:not(:disabled):not(.primary):active{color:var(--color-main-text);outline:none;background-color:var(--color-main-background)}button[data-v-30af16d1]:not(.button-vue):disabled,input[data-v-30af16d1]:not([type=range]):disabled,textarea[data-v-30af16d1]:disabled{cursor:default;opacity:.5;color:var(--color-text-maxcontrast);background-color:var(--color-background-dark)}button[data-v-30af16d1]:not(.button-vue):required,input[data-v-30af16d1]:not([type=range]):required,textarea[data-v-30af16d1]:required{box-shadow:none}button[data-v-30af16d1]:not(.button-vue):invalid,input[data-v-30af16d1]:not([type=range]):invalid,textarea[data-v-30af16d1]:invalid{border-color:var(--color-border-error, var(--color-error));box-shadow:none!important}button:not(.button-vue).primary[data-v-30af16d1],input:not([type=range]).primary[data-v-30af16d1],textarea.primary[data-v-30af16d1]{cursor:pointer;color:var(--color-primary-element-text);border-color:var(--color-primary-element);background-color:var(--color-primary-element)}button:not(.button-vue).primary[data-v-30af16d1]:not(:disabled):hover,button:not(.button-vue).primary[data-v-30af16d1]:not(:disabled):focus,button:not(.button-vue).primary[data-v-30af16d1]:not(:disabled):active,input:not([type=range]).primary[data-v-30af16d1]:not(:disabled):hover,input:not([type=range]).primary[data-v-30af16d1]:not(:disabled):focus,input:not([type=range]).primary[data-v-30af16d1]:not(:disabled):active,textarea.primary[data-v-30af16d1]:not(:disabled):hover,textarea.primary[data-v-30af16d1]:not(:disabled):focus,textarea.primary[data-v-30af16d1]:not(:disabled):active{border-color:var(--color-primary-element-light);background-color:var(--color-primary-element-light)}button:not(.button-vue).primary[data-v-30af16d1]:not(:disabled):active,input:not([type=range]).primary[data-v-30af16d1]:not(:disabled):active,textarea.primary[data-v-30af16d1]:not(:disabled):active{color:var(--color-primary-element-text-dark)}button:not(.button-vue).primary[data-v-30af16d1]:disabled,input:not([type=range]).primary[data-v-30af16d1]:disabled,textarea.primary[data-v-30af16d1]:disabled{cursor:default;color:var(--color-primary-element-text-dark);background-color:var(--color-primary-element)}li.action[data-v-30af16d1]:hover,li.action.active[data-v-30af16d1]{border-radius:6px;padding:0}li.action[data-v-30af16d1]:hover{background-color:var(--color-background-hover)}.action--disabled[data-v-30af16d1]{pointer-events:none;opacity:.5}.action--disabled[data-v-30af16d1]:hover,.action--disabled[data-v-30af16d1]:focus{cursor:default;opacity:.5}.action--disabled[data-v-30af16d1] *{opacity:1!important}.action-text-editable[data-v-30af16d1]{display:flex;align-items:flex-start;width:100%;height:auto;margin:0;padding:0;cursor:pointer;white-space:nowrap;color:var(--color-main-text);border:0;border-radius:0;background-color:transparent;box-shadow:none;font-weight:var(--font-weight-default, normal);line-height:var(--default-clickable-area)}.action-text-editable>span[data-v-30af16d1]{cursor:pointer;white-space:nowrap}.action-text-editable__icon[data-v-30af16d1]{min-width:0;min-height:0;padding:calc(var(--default-clickable-area) / 2) 0 calc(var(--default-clickable-area) / 2) var(--default-clickable-area);background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px}.action-text-editable[data-v-30af16d1] .material-design-icon{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1}.action-text-editable[data-v-30af16d1] .material-design-icon .material-design-icon__svg{vertical-align:middle}.action-text-editable__form[data-v-30af16d1]{display:flex;flex:1 1 auto;flex-direction:column;position:relative;margin:4px 0;padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2)}.action-text-editable__submit[data-v-30af16d1]{position:absolute;inset-inline-start:0;top:auto;width:1px;height:1px;overflow:hidden;z-index:-1;opacity:0}.action-text-editable__label[data-v-30af16d1]{display:flex;align-items:center;justify-content:center;position:absolute;inset-inline-end:calc((var(--default-clickable-area) - 16px) / 2 + 1px);bottom:1px;width:calc(var(--default-clickable-area) - 8px);height:calc(var(--default-clickable-area) - 8px);box-sizing:border-box;margin:0;padding:7px 6px;border:0;border-radius:50%;background-color:var(--color-main-background);background-clip:padding-box}.action-text-editable__label[data-v-30af16d1],.action-text-editable__label[data-v-30af16d1] *{cursor:pointer}.action-text-editable__textarea[data-v-30af16d1]{flex:1 1 auto;color:inherit;border-color:var(--color-border-maxcontrast);min-height:calc(var(--default-clickable-area) * 2 - 8px);max-height:calc(var(--default-clickable-area) * 3 - 8px);min-width:calc(var(--default-clickable-area) * 4);width:100%!important;margin:0}.action-text-editable__textarea[data-v-30af16d1]:disabled{cursor:default}.action-text-editable__textarea:not(:active):not(:hover):not(:focus):invalid+.action-text-editable__label[data-v-30af16d1]{background-color:var(--color-error)}.action-text-editable__textarea:not(:active):not(:hover):not(:focus):not(:disabled)+.action-text-editable__label[data-v-30af16d1]:active,.action-text-editable__textarea:not(:active):not(:hover):not(:focus):not(:disabled)+.action-text-editable__label[data-v-30af16d1]:hover,.action-text-editable__textarea:not(:active):not(:hover):not(:focus):not(:disabled)+.action-text-editable__label[data-v-30af16d1]:focus{background-color:var(--color-primary-element);color:var(--color-primary-element-text)}.action-text-editable__textarea:active:not(:disabled)+.action-text-editable__label[data-v-30af16d1],.action-text-editable__textarea:hover:not(:disabled)+.action-text-editable__label[data-v-30af16d1],.action-text-editable__textarea:focus:not(:disabled)+.action-text-editable__label[data-v-30af16d1]{z-index:2;border-color:var(--color-primary-element);border-inline-start-color:transparent}li:last-child>.action-text-editable[data-v-30af16d1]{margin-bottom:calc((var(--default-clickable-area) - 16px) / 2 - 4px)}li:first-child>.action-text-editable[data-v-30af16d1]{margin-top:calc((var(--default-clickable-area) - 16px) / 2 - 4px)}.material-design-icon[data-v-5a15295d]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-toggle-wrapper[data-v-5a15295d]{position:absolute;top:var(--app-navigation-padding);inset-inline-end:calc(0px - var(--app-navigation-padding));margin-inline-end:calc(-1 * var(--default-clickable-area))}button.app-navigation-toggle[data-v-5a15295d]{background-color:var(--color-main-background)}.app-navigation,.app-content{--app-navigation-padding: calc(var(--default-grid-baseline, 4px) * 2)}.material-design-icon[data-v-104ef656]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation[data-v-104ef656]{--color-text-maxcontrast: var(--color-text-maxcontrast-background-blur, var(--color-text-maxcontrast-default));transition:transform var(--animation-quick),margin var(--animation-quick);width:300px;--app-navigation-max-width: calc(100vw - (var(--app-navigation-padding) + var(--default-clickable-area) + var(--default-grid-baseline)));max-width:var(--app-navigation-max-width);position:relative;top:0;inset-inline-start:0;padding:0;z-index:1800;height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;flex-grow:0;flex-shrink:0;background-color:transparent}.app-navigation--legacy[data-v-104ef656]{background-color:var(--color-main-background-blur, var(--color-main-background));-webkit-backdrop-filter:var(--filter-background-blur, none);backdrop-filter:var(--filter-background-blur, none)}.app-navigation--closed[data-v-104ef656]{margin-inline-start:calc(-1*min(300px,var(--app-navigation-max-width)))}.app-navigation__search[data-v-104ef656]{width:100%}.app-navigation__body[data-v-104ef656]{overflow-y:scroll}.app-navigation__content>ul[data-v-104ef656]{position:relative;width:100%;overflow-x:hidden;overflow-y:auto;display:flex;flex-direction:column;gap:var(--default-grid-baseline, 4px);padding:var(--app-navigation-padding)}.app-navigation .app-navigation__list[data-v-104ef656]{height:100%}.app-navigation__body--no-list[data-v-104ef656]{flex:1 1 auto;overflow:auto;height:100%}.app-navigation__content[data-v-104ef656]{height:100%;display:flex;flex-direction:column}[data-themes*=highcontrast] .app-navigation[data-v-104ef656]{border-inline-end:1px solid var(--color-border)}@media only screen and (width<1024px){.app-navigation[data-v-104ef656]{position:absolute;border-inline-end:1px solid var(--color-border);background-color:var(--color-main-background-blur, var(--color-main-background));-webkit-backdrop-filter:var(--filter-background-blur, none);backdrop-filter:var(--filter-background-blur, none)}}@media only screen and (max-width:512px){.app-navigation[data-v-104ef656]{z-index:1400}}.material-design-icon[data-v-d72957ed]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-list[data-v-d72957ed]{position:relative;width:100%;overflow-x:hidden;overflow-y:auto;display:flex;flex-direction:column;gap:var(--default-grid-baseline, 4px);padding:var(--app-navigation-padding)}.material-design-icon[data-v-f0e411c2]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-caption[data-v-f0e411c2]{display:flex;justify-content:space-between}.app-navigation-caption--heading[data-v-f0e411c2]{padding:var(--app-navigation-padding)}.app-navigation-caption--heading[data-v-f0e411c2]:not(:first-child):not(:last-child){padding:0 var(--app-navigation-padding)}.app-navigation-caption__name[data-v-f0e411c2]{font-weight:var(--font-weight-heading, bold);color:var(--color-main-text);font-size:var(--default-font-size);line-height:var(--default-clickable-area);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-shadow:none!important;flex-shrink:0;padding-block:0;padding-inline:calc(var(--default-grid-baseline, 4px) * 2) 0;margin-top:0;margin-bottom:var(--default-grid-baseline)}.app-navigation-caption__actions[data-v-f0e411c2]{flex:0 0 var(--default-clickable-area)}.app-navigation-caption[data-v-f0e411c2]:not(:first-child){margin-top:calc(var(--default-clickable-area) / 2)}.material-design-icon[data-v-04a313f4]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-entry__icon-bullet[data-v-04a313f4]{display:block;padding:calc((var(--default-clickable-area) - 16px) / 2 + 1px)}.app-navigation-entry__icon-bullet div[data-v-04a313f4]{width:14px;height:14px;cursor:pointer;transition:background .1s ease-in-out;border:none;border-radius:50%}.material-design-icon[data-v-acf5ed2f]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.icon-collapse[data-v-acf5ed2f]{position:relative;inset-inline-end:0}.icon-collapse[data-v-acf5ed2f]:hover{background-color:var(--color-background-dark)!important}.icon-collapse--active[data-v-acf5ed2f]:hover{background-color:var(--color-primary-element)!important}.material-design-icon[data-v-e4d562ae]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-entry[data-v-e4d562ae]{position:relative;display:flex;flex-shrink:0;flex-wrap:wrap;width:100%;min-height:var(--default-clickable-area);transition:background-color var(--animation-quick) ease-in-out;transition:background-color .2s ease-in-out;border-radius:var(--border-radius-element)}.app-navigation-entry-wrapper[data-v-e4d562ae]{position:relative;display:flex;flex-shrink:0;flex-wrap:wrap;width:100%}.app-navigation-entry-wrapper.app-navigation-entry--collapsible:not(.app-navigation-entry--opened)>ul[data-v-e4d562ae]{display:none}.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-e4d562ae]{background-color:color-mix(in srgb,var(--color-primary-element) 16%,transparent)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-e4d562ae]:hover{background-color:color-mix(in srgb,var(--color-primary-element) 22%,transparent)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active:not(.app-navigation-entry--editing) .app-navigation-entry-link[data-v-e4d562ae],.app-navigation-entry:not(.app-navigation-entry--legacy).active:not(.app-navigation-entry--editing) .app-navigation-entry-button[data-v-e4d562ae]{color:var(--color-main-text)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-e4d562ae]:not(.app-navigation-entry--editing):before{content:"";position:absolute;inset-block:calc(var(--default-grid-baseline, 4px) * 2);inset-inline-start:0;width:3px;background-color:var(--color-primary-element);border-radius:999px;animation:nc-nav-stripe-in-e4d562ae var(--animation-quick, .2s) ease-out}.app-navigation-entry.app-navigation-entry--legacy.active[data-v-e4d562ae]{background-color:var(--color-primary-element)!important}.app-navigation-entry.app-navigation-entry--legacy.active[data-v-e4d562ae]:hover{background-color:var(--color-primary-element-hover)!important}.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry-link[data-v-e4d562ae],.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry-button[data-v-e4d562ae]{color:var(--color-primary-element-text)!important}.app-navigation-entry[data-v-e4d562ae]:focus-within,.app-navigation-entry[data-v-e4d562ae]:hover{background-color:var(--color-background-hover)}.app-navigation-entry[data-v-e4d562ae]:not(.app-navigation-entry--legacy):focus-within,.app-navigation-entry[data-v-e4d562ae]:not(.app-navigation-entry--legacy):hover{background-color:color-mix(in srgb,var(--color-primary-element) 8%,transparent)}.app-navigation-entry.active .app-navigation-entry__children[data-v-e4d562ae],.app-navigation-entry:focus-within .app-navigation-entry__children[data-v-e4d562ae],.app-navigation-entry:hover .app-navigation-entry__children[data-v-e4d562ae]{background-color:var(--color-main-background)}.app-navigation-entry.active .app-navigation-entry__utils .app-navigation-entry__actions[data-v-e4d562ae],.app-navigation-entry.app-navigation-entry--deleted .app-navigation-entry__utils .app-navigation-entry__actions[data-v-e4d562ae],.app-navigation-entry:focus .app-navigation-entry__utils .app-navigation-entry__actions[data-v-e4d562ae],.app-navigation-entry:focus-within .app-navigation-entry__utils .app-navigation-entry__actions[data-v-e4d562ae],.app-navigation-entry:hover .app-navigation-entry__utils .app-navigation-entry__actions[data-v-e4d562ae]{display:inline-block}.app-navigation-entry .app-navigation-entry__actions[data-v-e4d562ae]:hover .button-vue{background-color:var(--color-background-dark)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active .app-navigation-entry__actions[data-v-e4d562ae]:hover .button-vue{background-color:var(--color-background-dark)!important}.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry__actions[data-v-e4d562ae]:hover .button-vue{background-color:var(--color-primary-element)!important}.app-navigation-entry.app-navigation-entry--deleted>ul[data-v-e4d562ae]{display:none}.app-navigation-entry:not(.app-navigation-entry--editing) .app-navigation-entry-link[data-v-e4d562ae],.app-navigation-entry:not(.app-navigation-entry--editing) .app-navigation-entry-button[data-v-e4d562ae]{padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2)}.app-navigation-entry .app-navigation-entry-link[data-v-e4d562ae],.app-navigation-entry .app-navigation-entry-button[data-v-e4d562ae]{z-index:100;display:flex;overflow:hidden;flex:1 1 0;min-height:var(--default-clickable-area);padding:0;white-space:nowrap;color:var(--color-main-text);font-weight:500;background-repeat:no-repeat;background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px 16px;line-height:var(--default-clickable-area)}.app-navigation-entry .app-navigation-entry-link .app-navigation-entry-icon[data-v-e4d562ae],.app-navigation-entry .app-navigation-entry-button .app-navigation-entry-icon[data-v-e4d562ae]{display:flex;align-items:center;flex:0 0 var(--default-clickable-area);justify-content:center;width:var(--default-clickable-area);height:var(--default-clickable-area);background-size:16px 16px;background-repeat:no-repeat;background-position:calc((var(--default-clickable-area) - 16px) / 2) center}.app-navigation-entry .app-navigation-entry-link .app-navigation-entry__name[data-v-e4d562ae],.app-navigation-entry .app-navigation-entry-button .app-navigation-entry__name[data-v-e4d562ae]{overflow:hidden;max-width:100%;white-space:nowrap;text-overflow:ellipsis;font-weight:var(--font-weight-element, normal)}.app-navigation-entry .app-navigation-entry-link .editingContainer[data-v-e4d562ae],.app-navigation-entry .app-navigation-entry-button .editingContainer[data-v-e4d562ae]{width:calc(100% - var(--default-clickable-area));margin:auto}.app-navigation-entry .app-navigation-entry-link[data-v-e4d562ae]:focus-visible,.app-navigation-entry .app-navigation-entry-button[data-v-e4d562ae]:focus-visible{box-shadow:0 0 0 4px var(--color-main-background);outline:2px solid var(--color-main-text);border-radius:var(--border-radius-element)}.app-navigation-entry__children[data-v-e4d562ae]{--app-navigation-item-child-offset: 10px;position:relative;display:flex;flex:0 1 auto;flex-direction:column;width:100%;gap:var(--default-grid-baseline, 4px);padding-inline-start:var(--app-navigation-item-child-offset)}.app-navigation-entry__children .app-navigation-entry[data-v-e4d562ae]{display:inline-flex;flex-wrap:wrap}.app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children[data-v-e4d562ae]{--app-navigation-item-child-offset: 0}.app-navigation-entry__deleted[data-v-e4d562ae]{display:inline-flex;flex:1 1 0;padding-inline-start:calc(var(--default-clickable-area) - (var(--default-clickable-area) - 16px) / 2)!important}.app-navigation-entry__deleted .app-navigation-entry__deleted-description[data-v-e4d562ae]{position:relative;overflow:hidden;flex:1 1 0;white-space:nowrap;text-overflow:ellipsis;line-height:var(--default-clickable-area)}.app-navigation-entry__utils[data-v-e4d562ae]{display:flex;min-width:var(--default-clickable-area);align-items:center;flex:0 1 auto;justify-content:flex-end}.app-navigation-entry__utils.app-navigation-entry__utils--display-actions .action-item.app-navigation-entry__actions[data-v-e4d562ae]{display:inline-block}.app-navigation-entry__utils .app-navigation-entry__counter-wrapper[data-v-e4d562ae]{margin-inline-end:calc(var(--default-grid-baseline) * 2);display:flex;align-items:center;flex:0 1 auto}.app-navigation-entry__utils .action-item.app-navigation-entry__actions[data-v-e4d562ae]{display:none}.app-navigation-entry--editing .app-navigation-entry-edit[data-v-e4d562ae]{z-index:250;opacity:1}.app-navigation-entry--deleted .app-navigation-entry-deleted[data-v-e4d562ae]{z-index:250;transform:translate(0)}.app-navigation-entry--pinned[data-v-e4d562ae]{order:2;margin-top:auto}.app-navigation-entry--pinned~.app-navigation-entry--pinned[data-v-e4d562ae]{margin-top:0}[data-themes*=highcontrast] .app-navigation-entry[data-v-e4d562ae]:active{background-color:var(--color-primary-element-light-hover)!important}@keyframes nc-nav-stripe-in-e4d562ae{0%{transform:scaleY(0);opacity:0}to{transform:scaleY(1);opacity:1}}.material-design-icon[data-v-a8724c7f]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-input-confirm[data-v-a8724c7f]{flex:1 0 100%;width:100%}.app-navigation-input-confirm form[data-v-a8724c7f]{display:flex}.app-navigation-input-confirm__input[data-v-a8724c7f]{height:34px;flex:1 1 100%;font-size:100%!important;margin:5px!important;margin-inline-start:-8px!important;padding:7px!important}.app-navigation-input-confirm__input[data-v-a8724c7f]:active,.app-navigation-input-confirm__input[data-v-a8724c7f]:focus,.app-navigation-input-confirm__input[data-v-a8724c7f]:hover{outline:none;background-color:var(--color-main-background);color:var(--color-main-text);border-color:var(--color-primary-element)}.app-navigation-input-confirm:not(.app-navigation-input-confirm--legacy) form[data-v-a8724c7f]{align-items:center;gap:5px;padding-inline-end:5px}.app-navigation-input-confirm:not(.app-navigation-input-confirm--legacy) .app-navigation-input-confirm__input[data-v-a8724c7f]{margin-inline-end:0!important}.app-navigation-input-confirm[data-v-a8724c7f]:not(.app-navigation-input-confirm--legacy) .button-vue{width:34px!important;min-width:34px!important;height:34px!important;flex:0 0 34px}.material-design-icon[data-v-0ba6c9df]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-new[data-v-0ba6c9df]{display:block;padding:calc(var(--default-grid-baseline, 4px) * 2)}.app-navigation-new button[data-v-0ba6c9df]{width:100%}.material-design-icon[data-v-ee07f8f8]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-entry[data-v-ee07f8f8]{position:relative;display:flex;flex-shrink:0;flex-wrap:wrap;width:100%;min-height:var(--default-clickable-area);transition:background-color var(--animation-quick) ease-in-out;transition:background-color .2s ease-in-out;border-radius:var(--border-radius-element)}.app-navigation-entry-wrapper[data-v-ee07f8f8]{position:relative;display:flex;flex-shrink:0;flex-wrap:wrap;width:100%}.app-navigation-entry-wrapper.app-navigation-entry--collapsible:not(.app-navigation-entry--opened)>ul[data-v-ee07f8f8]{display:none}.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-ee07f8f8]{background-color:color-mix(in srgb,var(--color-primary-element) 16%,transparent)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-ee07f8f8]:hover{background-color:color-mix(in srgb,var(--color-primary-element) 22%,transparent)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active:not(.app-navigation-entry--editing) .app-navigation-entry-link[data-v-ee07f8f8],.app-navigation-entry:not(.app-navigation-entry--legacy).active:not(.app-navigation-entry--editing) .app-navigation-entry-button[data-v-ee07f8f8]{color:var(--color-main-text)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-ee07f8f8]:not(.app-navigation-entry--editing):before{content:"";position:absolute;inset-block:calc(var(--default-grid-baseline, 4px) * 2);inset-inline-start:0;width:3px;background-color:var(--color-primary-element);border-radius:999px;animation:nc-nav-stripe-in-ee07f8f8 var(--animation-quick, .2s) ease-out}.app-navigation-entry.app-navigation-entry--legacy.active[data-v-ee07f8f8]{background-color:var(--color-primary-element)!important}.app-navigation-entry.app-navigation-entry--legacy.active[data-v-ee07f8f8]:hover{background-color:var(--color-primary-element-hover)!important}.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry-link[data-v-ee07f8f8],.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry-button[data-v-ee07f8f8]{color:var(--color-primary-element-text)!important}.app-navigation-entry[data-v-ee07f8f8]:focus-within,.app-navigation-entry[data-v-ee07f8f8]:hover{background-color:var(--color-background-hover)}.app-navigation-entry[data-v-ee07f8f8]:not(.app-navigation-entry--legacy):focus-within,.app-navigation-entry[data-v-ee07f8f8]:not(.app-navigation-entry--legacy):hover{background-color:color-mix(in srgb,var(--color-primary-element) 8%,transparent)}.app-navigation-entry.active .app-navigation-entry__children[data-v-ee07f8f8],.app-navigation-entry:focus-within .app-navigation-entry__children[data-v-ee07f8f8],.app-navigation-entry:hover .app-navigation-entry__children[data-v-ee07f8f8]{background-color:var(--color-main-background)}.app-navigation-entry.active .app-navigation-entry__utils .app-navigation-entry__actions[data-v-ee07f8f8],.app-navigation-entry.app-navigation-entry--deleted .app-navigation-entry__utils .app-navigation-entry__actions[data-v-ee07f8f8],.app-navigation-entry:focus .app-navigation-entry__utils .app-navigation-entry__actions[data-v-ee07f8f8],.app-navigation-entry:focus-within .app-navigation-entry__utils .app-navigation-entry__actions[data-v-ee07f8f8],.app-navigation-entry:hover .app-navigation-entry__utils .app-navigation-entry__actions[data-v-ee07f8f8]{display:inline-block}.app-navigation-entry .app-navigation-entry__actions[data-v-ee07f8f8]:hover .button-vue{background-color:var(--color-background-dark)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active .app-navigation-entry__actions[data-v-ee07f8f8]:hover .button-vue{background-color:var(--color-background-dark)!important}.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry__actions[data-v-ee07f8f8]:hover .button-vue{background-color:var(--color-primary-element)!important}.app-navigation-entry.app-navigation-entry--deleted>ul[data-v-ee07f8f8]{display:none}.app-navigation-entry:not(.app-navigation-entry--editing) .app-navigation-entry-link[data-v-ee07f8f8],.app-navigation-entry:not(.app-navigation-entry--editing) .app-navigation-entry-button[data-v-ee07f8f8]{padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2)}.app-navigation-entry .app-navigation-entry-link[data-v-ee07f8f8],.app-navigation-entry .app-navigation-entry-button[data-v-ee07f8f8]{z-index:100;display:flex;overflow:hidden;flex:1 1 0;min-height:var(--default-clickable-area);padding:0;white-space:nowrap;color:var(--color-main-text);font-weight:500;background-repeat:no-repeat;background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px 16px;line-height:var(--default-clickable-area)}.app-navigation-entry .app-navigation-entry-link .app-navigation-entry-icon[data-v-ee07f8f8],.app-navigation-entry .app-navigation-entry-button .app-navigation-entry-icon[data-v-ee07f8f8]{display:flex;align-items:center;flex:0 0 var(--default-clickable-area);justify-content:center;width:var(--default-clickable-area);height:var(--default-clickable-area);background-size:16px 16px;background-repeat:no-repeat;background-position:calc((var(--default-clickable-area) - 16px) / 2) center}.app-navigation-entry .app-navigation-entry-link .app-navigation-entry__name[data-v-ee07f8f8],.app-navigation-entry .app-navigation-entry-button .app-navigation-entry__name[data-v-ee07f8f8]{overflow:hidden;max-width:100%;white-space:nowrap;text-overflow:ellipsis;font-weight:var(--font-weight-element, normal)}.app-navigation-entry .app-navigation-entry-link .editingContainer[data-v-ee07f8f8],.app-navigation-entry .app-navigation-entry-button .editingContainer[data-v-ee07f8f8]{width:calc(100% - var(--default-clickable-area));margin:auto}.app-navigation-entry .app-navigation-entry-link[data-v-ee07f8f8]:focus-visible,.app-navigation-entry .app-navigation-entry-button[data-v-ee07f8f8]:focus-visible{box-shadow:0 0 0 4px var(--color-main-background);outline:2px solid var(--color-main-text);border-radius:var(--border-radius-element)}.app-navigation-entry__children[data-v-ee07f8f8]{--app-navigation-item-child-offset: 10px;position:relative;display:flex;flex:0 1 auto;flex-direction:column;width:100%;gap:var(--default-grid-baseline, 4px);padding-inline-start:var(--app-navigation-item-child-offset)}.app-navigation-entry__children .app-navigation-entry[data-v-ee07f8f8]{display:inline-flex;flex-wrap:wrap}.app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children[data-v-ee07f8f8]{--app-navigation-item-child-offset: 0}.app-navigation-entry__deleted[data-v-ee07f8f8]{display:inline-flex;flex:1 1 0;padding-inline-start:calc(var(--default-clickable-area) - (var(--default-clickable-area) - 16px) / 2)!important}.app-navigation-entry__deleted .app-navigation-entry__deleted-description[data-v-ee07f8f8]{position:relative;overflow:hidden;flex:1 1 0;white-space:nowrap;text-overflow:ellipsis;line-height:var(--default-clickable-area)}.app-navigation-entry__utils[data-v-ee07f8f8]{display:flex;min-width:var(--default-clickable-area);align-items:center;flex:0 1 auto;justify-content:flex-end}.app-navigation-entry__utils.app-navigation-entry__utils--display-actions .action-item.app-navigation-entry__actions[data-v-ee07f8f8]{display:inline-block}.app-navigation-entry__utils .app-navigation-entry__counter-wrapper[data-v-ee07f8f8]{margin-inline-end:calc(var(--default-grid-baseline) * 2);display:flex;align-items:center;flex:0 1 auto}.app-navigation-entry__utils .action-item.app-navigation-entry__actions[data-v-ee07f8f8]{display:none}.app-navigation-entry--editing .app-navigation-entry-edit[data-v-ee07f8f8]{z-index:250;opacity:1}.app-navigation-entry--deleted .app-navigation-entry-deleted[data-v-ee07f8f8]{z-index:250;transform:translate(0)}.app-navigation-entry--pinned[data-v-ee07f8f8]{order:2;margin-top:auto}.app-navigation-entry--pinned~.app-navigation-entry--pinned[data-v-ee07f8f8]{margin-top:0}[data-themes*=highcontrast] .app-navigation-entry[data-v-ee07f8f8]:active{background-color:var(--color-primary-element-light-hover)!important}@keyframes nc-nav-stripe-in-ee07f8f8{0%{transform:scaleY(0);opacity:0}to{transform:scaleY(1);opacity:1}}.app-navigation-new-item__name[data-v-ee07f8f8]{overflow:hidden;max-width:100%;white-space:nowrap;text-overflow:ellipsis;padding-inline-start:7px;font-size:14px}.newItemContainer[data-v-ee07f8f8]{width:calc(100% - var(--default-clickable-area));margin:auto}.material-design-icon[data-v-191b6717]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-search[data-v-191b6717]{display:flex;gap:var(--app-navigation-padding);padding:var(--app-navigation-padding)}.app-navigation-search__input[data-v-191b6717]{--input-padding-end: calc(var(--default-clickable-area) - var(--default-grid-baseline))}.app-navigation-search--has-actions .app-navigation-search__input[data-v-191b6717]{flex-grow:1;z-index:3}.app-navigation-search__actions[data-v-191b6717]{display:flex;gap:var(--default-grid-baseline);margin-inline-start:0;max-width:calc(2 * var(--default-clickable-area) + var(--default-grid-baseline));max-height:var(--default-clickable-area);transition:margin-inline-start var(--animation-quick)}.app-navigation-search__actions--hidden[data-v-191b6717]{margin-inline-start:calc(-1 * var(--default-clickable-area))}._container_RFk6U{margin-top:auto;padding:var(--default-grid-baseline)}._header_2CtDS{margin-block:0 var(--default-grid-baseline);margin-inline:var(--default-grid-baseline)}._button_tAyis{padding-inline:0 calc((var(--default-clickable-area) - 16px) / 2)!important}._button_tAyis .button-vue__text{font-weight:var(--font-weight-default, normal)}._content_--KYD{display:block;padding:10px;margin-bottom:calc(-1 * var(--default-grid-baseline));max-height:300px;overflow-y:auto}._animationActive_DAG1p{transition-duration:var(--animation-slow);transition-property:max-height,padding;overflow-y:hidden!important}._animationStop_fWYQj{max-height:0!important;padding:0 10px!important}.app-navigation-spacer[data-v-277fa710]{flex-shrink:0;height:22px}._material-design-icon_qDIHA{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._appSettingsDialogVersion_8Xr7R{--form-element-label-offset: calc(var(--border-radius-element) + var(--default-grid-baseline));color:var(--color-text-maxcontrast);margin-block-end:calc(8 * var(--default-grid-baseline));margin-inline:var(--form-element-label-offset)}._appSettingsDialogVersion__legacy_7MO71{margin-inline:0}.material-design-icon[data-v-e669a5ef]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-settings[data-v-e669a5ef]:not(.app-settings--legacy){--nav-tint: hsl(from var(--color-primary-element-light) h s calc(l*1.045) );--nav-tint-strong: var(--color-primary-element-light)}.app-settings[data-v-e669a5ef]:not(.app-settings--legacy) .modal-wrapper .modal-container{padding-inline-start:0!important;padding-block-start:0!important;background-color:var(--nav-tint);overflow:hidden;max-width:900px}.app-settings[data-v-e669a5ef]:not(.app-settings--legacy) .dialog__name{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(100%);white-space:nowrap;border:0}.app-settings[data-v-e669a5ef]:not(.app-settings--legacy) .app-settings__navigation{min-width:200px;max-width:200px;flex:0 0 200px;margin-inline-end:0!important;overflow-x:hidden;overflow-y:auto;position:relative}.app-settings[data-v-e669a5ef]:not(.app-settings--legacy) .app-settings__content{padding:calc(3 * var(--default-grid-baseline));background-color:var(--color-main-background);border-inline-start:1px solid var(--color-border-dark);border-start-start-radius:var(--border-radius-element);border-end-start-radius:var(--border-radius-element)}.app-settings:not(.app-settings--legacy) .app-settings__title[data-v-e669a5ef]{box-sizing:border-box;padding:calc(3 * var(--default-grid-baseline));margin:0;font-size:20px;font-weight:700}.app-settings:not(.app-settings--legacy) .navigation-list[data-v-e669a5ef]{height:100%;overflow-y:auto;padding:var(--default-grid-baseline)}.app-settings:not(.app-settings--legacy) .navigation-list__link[data-v-e669a5ef]{position:relative;display:flex;align-items:center;font-size:var(--default-font-size);font-weight:500;height:var(--default-clickable-area);margin:2px 0;line-height:var(--default-clickable-area);border-radius:var(--border-radius-element);padding-inline:calc(2 * var(--default-grid-baseline));cursor:pointer;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;background-color:transparent;border:none;color:var(--color-main-text)}.app-settings:not(.app-settings--legacy) .navigation-list__link[data-v-e669a5ef]:hover,.app-settings:not(.app-settings--legacy) .navigation-list__link[data-v-e669a5ef]:focus-visible{background-color:color-mix(in srgb,var(--color-primary-element) 8%,transparent)}.app-settings:not(.app-settings--legacy) .navigation-list__link[data-v-e669a5ef]:focus-visible{outline:2px solid var(--color-main-text);outline-offset:-2px}.app-settings:not(.app-settings--legacy) .navigation-list__link--active[data-v-e669a5ef]{background-color:var(--nav-tint-strong)}.app-settings:not(.app-settings--legacy) .navigation-list__link--active[data-v-e669a5ef]:hover,.app-settings:not(.app-settings--legacy) .navigation-list__link--active[data-v-e669a5ef]:focus-visible{background-color:var(--color-primary-element-light-hover)}.app-settings:not(.app-settings--legacy) .navigation-list__link--active[data-v-e669a5ef]:before{content:"";position:absolute;inset-block:var(--default-grid-baseline);inset-inline-start:0;width:3px;background-color:var(--color-primary-element);border-radius:999px}.app-settings:not(.app-settings--legacy) .navigation-list__link--icon[data-v-e669a5ef]{gap:var(--default-grid-baseline)}.app-settings:not(.app-settings--legacy) .navigation-list__link-icon[data-v-e669a5ef]{display:flex;justify-content:center;align-content:center;width:calc(var(--default-clickable-area) - 2 * var(--default-grid-baseline));max-width:calc(var(--default-clickable-area) - 2 * var(--default-grid-baseline))}@media only screen and (width<1024px){.app-settings[data-v-e669a5ef]:not(.app-settings--legacy) .modal-wrapper .modal-container{padding-inline-start:12px!important;padding-block-start:4px!important;background-color:var(--color-main-background)}.app-settings[data-v-e669a5ef]:not(.app-settings--legacy) .dialog__name{position:static;width:auto;height:auto;margin:0 0 12px;padding-inline-end:var(--default-clickable-area);overflow:visible;clip-path:none;white-space:normal;border:0}.app-settings[data-v-e669a5ef]:not(.app-settings--legacy) .app-settings__content{border:none;border-radius:0}}.app-settings.app-settings--legacy[data-v-e669a5ef] .app-settings__navigation{min-width:200px;margin-inline-end:calc(4 * var(--default-grid-baseline));overflow-x:hidden;overflow-y:auto;position:relative}.app-settings.app-settings--legacy[data-v-e669a5ef] .app-settings__content{padding-inline:calc(4 * var(--default-grid-baseline))}.app-settings.app-settings--legacy .navigation-list[data-v-e669a5ef]{height:100%;overflow-y:auto;padding:calc(3 * var(--default-grid-baseline))}.app-settings.app-settings--legacy .navigation-list__link[data-v-e669a5ef]{display:flex;align-content:center;font-size:16px;height:var(--default-clickable-area);margin:4px 0;line-height:var(--default-clickable-area);border-radius:var(--border-radius-element);font-weight:var(--font-weight-element, bold);padding:0 calc(4 * var(--default-grid-baseline));cursor:pointer;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;background-color:transparent;border:none}.app-settings.app-settings--legacy .navigation-list__link[data-v-e669a5ef]:hover,.app-settings.app-settings--legacy .navigation-list__link[data-v-e669a5ef]:focus{background-color:var(--color-background-hover)}.app-settings.app-settings--legacy .navigation-list__link--active[data-v-e669a5ef]{background-color:var(--color-primary-element-light)!important}.app-settings.app-settings--legacy .navigation-list__link--icon[data-v-e669a5ef]{padding-inline-start:calc(2 * var(--default-grid-baseline));gap:var(--default-grid-baseline)}.app-settings.app-settings--legacy .navigation-list__link-icon[data-v-e669a5ef]{display:flex;justify-content:center;align-content:center;width:calc(var(--default-clickable-area) - 2 * var(--default-grid-baseline));max-width:calc(var(--default-clickable-area) - 2 * var(--default-grid-baseline))}@media only screen and (max-width:512px){.app-settings.app-settings--legacy[data-v-e669a5ef] .dialog__name{padding-inline-start:16px}}.material-design-icon[data-v-9f146f2d]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-settings-section[data-v-9f146f2d]{--form-element-label-offset: calc(var(--border-radius-element) + var(--default-grid-baseline));--app-settings-section-text-offset: var(--form-element-label-offset);--app-settings-section-content-gap: calc(6 * var(--default-grid-baseline));margin-block-end:calc(8 * var(--default-grid-baseline))}.app-settings-section__name[data-v-9f146f2d]{margin:0;padding-inline:var(--app-settings-section-text-offset);padding-block:0;font-size:20px;font-weight:var(--font-weight-heading, bold)}.app-settings-section__description[data-v-9f146f2d]{padding-inline:var(--app-settings-section-text-offset);color:var(--color-text-maxcontrast)}.app-settings-section__content[data-v-9f146f2d]{margin-block-start:calc(2 * var(--default-grid-baseline));display:flex;flex-direction:column;justify-content:stretch;gap:var(--app-settings-section-content-gap)}.app-settings-section__legacy[data-v-9f146f2d]{--app-settings-section-text-offset: 0;--app-settings-section-content-gap: 0}._appSettingsSectionShortcuts_RqpkA{display:flex;flex-direction:column;gap:calc(4 * var(--default-grid-baseline))}._material-design-icon_m4vbX{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._sidebarTabsButton_6hxfz{border:none;color:var(--color-main-text);font-size:var(--default-font-size);cursor:pointer;display:flex;flex-direction:column;gap:var(--default-grid-baseline);min-width:var(--default-clickable-area)}._sidebarTabsButton_6hxfz *{cursor:pointer}._sidebarTabsButton_6hxfz:not(._sidebarTabsButton_legacy_Qp20k){position:relative;border-radius:var(--border-radius-element);background-color:var(--color-main-background);padding:var(--default-grid-baseline);padding-block-end:calc(var(--default-grid-baseline) * 2);transition:background-color var(--animation-quick)}._sidebarTabsButton_6hxfz:not(._sidebarTabsButton_legacy_Qp20k):after{content:"";position:absolute;bottom:0;left:50%;width:0;height:4px;border-radius:999px;background-color:var(--color-primary-element);opacity:0;transform:translate(-50%);transition:width var(--animation-quick),opacity var(--animation-quick)}._sidebarTabsButton_6hxfz:not(._sidebarTabsButton_legacy_Qp20k):hover{background-color:var(--color-background-hover)}._sidebarTabsButton_6hxfz:not(._sidebarTabsButton_legacy_Qp20k):focus-visible{outline:2px solid var(--color-main-text);outline-offset:2px}._sidebarTabsButton_legacy_Qp20k{border-bottom:var(--default-grid-baseline) solid transparent!important;border-radius:var(--border-radius-small);background-color:var(--color-main-background);padding:var(--border-radius-small);transition:background-color var(--animation-quick),border-bottom-color var(--animation-quick)}._sidebarTabsButton_legacy_Qp20k:hover{background-color:var(--color-background-hover)!important}._sidebarTabsButton_legacy_Qp20k:active,._sidebarTabsButton_legacy_Qp20k:focus{background-color:var(--color-main-background)!important}._sidebarTabsButton_selected_eBHM-,._sidebarTabsButton_selected_eBHM- *{cursor:default}._sidebarTabsButton_6hxfz:not(._sidebarTabsButton_legacy_Qp20k)._sidebarTabsButton_selected_eBHM-{background-color:var(--color-background-hover)}._sidebarTabsButton_6hxfz:not(._sidebarTabsButton_legacy_Qp20k)._sidebarTabsButton_selected_eBHM-:after{width:80%;opacity:1}._sidebarTabsButton_6hxfz:not(._sidebarTabsButton_legacy_Qp20k)._sidebarTabsButton_selected_eBHM-:hover{background-color:var(--color-background-dark)}._sidebarTabsButton_legacy_Qp20k._sidebarTabsButton_selected_eBHM-{border-bottom-color:var(--color-primary-element)!important;border-bottom-left-radius:0;border-bottom-right-radius:0}._sidebarTabsButton_legacy_Qp20k._sidebarTabsButton_selected_eBHM-:hover{background-color:var(--color-primary-element-light-hover)!important;color:var(--color-primary-element-light-text)!important}._sidebarTabsButton__name_YlW5S{font-weight:var(--font-weight-element, normal);overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}._sidebarTabsButton_legacy_Qp20k._sidebarTabsButton_selected_eBHM- ._sidebarTabsButton__name_YlW5S{font-weight:var(--font-weight-element, bold)}._sidebarTabsButton__icon_MPS-D{display:inline-flex;align-items:center;justify-content:center}._sidebarTabsButton__legacyIcon_rzPOu{background-size:20px;display:flex;align-items:center;justify-content:center}.material-design-icon[data-v-e74d1502]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-sidebar-tabs[data-v-e74d1502]{display:flex;flex-direction:column;min-height:0;flex:1 1 100%}.app-sidebar-tabs__nav[data-v-e74d1502]{display:flex;justify-content:stretch;margin:10px 8px 0;border-bottom:1px solid var(--color-border)}.app-sidebar-tabs__nav[data-v-e74d1502]:not(.app-sidebar-tabs__nav--legacy){gap:var(--default-grid-baseline);padding-block-end:var(--default-grid-baseline)}.app-sidebar-tabs__tab[data-v-e74d1502]{flex:1 1 1px}.app-sidebar-tabs__content[data-v-e74d1502]{position:relative;min-height:256px;height:100%}.app-sidebar-tabs__content--multiple[data-v-e74d1502]>:not(section){display:none}.material-design-icon{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}@property --app-sidebar-offset{syntax: ""; initial-value: 0; inherits: true;}body{--app-sidebar-padding: calc(var(--default-grid-baseline, 4px) * 2);--app-sidebar-offset: 0;transition:--app-sidebar-offset 0ms!important}body:has(.app-sidebar.slide-right-enter-active),body:has(.app-sidebar.slide-right-leave-active){transition:--app-sidebar-offset var(--animation-quick)}body:has(.app-sidebar__toggle){--app-sidebar-offset: calc(var(--app-sidebar-padding) + var(--default-clickable-area))}.material-design-icon[data-v-e8979b7f]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-sidebar[data-v-e8979b7f]{--app-sidebar-width: clamp(300px, 27vw, 500px);--app-sidebar-padding: calc(var(--default-grid-baseline, 4px) * 2);width:var(--app-sidebar-width);z-index:1500;top:0;inset-inline-end:0;display:flex;overflow-x:hidden;overflow-y:auto;flex-direction:column;flex-shrink:0;height:100%;border-inline-start:1px solid var(--color-border);background:var(--color-main-background);position:relative}.app-sidebar__toggle[data-v-e8979b7f]{position:absolute!important;inset-block-start:var(--app-sidebar-padding);inset-inline-end:var(--app-sidebar-padding);z-index:1001}.app-sidebar .app-sidebar-header[data-v-e8979b7f]{--app-sidebar-close-button-offset: calc(var(--default-clickable-area) + var(--app-sidebar-padding))}.app-sidebar .app-sidebar-header>.app-sidebar__close[data-v-e8979b7f]{position:absolute;z-index:100;top:var(--app-sidebar-padding);inset-inline-end:var(--app-sidebar-padding);width:var(--default-clickable-area);height:var(--default-clickable-area)}.app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info[data-v-e8979b7f]{flex-direction:row}.app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info .app-sidebar-header__figure[data-v-e8979b7f]{--figure-size: calc(52px + var(--app-sidebar-padding));z-index:2;width:var(--figure-size);height:var(--figure-size);margin:calc(var(--app-sidebar-padding) / 2);border-radius:3px;flex:0 0 auto}.app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info .app-sidebar-header__desc[data-v-e8979b7f]{padding-inline-start:0;flex:1 1 auto;min-width:0;padding-inline-end:calc(var(--default-clickable-area) + var(--app-sidebar-close-button-offset));padding-top:var(--app-sidebar-padding)}.app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info .app-sidebar-header__desc.app-sidebar-header__desc--without-actions[data-v-e8979b7f]{padding-inline-end:var(--app-sidebar-close-button-offset)}.app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info .app-sidebar-header__desc .app-sidebar-header__tertiary-actions[data-v-e8979b7f]{z-index:3;position:absolute;top:calc(var(--app-sidebar-padding) / 2);inset-inline-start:calc(-1 * var(--default-clickable-area));gap:0}.app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info .app-sidebar-header__desc .app-sidebar-header__menu[data-v-e8979b7f]{top:var(--app-sidebar-padding);inset-inline-end:var(--app-sidebar-close-button-offset);position:absolute}.app-sidebar .app-sidebar-header:not(.app-sidebar-header--with-figure) .app-sidebar-header__menu[data-v-e8979b7f]{position:absolute;top:var(--app-sidebar-padding);inset-inline-end:var(--app-sidebar-close-button-offset)}.app-sidebar .app-sidebar-header:not(.app-sidebar-header--with-figure) .app-sidebar-header__desc[data-v-e8979b7f]{padding-inline-end:calc(var(--default-clickable-area) + var(--app-sidebar-close-button-offset))}.app-sidebar .app-sidebar-header:not(.app-sidebar-header--with-figure) .app-sidebar-header__desc.app-sidebar-header__desc--without-actions[data-v-e8979b7f]{padding-inline-end:var(--app-sidebar-close-button-offset)}.app-sidebar .app-sidebar-header .app-sidebar-header__info[data-v-e8979b7f]{display:flex;flex-direction:column}.app-sidebar .app-sidebar-header__figure[data-v-e8979b7f]{width:100%;height:250px;max-height:250px;background-repeat:no-repeat;background-position:center;background-size:contain}.app-sidebar .app-sidebar-header__figure--with-action[data-v-e8979b7f]{cursor:pointer}.app-sidebar .app-sidebar-header__desc[data-v-e8979b7f]{position:relative;display:flex;flex-direction:row;justify-content:center;align-items:center;padding-inline:var(--app-sidebar-padding);padding-block:var(--app-sidebar-padding) calc(var(--app-sidebar-padding) / 2);gap:0 4px}.app-sidebar .app-sidebar-header__desc--with-tertiary-action[data-v-e8979b7f]{padding-inline-start:6px}.app-sidebar .app-sidebar-header__desc--editable .app-sidebar-header__mainname-form[data-v-e8979b7f],.app-sidebar .app-sidebar-header__desc--with-subname--editable .app-sidebar-header__mainname-form[data-v-e8979b7f]{margin-top:-2px;margin-bottom:-2px}.app-sidebar .app-sidebar-header__desc--with-subname--editable .app-sidebar-header__subname[data-v-e8979b7f]{margin-top:-2px}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__tertiary-actions[data-v-e8979b7f]{display:flex;height:var(--default-clickable-area);width:var(--default-clickable-area);justify-content:center;flex:0 0 auto}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__tertiary-actions .app-sidebar-header__star[data-v-e8979b7f]{box-shadow:none}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__tertiary-actions .app-sidebar-header__star[data-v-e8979b7f]:not([aria-pressed=true]):hover{box-shadow:none;background-color:var(--color-background-hover)}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container[data-v-e8979b7f]{flex:1 1 auto;display:flex;flex-direction:column;justify-content:center;min-width:0}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container[data-v-e8979b7f]{display:flex;align-items:center;min-height:var(--default-clickable-area)}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container .app-sidebar-header__mainname[data-v-e8979b7f]{padding:0;min-height:30px;font-size:20px;line-height:30px}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container .app-sidebar-header__mainname[data-v-e8979b7f] .linkified{cursor:pointer;text-decoration:underline;margin:0}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container .app-sidebar-header__mainname-form[data-v-e8979b7f]{display:flex;flex:1 1 auto;align-items:center}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container .app-sidebar-header__mainname-form input.app-sidebar-header__mainname-input[data-v-e8979b7f]{flex:1 1 auto;margin:0;padding:7px;font-size:20px;font-weight:var(--font-weight-heading, bold)}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container .app-sidebar-header__menu[data-v-e8979b7f]{margin-inline-start:5px}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname[data-v-e8979b7f],.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__subname[data-v-e8979b7f]{overflow:hidden;width:100%;margin:0;white-space:nowrap;text-overflow:ellipsis}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__subname[data-v-e8979b7f]{color:var(--color-text-maxcontrast);font-size:var(--default-font-size);padding:0}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__subname[data-v-e8979b7f] *{vertical-align:text-bottom}.app-sidebar .app-sidebar-header .app-sidebar-header__mainname--hidden[data-v-e8979b7f]{position:absolute;top:0;inset-inline-start:0;margin:0;width:1px;height:1px;overflow:hidden}.app-sidebar .app-sidebar-header__description[data-v-e8979b7f]{display:flex;align-items:center;margin:0 10px}@media only screen and (max-width:512px){.app-sidebar[data-v-e8979b7f]{position:absolute;--app-sidebar-width: 100vw}}.slide-right-leave-active[data-v-e8979b7f],.slide-right-enter-active[data-v-e8979b7f]{transition-duration:var(--animation-quick);transition-property:margin-inline-end}.slide-right-enter-to[data-v-e8979b7f],.slide-right-leave[data-v-e8979b7f]{margin-inline-end:0}.slide-right-enter-from[data-v-e8979b7f],.slide-right-leave-to[data-v-e8979b7f]{margin-inline-end:calc(-1 * var(--app-sidebar-width))}.material-design-icon[data-v-dba10798]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-sidebar__tab[data-v-dba10798]{display:none;padding:10px;min-height:100%;max-height:100%;height:100%;overflow:auto}.app-sidebar__tab[data-v-dba10798]:focus{border-color:var(--color-primary-element);box-shadow:0 0 .2em var(--color-primary-element);outline:0}.app-sidebar__tab--active[data-v-dba10798]{display:block}._material-design-icon_M4rJ-{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._assistantButton_BP0M8{--assistant-button-color: var(--color-element-assistant, linear-gradient(238deg, #A569D3 12%, #00679E 39%, #422083 86%));--assistant-button-background-color: var(--color-background-assistant, #F6F5FF);background-image:var(--color-border-assistant, linear-gradient(125deg, #7398FE 50%, #6104A4 125%));border-radius:var(--border-radius-element);height:var(--default-clickable-area);width:fit-content;padding-inline:1px;padding-block:1px 2px}._assistantButton_disabled_UipGr{filter:saturate(.5);opacity:.5}._assistantButton_primary_-LVsB{--assistant-button-color: white;--assistant-button-background-color: var(--color-element-assistant,linear-gradient(238deg, #A569D3 12%, #00679E 39%, #422083 86%))}._assistantButton_primary_-LVsB ._assistantButton__icon_fQ0PP,._assistantButton_primary_-LVsB ._assistantButton__text_3VzI1{color:#fff!important}._assistantButton__button_FAn7N{--button-size: calc(var(--default-clickable-area) - 3px) !important;background-color:var(--assistant-button-background-color)!important;background-image:var(--assistant-button-background-color)!important;border:none!important}._assistantButton__button_FAn7N:hover{filter:brightness(120%)}._assistantButton__text_3VzI1{background-image:var(--assistant-button-color);color:transparent!important;-webkit-background-clip:text;background-clip:text}._material-design-icon_mH0R6{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._assistantIcon_2koBz{display:inline-flex;align-items:center;justify-content:center}._assistantIcon_2koBz:not(._assistantIcon_inline_kJSUg){display:flex;min-height:var(--default-clickable-area);min-width:var(--default-clickable-area)}._assistantIcon__svg_V8CXC{display:inline-block;width:var(--v6629513e);height:var(--v6629513e);max-width:var(--v6629513e);max-height:var(--v6629513e)}._material-design-icon_nSUHm{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._assistantContent_xKBtA{background-image:var(--color-border-assistant, linear-gradient(125deg, #7398FE 50%, #6104A4 125%));border-radius:var(--border-radius-container);padding:2px}._assistantContent__inner_DqkVC{background-color:var(--color-background-assistant, #F6F5FF);border-radius:calc(var(--border-radius-container) - 1px);color:var(--color-main-text);padding:calc(var(--border-radius-container) - 1px);height:100%;width:100%}._fadeTransition_hVFAH{transition:all var(--animation-quick) ease}._fadeTransitionActive_XmkdB{opacity:0;position:absolute}.material-design-icon[data-v-8ebb9fc1]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.fade-enter-active[data-v-8ebb9fc1],.fade-leave-active[data-v-8ebb9fc1]{transition:opacity .3s ease}.fade-enter[data-v-8ebb9fc1],.fade-leave-to[data-v-8ebb9fc1]{opacity:0}.linked-icons[data-v-8ebb9fc1]{display:flex}.linked-icons img[data-v-8ebb9fc1]{padding:12px;height:var(--default-clickable-area);display:block;background-repeat:no-repeat;background-position:center;opacity:.7}.linked-icons img[data-v-8ebb9fc1]:hover{opacity:1}.popovermenu[data-v-8ebb9fc1]{display:none}.popovermenu.open[data-v-8ebb9fc1]{display:block}li.collection-list-item[data-v-8ebb9fc1]{flex-wrap:wrap;height:auto;cursor:pointer;margin-bottom:0!important}li.collection-list-item .collection-avatar[data-v-8ebb9fc1]{margin-top:0}li.collection-list-item form[data-v-8ebb9fc1],li.collection-list-item .collection-item-name[data-v-8ebb9fc1]{flex-basis:10%;flex-grow:1;display:flex}li.collection-list-item .collection-item-name[data-v-8ebb9fc1]{padding:12px 9px}li.collection-list-item input[data-v-8ebb9fc1]{margin-top:4px;border-color:var(--color-border-maxcontrast)}li.collection-list-item input[type=text][data-v-8ebb9fc1]{flex-grow:1}li.collection-list-item .error[data-v-8ebb9fc1],li.collection-list-item .resource-list-details[data-v-8ebb9fc1]{flex-basis:100%;width:100%}li.collection-list-item .resource-list-details li[data-v-8ebb9fc1]{display:flex;margin-inline-start:var(--default-clickable-area);border-radius:3px;cursor:pointer}li.collection-list-item .resource-list-details li[data-v-8ebb9fc1]:hover{background-color:var(--color-background-dark)}li.collection-list-item .resource-list-details li a[data-v-8ebb9fc1]{flex-grow:1;padding:3px;max-width:calc(100% - 30px);display:flex}li.collection-list-item .resource-list-details span[data-v-8ebb9fc1]{display:inline-block;vertical-align:top;margin-inline-end:10px}li.collection-list-item .resource-list-details span.resource-name[data-v-8ebb9fc1]{text-overflow:ellipsis;overflow:hidden;position:relative;vertical-align:top;white-space:nowrap;flex-grow:1;padding:4px}li.collection-list-item .resource-list-details img[data-v-8ebb9fc1]{width:24px;height:24px}li.collection-list-item .resource-list-details .icon-close[data-v-8ebb9fc1]{opacity:.7}li.collection-list-item .resource-list-details .icon-close[data-v-8ebb9fc1]:hover,li.collection-list-item .resource-list-details .icon-close[data-v-8ebb9fc1]:focus{opacity:1}.should-shake[data-v-8ebb9fc1]{animation:shake-8ebb9fc1 .6s 1 linear}@keyframes shake-8ebb9fc1{0%{transform:translate(15px)}20%{transform:translate(-15px)}40%{transform:translate(7px)}60%{transform:translate(-7px)}80%{transform:translate(3px)}to{transform:translate(0)}}.material-design-icon[data-v-0e169eff]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.collection-list[data-v-0e169eff] *{box-sizing:border-box}.collection-list>li[data-v-0e169eff]{display:flex;align-items:center;gap:12px}.collection-list>li>.avatar[data-v-0e169eff]{margin-top:0}#collection-select-container[data-v-0e169eff]{display:flex;flex-direction:column}.v-select span.avatar[data-v-0e169eff]{display:block;padding:16px;opacity:.7;background-repeat:no-repeat;background-position:center}.v-select span.avatar[data-v-0e169eff]:hover{opacity:1}p.hint[data-v-0e169eff]{z-index:1;margin-top:-16px;padding:8px;color:var(--color-text-maxcontrast);line-height:normal}div.avatar[data-v-0e169eff]{width:32px;height:32px;margin:30px 0 0;padding:8px;background-color:var(--color-background-dark)}.icon-projects[data-v-0e169eff]{display:block;padding:8px;background-repeat:no-repeat;background-position:center}.option__wrapper[data-v-0e169eff]{display:flex}.option__wrapper .avatar[data-v-0e169eff]{display:block;width:32px;height:32px;background-color:var(--color-background-darker)!important}.option__wrapper .option__title[data-v-0e169eff]{padding:4px}.fade-enter-active[data-v-0e169eff],.fade-leave-active[data-v-0e169eff]{transition:opacity .5s}.fade-enter[data-v-0e169eff],.fade-leave-to[data-v-0e169eff]{opacity:0}.material-design-icon[data-v-8dabc003]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.dashboard-widget[data-v-8dabc003] .empty-content{text-align:center;padding-top:5vh}.dashboard-widget[data-v-8dabc003] .empty-content.half-screen{padding-top:0;margin-bottom:1vh}.more[data-v-8dabc003]{display:block;text-align:center;color:var(--color-text-maxcontrast);line-height:60px;cursor:pointer}.more[data-v-8dabc003]:hover,.more[data-v-8dabc003]:focus{background-color:var(--color-background-hover);border-radius:var(--border-radius-element);color:var(--color-main-text)}.item-list__entry[data-v-8dabc003]{display:flex;align-items:flex-start;padding:8px}.item-list__entry .item-avatar[data-v-8dabc003]{position:relative;margin-block:auto;background-color:var(--color-background-dark)!important}.item-list__entry .item__details[data-v-8dabc003]{padding-inline-start:8px;max-height:var(--default-clickable-area);flex-grow:1;overflow:hidden;display:flex;flex-direction:column}.item-list__entry .item__details h3[data-v-8dabc003],.item-list__entry .item__details .message[data-v-8dabc003]{white-space:nowrap;background-color:var(--color-background-dark)}.item-list__entry .item__details h3[data-v-8dabc003]{font-size:100%;margin:0}.item-list__entry .item__details .message[data-v-8dabc003]{width:80%;height:15px;margin-top:5px}.material-design-icon[data-v-2c8b617b]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.item-list__entry[data-v-2c8b617b]{display:flex;align-items:center;position:relative;padding:8px}.item-list__entry[data-v-2c8b617b]:hover,.item-list__entry[data-v-2c8b617b]:focus{background-color:var(--color-background-hover);border-radius:var(--border-radius-element)}.item-list__entry .item-avatar[data-v-2c8b617b]{position:relative;margin-top:auto;margin-bottom:auto}.item-list__entry .item__details[data-v-2c8b617b]{padding-inline-start:8px;max-height:fit-content;flex-grow:1;overflow:hidden;display:flex;flex-direction:column;justify-content:center;min-height:var(--default-clickable-area)}.item-list__entry .item__details h3[data-v-2c8b617b],.item-list__entry .item__details .message[data-v-2c8b617b]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.item-list__entry .item__details .message span[data-v-2c8b617b]{width:10px;display:inline-block;margin-bottom:-3px}.item-list__entry .item__details h3[data-v-2c8b617b]{font-size:100%;margin:0}.item-list__entry .item__details .message[data-v-2c8b617b]{width:100%;color:var(--color-text-maxcontrast)}.item-list__entry .item-icon[data-v-2c8b617b]{position:relative;width:14px;height:14px;margin-top:25px;margin-inline:-10px -2px}.item-list__entry button.primary[data-v-2c8b617b]{padding:21px;margin:0}._filePicker_UHtO-{display:inline-flex;align-items:center;height:var(--default-clickable-area)}._material-design-icon_mubdv{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._ncFormBox_TawZT{display:flex;flex-direction:column;gap:calc(1 * var(--default-grid-baseline))}._ncFormBox_TawZT._ncFormBox_row_ZnhfS{flex-direction:row}._ncFormBox__item_7zc34{border-radius:var(--border-radius-small)!important}._ncFormBox_col_wHCZx{flex-direction:column}._ncFormBox_col_wHCZx ._ncFormBox__item_7zc34:first-child{border-start-start-radius:var(--border-radius-element)!important;border-start-end-radius:var(--border-radius-element)!important}._ncFormBox_col_wHCZx ._ncFormBox__item_7zc34:last-child{border-end-start-radius:var(--border-radius-element)!important;border-end-end-radius:var(--border-radius-element)!important}._ncFormBox_row_ZnhfS{flex-direction:row}._ncFormBox_row_ZnhfS ._ncFormBox__item_7zc34{flex:1 1}._ncFormBox_row_ZnhfS ._ncFormBox__item_7zc34:first-child{border-start-start-radius:var(--border-radius-element)!important;border-end-start-radius:var(--border-radius-element)!important}._ncFormBox_row_ZnhfS ._ncFormBox__item_7zc34:last-child{border-end-end-radius:var(--border-radius-element)!important;border-start-end-radius:var(--border-radius-element)!important}._material-design-icon_RoXMm{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._formBoxButton_qQIni{background:unset;border:none;color:inherit;font-size:inherit;font-weight:inherit;text-decoration:none;text-align:inherit;line-height:inherit;padding:0;margin:0;outline:none}._material-design-icon_D2F-K{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._formBoxItem_74l6r{--nc-form-box-item-border-width: 1px;--nc-form-box-item-min-height: 40px;--form-element-label-offset: calc(var(--border-radius-element) + var(--default-grid-baseline));--form-element-label-padding: calc(var(--form-element-label-offset) - var(--nc-form-box-item-border-width));--color-primary-element-extra-light: hsl(from var(--color-primary-element-light) h s calc(l*1.045) );--color-primary-element-extra-light-hover: hsl(from var(--color-primary-element-light-hover) h s calc(l*1.045) );position:relative;display:flex;align-items:center;gap:calc(2 * var(--default-grid-baseline));min-height:var(--nc-form-box-item-min-height);padding-inline:var(--form-element-label-padding);border:1px solid var(--color-primary-element-extra-light-hover);border-bottom-width:2px;border-radius:var(--border-radius-element);background-color:var(--color-primary-element-extra-light);color:var(--color-main-text);font-weight:var(--font-weight-element, normal);transition-property:color,border-color,background-color;transition-duration:var(--animation-quick);transition-timing-function:linear;-webkit-user-select:none;user-select:none;cursor:pointer}._formBoxItem_74l6r *{cursor:inherit}._formBoxItem_74l6r:has(:disabled){cursor:default;opacity:.5}._formBoxItem_74l6r:hover:not(:has(:disabled)){color:var(--color-primary-element-light-text);background-color:var(--color-primary-element-extra-light-hover)}._formBoxItem_74l6r:has(:focus-visible){outline:2px solid var(--color-main-text);box-shadow:0 0 0 4px var(--color-main-background)}._formBoxItem__description_1GjPD{font-weight:var(--font-weight-default, normal)}._formBoxItem_74l6r._formBoxItem_legacy_IgNr3{--nc-form-box-item-border-width: 0px;border:none}._formBoxItem_74l6r._formBoxItem_inverted_9GGkh ._formBoxItem__element_YEZDA{color:var(--color-text-maxcontrast)}._formBoxItem_74l6r._formBoxItem_inverted_9GGkh ._formBoxItem__description_1GjPD{color:inherit}._formBoxItem__content_CcZbG{flex:1;display:flex;flex-direction:column;padding-block:calc(2 * var(--default-grid-baseline));overflow-wrap:anywhere}._formBoxItem__element_YEZDA:after{content:"";position:absolute;inset:0}._formBoxItem__description_1GjPD{color:var(--color-text-maxcontrast)}._formBoxItem__icon_eZXNE{display:flex;align-items:center;justify-content:flex-end}._material-design-icon_YAxyJ{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}input._formBoxSwitch__input_e7y7s{margin:0;width:var(--default-clickable-area);position:absolute;inset-block:0;inset-inline-end:var(--form-element-label-offset);z-index:-1;opacity:0!important;height:auto;cursor:inherit}._material-design-icon_QhThW{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._formGroup_sNzER{--form-element-label-offset: calc(var(--border-radius-element) + var(--default-grid-baseline));--form-group-content-gap: calc(2 * var(--default-grid-baseline))}._formGroup_sNzER._formGroup_noGap_ChojB{--form-group-content-gap: 0}._formGroup__label_Z81k5{padding-inline:var(--form-element-label-offset);font-size:var(--font-size);font-weight:var(--font-weight-heading, bold)}._formGroup__description_xWRa-{padding-inline:var(--form-element-label-offset);color:var(--color-text-maxcontrast)}._formGroup__content_wHRjf{display:flex;flex-direction:column;gap:var(--form-group-content-gap);margin-block-start:calc(2.5 * var(--default-grid-baseline))}._formGroup__content_wHRjf._formGroup__content_only_VejcN{margin-block-start:0}.material-design-icon[data-v-92fb182d]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.header-menu[data-v-92fb182d]{position:relative;width:var(--header-height);height:var(--header-height)}.header-menu .header-menu__trigger[data-v-92fb182d]{--button-size: var(--header-height) !important;height:var(--header-height);opacity:.85;filter:none!important;color:var(--color-background-plain-text, var(--color-primary-text))!important}.header-menu .header-menu__trigger[data-v-92fb182d]:focus-visible{outline:none!important;box-shadow:none!important}.header-menu .header-menu__trigger[data-v-92fb182d] .button-vue__icon svg,.header-menu .header-menu__trigger[data-v-92fb182d] .button-vue__icon:not(:has(svg)){-webkit-mask:var(--header-menu-icon-mask, none);mask:var(--header-menu-icon-mask, none)}.header-menu--opened .header-menu__trigger[data-v-92fb182d],.header-menu__trigger[data-v-92fb182d]:hover,.header-menu__trigger[data-v-92fb182d]:focus,.header-menu__trigger[data-v-92fb182d]:active{opacity:1}@media only screen and (max-width:512px){.header-menu[data-v-92fb182d]{width:var(--default-clickable-area)}.header-menu .header-menu__trigger[data-v-92fb182d]{--button-size: var(--default-clickable-area) !important}}.material-design-icon[data-v-d45c5788]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}/*! +.material-design-icon[data-v-6a2b8de0]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.nc-button-group-base>div[data-v-6a2b8de0]{text-align:center;color:var(--color-text-maxcontrast)}.nc-button-group-base ul.nc-button-group-content[data-v-6a2b8de0]{display:flex;gap:4px;justify-content:space-between}.nc-button-group-base ul.nc-button-group-content li[data-v-6a2b8de0-s]{flex:1 1}.nc-button-group-base ul.nc-button-group-content[data-v-6a2b8de0] .action-button{padding:0!important;width:100%;display:flex;justify-content:center}.nc-button-group-base ul.nc-button-group-content[data-v-6a2b8de0] .action-button.action-button--active{background-color:var(--color-primary-element);border-radius:var(--border-radius-element);color:var(--color-primary-element-text)}.nc-button-group-base ul.nc-button-group-content[data-v-6a2b8de0] .action-button.action-button--active:hover,.nc-button-group-base ul.nc-button-group-content[data-v-6a2b8de0] .action-button.action-button--active:focus,.nc-button-group-base ul.nc-button-group-content[data-v-6a2b8de0] .action-button.action-button--active:focus-within{background-color:var(--color-primary-element-hover)}.nc-button-group-base ul.nc-button-group-content[data-v-6a2b8de0] .action-button .action-button__pressed-icon{display:none}.material-design-icon[data-v-1009e96c]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-caption[data-v-1009e96c]{color:var(--color-text-maxcontrast);line-height:var(--default-clickable-area);white-space:nowrap;text-overflow:ellipsis;box-shadow:none!important;-webkit-user-select:none;user-select:none;pointer-events:none;margin-inline-start:12px;padding-inline-end:14px;height:var(--default-clickable-area);display:flex;align-items:center}.material-design-icon[data-v-2947bc3b]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}li.action[data-v-2947bc3b]:hover,li.action.active[data-v-2947bc3b]{border-radius:6px;padding:0}li.action[data-v-2947bc3b]:hover{background-color:var(--color-background-hover)}.action--disabled[data-v-2947bc3b]{pointer-events:none;opacity:.5}.action--disabled[data-v-2947bc3b]:hover,.action--disabled[data-v-2947bc3b]:focus{cursor:default;opacity:.5}.action--disabled[data-v-2947bc3b] *{opacity:1!important}.action-checkbox[data-v-2947bc3b]{display:flex;align-items:flex-start;width:100%;height:auto;margin:0;padding:0;padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2);box-sizing:border-box;cursor:pointer;white-space:nowrap;color:var(--color-main-text);border:0;border-radius:0;background-color:transparent;box-shadow:none;font-weight:var(--font-weight-element, normal);font-size:var(--default-font-size);line-height:var(--default-clickable-area)}.action-checkbox>span[data-v-2947bc3b]{cursor:pointer;white-space:nowrap}.action-checkbox__icon[data-v-2947bc3b]{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1;background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px;background-repeat:no-repeat}.action-checkbox[data-v-2947bc3b] .material-design-icon{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1}.action-checkbox[data-v-2947bc3b] .material-design-icon .material-design-icon__svg{vertical-align:middle}.action-checkbox__longtext-wrapper[data-v-2947bc3b],.action-checkbox__longtext[data-v-2947bc3b]{max-width:220px;line-height:1.6em;padding:calc((var(--default-clickable-area) - 1.6em) / 2) 0;cursor:pointer;text-align:start;overflow:hidden;text-overflow:ellipsis}.action-checkbox__longtext[data-v-2947bc3b]{cursor:pointer;white-space:pre-wrap!important}.action-checkbox__name[data-v-2947bc3b]{font-weight:var(--font-weight-heading, bold);text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:100%;display:block}.action-checkbox__description[data-v-2947bc3b]{display:block;white-space:pre-wrap;font-size:var(--font-size-small);font-weight:var(--font-weight-default, normal);line-height:var(--default-line-height);color:var(--color-text-maxcontrast);cursor:pointer}.action-checkbox__menu-icon[data-v-2947bc3b]{margin-inline:auto calc((var(--default-clickable-area) - 16px) / 2 * -1)}.action[data-v-2947bc3b]:has(:focus-visible){outline:2px solid currentColor}.action-checkbox__icon[data-v-2947bc3b]{color:var(--color-primary-element)}.action-checkbox__input[data-v-2947bc3b]{width:20px;height:20px;margin:auto;position:absolute;z-index:-1;opacity:0!important}.material-design-icon[data-v-6c208ddd]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}li.action[data-v-6c208ddd]:hover,li.action.active[data-v-6c208ddd]{border-radius:6px;padding:0}li.action[data-v-6c208ddd]:hover{background-color:var(--color-background-hover)}.action--disabled[data-v-6c208ddd]{pointer-events:none;opacity:.5}.action--disabled[data-v-6c208ddd]:hover,.action--disabled[data-v-6c208ddd]:focus{cursor:default;opacity:.5}.action--disabled[data-v-6c208ddd] *{opacity:1!important}.action-radio[data-v-6c208ddd]{display:flex;align-items:flex-start;width:100%;height:auto;margin:0;padding:0;padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2);box-sizing:border-box;cursor:pointer;white-space:nowrap;color:var(--color-main-text);border:0;border-radius:0;background-color:transparent;box-shadow:none;font-weight:var(--font-weight-element, normal);font-size:var(--default-font-size);line-height:var(--default-clickable-area)}.action-radio>span[data-v-6c208ddd]{cursor:pointer;white-space:nowrap}.action-radio__icon[data-v-6c208ddd]{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1;background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px;background-repeat:no-repeat}.action-radio[data-v-6c208ddd] .material-design-icon{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1}.action-radio[data-v-6c208ddd] .material-design-icon .material-design-icon__svg{vertical-align:middle}.action-radio__longtext-wrapper[data-v-6c208ddd],.action-radio__longtext[data-v-6c208ddd]{max-width:220px;line-height:1.6em;padding:calc((var(--default-clickable-area) - 1.6em) / 2) 0;cursor:pointer;text-align:start;overflow:hidden;text-overflow:ellipsis}.action-radio__longtext[data-v-6c208ddd]{cursor:pointer;white-space:pre-wrap!important}.action-radio__name[data-v-6c208ddd]{font-weight:var(--font-weight-heading, bold);text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:100%;display:block}.action-radio__description[data-v-6c208ddd]{display:block;white-space:pre-wrap;font-size:var(--font-size-small);font-weight:var(--font-weight-default, normal);line-height:var(--default-line-height);color:var(--color-text-maxcontrast);cursor:pointer}.action-radio__menu-icon[data-v-6c208ddd]{margin-inline:auto calc((var(--default-clickable-area) - 16px) / 2 * -1)}.action[data-v-6c208ddd]:has(:focus-visible){outline:2px solid currentColor}.action-radio__icon[data-v-6c208ddd]{color:var(--color-primary-element)}.action-radio__input[data-v-6c208ddd]{width:20px;height:20px;margin:auto;position:absolute;z-index:-1;opacity:0!important}.material-design-icon[data-v-30af16d1]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}button[data-v-30af16d1]:not(.button-vue),input[data-v-30af16d1]:not([type=range]),textarea[data-v-30af16d1]{margin:0;padding:7px 6px;cursor:text;color:var(--color-main-text);border:1px solid var(--color-border-dark);border-radius:var(--border-radius-element);outline:none;background-color:var(--color-main-background);font-size:13px}button[data-v-30af16d1]:not(.button-vue):not(:disabled):not(.primary):hover,button[data-v-30af16d1]:not(.button-vue):not(:disabled):not(.primary):focus,button:not(.button-vue):not(:disabled):not(.primary).active[data-v-30af16d1],input[data-v-30af16d1]:not([type=range]):not(:disabled):not(.primary):hover,input[data-v-30af16d1]:not([type=range]):not(:disabled):not(.primary):focus,input:not([type=range]):not(:disabled):not(.primary).active[data-v-30af16d1],textarea[data-v-30af16d1]:not(:disabled):not(.primary):hover,textarea[data-v-30af16d1]:not(:disabled):not(.primary):focus,textarea:not(:disabled):not(.primary).active[data-v-30af16d1]{border-color:var(--color-primary-element);outline:none}button[data-v-30af16d1]:not(.button-vue):not(:disabled):not(.primary):active,input[data-v-30af16d1]:not([type=range]):not(:disabled):not(.primary):active,textarea[data-v-30af16d1]:not(:disabled):not(.primary):active{color:var(--color-main-text);outline:none;background-color:var(--color-main-background)}button[data-v-30af16d1]:not(.button-vue):disabled,input[data-v-30af16d1]:not([type=range]):disabled,textarea[data-v-30af16d1]:disabled{cursor:default;opacity:.5;color:var(--color-text-maxcontrast);background-color:var(--color-background-dark)}button[data-v-30af16d1]:not(.button-vue):required,input[data-v-30af16d1]:not([type=range]):required,textarea[data-v-30af16d1]:required{box-shadow:none}button[data-v-30af16d1]:not(.button-vue):invalid,input[data-v-30af16d1]:not([type=range]):invalid,textarea[data-v-30af16d1]:invalid{border-color:var(--color-border-error, var(--color-error));box-shadow:none!important}button:not(.button-vue).primary[data-v-30af16d1],input:not([type=range]).primary[data-v-30af16d1],textarea.primary[data-v-30af16d1]{cursor:pointer;color:var(--color-primary-element-text);border-color:var(--color-primary-element);background-color:var(--color-primary-element)}button:not(.button-vue).primary[data-v-30af16d1]:not(:disabled):hover,button:not(.button-vue).primary[data-v-30af16d1]:not(:disabled):focus,button:not(.button-vue).primary[data-v-30af16d1]:not(:disabled):active,input:not([type=range]).primary[data-v-30af16d1]:not(:disabled):hover,input:not([type=range]).primary[data-v-30af16d1]:not(:disabled):focus,input:not([type=range]).primary[data-v-30af16d1]:not(:disabled):active,textarea.primary[data-v-30af16d1]:not(:disabled):hover,textarea.primary[data-v-30af16d1]:not(:disabled):focus,textarea.primary[data-v-30af16d1]:not(:disabled):active{border-color:var(--color-primary-element-light);background-color:var(--color-primary-element-light)}button:not(.button-vue).primary[data-v-30af16d1]:not(:disabled):active,input:not([type=range]).primary[data-v-30af16d1]:not(:disabled):active,textarea.primary[data-v-30af16d1]:not(:disabled):active{color:var(--color-primary-element-text-dark)}button:not(.button-vue).primary[data-v-30af16d1]:disabled,input:not([type=range]).primary[data-v-30af16d1]:disabled,textarea.primary[data-v-30af16d1]:disabled{cursor:default;color:var(--color-primary-element-text-dark);background-color:var(--color-primary-element)}li.action[data-v-30af16d1]:hover,li.action.active[data-v-30af16d1]{border-radius:6px;padding:0}li.action[data-v-30af16d1]:hover{background-color:var(--color-background-hover)}.action--disabled[data-v-30af16d1]{pointer-events:none;opacity:.5}.action--disabled[data-v-30af16d1]:hover,.action--disabled[data-v-30af16d1]:focus{cursor:default;opacity:.5}.action--disabled[data-v-30af16d1] *{opacity:1!important}.action-text-editable[data-v-30af16d1]{display:flex;align-items:flex-start;width:100%;height:auto;margin:0;padding:0;cursor:pointer;white-space:nowrap;color:var(--color-main-text);border:0;border-radius:0;background-color:transparent;box-shadow:none;font-weight:var(--font-weight-default, normal);line-height:var(--default-clickable-area)}.action-text-editable>span[data-v-30af16d1]{cursor:pointer;white-space:nowrap}.action-text-editable__icon[data-v-30af16d1]{min-width:0;min-height:0;padding:calc(var(--default-clickable-area) / 2) 0 calc(var(--default-clickable-area) / 2) var(--default-clickable-area);background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px}.action-text-editable[data-v-30af16d1] .material-design-icon{width:var(--default-clickable-area);height:var(--default-clickable-area);opacity:1}.action-text-editable[data-v-30af16d1] .material-design-icon .material-design-icon__svg{vertical-align:middle}.action-text-editable__form[data-v-30af16d1]{display:flex;flex:1 1 auto;flex-direction:column;position:relative;margin:4px 0;padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2)}.action-text-editable__submit[data-v-30af16d1]{position:absolute;inset-inline-start:0;top:auto;width:1px;height:1px;overflow:hidden;z-index:-1;opacity:0}.action-text-editable__label[data-v-30af16d1]{display:flex;align-items:center;justify-content:center;position:absolute;inset-inline-end:calc((var(--default-clickable-area) - 16px) / 2 + 1px);bottom:1px;width:calc(var(--default-clickable-area) - 8px);height:calc(var(--default-clickable-area) - 8px);box-sizing:border-box;margin:0;padding:7px 6px;border:0;border-radius:50%;background-color:var(--color-main-background);background-clip:padding-box}.action-text-editable__label[data-v-30af16d1],.action-text-editable__label[data-v-30af16d1] *{cursor:pointer}.action-text-editable__textarea[data-v-30af16d1]{flex:1 1 auto;color:inherit;border-color:var(--color-border-maxcontrast);min-height:calc(var(--default-clickable-area) * 2 - 8px);max-height:calc(var(--default-clickable-area) * 3 - 8px);min-width:calc(var(--default-clickable-area) * 4);width:100%!important;margin:0}.action-text-editable__textarea[data-v-30af16d1]:disabled{cursor:default}.action-text-editable__textarea:not(:active):not(:hover):not(:focus):invalid+.action-text-editable__label[data-v-30af16d1]{background-color:var(--color-error)}.action-text-editable__textarea:not(:active):not(:hover):not(:focus):not(:disabled)+.action-text-editable__label[data-v-30af16d1]:active,.action-text-editable__textarea:not(:active):not(:hover):not(:focus):not(:disabled)+.action-text-editable__label[data-v-30af16d1]:hover,.action-text-editable__textarea:not(:active):not(:hover):not(:focus):not(:disabled)+.action-text-editable__label[data-v-30af16d1]:focus{background-color:var(--color-primary-element);color:var(--color-primary-element-text)}.action-text-editable__textarea:active:not(:disabled)+.action-text-editable__label[data-v-30af16d1],.action-text-editable__textarea:hover:not(:disabled)+.action-text-editable__label[data-v-30af16d1],.action-text-editable__textarea:focus:not(:disabled)+.action-text-editable__label[data-v-30af16d1]{z-index:2;border-color:var(--color-primary-element);border-inline-start-color:transparent}li:last-child>.action-text-editable[data-v-30af16d1]{margin-bottom:calc((var(--default-clickable-area) - 16px) / 2 - 4px)}li:first-child>.action-text-editable[data-v-30af16d1]{margin-top:calc((var(--default-clickable-area) - 16px) / 2 - 4px)}.material-design-icon[data-v-5a15295d]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-toggle-wrapper[data-v-5a15295d]{position:absolute;top:var(--app-navigation-padding);inset-inline-end:calc(0px - var(--app-navigation-padding));margin-inline-end:calc(-1 * var(--default-clickable-area))}button.app-navigation-toggle[data-v-5a15295d]{background-color:var(--color-main-background)}.app-navigation,.app-content{--app-navigation-padding: calc(var(--default-grid-baseline, 4px) * 2)}.material-design-icon[data-v-104ef656]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation[data-v-104ef656]{--color-text-maxcontrast: var(--color-text-maxcontrast-background-blur, var(--color-text-maxcontrast-default));transition:transform var(--animation-quick),margin var(--animation-quick);width:300px;--app-navigation-max-width: calc(100vw - (var(--app-navigation-padding) + var(--default-clickable-area) + var(--default-grid-baseline)));max-width:var(--app-navigation-max-width);position:relative;top:0;inset-inline-start:0;padding:0;z-index:1800;height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;flex-grow:0;flex-shrink:0;background-color:transparent}.app-navigation--legacy[data-v-104ef656]{background-color:var(--color-main-background-blur, var(--color-main-background));-webkit-backdrop-filter:var(--filter-background-blur, none);backdrop-filter:var(--filter-background-blur, none)}.app-navigation--closed[data-v-104ef656]{margin-inline-start:calc(-1*min(300px,var(--app-navigation-max-width)))}.app-navigation__search[data-v-104ef656]{width:100%}.app-navigation__body[data-v-104ef656]{overflow-y:scroll}.app-navigation__content>ul[data-v-104ef656]{position:relative;width:100%;overflow-x:hidden;overflow-y:auto;display:flex;flex-direction:column;gap:var(--default-grid-baseline, 4px);padding:var(--app-navigation-padding)}.app-navigation .app-navigation__list[data-v-104ef656]{height:100%}.app-navigation__body--no-list[data-v-104ef656]{flex:1 1 auto;overflow:auto;height:100%}.app-navigation__content[data-v-104ef656]{height:100%;display:flex;flex-direction:column}[data-themes*=highcontrast] .app-navigation[data-v-104ef656]{border-inline-end:1px solid var(--color-border)}@media only screen and (width<1024px){.app-navigation[data-v-104ef656]{position:absolute;border-inline-end:1px solid var(--color-border);background-color:var(--color-main-background-blur, var(--color-main-background));-webkit-backdrop-filter:var(--filter-background-blur, none);backdrop-filter:var(--filter-background-blur, none)}}@media only screen and (max-width:512px){.app-navigation[data-v-104ef656]{z-index:1400}}.material-design-icon[data-v-d72957ed]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-list[data-v-d72957ed]{position:relative;width:100%;overflow-x:hidden;overflow-y:auto;display:flex;flex-direction:column;gap:var(--default-grid-baseline, 4px);padding:var(--app-navigation-padding)}.material-design-icon[data-v-f0e411c2]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-caption[data-v-f0e411c2]{display:flex;justify-content:space-between}.app-navigation-caption--heading[data-v-f0e411c2]{padding:var(--app-navigation-padding)}.app-navigation-caption--heading[data-v-f0e411c2]:not(:first-child):not(:last-child){padding:0 var(--app-navigation-padding)}.app-navigation-caption__name[data-v-f0e411c2]{font-weight:var(--font-weight-heading, bold);color:var(--color-main-text);font-size:var(--default-font-size);line-height:var(--default-clickable-area);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-shadow:none!important;flex-shrink:0;padding-block:0;padding-inline:calc(var(--default-grid-baseline, 4px) * 2) 0;margin-top:0;margin-bottom:var(--default-grid-baseline)}.app-navigation-caption__actions[data-v-f0e411c2]{flex:0 0 var(--default-clickable-area)}.app-navigation-caption[data-v-f0e411c2]:not(:first-child){margin-top:calc(var(--default-clickable-area) / 2)}.material-design-icon[data-v-04a313f4]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-entry__icon-bullet[data-v-04a313f4]{display:block;padding:calc((var(--default-clickable-area) - 16px) / 2 + 1px)}.app-navigation-entry__icon-bullet div[data-v-04a313f4]{width:14px;height:14px;cursor:pointer;transition:background .1s ease-in-out;border:none;border-radius:50%}.material-design-icon[data-v-acf5ed2f]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.icon-collapse[data-v-acf5ed2f]{position:relative;inset-inline-end:0}.icon-collapse[data-v-acf5ed2f]:hover{background-color:var(--color-background-dark)!important}.icon-collapse--active[data-v-acf5ed2f]:hover{background-color:var(--color-primary-element)!important}.material-design-icon[data-v-e4d562ae]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-entry[data-v-e4d562ae]{position:relative;display:flex;flex-shrink:0;flex-wrap:wrap;width:100%;min-height:var(--default-clickable-area);transition:background-color var(--animation-quick) ease-in-out;transition:background-color .2s ease-in-out;border-radius:var(--border-radius-element)}.app-navigation-entry-wrapper[data-v-e4d562ae]{position:relative;display:flex;flex-shrink:0;flex-wrap:wrap;width:100%}.app-navigation-entry-wrapper.app-navigation-entry--collapsible:not(.app-navigation-entry--opened)>ul[data-v-e4d562ae]{display:none}.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-e4d562ae]{background-color:color-mix(in srgb,var(--color-primary-element) 16%,transparent)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-e4d562ae]:hover{background-color:color-mix(in srgb,var(--color-primary-element) 22%,transparent)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active:not(.app-navigation-entry--editing) .app-navigation-entry-link[data-v-e4d562ae],.app-navigation-entry:not(.app-navigation-entry--legacy).active:not(.app-navigation-entry--editing) .app-navigation-entry-button[data-v-e4d562ae]{color:var(--color-main-text)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-e4d562ae]:not(.app-navigation-entry--editing):before{content:"";position:absolute;inset-block:calc(var(--default-grid-baseline, 4px) * 2);inset-inline-start:0;width:3px;background-color:var(--color-primary-element);border-radius:999px;animation:nc-nav-stripe-in-e4d562ae var(--animation-quick, .2s) ease-out}.app-navigation-entry.app-navigation-entry--legacy.active[data-v-e4d562ae]{background-color:var(--color-primary-element)!important}.app-navigation-entry.app-navigation-entry--legacy.active[data-v-e4d562ae]:hover{background-color:var(--color-primary-element-hover)!important}.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry-link[data-v-e4d562ae],.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry-button[data-v-e4d562ae]{color:var(--color-primary-element-text)!important}.app-navigation-entry[data-v-e4d562ae]:focus-within,.app-navigation-entry[data-v-e4d562ae]:hover{background-color:var(--color-background-hover)}.app-navigation-entry[data-v-e4d562ae]:not(.app-navigation-entry--legacy):focus-within,.app-navigation-entry[data-v-e4d562ae]:not(.app-navigation-entry--legacy):hover{background-color:color-mix(in srgb,var(--color-primary-element) 8%,transparent)}.app-navigation-entry.active .app-navigation-entry__children[data-v-e4d562ae],.app-navigation-entry:focus-within .app-navigation-entry__children[data-v-e4d562ae],.app-navigation-entry:hover .app-navigation-entry__children[data-v-e4d562ae]{background-color:var(--color-main-background)}.app-navigation-entry.active .app-navigation-entry__utils .app-navigation-entry__actions[data-v-e4d562ae],.app-navigation-entry.app-navigation-entry--deleted .app-navigation-entry__utils .app-navigation-entry__actions[data-v-e4d562ae],.app-navigation-entry:focus .app-navigation-entry__utils .app-navigation-entry__actions[data-v-e4d562ae],.app-navigation-entry:focus-within .app-navigation-entry__utils .app-navigation-entry__actions[data-v-e4d562ae],.app-navigation-entry:hover .app-navigation-entry__utils .app-navigation-entry__actions[data-v-e4d562ae]{display:inline-block}.app-navigation-entry .app-navigation-entry__actions[data-v-e4d562ae]:hover .button-vue{background-color:var(--color-background-dark)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active .app-navigation-entry__actions[data-v-e4d562ae]:hover .button-vue{background-color:var(--color-background-dark)!important}.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry__actions[data-v-e4d562ae]:hover .button-vue{background-color:var(--color-primary-element)!important}.app-navigation-entry.app-navigation-entry--deleted>ul[data-v-e4d562ae]{display:none}.app-navigation-entry:not(.app-navigation-entry--editing) .app-navigation-entry-link[data-v-e4d562ae],.app-navigation-entry:not(.app-navigation-entry--editing) .app-navigation-entry-button[data-v-e4d562ae]{padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2)}.app-navigation-entry .app-navigation-entry-link[data-v-e4d562ae],.app-navigation-entry .app-navigation-entry-button[data-v-e4d562ae]{z-index:100;display:flex;overflow:hidden;flex:1 1 0;min-height:var(--default-clickable-area);padding:0;white-space:nowrap;color:var(--color-main-text);font-weight:500;background-repeat:no-repeat;background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px 16px;line-height:var(--default-clickable-area)}.app-navigation-entry .app-navigation-entry-link .app-navigation-entry-icon[data-v-e4d562ae],.app-navigation-entry .app-navigation-entry-button .app-navigation-entry-icon[data-v-e4d562ae]{display:flex;align-items:center;flex:0 0 var(--default-clickable-area);justify-content:center;width:var(--default-clickable-area);height:var(--default-clickable-area);background-size:16px 16px;background-repeat:no-repeat;background-position:calc((var(--default-clickable-area) - 16px) / 2) center}.app-navigation-entry .app-navigation-entry-link .app-navigation-entry__name[data-v-e4d562ae],.app-navigation-entry .app-navigation-entry-button .app-navigation-entry__name[data-v-e4d562ae]{overflow:hidden;max-width:100%;white-space:nowrap;text-overflow:ellipsis;font-weight:var(--font-weight-element, normal)}.app-navigation-entry .app-navigation-entry-link .editingContainer[data-v-e4d562ae],.app-navigation-entry .app-navigation-entry-button .editingContainer[data-v-e4d562ae]{width:calc(100% - var(--default-clickable-area));margin:auto}.app-navigation-entry .app-navigation-entry-link[data-v-e4d562ae]:focus-visible,.app-navigation-entry .app-navigation-entry-button[data-v-e4d562ae]:focus-visible{box-shadow:0 0 0 4px var(--color-main-background);outline:2px solid var(--color-main-text);border-radius:var(--border-radius-element)}.app-navigation-entry__children[data-v-e4d562ae]{--app-navigation-item-child-offset: 10px;position:relative;display:flex;flex:0 1 auto;flex-direction:column;width:100%;gap:var(--default-grid-baseline, 4px);padding-inline-start:var(--app-navigation-item-child-offset)}.app-navigation-entry__children .app-navigation-entry[data-v-e4d562ae]{display:inline-flex;flex-wrap:wrap}.app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children[data-v-e4d562ae]{--app-navigation-item-child-offset: 0}.app-navigation-entry__deleted[data-v-e4d562ae]{display:inline-flex;flex:1 1 0;padding-inline-start:calc(var(--default-clickable-area) - (var(--default-clickable-area) - 16px) / 2)!important}.app-navigation-entry__deleted .app-navigation-entry__deleted-description[data-v-e4d562ae]{position:relative;overflow:hidden;flex:1 1 0;white-space:nowrap;text-overflow:ellipsis;line-height:var(--default-clickable-area)}.app-navigation-entry__utils[data-v-e4d562ae]{display:flex;min-width:var(--default-clickable-area);align-items:center;flex:0 1 auto;justify-content:flex-end}.app-navigation-entry__utils.app-navigation-entry__utils--display-actions .action-item.app-navigation-entry__actions[data-v-e4d562ae]{display:inline-block}.app-navigation-entry__utils .app-navigation-entry__counter-wrapper[data-v-e4d562ae]{margin-inline-end:calc(var(--default-grid-baseline) * 2);display:flex;align-items:center;flex:0 1 auto}.app-navigation-entry__utils .action-item.app-navigation-entry__actions[data-v-e4d562ae]{display:none}.app-navigation-entry--editing .app-navigation-entry-edit[data-v-e4d562ae]{z-index:250;opacity:1}.app-navigation-entry--deleted .app-navigation-entry-deleted[data-v-e4d562ae]{z-index:250;transform:translate(0)}.app-navigation-entry--pinned[data-v-e4d562ae]{order:2;margin-top:auto}.app-navigation-entry--pinned~.app-navigation-entry--pinned[data-v-e4d562ae]{margin-top:0}[data-themes*=highcontrast] .app-navigation-entry[data-v-e4d562ae]:active{background-color:var(--color-primary-element-light-hover)!important}@keyframes nc-nav-stripe-in-e4d562ae{0%{transform:scaleY(0);opacity:0}to{transform:scaleY(1);opacity:1}}.material-design-icon[data-v-a8724c7f]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-input-confirm[data-v-a8724c7f]{flex:1 0 100%;width:100%}.app-navigation-input-confirm form[data-v-a8724c7f]{display:flex}.app-navigation-input-confirm__input[data-v-a8724c7f]{height:34px;flex:1 1 100%;font-size:100%!important;margin:5px!important;margin-inline-start:-8px!important;padding:7px!important}.app-navigation-input-confirm__input[data-v-a8724c7f]:active,.app-navigation-input-confirm__input[data-v-a8724c7f]:focus,.app-navigation-input-confirm__input[data-v-a8724c7f]:hover{outline:none;background-color:var(--color-main-background);color:var(--color-main-text);border-color:var(--color-primary-element)}.app-navigation-input-confirm:not(.app-navigation-input-confirm--legacy) form[data-v-a8724c7f]{align-items:center;gap:5px;padding-inline-end:5px}.app-navigation-input-confirm:not(.app-navigation-input-confirm--legacy) .app-navigation-input-confirm__input[data-v-a8724c7f]{margin-inline-end:0!important}.app-navigation-input-confirm[data-v-a8724c7f]:not(.app-navigation-input-confirm--legacy) .button-vue{width:34px!important;min-width:34px!important;height:34px!important;flex:0 0 34px}.material-design-icon[data-v-0ba6c9df]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-new[data-v-0ba6c9df]{display:block;padding:calc(var(--default-grid-baseline, 4px) * 2)}.app-navigation-new button[data-v-0ba6c9df]{width:100%}.material-design-icon[data-v-ee07f8f8]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-entry[data-v-ee07f8f8]{position:relative;display:flex;flex-shrink:0;flex-wrap:wrap;width:100%;min-height:var(--default-clickable-area);transition:background-color var(--animation-quick) ease-in-out;transition:background-color .2s ease-in-out;border-radius:var(--border-radius-element)}.app-navigation-entry-wrapper[data-v-ee07f8f8]{position:relative;display:flex;flex-shrink:0;flex-wrap:wrap;width:100%}.app-navigation-entry-wrapper.app-navigation-entry--collapsible:not(.app-navigation-entry--opened)>ul[data-v-ee07f8f8]{display:none}.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-ee07f8f8]{background-color:color-mix(in srgb,var(--color-primary-element) 16%,transparent)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-ee07f8f8]:hover{background-color:color-mix(in srgb,var(--color-primary-element) 22%,transparent)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active:not(.app-navigation-entry--editing) .app-navigation-entry-link[data-v-ee07f8f8],.app-navigation-entry:not(.app-navigation-entry--legacy).active:not(.app-navigation-entry--editing) .app-navigation-entry-button[data-v-ee07f8f8]{color:var(--color-main-text)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active[data-v-ee07f8f8]:not(.app-navigation-entry--editing):before{content:"";position:absolute;inset-block:calc(var(--default-grid-baseline, 4px) * 2);inset-inline-start:0;width:3px;background-color:var(--color-primary-element);border-radius:999px;animation:nc-nav-stripe-in-ee07f8f8 var(--animation-quick, .2s) ease-out}.app-navigation-entry.app-navigation-entry--legacy.active[data-v-ee07f8f8]{background-color:var(--color-primary-element)!important}.app-navigation-entry.app-navigation-entry--legacy.active[data-v-ee07f8f8]:hover{background-color:var(--color-primary-element-hover)!important}.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry-link[data-v-ee07f8f8],.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry-button[data-v-ee07f8f8]{color:var(--color-primary-element-text)!important}.app-navigation-entry[data-v-ee07f8f8]:focus-within,.app-navigation-entry[data-v-ee07f8f8]:hover{background-color:var(--color-background-hover)}.app-navigation-entry[data-v-ee07f8f8]:not(.app-navigation-entry--legacy):focus-within,.app-navigation-entry[data-v-ee07f8f8]:not(.app-navigation-entry--legacy):hover{background-color:color-mix(in srgb,var(--color-primary-element) 8%,transparent)}.app-navigation-entry.active .app-navigation-entry__children[data-v-ee07f8f8],.app-navigation-entry:focus-within .app-navigation-entry__children[data-v-ee07f8f8],.app-navigation-entry:hover .app-navigation-entry__children[data-v-ee07f8f8]{background-color:var(--color-main-background)}.app-navigation-entry.active .app-navigation-entry__utils .app-navigation-entry__actions[data-v-ee07f8f8],.app-navigation-entry.app-navigation-entry--deleted .app-navigation-entry__utils .app-navigation-entry__actions[data-v-ee07f8f8],.app-navigation-entry:focus .app-navigation-entry__utils .app-navigation-entry__actions[data-v-ee07f8f8],.app-navigation-entry:focus-within .app-navigation-entry__utils .app-navigation-entry__actions[data-v-ee07f8f8],.app-navigation-entry:hover .app-navigation-entry__utils .app-navigation-entry__actions[data-v-ee07f8f8]{display:inline-block}.app-navigation-entry .app-navigation-entry__actions[data-v-ee07f8f8]:hover .button-vue{background-color:var(--color-background-dark)!important}.app-navigation-entry:not(.app-navigation-entry--legacy).active .app-navigation-entry__actions[data-v-ee07f8f8]:hover .button-vue{background-color:var(--color-background-dark)!important}.app-navigation-entry.app-navigation-entry--legacy.active .app-navigation-entry__actions[data-v-ee07f8f8]:hover .button-vue{background-color:var(--color-primary-element)!important}.app-navigation-entry.app-navigation-entry--deleted>ul[data-v-ee07f8f8]{display:none}.app-navigation-entry:not(.app-navigation-entry--editing) .app-navigation-entry-link[data-v-ee07f8f8],.app-navigation-entry:not(.app-navigation-entry--editing) .app-navigation-entry-button[data-v-ee07f8f8]{padding-inline-end:calc((var(--default-clickable-area) - 16px) / 2)}.app-navigation-entry .app-navigation-entry-link[data-v-ee07f8f8],.app-navigation-entry .app-navigation-entry-button[data-v-ee07f8f8]{z-index:100;display:flex;overflow:hidden;flex:1 1 0;min-height:var(--default-clickable-area);padding:0;white-space:nowrap;color:var(--color-main-text);font-weight:500;background-repeat:no-repeat;background-position:calc((var(--default-clickable-area) - 16px) / 2) center;background-size:16px 16px;line-height:var(--default-clickable-area)}.app-navigation-entry .app-navigation-entry-link .app-navigation-entry-icon[data-v-ee07f8f8],.app-navigation-entry .app-navigation-entry-button .app-navigation-entry-icon[data-v-ee07f8f8]{display:flex;align-items:center;flex:0 0 var(--default-clickable-area);justify-content:center;width:var(--default-clickable-area);height:var(--default-clickable-area);background-size:16px 16px;background-repeat:no-repeat;background-position:calc((var(--default-clickable-area) - 16px) / 2) center}.app-navigation-entry .app-navigation-entry-link .app-navigation-entry__name[data-v-ee07f8f8],.app-navigation-entry .app-navigation-entry-button .app-navigation-entry__name[data-v-ee07f8f8]{overflow:hidden;max-width:100%;white-space:nowrap;text-overflow:ellipsis;font-weight:var(--font-weight-element, normal)}.app-navigation-entry .app-navigation-entry-link .editingContainer[data-v-ee07f8f8],.app-navigation-entry .app-navigation-entry-button .editingContainer[data-v-ee07f8f8]{width:calc(100% - var(--default-clickable-area));margin:auto}.app-navigation-entry .app-navigation-entry-link[data-v-ee07f8f8]:focus-visible,.app-navigation-entry .app-navigation-entry-button[data-v-ee07f8f8]:focus-visible{box-shadow:0 0 0 4px var(--color-main-background);outline:2px solid var(--color-main-text);border-radius:var(--border-radius-element)}.app-navigation-entry__children[data-v-ee07f8f8]{--app-navigation-item-child-offset: 10px;position:relative;display:flex;flex:0 1 auto;flex-direction:column;width:100%;gap:var(--default-grid-baseline, 4px);padding-inline-start:var(--app-navigation-item-child-offset)}.app-navigation-entry__children .app-navigation-entry[data-v-ee07f8f8]{display:inline-flex;flex-wrap:wrap}.app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children .app-navigation-entry__children[data-v-ee07f8f8]{--app-navigation-item-child-offset: 0}.app-navigation-entry__deleted[data-v-ee07f8f8]{display:inline-flex;flex:1 1 0;padding-inline-start:calc(var(--default-clickable-area) - (var(--default-clickable-area) - 16px) / 2)!important}.app-navigation-entry__deleted .app-navigation-entry__deleted-description[data-v-ee07f8f8]{position:relative;overflow:hidden;flex:1 1 0;white-space:nowrap;text-overflow:ellipsis;line-height:var(--default-clickable-area)}.app-navigation-entry__utils[data-v-ee07f8f8]{display:flex;min-width:var(--default-clickable-area);align-items:center;flex:0 1 auto;justify-content:flex-end}.app-navigation-entry__utils.app-navigation-entry__utils--display-actions .action-item.app-navigation-entry__actions[data-v-ee07f8f8]{display:inline-block}.app-navigation-entry__utils .app-navigation-entry__counter-wrapper[data-v-ee07f8f8]{margin-inline-end:calc(var(--default-grid-baseline) * 2);display:flex;align-items:center;flex:0 1 auto}.app-navigation-entry__utils .action-item.app-navigation-entry__actions[data-v-ee07f8f8]{display:none}.app-navigation-entry--editing .app-navigation-entry-edit[data-v-ee07f8f8]{z-index:250;opacity:1}.app-navigation-entry--deleted .app-navigation-entry-deleted[data-v-ee07f8f8]{z-index:250;transform:translate(0)}.app-navigation-entry--pinned[data-v-ee07f8f8]{order:2;margin-top:auto}.app-navigation-entry--pinned~.app-navigation-entry--pinned[data-v-ee07f8f8]{margin-top:0}[data-themes*=highcontrast] .app-navigation-entry[data-v-ee07f8f8]:active{background-color:var(--color-primary-element-light-hover)!important}@keyframes nc-nav-stripe-in-ee07f8f8{0%{transform:scaleY(0);opacity:0}to{transform:scaleY(1);opacity:1}}.app-navigation-new-item__name[data-v-ee07f8f8]{overflow:hidden;max-width:100%;white-space:nowrap;text-overflow:ellipsis;padding-inline-start:7px;font-size:14px}.newItemContainer[data-v-ee07f8f8]{width:calc(100% - var(--default-clickable-area));margin:auto}.material-design-icon[data-v-191b6717]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-navigation-search[data-v-191b6717]{display:flex;gap:var(--app-navigation-padding);padding:var(--app-navigation-padding)}.app-navigation-search__input[data-v-191b6717]{--input-padding-end: calc(var(--default-clickable-area) - var(--default-grid-baseline))}.app-navigation-search--has-actions .app-navigation-search__input[data-v-191b6717]{flex-grow:1;z-index:3}.app-navigation-search__actions[data-v-191b6717]{display:flex;gap:var(--default-grid-baseline);margin-inline-start:0;max-width:calc(2 * var(--default-clickable-area) + var(--default-grid-baseline));max-height:var(--default-clickable-area);transition:margin-inline-start var(--animation-quick)}.app-navigation-search__actions--hidden[data-v-191b6717]{margin-inline-start:calc(-1 * var(--default-clickable-area))}._container_RFk6U{margin-top:auto;padding:var(--default-grid-baseline)}._header_2CtDS{margin-block:0 var(--default-grid-baseline);margin-inline:var(--default-grid-baseline)}._button_tAyis{padding-inline:0 calc((var(--default-clickable-area) - 16px) / 2)!important}._button_tAyis .button-vue__text{font-weight:var(--font-weight-default, normal)}._content_--KYD{display:block;padding:10px;margin-bottom:calc(-1 * var(--default-grid-baseline));max-height:300px;overflow-y:auto}._animationActive_DAG1p{transition-duration:var(--animation-slow);transition-property:max-height,padding;overflow-y:hidden!important}._animationStop_fWYQj{max-height:0!important;padding:0 10px!important}.app-navigation-spacer[data-v-277fa710]{flex-shrink:0;height:22px}._material-design-icon_qDIHA{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._appSettingsDialogVersion_8Xr7R{--form-element-label-offset: calc(var(--border-radius-element) + var(--default-grid-baseline));color:var(--color-text-maxcontrast);margin-block-end:calc(8 * var(--default-grid-baseline));margin-inline:var(--form-element-label-offset)}._appSettingsDialogVersion__legacy_7MO71{margin-inline:0}.material-design-icon[data-v-e669a5ef]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-settings[data-v-e669a5ef]:not(.app-settings--legacy){--nav-tint: hsl(from var(--color-primary-element-light) h s calc(l*1.045) );--nav-tint-strong: var(--color-primary-element-light)}.app-settings[data-v-e669a5ef]:not(.app-settings--legacy) .modal-wrapper .modal-container{padding-inline-start:0!important;padding-block-start:0!important;background-color:var(--nav-tint);overflow:hidden;max-width:900px}.app-settings[data-v-e669a5ef]:not(.app-settings--legacy) .dialog__name{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(100%);white-space:nowrap;border:0}.app-settings[data-v-e669a5ef]:not(.app-settings--legacy) .app-settings__navigation{min-width:200px;max-width:200px;flex:0 0 200px;margin-inline-end:0!important;overflow-x:hidden;overflow-y:auto;position:relative}.app-settings[data-v-e669a5ef]:not(.app-settings--legacy) .app-settings__content{padding:calc(3 * var(--default-grid-baseline));background-color:var(--color-main-background);border-inline-start:1px solid var(--color-border-dark);border-start-start-radius:var(--border-radius-element);border-end-start-radius:var(--border-radius-element)}.app-settings:not(.app-settings--legacy) .app-settings__title[data-v-e669a5ef]{box-sizing:border-box;padding:calc(3 * var(--default-grid-baseline));margin:0;font-size:20px;font-weight:700}.app-settings:not(.app-settings--legacy) .navigation-list[data-v-e669a5ef]{height:100%;overflow-y:auto;padding:var(--default-grid-baseline)}.app-settings:not(.app-settings--legacy) .navigation-list__link[data-v-e669a5ef]{position:relative;display:flex;align-items:center;font-size:var(--default-font-size);font-weight:500;height:var(--default-clickable-area);margin:2px 0;line-height:var(--default-clickable-area);border-radius:var(--border-radius-element);padding-inline:calc(2 * var(--default-grid-baseline));cursor:pointer;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;background-color:transparent;border:none;color:var(--color-main-text)}.app-settings:not(.app-settings--legacy) .navigation-list__link[data-v-e669a5ef]:hover,.app-settings:not(.app-settings--legacy) .navigation-list__link[data-v-e669a5ef]:focus-visible{background-color:color-mix(in srgb,var(--color-primary-element) 8%,transparent)}.app-settings:not(.app-settings--legacy) .navigation-list__link[data-v-e669a5ef]:focus-visible{outline:2px solid var(--color-main-text);outline-offset:-2px}.app-settings:not(.app-settings--legacy) .navigation-list__link--active[data-v-e669a5ef]{background-color:var(--nav-tint-strong)}.app-settings:not(.app-settings--legacy) .navigation-list__link--active[data-v-e669a5ef]:hover,.app-settings:not(.app-settings--legacy) .navigation-list__link--active[data-v-e669a5ef]:focus-visible{background-color:var(--color-primary-element-light-hover)}.app-settings:not(.app-settings--legacy) .navigation-list__link--active[data-v-e669a5ef]:before{content:"";position:absolute;inset-block:var(--default-grid-baseline);inset-inline-start:0;width:3px;background-color:var(--color-primary-element);border-radius:999px}.app-settings:not(.app-settings--legacy) .navigation-list__link--icon[data-v-e669a5ef]{gap:var(--default-grid-baseline)}.app-settings:not(.app-settings--legacy) .navigation-list__link-icon[data-v-e669a5ef]{display:flex;justify-content:center;align-content:center;width:calc(var(--default-clickable-area) - 2 * var(--default-grid-baseline));max-width:calc(var(--default-clickable-area) - 2 * var(--default-grid-baseline))}@media only screen and (width<1024px){.app-settings[data-v-e669a5ef]:not(.app-settings--legacy) .modal-wrapper .modal-container{padding-inline-start:12px!important;padding-block-start:4px!important;background-color:var(--color-main-background)}.app-settings[data-v-e669a5ef]:not(.app-settings--legacy) .dialog__name{position:static;width:auto;height:auto;margin:0 0 12px;padding-inline-end:var(--default-clickable-area);overflow:visible;clip-path:none;white-space:normal;border:0}.app-settings[data-v-e669a5ef]:not(.app-settings--legacy) .app-settings__content{border:none;border-radius:0}}.app-settings.app-settings--legacy[data-v-e669a5ef] .app-settings__navigation{min-width:200px;margin-inline-end:calc(4 * var(--default-grid-baseline));overflow-x:hidden;overflow-y:auto;position:relative}.app-settings.app-settings--legacy[data-v-e669a5ef] .app-settings__content{padding-inline:calc(4 * var(--default-grid-baseline))}.app-settings.app-settings--legacy .navigation-list[data-v-e669a5ef]{height:100%;overflow-y:auto;padding:calc(3 * var(--default-grid-baseline))}.app-settings.app-settings--legacy .navigation-list__link[data-v-e669a5ef]{display:flex;align-content:center;font-size:16px;height:var(--default-clickable-area);margin:4px 0;line-height:var(--default-clickable-area);border-radius:var(--border-radius-element);font-weight:var(--font-weight-element, bold);padding:0 calc(4 * var(--default-grid-baseline));cursor:pointer;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;background-color:transparent;border:none}.app-settings.app-settings--legacy .navigation-list__link[data-v-e669a5ef]:hover,.app-settings.app-settings--legacy .navigation-list__link[data-v-e669a5ef]:focus{background-color:var(--color-background-hover)}.app-settings.app-settings--legacy .navigation-list__link--active[data-v-e669a5ef]{background-color:var(--color-primary-element-light)!important}.app-settings.app-settings--legacy .navigation-list__link--icon[data-v-e669a5ef]{padding-inline-start:calc(2 * var(--default-grid-baseline));gap:var(--default-grid-baseline)}.app-settings.app-settings--legacy .navigation-list__link-icon[data-v-e669a5ef]{display:flex;justify-content:center;align-content:center;width:calc(var(--default-clickable-area) - 2 * var(--default-grid-baseline));max-width:calc(var(--default-clickable-area) - 2 * var(--default-grid-baseline))}@media only screen and (max-width:512px){.app-settings.app-settings--legacy[data-v-e669a5ef] .dialog__name{padding-inline-start:16px}}.material-design-icon[data-v-9f146f2d]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-settings-section[data-v-9f146f2d]{--form-element-label-offset: calc(var(--border-radius-element) + var(--default-grid-baseline));--app-settings-section-text-offset: var(--form-element-label-offset);--app-settings-section-content-gap: calc(6 * var(--default-grid-baseline));margin-block-end:calc(8 * var(--default-grid-baseline))}.app-settings-section__name[data-v-9f146f2d]{margin:0;padding-inline:var(--app-settings-section-text-offset);padding-block:0;font-size:20px;font-weight:var(--font-weight-heading, bold)}.app-settings-section__description[data-v-9f146f2d]{padding-inline:var(--app-settings-section-text-offset);color:var(--color-text-maxcontrast)}.app-settings-section__content[data-v-9f146f2d]{margin-block-start:calc(2 * var(--default-grid-baseline));display:flex;flex-direction:column;justify-content:stretch;gap:var(--app-settings-section-content-gap)}.app-settings-section__legacy[data-v-9f146f2d]{--app-settings-section-text-offset: 0;--app-settings-section-content-gap: 0}._appSettingsSectionShortcuts_RqpkA{display:flex;flex-direction:column;gap:calc(4 * var(--default-grid-baseline))}._material-design-icon_m4vbX{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._sidebarTabsButton_6hxfz{border:none;color:var(--color-main-text);font-size:var(--default-font-size);cursor:pointer;display:flex;flex-direction:column;gap:var(--default-grid-baseline);min-width:var(--default-clickable-area)}._sidebarTabsButton_6hxfz *{cursor:pointer}._sidebarTabsButton_6hxfz:not(._sidebarTabsButton_legacy_Qp20k){position:relative;border-radius:var(--border-radius-element);background-color:var(--color-main-background);padding:var(--default-grid-baseline);padding-block-end:calc(var(--default-grid-baseline) * 2);transition:background-color var(--animation-quick)}._sidebarTabsButton_6hxfz:not(._sidebarTabsButton_legacy_Qp20k):after{content:"";position:absolute;bottom:0;left:50%;width:0;height:4px;border-radius:999px;background-color:var(--color-primary-element);opacity:0;transform:translate(-50%);transition:width var(--animation-quick),opacity var(--animation-quick)}._sidebarTabsButton_6hxfz:not(._sidebarTabsButton_legacy_Qp20k):hover{background-color:var(--color-background-hover)}._sidebarTabsButton_6hxfz:not(._sidebarTabsButton_legacy_Qp20k):focus-visible{outline:2px solid var(--color-main-text);outline-offset:2px}._sidebarTabsButton_legacy_Qp20k{border-bottom:var(--default-grid-baseline) solid transparent!important;border-radius:var(--border-radius-small);background-color:var(--color-main-background);padding:var(--border-radius-small);transition:background-color var(--animation-quick),border-bottom-color var(--animation-quick)}._sidebarTabsButton_legacy_Qp20k:hover{background-color:var(--color-background-hover)!important}._sidebarTabsButton_legacy_Qp20k:active,._sidebarTabsButton_legacy_Qp20k:focus{background-color:var(--color-main-background)!important}._sidebarTabsButton_selected_eBHM-,._sidebarTabsButton_selected_eBHM- *{cursor:default}._sidebarTabsButton_6hxfz:not(._sidebarTabsButton_legacy_Qp20k)._sidebarTabsButton_selected_eBHM-{background-color:var(--color-background-hover)}._sidebarTabsButton_6hxfz:not(._sidebarTabsButton_legacy_Qp20k)._sidebarTabsButton_selected_eBHM-:after{width:80%;opacity:1}._sidebarTabsButton_6hxfz:not(._sidebarTabsButton_legacy_Qp20k)._sidebarTabsButton_selected_eBHM-:hover{background-color:var(--color-background-dark)}._sidebarTabsButton_legacy_Qp20k._sidebarTabsButton_selected_eBHM-{border-bottom-color:var(--color-primary-element)!important;border-bottom-left-radius:0;border-bottom-right-radius:0}._sidebarTabsButton_legacy_Qp20k._sidebarTabsButton_selected_eBHM-:hover{background-color:var(--color-primary-element-light-hover)!important;color:var(--color-primary-element-light-text)!important}._sidebarTabsButton__name_YlW5S{font-weight:var(--font-weight-element, normal);overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}._sidebarTabsButton_legacy_Qp20k._sidebarTabsButton_selected_eBHM- ._sidebarTabsButton__name_YlW5S{font-weight:var(--font-weight-element, bold)}._sidebarTabsButton__icon_MPS-D{display:inline-flex;align-items:center;justify-content:center}._sidebarTabsButton__legacyIcon_rzPOu{background-size:20px;display:flex;align-items:center;justify-content:center}.material-design-icon[data-v-e74d1502]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-sidebar-tabs[data-v-e74d1502]{display:flex;flex-direction:column;min-height:0;flex:1 1 100%}.app-sidebar-tabs__nav[data-v-e74d1502]{display:flex;justify-content:stretch;margin:10px 8px 0;border-bottom:1px solid var(--color-border)}.app-sidebar-tabs__nav[data-v-e74d1502]:not(.app-sidebar-tabs__nav--legacy){gap:var(--default-grid-baseline);padding-block-end:var(--default-grid-baseline)}.app-sidebar-tabs__tab[data-v-e74d1502]{flex:1 1 1px}.app-sidebar-tabs__content[data-v-e74d1502]{position:relative;min-height:256px;height:100%}.app-sidebar-tabs__content--multiple[data-v-e74d1502]>:not(section){display:none}.material-design-icon{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}@property --app-sidebar-offset{syntax: ""; initial-value: 0; inherits: true;}body{--app-sidebar-padding: calc(var(--default-grid-baseline, 4px) * 2);--app-sidebar-offset: 0;transition:--app-sidebar-offset 0ms!important}body:has(.app-sidebar.slide-right-enter-active),body:has(.app-sidebar.slide-right-leave-active){transition:--app-sidebar-offset var(--animation-quick)}body:has(.app-sidebar__toggle){--app-sidebar-offset: calc(var(--app-sidebar-padding) + var(--default-clickable-area))}.material-design-icon[data-v-e8979b7f]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-sidebar[data-v-e8979b7f]{--app-sidebar-width: clamp(300px, 27vw, 500px);--app-sidebar-padding: calc(var(--default-grid-baseline, 4px) * 2);width:var(--app-sidebar-width);z-index:1500;top:0;inset-inline-end:0;display:flex;overflow-x:hidden;overflow-y:auto;flex-direction:column;flex-shrink:0;height:100%;border-inline-start:1px solid var(--color-border);background:var(--color-main-background);position:relative}.app-sidebar__toggle[data-v-e8979b7f]{position:absolute!important;inset-block-start:var(--app-sidebar-padding);inset-inline-end:var(--app-sidebar-padding);z-index:1001}.app-sidebar .app-sidebar-header[data-v-e8979b7f]{--app-sidebar-close-button-offset: calc(var(--default-clickable-area) + var(--app-sidebar-padding))}.app-sidebar .app-sidebar-header>.app-sidebar__close[data-v-e8979b7f]{position:absolute;z-index:100;top:var(--app-sidebar-padding);inset-inline-end:var(--app-sidebar-padding);width:var(--default-clickable-area);height:var(--default-clickable-area)}.app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info[data-v-e8979b7f]{flex-direction:row}.app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info .app-sidebar-header__figure[data-v-e8979b7f]{--figure-size: calc(52px + var(--app-sidebar-padding));z-index:2;width:var(--figure-size);height:var(--figure-size);margin:calc(var(--app-sidebar-padding) / 2);border-radius:3px;flex:0 0 auto}.app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info .app-sidebar-header__desc[data-v-e8979b7f]{padding-inline-start:0;flex:1 1 auto;min-width:0;padding-inline-end:calc(var(--default-clickable-area) + var(--app-sidebar-close-button-offset));padding-top:var(--app-sidebar-padding)}.app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info .app-sidebar-header__desc.app-sidebar-header__desc--without-actions[data-v-e8979b7f]{padding-inline-end:var(--app-sidebar-close-button-offset)}.app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info .app-sidebar-header__desc .app-sidebar-header__tertiary-actions[data-v-e8979b7f]{z-index:3;position:absolute;top:calc(var(--app-sidebar-padding) / 2);inset-inline-start:calc(-1 * var(--default-clickable-area));gap:0}.app-sidebar .app-sidebar-header--compact.app-sidebar-header--with-figure .app-sidebar-header__info .app-sidebar-header__desc .app-sidebar-header__menu[data-v-e8979b7f]{top:var(--app-sidebar-padding);inset-inline-end:var(--app-sidebar-close-button-offset);position:absolute}.app-sidebar .app-sidebar-header:not(.app-sidebar-header--with-figure) .app-sidebar-header__menu[data-v-e8979b7f]{position:absolute;top:var(--app-sidebar-padding);inset-inline-end:var(--app-sidebar-close-button-offset)}.app-sidebar .app-sidebar-header:not(.app-sidebar-header--with-figure) .app-sidebar-header__desc[data-v-e8979b7f]{padding-inline-end:calc(var(--default-clickable-area) + var(--app-sidebar-close-button-offset))}.app-sidebar .app-sidebar-header:not(.app-sidebar-header--with-figure) .app-sidebar-header__desc.app-sidebar-header__desc--without-actions[data-v-e8979b7f]{padding-inline-end:var(--app-sidebar-close-button-offset)}.app-sidebar .app-sidebar-header .app-sidebar-header__info[data-v-e8979b7f]{display:flex;flex-direction:column}.app-sidebar .app-sidebar-header__figure[data-v-e8979b7f]{width:100%;height:250px;max-height:250px;background-repeat:no-repeat;background-position:center;background-size:contain}.app-sidebar .app-sidebar-header__figure--with-action[data-v-e8979b7f]{cursor:pointer}.app-sidebar .app-sidebar-header__desc[data-v-e8979b7f]{position:relative;display:flex;flex-direction:row;justify-content:center;align-items:center;padding-inline:var(--app-sidebar-padding);padding-block:var(--app-sidebar-padding) calc(var(--app-sidebar-padding) / 2);gap:0 4px}.app-sidebar .app-sidebar-header__desc--with-tertiary-action[data-v-e8979b7f]{padding-inline-start:6px}.app-sidebar .app-sidebar-header__desc--editable .app-sidebar-header__mainname-form[data-v-e8979b7f],.app-sidebar .app-sidebar-header__desc--with-subname--editable .app-sidebar-header__mainname-form[data-v-e8979b7f]{margin-top:-2px;margin-bottom:-2px}.app-sidebar .app-sidebar-header__desc--with-subname--editable .app-sidebar-header__subname[data-v-e8979b7f]{margin-top:-2px}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__tertiary-actions[data-v-e8979b7f]{display:flex;height:var(--default-clickable-area);width:var(--default-clickable-area);justify-content:center;flex:0 0 auto}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__tertiary-actions .app-sidebar-header__star[data-v-e8979b7f]{box-shadow:none}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__tertiary-actions .app-sidebar-header__star[data-v-e8979b7f]:not([aria-pressed=true]):hover{box-shadow:none;background-color:var(--color-background-hover)}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container[data-v-e8979b7f]{flex:1 1 auto;display:flex;flex-direction:column;justify-content:center;min-width:0}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container[data-v-e8979b7f]{display:flex;align-items:center;min-height:var(--default-clickable-area)}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container .app-sidebar-header__mainname[data-v-e8979b7f]{padding:0;min-height:30px;font-size:20px;line-height:30px}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container .app-sidebar-header__mainname[data-v-e8979b7f] .linkified{cursor:pointer;text-decoration:underline;margin:0}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container .app-sidebar-header__mainname-form[data-v-e8979b7f]{display:flex;flex:1 1 auto;align-items:center}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container .app-sidebar-header__mainname-form input.app-sidebar-header__mainname-input[data-v-e8979b7f]{flex:1 1 auto;margin:0;padding:7px;font-size:20px;font-weight:var(--font-weight-heading, bold)}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container .app-sidebar-header__menu[data-v-e8979b7f]{margin-inline-start:5px}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname[data-v-e8979b7f],.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__subname[data-v-e8979b7f]{overflow:hidden;width:100%;margin:0;white-space:nowrap;text-overflow:ellipsis}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__subname[data-v-e8979b7f]{color:var(--color-text-maxcontrast);font-size:var(--default-font-size);padding:0}.app-sidebar .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__subname[data-v-e8979b7f] *{vertical-align:text-bottom}.app-sidebar .app-sidebar-header .app-sidebar-header__mainname--hidden[data-v-e8979b7f]{position:absolute;top:0;inset-inline-start:0;margin:0;width:1px;height:1px;overflow:hidden}.app-sidebar .app-sidebar-header__description[data-v-e8979b7f]{display:flex;align-items:center;margin:0 10px}@media only screen and (max-width:512px){.app-sidebar[data-v-e8979b7f]{position:absolute;--app-sidebar-width: 100vw}}.slide-right-leave-active[data-v-e8979b7f],.slide-right-enter-active[data-v-e8979b7f]{transition-duration:var(--animation-quick);transition-property:margin-inline-end}.slide-right-enter-to[data-v-e8979b7f],.slide-right-leave[data-v-e8979b7f]{margin-inline-end:0}.slide-right-enter-from[data-v-e8979b7f],.slide-right-leave-to[data-v-e8979b7f]{margin-inline-end:calc(-1 * var(--app-sidebar-width))}.material-design-icon[data-v-dba10798]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-sidebar__tab[data-v-dba10798]{display:none;padding:10px;min-height:100%;max-height:100%;height:100%;overflow:auto}.app-sidebar__tab[data-v-dba10798]:focus{border-color:var(--color-primary-element);box-shadow:0 0 .2em var(--color-primary-element);outline:0}.app-sidebar__tab--active[data-v-dba10798]{display:block}._material-design-icon_M4rJ-{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._assistantButton_BP0M8{--assistant-button-color: var(--color-element-assistant, linear-gradient(238deg, #A569D3 12%, #00679E 39%, #422083 86%));--assistant-button-background-color: var(--color-background-assistant, #F6F5FF);background-image:var(--color-border-assistant, linear-gradient(125deg, #7398FE 50%, #6104A4 125%));border-radius:var(--border-radius-element);height:var(--default-clickable-area);width:fit-content;padding-inline:1px;padding-block:1px 2px}._assistantButton_disabled_UipGr{filter:saturate(.5);opacity:.5}._assistantButton_primary_-LVsB{--assistant-button-color: white;--assistant-button-background-color: var(--color-element-assistant,linear-gradient(238deg, #A569D3 12%, #00679E 39%, #422083 86%))}._assistantButton_primary_-LVsB ._assistantButton__icon_fQ0PP,._assistantButton_primary_-LVsB ._assistantButton__text_3VzI1{color:#fff!important}._assistantButton__button_FAn7N{--button-size: calc(var(--default-clickable-area) - 3px) !important;background-color:var(--assistant-button-background-color)!important;background-image:var(--assistant-button-background-color)!important;border:none!important}._assistantButton__button_FAn7N:hover{filter:brightness(120%)}._assistantButton__text_3VzI1{background-image:var(--assistant-button-color);color:transparent!important;background-clip:text}._material-design-icon_mH0R6{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._assistantIcon_2koBz{display:inline-flex;align-items:center;justify-content:center}._assistantIcon_2koBz:not(._assistantIcon_inline_kJSUg){display:flex;min-height:var(--default-clickable-area);min-width:var(--default-clickable-area)}._assistantIcon__svg_V8CXC{display:inline-block;width:var(--v6629513e);height:var(--v6629513e);max-width:var(--v6629513e);max-height:var(--v6629513e)}._material-design-icon_nSUHm{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._assistantContent_xKBtA{background-image:var(--color-border-assistant, linear-gradient(125deg, #7398FE 50%, #6104A4 125%));border-radius:var(--border-radius-container);padding:2px}._assistantContent__inner_DqkVC{background-color:var(--color-background-assistant, #F6F5FF);border-radius:calc(var(--border-radius-container) - 1px);color:var(--color-main-text);padding:calc(var(--border-radius-container) - 1px);height:100%;width:100%}._fadeTransition_hVFAH{transition:all var(--animation-quick) ease}._fadeTransitionActive_XmkdB{opacity:0;position:absolute}.material-design-icon[data-v-8ebb9fc1]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.fade-enter-active[data-v-8ebb9fc1],.fade-leave-active[data-v-8ebb9fc1]{transition:opacity .3s ease}.fade-enter[data-v-8ebb9fc1],.fade-leave-to[data-v-8ebb9fc1]{opacity:0}.linked-icons[data-v-8ebb9fc1]{display:flex}.linked-icons img[data-v-8ebb9fc1]{padding:12px;height:var(--default-clickable-area);display:block;background-repeat:no-repeat;background-position:center;opacity:.7}.linked-icons img[data-v-8ebb9fc1]:hover{opacity:1}.popovermenu[data-v-8ebb9fc1]{display:none}.popovermenu.open[data-v-8ebb9fc1]{display:block}li.collection-list-item[data-v-8ebb9fc1]{flex-wrap:wrap;height:auto;cursor:pointer;margin-bottom:0!important}li.collection-list-item .collection-avatar[data-v-8ebb9fc1]{margin-top:0}li.collection-list-item form[data-v-8ebb9fc1],li.collection-list-item .collection-item-name[data-v-8ebb9fc1]{flex-basis:10%;flex-grow:1;display:flex}li.collection-list-item .collection-item-name[data-v-8ebb9fc1]{padding:12px 9px}li.collection-list-item input[data-v-8ebb9fc1]{margin-top:4px;border-color:var(--color-border-maxcontrast)}li.collection-list-item input[type=text][data-v-8ebb9fc1]{flex-grow:1}li.collection-list-item .error[data-v-8ebb9fc1],li.collection-list-item .resource-list-details[data-v-8ebb9fc1]{flex-basis:100%;width:100%}li.collection-list-item .resource-list-details li[data-v-8ebb9fc1]{display:flex;margin-inline-start:var(--default-clickable-area);border-radius:3px;cursor:pointer}li.collection-list-item .resource-list-details li[data-v-8ebb9fc1]:hover{background-color:var(--color-background-dark)}li.collection-list-item .resource-list-details li a[data-v-8ebb9fc1]{flex-grow:1;padding:3px;max-width:calc(100% - 30px);display:flex}li.collection-list-item .resource-list-details span[data-v-8ebb9fc1]{display:inline-block;vertical-align:top;margin-inline-end:10px}li.collection-list-item .resource-list-details span.resource-name[data-v-8ebb9fc1]{text-overflow:ellipsis;overflow:hidden;position:relative;vertical-align:top;white-space:nowrap;flex-grow:1;padding:4px}li.collection-list-item .resource-list-details img[data-v-8ebb9fc1]{width:24px;height:24px}li.collection-list-item .resource-list-details .icon-close[data-v-8ebb9fc1]{opacity:.7}li.collection-list-item .resource-list-details .icon-close[data-v-8ebb9fc1]:hover,li.collection-list-item .resource-list-details .icon-close[data-v-8ebb9fc1]:focus{opacity:1}.should-shake[data-v-8ebb9fc1]{animation:shake-8ebb9fc1 .6s 1 linear}@keyframes shake-8ebb9fc1{0%{transform:translate(15px)}20%{transform:translate(-15px)}40%{transform:translate(7px)}60%{transform:translate(-7px)}80%{transform:translate(3px)}to{transform:translate(0)}}.material-design-icon[data-v-0e169eff]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.collection-list[data-v-0e169eff] *{box-sizing:border-box}.collection-list>li[data-v-0e169eff]{display:flex;align-items:center;gap:12px}.collection-list>li>.avatar[data-v-0e169eff]{margin-top:0}#collection-select-container[data-v-0e169eff]{display:flex;flex-direction:column}.v-select span.avatar[data-v-0e169eff]{display:block;padding:16px;opacity:.7;background-repeat:no-repeat;background-position:center}.v-select span.avatar[data-v-0e169eff]:hover{opacity:1}p.hint[data-v-0e169eff]{z-index:1;margin-top:-16px;padding:8px;color:var(--color-text-maxcontrast);line-height:normal}div.avatar[data-v-0e169eff]{width:32px;height:32px;margin:30px 0 0;padding:8px;background-color:var(--color-background-dark)}.icon-projects[data-v-0e169eff]{display:block;padding:8px;background-repeat:no-repeat;background-position:center}.option__wrapper[data-v-0e169eff]{display:flex}.option__wrapper .avatar[data-v-0e169eff]{display:block;width:32px;height:32px;background-color:var(--color-background-darker)!important}.option__wrapper .option__title[data-v-0e169eff]{padding:4px}.fade-enter-active[data-v-0e169eff],.fade-leave-active[data-v-0e169eff]{transition:opacity .5s}.fade-enter[data-v-0e169eff],.fade-leave-to[data-v-0e169eff]{opacity:0}.material-design-icon[data-v-8dabc003]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.dashboard-widget[data-v-8dabc003] .empty-content{text-align:center;padding-top:5vh}.dashboard-widget[data-v-8dabc003] .empty-content.half-screen{padding-top:0;margin-bottom:1vh}.more[data-v-8dabc003]{display:block;text-align:center;color:var(--color-text-maxcontrast);line-height:60px;cursor:pointer}.more[data-v-8dabc003]:hover,.more[data-v-8dabc003]:focus{background-color:var(--color-background-hover);border-radius:var(--border-radius-element);color:var(--color-main-text)}.item-list__entry[data-v-8dabc003]{display:flex;align-items:flex-start;padding:8px}.item-list__entry .item-avatar[data-v-8dabc003]{position:relative;margin-block:auto;background-color:var(--color-background-dark)!important}.item-list__entry .item__details[data-v-8dabc003]{padding-inline-start:8px;max-height:var(--default-clickable-area);flex-grow:1;overflow:hidden;display:flex;flex-direction:column}.item-list__entry .item__details h3[data-v-8dabc003],.item-list__entry .item__details .message[data-v-8dabc003]{white-space:nowrap;background-color:var(--color-background-dark)}.item-list__entry .item__details h3[data-v-8dabc003]{font-size:100%;margin:0}.item-list__entry .item__details .message[data-v-8dabc003]{width:80%;height:15px;margin-top:5px}.material-design-icon[data-v-2c8b617b]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.item-list__entry[data-v-2c8b617b]{display:flex;align-items:center;position:relative;padding:8px}.item-list__entry[data-v-2c8b617b]:hover,.item-list__entry[data-v-2c8b617b]:focus{background-color:var(--color-background-hover);border-radius:var(--border-radius-element)}.item-list__entry .item-avatar[data-v-2c8b617b]{position:relative;margin-top:auto;margin-bottom:auto}.item-list__entry .item__details[data-v-2c8b617b]{padding-inline-start:8px;max-height:fit-content;flex-grow:1;overflow:hidden;display:flex;flex-direction:column;justify-content:center;min-height:var(--default-clickable-area)}.item-list__entry .item__details h3[data-v-2c8b617b],.item-list__entry .item__details .message[data-v-2c8b617b]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.item-list__entry .item__details .message span[data-v-2c8b617b]{width:10px;display:inline-block;margin-bottom:-3px}.item-list__entry .item__details h3[data-v-2c8b617b]{font-size:100%;margin:0}.item-list__entry .item__details .message[data-v-2c8b617b]{width:100%;color:var(--color-text-maxcontrast)}.item-list__entry .item-icon[data-v-2c8b617b]{position:relative;width:14px;height:14px;margin-top:25px;margin-inline:-10px -2px}.item-list__entry button.primary[data-v-2c8b617b]{padding:21px;margin:0}._filePicker_UHtO-{display:inline-flex;align-items:center;height:var(--default-clickable-area)}._material-design-icon_mubdv{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._ncFormBox_TawZT{display:flex;flex-direction:column;gap:calc(1 * var(--default-grid-baseline))}._ncFormBox_TawZT._ncFormBox_row_ZnhfS{flex-direction:row}._ncFormBox__item_7zc34{border-radius:var(--border-radius-small)!important}._ncFormBox_col_wHCZx{flex-direction:column}._ncFormBox_col_wHCZx ._ncFormBox__item_7zc34:first-child{border-start-start-radius:var(--border-radius-element)!important;border-start-end-radius:var(--border-radius-element)!important}._ncFormBox_col_wHCZx ._ncFormBox__item_7zc34:last-child{border-end-start-radius:var(--border-radius-element)!important;border-end-end-radius:var(--border-radius-element)!important}._ncFormBox_row_ZnhfS{flex-direction:row}._ncFormBox_row_ZnhfS ._ncFormBox__item_7zc34{flex:1 1}._ncFormBox_row_ZnhfS ._ncFormBox__item_7zc34:first-child{border-start-start-radius:var(--border-radius-element)!important;border-end-start-radius:var(--border-radius-element)!important}._ncFormBox_row_ZnhfS ._ncFormBox__item_7zc34:last-child{border-end-end-radius:var(--border-radius-element)!important;border-start-end-radius:var(--border-radius-element)!important}._material-design-icon_RoXMm{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._formBoxButton_qQIni{background:unset;border:none;color:inherit;font-size:inherit;font-weight:inherit;text-decoration:none;text-align:inherit;line-height:inherit;padding:0;margin:0;outline:none}._material-design-icon_D2F-K{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._formBoxItem_74l6r{--nc-form-box-item-border-width: 1px;--nc-form-box-item-min-height: 40px;--form-element-label-offset: calc(var(--border-radius-element) + var(--default-grid-baseline));--form-element-label-padding: calc(var(--form-element-label-offset) - var(--nc-form-box-item-border-width));--color-primary-element-extra-light: hsl(from var(--color-primary-element-light) h s calc(l*1.045) );--color-primary-element-extra-light-hover: hsl(from var(--color-primary-element-light-hover) h s calc(l*1.045) );position:relative;display:flex;align-items:center;gap:calc(2 * var(--default-grid-baseline));min-height:var(--nc-form-box-item-min-height);padding-inline:var(--form-element-label-padding);border:1px solid var(--color-primary-element-extra-light-hover);border-bottom-width:2px;border-radius:var(--border-radius-element);background-color:var(--color-primary-element-extra-light);color:var(--color-main-text);font-weight:var(--font-weight-element, normal);transition-property:color,border-color,background-color;transition-duration:var(--animation-quick);transition-timing-function:linear;-webkit-user-select:none;user-select:none;cursor:pointer}._formBoxItem_74l6r *{cursor:inherit}._formBoxItem_74l6r:has(:disabled){cursor:default;opacity:.5}._formBoxItem_74l6r:hover:not(:has(:disabled)){color:var(--color-primary-element-light-text);background-color:var(--color-primary-element-extra-light-hover)}._formBoxItem_74l6r:has(:focus-visible){outline:2px solid var(--color-main-text);box-shadow:0 0 0 4px var(--color-main-background)}._formBoxItem__description_1GjPD{font-weight:var(--font-weight-default, normal)}._formBoxItem_74l6r._formBoxItem_legacy_IgNr3{--nc-form-box-item-border-width: 0px;border:none}._formBoxItem_74l6r._formBoxItem_inverted_9GGkh ._formBoxItem__element_YEZDA{color:var(--color-text-maxcontrast)}._formBoxItem_74l6r._formBoxItem_inverted_9GGkh ._formBoxItem__description_1GjPD{color:inherit}._formBoxItem__content_CcZbG{flex:1;display:flex;flex-direction:column;padding-block:calc(2 * var(--default-grid-baseline));overflow-wrap:anywhere}._formBoxItem__element_YEZDA:after{content:"";position:absolute;inset:0}._formBoxItem__description_1GjPD{color:var(--color-text-maxcontrast)}._formBoxItem__icon_eZXNE{display:flex;align-items:center;justify-content:flex-end}._material-design-icon_YAxyJ{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}input._formBoxSwitch__input_e7y7s{margin:0;width:var(--default-clickable-area);position:absolute;inset-block:0;inset-inline-end:var(--form-element-label-offset);z-index:-1;opacity:0!important;height:auto;cursor:inherit}._material-design-icon_QhThW{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._formGroup_sNzER{--form-element-label-offset: calc(var(--border-radius-element) + var(--default-grid-baseline));--form-group-content-gap: calc(2 * var(--default-grid-baseline))}._formGroup_sNzER._formGroup_noGap_ChojB{--form-group-content-gap: 0}._formGroup__label_Z81k5{padding-inline:var(--form-element-label-offset);font-size:var(--font-size);font-weight:var(--font-weight-heading, bold)}._formGroup__description_xWRa-{padding-inline:var(--form-element-label-offset);color:var(--color-text-maxcontrast)}._formGroup__content_wHRjf{display:flex;flex-direction:column;gap:var(--form-group-content-gap);margin-block-start:calc(2.5 * var(--default-grid-baseline))}._formGroup__content_wHRjf._formGroup__content_only_VejcN{margin-block-start:0}.material-design-icon[data-v-92fb182d]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.header-menu[data-v-92fb182d]{position:relative;width:var(--header-height);height:var(--header-height)}.header-menu .header-menu__trigger[data-v-92fb182d]{--button-size: var(--header-height) !important;height:var(--header-height);opacity:.85;filter:none!important;color:var(--color-background-plain-text, var(--color-primary-text))!important}.header-menu .header-menu__trigger[data-v-92fb182d]:focus-visible{outline:none!important;box-shadow:none!important}.header-menu .header-menu__trigger[data-v-92fb182d] .button-vue__icon svg,.header-menu .header-menu__trigger[data-v-92fb182d] .button-vue__icon:not(:has(svg)){mask:var(--header-menu-icon-mask, none)}.header-menu--opened .header-menu__trigger[data-v-92fb182d],.header-menu__trigger[data-v-92fb182d]:hover,.header-menu__trigger[data-v-92fb182d]:focus,.header-menu__trigger[data-v-92fb182d]:active{opacity:1}@media only screen and (max-width:512px){.header-menu[data-v-92fb182d]{width:var(--default-clickable-area)}.header-menu .header-menu__trigger[data-v-92fb182d]{--button-size: var(--default-clickable-area) !important}}.material-design-icon[data-v-d45c5788]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}/*! * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later - */.header-menu[data-v-d45c5788]{position:relative;width:var(--header-height);height:var(--header-height)}.header-menu .header-menu__trigger[data-v-d45c5788]{--button-size: var(--header-height) !important;height:var(--header-height);opacity:.85;filter:none!important;color:var(--color-background-plain-text, var(--color-primary-text))!important}.header-menu .header-menu__trigger[data-v-d45c5788]:focus-visible{outline:none!important;box-shadow:none!important}.header-menu .header-menu__trigger[data-v-d45c5788] .button-vue__icon svg,.header-menu .header-menu__trigger[data-v-d45c5788] .button-vue__icon:not(:has(svg)){-webkit-mask:var(--header-menu-icon-mask, none);mask:var(--header-menu-icon-mask, none)}.header-menu--opened .header-menu__trigger[data-v-d45c5788],.header-menu__trigger[data-v-d45c5788]:hover,.header-menu__trigger[data-v-d45c5788]:focus,.header-menu__trigger[data-v-d45c5788]:active{opacity:1}@media only screen and (max-width:512px){.header-menu[data-v-d45c5788]{width:var(--default-clickable-area)}.header-menu .header-menu__trigger[data-v-d45c5788]{--button-size: var(--default-clickable-area) !important}}.header-menu__wrapper[data-v-d45c5788]{position:fixed;z-index:2000;top:var(--header-height);inset-inline-end:0;box-sizing:border-box;margin:0 8px;border-radius:var(--border-radius-element);background-color:var(--color-main-background);filter:drop-shadow(0 1px 5px var(--color-box-shadow))}.header-menu__caret[data-v-d45c5788]{position:absolute;z-index:2001;bottom:0;inset-inline-start:calc(50% - 10px);width:0;height:0;content:" ";pointer-events:none;border:10px solid transparent;border-bottom-color:var(--color-main-background)}.header-menu__content[data-v-d45c5788]{overflow:auto;width:350px;max-width:calc(100vw - 16px);min-height:calc(var(--default-clickable-area) * 1.5);max-height:calc(100vh - var(--header-height) * 2)}.header-menu__content[data-v-d45c5788] .empty-content{margin:12vh 10px}._material-design-icon_yC3vd{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._hotkey_ohHBi{--form-element-label-offset: calc(var(--border-radius-element) + var(--default-grid-baseline));display:flex;flex-direction:row-reverse;align-items:stretch;padding-inline:var(--form-element-label-offset)}._hotkey_ohHBi:first-child ._hotkey__label_au-to,._hotkey_ohHBi:first-child ._hotkey__keys_4Mi3z{border-block-start:none}._hotkey__label_au-to,._hotkey__keys_4Mi3z{display:flex;align-items:center;padding-block:calc(2 * var(--default-grid-baseline));border-block-start:1px solid var(--color-border)}._hotkey__label_au-to{flex:1 1 200px}._hotkey__keys_4Mi3z{flex:1 1 auto;flex-wrap:wrap;justify-content:end;row-gap:calc(1 * var(--default-grid-baseline))}._material-design-icon_FHHYV{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._kbd_3V7rw{display:inline-flex;align-items:center;justify-content:center;min-width:var(--default-clickable-area);height:var(--default-clickable-area);padding-inline:calc(2 * var(--default-grid-baseline)) calc(2 * var(--default-grid-baseline));border:2px solid var(--color-primary-element-light);border-block-end-width:4px;border-radius:var(--border-radius-element);box-shadow:none;font-family:var(--font-family);line-height:1;white-space:nowrap}._kbd_3V7rw+._kbd_3V7rw{margin-inline-start:calc(1 * var(--default-grid-baseline))}._hotkeyList_xNXCh{--form-element-label-offset: calc(var(--border-radius-element) + var(--default-grid-baseline))}._hotkeyList__heading_j6G86{font-weight:var(--font-weight-heading, bold);margin-inline:var(--form-element-label-offset)}.material-design-icon[data-v-0ee94269]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.option[data-v-0ee94269]{display:flex;align-items:center;width:100%;height:var(--height);cursor:inherit}.option__avatar[data-v-0ee94269]{margin-inline-end:var(--margin)}.option__details[data-v-0ee94269]{display:flex;flex:1 1;flex-direction:column;justify-content:center;min-width:0}.option__lineone[data-v-0ee94269]{color:var(--color-main-text)}.option__linetwo[data-v-0ee94269]{color:var(--color-text-maxcontrast)}.option__lineone[data-v-0ee94269],.option__linetwo[data-v-0ee94269]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;line-height:1.2}.option__lineone strong[data-v-0ee94269],.option__linetwo strong[data-v-0ee94269]{font-weight:700}.option--compact .option__lineone[data-v-0ee94269]{font-size:14px}.option--compact .option__linetwo[data-v-0ee94269]{font-size:11px;line-height:1.5;margin-top:-4px}.option__icon[data-v-0ee94269]{width:var(--default-clickable-area);height:var(--default-clickable-area);color:var(--color-text-maxcontrast)}.option__icon.icon[data-v-0ee94269]{flex:0 0 var(--default-clickable-area);opacity:.7;background-position:center;background-size:16px}.option__details[data-v-0ee94269],.option__lineone[data-v-0ee94269],.option__linetwo[data-v-0ee94269],.option__icon[data-v-0ee94269]{cursor:inherit}.material-design-icon[data-v-353fa414]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.progress-bar[data-v-353fa414]{display:block;height:var(--progress-bar-height);--progress-bar-color: var(--v3a86fec2);--progress-bar-height: var(--v57442460)}.progress-bar--linear[data-v-353fa414]{width:100%;overflow:hidden;border:0;padding:0;background:var(--color-background-dark);border-radius:calc(var(--progress-bar-height) / 2)}.progress-bar--linear[data-v-353fa414]::-webkit-progress-bar{height:var(--progress-bar-height);background-color:transparent}.progress-bar--linear[data-v-353fa414]::-webkit-progress-value{background:var(--progress-bar-color, var(--gradient-primary-background));border-radius:calc(var(--progress-bar-height) / 2)}.progress-bar--linear[data-v-353fa414]::-moz-progress-bar{background:var(--progress-bar-color, var(--gradient-primary-background));border-radius:calc(var(--progress-bar-height) / 2)}.progress-bar--circular[data-v-353fa414]{width:var(--progress-bar-height);color:var(--progress-bar-color)}.progress-bar--error[data-v-353fa414]{color:var(--color-text-error, var(--color-error))!important}.progress-bar--error[data-v-353fa414]::-moz-progress-bar{background:var(--color-text-error, var(--color-error))!important}.progress-bar--error[data-v-353fa414]::-webkit-progress-value{background:var(--color-text-error, var(--color-error))!important}.progress-bar-container[data-v-353fa414]{display:flex;align-items:center;gap:calc(2 * var(--default-grid-baseline))}.progress-bar__value[data-v-353fa414]{font-size:var(--font-size-small, 13px);font-variant-numeric:tabular-nums;min-width:4ch;text-align:end}._material-design-icon_Sx-eY{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._radioGroup_checkboxRadioContainer_XfI2u .checkbox-content{max-width:unset!important}._material-design-icon_q-qLD{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._radioGroupButton_FB-C-{--radio-group-button--border-radius: var(--border-radius-small);--radio-group-button--border-width: 1px;--radio-group-button--color: var(--color-primary-element-light-text);--radio-group-button--background-color: var(--color-primary-element-light);--radio-group-button--background-color-hover: var(--color-primary-element-light-hover);--radio-group-button--padding: 1px;cursor:pointer;color:var(--radio-group-button--color);background-color:var(--radio-group-button--background-color);transition:var(--animation-quick) background-color;border:var(--radio-group-button--border-width) solid var(--radio-group-button--background-color-hover);border-bottom-width:2px;border-radius:var(--radio-group-button--border-radius);display:flex;flex-direction:row;align-items:center;justify-content:center;text-align:center;min-height:var(--default-clickable-area);padding-block:var(--radio-group-button--padding) 0;padding-inline:var(--radio-group-button--padding)}._radioGroupButton_FB-C- *{cursor:pointer}._radioGroupButton_FB-C-:has(._radioGroupButton__label_gjGCq){padding-inline:calc(var(--radio-group-button--padding) + var(--border-radius-element))}._radioGroupButton_FB-C-:has(._radioGroupButton__icon_lWzM4){padding-inline-start:var(--radio-group-button--padding)}._radioGroupButton_FB-C-:hover:not(._radioGroupButton_disabled_08iwH){background-color:var(--radio-group-button--background-color-hover)}._radioGroupButton_FB-C-:focus-within{--radio-group-button--border-width: 2px;--radio-group-button--padding: 0px;border:var(--radio-group-button--border-width) solid var(--color-main-text)!important;outline:calc(var(--default-grid-baseline) / 2) var(--color-main-background)}._radioGroupButton_active_KS1Ru{--radio-group-button--color: var(--color-primary-element-text);--radio-group-button--background-color: var(--color-primary-element);--radio-group-button--background-color-hover: var(--color-primary-element-hover)}._radioGroupButton__label_gjGCq{font-weight:var(--font-weight-element, bold)}._radioGroupButton_disabled_08iwH{filter:saturate(.7);opacity:.5;cursor:default}._radioGroupButton_disabled_08iwH *{cursor:default}._radioGroupButton__icon_lWzM4{--radio-group-button--icon-size: calc(var(--default-clickable-area) - 4px);display:flex;align-items:center;justify-content:center;height:100%;width:var(--radio-group-button--icon-size)}._radioGroupButton__icon_lWzM4 *{--default-clickable-area: var(--radio-group-button--icon-size)}.material-design-icon[data-v-77577e58]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.resource[data-v-77577e58]{display:flex;align-items:center;height:var(--default-clickable-area)}.resource__button[data-v-77577e58]{width:100%!important;justify-content:flex-start!important;padding:0!important}.resource__button[data-v-77577e58] .button-vue__wrapper{justify-content:flex-start!important}.resource__button[data-v-77577e58] .button-vue__wrapper .button-vue__text{font-weight:var(--font-weight-default, normal)!important;margin-inline-start:2px!important}.resource__icon[data-v-77577e58]{width:32px;height:32px;background-color:var(--color-text-maxcontrast);border-radius:50%;display:flex;align-items:center;justify-content:center}.resource__icon img[data-v-77577e58]{width:16px;height:16px;filter:var(--background-invert-if-dark)}.material-design-icon[data-v-10ef45ac]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.team-resources__header[data-v-10ef45ac]{font-weight:var(--font-weight-heading, bold);margin-bottom:6px}.related-team[data-v-10ef45ac]{border-radius:var(--border-radius-container);border:2px solid var(--color-border-dark);margin-bottom:6px}.related-team__open[data-v-10ef45ac]{border-color:var(--color-primary-element)}.related-team__header[data-v-10ef45ac]{padding:6px;padding-inline-end:24px;display:flex;gap:12px}.related-team__name[data-v-10ef45ac]{display:flex;flex-grow:1;align-items:center;gap:12px;padding:6px 12px;font-weight:var(--font-weight-heading, bold);margin:0}.related-team .related-team-provider[data-v-10ef45ac]{padding:6px 12px}.related-team .related-team-provider__name[data-v-10ef45ac]{font-weight:var(--font-weight-heading, bold);margin-bottom:3px}.related-team .related-team-provider__link[data-v-10ef45ac]{display:flex;gap:12px;padding:6px 12px;font-weight:var(--font-weight-heading, bold)}.related-team .related-team-resource__link[data-v-10ef45ac]{display:flex;gap:12px;height:var(--default-clickable-area);align-items:center;border-radius:var(--border-radius-element)}.related-team .related-team-resource__link[data-v-10ef45ac]:hover{background-color:var(--color-background-hover)}.related-team .related-team-resource__link[data-v-10ef45ac]:focus{background-color:var(--color-background-hover);outline:2px solid var(--color-primary-element)}.related-team .related-team-resource .resource__icon[data-v-10ef45ac]{width:var(--default-clickable-area);height:var(--default-clickable-area);display:flex;align-items:center;justify-content:center;text-align:center}.related-team .related-team-resource .resource__icon>img[data-v-10ef45ac]{border-radius:var(--border-radius-pill);overflow:hidden;width:32px;height:32px}.material-design-icon[data-v-78029c82]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.related-resources__header h5[data-v-78029c82]{font-weight:var(--font-weight-heading, bold);margin-bottom:6px}.related-resources__header p[data-v-78029c82]{color:var(--color-text-maxcontrast)}.nc-select-users[data-v-e8e18fd3] .vs__selected{padding-inline:0 5px!important}.material-design-icon[data-v-f2b71592]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.select-group-error[data-v-f2b71592]{color:var(--color-text-error, var(--color-error));font-size:13px;padding-inline-start:var(--border-radius-element)}.material-design-icon[data-v-d327fb49]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}/*! + */.header-menu[data-v-d45c5788]{position:relative;width:var(--header-height);height:var(--header-height)}.header-menu .header-menu__trigger[data-v-d45c5788]{--button-size: var(--header-height) !important;height:var(--header-height);opacity:.85;filter:none!important;color:var(--color-background-plain-text, var(--color-primary-text))!important}.header-menu .header-menu__trigger[data-v-d45c5788]:focus-visible{outline:none!important;box-shadow:none!important}.header-menu .header-menu__trigger[data-v-d45c5788] .button-vue__icon svg,.header-menu .header-menu__trigger[data-v-d45c5788] .button-vue__icon:not(:has(svg)){mask:var(--header-menu-icon-mask, none)}.header-menu--opened .header-menu__trigger[data-v-d45c5788],.header-menu__trigger[data-v-d45c5788]:hover,.header-menu__trigger[data-v-d45c5788]:focus,.header-menu__trigger[data-v-d45c5788]:active{opacity:1}@media only screen and (max-width:512px){.header-menu[data-v-d45c5788]{width:var(--default-clickable-area)}.header-menu .header-menu__trigger[data-v-d45c5788]{--button-size: var(--default-clickable-area) !important}}.header-menu__wrapper[data-v-d45c5788]{position:fixed;z-index:2000;top:var(--header-height);inset-inline-end:0;box-sizing:border-box;margin:0 8px;border-radius:var(--border-radius-element);background-color:var(--color-main-background);filter:drop-shadow(0 1px 5px var(--color-box-shadow))}.header-menu__caret[data-v-d45c5788]{position:absolute;z-index:2001;bottom:0;inset-inline-start:calc(50% - 10px);width:0;height:0;content:" ";pointer-events:none;border:10px solid transparent;border-bottom-color:var(--color-main-background)}.header-menu__content[data-v-d45c5788]{overflow:auto;width:350px;max-width:calc(100vw - 16px);min-height:calc(var(--default-clickable-area) * 1.5);max-height:calc(100vh - var(--header-height) * 2)}.header-menu__content[data-v-d45c5788] .empty-content{margin:12vh 10px}._material-design-icon_yC3vd{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._hotkey_ohHBi{--form-element-label-offset: calc(var(--border-radius-element) + var(--default-grid-baseline));display:flex;flex-direction:row-reverse;align-items:stretch;padding-inline:var(--form-element-label-offset)}._hotkey_ohHBi:first-child ._hotkey__label_au-to,._hotkey_ohHBi:first-child ._hotkey__keys_4Mi3z{border-block-start:none}._hotkey__label_au-to,._hotkey__keys_4Mi3z{display:flex;align-items:center;padding-block:calc(2 * var(--default-grid-baseline));border-block-start:1px solid var(--color-border)}._hotkey__label_au-to{flex:1 1 200px}._hotkey__keys_4Mi3z{flex:1 1 auto;flex-wrap:wrap;justify-content:end;row-gap:calc(1 * var(--default-grid-baseline))}._material-design-icon_FHHYV{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._kbd_3V7rw{display:inline-flex;align-items:center;justify-content:center;min-width:var(--default-clickable-area);height:var(--default-clickable-area);padding-inline:calc(2 * var(--default-grid-baseline)) calc(2 * var(--default-grid-baseline));border:2px solid var(--color-primary-element-light);border-block-end-width:4px;border-radius:var(--border-radius-element);box-shadow:none;font-family:var(--font-family);line-height:1;white-space:nowrap}._kbd_3V7rw+._kbd_3V7rw{margin-inline-start:calc(1 * var(--default-grid-baseline))}._hotkeyList_xNXCh{--form-element-label-offset: calc(var(--border-radius-element) + var(--default-grid-baseline))}._hotkeyList__heading_j6G86{font-weight:var(--font-weight-heading, bold);margin-inline:var(--form-element-label-offset)}.material-design-icon[data-v-0ee94269]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.option[data-v-0ee94269]{display:flex;align-items:center;width:100%;height:var(--height);cursor:inherit}.option__avatar[data-v-0ee94269]{margin-inline-end:var(--margin)}.option__details[data-v-0ee94269]{display:flex;flex:1 1;flex-direction:column;justify-content:center;min-width:0}.option__lineone[data-v-0ee94269]{color:var(--color-main-text)}.option__linetwo[data-v-0ee94269]{color:var(--color-text-maxcontrast)}.option__lineone[data-v-0ee94269],.option__linetwo[data-v-0ee94269]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;line-height:1.2}.option__lineone strong[data-v-0ee94269],.option__linetwo strong[data-v-0ee94269]{font-weight:700}.option--compact .option__lineone[data-v-0ee94269]{font-size:14px}.option--compact .option__linetwo[data-v-0ee94269]{font-size:11px;line-height:1.5;margin-top:-4px}.option__icon[data-v-0ee94269]{width:var(--default-clickable-area);height:var(--default-clickable-area);color:var(--color-text-maxcontrast)}.option__icon.icon[data-v-0ee94269]{flex:0 0 var(--default-clickable-area);opacity:.7;background-position:center;background-size:16px}.option__details[data-v-0ee94269],.option__lineone[data-v-0ee94269],.option__linetwo[data-v-0ee94269],.option__icon[data-v-0ee94269]{cursor:inherit}.material-design-icon[data-v-353fa414]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.progress-bar[data-v-353fa414]{display:block;height:var(--progress-bar-height);--progress-bar-color: var(--v3a86fec2);--progress-bar-height: var(--v57442460)}.progress-bar--linear[data-v-353fa414]{width:100%;overflow:hidden;border:0;padding:0;background:var(--color-background-dark);border-radius:calc(var(--progress-bar-height) / 2)}.progress-bar--linear[data-v-353fa414]::-webkit-progress-bar{height:var(--progress-bar-height);background-color:transparent}.progress-bar--linear[data-v-353fa414]::-webkit-progress-value{background:var(--progress-bar-color, var(--gradient-primary-background));border-radius:calc(var(--progress-bar-height) / 2)}.progress-bar--linear[data-v-353fa414]::-moz-progress-bar{background:var(--progress-bar-color, var(--gradient-primary-background));border-radius:calc(var(--progress-bar-height) / 2)}.progress-bar--circular[data-v-353fa414]{width:var(--progress-bar-height);color:var(--progress-bar-color)}.progress-bar--error[data-v-353fa414]{color:var(--color-text-error, var(--color-error))!important}.progress-bar--error[data-v-353fa414]::-moz-progress-bar{background:var(--color-text-error, var(--color-error))!important}.progress-bar--error[data-v-353fa414]::-webkit-progress-value{background:var(--color-text-error, var(--color-error))!important}.progress-bar-container[data-v-353fa414]{display:flex;align-items:center;gap:calc(2 * var(--default-grid-baseline))}.progress-bar__value[data-v-353fa414]{font-size:var(--font-size-small, 13px);font-variant-numeric:tabular-nums;min-width:4ch;text-align:end}._material-design-icon_Sx-eY{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._radioGroup_checkboxRadioContainer_XfI2u .checkbox-content{max-width:unset!important}._material-design-icon_q-qLD{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}._radioGroupButton_FB-C-{--radio-group-button--border-radius: var(--border-radius-small);--radio-group-button--border-width: 1px;--radio-group-button--color: var(--color-primary-element-light-text);--radio-group-button--background-color: var(--color-primary-element-light);--radio-group-button--background-color-hover: var(--color-primary-element-light-hover);--radio-group-button--padding: 1px;cursor:pointer;color:var(--radio-group-button--color);background-color:var(--radio-group-button--background-color);transition:var(--animation-quick) background-color;border:var(--radio-group-button--border-width) solid var(--radio-group-button--background-color-hover);border-bottom-width:2px;border-radius:var(--radio-group-button--border-radius);display:flex;flex-direction:row;align-items:center;justify-content:center;text-align:center;min-height:var(--default-clickable-area);padding-block:var(--radio-group-button--padding) 0;padding-inline:var(--radio-group-button--padding)}._radioGroupButton_FB-C- *{cursor:pointer}._radioGroupButton_FB-C-:has(._radioGroupButton__label_gjGCq){padding-inline:calc(var(--radio-group-button--padding) + var(--border-radius-element))}._radioGroupButton_FB-C-:has(._radioGroupButton__icon_lWzM4){padding-inline-start:var(--radio-group-button--padding)}._radioGroupButton_FB-C-:hover:not(._radioGroupButton_disabled_08iwH){background-color:var(--radio-group-button--background-color-hover)}._radioGroupButton_FB-C-:focus-within{--radio-group-button--border-width: 2px;--radio-group-button--padding: 0px;border:var(--radio-group-button--border-width) solid var(--color-main-text)!important;outline:calc(var(--default-grid-baseline) / 2) var(--color-main-background)}._radioGroupButton_active_KS1Ru{--radio-group-button--color: var(--color-primary-element-text);--radio-group-button--background-color: var(--color-primary-element);--radio-group-button--background-color-hover: var(--color-primary-element-hover)}._radioGroupButton__label_gjGCq{font-weight:var(--font-weight-element, bold)}._radioGroupButton_disabled_08iwH{filter:saturate(.7);opacity:.5;cursor:default}._radioGroupButton_disabled_08iwH *{cursor:default}._radioGroupButton__icon_lWzM4{--radio-group-button--icon-size: calc(var(--default-clickable-area) - 4px);display:flex;align-items:center;justify-content:center;height:100%;width:var(--radio-group-button--icon-size)}._radioGroupButton__icon_lWzM4 *{--default-clickable-area: var(--radio-group-button--icon-size)}.material-design-icon[data-v-77577e58]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.resource[data-v-77577e58]{display:flex;align-items:center;height:var(--default-clickable-area)}.resource__button[data-v-77577e58]{width:100%!important;justify-content:flex-start!important;padding:0!important}.resource__button[data-v-77577e58] .button-vue__wrapper{justify-content:flex-start!important}.resource__button[data-v-77577e58] .button-vue__wrapper .button-vue__text{font-weight:var(--font-weight-default, normal)!important;margin-inline-start:2px!important}.resource__icon[data-v-77577e58]{width:32px;height:32px;background-color:var(--color-text-maxcontrast);border-radius:50%;display:flex;align-items:center;justify-content:center}.resource__icon img[data-v-77577e58]{width:16px;height:16px;filter:var(--background-invert-if-dark)}.material-design-icon[data-v-10ef45ac]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.team-resources__header[data-v-10ef45ac]{font-weight:var(--font-weight-heading, bold);margin-bottom:6px}.related-team[data-v-10ef45ac]{border-radius:var(--border-radius-container);border:2px solid var(--color-border-dark);margin-bottom:6px}.related-team__open[data-v-10ef45ac]{border-color:var(--color-primary-element)}.related-team__header[data-v-10ef45ac]{padding:6px;padding-inline-end:24px;display:flex;gap:12px}.related-team__name[data-v-10ef45ac]{display:flex;flex-grow:1;align-items:center;gap:12px;padding:6px 12px;font-weight:var(--font-weight-heading, bold);margin:0}.related-team .related-team-provider[data-v-10ef45ac]{padding:6px 12px}.related-team .related-team-provider__name[data-v-10ef45ac]{font-weight:var(--font-weight-heading, bold);margin-bottom:3px}.related-team .related-team-provider__link[data-v-10ef45ac]{display:flex;gap:12px;padding:6px 12px;font-weight:var(--font-weight-heading, bold)}.related-team .related-team-resource__link[data-v-10ef45ac]{display:flex;gap:12px;height:var(--default-clickable-area);align-items:center;border-radius:var(--border-radius-element)}.related-team .related-team-resource__link[data-v-10ef45ac]:hover{background-color:var(--color-background-hover)}.related-team .related-team-resource__link[data-v-10ef45ac]:focus{background-color:var(--color-background-hover);outline:2px solid var(--color-primary-element)}.related-team .related-team-resource .resource__icon[data-v-10ef45ac]{width:var(--default-clickable-area);height:var(--default-clickable-area);display:flex;align-items:center;justify-content:center;text-align:center}.related-team .related-team-resource .resource__icon>img[data-v-10ef45ac]{border-radius:var(--border-radius-pill);overflow:hidden;width:32px;height:32px}.material-design-icon[data-v-78029c82]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.related-resources__header h5[data-v-78029c82]{font-weight:var(--font-weight-heading, bold);margin-bottom:6px}.related-resources__header p[data-v-78029c82]{color:var(--color-text-maxcontrast)}.nc-select-users[data-v-e8e18fd3] .vs__selected{padding-inline:0 5px!important}.material-design-icon[data-v-f2b71592]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.select-group-error[data-v-f2b71592]{color:var(--color-text-error, var(--color-error));font-size:13px;padding-inline-start:var(--border-radius-element)}.material-design-icon[data-v-d327fb49]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}/*! * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */.textarea[data-v-d327fb49]{--input-border-color: var(--color-border-maxcontrast);--input-border-width-offset: calc(var(--border-width-input-focused, 2px) - var(--border-width-input, 2px));position:relative;width:100%;border-radius:var(--border-radius-element);margin-block-start:6px;resize:vertical}.textarea--disabled[data-v-d327fb49]{opacity:.7;filter:saturate(.7)}.textarea__main-wrapper[data-v-d327fb49]{padding:var(--border-width-input-focused, 2px);position:relative}.textarea__input[data-v-d327fb49]{margin:0;padding-block:var(--border-radius-element);padding-inline:10px;width:100%;font-size:var(--default-font-size);text-overflow:ellipsis;cursor:pointer;min-height:calc(var(--default-clickable-area) * 2);min-width:calc(var(--default-clickable-area) * 2);max-width:100%;background-color:var(--color-main-background);color:var(--color-main-text);--input-border-box-shadow-light: 0 -1px var(--input-border-color), 0 0 0 1px color-mix(in srgb, var(--input-border-color), 65% transparent);--input-border-box-shadow-dark: 0 1px var(--input-border-color), 0 0 0 1px color-mix(in srgb, var(--input-border-color), 65% transparent);--input-border-box-shadow: var(--input-border-box-shadow-light);border:none;border-radius:var(--border-radius-element);box-shadow:var(--input-border-box-shadow)}.textarea__input[data-v-d327fb49]:hover:not([disabled]){box-shadow:0 0 0 1px var(--input-border-color)}@media(prefers-color-scheme:dark){.textarea__input .textarea__input[data-v-d327fb49]{--input-border-box-shadow: var(--input-border-box-shadow-dark)}}[data-theme-dark] .textarea__input[data-v-d327fb49]{--input-border-box-shadow: var(--input-border-box-shadow-dark)}[data-theme-light] .textarea__input[data-v-d327fb49]{--input-border-box-shadow: var(--input-border-box-shadow-light)}.textarea--legacy .textarea__input[data-v-d327fb49]{box-shadow:0 0 0 1px var(--input-border-color)}.textarea--legacy .textarea__input[data-v-d327fb49]:hover:not([disabled]){box-shadow:0 0 0 2px var(--input-border-color)}.textarea__input[data-v-d327fb49]:focus-within:not([disabled]),.textarea__input[data-v-d327fb49]:active:not([disabled]){box-shadow:0 0 0 2px var(--input-border-color),0 0 0 4px var(--color-main-background)!important}.textarea__input[data-v-d327fb49]:active:not([disabled]),.textarea__input[data-v-d327fb49]:focus:not([disabled]){--input-border-width-offset: 0px;--input-border-color: var(--color-main-text)}.textarea__input[data-v-d327fb49]:not(:focus,.textarea__input--label-outside)::placeholder{opacity:0}.textarea__input[data-v-d327fb49]:focus{cursor:text}.textarea__input[data-v-d327fb49]:disabled{cursor:default}.textarea__input[data-v-d327fb49]:focus-visible{box-shadow:unset!important}.textarea__input--success[data-v-d327fb49]{--input-border-color: var(--color-border-success, var(--color-success)) !important}.textarea__input--success[data-v-d327fb49]:focus-visible{box-shadow:#f8fafc 0 0 0 2px,var(--color-primary-element) 0 0 0 4px,#0000000d 0 1px 2px}.textarea__input--error[data-v-d327fb49]{--input-border-color: var(--color-border-error, var(--color-error)) !important}.textarea__input--error[data-v-d327fb49]:focus-visible{box-shadow:#f8fafc 0 0 0 2px,var(--color-primary-element) 0 0 0 4px,#0000000d 0 1px 2px}.textarea__label[data-v-d327fb49]{position:absolute;margin-inline:12px 0;max-width:fit-content;inset-block-start:11px;inset-inline:0;color:var(--color-text-maxcontrast);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none;transition:height var(--animation-quick),inset-block-start var(--animation-quick),font-size var(--animation-quick),color var(--animation-quick),background-color var(--animation-quick) var(--animation-slow)}.textarea__input:focus+.textarea__label[data-v-d327fb49],.textarea__input:not(:placeholder-shown)+.textarea__label[data-v-d327fb49]{inset-block-start:-10px;line-height:1.5;font-size:13px;font-weight:var(--font-weight-element, 500);color:var(--color-main-text);background-color:var(--color-main-background);padding-inline:4px;margin-inline-start:8px;transition:height var(--animation-quick),inset-block-start var(--animation-quick),font-size var(--animation-quick),color var(--animation-quick)}.textarea__helper-text-message[data-v-d327fb49]{padding-block:4px;display:flex;align-items:center}.textarea__helper-text-message__icon[data-v-d327fb49]{margin-inline-end:8px}.textarea__helper-text-message--error[data-v-d327fb49]{color:var(--color-error-text)}.textarea__helper-text-message--success[data-v-d327fb49]{color:var(--color-success-text)} diff --git a/dist/dav-settings-admin-example-content.css b/dist/dav-settings-admin-example-content.css index a86ade84493e3..9a72ffcd2e744 100644 --- a/dist/dav-settings-admin-example-content.css +++ b/dist/dav-settings-admin-example-content.css @@ -17,7 +17,7 @@ @import './common-NcEmptyContent-CGAPqk4S-Don1d5Bd.chunk.css'; @import './common-NcPasswordField-Be5_qcfm-Crp_EMfV.chunk.css'; @import './common-NcBreadcrumbs-5gl8Syfa-CfbvucBX.chunk.css'; -@import './common-NcTextArea-Dxzj4zdb-DIo27L88.chunk.css'; +@import './common-NcTextArea-Dxzj4zdb-B-B2llha.chunk.css'; @import './common-NcActionSeparator-Ct2RnclR-pXJ_-D_I.chunk.css'; @import './common-NcCheckboxRadioSwitch-D8Dfv4iw-CPGkDj-p.chunk.css'; @import './common-Plus-Som-mR4B.chunk.css'; diff --git a/dist/dav-settings-admin-example-content.mjs b/dist/dav-settings-admin-example-content.mjs index 01b5e986088c5..00cc283056de4 100644 --- a/dist/dav-settings-admin-example-content.mjs +++ b/dist/dav-settings-admin-example-content.mjs @@ -1,2 +1,2 @@ -import{o as l,f as d,g as u,t as m,h,m as V,b as U,c as y,u as x,w as i,i as B,k as r,r as p,j as g,e as Z}from"./Web-BwmPK40i.chunk.mjs";import{_ as w,l as k}from"./public-C1mLBHT3.chunk.mjs";import{t as c}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import"./NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs";import"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";/* empty css */import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import{N as S}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import{b as C}from"./index-B-dGqfIG.chunk.mjs";import{N as H}from"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import{D as T,s as j}from"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import{N as L}from"./index-BW4M2n71.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import"./mdi-Lt-19ASw.chunk.mjs";import"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./index-xEyWukTf.chunk.mjs";import{c as _}from"./index-BLNGy7h5.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import{N as q}from"./ContentCopy-BF1gBM5z.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import{d as M,a as E}from"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import{l as I}from"./logger-z78wFmcz.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";const G='',J={name:"AccountIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},K=["aria-hidden","aria-label"],P=["fill","width","height"],Q={d:"M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z"},W={key:0};function X(a,e,t,n,o,s){return l(),d("span",V(a.$attrs,{"aria-hidden":t.title?null:"true","aria-label":t.title,class:"material-design-icon account-icon",role:"img",onClick:e[0]||(e[0]=v=>a.$emit("click",v))}),[(l(),d("svg",{fill:t.fillColor,class:"material-design-icon__svg",width:t.size,height:t.size,viewBox:"0 0 24 24"},[u("path",Q,[t.title?(l(),d("title",W,m(t.title),1)):h("",!0)])],8,P))],16,K)}const Y=w(J,[["render",X]]),ee={name:"RestoreIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},te=["aria-hidden","aria-label"],ae=["fill","width","height"],oe={d:"M13,3A9,9 0 0,0 4,12H1L4.89,15.89L4.96,16.03L9,12H6A7,7 0 0,1 13,5A7,7 0 0,1 20,12A7,7 0 0,1 13,19C11.07,19 9.32,18.21 8.06,16.94L6.64,18.36C8.27,20 10.5,21 13,21A9,9 0 0,0 22,12A9,9 0 0,0 13,3Z"},le={key:0};function ie(a,e,t,n,o,s){return l(),d("span",V(a.$attrs,{"aria-hidden":t.title?null:"true","aria-label":t.title,class:"material-design-icon restore-icon",role:"img",onClick:e[0]||(e[0]=v=>a.$emit("click",v))}),[(l(),d("svg",{fill:t.fillColor,class:"material-design-icon__svg",width:t.size,height:t.size,viewBox:"0 0 24 24"},[u("path",oe,[t.title?(l(),d("title",le,m(t.title),1)):h("",!0)])],8,ae))],16,te)}const R=w(ee,[["render",ie]]),ne={name:"TrayArrowUpIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},se=["aria-hidden","aria-label"],re=["fill","width","height"],ce={d:"M2 12H4V17H20V12H22V17C22 18.11 21.11 19 20 19H4C2.9 19 2 18.11 2 17V12M12 2L6.46 7.46L7.88 8.88L11 5.75V15H13V5.75L16.13 8.88L17.55 7.45L12 2Z"},de={key:0};function pe(a,e,t,n,o,s){return l(),d("span",V(a.$attrs,{"aria-hidden":t.title?null:"true","aria-label":t.title,class:"material-design-icon tray-arrow-up-icon",role:"img",onClick:e[0]||(e[0]=v=>a.$emit("click",v))}),[(l(),d("svg",{fill:t.fillColor,class:"material-design-icon__svg",width:t.size,height:t.size,viewBox:"0 0 24 24"},[u("path",ce,[t.title?(l(),d("title",de,m(t.title),1)):h("",!0)])],8,re))],16,se)}const $=w(ne,[["render",pe]]),me={class:"download-button"},ue={class:"download-button__label"},ve=U({__name:"ExampleContentDownloadButton",props:{href:{}},setup(a){return(e,t)=>(l(),y(x(S),{variant:"tertiary",href:a.href},{icon:i(()=>[B(e.$slots,"icon",{},void 0,!0)]),default:i(()=>[u("div",me,[u("span",ue,[B(e.$slots,"default",{},void 0,!0)]),r(T,{class:"download-button__icon",size:20})])]),_:3},8,["href"]))}}),O=w(ve,[["__scopeId","data-v-be40807a"]]),he=k("dav","enableDefaultContact",!1),fe=k("dav","hasCustomDefaultContact",!1),ge={name:"ExampleContactSettings",components:{NcDialog:L,NcButton:S,NcCheckboxRadioSwitch:H,IconUpload:$,IconRestore:R,IconAccount:Y,ExampleContentDownloadButton:O},setup(){return{t:c}},data(){return{enableDefaultContact:he,hasCustomDefaultContact:fe,isModalOpen:!1,loading:!1,buttons:[{label:c("dav","Cancel"),icon:G,callback:()=>{this.isModalOpen=!1}},{label:c("dav","Import"),icon:j,variant:"primary",callback:()=>{this.clickImportInput()}}]}},computed:{downloadUrl(){return C("/apps/dav/api/defaultcontact/contact")}},methods:{updateEnableDefaultContact(){_.put(C("apps/dav/api/defaultcontact/config"),{allow:!this.enableDefaultContact}).then(()=>{this.enableDefaultContact=!this.enableDefaultContact}).catch(()=>{E(c("dav","Error while saving settings"))})},toggleModal(){this.isModalOpen=!this.isModalOpen},clickImportInput(){this.$refs.exampleContactImportInput.click()},resetContact(){this.loading=!0,_.put(C("/apps/dav/api/defaultcontact/contact")).then(()=>{this.hasCustomDefaultContact=!1,M(c("dav","Contact reset successfully"))}).catch(a=>{I.error("Error importing contact:",{error:a}),E(c("dav","Error while resetting contact"))}).finally(()=>{this.loading=!1})},processFile(a){this.loading=!0;const e=a.target.files[0],t=new FileReader;t.onload=async()=>{this.isModalOpen=!1;try{await _.put(C("/apps/dav/api/defaultcontact/contact"),{contactData:t.result}),this.hasCustomDefaultContact=!0,M(c("dav","Contact imported successfully"))}catch(n){I.error("Error importing contact:",{error:n}),E(c("dav","Error while importing contact"))}finally{this.loading=!1,a.target.value=""}},t.readAsText(e)}}},Ce={class:"example-contact-settings"},we={key:0,class:"example-contact-settings__buttons"},be=["disabled"];function xe(a,e,t,n,o,s){const v=p("NcCheckboxRadioSwitch"),N=p("IconAccount"),A=p("ExampleContentDownloadButton"),D=p("IconUpload"),b=p("NcButton"),z=p("IconRestore"),F=p("NcDialog");return l(),d("div",Ce,[r(v,{modelValue:o.enableDefaultContact,type:"switch","onUpdate:modelValue":s.updateEnableDefaultContact},{default:i(()=>[g(m(n.t("dav","Add example contact to user's address book when they first log in")),1)]),_:1},8,["modelValue","onUpdate:modelValue"]),o.enableDefaultContact?(l(),d("div",we,[r(A,{href:s.downloadUrl},{icon:i(()=>[r(N,{size:20})]),default:i(()=>[e[2]||(e[2]=g(" example_contact.vcf ",-1))]),_:1},8,["href"]),r(b,{variant:"secondary",onClick:s.toggleModal},{icon:i(()=>[r(D,{size:20})]),default:i(()=>[g(" "+m(n.t("dav","Import contact")),1)]),_:1},8,["onClick"]),o.hasCustomDefaultContact?(l(),y(b,{key:0,variant:"tertiary",onClick:s.resetContact},{icon:i(()=>[r(z,{size:20})]),default:i(()=>[g(" "+m(n.t("dav","Reset to default")),1)]),_:1},8,["onClick"])):h("",!0)])):h("",!0),r(F,{open:o.isModalOpen,"onUpdate:open":e[0]||(e[0]=f=>o.isModalOpen=f),name:n.t("dav","Import contacts"),buttons:o.buttons},{default:i(()=>[u("div",null,[u("p",null,m(n.t("dav","Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?")),1)])]),_:1},8,["open","name","buttons"]),u("input",{id:"example-contact-import",ref:"exampleContactImportInput",disabled:o.loading,type:"file",accept:".vcf",class:"hidden-visually",onChange:e[1]||(e[1]=(...f)=>s.processFile&&s.processFile(...f))},null,40,be)])}const ye=w(ge,[["render",xe],["__scopeId","data-v-db8b0002"]]),_e={name:"CalendarBlankIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},Ee=["aria-hidden","aria-label"],ke=["fill","width","height"],Ie={d:"M19,19H5V8H19M16,1V3H8V1H6V3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3H18V1"},De={key:0};function Me(a,e,t,n,o,s){return l(),d("span",V(a.$attrs,{"aria-hidden":t.title?null:"true","aria-label":t.title,class:"material-design-icon calendar-blank-icon",role:"img",onClick:e[0]||(e[0]=v=>a.$emit("click",v))}),[(l(),d("svg",{fill:t.fillColor,class:"material-design-icon__svg",width:t.size,height:t.size,viewBox:"0 0 24 24"},[u("path",Ie,[t.title?(l(),d("title",De,m(t.title),1)):h("",!0)])],8,ke))],16,Ee)}const Ve=w(_e,[["render",Me]]);async function Ne(a){const e=C("/apps/dav/api/exampleEvent/enable");await _.post(e,{enable:a})}async function Ae(a){const e=C("/apps/dav/api/exampleEvent/event");await _.post(e,{ics:a})}async function ze(){const a=C("/apps/dav/api/exampleEvent/event");await _.delete(a)}const Fe={name:"ExampleEventSettings",components:{NcButton:S,NcCheckboxRadioSwitch:H,NcDialog:L,IconCalendarBlank:Ve,IconUpload:$,IconRestore:R,ExampleContentDownloadButton:O},setup(){return{t:c}},data(){return{createExampleEvent:k("dav","create_example_event",!1),hasCustomEvent:k("dav","has_custom_example_event",!1),showImportModal:!1,uploading:!1,deleting:!1,savingConfig:!1,selectedFile:void 0}},computed:{downloadUrl(){return C("/apps/dav/api/exampleEvent/event")}},methods:{selectFile(){this.selectedFile=this.$refs["event-file"]?.files[0]},async updateCreateExampleEvent(){this.savingConfig=!0;const a=!this.createExampleEvent;try{await Ne(a)}catch(e){E(c("dav","Failed to save example event creation setting")),I.error("Failed to save example event creation setting",{error:e,enable:a})}finally{this.savingConfig=!1}this.createExampleEvent=a},uploadCustomEvent(){if(!this.selectedFile)return;this.uploading=!0;const a=new FileReader;a.addEventListener("load",async()=>{const e=a.result;try{await Ae(e)}catch(t){E(c("dav","Failed to upload the example event")),I.error("Failed to upload example ICS",{error:t,ics:e});return}finally{this.uploading=!1}M(c("dav","Custom example event was saved successfully")),this.showImportModal=!1,this.hasCustomEvent=!0}),a.readAsText(this.selectedFile)},async deleteCustomEvent(){this.deleting=!0;try{await ze()}catch(a){E(c("dav","Failed to delete the custom example event")),I.error("Failed to delete the custom example event",{error:a});return}finally{this.deleting=!1}M(c("dav","Custom example event was deleted successfully")),this.hasCustomEvent=!1}}},Se={class:"example-event-settings"},Be={key:0,class:"example-event-settings__buttons"},Ue={class:"import-event-modal"},He=["disabled"],Le={class:"import-event-modal__buttons"};function Re(a,e,t,n,o,s){const v=p("NcCheckboxRadioSwitch"),N=p("IconCalendarBlank"),A=p("ExampleContentDownloadButton"),D=p("IconUpload"),b=p("NcButton"),z=p("IconRestore"),F=p("NcDialog");return l(),d("div",Se,[r(v,{modelValue:o.createExampleEvent,disabled:o.savingConfig,type:"switch","onUpdate:modelValue":s.updateCreateExampleEvent},{default:i(()=>[g(m(n.t("dav","Add example event to user's calendar when they first log in")),1)]),_:1},8,["modelValue","disabled","onUpdate:modelValue"]),o.createExampleEvent?(l(),d("div",Be,[r(A,{href:s.downloadUrl},{icon:i(()=>[r(N,{size:20})]),default:i(()=>[e[4]||(e[4]=g(" example_event.ics ",-1))]),_:1},8,["href"]),r(b,{variant:"secondary",onClick:e[0]||(e[0]=f=>o.showImportModal=!0)},{icon:i(()=>[r(D,{size:20})]),default:i(()=>[g(" "+m(n.t("dav","Import calendar event")),1)]),_:1}),o.hasCustomEvent?(l(),y(b,{key:0,variant:"tertiary",disabled:o.deleting,onClick:s.deleteCustomEvent},{icon:i(()=>[r(z,{size:20})]),default:i(()=>[g(" "+m(n.t("dav","Reset to default")),1)]),_:1},8,["disabled","onClick"])):h("",!0)])):h("",!0),r(F,{open:o.showImportModal,"onUpdate:open":e[3]||(e[3]=f=>o.showImportModal=f),name:n.t("dav","Import calendar event")},{default:i(()=>[u("div",Ue,[u("p",null,m(n.t("dav","Uploading a new event will overwrite the existing one.")),1),u("input",{ref:"event-file",disabled:o.uploading,type:"file",accept:".ics,text/calendar",class:"import-event-modal__file-picker",onChange:e[1]||(e[1]=(...f)=>s.selectFile&&s.selectFile(...f))},null,40,He),u("div",Le,[r(b,{disabled:o.uploading||!o.selectedFile,variant:"primary",onClick:e[2]||(e[2]=f=>s.uploadCustomEvent())},{icon:i(()=>[r(D,{size:20})]),default:i(()=>[g(" "+m(n.t("dav","Upload event")),1)]),_:1},8,["disabled"])])])]),_:1},8,["open","name"])])}const $e=w(Fe,[["render",Re],["__scopeId","data-v-88fee128"]]),Oe=U({__name:"ExampleContentSettingsSection",setup(a){const e=k("dav","contactsEnabled"),t=k("dav","calendarEnabled");return(n,o)=>(l(),y(x(q),{id:"example-content",name:x(c)("dav","Example content"),description:x(c)("dav","Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content.")},{default:i(()=>[x(e)?(l(),y(ye,{key:0})):h("",!0),x(t)?(l(),y($e,{key:1})):h("",!0)]),_:1},8,["name","description"]))}}),Ze=Z(Oe);Ze.mount("#settings-example-content"); +import{o as l,f as d,g as u,t as m,h,m as V,b as U,c as y,u as x,w as i,i as B,k as r,r as p,j as g,e as Z}from"./Web-BwmPK40i.chunk.mjs";import{_ as w,l as k}from"./public-C1mLBHT3.chunk.mjs";import{t as c}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import"./NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs";import"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";/* empty css */import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import{N as S}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import{b as C}from"./index-B-dGqfIG.chunk.mjs";import{N as H}from"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import{D as T,s as j}from"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import{N as L}from"./index-BW4M2n71.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import"./mdi-Lt-19ASw.chunk.mjs";import"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./index-xEyWukTf.chunk.mjs";import{c as _}from"./index-BLNGy7h5.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import{N as q}from"./ContentCopy-BF1gBM5z.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import{d as M,a as E}from"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import{l as I}from"./logger-z78wFmcz.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";const G='',J={name:"AccountIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},K=["aria-hidden","aria-label"],P=["fill","width","height"],Q={d:"M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z"},W={key:0};function X(a,e,t,n,o,s){return l(),d("span",V(a.$attrs,{"aria-hidden":t.title?null:"true","aria-label":t.title,class:"material-design-icon account-icon",role:"img",onClick:e[0]||(e[0]=v=>a.$emit("click",v))}),[(l(),d("svg",{fill:t.fillColor,class:"material-design-icon__svg",width:t.size,height:t.size,viewBox:"0 0 24 24"},[u("path",Q,[t.title?(l(),d("title",W,m(t.title),1)):h("",!0)])],8,P))],16,K)}const Y=w(J,[["render",X]]),ee={name:"RestoreIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},te=["aria-hidden","aria-label"],ae=["fill","width","height"],oe={d:"M13,3A9,9 0 0,0 4,12H1L4.89,15.89L4.96,16.03L9,12H6A7,7 0 0,1 13,5A7,7 0 0,1 20,12A7,7 0 0,1 13,19C11.07,19 9.32,18.21 8.06,16.94L6.64,18.36C8.27,20 10.5,21 13,21A9,9 0 0,0 22,12A9,9 0 0,0 13,3Z"},le={key:0};function ie(a,e,t,n,o,s){return l(),d("span",V(a.$attrs,{"aria-hidden":t.title?null:"true","aria-label":t.title,class:"material-design-icon restore-icon",role:"img",onClick:e[0]||(e[0]=v=>a.$emit("click",v))}),[(l(),d("svg",{fill:t.fillColor,class:"material-design-icon__svg",width:t.size,height:t.size,viewBox:"0 0 24 24"},[u("path",oe,[t.title?(l(),d("title",le,m(t.title),1)):h("",!0)])],8,ae))],16,te)}const R=w(ee,[["render",ie]]),ne={name:"TrayArrowUpIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},se=["aria-hidden","aria-label"],re=["fill","width","height"],ce={d:"M2 12H4V17H20V12H22V17C22 18.11 21.11 19 20 19H4C2.9 19 2 18.11 2 17V12M12 2L6.46 7.46L7.88 8.88L11 5.75V15H13V5.75L16.13 8.88L17.55 7.45L12 2Z"},de={key:0};function pe(a,e,t,n,o,s){return l(),d("span",V(a.$attrs,{"aria-hidden":t.title?null:"true","aria-label":t.title,class:"material-design-icon tray-arrow-up-icon",role:"img",onClick:e[0]||(e[0]=v=>a.$emit("click",v))}),[(l(),d("svg",{fill:t.fillColor,class:"material-design-icon__svg",width:t.size,height:t.size,viewBox:"0 0 24 24"},[u("path",ce,[t.title?(l(),d("title",de,m(t.title),1)):h("",!0)])],8,re))],16,se)}const $=w(ne,[["render",pe]]),me={class:"download-button"},ue={class:"download-button__label"},ve=U({__name:"ExampleContentDownloadButton",props:{href:{}},setup(a){return(e,t)=>(l(),y(x(S),{variant:"tertiary",href:a.href},{icon:i(()=>[B(e.$slots,"icon",{},void 0,!0)]),default:i(()=>[u("div",me,[u("span",ue,[B(e.$slots,"default",{},void 0,!0)]),r(T,{class:"download-button__icon",size:20})])]),_:3},8,["href"]))}}),O=w(ve,[["__scopeId","data-v-be40807a"]]),he=k("dav","enableDefaultContact",!1),fe=k("dav","hasCustomDefaultContact",!1),ge={name:"ExampleContactSettings",components:{NcDialog:L,NcButton:S,NcCheckboxRadioSwitch:H,IconUpload:$,IconRestore:R,IconAccount:Y,ExampleContentDownloadButton:O},setup(){return{t:c}},data(){return{enableDefaultContact:he,hasCustomDefaultContact:fe,isModalOpen:!1,loading:!1,buttons:[{label:c("dav","Cancel"),icon:G,callback:()=>{this.isModalOpen=!1}},{label:c("dav","Import"),icon:j,variant:"primary",callback:()=>{this.clickImportInput()}}]}},computed:{downloadUrl(){return C("/apps/dav/api/defaultcontact/contact")}},methods:{updateEnableDefaultContact(){_.put(C("apps/dav/api/defaultcontact/config"),{allow:!this.enableDefaultContact}).then(()=>{this.enableDefaultContact=!this.enableDefaultContact}).catch(()=>{E(c("dav","Error while saving settings"))})},toggleModal(){this.isModalOpen=!this.isModalOpen},clickImportInput(){this.$refs.exampleContactImportInput.click()},resetContact(){this.loading=!0,_.put(C("/apps/dav/api/defaultcontact/contact")).then(()=>{this.hasCustomDefaultContact=!1,M(c("dav","Contact reset successfully"))}).catch(a=>{I.error("Error importing contact:",{error:a}),E(c("dav","Error while resetting contact"))}).finally(()=>{this.loading=!1})},processFile(a){this.loading=!0;const e=a.target.files[0],t=new FileReader;t.onload=async()=>{this.isModalOpen=!1;try{await _.put(C("/apps/dav/api/defaultcontact/contact"),{contactData:t.result}),this.hasCustomDefaultContact=!0,M(c("dav","Contact imported successfully"))}catch(n){I.error("Error importing contact:",{error:n}),E(c("dav","Error while importing contact"))}finally{this.loading=!1,a.target.value=""}},t.readAsText(e)}}},Ce={class:"example-contact-settings"},we={key:0,class:"example-contact-settings__buttons"},be=["disabled"];function xe(a,e,t,n,o,s){const v=p("NcCheckboxRadioSwitch"),N=p("IconAccount"),A=p("ExampleContentDownloadButton"),D=p("IconUpload"),b=p("NcButton"),z=p("IconRestore"),F=p("NcDialog");return l(),d("div",Ce,[r(v,{modelValue:o.enableDefaultContact,type:"switch","onUpdate:modelValue":s.updateEnableDefaultContact},{default:i(()=>[g(m(n.t("dav","Add example contact to user's address book when they first log in")),1)]),_:1},8,["modelValue","onUpdate:modelValue"]),o.enableDefaultContact?(l(),d("div",we,[r(A,{href:s.downloadUrl},{icon:i(()=>[r(N,{size:20})]),default:i(()=>[e[2]||(e[2]=g(" example_contact.vcf ",-1))]),_:1},8,["href"]),r(b,{variant:"secondary",onClick:s.toggleModal},{icon:i(()=>[r(D,{size:20})]),default:i(()=>[g(" "+m(n.t("dav","Import contact")),1)]),_:1},8,["onClick"]),o.hasCustomDefaultContact?(l(),y(b,{key:0,variant:"tertiary",onClick:s.resetContact},{icon:i(()=>[r(z,{size:20})]),default:i(()=>[g(" "+m(n.t("dav","Reset to default")),1)]),_:1},8,["onClick"])):h("",!0)])):h("",!0),r(F,{open:o.isModalOpen,"onUpdate:open":e[0]||(e[0]=f=>o.isModalOpen=f),name:n.t("dav","Import contacts"),buttons:o.buttons},{default:i(()=>[u("div",null,[u("p",null,m(n.t("dav","Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?")),1)])]),_:1},8,["open","name","buttons"]),u("input",{id:"example-contact-import",ref:"exampleContactImportInput",disabled:o.loading,type:"file",accept:".vcf",class:"hidden-visually",onChange:e[1]||(e[1]=(...f)=>s.processFile&&s.processFile(...f))},null,40,be)])}const ye=w(ge,[["render",xe],["__scopeId","data-v-db8b0002"]]),_e={name:"CalendarBlankIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},Ee=["aria-hidden","aria-label"],ke=["fill","width","height"],Ie={d:"M19,19H5V8H19M16,1V3H8V1H6V3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3H18V1"},De={key:0};function Me(a,e,t,n,o,s){return l(),d("span",V(a.$attrs,{"aria-hidden":t.title?null:"true","aria-label":t.title,class:"material-design-icon calendar-blank-icon",role:"img",onClick:e[0]||(e[0]=v=>a.$emit("click",v))}),[(l(),d("svg",{fill:t.fillColor,class:"material-design-icon__svg",width:t.size,height:t.size,viewBox:"0 0 24 24"},[u("path",Ie,[t.title?(l(),d("title",De,m(t.title),1)):h("",!0)])],8,ke))],16,Ee)}const Ve=w(_e,[["render",Me]]);async function Ne(a){const e=C("/apps/dav/api/exampleEvent/enable");await _.post(e,{enable:a})}async function Ae(a){const e=C("/apps/dav/api/exampleEvent/event");await _.post(e,{ics:a})}async function ze(){const a=C("/apps/dav/api/exampleEvent/event");await _.delete(a)}const Fe={name:"ExampleEventSettings",components:{NcButton:S,NcCheckboxRadioSwitch:H,NcDialog:L,IconCalendarBlank:Ve,IconUpload:$,IconRestore:R,ExampleContentDownloadButton:O},setup(){return{t:c}},data(){return{createExampleEvent:k("dav","create_example_event",!1),hasCustomEvent:k("dav","has_custom_example_event",!1),showImportModal:!1,uploading:!1,deleting:!1,savingConfig:!1,selectedFile:void 0}},computed:{downloadUrl(){return C("/apps/dav/api/exampleEvent/event")}},methods:{selectFile(){this.selectedFile=this.$refs["event-file"]?.files[0]},async updateCreateExampleEvent(){this.savingConfig=!0;const a=!this.createExampleEvent;try{await Ne(a)}catch(e){E(c("dav","Failed to save example event creation setting")),I.error("Failed to save example event creation setting",{error:e,enable:a})}finally{this.savingConfig=!1}this.createExampleEvent=a},uploadCustomEvent(){if(!this.selectedFile)return;this.uploading=!0;const a=new FileReader;a.addEventListener("load",async()=>{const e=a.result;try{await Ae(e)}catch(t){E(c("dav","Failed to upload the example event")),I.error("Failed to upload example ICS",{error:t,ics:e});return}finally{this.uploading=!1}M(c("dav","Custom example event was saved successfully")),this.showImportModal=!1,this.hasCustomEvent=!0}),a.readAsText(this.selectedFile)},async deleteCustomEvent(){this.deleting=!0;try{await ze()}catch(a){E(c("dav","Failed to delete the custom example event")),I.error("Failed to delete the custom example event",{error:a});return}finally{this.deleting=!1}M(c("dav","Custom example event was deleted successfully")),this.hasCustomEvent=!1}}},Se={class:"example-event-settings"},Be={key:0,class:"example-event-settings__buttons"},Ue={class:"import-event-modal"},He=["disabled"],Le={class:"import-event-modal__buttons"};function Re(a,e,t,n,o,s){const v=p("NcCheckboxRadioSwitch"),N=p("IconCalendarBlank"),A=p("ExampleContentDownloadButton"),D=p("IconUpload"),b=p("NcButton"),z=p("IconRestore"),F=p("NcDialog");return l(),d("div",Se,[r(v,{modelValue:o.createExampleEvent,disabled:o.savingConfig,type:"switch","onUpdate:modelValue":s.updateCreateExampleEvent},{default:i(()=>[g(m(n.t("dav","Add example event to user's calendar when they first log in")),1)]),_:1},8,["modelValue","disabled","onUpdate:modelValue"]),o.createExampleEvent?(l(),d("div",Be,[r(A,{href:s.downloadUrl},{icon:i(()=>[r(N,{size:20})]),default:i(()=>[e[4]||(e[4]=g(" example_event.ics ",-1))]),_:1},8,["href"]),r(b,{variant:"secondary",onClick:e[0]||(e[0]=f=>o.showImportModal=!0)},{icon:i(()=>[r(D,{size:20})]),default:i(()=>[g(" "+m(n.t("dav","Import calendar event")),1)]),_:1}),o.hasCustomEvent?(l(),y(b,{key:0,variant:"tertiary",disabled:o.deleting,onClick:s.deleteCustomEvent},{icon:i(()=>[r(z,{size:20})]),default:i(()=>[g(" "+m(n.t("dav","Reset to default")),1)]),_:1},8,["disabled","onClick"])):h("",!0)])):h("",!0),r(F,{open:o.showImportModal,"onUpdate:open":e[3]||(e[3]=f=>o.showImportModal=f),name:n.t("dav","Import calendar event")},{default:i(()=>[u("div",Ue,[u("p",null,m(n.t("dav","Uploading a new event will overwrite the existing one.")),1),u("input",{ref:"event-file",disabled:o.uploading,type:"file",accept:".ics,text/calendar",class:"import-event-modal__file-picker",onChange:e[1]||(e[1]=(...f)=>s.selectFile&&s.selectFile(...f))},null,40,He),u("div",Le,[r(b,{disabled:o.uploading||!o.selectedFile,variant:"primary",onClick:e[2]||(e[2]=f=>s.uploadCustomEvent())},{icon:i(()=>[r(D,{size:20})]),default:i(()=>[g(" "+m(n.t("dav","Upload event")),1)]),_:1},8,["disabled"])])])]),_:1},8,["open","name"])])}const $e=w(Fe,[["render",Re],["__scopeId","data-v-88fee128"]]),Oe=U({__name:"ExampleContentSettingsSection",setup(a){const e=k("dav","contactsEnabled"),t=k("dav","calendarEnabled");return(n,o)=>(l(),y(x(q),{id:"example-content",name:x(c)("dav","Example content"),description:x(c)("dav","Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content.")},{default:i(()=>[x(e)?(l(),y(ye,{key:0})):h("",!0),x(t)?(l(),y($e,{key:1})):h("",!0)]),_:1},8,["name","description"]))}}),Ze=Z(Oe);Ze.mount("#settings-example-content"); //# sourceMappingURL=dav-settings-admin-example-content.mjs.map diff --git a/dist/dav-settings-personal-availability.css b/dist/dav-settings-personal-availability.css index f38833e0ff130..52b72af4bce60 100644 --- a/dist/dav-settings-personal-availability.css +++ b/dist/dav-settings-personal-availability.css @@ -19,7 +19,7 @@ @import './common-NcDateTime-b9UhLDij.chunk.css'; @import './common-NcAvatar-M3-CbKbq-DTVmI7NO.chunk.css'; @import './common-NcEmptyContent-CGAPqk4S-Don1d5Bd.chunk.css'; -@import './common-NcTextArea-Dxzj4zdb-DIo27L88.chunk.css'; +@import './common-NcTextArea-Dxzj4zdb-B-B2llha.chunk.css'; @import './common-NcActionSeparator-Ct2RnclR-pXJ_-D_I.chunk.css'; @import './common-NcCheckboxRadioSwitch-D8Dfv4iw-CPGkDj-p.chunk.css'; @import './common-Plus-Som-mR4B.chunk.css'; diff --git a/dist/dav-settings-personal-availability.mjs b/dist/dav-settings-personal-availability.mjs index d73170cc814c5..31fc9ac4235c4 100644 --- a/dist/dav-settings-personal-availability.mjs +++ b/dist/dav-settings-personal-availability.mjs @@ -1,4 +1,4 @@ -import{r as G,o as B,f as H,g as Q,k as v,y as dt,t as et,w as st,j as vt,N as Se,F as Ft,B as Gt,c as Pt,h as ue,b as de,l as St,D as Ae,u as _,e as ge}from"./Web-BwmPK40i.chunk.mjs";import{_ as ce,l as jt,g as De}from"./public-C1mLBHT3.chunk.mjs";import{t as D}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import{N as Kt}from"./ContentCopy-BF1gBM5z.chunk.mjs";import{d as _e,c as mt,a as Lt,g as Ee,h as be,o as Ue,e as Ce}from"./index-B-dGqfIG.chunk.mjs";import{c as ft}from"./index-BLNGy7h5.chunk.mjs";import{d as zt,a as Ot}from"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import{S as Ye}from"./ShareType-suoNfd7y.chunk.mjs";import{N as Ht}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import{N as he}from"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import{N as ve,a as Oe}from"./NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs";import{_ as we}from"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";import{l as W}from"./logger-z78wFmcz.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import{k as Me}from"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";/* empty css */import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import{D as Ne}from"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import{N as xe}from"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import{P as Ie}from"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import"./index-BW4M2n71.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import"./mdi-Lt-19ASw.chunk.mjs";import"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./index-xEyWukTf.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import{z as ke,_ as Be}from"./index-BYnFfAmz.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";function qt(r){const t=r.getFullYear(),e=(r.getMonth()+1).toString().padStart(2,"0"),s=r.getDate().toString().padStart(2,"0");return`${t}-${e}-${s}`}const Pe="_absenceForm_1i2bj_2",Le="_absenceForm__pickerContainer_1i2bj_8",ze="_absenceForm__picker_1i2bj_8",Ve="_absenceForm__longMessage_1i2bj_22",je="_absenceForm__longMessageContainer_1i2bj_26",He="_absenceForm__actions_1i2bj_33",Re={absenceForm:Pe,absenceForm__pickerContainer:Le,absenceForm__picker:ze,absenceForm__longMessage:Ve,absenceForm__longMessageContainer:je,absenceForm__actions:He},We={name:"AbsenceForm",components:{NcButton:Ht,NcTextField:we,NcTextArea:Oe,NcDateTimePickerNative:he,NcSelectUsers:ve},setup(){return{t:D}},data(){const{firstDay:r,lastDay:t,status:e,message:s,replacementUserId:a,replacementUserDisplayName:i}=jt("dav","absence",{});return{loading:!1,status:e??"",message:s??"",firstDay:r?new Date(r):new Date,lastDay:t?new Date(t):null,replacementUserId:a,replacementUser:a?{user:a,displayName:i}:null,searchLoading:!1,options:[]}},computed:{valid(){const r=new Date(this.firstDay?.getTime()),t=new Date(this.lastDay?.getTime());return r?.setHours(0,0,0,0),t?.setHours(0,0,0,0),!!this.firstDay&&!!this.lastDay&&!!this.status&&!!this.message&&t>=r}},methods:{resetForm(){this.status="",this.message="",this.firstDay=new Date,this.lastDay=null},formatForMultiselect(r){return{user:r.uuid||r.value.shareWith,displayName:r.name||r.label,subtitle:r.dsc|""}},async asyncFind(r){this.searchLoading=!0,await this.debounceGetSuggestions(r.trim())},async getSuggestions(r){const t=[Ye.User];let e;try{e=await ft.get(mt("apps/files_sharing/api/v1/sharees"),{params:{format:"json",itemType:"file",search:r,shareType:t}})}catch(d){W.error("Error fetching suggestions",{error:d});return}const s=e.data.ocs.data,a=e.data.ocs.data.exact;s.exact=[];const i=a.users,o=s.users;W.info("AbsenceForm raw suggestions",{rawExactSuggestions:i,rawSuggestions:o});const n=i.map(d=>this.formatForMultiselect(d)),l=o.map(d=>this.formatForMultiselect(d)),u=n.concat(l),c=u.reduce((d,m)=>(m.displayName&&(d[m.displayName]||(d[m.displayName]=0),d[m.displayName]++),d),{});this.options=u.map(d=>c[d.displayName]>1&&!d.desc?{...d,desc:d.shareWithDisplayNameUnique}:d),this.searchLoading=!1,W.info("AbsenseForm suggestions",{options:this.options})},debounceGetSuggestions:_e(function(...r){this.getSuggestions(...r)},300),async saveForm(){if(this.valid){this.loading=!0;try{await ft.post(mt("/apps/dav/api/v1/outOfOffice/{userId}",{userId:Lt().uid}),{firstDay:qt(this.firstDay),lastDay:qt(this.lastDay),status:this.status,message:this.message,replacementUserId:this.replacementUser?.user??null}),zt(D("dav","Absence saved"))}catch(r){Ot(D("dav","Failed to save your absence settings")),W.error("Could not save absence",{error:r})}finally{this.loading=!1}}},async clearAbsence(){this.loading=!0;try{await ft.delete(mt("/apps/dav/api/v1/outOfOffice/{userId}",{userId:Lt().uid})),this.resetForm(),zt(D("dav","Absence cleared"))}catch(r){Ot(D("dav","Failed to clear your absence settings")),W.error("Could not clear absence",{error:r})}finally{this.loading=!1}}}},Fe={for:"replacement-search-input"};function Ge(r,t,e,s,a,i){const o=G("NcDateTimePickerNative"),n=G("NcSelectUsers"),l=G("NcTextField"),u=G("NcTextArea"),c=G("NcButton");return B(),H("form",{class:dt(r.$style.absenceForm),onSubmit:t[5]||(t[5]=Se((...d)=>i.saveForm&&i.saveForm(...d),["prevent"]))},[Q("div",{class:dt(r.$style.absenceForm__pickerContainer)},[v(o,{id:"absence-first-day",modelValue:a.firstDay,"onUpdate:modelValue":t[0]||(t[0]=d=>a.firstDay=d),class:dt(r.$style.absenceForm__picker),label:s.t("dav","First day"),required:""},null,8,["modelValue","class","label"]),v(o,{id:"absence-last-day",modelValue:a.lastDay,"onUpdate:modelValue":t[1]||(t[1]=d=>a.lastDay=d),class:dt(r.$style.absenceForm__picker),label:s.t("dav","Last day (inclusive)"),required:""},null,8,["modelValue","class","label"])],2),Q("label",Fe,et(s.t("dav","Out of office replacement (optional)")),1),v(n,{modelValue:a.replacementUser,"onUpdate:modelValue":t[2]||(t[2]=d=>a.replacementUser=d),inputId:"replacement-search-input",loading:a.searchLoading,placeholder:s.t("dav","Name of the replacement"),options:a.options,onSearch:i.asyncFind},null,8,["modelValue","loading","placeholder","options","onSearch"]),v(l,{modelValue:a.status,"onUpdate:modelValue":t[3]||(t[3]=d=>a.status=d),label:s.t("dav","Short absence status"),required:!0},null,8,["modelValue","label"]),Q("div",{class:dt(r.$style.absenceForm__longMessageContainer)},[v(u,{modelValue:a.message,"onUpdate:modelValue":t[4]||(t[4]=d=>a.message=d),inputClass:r.$style.absenceForm__longMessage,label:s.t("dav","Long absence Message"),required:"",resize:"none",rows:"6"},null,8,["modelValue","inputClass","label"])],2),Q("div",{class:dt(r.$style.absenceForm__actions)},[v(c,{disabled:a.loading||!i.valid,variant:"primary",type:"submit"},{default:st(()=>[vt(et(s.t("dav","Save")),1)]),_:1},8,["disabled"]),v(c,{disabled:a.loading||!i.valid,variant:"error",onClick:i.clearAbsence},{default:st(()=>[vt(et(s.t("dav","Disable absence")),1)]),_:1},8,["disabled","onClick"])],2)],34)}const Ke={$style:Re},qe=ce(We,[["render",Ge],["__cssModules",Ke]]);var at={},ct={},Zt;function Ze(){return Zt||(Zt=1,Object.defineProperty(ct,"__esModule",{value:!0}),ct.zonesMap=ct.defaultStart=void 0,ct.defaultStart="19700101T000000",ct.zonesMap=new Map([["Africa/Abidjan",{s:{f:"+0000",n:"GMT"}}],["Africa/Accra",{s:{f:"+0000",n:"GMT"}}],["Africa/Addis_Ababa",{s:{f:"+0300",n:"EAT"}}],["Africa/Algiers",{s:{f:"+0100",n:"CET"}}],["Africa/Asmara",{s:{f:"+0300",n:"EAT"}}],["Africa/Bamako",{s:{f:"+0000",n:"GMT"}}],["Africa/Bangui",{s:{f:"+0100",n:"WAT"}}],["Africa/Banjul",{s:{f:"+0000",n:"GMT"}}],["Africa/Bissau",{s:{f:"+0000",n:"GMT"}}],["Africa/Blantyre",{s:{f:"+0200",n:"CAT"}}],["Africa/Brazzaville",{s:{f:"+0100",n:"WAT"}}],["Africa/Bujumbura",{s:{f:"+0200",n:"CAT"}}],["Africa/Cairo",{s:{f:"+0200",n:"EET"}}],["Africa/Casablanca",{s:{f:"+0100",n:"+01"}}],["Africa/Ceuta",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Africa/Conakry",{s:{f:"+0000",n:"GMT"}}],["Africa/Dakar",{s:{f:"+0000",n:"GMT"}}],["Africa/Dar_es_Salaam",{s:{f:"+0300",n:"EAT"}}],["Africa/Djibouti",{s:{f:"+0300",n:"EAT"}}],["Africa/Douala",{s:{f:"+0100",n:"WAT"}}],["Africa/El_Aaiun",{s:{f:"+0100",n:"+01"}}],["Africa/Freetown",{s:{f:"+0000",n:"GMT"}}],["Africa/Gaborone",{s:{f:"+0200",n:"CAT"}}],["Africa/Harare",{s:{f:"+0200",n:"CAT"}}],["Africa/Johannesburg",{s:{f:"+0200",n:"SAST"}}],["Africa/Juba",{s:{f:"+0300",n:"EAT"}}],["Africa/Kampala",{s:{f:"+0300",n:"EAT"}}],["Africa/Khartoum",{s:{f:"+0200",n:"CAT"}}],["Africa/Kigali",{s:{f:"+0200",n:"CAT"}}],["Africa/Kinshasa",{s:{f:"+0100",n:"WAT"}}],["Africa/Lagos",{s:{f:"+0100",n:"WAT"}}],["Africa/Libreville",{s:{f:"+0100",n:"WAT"}}],["Africa/Lome",{s:{f:"+0000",n:"GMT"}}],["Africa/Luanda",{s:{f:"+0100",n:"WAT"}}],["Africa/Lubumbashi",{s:{f:"+0200",n:"CAT"}}],["Africa/Lusaka",{s:{f:"+0200",n:"CAT"}}],["Africa/Malabo",{s:{f:"+0100",n:"WAT"}}],["Africa/Maputo",{s:{f:"+0200",n:"CAT"}}],["Africa/Maseru",{s:{f:"+0200",n:"SAST"}}],["Africa/Mbabane",{s:{f:"+0200",n:"SAST"}}],["Africa/Mogadishu",{s:{f:"+0300",n:"EAT"}}],["Africa/Monrovia",{s:{f:"+0000",n:"GMT"}}],["Africa/Nairobi",{s:{f:"+0300",n:"EAT"}}],["Africa/Ndjamena",{s:{f:"+0100",n:"WAT"}}],["Africa/Niamey",{s:{f:"+0100",n:"WAT"}}],["Africa/Nouakchott",{s:{f:"+0000",n:"GMT"}}],["Africa/Ouagadougou",{s:{f:"+0000",n:"GMT"}}],["Africa/Porto-Novo",{s:{f:"+0100",n:"WAT"}}],["Africa/Sao_Tome",{s:{f:"+0100",n:"WAT"}}],["Africa/Tripoli",{s:{f:"+0200",n:"EET"}}],["Africa/Tunis",{s:{f:"+0100",n:"CET"}}],["Africa/Windhoek",{s:{f:"+0200",n:"CAT"}}],["America/Adak",{s:{f:"-0900",t:"-1000",n:"HST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-1000",t:"-0900",n:"HDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Anchorage",{s:{f:"-0800",t:"-0900",n:"AKST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0900",t:"-0800",n:"AKDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Anguilla",{s:{f:"-0400",n:"AST"}}],["America/Antigua",{s:{f:"-0400",n:"AST"}}],["America/Araguaina",{s:{f:"-0300",n:"-03"}}],["America/Argentina/Buenos_Aires",{s:{f:"-0300",n:"-03"}}],["America/Argentina/Catamarca",{s:{f:"-0300",n:"-03"}}],["America/Argentina/Cordoba",{s:{f:"-0300",n:"-03"}}],["America/Argentina/Jujuy",{s:{f:"-0300",n:"-03"}}],["America/Argentina/La_Rioja",{s:{f:"-0300",n:"-03"}}],["America/Argentina/Mendoza",{s:{f:"-0300",n:"-03"}}],["America/Argentina/Rio_Gallegos",{s:{f:"-0300",n:"-03"}}],["America/Argentina/Salta",{s:{f:"-0300",n:"-03"}}],["America/Argentina/San_Juan",{s:{f:"-0300",n:"-03"}}],["America/Argentina/San_Luis",{s:{f:"-0300",n:"-03"}}],["America/Argentina/Tucuman",{s:{f:"-0300",n:"-03"}}],["America/Argentina/Ushuaia",{s:{f:"-0300",n:"-03"}}],["America/Aruba",{s:{f:"-0400",n:"AST"}}],["America/Asuncion",{s:{f:"-0300",t:"-0400",n:"-04",s:"19700322T000000",r:{m:3,d:"4SU"}},d:{f:"-0400",t:"-0300",n:"-03",s:"19701004T000000",r:{m:10,d:"1SU"}}}],["America/Atikokan",{s:{f:"-0500",n:"EST"}}],["America/Bahia_Banderas",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700405T020000",r:{m:4,d:"1SU"}}}],["America/Bahia",{s:{f:"-0300",n:"-03"}}],["America/Barbados",{s:{f:"-0400",n:"AST"}}],["America/Belem",{s:{f:"-0300",n:"-03"}}],["America/Belize",{s:{f:"-0600",n:"CST"}}],["America/Blanc-Sablon",{s:{f:"-0400",n:"AST"}}],["America/Boa_Vista",{s:{f:"-0400",n:"-04"}}],["America/Bogota",{s:{f:"-0500",n:"-05"}}],["America/Boise",{s:{f:"-0600",t:"-0700",n:"MST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0700",t:"-0600",n:"MDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Cambridge_Bay",{s:{f:"-0600",t:"-0700",n:"MST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0700",t:"-0600",n:"MDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Campo_Grande",{s:{f:"-0400",n:"-04",s:"19700215T000000",r:{m:2,d:"3SU"}},d:{f:"-0400",t:"-0300",n:"-03",s:"19701101T000000",r:{m:11,d:"1SU"}}}],["America/Cancun",{s:{f:"-0500",n:"EST"}}],["America/Caracas",{s:{f:"-0400",n:"-04"}}],["America/Cayenne",{s:{f:"-0300",n:"-03"}}],["America/Cayman",{s:{f:"-0500",n:"EST"}}],["America/Chicago",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Chihuahua",{s:{f:"-0600",t:"-0700",n:"MST",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"-0700",t:"-0600",n:"MDT",s:"19700405T020000",r:{m:4,d:"1SU"}}}],["America/Costa_Rica",{s:{f:"-0600",n:"CST"}}],["America/Creston",{s:{f:"-0700",n:"MST"}}],["America/Cuiaba",{s:{f:"-0400",n:"-04",s:"19700215T000000",r:{m:2,d:"3SU"}},d:{f:"-0400",t:"-0300",n:"-03",s:"19701101T000000",r:{m:11,d:"1SU"}}}],["America/Curacao",{s:{f:"-0400",n:"AST"}}],["America/Danmarkshavn",{s:{f:"+0000",n:"GMT"}}],["America/Dawson_Creek",{s:{f:"-0700",n:"MST"}}],["America/Dawson",{s:{f:"-0700",t:"-0800",n:"PST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0800",t:"-0700",n:"PDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Denver",{s:{f:"-0600",t:"-0700",n:"MST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0700",t:"-0600",n:"MDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Detroit",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Dominica",{s:{f:"-0400",n:"AST"}}],["America/Edmonton",{s:{f:"-0600",t:"-0700",n:"MST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0700",t:"-0600",n:"MDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Eirunepe",{s:{f:"-0500",n:"-05"}}],["America/El_Salvador",{s:{f:"-0600",n:"CST"}}],["America/Fort_Nelson",{s:{f:"-0700",n:"MST"}}],["America/Fortaleza",{s:{f:"-0300",n:"-03"}}],["America/Glace_Bay",{s:{f:"-0300",t:"-0400",n:"AST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0400",t:"-0300",n:"ADT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Godthab",{s:{f:"-0200",t:"-0300",n:"-03",s:"19701024T230000",r:{m:10,d:"-1SA"}},d:{f:"-0300",t:"-0200",n:"-02",s:"19700328T220000",r:{m:3,d:"-1SA"}}}],["America/Goose_Bay",{s:{f:"-0300",t:"-0400",n:"AST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0400",t:"-0300",n:"ADT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Grand_Turk",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Grenada",{s:{f:"-0400",n:"AST"}}],["America/Guadeloupe",{s:{f:"-0400",n:"AST"}}],["America/Guatemala",{s:{f:"-0600",n:"CST"}}],["America/Guayaquil",{s:{f:"-0500",n:"-05"}}],["America/Guyana",{s:{f:"-0400",n:"-04"}}],["America/Halifax",{s:{f:"-0300",t:"-0400",n:"AST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0400",t:"-0300",n:"ADT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Havana",{s:{f:"-0400",t:"-0500",n:"CST",s:"19701101T010000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"CDT",s:"19700308T000000",r:{m:3,d:"2SU"}}}],["America/Hermosillo",{s:{f:"-0700",n:"MST"}}],["America/Indiana/Indianapolis",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Indiana/Knox",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Indiana/Marengo",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Indiana/Petersburg",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Indiana/Tell_City",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Indiana/Vevay",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Indiana/Vincennes",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Indiana/Winamac",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Inuvik",{s:{f:"-0600",t:"-0700",n:"MST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0700",t:"-0600",n:"MDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Iqaluit",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Jamaica",{s:{f:"-0500",n:"EST"}}],["America/Juneau",{s:{f:"-0800",t:"-0900",n:"AKST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0900",t:"-0800",n:"AKDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Kentucky/Louisville",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Kentucky/Monticello",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Kralendijk",{s:{f:"-0400",n:"AST"}}],["America/La_Paz",{s:{f:"-0400",n:"-04"}}],["America/Lima",{s:{f:"-0500",n:"-05"}}],["America/Los_Angeles",{s:{f:"-0700",t:"-0800",n:"PST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0800",t:"-0700",n:"PDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Lower_Princes",{s:{f:"-0400",n:"AST"}}],["America/Maceio",{s:{f:"-0300",n:"-03"}}],["America/Managua",{s:{f:"-0600",n:"CST"}}],["America/Manaus",{s:{f:"-0400",n:"-04"}}],["America/Marigot",{s:{f:"-0400",n:"AST"}}],["America/Martinique",{s:{f:"-0400",n:"AST"}}],["America/Matamoros",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Mazatlan",{s:{f:"-0600",t:"-0700",n:"MST",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"-0700",t:"-0600",n:"MDT",s:"19700405T020000",r:{m:4,d:"1SU"}}}],["America/Menominee",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Merida",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700405T020000",r:{m:4,d:"1SU"}}}],["America/Metlakatla",{s:{f:"-0800",t:"-0900",n:"AKST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0900",t:"-0800",n:"AKDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Mexico_City",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700405T020000",r:{m:4,d:"1SU"}}}],["America/Miquelon",{s:{f:"-0200",t:"-0300",n:"-03",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0300",t:"-0200",n:"-02",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Moncton",{s:{f:"-0300",t:"-0400",n:"AST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0400",t:"-0300",n:"ADT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Monterrey",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700405T020000",r:{m:4,d:"1SU"}}}],["America/Montevideo",{s:{f:"-0300",n:"-03"}}],["America/Montserrat",{s:{f:"-0400",n:"AST"}}],["America/Nassau",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/New_York",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Nipigon",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Nome",{s:{f:"-0800",t:"-0900",n:"AKST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0900",t:"-0800",n:"AKDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Noronha",{s:{f:"-0200",n:"-02"}}],["America/North_Dakota/Beulah",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/North_Dakota/Center",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/North_Dakota/New_Salem",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Ojinaga",{s:{f:"-0600",t:"-0700",n:"MST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0700",t:"-0600",n:"MDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Panama",{s:{f:"-0500",n:"EST"}}],["America/Pangnirtung",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Paramaribo",{s:{f:"-0300",n:"-03"}}],["America/Phoenix",{s:{f:"-0700",n:"MST"}}],["America/Port_of_Spain",{s:{f:"-0400",n:"AST"}}],["America/Port-au-Prince",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Porto_Velho",{s:{f:"-0400",n:"-04"}}],["America/Puerto_Rico",{s:{f:"-0400",n:"AST"}}],["America/Punta_Arenas",{s:{f:"-0300",n:"-03"}}],["America/Rainy_River",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Rankin_Inlet",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Recife",{s:{f:"-0300",n:"-03"}}],["America/Regina",{s:{f:"-0600",n:"CST"}}],["America/Resolute",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Rio_Branco",{s:{f:"-0500",n:"-05"}}],["America/Santarem",{s:{f:"-0300",n:"-03"}}],["America/Santiago",{s:{f:"-0300",t:"-0400",n:"-04",s:"19700405T000000",r:{m:4,d:"1SU"}},d:{f:"-0400",t:"-0300",n:"-03",s:"19700906T000000",r:{m:9,d:"1SU"}}}],["America/Santo_Domingo",{s:{f:"-0400",n:"AST"}}],["America/Sao_Paulo",{s:{f:"-0300",n:"-03",s:"19700215T000000",r:{m:2,d:"3SU"}},d:{f:"-0300",t:"-0200",n:"-02",s:"19701101T000000",r:{m:11,d:"1SU"}}}],["America/Scoresbysund",{s:{f:"+0000",t:"-0100",n:"-01",s:"19701025T010000",r:{m:10,d:"-1SU"}},d:{f:"-0100",t:"+0000",n:"+00",s:"19700329T000000",r:{m:3,d:"-1SU"}}}],["America/Sitka",{s:{f:"-0800",t:"-0900",n:"AKST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0900",t:"-0800",n:"AKDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/St_Barthelemy",{s:{f:"-0400",n:"AST"}}],["America/St_Johns",{s:{f:"-0230",t:"-0330",n:"NST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0330",t:"-0230",n:"NDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/St_Kitts",{s:{f:"-0400",n:"AST"}}],["America/St_Lucia",{s:{f:"-0400",n:"AST"}}],["America/St_Thomas",{s:{f:"-0400",n:"AST"}}],["America/St_Vincent",{s:{f:"-0400",n:"AST"}}],["America/Swift_Current",{s:{f:"-0600",n:"CST"}}],["America/Tegucigalpa",{s:{f:"-0600",n:"CST"}}],["America/Thule",{s:{f:"-0300",t:"-0400",n:"AST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0400",t:"-0300",n:"ADT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Thunder_Bay",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Tijuana",{s:{f:"-0700",t:"-0800",n:"PST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0800",t:"-0700",n:"PDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Toronto",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Tortola",{s:{f:"-0400",n:"AST"}}],["America/Vancouver",{s:{f:"-0700",t:"-0800",n:"PST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0800",t:"-0700",n:"PDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Whitehorse",{s:{f:"-0700",t:"-0800",n:"PST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0800",t:"-0700",n:"PDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Winnipeg",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Yakutat",{s:{f:"-0800",t:"-0900",n:"AKST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0900",t:"-0800",n:"AKDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Yellowknife",{s:{f:"-0600",t:"-0700",n:"MST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0700",t:"-0600",n:"MDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["Antarctica/Casey",{s:{f:"+0800",n:"+08"}}],["Antarctica/Davis",{s:{f:"+0700",n:"+07"}}],["Antarctica/DumontDUrville",{s:{f:"+1000",n:"+10"}}],["Antarctica/Macquarie",{s:{f:"+1100",n:"+11"}}],["Antarctica/Mawson",{s:{f:"+0500",n:"+05"}}],["Antarctica/McMurdo",{s:{f:"+1300",t:"+1200",n:"NZST",s:"19700405T030000",r:{m:4,d:"1SU"}},d:{f:"+1200",t:"+1300",n:"NZDT",s:"19700927T020000",r:{m:9,d:"-1SU"}}}],["Antarctica/Palmer",{s:{f:"-0300",n:"-03"}}],["Antarctica/Rothera",{s:{f:"-0300",n:"-03"}}],["Antarctica/Syowa",{s:{f:"+0300",n:"+03"}}],["Antarctica/Troll",{s:{f:"+0200",t:"+0000",n:"+00",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0000",t:"+0200",n:"+02",s:"19700329T010000",r:{m:3,d:"-1SU"}}}],["Antarctica/Vostok",{s:{f:"+0600",n:"+06"}}],["Arctic/Longyearbyen",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Asia/Aden",{s:{f:"+0300",n:"+03"}}],["Asia/Almaty",{s:{f:"+0600",n:"+06"}}],["Asia/Amman",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701030T010000",r:{m:10,d:"-1FR"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700326T235959",r:{m:3,d:"-1TH"}}}],["Asia/Anadyr",{s:{f:"+1200",n:"+12"}}],["Asia/Aqtau",{s:{f:"+0500",n:"+05"}}],["Asia/Aqtobe",{s:{f:"+0500",n:"+05"}}],["Asia/Ashgabat",{s:{f:"+0500",n:"+05"}}],["Asia/Atyrau",{s:{f:"+0500",n:"+05"}}],["Asia/Baghdad",{s:{f:"+0300",n:"+03"}}],["Asia/Bahrain",{s:{f:"+0300",n:"+03"}}],["Asia/Baku",{s:{f:"+0400",n:"+04"}}],["Asia/Bangkok",{s:{f:"+0700",n:"+07"}}],["Asia/Barnaul",{s:{f:"+0700",n:"+07"}}],["Asia/Beirut",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T000000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T000000",r:{m:3,d:"-1SU"}}}],["Asia/Bishkek",{s:{f:"+0600",n:"+06"}}],["Asia/Brunei",{s:{f:"+0800",n:"+08"}}],["Asia/Chita",{s:{f:"+0900",n:"+09"}}],["Asia/Choibalsan",{s:{f:"+0800",n:"+08"}}],["Asia/Colombo",{s:{f:"+0530",n:"+0530"}}],["Asia/Damascus",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701030T000000",r:{m:10,d:"-1FR"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700327T000000",r:{m:3,d:"-1FR"}}}],["Asia/Dhaka",{s:{f:"+0600",n:"+06"}}],["Asia/Dili",{s:{f:"+0900",n:"+09"}}],["Asia/Dubai",{s:{f:"+0400",n:"+04"}}],["Asia/Dushanbe",{s:{f:"+0500",n:"+05"}}],["Asia/Famagusta",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Asia/Gaza",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701031T010000",r:{m:10,d:"-1SA"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700328T010000",r:{m:3,d:"4SA"}}}],["Asia/Hebron",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701031T010000",r:{m:10,d:"-1SA"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700328T010000",r:{m:3,d:"4SA"}}}],["Asia/Ho_Chi_Minh",{s:{f:"+0700",n:"+07"}}],["Asia/Hong_Kong",{s:{f:"+0800",n:"HKT"}}],["Asia/Hovd",{s:{f:"+0700",n:"+07"}}],["Asia/Irkutsk",{s:{f:"+0800",n:"+08"}}],["Asia/Istanbul",{s:{f:"+0300",n:"+03"}}],["Asia/Jakarta",{s:{f:"+0700",n:"WIB"}}],["Asia/Jayapura",{s:{f:"+0900",n:"WIT"}}],["Asia/Jerusalem",{s:{f:"+0300",t:"+0200",n:"IST",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"IDT",s:"19700327T020000",r:{m:3,d:"-1FR"}}}],["Asia/Kabul",{s:{f:"+0430",n:"+0430"}}],["Asia/Kamchatka",{s:{f:"+1200",n:"+12"}}],["Asia/Karachi",{s:{f:"+0500",n:"PKT"}}],["Asia/Kathmandu",{s:{f:"+0545",n:"+0545"}}],["Asia/Khandyga",{s:{f:"+0900",n:"+09"}}],["Asia/Kolkata",{s:{f:"+0530",n:"IST"}}],["Asia/Krasnoyarsk",{s:{f:"+0700",n:"+07"}}],["Asia/Kuala_Lumpur",{s:{f:"+0800",n:"+08"}}],["Asia/Kuching",{s:{f:"+0800",n:"+08"}}],["Asia/Kuwait",{s:{f:"+0300",n:"+03"}}],["Asia/Macau",{s:{f:"+0800",n:"CST"}}],["Asia/Magadan",{s:{f:"+1100",n:"+11"}}],["Asia/Makassar",{s:{f:"+0800",n:"WITA"}}],["Asia/Manila",{s:{f:"+0800",n:"PST"}}],["Asia/Muscat",{s:{f:"+0400",n:"+04"}}],["Asia/Nicosia",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Asia/Novokuznetsk",{s:{f:"+0700",n:"+07"}}],["Asia/Novosibirsk",{s:{f:"+0700",n:"+07"}}],["Asia/Omsk",{s:{f:"+0600",n:"+06"}}],["Asia/Oral",{s:{f:"+0500",n:"+05"}}],["Asia/Phnom_Penh",{s:{f:"+0700",n:"+07"}}],["Asia/Pontianak",{s:{f:"+0700",n:"WIB"}}],["Asia/Pyongyang",{s:{f:"+0900",n:"KST"}}],["Asia/Qatar",{s:{f:"+0300",n:"+03"}}],["Asia/Qyzylorda",{s:{f:"+0600",n:"+06"}}],["Asia/Riyadh",{s:{f:"+0300",n:"+03"}}],["Asia/Sakhalin",{s:{f:"+1100",n:"+11"}}],["Asia/Samarkand",{s:{f:"+0500",n:"+05"}}],["Asia/Seoul",{s:{f:"+0900",n:"KST"}}],["Asia/Shanghai",{s:{f:"+0800",n:"CST"}}],["Asia/Singapore",{s:{f:"+0800",n:"+08"}}],["Asia/Srednekolymsk",{s:{f:"+1100",n:"+11"}}],["Asia/Taipei",{s:{f:"+0800",n:"CST"}}],["Asia/Tashkent",{s:{f:"+0500",n:"+05"}}],["Asia/Tbilisi",{s:{f:"+0400",n:"+04"}}],["Asia/Tehran",{s:{f:"+0430",t:"+0330",n:"+0330",s:"19700921T000000",r:{m:9,d:"3SU"}},d:{f:"+0330",t:"+0430",n:"+0430",s:"19700321T000000",r:{m:3,d:"3SU"}}}],["Asia/Thimphu",{s:{f:"+0600",n:"+06"}}],["Asia/Tokyo",{s:{f:"+0900",n:"JST"}}],["Asia/Tomsk",{s:{f:"+0700",n:"+07"}}],["Asia/Ulaanbaatar",{s:{f:"+0800",n:"+08"}}],["Asia/Urumqi",{s:{f:"+0600",n:"+06"}}],["Asia/Ust-Nera",{s:{f:"+1000",n:"+10"}}],["Asia/Vientiane",{s:{f:"+0700",n:"+07"}}],["Asia/Vladivostok",{s:{f:"+1000",n:"+10"}}],["Asia/Yakutsk",{s:{f:"+0900",n:"+09"}}],["Asia/Yangon",{s:{f:"+0630",n:"+0630"}}],["Asia/Yekaterinburg",{s:{f:"+0500",n:"+05"}}],["Asia/Yerevan",{s:{f:"+0400",n:"+04"}}],["Atlantic/Azores",{s:{f:"+0000",t:"-0100",n:"-01",s:"19701025T010000",r:{m:10,d:"-1SU"}},d:{f:"-0100",t:"+0000",n:"+00",s:"19700329T000000",r:{m:3,d:"-1SU"}}}],["Atlantic/Bermuda",{s:{f:"-0300",t:"-0400",n:"AST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0400",t:"-0300",n:"ADT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["Atlantic/Canary",{s:{f:"+0100",t:"+0000",n:"WET",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"+0000",t:"+0100",n:"WEST",s:"19700329T010000",r:{m:3,d:"-1SU"}}}],["Atlantic/Cape_Verde",{s:{f:"-0100",n:"-01"}}],["Atlantic/Faroe",{s:{f:"+0100",t:"+0000",n:"WET",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"+0000",t:"+0100",n:"WEST",s:"19700329T010000",r:{m:3,d:"-1SU"}}}],["Atlantic/Madeira",{s:{f:"+0100",t:"+0000",n:"WET",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"+0000",t:"+0100",n:"WEST",s:"19700329T010000",r:{m:3,d:"-1SU"}}}],["Atlantic/Reykjavik",{s:{f:"+0000",n:"GMT"}}],["Atlantic/South_Georgia",{s:{f:"-0200",n:"-02"}}],["Atlantic/St_Helena",{s:{f:"+0000",n:"GMT"}}],["Atlantic/Stanley",{s:{f:"-0300",n:"-03"}}],["Australia/Adelaide",{s:{f:"+1030",t:"+0930",n:"ACST",s:"19700405T030000",r:{m:4,d:"1SU"}},d:{f:"+0930",t:"+1030",n:"ACDT",s:"19701004T020000",r:{m:10,d:"1SU"}}}],["Australia/Brisbane",{s:{f:"+1000",n:"AEST"}}],["Australia/Broken_Hill",{s:{f:"+1030",t:"+0930",n:"ACST",s:"19700405T030000",r:{m:4,d:"1SU"}},d:{f:"+0930",t:"+1030",n:"ACDT",s:"19701004T020000",r:{m:10,d:"1SU"}}}],["Australia/Currie",{s:{f:"+1100",t:"+1000",n:"AEST",s:"19700405T030000",r:{m:4,d:"1SU"}},d:{f:"+1000",t:"+1100",n:"AEDT",s:"19701004T020000",r:{m:10,d:"1SU"}}}],["Australia/Darwin",{s:{f:"+0930",n:"ACST"}}],["Australia/Eucla",{s:{f:"+0845",n:"+0845"}}],["Australia/Hobart",{s:{f:"+1100",t:"+1000",n:"AEST",s:"19700405T030000",r:{m:4,d:"1SU"}},d:{f:"+1000",t:"+1100",n:"AEDT",s:"19701004T020000",r:{m:10,d:"1SU"}}}],["Australia/Lindeman",{s:{f:"+1000",n:"AEST"}}],["Australia/Lord_Howe",{s:{f:"+1100",t:"+1030",n:"+1030",s:"19700405T020000",r:{m:4,d:"1SU"}},d:{f:"+1030",t:"+1100",n:"+11",s:"19701004T020000",r:{m:10,d:"1SU"}}}],["Australia/Melbourne",{s:{f:"+1100",t:"+1000",n:"AEST",s:"19700405T030000",r:{m:4,d:"1SU"}},d:{f:"+1000",t:"+1100",n:"AEDT",s:"19701004T020000",r:{m:10,d:"1SU"}}}],["Australia/Perth",{s:{f:"+0800",n:"AWST"}}],["Australia/Sydney",{s:{f:"+1100",t:"+1000",n:"AEST",s:"19700405T030000",r:{m:4,d:"1SU"}},d:{f:"+1000",t:"+1100",n:"AEDT",s:"19701004T020000",r:{m:10,d:"1SU"}}}],["Etc/GMT-0",{s:{f:"+0000",n:"GMT"}}],["Etc/GMT-1",{s:{f:"-0100",n:"-01"}}],["Etc/GMT-10",{s:{f:"-1000",n:"-10"}}],["Etc/GMT-11",{s:{f:"-1100",n:"-11"}}],["Etc/GMT-12",{s:{f:"-1200",n:"-12"}}],["Etc/GMT-2",{s:{f:"-0200",n:"-02"}}],["Etc/GMT-3",{s:{f:"-0300",n:"-03"}}],["Etc/GMT-4",{s:{f:"-0400",n:"-04"}}],["Etc/GMT-5",{s:{f:"-0500",n:"-05"}}],["Etc/GMT-6",{s:{f:"-0600",n:"-06"}}],["Etc/GMT-7",{s:{f:"-0700",n:"-07"}}],["Etc/GMT-8",{s:{f:"-0800",n:"-08"}}],["Etc/GMT-9",{s:{f:"-0900",n:"-09"}}],["Etc/GMT",{s:{f:"+0000",n:"GMT"}}],["Etc/GMT+0",{s:{f:"+0000",n:"GMT"}}],["Etc/GMT+1",{s:{f:"+0100",n:"+01"}}],["Etc/GMT+10",{s:{f:"+1000",n:"+10"}}],["Etc/GMT+11",{s:{f:"+1100",n:"+11"}}],["Etc/GMT+12",{s:{f:"+1200",n:"+12"}}],["Etc/GMT+13",{s:{f:"+1300",n:"+13"}}],["Etc/GMT+14",{s:{f:"+1400",n:"+14"}}],["Etc/GMT+2",{s:{f:"+0200",n:"+02"}}],["Etc/GMT+3",{s:{f:"+0300",n:"+03"}}],["Etc/GMT+4",{s:{f:"+0400",n:"+04"}}],["Etc/GMT+5",{s:{f:"+0500",n:"+05"}}],["Etc/GMT+6",{s:{f:"+0600",n:"+06"}}],["Etc/GMT+7",{s:{f:"+0700",n:"+07"}}],["Etc/GMT+8",{s:{f:"+0800",n:"+08"}}],["Etc/GMT+9",{s:{f:"+0900",n:"+09"}}],["Etc/GMT0",{s:{f:"+0000",n:"GMT"}}],["Etc/Greenwich",{s:{f:"+0000",n:"GMT"}}],["Etc/UCT",{s:{f:"+0000",n:"UCT"}}],["Etc/Universal",{s:{f:"+0000",n:"UTC"}}],["Etc/UTC",{s:{f:"+0000",n:"UTC"}}],["Etc/Zulu",{s:{f:"+0000",n:"UTC"}}],["Europe/Amsterdam",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Andorra",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Astrakhan",{s:{f:"+0400",n:"+04"}}],["Europe/Athens",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Belgrade",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Berlin",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Bratislava",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Brussels",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Bucharest",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Budapest",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Busingen",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Chisinau",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Copenhagen",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Dublin",{s:{f:"+0100",t:"+0000",n:"GMT",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"+0000",t:"+0100",n:"IST",s:"19700329T010000",r:{m:3,d:"-1SU"}}}],["Europe/Gibraltar",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Guernsey",{s:{f:"+0100",t:"+0000",n:"GMT",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"+0000",t:"+0100",n:"BST",s:"19700329T010000",r:{m:3,d:"-1SU"}}}],["Europe/Helsinki",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Isle_of_Man",{s:{f:"+0100",t:"+0000",n:"GMT",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"+0000",t:"+0100",n:"BST",s:"19700329T010000",r:{m:3,d:"-1SU"}}}],["Europe/Istanbul",{s:{f:"+0300",n:"+03"}}],["Europe/Jersey",{s:{f:"+0100",t:"+0000",n:"GMT",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"+0000",t:"+0100",n:"BST",s:"19700329T010000",r:{m:3,d:"-1SU"}}}],["Europe/Kaliningrad",{s:{f:"+0200",n:"EET"}}],["Europe/Kiev",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Kirov",{s:{f:"+0300",n:"+03"}}],["Europe/Lisbon",{s:{f:"+0100",t:"+0000",n:"WET",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"+0000",t:"+0100",n:"WEST",s:"19700329T010000",r:{m:3,d:"-1SU"}}}],["Europe/Ljubljana",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/London",{s:{f:"+0100",t:"+0000",n:"GMT",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"+0000",t:"+0100",n:"BST",s:"19700329T010000",r:{m:3,d:"-1SU"}}}],["Europe/Luxembourg",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Madrid",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Malta",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Mariehamn",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Minsk",{s:{f:"+0300",n:"+03"}}],["Europe/Monaco",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Moscow",{s:{f:"+0300",n:"MSK"}}],["Europe/Nicosia",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Oslo",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Paris",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Podgorica",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Prague",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Riga",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Rome",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Samara",{s:{f:"+0400",n:"+04"}}],["Europe/San_Marino",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Sarajevo",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Saratov",{s:{f:"+0400",n:"+04"}}],["Europe/Simferopol",{s:{f:"+0300",n:"MSK"}}],["Europe/Skopje",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Sofia",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Stockholm",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Tallinn",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Tirane",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Ulyanovsk",{s:{f:"+0400",n:"+04"}}],["Europe/Uzhgorod",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Vaduz",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Vatican",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Vienna",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Vilnius",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Volgograd",{s:{f:"+0400",n:"+04"}}],["Europe/Warsaw",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Zagreb",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Zaporozhye",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Zurich",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Indian/Antananarivo",{s:{f:"+0300",n:"EAT"}}],["Indian/Chagos",{s:{f:"+0600",n:"+06"}}],["Indian/Christmas",{s:{f:"+0700",n:"+07"}}],["Indian/Cocos",{s:{f:"+0630",n:"+0630"}}],["Indian/Comoro",{s:{f:"+0300",n:"EAT"}}],["Indian/Kerguelen",{s:{f:"+0500",n:"+05"}}],["Indian/Mahe",{s:{f:"+0400",n:"+04"}}],["Indian/Maldives",{s:{f:"+0500",n:"+05"}}],["Indian/Mauritius",{s:{f:"+0400",n:"+04"}}],["Indian/Mayotte",{s:{f:"+0300",n:"EAT"}}],["Indian/Reunion",{s:{f:"+0400",n:"+04"}}],["Pacific/Apia",{s:{f:"+1400",t:"+1300",n:"+13",s:"19700405T040000",r:{m:4,d:"1SU"}},d:{f:"+1300",t:"+1400",n:"+14",s:"19700927T030000",r:{m:9,d:"-1SU"}}}],["Pacific/Auckland",{s:{f:"+1300",t:"+1200",n:"NZST",s:"19700405T030000",r:{m:4,d:"1SU"}},d:{f:"+1200",t:"+1300",n:"NZDT",s:"19700927T020000",r:{m:9,d:"-1SU"}}}],["Pacific/Bougainville",{s:{f:"+1100",n:"+11"}}],["Pacific/Chatham",{s:{f:"+1345",t:"+1245",n:"+1245",s:"19700405T034500",r:{m:4,d:"1SU"}},d:{f:"+1245",t:"+1345",n:"+1345",s:"19700927T024500",r:{m:9,d:"-1SU"}}}],["Pacific/Chuuk",{s:{f:"+1000",n:"+10"}}],["Pacific/Easter",{s:{f:"-0500",t:"-0600",n:"-06",s:"19700404T220000",r:{m:4,d:"1SA"}},d:{f:"-0600",t:"-0500",n:"-05",s:"19700905T220000",r:{m:9,d:"1SA"}}}],["Pacific/Efate",{s:{f:"+1100",n:"+11"}}],["Pacific/Enderbury",{s:{f:"+1300",n:"+13"}}],["Pacific/Fakaofo",{s:{f:"+1300",n:"+13"}}],["Pacific/Fiji",{s:{f:"+1300",t:"+1200",n:"+12",s:"19700118T030000",r:{m:1,d:"-2SU"}},d:{f:"+1200",t:"+1300",n:"+13",s:"19701101T020000",r:{m:11,d:"1SU"}}}],["Pacific/Funafuti",{s:{f:"+1200",n:"+12"}}],["Pacific/Galapagos",{s:{f:"-0600",n:"-06"}}],["Pacific/Gambier",{s:{f:"-0900",n:"-09"}}],["Pacific/Guadalcanal",{s:{f:"+1100",n:"+11"}}],["Pacific/Guam",{s:{f:"+1000",n:"ChST"}}],["Pacific/Honolulu",{s:{f:"-1000",n:"HST"}}],["Pacific/Kiritimati",{s:{f:"+1400",n:"+14"}}],["Pacific/Kosrae",{s:{f:"+1100",n:"+11"}}],["Pacific/Kwajalein",{s:{f:"+1200",n:"+12"}}],["Pacific/Majuro",{s:{f:"+1200",n:"+12"}}],["Pacific/Marquesas",{s:{f:"-0930",n:"-0930"}}],["Pacific/Midway",{s:{f:"-1100",n:"SST"}}],["Pacific/Nauru",{s:{f:"+1200",n:"+12"}}],["Pacific/Niue",{s:{f:"-1100",n:"-11"}}],["Pacific/Norfolk",{s:{f:"+1100",n:"+11"}}],["Pacific/Noumea",{s:{f:"+1100",n:"+11"}}],["Pacific/Pago_Pago",{s:{f:"-1100",n:"SST"}}],["Pacific/Palau",{s:{f:"+0900",n:"+09"}}],["Pacific/Pitcairn",{s:{f:"-0800",n:"-08"}}],["Pacific/Pohnpei",{s:{f:"+1100",n:"+11"}}],["Pacific/Port_Moresby",{s:{f:"+1000",n:"+10"}}],["Pacific/Rarotonga",{s:{f:"-1000",n:"-10"}}],["Pacific/Saipan",{s:{f:"+1000",n:"ChST"}}],["Pacific/Tahiti",{s:{f:"-1000",n:"-10"}}],["Pacific/Tarawa",{s:{f:"+1200",n:"+12"}}],["Pacific/Tongatapu",{s:{f:"+1300",n:"+13"}}],["Pacific/Wake",{s:{f:"+1200",n:"+12"}}],["Pacific/Wallis",{s:{f:"+1200",n:"+12"}}]])),ct}var Jt;function Je(){if(Jt)return at;Jt=1,Object.defineProperty(at,"__esModule",{value:!0}),at.getZoneString=at.getZoneLines=void 0;const r=Ze();function t(a){const{n:i,f:o,t:n,r:l,s:u}=a;return[`TZNAME:${i}`,`TZOFFSETFROM:${o}`,`TZOFFSETTO:${n||o}`,`DTSTART:${u||r.defaultStart}`,...l?[`RRULE:FREQ=${l.f||"YEARLY"};BYMONTH=${l.m};BYDAY=${l.d}`]:[]]}function e(a,i=!0){const o=r.zonesMap.get(a);if(o){const{s:n,d:l}=o;return[...i?["BEGIN:VTIMEZONE"]:[],`TZID:${a}`,"BEGIN:STANDARD",...t(n),"END:STANDARD",...l?["BEGIN:DAYLIGHT",...t(l),"END:DAYLIGHT"]:[],...i?["END:VTIMEZONE"]:[]]}}at.getZoneLines=e;function s(a,i=!0){return e(a,i)?.join(`\r +import{r as G,o as B,f as H,g as Q,k as v,y as dt,t as et,w as st,j as vt,N as Se,F as Ft,B as Gt,c as Pt,h as ue,b as de,l as St,D as Ae,u as _,e as ge}from"./Web-BwmPK40i.chunk.mjs";import{_ as ce,l as jt,g as De}from"./public-C1mLBHT3.chunk.mjs";import{t as D}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import{N as Kt}from"./ContentCopy-BF1gBM5z.chunk.mjs";import{d as _e,c as mt,a as Lt,g as Ee,h as be,o as Ue,e as Ce}from"./index-B-dGqfIG.chunk.mjs";import{c as ft}from"./index-BLNGy7h5.chunk.mjs";import{d as zt,a as Ot}from"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import{S as Ye}from"./ShareType-suoNfd7y.chunk.mjs";import{N as Ht}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import{N as he}from"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import{N as ve,a as Oe}from"./NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs";import{_ as we}from"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";import{l as W}from"./logger-z78wFmcz.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import{k as Me}from"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";/* empty css */import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import{D as Ne}from"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import{N as xe}from"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import{P as Ie}from"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import"./index-BW4M2n71.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import"./mdi-Lt-19ASw.chunk.mjs";import"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./index-xEyWukTf.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import{z as ke,_ as Be}from"./index-BYnFfAmz.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";function qt(r){const t=r.getFullYear(),e=(r.getMonth()+1).toString().padStart(2,"0"),s=r.getDate().toString().padStart(2,"0");return`${t}-${e}-${s}`}const Pe="_absenceForm_1i2bj_2",Le="_absenceForm__pickerContainer_1i2bj_8",ze="_absenceForm__picker_1i2bj_8",Ve="_absenceForm__longMessage_1i2bj_22",je="_absenceForm__longMessageContainer_1i2bj_26",He="_absenceForm__actions_1i2bj_33",Re={absenceForm:Pe,absenceForm__pickerContainer:Le,absenceForm__picker:ze,absenceForm__longMessage:Ve,absenceForm__longMessageContainer:je,absenceForm__actions:He},We={name:"AbsenceForm",components:{NcButton:Ht,NcTextField:we,NcTextArea:Oe,NcDateTimePickerNative:he,NcSelectUsers:ve},setup(){return{t:D}},data(){const{firstDay:r,lastDay:t,status:e,message:s,replacementUserId:a,replacementUserDisplayName:i}=jt("dav","absence",{});return{loading:!1,status:e??"",message:s??"",firstDay:r?new Date(r):new Date,lastDay:t?new Date(t):null,replacementUserId:a,replacementUser:a?{user:a,displayName:i}:null,searchLoading:!1,options:[]}},computed:{valid(){const r=new Date(this.firstDay?.getTime()),t=new Date(this.lastDay?.getTime());return r?.setHours(0,0,0,0),t?.setHours(0,0,0,0),!!this.firstDay&&!!this.lastDay&&!!this.status&&!!this.message&&t>=r}},methods:{resetForm(){this.status="",this.message="",this.firstDay=new Date,this.lastDay=null},formatForMultiselect(r){return{user:r.uuid||r.value.shareWith,displayName:r.name||r.label,subtitle:r.dsc|""}},async asyncFind(r){this.searchLoading=!0,await this.debounceGetSuggestions(r.trim())},async getSuggestions(r){const t=[Ye.User];let e;try{e=await ft.get(mt("apps/files_sharing/api/v1/sharees"),{params:{format:"json",itemType:"file",search:r,shareType:t}})}catch(d){W.error("Error fetching suggestions",{error:d});return}const s=e.data.ocs.data,a=e.data.ocs.data.exact;s.exact=[];const i=a.users,o=s.users;W.info("AbsenceForm raw suggestions",{rawExactSuggestions:i,rawSuggestions:o});const n=i.map(d=>this.formatForMultiselect(d)),l=o.map(d=>this.formatForMultiselect(d)),u=n.concat(l),c=u.reduce((d,m)=>(m.displayName&&(d[m.displayName]||(d[m.displayName]=0),d[m.displayName]++),d),{});this.options=u.map(d=>c[d.displayName]>1&&!d.desc?{...d,desc:d.shareWithDisplayNameUnique}:d),this.searchLoading=!1,W.info("AbsenseForm suggestions",{options:this.options})},debounceGetSuggestions:_e(function(...r){this.getSuggestions(...r)},300),async saveForm(){if(this.valid){this.loading=!0;try{await ft.post(mt("/apps/dav/api/v1/outOfOffice/{userId}",{userId:Lt().uid}),{firstDay:qt(this.firstDay),lastDay:qt(this.lastDay),status:this.status,message:this.message,replacementUserId:this.replacementUser?.user??null}),zt(D("dav","Absence saved"))}catch(r){Ot(D("dav","Failed to save your absence settings")),W.error("Could not save absence",{error:r})}finally{this.loading=!1}}},async clearAbsence(){this.loading=!0;try{await ft.delete(mt("/apps/dav/api/v1/outOfOffice/{userId}",{userId:Lt().uid})),this.resetForm(),zt(D("dav","Absence cleared"))}catch(r){Ot(D("dav","Failed to clear your absence settings")),W.error("Could not clear absence",{error:r})}finally{this.loading=!1}}}},Fe={for:"replacement-search-input"};function Ge(r,t,e,s,a,i){const o=G("NcDateTimePickerNative"),n=G("NcSelectUsers"),l=G("NcTextField"),u=G("NcTextArea"),c=G("NcButton");return B(),H("form",{class:dt(r.$style.absenceForm),onSubmit:t[5]||(t[5]=Se((...d)=>i.saveForm&&i.saveForm(...d),["prevent"]))},[Q("div",{class:dt(r.$style.absenceForm__pickerContainer)},[v(o,{id:"absence-first-day",modelValue:a.firstDay,"onUpdate:modelValue":t[0]||(t[0]=d=>a.firstDay=d),class:dt(r.$style.absenceForm__picker),label:s.t("dav","First day"),required:""},null,8,["modelValue","class","label"]),v(o,{id:"absence-last-day",modelValue:a.lastDay,"onUpdate:modelValue":t[1]||(t[1]=d=>a.lastDay=d),class:dt(r.$style.absenceForm__picker),label:s.t("dav","Last day (inclusive)"),required:""},null,8,["modelValue","class","label"])],2),Q("label",Fe,et(s.t("dav","Out of office replacement (optional)")),1),v(n,{modelValue:a.replacementUser,"onUpdate:modelValue":t[2]||(t[2]=d=>a.replacementUser=d),inputId:"replacement-search-input",loading:a.searchLoading,placeholder:s.t("dav","Name of the replacement"),options:a.options,onSearch:i.asyncFind},null,8,["modelValue","loading","placeholder","options","onSearch"]),v(l,{modelValue:a.status,"onUpdate:modelValue":t[3]||(t[3]=d=>a.status=d),label:s.t("dav","Short absence status"),required:!0},null,8,["modelValue","label"]),Q("div",{class:dt(r.$style.absenceForm__longMessageContainer)},[v(u,{modelValue:a.message,"onUpdate:modelValue":t[4]||(t[4]=d=>a.message=d),inputClass:r.$style.absenceForm__longMessage,label:s.t("dav","Long absence Message"),required:"",resize:"none",rows:"6"},null,8,["modelValue","inputClass","label"])],2),Q("div",{class:dt(r.$style.absenceForm__actions)},[v(c,{disabled:a.loading||!i.valid,variant:"primary",type:"submit"},{default:st(()=>[vt(et(s.t("dav","Save")),1)]),_:1},8,["disabled"]),v(c,{disabled:a.loading||!i.valid,variant:"error",onClick:i.clearAbsence},{default:st(()=>[vt(et(s.t("dav","Disable absence")),1)]),_:1},8,["disabled","onClick"])],2)],34)}const Ke={$style:Re},qe=ce(We,[["render",Ge],["__cssModules",Ke]]);var at={},ct={},Zt;function Ze(){return Zt||(Zt=1,Object.defineProperty(ct,"__esModule",{value:!0}),ct.zonesMap=ct.defaultStart=void 0,ct.defaultStart="19700101T000000",ct.zonesMap=new Map([["Africa/Abidjan",{s:{f:"+0000",n:"GMT"}}],["Africa/Accra",{s:{f:"+0000",n:"GMT"}}],["Africa/Addis_Ababa",{s:{f:"+0300",n:"EAT"}}],["Africa/Algiers",{s:{f:"+0100",n:"CET"}}],["Africa/Asmara",{s:{f:"+0300",n:"EAT"}}],["Africa/Bamako",{s:{f:"+0000",n:"GMT"}}],["Africa/Bangui",{s:{f:"+0100",n:"WAT"}}],["Africa/Banjul",{s:{f:"+0000",n:"GMT"}}],["Africa/Bissau",{s:{f:"+0000",n:"GMT"}}],["Africa/Blantyre",{s:{f:"+0200",n:"CAT"}}],["Africa/Brazzaville",{s:{f:"+0100",n:"WAT"}}],["Africa/Bujumbura",{s:{f:"+0200",n:"CAT"}}],["Africa/Cairo",{s:{f:"+0200",n:"EET"}}],["Africa/Casablanca",{s:{f:"+0100",n:"+01"}}],["Africa/Ceuta",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Africa/Conakry",{s:{f:"+0000",n:"GMT"}}],["Africa/Dakar",{s:{f:"+0000",n:"GMT"}}],["Africa/Dar_es_Salaam",{s:{f:"+0300",n:"EAT"}}],["Africa/Djibouti",{s:{f:"+0300",n:"EAT"}}],["Africa/Douala",{s:{f:"+0100",n:"WAT"}}],["Africa/El_Aaiun",{s:{f:"+0100",n:"+01"}}],["Africa/Freetown",{s:{f:"+0000",n:"GMT"}}],["Africa/Gaborone",{s:{f:"+0200",n:"CAT"}}],["Africa/Harare",{s:{f:"+0200",n:"CAT"}}],["Africa/Johannesburg",{s:{f:"+0200",n:"SAST"}}],["Africa/Juba",{s:{f:"+0300",n:"EAT"}}],["Africa/Kampala",{s:{f:"+0300",n:"EAT"}}],["Africa/Khartoum",{s:{f:"+0200",n:"CAT"}}],["Africa/Kigali",{s:{f:"+0200",n:"CAT"}}],["Africa/Kinshasa",{s:{f:"+0100",n:"WAT"}}],["Africa/Lagos",{s:{f:"+0100",n:"WAT"}}],["Africa/Libreville",{s:{f:"+0100",n:"WAT"}}],["Africa/Lome",{s:{f:"+0000",n:"GMT"}}],["Africa/Luanda",{s:{f:"+0100",n:"WAT"}}],["Africa/Lubumbashi",{s:{f:"+0200",n:"CAT"}}],["Africa/Lusaka",{s:{f:"+0200",n:"CAT"}}],["Africa/Malabo",{s:{f:"+0100",n:"WAT"}}],["Africa/Maputo",{s:{f:"+0200",n:"CAT"}}],["Africa/Maseru",{s:{f:"+0200",n:"SAST"}}],["Africa/Mbabane",{s:{f:"+0200",n:"SAST"}}],["Africa/Mogadishu",{s:{f:"+0300",n:"EAT"}}],["Africa/Monrovia",{s:{f:"+0000",n:"GMT"}}],["Africa/Nairobi",{s:{f:"+0300",n:"EAT"}}],["Africa/Ndjamena",{s:{f:"+0100",n:"WAT"}}],["Africa/Niamey",{s:{f:"+0100",n:"WAT"}}],["Africa/Nouakchott",{s:{f:"+0000",n:"GMT"}}],["Africa/Ouagadougou",{s:{f:"+0000",n:"GMT"}}],["Africa/Porto-Novo",{s:{f:"+0100",n:"WAT"}}],["Africa/Sao_Tome",{s:{f:"+0100",n:"WAT"}}],["Africa/Tripoli",{s:{f:"+0200",n:"EET"}}],["Africa/Tunis",{s:{f:"+0100",n:"CET"}}],["Africa/Windhoek",{s:{f:"+0200",n:"CAT"}}],["America/Adak",{s:{f:"-0900",t:"-1000",n:"HST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-1000",t:"-0900",n:"HDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Anchorage",{s:{f:"-0800",t:"-0900",n:"AKST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0900",t:"-0800",n:"AKDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Anguilla",{s:{f:"-0400",n:"AST"}}],["America/Antigua",{s:{f:"-0400",n:"AST"}}],["America/Araguaina",{s:{f:"-0300",n:"-03"}}],["America/Argentina/Buenos_Aires",{s:{f:"-0300",n:"-03"}}],["America/Argentina/Catamarca",{s:{f:"-0300",n:"-03"}}],["America/Argentina/Cordoba",{s:{f:"-0300",n:"-03"}}],["America/Argentina/Jujuy",{s:{f:"-0300",n:"-03"}}],["America/Argentina/La_Rioja",{s:{f:"-0300",n:"-03"}}],["America/Argentina/Mendoza",{s:{f:"-0300",n:"-03"}}],["America/Argentina/Rio_Gallegos",{s:{f:"-0300",n:"-03"}}],["America/Argentina/Salta",{s:{f:"-0300",n:"-03"}}],["America/Argentina/San_Juan",{s:{f:"-0300",n:"-03"}}],["America/Argentina/San_Luis",{s:{f:"-0300",n:"-03"}}],["America/Argentina/Tucuman",{s:{f:"-0300",n:"-03"}}],["America/Argentina/Ushuaia",{s:{f:"-0300",n:"-03"}}],["America/Aruba",{s:{f:"-0400",n:"AST"}}],["America/Asuncion",{s:{f:"-0300",t:"-0400",n:"-04",s:"19700322T000000",r:{m:3,d:"4SU"}},d:{f:"-0400",t:"-0300",n:"-03",s:"19701004T000000",r:{m:10,d:"1SU"}}}],["America/Atikokan",{s:{f:"-0500",n:"EST"}}],["America/Bahia_Banderas",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700405T020000",r:{m:4,d:"1SU"}}}],["America/Bahia",{s:{f:"-0300",n:"-03"}}],["America/Barbados",{s:{f:"-0400",n:"AST"}}],["America/Belem",{s:{f:"-0300",n:"-03"}}],["America/Belize",{s:{f:"-0600",n:"CST"}}],["America/Blanc-Sablon",{s:{f:"-0400",n:"AST"}}],["America/Boa_Vista",{s:{f:"-0400",n:"-04"}}],["America/Bogota",{s:{f:"-0500",n:"-05"}}],["America/Boise",{s:{f:"-0600",t:"-0700",n:"MST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0700",t:"-0600",n:"MDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Cambridge_Bay",{s:{f:"-0600",t:"-0700",n:"MST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0700",t:"-0600",n:"MDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Campo_Grande",{s:{f:"-0400",n:"-04",s:"19700215T000000",r:{m:2,d:"3SU"}},d:{f:"-0400",t:"-0300",n:"-03",s:"19701101T000000",r:{m:11,d:"1SU"}}}],["America/Cancun",{s:{f:"-0500",n:"EST"}}],["America/Caracas",{s:{f:"-0400",n:"-04"}}],["America/Cayenne",{s:{f:"-0300",n:"-03"}}],["America/Cayman",{s:{f:"-0500",n:"EST"}}],["America/Chicago",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Chihuahua",{s:{f:"-0600",t:"-0700",n:"MST",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"-0700",t:"-0600",n:"MDT",s:"19700405T020000",r:{m:4,d:"1SU"}}}],["America/Costa_Rica",{s:{f:"-0600",n:"CST"}}],["America/Creston",{s:{f:"-0700",n:"MST"}}],["America/Cuiaba",{s:{f:"-0400",n:"-04",s:"19700215T000000",r:{m:2,d:"3SU"}},d:{f:"-0400",t:"-0300",n:"-03",s:"19701101T000000",r:{m:11,d:"1SU"}}}],["America/Curacao",{s:{f:"-0400",n:"AST"}}],["America/Danmarkshavn",{s:{f:"+0000",n:"GMT"}}],["America/Dawson_Creek",{s:{f:"-0700",n:"MST"}}],["America/Dawson",{s:{f:"-0700",t:"-0800",n:"PST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0800",t:"-0700",n:"PDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Denver",{s:{f:"-0600",t:"-0700",n:"MST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0700",t:"-0600",n:"MDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Detroit",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Dominica",{s:{f:"-0400",n:"AST"}}],["America/Edmonton",{s:{f:"-0600",t:"-0700",n:"MST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0700",t:"-0600",n:"MDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Eirunepe",{s:{f:"-0500",n:"-05"}}],["America/El_Salvador",{s:{f:"-0600",n:"CST"}}],["America/Fort_Nelson",{s:{f:"-0700",n:"MST"}}],["America/Fortaleza",{s:{f:"-0300",n:"-03"}}],["America/Glace_Bay",{s:{f:"-0300",t:"-0400",n:"AST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0400",t:"-0300",n:"ADT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Godthab",{s:{f:"-0200",t:"-0300",n:"-03",s:"19701024T230000",r:{m:10,d:"-1SA"}},d:{f:"-0300",t:"-0200",n:"-02",s:"19700328T220000",r:{m:3,d:"-1SA"}}}],["America/Goose_Bay",{s:{f:"-0300",t:"-0400",n:"AST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0400",t:"-0300",n:"ADT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Grand_Turk",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Grenada",{s:{f:"-0400",n:"AST"}}],["America/Guadeloupe",{s:{f:"-0400",n:"AST"}}],["America/Guatemala",{s:{f:"-0600",n:"CST"}}],["America/Guayaquil",{s:{f:"-0500",n:"-05"}}],["America/Guyana",{s:{f:"-0400",n:"-04"}}],["America/Halifax",{s:{f:"-0300",t:"-0400",n:"AST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0400",t:"-0300",n:"ADT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Havana",{s:{f:"-0400",t:"-0500",n:"CST",s:"19701101T010000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"CDT",s:"19700308T000000",r:{m:3,d:"2SU"}}}],["America/Hermosillo",{s:{f:"-0700",n:"MST"}}],["America/Indiana/Indianapolis",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Indiana/Knox",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Indiana/Marengo",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Indiana/Petersburg",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Indiana/Tell_City",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Indiana/Vevay",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Indiana/Vincennes",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Indiana/Winamac",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Inuvik",{s:{f:"-0600",t:"-0700",n:"MST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0700",t:"-0600",n:"MDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Iqaluit",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Jamaica",{s:{f:"-0500",n:"EST"}}],["America/Juneau",{s:{f:"-0800",t:"-0900",n:"AKST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0900",t:"-0800",n:"AKDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Kentucky/Louisville",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Kentucky/Monticello",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Kralendijk",{s:{f:"-0400",n:"AST"}}],["America/La_Paz",{s:{f:"-0400",n:"-04"}}],["America/Lima",{s:{f:"-0500",n:"-05"}}],["America/Los_Angeles",{s:{f:"-0700",t:"-0800",n:"PST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0800",t:"-0700",n:"PDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Lower_Princes",{s:{f:"-0400",n:"AST"}}],["America/Maceio",{s:{f:"-0300",n:"-03"}}],["America/Managua",{s:{f:"-0600",n:"CST"}}],["America/Manaus",{s:{f:"-0400",n:"-04"}}],["America/Marigot",{s:{f:"-0400",n:"AST"}}],["America/Martinique",{s:{f:"-0400",n:"AST"}}],["America/Matamoros",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Mazatlan",{s:{f:"-0600",t:"-0700",n:"MST",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"-0700",t:"-0600",n:"MDT",s:"19700405T020000",r:{m:4,d:"1SU"}}}],["America/Menominee",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Merida",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700405T020000",r:{m:4,d:"1SU"}}}],["America/Metlakatla",{s:{f:"-0800",t:"-0900",n:"AKST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0900",t:"-0800",n:"AKDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Mexico_City",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700405T020000",r:{m:4,d:"1SU"}}}],["America/Miquelon",{s:{f:"-0200",t:"-0300",n:"-03",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0300",t:"-0200",n:"-02",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Moncton",{s:{f:"-0300",t:"-0400",n:"AST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0400",t:"-0300",n:"ADT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Monterrey",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700405T020000",r:{m:4,d:"1SU"}}}],["America/Montevideo",{s:{f:"-0300",n:"-03"}}],["America/Montserrat",{s:{f:"-0400",n:"AST"}}],["America/Nassau",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/New_York",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Nipigon",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Nome",{s:{f:"-0800",t:"-0900",n:"AKST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0900",t:"-0800",n:"AKDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Noronha",{s:{f:"-0200",n:"-02"}}],["America/North_Dakota/Beulah",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/North_Dakota/Center",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/North_Dakota/New_Salem",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Ojinaga",{s:{f:"-0600",t:"-0700",n:"MST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0700",t:"-0600",n:"MDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Panama",{s:{f:"-0500",n:"EST"}}],["America/Pangnirtung",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Paramaribo",{s:{f:"-0300",n:"-03"}}],["America/Phoenix",{s:{f:"-0700",n:"MST"}}],["America/Port_of_Spain",{s:{f:"-0400",n:"AST"}}],["America/Port-au-Prince",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Porto_Velho",{s:{f:"-0400",n:"-04"}}],["America/Puerto_Rico",{s:{f:"-0400",n:"AST"}}],["America/Punta_Arenas",{s:{f:"-0300",n:"-03"}}],["America/Rainy_River",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Rankin_Inlet",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Recife",{s:{f:"-0300",n:"-03"}}],["America/Regina",{s:{f:"-0600",n:"CST"}}],["America/Resolute",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Rio_Branco",{s:{f:"-0500",n:"-05"}}],["America/Santarem",{s:{f:"-0300",n:"-03"}}],["America/Santiago",{s:{f:"-0300",t:"-0400",n:"-04",s:"19700405T000000",r:{m:4,d:"1SU"}},d:{f:"-0400",t:"-0300",n:"-03",s:"19700906T000000",r:{m:9,d:"1SU"}}}],["America/Santo_Domingo",{s:{f:"-0400",n:"AST"}}],["America/Sao_Paulo",{s:{f:"-0300",n:"-03",s:"19700215T000000",r:{m:2,d:"3SU"}},d:{f:"-0300",t:"-0200",n:"-02",s:"19701101T000000",r:{m:11,d:"1SU"}}}],["America/Scoresbysund",{s:{f:"+0000",t:"-0100",n:"-01",s:"19701025T010000",r:{m:10,d:"-1SU"}},d:{f:"-0100",t:"+0000",n:"+00",s:"19700329T000000",r:{m:3,d:"-1SU"}}}],["America/Sitka",{s:{f:"-0800",t:"-0900",n:"AKST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0900",t:"-0800",n:"AKDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/St_Barthelemy",{s:{f:"-0400",n:"AST"}}],["America/St_Johns",{s:{f:"-0230",t:"-0330",n:"NST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0330",t:"-0230",n:"NDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/St_Kitts",{s:{f:"-0400",n:"AST"}}],["America/St_Lucia",{s:{f:"-0400",n:"AST"}}],["America/St_Thomas",{s:{f:"-0400",n:"AST"}}],["America/St_Vincent",{s:{f:"-0400",n:"AST"}}],["America/Swift_Current",{s:{f:"-0600",n:"CST"}}],["America/Tegucigalpa",{s:{f:"-0600",n:"CST"}}],["America/Thule",{s:{f:"-0300",t:"-0400",n:"AST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0400",t:"-0300",n:"ADT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Thunder_Bay",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Tijuana",{s:{f:"-0700",t:"-0800",n:"PST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0800",t:"-0700",n:"PDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Toronto",{s:{f:"-0400",t:"-0500",n:"EST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0500",t:"-0400",n:"EDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Tortola",{s:{f:"-0400",n:"AST"}}],["America/Vancouver",{s:{f:"-0700",t:"-0800",n:"PST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0800",t:"-0700",n:"PDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Whitehorse",{s:{f:"-0700",t:"-0800",n:"PST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0800",t:"-0700",n:"PDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Winnipeg",{s:{f:"-0500",t:"-0600",n:"CST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0600",t:"-0500",n:"CDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Yakutat",{s:{f:"-0800",t:"-0900",n:"AKST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0900",t:"-0800",n:"AKDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["America/Yellowknife",{s:{f:"-0600",t:"-0700",n:"MST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0700",t:"-0600",n:"MDT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["Antarctica/Casey",{s:{f:"+0800",n:"+08"}}],["Antarctica/Davis",{s:{f:"+0700",n:"+07"}}],["Antarctica/DumontDUrville",{s:{f:"+1000",n:"+10"}}],["Antarctica/Macquarie",{s:{f:"+1100",n:"+11"}}],["Antarctica/Mawson",{s:{f:"+0500",n:"+05"}}],["Antarctica/McMurdo",{s:{f:"+1300",t:"+1200",n:"NZST",s:"19700405T030000",r:{m:4,d:"1SU"}},d:{f:"+1200",t:"+1300",n:"NZDT",s:"19700927T020000",r:{m:9,d:"-1SU"}}}],["Antarctica/Palmer",{s:{f:"-0300",n:"-03"}}],["Antarctica/Rothera",{s:{f:"-0300",n:"-03"}}],["Antarctica/Syowa",{s:{f:"+0300",n:"+03"}}],["Antarctica/Troll",{s:{f:"+0200",t:"+0000",n:"+00",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0000",t:"+0200",n:"+02",s:"19700329T010000",r:{m:3,d:"-1SU"}}}],["Antarctica/Vostok",{s:{f:"+0600",n:"+06"}}],["Arctic/Longyearbyen",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Asia/Aden",{s:{f:"+0300",n:"+03"}}],["Asia/Almaty",{s:{f:"+0600",n:"+06"}}],["Asia/Amman",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701030T010000",r:{m:10,d:"-1FR"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700326T235959",r:{m:3,d:"-1TH"}}}],["Asia/Anadyr",{s:{f:"+1200",n:"+12"}}],["Asia/Aqtau",{s:{f:"+0500",n:"+05"}}],["Asia/Aqtobe",{s:{f:"+0500",n:"+05"}}],["Asia/Ashgabat",{s:{f:"+0500",n:"+05"}}],["Asia/Atyrau",{s:{f:"+0500",n:"+05"}}],["Asia/Baghdad",{s:{f:"+0300",n:"+03"}}],["Asia/Bahrain",{s:{f:"+0300",n:"+03"}}],["Asia/Baku",{s:{f:"+0400",n:"+04"}}],["Asia/Bangkok",{s:{f:"+0700",n:"+07"}}],["Asia/Barnaul",{s:{f:"+0700",n:"+07"}}],["Asia/Beirut",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T000000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T000000",r:{m:3,d:"-1SU"}}}],["Asia/Bishkek",{s:{f:"+0600",n:"+06"}}],["Asia/Brunei",{s:{f:"+0800",n:"+08"}}],["Asia/Chita",{s:{f:"+0900",n:"+09"}}],["Asia/Choibalsan",{s:{f:"+0800",n:"+08"}}],["Asia/Colombo",{s:{f:"+0530",n:"+0530"}}],["Asia/Damascus",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701030T000000",r:{m:10,d:"-1FR"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700327T000000",r:{m:3,d:"-1FR"}}}],["Asia/Dhaka",{s:{f:"+0600",n:"+06"}}],["Asia/Dili",{s:{f:"+0900",n:"+09"}}],["Asia/Dubai",{s:{f:"+0400",n:"+04"}}],["Asia/Dushanbe",{s:{f:"+0500",n:"+05"}}],["Asia/Famagusta",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Asia/Gaza",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701031T010000",r:{m:10,d:"-1SA"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700328T010000",r:{m:3,d:"4SA"}}}],["Asia/Hebron",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701031T010000",r:{m:10,d:"-1SA"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700328T010000",r:{m:3,d:"4SA"}}}],["Asia/Ho_Chi_Minh",{s:{f:"+0700",n:"+07"}}],["Asia/Hong_Kong",{s:{f:"+0800",n:"HKT"}}],["Asia/Hovd",{s:{f:"+0700",n:"+07"}}],["Asia/Irkutsk",{s:{f:"+0800",n:"+08"}}],["Asia/Istanbul",{s:{f:"+0300",n:"+03"}}],["Asia/Jakarta",{s:{f:"+0700",n:"WIB"}}],["Asia/Jayapura",{s:{f:"+0900",n:"WIT"}}],["Asia/Jerusalem",{s:{f:"+0300",t:"+0200",n:"IST",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"IDT",s:"19700327T020000",r:{m:3,d:"-1FR"}}}],["Asia/Kabul",{s:{f:"+0430",n:"+0430"}}],["Asia/Kamchatka",{s:{f:"+1200",n:"+12"}}],["Asia/Karachi",{s:{f:"+0500",n:"PKT"}}],["Asia/Kathmandu",{s:{f:"+0545",n:"+0545"}}],["Asia/Khandyga",{s:{f:"+0900",n:"+09"}}],["Asia/Kolkata",{s:{f:"+0530",n:"IST"}}],["Asia/Krasnoyarsk",{s:{f:"+0700",n:"+07"}}],["Asia/Kuala_Lumpur",{s:{f:"+0800",n:"+08"}}],["Asia/Kuching",{s:{f:"+0800",n:"+08"}}],["Asia/Kuwait",{s:{f:"+0300",n:"+03"}}],["Asia/Macau",{s:{f:"+0800",n:"CST"}}],["Asia/Magadan",{s:{f:"+1100",n:"+11"}}],["Asia/Makassar",{s:{f:"+0800",n:"WITA"}}],["Asia/Manila",{s:{f:"+0800",n:"PST"}}],["Asia/Muscat",{s:{f:"+0400",n:"+04"}}],["Asia/Nicosia",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Asia/Novokuznetsk",{s:{f:"+0700",n:"+07"}}],["Asia/Novosibirsk",{s:{f:"+0700",n:"+07"}}],["Asia/Omsk",{s:{f:"+0600",n:"+06"}}],["Asia/Oral",{s:{f:"+0500",n:"+05"}}],["Asia/Phnom_Penh",{s:{f:"+0700",n:"+07"}}],["Asia/Pontianak",{s:{f:"+0700",n:"WIB"}}],["Asia/Pyongyang",{s:{f:"+0900",n:"KST"}}],["Asia/Qatar",{s:{f:"+0300",n:"+03"}}],["Asia/Qyzylorda",{s:{f:"+0600",n:"+06"}}],["Asia/Riyadh",{s:{f:"+0300",n:"+03"}}],["Asia/Sakhalin",{s:{f:"+1100",n:"+11"}}],["Asia/Samarkand",{s:{f:"+0500",n:"+05"}}],["Asia/Seoul",{s:{f:"+0900",n:"KST"}}],["Asia/Shanghai",{s:{f:"+0800",n:"CST"}}],["Asia/Singapore",{s:{f:"+0800",n:"+08"}}],["Asia/Srednekolymsk",{s:{f:"+1100",n:"+11"}}],["Asia/Taipei",{s:{f:"+0800",n:"CST"}}],["Asia/Tashkent",{s:{f:"+0500",n:"+05"}}],["Asia/Tbilisi",{s:{f:"+0400",n:"+04"}}],["Asia/Tehran",{s:{f:"+0430",t:"+0330",n:"+0330",s:"19700921T000000",r:{m:9,d:"3SU"}},d:{f:"+0330",t:"+0430",n:"+0430",s:"19700321T000000",r:{m:3,d:"3SU"}}}],["Asia/Thimphu",{s:{f:"+0600",n:"+06"}}],["Asia/Tokyo",{s:{f:"+0900",n:"JST"}}],["Asia/Tomsk",{s:{f:"+0700",n:"+07"}}],["Asia/Ulaanbaatar",{s:{f:"+0800",n:"+08"}}],["Asia/Urumqi",{s:{f:"+0600",n:"+06"}}],["Asia/Ust-Nera",{s:{f:"+1000",n:"+10"}}],["Asia/Vientiane",{s:{f:"+0700",n:"+07"}}],["Asia/Vladivostok",{s:{f:"+1000",n:"+10"}}],["Asia/Yakutsk",{s:{f:"+0900",n:"+09"}}],["Asia/Yangon",{s:{f:"+0630",n:"+0630"}}],["Asia/Yekaterinburg",{s:{f:"+0500",n:"+05"}}],["Asia/Yerevan",{s:{f:"+0400",n:"+04"}}],["Atlantic/Azores",{s:{f:"+0000",t:"-0100",n:"-01",s:"19701025T010000",r:{m:10,d:"-1SU"}},d:{f:"-0100",t:"+0000",n:"+00",s:"19700329T000000",r:{m:3,d:"-1SU"}}}],["Atlantic/Bermuda",{s:{f:"-0300",t:"-0400",n:"AST",s:"19701101T020000",r:{m:11,d:"1SU"}},d:{f:"-0400",t:"-0300",n:"ADT",s:"19700308T020000",r:{m:3,d:"2SU"}}}],["Atlantic/Canary",{s:{f:"+0100",t:"+0000",n:"WET",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"+0000",t:"+0100",n:"WEST",s:"19700329T010000",r:{m:3,d:"-1SU"}}}],["Atlantic/Cape_Verde",{s:{f:"-0100",n:"-01"}}],["Atlantic/Faroe",{s:{f:"+0100",t:"+0000",n:"WET",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"+0000",t:"+0100",n:"WEST",s:"19700329T010000",r:{m:3,d:"-1SU"}}}],["Atlantic/Madeira",{s:{f:"+0100",t:"+0000",n:"WET",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"+0000",t:"+0100",n:"WEST",s:"19700329T010000",r:{m:3,d:"-1SU"}}}],["Atlantic/Reykjavik",{s:{f:"+0000",n:"GMT"}}],["Atlantic/South_Georgia",{s:{f:"-0200",n:"-02"}}],["Atlantic/St_Helena",{s:{f:"+0000",n:"GMT"}}],["Atlantic/Stanley",{s:{f:"-0300",n:"-03"}}],["Australia/Adelaide",{s:{f:"+1030",t:"+0930",n:"ACST",s:"19700405T030000",r:{m:4,d:"1SU"}},d:{f:"+0930",t:"+1030",n:"ACDT",s:"19701004T020000",r:{m:10,d:"1SU"}}}],["Australia/Brisbane",{s:{f:"+1000",n:"AEST"}}],["Australia/Broken_Hill",{s:{f:"+1030",t:"+0930",n:"ACST",s:"19700405T030000",r:{m:4,d:"1SU"}},d:{f:"+0930",t:"+1030",n:"ACDT",s:"19701004T020000",r:{m:10,d:"1SU"}}}],["Australia/Currie",{s:{f:"+1100",t:"+1000",n:"AEST",s:"19700405T030000",r:{m:4,d:"1SU"}},d:{f:"+1000",t:"+1100",n:"AEDT",s:"19701004T020000",r:{m:10,d:"1SU"}}}],["Australia/Darwin",{s:{f:"+0930",n:"ACST"}}],["Australia/Eucla",{s:{f:"+0845",n:"+0845"}}],["Australia/Hobart",{s:{f:"+1100",t:"+1000",n:"AEST",s:"19700405T030000",r:{m:4,d:"1SU"}},d:{f:"+1000",t:"+1100",n:"AEDT",s:"19701004T020000",r:{m:10,d:"1SU"}}}],["Australia/Lindeman",{s:{f:"+1000",n:"AEST"}}],["Australia/Lord_Howe",{s:{f:"+1100",t:"+1030",n:"+1030",s:"19700405T020000",r:{m:4,d:"1SU"}},d:{f:"+1030",t:"+1100",n:"+11",s:"19701004T020000",r:{m:10,d:"1SU"}}}],["Australia/Melbourne",{s:{f:"+1100",t:"+1000",n:"AEST",s:"19700405T030000",r:{m:4,d:"1SU"}},d:{f:"+1000",t:"+1100",n:"AEDT",s:"19701004T020000",r:{m:10,d:"1SU"}}}],["Australia/Perth",{s:{f:"+0800",n:"AWST"}}],["Australia/Sydney",{s:{f:"+1100",t:"+1000",n:"AEST",s:"19700405T030000",r:{m:4,d:"1SU"}},d:{f:"+1000",t:"+1100",n:"AEDT",s:"19701004T020000",r:{m:10,d:"1SU"}}}],["Etc/GMT-0",{s:{f:"+0000",n:"GMT"}}],["Etc/GMT-1",{s:{f:"-0100",n:"-01"}}],["Etc/GMT-10",{s:{f:"-1000",n:"-10"}}],["Etc/GMT-11",{s:{f:"-1100",n:"-11"}}],["Etc/GMT-12",{s:{f:"-1200",n:"-12"}}],["Etc/GMT-2",{s:{f:"-0200",n:"-02"}}],["Etc/GMT-3",{s:{f:"-0300",n:"-03"}}],["Etc/GMT-4",{s:{f:"-0400",n:"-04"}}],["Etc/GMT-5",{s:{f:"-0500",n:"-05"}}],["Etc/GMT-6",{s:{f:"-0600",n:"-06"}}],["Etc/GMT-7",{s:{f:"-0700",n:"-07"}}],["Etc/GMT-8",{s:{f:"-0800",n:"-08"}}],["Etc/GMT-9",{s:{f:"-0900",n:"-09"}}],["Etc/GMT",{s:{f:"+0000",n:"GMT"}}],["Etc/GMT+0",{s:{f:"+0000",n:"GMT"}}],["Etc/GMT+1",{s:{f:"+0100",n:"+01"}}],["Etc/GMT+10",{s:{f:"+1000",n:"+10"}}],["Etc/GMT+11",{s:{f:"+1100",n:"+11"}}],["Etc/GMT+12",{s:{f:"+1200",n:"+12"}}],["Etc/GMT+13",{s:{f:"+1300",n:"+13"}}],["Etc/GMT+14",{s:{f:"+1400",n:"+14"}}],["Etc/GMT+2",{s:{f:"+0200",n:"+02"}}],["Etc/GMT+3",{s:{f:"+0300",n:"+03"}}],["Etc/GMT+4",{s:{f:"+0400",n:"+04"}}],["Etc/GMT+5",{s:{f:"+0500",n:"+05"}}],["Etc/GMT+6",{s:{f:"+0600",n:"+06"}}],["Etc/GMT+7",{s:{f:"+0700",n:"+07"}}],["Etc/GMT+8",{s:{f:"+0800",n:"+08"}}],["Etc/GMT+9",{s:{f:"+0900",n:"+09"}}],["Etc/GMT0",{s:{f:"+0000",n:"GMT"}}],["Etc/Greenwich",{s:{f:"+0000",n:"GMT"}}],["Etc/UCT",{s:{f:"+0000",n:"UCT"}}],["Etc/Universal",{s:{f:"+0000",n:"UTC"}}],["Etc/UTC",{s:{f:"+0000",n:"UTC"}}],["Etc/Zulu",{s:{f:"+0000",n:"UTC"}}],["Europe/Amsterdam",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Andorra",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Astrakhan",{s:{f:"+0400",n:"+04"}}],["Europe/Athens",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Belgrade",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Berlin",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Bratislava",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Brussels",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Bucharest",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Budapest",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Busingen",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Chisinau",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Copenhagen",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Dublin",{s:{f:"+0100",t:"+0000",n:"GMT",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"+0000",t:"+0100",n:"IST",s:"19700329T010000",r:{m:3,d:"-1SU"}}}],["Europe/Gibraltar",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Guernsey",{s:{f:"+0100",t:"+0000",n:"GMT",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"+0000",t:"+0100",n:"BST",s:"19700329T010000",r:{m:3,d:"-1SU"}}}],["Europe/Helsinki",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Isle_of_Man",{s:{f:"+0100",t:"+0000",n:"GMT",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"+0000",t:"+0100",n:"BST",s:"19700329T010000",r:{m:3,d:"-1SU"}}}],["Europe/Istanbul",{s:{f:"+0300",n:"+03"}}],["Europe/Jersey",{s:{f:"+0100",t:"+0000",n:"GMT",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"+0000",t:"+0100",n:"BST",s:"19700329T010000",r:{m:3,d:"-1SU"}}}],["Europe/Kaliningrad",{s:{f:"+0200",n:"EET"}}],["Europe/Kiev",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Kirov",{s:{f:"+0300",n:"+03"}}],["Europe/Lisbon",{s:{f:"+0100",t:"+0000",n:"WET",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"+0000",t:"+0100",n:"WEST",s:"19700329T010000",r:{m:3,d:"-1SU"}}}],["Europe/Ljubljana",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/London",{s:{f:"+0100",t:"+0000",n:"GMT",s:"19701025T020000",r:{m:10,d:"-1SU"}},d:{f:"+0000",t:"+0100",n:"BST",s:"19700329T010000",r:{m:3,d:"-1SU"}}}],["Europe/Luxembourg",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Madrid",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Malta",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Mariehamn",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Minsk",{s:{f:"+0300",n:"+03"}}],["Europe/Monaco",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Moscow",{s:{f:"+0300",n:"MSK"}}],["Europe/Nicosia",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Oslo",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Paris",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Podgorica",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Prague",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Riga",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Rome",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Samara",{s:{f:"+0400",n:"+04"}}],["Europe/San_Marino",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Sarajevo",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Saratov",{s:{f:"+0400",n:"+04"}}],["Europe/Simferopol",{s:{f:"+0300",n:"MSK"}}],["Europe/Skopje",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Sofia",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Stockholm",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Tallinn",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Tirane",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Ulyanovsk",{s:{f:"+0400",n:"+04"}}],["Europe/Uzhgorod",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Vaduz",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Vatican",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Vienna",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Vilnius",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Volgograd",{s:{f:"+0400",n:"+04"}}],["Europe/Warsaw",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Zagreb",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Europe/Zaporozhye",{s:{f:"+0300",t:"+0200",n:"EET",s:"19701025T040000",r:{m:10,d:"-1SU"}},d:{f:"+0200",t:"+0300",n:"EEST",s:"19700329T030000",r:{m:3,d:"-1SU"}}}],["Europe/Zurich",{s:{f:"+0200",t:"+0100",n:"CET",s:"19701025T030000",r:{m:10,d:"-1SU"}},d:{f:"+0100",t:"+0200",n:"CEST",s:"19700329T020000",r:{m:3,d:"-1SU"}}}],["Indian/Antananarivo",{s:{f:"+0300",n:"EAT"}}],["Indian/Chagos",{s:{f:"+0600",n:"+06"}}],["Indian/Christmas",{s:{f:"+0700",n:"+07"}}],["Indian/Cocos",{s:{f:"+0630",n:"+0630"}}],["Indian/Comoro",{s:{f:"+0300",n:"EAT"}}],["Indian/Kerguelen",{s:{f:"+0500",n:"+05"}}],["Indian/Mahe",{s:{f:"+0400",n:"+04"}}],["Indian/Maldives",{s:{f:"+0500",n:"+05"}}],["Indian/Mauritius",{s:{f:"+0400",n:"+04"}}],["Indian/Mayotte",{s:{f:"+0300",n:"EAT"}}],["Indian/Reunion",{s:{f:"+0400",n:"+04"}}],["Pacific/Apia",{s:{f:"+1400",t:"+1300",n:"+13",s:"19700405T040000",r:{m:4,d:"1SU"}},d:{f:"+1300",t:"+1400",n:"+14",s:"19700927T030000",r:{m:9,d:"-1SU"}}}],["Pacific/Auckland",{s:{f:"+1300",t:"+1200",n:"NZST",s:"19700405T030000",r:{m:4,d:"1SU"}},d:{f:"+1200",t:"+1300",n:"NZDT",s:"19700927T020000",r:{m:9,d:"-1SU"}}}],["Pacific/Bougainville",{s:{f:"+1100",n:"+11"}}],["Pacific/Chatham",{s:{f:"+1345",t:"+1245",n:"+1245",s:"19700405T034500",r:{m:4,d:"1SU"}},d:{f:"+1245",t:"+1345",n:"+1345",s:"19700927T024500",r:{m:9,d:"-1SU"}}}],["Pacific/Chuuk",{s:{f:"+1000",n:"+10"}}],["Pacific/Easter",{s:{f:"-0500",t:"-0600",n:"-06",s:"19700404T220000",r:{m:4,d:"1SA"}},d:{f:"-0600",t:"-0500",n:"-05",s:"19700905T220000",r:{m:9,d:"1SA"}}}],["Pacific/Efate",{s:{f:"+1100",n:"+11"}}],["Pacific/Enderbury",{s:{f:"+1300",n:"+13"}}],["Pacific/Fakaofo",{s:{f:"+1300",n:"+13"}}],["Pacific/Fiji",{s:{f:"+1300",t:"+1200",n:"+12",s:"19700118T030000",r:{m:1,d:"-2SU"}},d:{f:"+1200",t:"+1300",n:"+13",s:"19701101T020000",r:{m:11,d:"1SU"}}}],["Pacific/Funafuti",{s:{f:"+1200",n:"+12"}}],["Pacific/Galapagos",{s:{f:"-0600",n:"-06"}}],["Pacific/Gambier",{s:{f:"-0900",n:"-09"}}],["Pacific/Guadalcanal",{s:{f:"+1100",n:"+11"}}],["Pacific/Guam",{s:{f:"+1000",n:"ChST"}}],["Pacific/Honolulu",{s:{f:"-1000",n:"HST"}}],["Pacific/Kiritimati",{s:{f:"+1400",n:"+14"}}],["Pacific/Kosrae",{s:{f:"+1100",n:"+11"}}],["Pacific/Kwajalein",{s:{f:"+1200",n:"+12"}}],["Pacific/Majuro",{s:{f:"+1200",n:"+12"}}],["Pacific/Marquesas",{s:{f:"-0930",n:"-0930"}}],["Pacific/Midway",{s:{f:"-1100",n:"SST"}}],["Pacific/Nauru",{s:{f:"+1200",n:"+12"}}],["Pacific/Niue",{s:{f:"-1100",n:"-11"}}],["Pacific/Norfolk",{s:{f:"+1100",n:"+11"}}],["Pacific/Noumea",{s:{f:"+1100",n:"+11"}}],["Pacific/Pago_Pago",{s:{f:"-1100",n:"SST"}}],["Pacific/Palau",{s:{f:"+0900",n:"+09"}}],["Pacific/Pitcairn",{s:{f:"-0800",n:"-08"}}],["Pacific/Pohnpei",{s:{f:"+1100",n:"+11"}}],["Pacific/Port_Moresby",{s:{f:"+1000",n:"+10"}}],["Pacific/Rarotonga",{s:{f:"-1000",n:"-10"}}],["Pacific/Saipan",{s:{f:"+1000",n:"ChST"}}],["Pacific/Tahiti",{s:{f:"-1000",n:"-10"}}],["Pacific/Tarawa",{s:{f:"+1200",n:"+12"}}],["Pacific/Tongatapu",{s:{f:"+1300",n:"+13"}}],["Pacific/Wake",{s:{f:"+1200",n:"+12"}}],["Pacific/Wallis",{s:{f:"+1200",n:"+12"}}]])),ct}var Jt;function Je(){if(Jt)return at;Jt=1,Object.defineProperty(at,"__esModule",{value:!0}),at.getZoneString=at.getZoneLines=void 0;const r=Ze();function t(a){const{n:i,f:o,t:n,r:l,s:u}=a;return[`TZNAME:${i}`,`TZOFFSETFROM:${o}`,`TZOFFSETTO:${n||o}`,`DTSTART:${u||r.defaultStart}`,...l?[`RRULE:FREQ=${l.f||"YEARLY"};BYMONTH=${l.m};BYDAY=${l.d}`]:[]]}function e(a,i=!0){const o=r.zonesMap.get(a);if(o){const{s:n,d:l}=o;return[...i?["BEGIN:VTIMEZONE"]:[],`TZID:${a}`,"BEGIN:STANDARD",...t(n),"END:STANDARD",...l?["BEGIN:DAYLIGHT",...t(l),"END:DAYLIGHT"]:[],...i?["END:VTIMEZONE"]:[]]}}at.getZoneLines=e;function s(a,i=!0){return e(a,i)?.join(`\r `)}return at.getZoneString=s,at}var $e=Je();class Nt{static fromString(t){return new Nt(t)}constructor(t){this.value=t}icaltype="binary";decodeValue(){return this._b64_decode(this.value)}setEncodedValue(t){this.value=this._b64_encode(t)}_b64_encode(t){let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",s,a,i,o,n,l,u,c,d=0,m=0,p="",y=[];if(!t)return t;do s=t.charCodeAt(d++),a=t.charCodeAt(d++),i=t.charCodeAt(d++),c=s<<16|a<<8|i,o=c>>18&63,n=c>>12&63,l=c>>6&63,u=c&63,y[m++]=e.charAt(o)+e.charAt(n)+e.charAt(l)+e.charAt(u);while(d>16&255,a=c>>8&255,i=c&255,l==64?y[m++]=String.fromCharCode(s):u==64?y[m++]=String.fromCharCode(s,a):y[m++]=String.fromCharCode(s,a,i);while(ds)-(e0?-1:0}toString(){return this.start+"/"+(this.end||this.duration)}toJSON(){return[this.start.toString(),(this.end||this.duration).toString()]}toICALString(){return this.start.toICALString()+"/"+(this.end||this.duration).toICALString()}}class h{static _dowCache={};static _wnCache={};static daysInMonth(t,e){let s=[0,31,28,31,30,31,30,31,31,30,31,30,31],a=30;return t<1||t>12||(a=s[t],t==2&&(a+=h.isLeapYear(e))),a}static isLeapYear(t){return t<=1752?t%4==0:t%4==0&&t%100!=0||t%400==0}static fromDayOfYear(t,e){let s=e,a=t,i=new h;i.auto_normalize=!1;let o=h.isLeapYear(s)?1:0;if(a<1)return s--,o=h.isLeapYear(s)?1:0,a+=h.daysInYearPassedMonth[o][12],h.fromDayOfYear(a,s);if(a>h.daysInYearPassedMonth[o][12])return o=h.isLeapYear(s)?1:0,a-=h.daysInYearPassedMonth[o][12],s++,h.fromDayOfYear(a,s);i.year=s,i.isDate=!0;for(let n=11;n>=0;n--)if(a>h.daysInYearPassedMonth[o][n]){i.month=n+1,i.day=a-h.daysInYearPassedMonth[o][n];break}return i.auto_normalize=!0,i}static fromStringv2(t){return new h({year:parseInt(t.slice(0,4),10),month:parseInt(t.slice(5,7),10),day:parseInt(t.slice(8,10),10),isDate:!0})}static fromDateString(t){return new h({year:O(t.slice(0,4)),month:O(t.slice(5,7)),day:O(t.slice(8,10)),isDate:!0})}static fromDateTimeString(t,e){if(t.length<19)throw new Error('invalid date-time value: "'+t+'"');let s,a;t.slice(-1)==="Z"?s=T.utcTimezone:e&&(a=e.getParameter("tzid"),e.parent&&(e.parent.name==="standard"||e.parent.name==="daylight"?s=T.localTimezone:a&&(s=e.parent.getTimeZoneByID(a))));const i={year:O(t.slice(0,4)),month:O(t.slice(5,7)),day:O(t.slice(8,10)),hour:O(t.slice(11,13)),minute:O(t.slice(14,16)),second:O(t.slice(17,19))};return a&&!s&&(i.timezone=a),new h(i,s)}static fromString(t,e){return t.length>10?h.fromDateTimeString(t,e):h.fromDateString(t)}static fromJSDate(t,e){return new h().fromJSDate(t,e)}static fromData=function(t,e){return new h().fromData(t,e)};static now(){return h.fromJSDate(new Date,!1)}static weekOneStarts(t,e){let s=h.fromData({year:t,month:1,day:1,isDate:!0}),a=s.dayOfWeek(),i=e||h.DEFAULT_WEEK_START;return a>h.THURSDAY&&(s.day+=7),i>h.THURSDAY&&(s.day-=7),s.day-=a-i,s}static getDominicalLetter(t){let e="GFEDCBA",s=(t+(t/4|0)+(t/400|0)-(t/100|0)-1)%7;return h.isLeapYear(t)?e[(s+6)%7]+e[s]:e[s]}static#t=null;static get epochTime(){return this.#t||(this.#t=h.fromData({year:1970,month:1,day:1,hour:0,minute:0,second:0,isDate:!1,timezone:"Z"})),this.#t}static _cmp_attr(t,e,s){return t[s]>e[s]?1:t[s]=0){n.day=1,i!=0&&i--,o=n.day;let l=n.dayOfWeek(),u=t-l;u<0&&(u+=7),o+=u,o-=t,a=t}else{n.day=s;let l=n.dayOfWeek();i++,a=l-t,a<0&&(a+=7),a=s-a}return a+=i*7,o+a}isNthWeekDay(t,e){let s=this.dayOfWeek();return e===0&&s===t||this.nthWeekDay(t,e)===this.day}weekNumber(t){let e=(this.year<<12)+(this.month<<8)+(this.day<<3)+t;if(e in h._wnCache)return h._wnCache[e];let s,a=this.clone();a.isDate=!0;let i=this.year;a.month==12&&a.day>25?(s=h.weekOneStarts(i+1,t),a.compare(s)<0?s=h.weekOneStarts(i,t):i++):(s=h.weekOneStarts(i,t),a.compare(s)<0&&(s=h.weekOneStarts(--i,t)));let o=a.subtractDate(s).toSeconds()/86400,n=C(o/7)+1;return h._wnCache[e]=n,n}addDuration(t){let e=t.isNegative?-1:1,s=this.second,a=this.minute,i=this.hour,o=this.day;s+=e*t.seconds,a+=e*t.minutes,i+=e*t.hours,o+=e*t.days,o+=e*7*t.weeks,this.second=s,this.minute=a,this.hour=i,this.day=o,this._cachedUnixTime=null}subtractDate(t){let e=this.toUnixTime()+this.utcOffset(),s=t.toUnixTime()+t.utcOffset();return M.fromSeconds(e-s)}subtractDateTz(t){let e=this.toUnixTime(),s=t.toUnixTime();return M.fromSeconds(e-s)}compare(t){if(t instanceof K)return-1*t.compare(this);{let e=this.toUnixTime(),s=t.toUnixTime();return e>s?1:s>e?-1:0}}compareDateOnlyTz(t,e){let s=this.convertToZone(e),a=t.convertToZone(e),i=0;return(i=h._cmp_attr(s,a,"year"))!=0||(i=h._cmp_attr(s,a,"month"))!=0||(i=h._cmp_attr(s,a,"day"))!=0,i}convertToZone(t){let e=this.clone(),s=this.zone.tzid==t.tzid;return!this.isDate&&!s&&T.convert_time(e,this.zone,t),e.zone=t,e}utcOffset(){return this.zone==T.localTimezone||this.zone==T.utcTimezone?0:this.zone.utcOffset(this)}toICALString(){let t=this.toString();return t.length>10?b.icalendar.value["date-time"].toICAL(t):b.icalendar.value.date.toICAL(t)}toString(){let t=this.year+"-"+k(this.month)+"-"+k(this.day);return this.isDate||(t+="T"+k(this.hour)+":"+k(this.minute)+":"+k(this.second),this.zone===T.utcTimezone&&(t+="Z")),t}toJSDate(){return this.zone==T.localTimezone?this.isDate?new Date(this.year,this.month-1,this.day):new Date(this.year,this.month-1,this.day,this.hour,this.minute,this.second,0):new Date(this.toUnixTime()*1e3)}_normalize(){return this._time.isDate&&(this._time.hour=0,this._time.minute=0,this._time.second=0),this.adjust(0,0,0,0),this}adjust(t,e,s,a,i){let o,n,l=0,u=0,c,d,m,p,y,f=i||this._time;if(f.isDate||(c=f.second+a,f.second=c%60,o=C(c/60),f.second<0&&(f.second+=60,o--),d=f.minute+s+o,f.minute=d%60,n=C(d/60),f.minute<0&&(f.minute+=60,n--),m=f.hour+e+n,f.hour=m%24,l=C(m/24),f.hour<0&&(f.hour+=24,l--)),f.month>12?u=C((f.month-1)/12):f.month<1&&(u=C(f.month/12)-1),f.year+=u,f.month-=12*u,p=f.day+t+l,p>0)for(;y=h.daysInMonth(f.month,f.year),!(p<=y);)f.month++,f.month>12&&(f.year++,f.month=1),p-=y;else for(;p<=0;)f.month==1?(f.year--,f.month=12):f.month--,p+=h.daysInMonth(f.month,f.year);return f.day=p,this._cachedUnixTime=null,this}fromUnixTime(t){this.zone=T.utcTimezone;let e=new Date(t*1e3);this.year=e.getUTCFullYear(),this.month=e.getUTCMonth()+1,this.day=e.getUTCDate(),this._time.isDate?(this.hour=0,this.minute=0,this.second=0):(this.hour=e.getUTCHours(),this.minute=e.getUTCMinutes(),this.second=e.getUTCSeconds()),this._cachedUnixTime=null}toUnixTime(){if(this._cachedUnixTime!==null)return this._cachedUnixTime;let t=this.utcOffset(),e=Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second-t);return this._cachedUnixTime=e/1e3,this._cachedUnixTime}toJSON(){let t=["year","month","day","hour","minute","second","isDate"],e=Object.create(null),s=0,a=t.length,i;for(;s1)throw new it("invalid ical body. component began but did not end");return t=null,e.length==1?e[0]:e}g.property=function(r,t){let e={component:[[],[]],designSet:t||b.defaultSet};return g._handleContentLine(r,e),e.component[1][0]},g.component=function(r){return g(r)};class it extends Error{name=this.constructor.name}g.ParserError=it,g._handleContentLine=function(r,t){let e=r.indexOf(At),s=r.indexOf(xt),a,i,o,n,l={};s!==-1&&e!==-1&&s>e&&(s=-1);let u;if(s!==-1){if(o=r.slice(0,Math.max(0,s)).toLowerCase(),u=g._parseParameters(r.slice(Math.max(0,s)),0,t.designSet),u[2]==-1)throw new it("Invalid parameters in '"+r+"'");l=u[0];let U;if(typeof u[1]=="string"?U=u[1].length:U=u[1].reduce((ht,rt)=>ht+rt.length,0),a=U+u[2]+s,(i=r.slice(Math.max(0,a)).indexOf(At))!==-1)n=r.slice(Math.max(0,a+i+1));else throw new it("Missing parameter value in '"+r+"'")}else if(e!==-1){if(o=r.slice(0,Math.max(0,e)).toLowerCase(),n=r.slice(Math.max(0,e+1)),o==="begin"){let U=[n.toLowerCase(),[],[]];t.stack.length===1?t.component.push(U):t.component[2].push(U),t.stack.push(t.component),t.component=U,t.designSet||(t.designSet=b.getDesignSet(t.component[0]));return}else if(o==="end"){t.component=t.stack.pop();return}}else throw new it('invalid line (no token ";" or ":") "'+r+'"');let c,d=!1,m=!1,p,y,f;t.designSet.propertyGroups&&o.indexOf(".")!==-1?(y=o.split("."),l.group=y[0],f=y[1]):f=o,f in t.designSet.property&&(p=t.designSet.property[f],"multiValue"in p&&(d=p.multiValue),"structuredValue"in p&&(m=p.structuredValue),n&&"detectType"in p&&(c=p.detectType(n))),c||("value"in l?c=l.value.toLowerCase():p?c=p.defaultType:c=r0),delete l.value;let A;d&&m?(n=g._parseMultiValue(n,m,c,[],d,t.designSet,m),A=[f,l,c,n]):d?(A=[f,l,c],g._parseMultiValue(n,d,c,A,null,t.designSet,!1)):m?(n=g._parseMultiValue(n,m,c,[],null,t.designSet,m),A=[f,l,c,n]):(n=g._parseValue(n,c,t.designSet,!1),A=[f,l,c,n]),t.component[0]==="vcard"&&t.component[1].length===0&&!(o==="version"&&n==="4.0")&&(t.designSet=b.getDesignSet("vcard3")),t.component[1].push(A)},g._parseValue=function(r,t,e,s){return t in e.value&&"fromICAL"in e.value[t]?e.value[t].fromICAL(r,s):r},g._parseParameters=function(r,t,e){let s=t,a=0,i=s0,o={},n,l,u,c=-1,d,m,p;for(;a!==!1&&(a=r.indexOf(i,a+1))!==-1;){if(n=r.slice(s+1,a),n.length==0)throw new it("Empty parameter name in '"+r+"'");if(l=n.toLowerCase(),p=!1,m=!1,l in e.param&&e.param[l].valueType?d=e.param[l].valueType:d=a0,l in e.param&&(m=e.param[l].multiValue,e.param[l].multiValueSeparateDQuote&&(p=g._rfc6868Escape('"'+m+'"'))),r[a+1]==='"'){if(c=a+2,a=r.indexOf('"',c),m&&a!=-1){let A=!0;for(;A;)r[a+1]==m&&r[a+2]=='"'?a=r.indexOf('"',a+3):A=!1}if(a===-1)throw new it('invalid line (no matching double quote) "'+r+'"');u=r.slice(c,a),s=r.indexOf(xt,a);let f=r.indexOf(At,a);(s===-1||f!==-1&&s>f)&&(a=!1)}else{c=a+1;let f=r.indexOf(xt,c),A=r.indexOf(At,c);A!==-1&&f>A?(f=A,a=!1):f===-1?(A===-1?f=r.length:f=A,a=!1):(s=f,a=f),u=r.slice(c,f)}const y=u.length;if(u=g._rfc6868Escape(u),c+=y-u.length,m){let f=p||m;u=g._parseMultiValue(u,f,d,[],null,e)}else u=g._parseValue(u,d,e);m&&l in o?Array.isArray(o[l])?o[l].push(u):o[l]=[o[l],u]:o[l]=u}return[o,u,c]},g._rfc6868Escape=function(r){return r.replace(/\^['n^]/g,function(t){return i0[t]})},g._parseMultiValue=function(r,t,e,s,a,i,o){let n=0,l=0,u;if(t.length===0)return r;for(;(n=me(r,t,l))!==-1;)u=r.slice(l,n),a?u=g._parseMultiValue(u,a,e,[],null,i,o):u=g._parseValue(u,e,i,o),s.push(u),l=n+t.length;return u=r.slice(l),a?u=g._parseMultiValue(u,a,e,[],null,i,o):u=g._parseValue(u,e,i,o),s.push(u),s.length==1?s[0]:s},g._eachLine=function(r,t){let e=r.length,s=r.search(e0),a=s,i,o,n;do a=r.indexOf(` `,s)+1,a>1&&r[a-2]==="\r"?n=2:n=1,a===0&&(a=e,n=0),o=r[s],o===" "||o===" "?i+=r.slice(s+1,a-n):(i&&t(null,i),i=r.slice(s,a-n)),s=a;while(a!==e);i=i.trim(),i.length&&t(null,i)};const n0=["tzid","location","tznames","latitude","longitude"];class T{static _compare_change_fn(t,e){return t.yeare.year?1:t.monthe.month?1:t.daye.day?1:t.houre.hour?1:t.minutee.minute?1:t.seconde.second?1:0}static convert_time(t,e,s){if(t.isDate||e.tzid==s.tzid||e==T.localTimezone||s==T.localTimezone)return t.zone=s,t;let a=e.utcOffset(t);return t.adjust(0,0,0,-a),a=s.utcOffset(t),t.adjust(0,0,0,a),null}static fromData(t){return new T().fromData(t)}static#t=null;static get utcTimezone(){return this.#t||(this.#t=T.fromData({tzid:"UTC"})),this.#t}static#e=null;static get localTimezone(){return this.#e||(this.#e=T.fromData({tzid:"floating"})),this.#e}static adjust_change(t,e,s,a,i){return h.prototype.adjust.call(t,e,s,a,i,t)}static _minimumExpansionYear=-1;static EXTRA_COVERAGE=5;constructor(t){this.wrappedJSObject=this,this.fromData(t)}tzid="";location="";tznames="";latitude=0;longitude=0;component=null;expandedUntilYear=0;icalclass="icaltimezone";fromData(t){if(this.expandedUntilYear=0,this.changes=[],t instanceof z)this.component=t;else{if(t&&"component"in t)if(typeof t.component=="string"){let e=g(t.component);this.component=new z(e)}else t.component instanceof z?this.component=t.component:this.component=null;for(let e of n0)t&&e in t&&(this[e]=t[e])}return this.component instanceof z&&!this.tzid&&(this.tzid=this.component.getFirstPropertyValue("tzid")),this}utcOffset(t){if(this==T.utcTimezone||this==T.localTimezone||(this._ensureCoverage(t.year),!this.changes.length))return 0;let e={year:t.year,month:t.month,day:t.day,hour:t.hour,minute:t.minute,second:t.second},s=this._findNearbyChange(e),a=-1,i=1;for(;;){let n=lt(this.changes[s],!0);if(n.utcOffset=0?a=s:i=-1,i==-1&&a!=-1)break;if(s+=i,s<0)return 0;if(s>=this.changes.length)break}let o=this.changes[a];if(o.utcOffset-o.prevUtcOffset<0&&a>0){let n=lt(o,!0);if(T.adjust_change(n,0,0,0,n.prevUtcOffset),T._compare_change_fn(e,n)<0){let l=this.changes[a-1],u=!1;o.is_daylight!=u&&l.is_daylight==u&&(o=l)}}return o.utcOffset}_findNearbyChange(t){let e=nt(this.changes,t,T._compare_change_fn);return e>=this.changes.length?this.changes.length-1:e}_ensureCoverage(t){if(T._minimumExpansionYear==-1){let s=h.now();T._minimumExpansionYear=s.year}let e=t;if(ee||!d));)i.year=d.year,i.month=d.month,i.day=d.day,i.hour=d.hour,i.minute=d.minute,i.second=d.second,i.isDate=d.isDate,T.adjust_change(i,0,0,0,-i.prevUtcOffset),s.push(i)}}return s}toString(){return this.tznames?this.tznames:this.tzid}}let N=null;const wt={get count(){return N===null?0:Object.keys(N).length},reset:function(){N=Object.create(null);let r=T.utcTimezone;N.Z=r,N.UTC=r,N.GMT=r},_hard_reset:function(){N=null},has:function(r){return N===null?!1:!!N[r]},get:function(r){return N===null&&this.reset(),N[r]},register:function(r,t){if(N===null&&this.reset(),typeof r=="string"&&t instanceof T&&([r,t]=[t,r]),t||(r instanceof T?t=r.tzid:r.name==="vtimezone"&&(r=new T(r),t=r.tzid)),!t)throw new TypeError("Neither a timezone nor a name was passed");if(r instanceof T)N[t]=r;else throw new TypeError("timezone must be ICAL.Timezone or ICAL.Component")},remove:function(r){return N===null?null:delete N[r]}};function o0(r){let t,e,s,a,i;if(!r||r.name!=="vcalendar")return r;for(t=r.getAllSubcomponents(),e=[],s={},i=0;i"u"))return r instanceof t?r:new t(r)}function me(r,t,e){for(;(e=r.indexOf(t,e))!==-1;)if(e>0&&r[e-1]==="\\")e+=1;else return e;return-1}function nt(r,t,e){if(!r.length)return 0;let s=0,a=r.length-1,i,o;for(;s<=a;)if(i=s+Math.floor((a-s)/2),o=e(t,r[i]),o<0)a=i-1;else if(o>0)s=i+1;else break;return o<0?i:o>0?i+1:i}function lt(r,t){if(!r||typeof r!="object")return r;if(r instanceof Date)return new Date(r.getTime());if("clone"in r)return r.clone();if(Array.isArray(r)){let e=[];for(let s=0;s65535?2:1:(t+=L.newLineChar+" "+e.slice(0,Math.max(0,s)),e=e.slice(Math.max(0,s)),s=a=0)}return t.slice(L.newLineChar.length+1)}function k(r){switch(typeof r!="string"&&(typeof r=="number"&&(r=parseInt(r)),r=String(r)),r.length){case 0:return"00";case 1:return"0"+r;default:return r}}function C(r){return r<0?Math.ceil(r):Math.floor(r)}function ut(r,t){for(let e in r){let s=Object.getOwnPropertyDescriptor(r,e);s&&!Object.getOwnPropertyDescriptor(t,e)&&Object.defineProperty(t,e,s)}return t}var l0=Object.freeze({__proto__:null,binsearchInsert:nt,clone:lt,extend:ut,foldline:fe,formatClassType:q,isStrictlyNaN:pt,pad2:k,strictParseInt:O,trunc:C,unescapedIndexOf:me,updateTimezones:o0});class V{static fromString(t){let e={};return e.factor=t[0]==="+"?1:-1,e.hours=O(t.slice(1,3)),e.minutes=O(t.slice(4,6)),new V(e)}static fromSeconds(t){let e=new V;return e.fromSeconds(t),e}constructor(t){this.fromData(t)}hours=0;minutes=0;factor=1;icaltype="utc-offset";clone(){return V.fromSeconds(this.toSeconds())}fromData(t){if(t)for(let[e,s]of Object.entries(t))this[e]=s;this._normalize()}fromSeconds(t){let e=Math.abs(t);return this.factor=t<0?-1:1,this.hours=C(e/3600),e-=this.hours*3600,this.minutes=C(e/60),this}toSeconds(){return this.factor*(60*this.minutes+3600*this.hours)}compare(t){let e=this.toSeconds(),s=t.toSeconds();return(e>s)-(s>e)}_normalize(){let t=this.toSeconds(),e=this.factor;for(;t<-43200;)t+=97200;for(;t>50400;)t-=97200;this.fromSeconds(t),t==0&&(this.factor=e)}toICALString(){return b.icalendar.value["utc-offset"].toICAL(this.toString())}toString(){return(this.factor==1?"+":"-")+k(this.hours)+":"+k(this.minutes)}}class tt extends h{static fromDateAndOrTimeString(t,e){function s(f,A,U){return f?O(f.slice(A,A+U)):null}let a=t.split("T"),i=a[0],o=a[1],n=o?b.vcard.value.time._splitZone(o):[],l=n[0],u=n[1],c=i?i.length:0,d=u?u.length:0,m=i&&i[0]=="-"&&i[1]=="-",p=u&&u[0]=="-",y={year:m?null:s(i,0,4),month:m&&(c==4||c==7)?s(i,2,2):c==7||c==10?s(i,5,2):null,day:c==5?s(i,3,2):c==7&&m?s(i,5,2):c==10?s(i,8,2):null,hour:p?null:s(u,0,2),minute:p&&d==3?s(u,1,2):d>4?p?s(u,1,2):s(u,3,2):null,second:d==4?s(u,2,2):d==6?s(u,4,2):d==8?s(u,6,2):null};return l=="Z"?l=T.utcTimezone:l&&l[3]==":"?l=V.fromString(l):l=null,new tt(y,l,e)}constructor(t,e,s){super(t,e),this.icaltype=s||"date-and-or-time"}icalclass="vcardtime";icaltype="date-and-or-time";clone(){return new tt(this._time,this.zone,this.icaltype)}_normalize(){return this}utcOffset(){return this.zone instanceof V?this.zone.toSeconds():h.prototype.utcOffset.apply(this,arguments)}toICALString(){return b.vcard.value[this.icaltype].toICAL(this.toString())}toString(){let t=this.year,e=this.month,s=this.day,a=this.hour,i=this.minute,o=this.second,n=t!==null,l=e!==null,u=s!==null,c=a!==null,d=i!==null,m=o!==null,p=(n?k(t)+(l||u?"-":""):l||u?"--":"")+(l?k(e):"")+(u?"-"+k(s):""),y=(c?k(a):"-")+(c&&d?":":"")+(d?k(i):"")+(!c&&!d?"-":"")+(d&&m?":":"")+(m?k(o):""),f;switch(this.zone===T.utcTimezone?f="Z":this.zone instanceof V?f=this.zone.toString():this.zone===T.localTimezone?f="":this.zone instanceof T?f=V.fromSeconds(this.zone.utcOffset(this)).toString():f="",this.icaltype){case"time":return y+f;case"date-and-or-time":case"date-time":return p+(y=="--"?"":"T"+y+f);case"date":return p}return null}}class R{static _indexMap={BYSECOND:0,BYMINUTE:1,BYHOUR:2,BYDAY:3,BYMONTHDAY:4,BYYEARDAY:5,BYWEEKNO:6,BYMONTH:7,BYSETPOS:8};static _expandMap={SECONDLY:[1,1,1,1,1,1,1,1],MINUTELY:[2,1,1,1,1,1,1,1],HOURLY:[2,2,1,1,1,1,1,1],DAILY:[2,2,2,1,1,1,1,1],WEEKLY:[2,2,2,2,3,3,1,1],MONTHLY:[2,2,2,2,2,3,3,1],YEARLY:[2,2,2,2,2,2,2,2]};static UNKNOWN=0;static CONTRACT=1;static EXPAND=2;static ILLEGAL=3;constructor(t){this.fromData(t)}completed=!1;rule=null;dtstart=null;last=null;occurrence_number=0;by_indices=null;initialized=!1;by_data=null;days=null;days_index=0;fromData(t){if(this.rule=q(t.rule,w),!this.rule)throw new Error("iterator requires a (ICAL.Recur) rule");if(this.dtstart=q(t.dtstart,h),!this.dtstart)throw new Error("iterator requires a (ICAL.Time) dtstart");if(t.by_data?this.by_data=t.by_data:this.by_data=lt(this.rule.parts,!0),t.occurrence_number&&(this.occurrence_number=t.occurrence_number),this.days=t.days||[],t.last&&(this.last=q(t.last,h)),this.by_indices=t.by_indices,this.by_indices||(this.by_indices={BYSECOND:0,BYMINUTE:0,BYHOUR:0,BYDAY:0,BYMONTH:0,BYWEEKNO:0,BYMONTHDAY:0}),this.initialized=t.initialized||!1,!this.initialized)try{this.init()}catch(e){if(e instanceof gt)this.completed=!0;else throw e}}init(){this.initialized=!0,this.last=this.dtstart.clone();let t=this.by_data;if("BYDAY"in t&&this.sort_byday_rules(t.BYDAY),"BYYEARDAY"in t&&("BYMONTH"in t||"BYWEEKNO"in t||"BYMONTHDAY"in t))throw new Error("Invalid BYYEARDAY rule");if("BYWEEKNO"in t&&"BYMONTHDAY"in t)throw new Error("BYWEEKNO does not fit to BYMONTHDAY");if(this.rule.freq=="MONTHLY"&&("BYYEARDAY"in t||"BYWEEKNO"in t))throw new Error("For MONTHLY recurrences neither BYYEARDAY nor BYWEEKNO may appear");if(this.rule.freq=="WEEKLY"&&("BYYEARDAY"in t||"BYMONTHDAY"in t))throw new Error("For WEEKLY recurrences neither BYMONTHDAY nor BYYEARDAY may appear");if(this.rule.freq!="YEARLY"&&"BYYEARDAY"in t)throw new Error("BYYEARDAY may only appear in YEARLY rules");if(this.last.second=this.setup_defaults("BYSECOND","SECONDLY",this.dtstart.second),this.last.minute=this.setup_defaults("BYMINUTE","MINUTELY",this.dtstart.minute),this.last.hour=this.setup_defaults("BYHOUR","HOURLY",this.dtstart.hour),this.last.day=this.setup_defaults("BYMONTHDAY","DAILY",this.dtstart.day),this.last.month=this.setup_defaults("BYMONTH","MONTHLY",this.dtstart.month),this.rule.freq=="WEEKLY")if("BYDAY"in t){let[,e]=this.ruleDayOfWeek(t.BYDAY[0],this.rule.wkst),s=e-this.last.dayOfWeek(this.rule.wkst);(this.last.dayOfWeek(this.rule.wkst)=0||s<0)&&(this.last.day+=s)}else{let e=w.numericDayToIcalDay(this.dtstart.dayOfWeek());t.BYDAY=[e]}if(this.rule.freq=="YEARLY"){const e=this.rule.until?this.rule.until.year:2e4;for(;this.last.year<=e&&(this.expand_year_days(this.last.year),!(this.days.length>0));)this.increment_year(this.rule.interval);if(this.days.length==0)throw new gt;if(!this._nextByYearDay()&&!this.next_year()&&!this.next_year()&&!this.next_year())throw new gt}if(this.rule.freq=="MONTHLY"){if(this.has_by_data("BYDAY")){let e=null,s=this.last.clone(),a=h.daysInMonth(this.last.month,this.last.year);for(let i of this.by_data.BYDAY){this.last=s.clone();let[o,n]=this.ruleDayOfWeek(i),l=this.last.nthWeekDay(n,o);if(o>=6||o<=-6)throw new Error("Malformed values in BYDAY part");if(l>a||l<=0){if(e&&e.month==s.month)continue;for(;l>a||l<=0;)this.increment_month(),a=h.daysInMonth(this.last.month,this.last.year),l=this.last.nthWeekDay(n,o)}this.last.day=l,(!e||this.last.compare(e)<0)&&(e=this.last.clone())}if(this.last=e.clone(),this.has_by_data("BYMONTHDAY")&&this._byDayAndMonthDay(!0),this.last.day>a||this.last.day==0)throw new Error("Malformed values in BYDAY part")}else if(this.has_by_data("BYMONTHDAY")){this.last.day=1;let e=this.normalizeByMonthDayRules(this.last.year,this.last.month,this.rule.parts.BYMONTHDAY).filter(s=>s>=this.last.day);if(e.length)this.last.day=e[0],this.by_data.BYMONTHDAY=e;else if(!this.next_month()&&!this.next_month()&&!this.next_month())throw new gt}}}next(t=!1){let e=this.last?this.last.clone():null;if((this.rule.count&&this.occurrence_number>=this.rule.count||this.rule.until&&this.last.compare(this.rule.until)>0)&&(this.completed=!0),this.completed)return null;if(this.occurrence_number==0&&this.last.compare(this.dtstart)>=0)return this.occurrence_number++,this.last;let s,a=0;do switch(s=1,this.rule.freq){case"SECONDLY":this.next_second();break;case"MINUTELY":this.next_minute();break;case"HOURLY":this.next_hour();break;case"DAILY":this.next_day();break;case"WEEKLY":this.next_week();break;case"MONTHLY":if(s=this.next_month(),s)a=0;else if(++a==336)return this.completed=!0,null;break;case"YEARLY":if(s=this.next_year(),s)a=0;else if(++a==28)return this.completed=!0,null;break;default:return null}while(!this.check_contracting_rules()||this.last.compare(this.dtstart)<0||!s);if(this.last.compare(e)==0){if(t)throw new Error("Same occurrence found twice, protecting you from death by recursion");this.next(!0)}return this.rule.until&&this.last.compare(this.rule.until)>0?(this.completed=!0,null):(this.occurrence_number++,this.last)}next_second(){return this.next_generic("BYSECOND","SECONDLY","second","minute")}increment_second(t){return this.increment_generic(t,"second",60,"minute")}next_minute(){return this.next_generic("BYMINUTE","MINUTELY","minute","hour","next_second")}increment_minute(t){return this.increment_generic(t,"minute",60,"hour")}next_hour(){return this.next_generic("BYHOUR","HOURLY","hour","monthday","next_minute")}increment_hour(t){this.increment_generic(t,"hour",24,"monthday")}next_day(){let t=this.rule.freq=="DAILY";return this.next_hour()==0||(t?this.increment_monthday(this.rule.interval):this.increment_monthday(1)),0}next_week(){let t=0;if(this.next_weekday_by_week()==0)return t;if(this.has_by_data("BYWEEKNO")){this.by_indices.BYWEEKNO++,this.by_indices.BYWEEKNO==this.by_data.BYWEEKNO.length&&(this.by_indices.BYWEEKNO=0,t=1),this.last.month=1,this.last.day=1;let e=this.by_data.BYWEEKNO[this.by_indices.BYWEEKNO];this.last.day+=7*e,t&&this.increment_year(1)}else this.increment_monthday(7*this.rule.interval);return t}normalizeByMonthDayRules(t,e,s){let a=h.daysInMonth(e,t),i=[],o=0,n=s.length,l;for(;oa)){if(l<0)l=a+(l+1);else if(l===0)continue;i.indexOf(l)===-1&&i.push(l)}}return i.sort(function(u,c){return u-c})}_byDayAndMonthDay(t){let e,s=this.by_data.BYDAY,a,i=0,o,n=s.length,l=0,u,c=this,d=this.last.day;function m(){for(u=h.daysInMonth(c.last.month,c.last.year),e=c.normalizeByMonthDayRules(c.last.year,c.last.month,c.by_data.BYMONTHDAY),o=e.length;e[i]<=d&&!(t&&e[i]==d)&&iu){p();continue}let f=e[i++];if(f>=a)d=f;else{p();continue}for(let A=0;Ae&&(this.last.day=1,this.increment_month(),this.is_day_in_byday(this.last)?(!this.has_by_data("BYSETPOS")||this.check_set_position(1))&&(t=1):t=0)}else if(this.has_by_data("BYMONTHDAY")){if(this.by_indices.BYMONTHDAY++,this.by_indices.BYMONTHDAY>=this.by_data.BYMONTHDAY.length&&(this.by_indices.BYMONTHDAY=0,this.increment_month(),this.by_indices.BYMONTHDAY>=this.by_data.BYMONTHDAY.length))return 0;let e=h.daysInMonth(this.last.month,this.last.year),s=this.by_data.BYMONTHDAY[this.by_indices.BYMONTHDAY];s<0&&(s=e+s+1),s>e?(this.last.day=1,t=this.is_day_in_byday(this.last)):this.last.day=s}else{this.increment_month();let e=h.daysInMonth(this.last.month,this.last.year);this.by_data.BYMONTHDAY[0]>e?t=0:this.last.day=this.by_data.BYMONTHDAY[0]}return t}next_weekday_by_week(){let t=0;if(this.next_hour()==0)return t;if(!this.has_by_data("BYDAY"))return 1;for(;;){let e=new h;this.by_indices.BYDAY++,this.by_indices.BYDAY==Object.keys(this.by_data.BYDAY).length&&(this.by_indices.BYDAY=0,t=1);let s=this.by_data.BYDAY[this.by_indices.BYDAY],a=this.ruleDayOfWeek(s)[1];a-=this.rule.wkst,a<0&&(a+=7),e.year=this.last.year,e.month=this.last.month,e.day=this.last.day;let i=e.startDoyWeek(this.rule.wkst);if(a+i<1&&!t)continue;let o=h.fromDayOfYear(i+a,this.last.year);return this.last.year=o.year,this.last.month=o.month,this.last.day=o.day,t}}next_year(){return this.next_hour()==0||(this.days.length==0||++this.days_index==this.days.length)&&(this.days_index=0,this.increment_year(this.rule.interval),this.has_by_data("BYMONTHDAY")&&(this.by_data.BYMONTHDAY=this.normalizeByMonthDayRules(this.last.year,this.last.month,this.rule.parts.BYMONTHDAY)),this.expand_year_days(this.last.year),this.days.length==0)?0:this._nextByYearDay()}_nextByYearDay(){let t=this.days[this.days_index],e=this.last.year;if(Math.abs(t)==366&&!h.isLeapYear(this.last.year))return 0;t<1&&(t+=1,e+=1);let s=h.fromDayOfYear(t,e);return this.last.day=s.day,this.last.month=s.month,1}ruleDayOfWeek(t,e){let s=t.match(/([+-]?[0-9])?(MO|TU|WE|TH|FR|SA|SU)/);if(s){let a=parseInt(s[1]||0,10);return t=w.icalDayToNumericDay(s[2],e),[a,t]}else return[0,0]}next_generic(t,e,s,a,i){let o=t in this.by_data,n=this.rule.freq==e,l=0;if(i&&this[i]()==0)return l;if(o){this.by_indices[t]++;let u=this.by_data[t];this.by_indices[t]==u.length&&(this.by_indices[t]=0,l=1),this.last[s]=u[this.by_indices[t]]}else n&&this["increment_"+s](this.rule.interval);return o&&l&&n&&this["increment_"+a](1),l}increment_monthday(t){for(let e=0;es&&(this.last.day-=s,this.increment_month())}}increment_month(){if(this.last.day=1,this.has_by_data("BYMONTH"))this.by_indices.BYMONTH++,this.by_indices.BYMONTH==this.by_data.BYMONTH.length&&(this.by_indices.BYMONTH=0,this.increment_year(1)),this.last.month=this.by_data.BYMONTH[this.by_indices.BYMONTH];else{this.rule.freq=="MONTHLY"?this.last.month+=this.rule.interval:this.last.month++,this.last.month--;let t=C(this.last.month/12);this.last.month%=12,this.last.month++,t!=0&&this.increment_year(t)}this.has_by_data("BYMONTHDAY")&&(this.by_data.BYMONTHDAY=this.normalizeByMonthDayRules(this.last.year,this.last.month,this.rule.parts.BYMONTHDAY))}increment_year(t){this.last.day=1,this.last.year+=t}increment_generic(t,e,s,a){this.last[e]+=t;let i=C(this.last[e]/s);this.last[e]%=s,i!=0&&this["increment_"+a](i)}has_by_data(t){return t in this.rule.parts}expand_year_days(t){let e=new h;this.days=[];let s={},a=["BYDAY","BYWEEKNO","BYMONTHDAY","BYMONTH","BYYEARDAY"];for(let n of a)n in this.rule.parts&&(s[n]=this.rule.parts[n]);if("BYMONTH"in s&&"BYWEEKNO"in s){let n=1,l={};e.year=t,e.isDate=!0;for(let u=0;u0?(A=U+(y-1)*7,A<=l&&this.days.push(c+A)):(A=ht+(y+1)*7,A>0&&this.days.push(c+A))}}this.days.sort(function(n,l){return n-l})}else if(i==2&&"BYDAY"in s&&"BYMONTHDAY"in s){let n=this.expand_by_day(t);for(let l of n){let u=h.fromDayOfYear(l,t);this.by_data.BYMONTHDAY.indexOf(u.day)>=0&&this.days.push(l)}}else if(i==3&&"BYDAY"in s&&"BYMONTHDAY"in s&&"BYMONTH"in s){let n=this.expand_by_day(t);for(let l of n){let u=h.fromDayOfYear(l,t);this.by_data.BYMONTH.indexOf(u.month)>=0&&this.by_data.BYMONTHDAY.indexOf(u.day)>=0&&this.days.push(l)}}else if(i==2&&"BYDAY"in s&&"BYWEEKNO"in s){let n=this.expand_by_day(t);for(let l of n){let u=h.fromDayOfYear(l,t).weekNumber(this.rule.wkst);this.by_data.BYWEEKNO.indexOf(u)&&this.days.push(l)}}else if(!(i==3&&"BYDAY"in s&&"BYWEEKNO"in s&&"BYMONTHDAY"in s))if(i==1&&"BYYEARDAY"in s)this.days=this.days.concat(this.by_data.BYYEARDAY);else if(i==2&&"BYYEARDAY"in s&&"BYDAY"in s){let n=h.isLeapYear(t)?366:365,l=new Set(this.expand_by_day(t));for(let u of this.by_data.BYYEARDAY)u<0&&(u+=n+1),l.has(u)&&this.days.push(u)}else this.days=[]}let o=h.isLeapYear(t)?366:365;return this.days.sort((n,l)=>(n<0&&(n+=o+1),l<0&&(l+=o+1),n-l)),0}expand_by_day(t){let e=[],s=this.last.clone();s.year=t,s.month=1,s.day=1,s.isDate=!0;let a=s.dayOfWeek();s.month=12,s.day=31,s.isDate=!0;let i=s.dayOfWeek(),o=s.dayOfYear();for(let n of this.by_data.BYDAY){let l=this.ruleDayOfWeek(n),u=l[0],c=l[1];if(u==0){let d=(c+7-a)%7+1;for(let m=d;m<=o;m+=7)e.push(m)}else if(u>0){let d;c>=a?d=c-a+1:d=c-a+8,e.push(d+(u-1)*7)}else{let d;u=-u,c<=i?d=o-i+c:d=o-i+c-7,e.push(d-(u-1)*7)}}return e}is_day_in_byday(t){if(this.by_data.BYDAY)for(let e of this.by_data.BYDAY){let s=this.ruleDayOfWeek(e),a=s[0],i=s[1],o=t.dayOfWeek();if(a==0&&i==o||t.nthWeekDay(i,a)==t.day)return 1}return 0}check_set_position(t){return this.has_by_data("BYSETPOS")?this.by_data.BYSETPOS.indexOf(t)!==-1:!1}sort_byday_rules(t){for(let e=0;ei){let o=t[e];t[e]=t[s],t[s]=o}}}check_contract_restriction(t,e){let s=R._indexMap[t],a=R._expandMap[this.rule.freq][s],i=!1;if(t in this.by_data&&a==R.CONTRACT){let o=this.by_data[t];for(let n of o)if(n==e){i=!0;break}}else i=!0;return i}check_contracting_rules(){let t=this.last.dayOfWeek(),e=this.last.weekNumber(this.rule.wkst),s=this.last.dayOfYear();return this.check_contract_restriction("BYSECOND",this.last.second)&&this.check_contract_restriction("BYMINUTE",this.last.minute)&&this.check_contract_restriction("BYHOUR",this.last.hour)&&this.check_contract_restriction("BYDAY",w.numericDayToIcalDay(t))&&this.check_contract_restriction("BYWEEKNO",e)&&this.check_contract_restriction("BYMONTHDAY",this.last.day)&&this.check_contract_restriction("BYMONTH",this.last.month)&&this.check_contract_restriction("BYYEARDAY",s)}setup_defaults(t,e,s){let a=R._indexMap[t];return R._expandMap[this.rule.freq][a]!=R.CONTRACT&&(t in this.by_data||(this.by_data[t]=[s]),this.rule.freq!=e)?this.by_data[t][0]:s}toJSON(){let t=Object.create(null);return t.initialized=this.initialized,t.rule=this.rule.toJSON(),t.dtstart=this.dtstart.toJSON(),t.by_data=this.by_data,t.days=this.days,t.last=this.last.toJSON(),t.by_indices=this.by_indices,t.occurrence_number=this.occurrence_number,t}}class gt extends Error{constructor(){super("Recurrence rule has no valid occurrences")}}const u0=/^(SU|MO|TU|WE|TH|FR|SA)$/,d0=/^([+-])?(5[0-3]|[1-4][0-9]|[1-9])?(SU|MO|TU|WE|TH|FR|SA)$/,pe={SU:h.SUNDAY,MO:h.MONDAY,TU:h.TUESDAY,WE:h.WEDNESDAY,TH:h.THURSDAY,FR:h.FRIDAY,SA:h.SATURDAY},c0=Object.fromEntries(Object.entries(pe).map(r=>r.reverse())),$t=["SECONDLY","MINUTELY","HOURLY","DAILY","WEEKLY","MONTHLY","YEARLY"];class w{static fromString(t){let e=this._stringToData(t,!1);return new w(e)}static fromData(t){return new w(t)}static _stringToData(t,e){let s=Object.create(null),a=t.split(";"),i=a.length;for(let o=0;o7&&(a-=7),c0[a]}constructor(t){this.wrappedJSObject=this,this.parts={},t&&typeof t=="object"&&this.fromData(t)}parts=null;interval=1;wkst=h.MONDAY;until=null;count=null;freq=null;icalclass="icalrecur";icaltype="recur";iterator(t){return new R({rule:this,dtstart:t})}clone(){return new w(this.toJSON())}isFinite(){return!!(this.count||this.until)}isByCount(){return!!(this.count&&!this.until)}addComponent(t,e){let s=t.toUpperCase();s in this.parts?this.parts[s].push(e):this.parts[s]=[e]}setComponent(t,e){this.parts[t.toUpperCase()]=e.slice()}getComponent(t){let e=t.toUpperCase();return e in this.parts?this.parts[e].slice():[]}getNextOccurrence(t,e){let s=this.iterator(t),a;do a=s.next();while(a&&a.compare(e)<=0);return a&&e.zone&&(a.zone=e.zone),a}fromData(t){for(let e in t){let s=e.toUpperCase();s in kt?Array.isArray(t[e])?this.parts[s]=t[e]:this.parts[s]=[t[e]]:this[e]=t[e]}this.interval&&typeof this.interval!="number"&&It.INTERVAL(this.interval,this),this.wkst&&typeof this.wkst!="number"&&(this.wkst=w.icalDayToNumericDay(this.wkst)),this.until&&!(this.until instanceof h)&&(this.until=h.fromString(this.until))}toJSON(){let t=Object.create(null);t.freq=this.freq,this.count&&(t.count=this.count),this.interval>1&&(t.interval=this.interval);for(let[e,s]of Object.entries(this.parts))Array.isArray(s)&&s.length==1?t[e.toLowerCase()]=s[0]:t[e.toLowerCase()]=lt(s);return this.until&&(t.until=this.until.toString()),"wkst"in this&&this.wkst!==h.DEFAULT_WEEK_START&&(t.wkst=w.numericDayToIcalDay(this.wkst)),t}toString(){let t="FREQ="+this.freq;this.count&&(t+=";COUNT="+this.count),this.interval>1&&(t+=";INTERVAL="+this.interval);for(let[e,s]of Object.entries(this.parts))t+=";"+e+"="+s;return this.until&&(t+=";UNTIL="+this.until.toICALString()),"wkst"in this&&this.wkst!==h.DEFAULT_WEEK_START&&(t+=";WKST="+w.numericDayToIcalDay(this.wkst)),t}}function Z(r,t,e,s){let a=s;if(s[0]==="+"&&(a=s.slice(1)),a=O(a),t!==void 0&&s '+t);if(e!==void 0&&s>e)throw new Error(r+': invalid value "'+s+'" must be < '+t);return a}const It={FREQ:function(r,t,e){if($t.indexOf(r)!==-1)t.freq=r;else throw new Error('invalid frequency "'+r+'" expected: "'+$t.join(", ")+'"')},COUNT:function(r,t,e){t.count=O(r)},INTERVAL:function(r,t,e){t.interval=O(r),t.interval<1&&(t.interval=1)},UNTIL:function(r,t,e){r.length>10?t.until=b.icalendar.value["date-time"].fromICAL(r):t.until=b.icalendar.value.date.fromICAL(r),e||(t.until=h.fromString(t.until))},WKST:function(r,t,e){if(u0.test(r))t.wkst=w.icalDayToNumericDay(r);else throw new Error('invalid WKST value "'+r+'"')}},kt={BYSECOND:Z.bind(void 0,"BYSECOND",0,60),BYMINUTE:Z.bind(void 0,"BYMINUTE",0,59),BYHOUR:Z.bind(void 0,"BYHOUR",0,23),BYDAY:function(r){if(d0.test(r))return r;throw new Error('invalid BYDAY value "'+r+'"')},BYMONTHDAY:Z.bind(void 0,"BYMONTHDAY",-31,31),BYYEARDAY:Z.bind(void 0,"BYYEARDAY",-366,366),BYWEEKNO:Z.bind(void 0,"BYWEEKNO",-53,53),BYMONTH:Z.bind(void 0,"BYMONTH",1,12),BYSETPOS:Z.bind(void 0,"BYSETPOS",-366,366)},h0=/\\\\|\\;|\\,|\\[Nn]/g,m0=/\\|;|,|\n/g,Xt=/\\\\|\\,|\\[Nn]/g,Qt=/\\|,|\n/g;function Vt(r,t){return{matches:/.*/,fromICAL:function(e,s){return p0(e,r,s)},toICAL:function(e,s){let a=t;return s&&(a=new RegExp(a.source+"|"+s,a.flags)),e.replace(a,function(i){switch(i){case"\\":return"\\\\";case";":return"\\;";case",":return"\\,";case` diff --git a/dist/encryption-settings_admin.css b/dist/encryption-settings_admin.css index 570b50a457b32..9af945340c6b7 100644 --- a/dist/encryption-settings_admin.css +++ b/dist/encryption-settings_admin.css @@ -17,7 +17,7 @@ @import './common-NcEmptyContent-CGAPqk4S-Don1d5Bd.chunk.css'; @import './common-NcPasswordField-Be5_qcfm-Crp_EMfV.chunk.css'; @import './common-NcBreadcrumbs-5gl8Syfa-CfbvucBX.chunk.css'; -@import './common-NcTextArea-Dxzj4zdb-DIo27L88.chunk.css'; +@import './common-NcTextArea-Dxzj4zdb-B-B2llha.chunk.css'; @import './common-NcActionSeparator-Ct2RnclR-pXJ_-D_I.chunk.css'; @import './common-NcCheckboxRadioSwitch-D8Dfv4iw-CPGkDj-p.chunk.css'; @import './common-Plus-Som-mR4B.chunk.css'; diff --git a/dist/encryption-settings_admin.mjs b/dist/encryption-settings_admin.mjs index 00969cd572c47..4c5717a38ef61 100644 --- a/dist/encryption-settings_admin.mjs +++ b/dist/encryption-settings_admin.mjs @@ -1,2 +1,2 @@ -import{b as k,n as x,z as T,o as p,c as f,u as e,w as c,j as g,t as w,l as s,p as A,f as P,k as m,h,N,v as K,y as j,F as H,g as z,e as D}from"./Web-BwmPK40i.chunk.mjs";import{_ as F,l as I}from"./public-C1mLBHT3.chunk.mjs";import{t as o}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import"./NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs";import"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";/* empty css */import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import{N as U}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import{b as S}from"./index-B-dGqfIG.chunk.mjs";import{N as M}from"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import"./index-BW4M2n71.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import{N as E}from"./mdi-Lt-19ASw.chunk.mjs";import{N as V}from"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./index-xEyWukTf.chunk.mjs";import{c as R}from"./index-BLNGy7h5.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import{N as B}from"./ContentCopy-BF1gBM5z.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import{w as $}from"./index-DlyLvrtV.chunk.mjs";import{d as O}from"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import{N as q,l as C,I as G}from"./types-Bs8ER_x7.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";const J=k({__name:"SettingsAdminHomeStorage",props:{modelValue:{type:Boolean,required:!0},modelModifiers:{}},emits:["update:modelValue"],setup(b){const a=x(b,"modelValue"),i=s(!1);return T(a,()=>{i.value=!0}),$(a,async(t,n)=>{if(t===n){i.value=!1;return}try{await R.post(S("/apps/encryption/ajax/setEncryptHomeStorage"),{encryptHomeStorage:t})}finally{i.value=!1}},{debounce:800}),(t,n)=>(p(),f(e(M),{modelValue:a.value,"onUpdate:modelValue":n[0]||(n[0]=r=>a.value=r),loading:i.value,description:e(o)("encryption","Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted"),type:"switch"},{default:c(()=>[g(w(e(o)("encryption","Encrypt the home storage")),1)]),_:1},8,["modelValue","loading","description"]))}}),L=k({__name:"SettingsAdminRecoveryKey",props:{modelValue:{type:Boolean,required:!0},modelModifiers:{}},emits:["update:modelValue"],setup(b){const a=x(b,"modelValue"),i=A("form"),t=s(!1),n=s(!1),r=s(""),l=s(""),v=K(()=>r.value===l.value);async function _(){if(!t.value&&v.value){n.value=!1,t.value=!0;try{const{data:d}=await R.post(S("/apps/encryption/ajax/adminRecovery"),{adminEnableRecovery:!a.value,recoveryPassword:r.value,confirmPassword:l.value});a.value=!a.value,r.value=l.value="",i.value?.reset(),d.data.message&&O(d.data.message)}catch(d){n.value=!0,C.error("Failed to update recovery key settings",{error:d})}finally{t.value=!1}}}return(d,u)=>(p(),P("form",{ref:"form",onSubmit:N(_,["prevent"])},[m(e(q),{label:a.value?e(o)("encryption","Disable recovery key"):e(o)("encryption","Enable recovery key"),description:e(o)("encryption","The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten.")},{default:c(()=>[m(e(V),{modelValue:r.value,"onUpdate:modelValue":u[0]||(u[0]=y=>r.value=y),required:"",name:"password",label:e(o)("encryption","Recovery key password")},null,8,["modelValue","label"]),m(e(V),{modelValue:l.value,"onUpdate:modelValue":u[1]||(u[1]=y=>l.value=y),required:"",name:"confirmPassword",error:!!l.value&&!v.value,helperText:v.value||!l.value?"":e(o)("encryption","Passwords fields do not match"),label:e(o)("encryption","Repeat recovery key password")},null,8,["modelValue","error","helperText","label"]),m(e(U),{type:"submit",variant:a.value?"error":"primary"},{default:c(()=>[g(w(a.value?e(o)("encryption","Disable recovery key"):e(o)("encryption","Enable recovery key")),1)]),_:1},8,["variant"]),n.value?(p(),f(e(E),{key:0,type:"error"},{default:c(()=>[g(w(e(o)("encryption","An error occurred while updating the recovery key settings. Please try again.")),1)]),_:1})):h("",!0)]),_:1},8,["label","description"])],544))}}),Q=k({__name:"SettingsAdminRecoveryKeyChange",setup(b){const a=A("form"),i=s(!1),t=s(!1),n=s(""),r=s(""),l=s(""),v=K(()=>r.value===l.value);async function _(){if(!i.value&&v.value){t.value=!1,i.value=!0;try{await R.post(S("/apps/encryption/ajax/changeRecoveryPassword"),{oldPassword:n.value,newPassword:r.value,confirmPassword:l.value}),n.value=r.value=l.value="",a.value?.reset()}catch(d){t.value=!0,C.error("Failed to update recovery key settings",{error:d})}finally{i.value=!1}}}return(d,u)=>(p(),P("form",{ref:"form",class:j(d.$style.settingsAdminRecoveryKeyChange),onSubmit:N(_,["prevent"])},[m(e(q),{label:e(o)("encryption","Change recovery key password")},{default:c(()=>[m(e(V),{modelValue:n.value,"onUpdate:modelValue":u[0]||(u[0]=y=>n.value=y),required:"",name:"oldPassword",label:e(o)("encryption","Old recovery key password")},null,8,["modelValue","label"]),m(e(V),{modelValue:r.value,"onUpdate:modelValue":u[1]||(u[1]=y=>r.value=y),required:"",name:"password",label:e(o)("encryption","New recovery key password")},null,8,["modelValue","label"]),m(e(V),{modelValue:l.value,"onUpdate:modelValue":u[2]||(u[2]=y=>l.value=y),required:"",name:"confirmPassword",error:!v.value&&!!l.value,helperText:v.value||!l.value?"":e(o)("encryption","Passwords fields do not match"),label:e(o)("encryption","Repeat new recovery key password")},null,8,["modelValue","error","helperText","label"]),m(e(U),{type:"submit",variant:"primary"},{default:c(()=>[g(w(e(o)("encryption","Change recovery key password")),1)]),_:1}),t.value?(p(),f(e(E),{key:0,type:"error"},{default:c(()=>[g(w(e(o)("encryption","An error occurred while changing the recovery key password. Please try again.")),1)]),_:1})):h("",!0)]),_:1},8,["label"])],34))}}),W="_settingsAdminRecoveryKeyChange_12rwr_2",X={settingsAdminRecoveryKeyChange:W},Y={$style:X},Z=F(Q,[["__cssModules",Y]]),ee=k({__name:"SettingsAdmin",setup(b){const a=I("encryption","adminSettings"),i=s(a.encryptHomeStorage),t=s(a.recoveryEnabled);return(n,r)=>(p(),f(e(B),{name:e(o)("encryption","Default encryption module")},{default:c(()=>[e(a).initStatus===e(G).NotInitialized&&!e(a).masterKeyEnabled?(p(),f(e(E),{key:0,type:"warning"},{default:c(()=>[g(w(e(o)("encryption","Encryption app is enabled but your keys are not initialized, please log-out and log-in again")),1)]),_:1})):(p(),P(H,{key:1},[m(J,{modelValue:i.value,"onUpdate:modelValue":r[0]||(r[0]=l=>i.value=l)},null,8,["modelValue"]),r[2]||(r[2]=z("br",null,null,-1)),e(a).masterKeyEnabled?h("",!0):(p(),f(L,{key:0,modelValue:t.value,"onUpdate:modelValue":r[1]||(r[1]=l=>t.value=l)},null,8,["modelValue"])),!e(a).masterKeyEnabled&&t.value?(p(),f(Z,{key:1})):h("",!0)],64))]),_:1},8,["name"]))}}),ae=D(ee);ae.mount("#encryption-settings-section"); +import{b as k,n as x,z as T,o as p,c as f,u as e,w as c,j as g,t as w,l as s,p as A,f as P,k as m,h,N,v as K,y as j,F as H,g as z,e as D}from"./Web-BwmPK40i.chunk.mjs";import{_ as F,l as I}from"./public-C1mLBHT3.chunk.mjs";import{t as o}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import"./NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs";import"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";/* empty css */import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import{N as U}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import{b as S}from"./index-B-dGqfIG.chunk.mjs";import{N as M}from"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import"./index-BW4M2n71.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import{N as E}from"./mdi-Lt-19ASw.chunk.mjs";import{N as V}from"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./index-xEyWukTf.chunk.mjs";import{c as R}from"./index-BLNGy7h5.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import{N as B}from"./ContentCopy-BF1gBM5z.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import{w as $}from"./index-DlyLvrtV.chunk.mjs";import{d as O}from"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import{N as q,l as C,I as G}from"./types-Cpv__FHC.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";const J=k({__name:"SettingsAdminHomeStorage",props:{modelValue:{type:Boolean,required:!0},modelModifiers:{}},emits:["update:modelValue"],setup(b){const a=x(b,"modelValue"),i=s(!1);return T(a,()=>{i.value=!0}),$(a,async(t,n)=>{if(t===n){i.value=!1;return}try{await R.post(S("/apps/encryption/ajax/setEncryptHomeStorage"),{encryptHomeStorage:t})}finally{i.value=!1}},{debounce:800}),(t,n)=>(p(),f(e(M),{modelValue:a.value,"onUpdate:modelValue":n[0]||(n[0]=r=>a.value=r),loading:i.value,description:e(o)("encryption","Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted"),type:"switch"},{default:c(()=>[g(w(e(o)("encryption","Encrypt the home storage")),1)]),_:1},8,["modelValue","loading","description"]))}}),L=k({__name:"SettingsAdminRecoveryKey",props:{modelValue:{type:Boolean,required:!0},modelModifiers:{}},emits:["update:modelValue"],setup(b){const a=x(b,"modelValue"),i=A("form"),t=s(!1),n=s(!1),r=s(""),l=s(""),v=K(()=>r.value===l.value);async function _(){if(!t.value&&v.value){n.value=!1,t.value=!0;try{const{data:d}=await R.post(S("/apps/encryption/ajax/adminRecovery"),{adminEnableRecovery:!a.value,recoveryPassword:r.value,confirmPassword:l.value});a.value=!a.value,r.value=l.value="",i.value?.reset(),d.data.message&&O(d.data.message)}catch(d){n.value=!0,C.error("Failed to update recovery key settings",{error:d})}finally{t.value=!1}}}return(d,u)=>(p(),P("form",{ref:"form",onSubmit:N(_,["prevent"])},[m(e(q),{label:a.value?e(o)("encryption","Disable recovery key"):e(o)("encryption","Enable recovery key"),description:e(o)("encryption","The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten.")},{default:c(()=>[m(e(V),{modelValue:r.value,"onUpdate:modelValue":u[0]||(u[0]=y=>r.value=y),required:"",name:"password",label:e(o)("encryption","Recovery key password")},null,8,["modelValue","label"]),m(e(V),{modelValue:l.value,"onUpdate:modelValue":u[1]||(u[1]=y=>l.value=y),required:"",name:"confirmPassword",error:!!l.value&&!v.value,helperText:v.value||!l.value?"":e(o)("encryption","Passwords fields do not match"),label:e(o)("encryption","Repeat recovery key password")},null,8,["modelValue","error","helperText","label"]),m(e(U),{type:"submit",variant:a.value?"error":"primary"},{default:c(()=>[g(w(a.value?e(o)("encryption","Disable recovery key"):e(o)("encryption","Enable recovery key")),1)]),_:1},8,["variant"]),n.value?(p(),f(e(E),{key:0,type:"error"},{default:c(()=>[g(w(e(o)("encryption","An error occurred while updating the recovery key settings. Please try again.")),1)]),_:1})):h("",!0)]),_:1},8,["label","description"])],544))}}),Q=k({__name:"SettingsAdminRecoveryKeyChange",setup(b){const a=A("form"),i=s(!1),t=s(!1),n=s(""),r=s(""),l=s(""),v=K(()=>r.value===l.value);async function _(){if(!i.value&&v.value){t.value=!1,i.value=!0;try{await R.post(S("/apps/encryption/ajax/changeRecoveryPassword"),{oldPassword:n.value,newPassword:r.value,confirmPassword:l.value}),n.value=r.value=l.value="",a.value?.reset()}catch(d){t.value=!0,C.error("Failed to update recovery key settings",{error:d})}finally{i.value=!1}}}return(d,u)=>(p(),P("form",{ref:"form",class:j(d.$style.settingsAdminRecoveryKeyChange),onSubmit:N(_,["prevent"])},[m(e(q),{label:e(o)("encryption","Change recovery key password")},{default:c(()=>[m(e(V),{modelValue:n.value,"onUpdate:modelValue":u[0]||(u[0]=y=>n.value=y),required:"",name:"oldPassword",label:e(o)("encryption","Old recovery key password")},null,8,["modelValue","label"]),m(e(V),{modelValue:r.value,"onUpdate:modelValue":u[1]||(u[1]=y=>r.value=y),required:"",name:"password",label:e(o)("encryption","New recovery key password")},null,8,["modelValue","label"]),m(e(V),{modelValue:l.value,"onUpdate:modelValue":u[2]||(u[2]=y=>l.value=y),required:"",name:"confirmPassword",error:!v.value&&!!l.value,helperText:v.value||!l.value?"":e(o)("encryption","Passwords fields do not match"),label:e(o)("encryption","Repeat new recovery key password")},null,8,["modelValue","error","helperText","label"]),m(e(U),{type:"submit",variant:"primary"},{default:c(()=>[g(w(e(o)("encryption","Change recovery key password")),1)]),_:1}),t.value?(p(),f(e(E),{key:0,type:"error"},{default:c(()=>[g(w(e(o)("encryption","An error occurred while changing the recovery key password. Please try again.")),1)]),_:1})):h("",!0)]),_:1},8,["label"])],34))}}),W="_settingsAdminRecoveryKeyChange_12rwr_2",X={settingsAdminRecoveryKeyChange:W},Y={$style:X},Z=F(Q,[["__cssModules",Y]]),ee=k({__name:"SettingsAdmin",setup(b){const a=I("encryption","adminSettings"),i=s(a.encryptHomeStorage),t=s(a.recoveryEnabled);return(n,r)=>(p(),f(e(B),{name:e(o)("encryption","Default encryption module")},{default:c(()=>[e(a).initStatus===e(G).NotInitialized&&!e(a).masterKeyEnabled?(p(),f(e(E),{key:0,type:"warning"},{default:c(()=>[g(w(e(o)("encryption","Encryption app is enabled but your keys are not initialized, please log-out and log-in again")),1)]),_:1})):(p(),P(H,{key:1},[m(J,{modelValue:i.value,"onUpdate:modelValue":r[0]||(r[0]=l=>i.value=l)},null,8,["modelValue"]),r[2]||(r[2]=z("br",null,null,-1)),e(a).masterKeyEnabled?h("",!0):(p(),f(L,{key:0,modelValue:t.value,"onUpdate:modelValue":r[1]||(r[1]=l=>t.value=l)},null,8,["modelValue"])),!e(a).masterKeyEnabled&&t.value?(p(),f(Z,{key:1})):h("",!0)],64))]),_:1},8,["name"]))}}),ae=D(ee);ae.mount("#encryption-settings-section"); //# sourceMappingURL=encryption-settings_admin.mjs.map diff --git a/dist/encryption-settings_personal.css b/dist/encryption-settings_personal.css index dafe51bfd105b..9bc197054aeca 100644 --- a/dist/encryption-settings_personal.css +++ b/dist/encryption-settings_personal.css @@ -18,7 +18,7 @@ @import './common-NcEmptyContent-CGAPqk4S-Don1d5Bd.chunk.css'; @import './common-NcPasswordField-Be5_qcfm-Crp_EMfV.chunk.css'; @import './common-NcBreadcrumbs-5gl8Syfa-CfbvucBX.chunk.css'; -@import './common-NcTextArea-Dxzj4zdb-DIo27L88.chunk.css'; +@import './common-NcTextArea-Dxzj4zdb-B-B2llha.chunk.css'; @import './common-NcActionSeparator-Ct2RnclR-pXJ_-D_I.chunk.css'; @import './common-NcCheckboxRadioSwitch-D8Dfv4iw-CPGkDj-p.chunk.css'; @import './common-Plus-Som-mR4B.chunk.css'; diff --git a/dist/encryption-settings_personal.mjs b/dist/encryption-settings_personal.mjs index e3e8225d1c205..e588389b84c6d 100644 --- a/dist/encryption-settings_personal.mjs +++ b/dist/encryption-settings_personal.mjs @@ -1,2 +1,2 @@ -import{b,p as P,o as p,f as F,k as v,w as u,c as m,u as e,j as f,t as g,h as U,N as x,l,n as j,z,e as I}from"./Web-BwmPK40i.chunk.mjs";import{c as w,i as h}from"./index-BLNGy7h5.chunk.mjs";import{a as S,c as B,b as K}from"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import{l as R}from"./public-C1mLBHT3.chunk.mjs";import{t as r}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import{b as k}from"./index-B-dGqfIG.chunk.mjs";import{N as V}from"./mdi-Lt-19ASw.chunk.mjs";import{N as C}from"./ContentCopy-BF1gBM5z.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import"./NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs";import"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";/* empty css */import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import{N as T}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import{N as q}from"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import"./index-BW4M2n71.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";import{N as M,I as E,l as O}from"./types-Bs8ER_x7.chunk.mjs";/* empty css */import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import{N as _}from"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./index-xEyWukTf.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import{w as Y}from"./index-DlyLvrtV.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";const A=b({__name:"SettingsPersonalChangePrivateKey",props:{recoveryEnabledForUser:{type:Boolean}},emits:["updated"],setup(c,{emit:a}){const s=a,n=P("form"),t=l(!1),o=l(!1),i=l(""),y=l("");async function N(){if(!t.value){t.value=!0,o.value=!1;try{await w.post(k("/apps/encryption/ajax/updatePrivateKeyPassword"),{oldPassword:i.value,newPassword:y.value}),i.value=y.value="",n.value?.reset(),s("updated")}catch(d){h(d)&&d.response&&d.response.data?.data?.message&&S(d.response.data.data.message),o.value=!0}finally{t.value=!1}}}return(d,J)=>(p(),F("form",{ref:"form",onSubmit:x(N,["prevent"])},[v(e(M),{label:e(r)("encryption","Update private key password"),description:e(r)("encryption","Your private key password no longer matches your log-in password. Set your old private key password to your current log-in password.")},{default:u(()=>[c.recoveryEnabledForUser?(p(),m(e(V),{key:0},{default:u(()=>[f(g(e(r)("encryption","If you do not remember your old password you can ask your administrator to recover your files.")),1)]),_:1})):U("",!0),v(e(_),{label:e(r)("encryption","Old log-in password")},null,8,["label"]),v(e(_),{label:e(r)("encryption","Current log-in password")},null,8,["label"]),v(e(T),{type:"submit",variant:"primary"},{default:u(()=>[f(g(e(r)("encryption","Update")),1)]),_:1})]),_:1},8,["label","description"])],544))}}),D=b({__name:"SettingsPersonalEnableRecovery",props:{modelValue:{type:Boolean,required:!0},modelModifiers:{}},emits:["update:modelValue"],setup(c){const a=j(c,"modelValue"),s=l(!1);return z(a,()=>{s.value=!0}),Y([a],async([n],[t])=>{if(n===t){s.value=!1;return}const o=B(r("encryption","Updating recovery keys. This can take some time…"));try{await w.post(k("/apps/encryption/ajax/userSetRecovery"),{userEnableRecovery:a.value})}catch(i){a.value=t,h(i)&&i.response&&i.response.data?.data?.message&&S(i.response.data.data.message)}finally{o.hideToast(),s.value=!1}},{debounce:800}),(n,t)=>(p(),m(e(q),{modelValue:a.value,"onUpdate:modelValue":t[0]||(t[0]=o=>a.value=o),type:"switch",loading:s.value,description:e(r)("encryption","Enabling this option will allow you to reobtain access to your encrypted files in case of password loss")},{default:u(()=>[f(g(e(r)("encryption","Enable password recovery")),1)]),_:1},8,["modelValue","loading","description"]))}}),G=b({__name:"SettingsPersonal",setup(c){const a=R("encryption","personalSettings"),s=l(a.initialized),n=l(a.recoveryEnabledForUser);async function t(){try{const{data:o}=await w.get(k("/apps/encryption/ajax/getStatus"));s.value=o.initStatus,o.data.message&&K(o.data.message)}catch(o){O.error("Failed to fetch current encryption status",{error:o})}}return(o,i)=>(p(),m(e(C),{name:e(r)("encryption","Basic encryption module")},{default:u(()=>[s.value===e(E).NotInitialized?(p(),m(e(V),{key:0,type:"warning"},{default:u(()=>[f(g(e(r)("encryption","Encryption app is enabled but your keys are not initialized, please log-out and log-in again")),1)]),_:1})):s.value===e(E).InitExecuted?(p(),m(A,{key:1,recoveryEnabledForUser:n.value,onUpdated:t},null,8,["recoveryEnabledForUser"])):e(a).recoveryEnabled&&e(a).privateKeySet?(p(),m(D,{key:2,modelValue:n.value,"onUpdate:modelValue":i[0]||(i[0]=y=>n.value=y)},null,8,["modelValue"])):U("",!0)]),_:1},8,["name"]))}}),H=I(G);H.mount("#encryption-settings-section"); +import{b,p as P,o as p,f as F,k as v,w as u,c as m,u as e,j as f,t as g,h as U,N as x,l,n as j,z,e as I}from"./Web-BwmPK40i.chunk.mjs";import{c as w,i as h}from"./index-BLNGy7h5.chunk.mjs";import{a as S,c as B,b as K}from"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import{l as R}from"./public-C1mLBHT3.chunk.mjs";import{t as r}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import{b as k}from"./index-B-dGqfIG.chunk.mjs";import{N as V}from"./mdi-Lt-19ASw.chunk.mjs";import{N as C}from"./ContentCopy-BF1gBM5z.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import"./NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs";import"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";/* empty css */import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import{N as T}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import{N as q}from"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import"./index-BW4M2n71.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";import{N as M,I as E,l as O}from"./types-Cpv__FHC.chunk.mjs";/* empty css */import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import{N as _}from"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./index-xEyWukTf.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import{w as Y}from"./index-DlyLvrtV.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";const A=b({__name:"SettingsPersonalChangePrivateKey",props:{recoveryEnabledForUser:{type:Boolean}},emits:["updated"],setup(c,{emit:a}){const s=a,n=P("form"),t=l(!1),o=l(!1),i=l(""),y=l("");async function N(){if(!t.value){t.value=!0,o.value=!1;try{await w.post(k("/apps/encryption/ajax/updatePrivateKeyPassword"),{oldPassword:i.value,newPassword:y.value}),i.value=y.value="",n.value?.reset(),s("updated")}catch(d){h(d)&&d.response&&d.response.data?.data?.message&&S(d.response.data.data.message),o.value=!0}finally{t.value=!1}}}return(d,J)=>(p(),F("form",{ref:"form",onSubmit:x(N,["prevent"])},[v(e(M),{label:e(r)("encryption","Update private key password"),description:e(r)("encryption","Your private key password no longer matches your log-in password. Set your old private key password to your current log-in password.")},{default:u(()=>[c.recoveryEnabledForUser?(p(),m(e(V),{key:0},{default:u(()=>[f(g(e(r)("encryption","If you do not remember your old password you can ask your administrator to recover your files.")),1)]),_:1})):U("",!0),v(e(_),{label:e(r)("encryption","Old log-in password")},null,8,["label"]),v(e(_),{label:e(r)("encryption","Current log-in password")},null,8,["label"]),v(e(T),{type:"submit",variant:"primary"},{default:u(()=>[f(g(e(r)("encryption","Update")),1)]),_:1})]),_:1},8,["label","description"])],544))}}),D=b({__name:"SettingsPersonalEnableRecovery",props:{modelValue:{type:Boolean,required:!0},modelModifiers:{}},emits:["update:modelValue"],setup(c){const a=j(c,"modelValue"),s=l(!1);return z(a,()=>{s.value=!0}),Y([a],async([n],[t])=>{if(n===t){s.value=!1;return}const o=B(r("encryption","Updating recovery keys. This can take some time…"));try{await w.post(k("/apps/encryption/ajax/userSetRecovery"),{userEnableRecovery:a.value})}catch(i){a.value=t,h(i)&&i.response&&i.response.data?.data?.message&&S(i.response.data.data.message)}finally{o.hideToast(),s.value=!1}},{debounce:800}),(n,t)=>(p(),m(e(q),{modelValue:a.value,"onUpdate:modelValue":t[0]||(t[0]=o=>a.value=o),type:"switch",loading:s.value,description:e(r)("encryption","Enabling this option will allow you to reobtain access to your encrypted files in case of password loss")},{default:u(()=>[f(g(e(r)("encryption","Enable password recovery")),1)]),_:1},8,["modelValue","loading","description"]))}}),G=b({__name:"SettingsPersonal",setup(c){const a=R("encryption","personalSettings"),s=l(a.initialized),n=l(a.recoveryEnabledForUser);async function t(){try{const{data:o}=await w.get(k("/apps/encryption/ajax/getStatus"));s.value=o.initStatus,o.data.message&&K(o.data.message)}catch(o){O.error("Failed to fetch current encryption status",{error:o})}}return(o,i)=>(p(),m(e(C),{name:e(r)("encryption","Basic encryption module")},{default:u(()=>[s.value===e(E).NotInitialized?(p(),m(e(V),{key:0,type:"warning"},{default:u(()=>[f(g(e(r)("encryption","Encryption app is enabled but your keys are not initialized, please log-out and log-in again")),1)]),_:1})):s.value===e(E).InitExecuted?(p(),m(A,{key:1,recoveryEnabledForUser:n.value,onUpdated:t},null,8,["recoveryEnabledForUser"])):e(a).recoveryEnabled&&e(a).privateKeySet?(p(),m(D,{key:2,modelValue:n.value,"onUpdate:modelValue":i[0]||(i[0]=y=>n.value=y)},null,8,["modelValue"])):U("",!0)]),_:1},8,["name"]))}}),H=I(G);H.mount("#encryption-settings-section"); //# sourceMappingURL=encryption-settings_personal.mjs.map diff --git a/dist/files_external-settings.css b/dist/files_external-settings.css index 50d733699b5d7..a83da52beabc3 100644 --- a/dist/files_external-settings.css +++ b/dist/files_external-settings.css @@ -19,7 +19,7 @@ @import './common-NcAvatar-M3-CbKbq-DTVmI7NO.chunk.css'; @import './common-NcPasswordField-Be5_qcfm-Crp_EMfV.chunk.css'; @import './common-NcBreadcrumbs-5gl8Syfa-CfbvucBX.chunk.css'; -@import './common-NcTextArea-Dxzj4zdb-DIo27L88.chunk.css'; +@import './common-NcTextArea-Dxzj4zdb-B-B2llha.chunk.css'; @import './common-NcActionSeparator-Ct2RnclR-pXJ_-D_I.chunk.css'; @import './common-NcCheckboxRadioSwitch-D8Dfv4iw-CPGkDj-p.chunk.css'; @import './common-Plus-Som-mR4B.chunk.css'; diff --git a/dist/files_external-settings.mjs b/dist/files_external-settings.mjs index 609cac3d3d807..5cb527c2af93d 100644 --- a/dist/files_external-settings.mjs +++ b/dist/files_external-settings.mjs @@ -1,2 +1,2 @@ -import{d as ke,c as Ve}from"./pinia-CLibr4cC.chunk.mjs";import{H as K,a9 as ee,R as Se,v as C,b as $,n as B,o as u,c as k,u as e,l as M,z,f as h,y as x,g as y,t as v,F as S,C as Ce,B as O,L as W,M as Y,h as T,s as Z,a1 as Q,U as ie,k as b,w,j as V,N as Me,e as Ae}from"./Web-BwmPK40i.chunk.mjs";import{s as Ue,g as $e,t as Te,u as Oe,l as Ne,v as qe,N as re,k as Pe}from"./mdi-Lt-19ASw.chunk.mjs";import{_ as N,l as A}from"./public-C1mLBHT3.chunk.mjs";import{t as n,a as Ee}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import{N as P}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import{N as F}from"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import{N as ce}from"./ContentCopy-BF1gBM5z.chunk.mjs";import{N as Re,s as Fe}from"./index-BW4M2n71.chunk.mjs";import{N as ae}from"./index-BOH7nBEM.chunk.mjs";import{_ as _e}from"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";import{c as U}from"./index-BLNGy7h5.chunk.mjs";import{b as R}from"./index-B-dGqfIG.chunk.mjs";import{N as Be}from"./NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs";import{b as Le}from"./index-DlyLvrtV.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";/* empty css */import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import{N as me}from"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import{N as E}from"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import{N as je}from"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import{N as De}from"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./index-xEyWukTf.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import{N as He}from"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import{_ as pe}from"./AuthMechanismRsa-Bue2F6rp.chunk.mjs";import{C as H,a as ge,M as G,S as L,b as Ge,c as Ie}from"./types-BINwlUX8.chunk.mjs";import{a as fe,P as I}from"./index-BU6wm4Hd.chunk.mjs";import{a as te,d as le}from"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import{l as ve}from"./logger-n22jyIXx.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";const Qe='',J=Se(new Map);function be(l){const a=C(()=>ee(l).map(t=>({id:`user:${t}`,user:t,displayName:J.get(t)||t})));return K(async()=>{const t=ee(l).filter(r=>!J.has(r));if(t.length>0){const{data:r}=await U.post(R("/displaynames"),{users:t});for(const[d,c]of Object.entries(r.users))J.set(d,c)}}),a}function ze(l){return C(()=>ee(l).map(ye))}function ye(l){return{id:l,isNoUser:!0,displayName:l,iconSvg:Qe}}const Ze=$({__name:"ApplicableEntities",props:{groups:{default:()=>[]},groupsModifiers:{},users:{default:()=>[]},usersModifiers:{}},emits:["update:groups","update:users"],setup(l){const a=B(l,"groups"),t=B(l,"users"),r=M([]),d=be(t),c=ze(a),o=C({get(){return[...c.value,...d.value]},set(p){t.value=p.filter(_=>_.user).map(_=>_.user),a.value=p.filter(_=>_.isNoUser).map(_=>_.id)}}),i=Le(s,500);async function s(p){const{data:_}=await U.get(R("apps/files_external/ajax/applicable"),{params:{pattern:p,limit:20}}),m=[...r.value.map(g=>[g.id,g]),...Object.entries(_.groups).map(([g,f])=>[g,{...ye(g),displayName:f}]),...Object.entries(_.users).map(([g,f])=>[`user:${g}`,{id:`user:${g}`,user:g,displayName:f}])];r.value=[...new Map(m).values()]}return(p,_)=>(u(),k(e(Be),{modelValue:o.value,"onUpdate:modelValue":_[0]||(_[0]=m=>o.value=m),keepOpen:"",multiple:"",options:r.value,inputLabel:e(n)("files_external","Restrict to"),onSearch:e(i)},null,8,["modelValue","options","inputLabel","onSearch"]))}}),Ke=$({__name:"AuthMechanismConfiguration",props:Z({authMechanism:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(l){const a=B(l,"modelValue"),t=l,r=C(()=>{if(!t.authMechanism.configuration)return;const s=Object.entries(t.authMechanism.configuration).filter(([,p])=>!(p.flags&H.UserProvided));return Object.fromEntries(s)}),d=C(()=>window.OCA.FilesExternal.AuthMechanism.getHandler(t.authMechanism)),c=C(()=>{if(!r.value)return!1;for(const s of Object.values(r.value))if(!(s.flags&H.Hidden||s.flags&H.UserProvided))return!0;return!1}),o=M(!1);K(async()=>{d.value&&(o.value=!0,await window.customElements.whenDefined(d.value.tagName),o.value=!1)}),z(r,()=>{for(const s in r.value)s in a.value||(a.value[s]=r.value[s]?.type===ge.Boolean?!1:"")});function i(s){const p=[s.detail].flat()[0];a.value={...a.value,...p}}return(s,p)=>c.value?(u(),h("fieldset",{key:0,class:x(s.$style.authMechanismConfiguration)},[y("legend",null,v(e(n)("files_external","Authentication")),1),d.value?(u(),h(S,{key:0},[o.value?(u(),k(e(me),{key:0})):(u(),k(Ce(d.value.tagName),{key:1,".modelValue":a.value,".authMechanism":l.authMechanism,"onUpdate:modelValue":i},null,40,[".modelValue",".authMechanism"]))],64)):(u(!0),h(S,{key:1},O(r.value,(_,m)=>W((u(),k(pe,{key:_.value,modelValue:a.value[m],"onUpdate:modelValue":g=>a.value[m]=g,"config-key":m,"config-option":_},null,8,["modelValue","onUpdate:modelValue","config-key","config-option"])),[[Y,!(_.flags&e(H).Hidden)]])),128))],2)):T("",!0)}}),We="_authMechanismConfiguration_kpcpy_2",Ye={authMechanismConfiguration:We},Je={$style:Ye},Xe=N(Ke,[["__cssModules",Je]]),ea=$({__name:"BackendConfiguration",props:Z({configuration:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(l){const a=B(l,"modelValue"),t=l;return z(()=>t.configuration,()=>{for(const r in t.configuration)r in a.value||(a.value[r]=t.configuration[r]?.defaultValue??(t.configuration[r]?.type===ge.Boolean?!1:""))},{immediate:!0}),(r,d)=>(u(),h("fieldset",{class:x(r.$style.backendConfiguration)},[y("legend",null,v(e(n)("files_external","Storage configuration")),1),(u(!0),h(S,null,O(l.configuration,(c,o)=>W((u(),k(pe,{key:c.value,modelValue:a.value[o],"onUpdate:modelValue":i=>a.value[o]=i,configKey:o,configOption:c},null,8,["modelValue","onUpdate:modelValue","configKey","configOption"])),[[Y,!(c.flags&e(H).Hidden)]])),128))],2))}}),aa="_backendConfiguration_1sf6y_2",ta={backendConfiguration:aa},la={$style:ta},sa=N(ea,[["__cssModules",la]]),{isAdmin:na}=A("files_external","settings"),se=ke("files_external--storages",()=>{const l=M([]),a=M([]);async function t(m){const g=R("apps/files_external/globalstorages"),{data:f}=await U.post(g,Q(m),{confirmPassword:I.Strict});l.value.push(j(f))}async function r(m){const g=R("apps/files_external/userstorages"),{data:f}=await U.post(g,Q(m),{confirmPassword:I.Strict});a.value.push(j(f))}async function d(m){await U.delete(p(m),{confirmPassword:I.Strict}),m.type==="personal"?a.value=a.value.filter(g=>g.id!==m.id):l.value=l.value.filter(g=>g.id!==m.id)}async function c(m){const{data:g}=await U.put(p(m),Q(m),{confirmPassword:I.Strict});_(j(g))}async function o(m){const{data:g}=await U.get(p(m));_(j(g))}return s(),{globalStorages:l,userStorages:a,createGlobalStorage:t,createUserStorage:r,deleteStorage:d,reloadStorage:o,updateStorage:c};async function i(m){const g=`apps/files_external/${m}`,{data:f}=await U.get(R(g));return Object.values(f).map(j)}async function s(){fe(U),na?l.value=await i("globalstorages"):(a.value=await i("userstorages"),l.value=await i("userglobalstorages"))}function p(m){const g=m.type==="personal"?"userstorages":"globalstorages";return R(`apps/files_external/${g}/${m.id}`)}function _(m){if(m.type==="personal"){const g=a.value.findIndex(f=>f.id===m.id);a.value.splice(g,1,m)}else{const g=l.value.findIndex(f=>f.id===m.id);l.value.splice(g,1,m)}}});function j(l){return{...l,mountOptions:he(l.mountOptions)}}function he(l){const a={...l};return a.encrypt=D(a.encrypt,!0),a.previews=D(a.previews,!0),a.enable_sharing=D(a.enable_sharing,!1),a.filesystem_check_changes=typeof a.filesystem_check_changes=="string"?Number.parseInt(a.filesystem_check_changes):a.filesystem_check_changes??G.OncePerRequest,a.encoding_compatibility=D(a.encoding_compatibility,!1),a.readonly=D(a.readonly,!1),a}function D(l,a=!1){return l===void 0?a:l===!0||l==="true"||l==="1"}const oa=["id","aria-labelledby"],ia=$({__name:"MountOptions",props:{modelValue:{required:!0},modelModifiers:{}},emits:["update:modelValue"],setup(l){const a=B(l,"modelValue");K(()=>{Object.keys(a.value).length===0&&(a.value=he(a.value))});const{hasEncryption:t}=A("files_external","settings"),r=ie(),d=ie(),c=M(!1),o=[{label:n("files_external","Never"),value:G.Never},{label:n("files_external","Once every direct access"),value:G.OncePerRequest},{label:n("files_external","Always"),value:G.Always}],i=C({get(){return o.find(s=>s.value===a.value.filesystem_check_changes)},set(s){a.value.filesystem_check_changes=s?.value??G.OncePerRequest}});return(s,p)=>(u(),h("div",{class:x(s.$style.mountOptions)},[b(e(P),{id:e(r),"aria-controls":e(d),"aria-expanded":c.value,variant:"tertiary-no-background",onClick:p[0]||(p[0]=_=>c.value=!c.value)},{icon:w(()=>[b(e(F),{directional:"",path:c.value?e(Ue):e($e)},null,8,["path"])]),default:w(()=>[V(" "+v(e(n)("files_external","Mount options")),1)]),_:1},8,["id","aria-controls","aria-expanded"]),W(y("fieldset",{id:e(d),class:x(s.$style.mountOptions__fieldset),"aria-labelledby":e(r)},[b(e(ae),{modelValue:i.value,"onUpdate:modelValue":p[1]||(p[1]=_=>i.value=_),inputLabel:e(n)("files_external","Check filesystem changes"),options:o},null,8,["modelValue","inputLabel"]),b(e(E),{modelValue:l.modelValue.readonly,"onUpdate:modelValue":p[2]||(p[2]=_=>l.modelValue.readonly=_),type:"switch"},{default:w(()=>[V(v(e(n)("files_external","Read only")),1)]),_:1},8,["modelValue"]),b(e(E),{modelValue:l.modelValue.previews,"onUpdate:modelValue":p[3]||(p[3]=_=>l.modelValue.previews=_),type:"switch"},{default:w(()=>[V(v(e(n)("files_external","Enable previews")),1)]),_:1},8,["modelValue"]),b(e(E),{modelValue:l.modelValue.enable_sharing,"onUpdate:modelValue":p[4]||(p[4]=_=>l.modelValue.enable_sharing=_),type:"switch"},{default:w(()=>[V(v(e(n)("files_external","Enable sharing")),1)]),_:1},8,["modelValue"]),e(t)?(u(),k(e(E),{key:0,modelValue:l.modelValue.encrypt,"onUpdate:modelValue":p[5]||(p[5]=_=>l.modelValue.encrypt=_),type:"switch"},{default:w(()=>[V(v(e(n)("files_external","Enable encryption")),1)]),_:1},8,["modelValue"])):T("",!0),b(e(E),{modelValue:l.modelValue.encoding_compatibility,"onUpdate:modelValue":p[6]||(p[6]=_=>l.modelValue.encoding_compatibility=_),type:"switch"},{default:w(()=>[V(v(e(n)("files_external","Compatibility with Mac NFD encoding (slow)")),1)]),_:1},8,["modelValue"])],10,oa),[[Y,c.value]])],2))}}),ra="_mountOptions_1fqyb_2",ua="_mountOptions__fieldset_1fqyb_12",da={mountOptions:ra,mountOptions__fieldset:ua},ca={$style:da},_a=N(ia,[["__cssModules",ca]]),{isAdmin:ue}=A("files_external","settings"),ma=A("files_external","allowedBackends"),de=A("files_external","backends").filter(l=>ma.includes(l.identifier)),pa=A("files_external","authMechanisms"),ga=$({__name:"AddExternalStorageDialog",props:Z({storage:{default:()=>({backendOptions:{},mountOptions:{},type:ue?"system":"personal"})}},{open:{type:Boolean,default:!0},openModifiers:{}}),emits:Z(["close"],["update:open"]),setup(l){const a=B(l,"open"),t=M(structuredClone(Q(l.storage)));K(()=>{a.value&&(t.value=structuredClone(Q(l.storage)))});const r=C({get(){return de.find(o=>o.identifier===t.value.backend)},set(o){t.value.backend=o?.identifier}}),d=C(()=>pa.filter(({scheme:o})=>r.value?.authSchemes[o])),c=C({get(){return d.value.find(o=>o.identifier===t.value.authMechanism)},set(o){t.value.authMechanism=o?.identifier}});return z(d,()=>{d.value.length===1&&(t.value.authMechanism=d.value[0].identifier)}),(o,i)=>(u(),k(e(Re),{open:a.value,"onUpdate:open":[i[9]||(i[9]=s=>a.value=s),i[11]||(i[11]=s=>s||o.$emit("close"))],isForm:"",contentClasses:o.$style.externalStorageDialog,name:t.value.id?e(n)("files_external","Edit storage"):e(n)("files_external","Add storage"),onSubmit:i[10]||(i[10]=s=>o.$emit("close",t.value))},{actions:w(()=>[l.storage.id?(u(),k(e(P),{key:0,onClick:i[8]||(i[8]=s=>o.$emit("close"))},{default:w(()=>[V(v(e(n)("files_external","Cancel")),1)]),_:1})):T("",!0),b(e(P),{variant:"primary",type:"submit"},{default:w(()=>[V(v(l.storage.id?e(n)("files_external","Edit"):e(n)("files_external","Create")),1)]),_:1})]),default:w(()=>[b(e(_e),{modelValue:t.value.mountPoint,"onUpdate:modelValue":i[0]||(i[0]=s=>t.value.mountPoint=s),label:e(n)("files_external","Folder name"),required:""},null,8,["modelValue","label"]),b(_a,{modelValue:t.value.mountOptions,"onUpdate:modelValue":i[1]||(i[1]=s=>t.value.mountOptions=s)},null,8,["modelValue"]),e(ue)?(u(),k(Ze,{key:0,groups:t.value.applicableGroups,"onUpdate:groups":i[2]||(i[2]=s=>t.value.applicableGroups=s),users:t.value.applicableUsers,"onUpdate:users":i[3]||(i[3]=s=>t.value.applicableUsers=s)},null,8,["groups","users"])):T("",!0),b(e(ae),{modelValue:r.value,"onUpdate:modelValue":i[4]||(i[4]=s=>r.value=s),options:e(de),disabled:!!(t.value.id&&t.value.backend),inputLabel:e(n)("files_external","External storage"),label:"name",required:""},null,8,["modelValue","options","disabled","inputLabel"]),b(e(ae),{modelValue:c.value,"onUpdate:modelValue":i[5]||(i[5]=s=>c.value=s),options:d.value,disabled:!t.value.backend||d.value.length<=1||!!(t.value.id&&t.value.authMechanism),inputLabel:e(n)("files_external","Authentication"),label:"name",required:""},null,8,["modelValue","options","disabled","inputLabel"]),r.value&&t.value.backendOptions?(u(),k(sa,{key:1,modelValue:t.value.backendOptions,"onUpdate:modelValue":i[6]||(i[6]=s=>t.value.backendOptions=s),class:x(o.$style.externalStorageDialog__configuration),configuration:r.value.configuration},null,8,["modelValue","class","configuration"])):T("",!0),c.value&&t.value.backendOptions?(u(),k(Xe,{key:2,modelValue:t.value.backendOptions,"onUpdate:modelValue":i[7]||(i[7]=s=>t.value.backendOptions=s),class:x(o.$style.externalStorageDialog__configuration),authMechanism:c.value},null,8,["modelValue","class","authMechanism"])):T("",!0)]),_:1},8,["open","contentClasses","name"]))}}),fa="_externalStorageDialog_9wew8_2",va="_externalStorageDialog__configuration_9wew8_9",ba={externalStorageDialog:fa,externalStorageDialog__configuration:va},ya={$style:ba},xe=N(ga,[["__cssModules",ya]]),ha={class:"hidden-visually"},xa={key:0},wa=$({__name:"ExternalStorageTableRow",props:{storage:{},isAdmin:{type:Boolean}},setup(l){const a=l,t=se(),r=A("files_external","backends"),d=C(()=>r.find(f=>f.identifier===a.storage.backend).name),c=A("files_external","authMechanisms"),o=C(()=>c.find(f=>f.identifier===a.storage.authMechanism).name),i=M(!1),s=C(()=>{if(i.value)return{icon:"loading",label:n("files_external","Checking …")};const f=a.storage.status??L.Indeterminate,ne=a.storage.statusMessage||Ge[f],q=Ie[f],oe=f===L.NetworkError||f===L.Timeout,we=!oe&&f!==L.Success&&f!==L.Indeterminate;return{icon:q,label:ne,isWarning:oe,isError:we}}),p=be(()=>a.storage.applicableUsers||[]);async function _(){await t.deleteStorage(a.storage)}async function m(){const f=await Fe(xe,{storage:a.storage});f&&await t.updateStorage(f)}async function g(){i.value=!0;try{await t.reloadStorage(a.storage)}finally{i.value=!1}}return(f,ne)=>(u(),h("tr",{class:x(f.$style.storageTableRow)},[y("td",null,[y("span",ha,v(s.value.label),1),b(e(P),{"aria-label":e(n)("files_external","Recheck status"),title:s.value.label,variant:"tertiary-no-background",onClick:g},{icon:w(()=>[s.value.icon==="loading"?(u(),k(e(me),{key:0})):(u(),k(e(F),{key:1,class:x({[f.$style.storageTableRow__status_error]:s.value.isError,[f.$style.storageTableRow__status_warning]:s.value.isWarning}),path:s.value.icon},null,8,["class","path"]))]),_:1},8,["aria-label","title"])]),y("td",null,v(l.storage.mountPoint),1),y("td",null,v(d.value),1),y("td",null,v(o.value),1),l.isAdmin?(u(),h("td",xa,[y("div",{class:x(f.$style.storageTableRow__cellApplicable)},[(u(!0),h(S,null,O(l.storage.applicableGroups,q=>(u(),k(e(je),{key:q,iconPath:e(Te),noClose:"",text:q},null,8,["iconPath","text"]))),128)),(u(!0),h(S,null,O(e(p),q=>(u(),k(e(He),{key:q.user,displayName:q.displayName,size:24,user:q.user},null,8,["displayName","user"]))),128))],2)])):T("",!0),y("td",null,[l.isAdmin||l.storage.type==="personal"?(u(),h("div",{key:0,class:x(f.$style.storageTableRow__cellActions)},[b(e(P),{"aria-label":e(n)("files_external","Edit"),title:e(n)("files_external","Edit"),onClick:m},{icon:w(()=>[b(e(F),{path:e(Oe)},null,8,["path"])]),_:1},8,["aria-label","title"]),b(e(P),{"aria-label":e(n)("files_external","Delete"),title:e(n)("files_external","Delete"),variant:"error",onClick:_},{icon:w(()=>[b(e(F),{path:e(Ne)},null,8,["path"])]),_:1},8,["aria-label","title"])],2)):(u(),k(e(F),{key:1,inline:"",path:e(qe),name:e(n)("files_external","System provided storage"),title:e(n)("files_external","System provided storage")},null,8,["path","name","title"]))])],2))}}),ka="_storageTableRow__cellActions_1k62p_2",Va="_storageTableRow__cellApplicable_1k62p_7",Sa="_storageTableRow__status_warning_1k62p_17",Ca="_storageTableRow__status_error_1k62p_21",Ma={storageTableRow__cellActions:ka,storageTableRow__cellApplicable:Va,storageTableRow__status_warning:Sa,storageTableRow__status_error:Ca},Aa={$style:Ma},Ua=N(wa,[["__cssModules",Aa]]),$a=["aria-label"],Ta={class:"hidden-visually"},Oa={key:0},Na={class:"hidden-visually"},qa=$({__name:"ExternalStorageTable",setup(l){const a=se(),{isAdmin:t}=A("files_external","settings"),r=C(()=>t?a.globalStorages:[...a.userStorages,...a.globalStorages]);return(d,c)=>(u(),h("table",{class:x(d.$style.storageTable),"aria-label":e(n)("files_external","External storages")},[y("thead",{class:x(d.$style.storageTable__header)},[y("tr",null,[y("th",{class:x(d.$style.storageTable__headerStatus)},[y("span",Ta,v(e(n)("files_external","Status")),1)],2),y("th",{class:x(d.$style.storageTable__headerFolder)},v(e(n)("files_external","Folder name")),3),y("th",{class:x(d.$style.storageTable__headerBackend)},v(e(n)("files_external","External storage")),3),y("th",{class:x(d.$style.storageTable__headerAuthentication)},v(e(n)("files_external","Authentication")),3),e(t)?(u(),h("th",Oa,v(e(n)("files_external","Restricted to")),1)):T("",!0),y("th",{class:x(d.$style.storageTable__headerActions)},[y("span",Na,v(e(n)("files_external","Actions")),1)],2)])],2),y("tbody",null,[(u(!0),h(S,null,O(r.value,o=>(u(),k(Ua,{key:o.id,isAdmin:e(t),storage:o},null,8,["isAdmin","storage"]))),128))])],10,$a))}}),Pa="_storageTable_1dqte_2",Ea="_storageTable__header_1dqte_11",Ra="_storageTable__headerStatus_1dqte_16",Fa="_storageTable__headerFolder_1dqte_20",Ba="_storageTable__headerBackend_1dqte_24",La="_storageTable__headerFAuthentication_1dqte_28",ja="_storageTable__headerActions_1dqte_32",Da={storageTable:Pa,storageTable__header:Ea,storageTable__headerStatus:Ra,storageTable__headerFolder:Fa,storageTable__headerBackend:Ba,storageTable__headerFAuthentication:La,storageTable__headerActions:ja},Ha={$style:Da},Ga=N(qa,[["__cssModules",Ha]]),Ia=$({__name:"UserMountSettings",setup(l){const a=A("files_external","user-mounting"),t=A("files_external","backends").filter(c=>c.identifier!=="local"),r=M(a.allowUserMounting),d=M(a.allowedBackends);return z(r,()=>{const c=!r.value;window.OCP.AppConfig.setValue("files_external","allow_user_mounting",r.value?"yes":"no",{success:()=>le(n("files_external","Saved")),error:()=>{r.value=c,te(n("files_external","Error while saving"))}})}),z(d,(c,o)=>{window.OCP.AppConfig.setValue("files_external","user_mounting_backends",c.join(","),{success:()=>le(n("files_external","Saved allowed backends")),error:()=>{te(n("files_external","Failed to save allowed backends")),d.value=o}})}),(c,o)=>(u(),h("form",null,[y("h3",{class:x(c.$style.userMountSettings__heading)},v(e(n)("files_external","Advanced options for external storage mounts")),3),b(e(E),{modelValue:r.value,"onUpdate:modelValue":o[0]||(o[0]=i=>r.value=i),type:"switch"},{default:w(()=>[V(v(e(n)("files_external","Allow people to mount external storage")),1)]),_:1},8,["modelValue"]),W(y("fieldset",{class:x(c.$style.userMountSettings__backends)},[y("legend",null,v(e(n)("files_external","External storage backends people are allowed to mount")),1),(u(!0),h(S,null,O(e(t),i=>(u(),k(e(E),{key:i.identifier,modelValue:d.value,"onUpdate:modelValue":o[1]||(o[1]=s=>d.value=s),value:i.identifier,name:"allowUserMountingBackends[]"},{default:w(()=>[V(v(i.name),1)]),_:2},1032,["modelValue","value"]))),128))],2),[[Y,r.value]])]))}}),Qa="_userMountSettings__heading_59moz_2",za="_userMountSettings__backends_59moz_9",Za={userMountSettings__heading:Qa,userMountSettings__backends:za},Ka={$style:Za},Wa=N(Ia,[["__cssModules",Ka]]);const Ya=["aria-label"],Ja=$({__name:"ExternalStoragesSection",setup(l){const a=A("files_external","settings",{docUrl:"",dependencyIssues:{messages:null,modules:null},isAdmin:!1}),t=se(),r=a.dependencyIssues?.messages??[],d=a.dependencyIssues?.modules??{},c=M(!1),o=M();async function i(s){if(c.value=!1,!!s)try{a.isAdmin?await t.createGlobalStorage(s):await t.createUserStorage(s),o.value=void 0}catch(p){ve.error("Failed to add external storage",{error:p,storage:s}),o.value={...s},c.value=!0}}return(s,p)=>(u(),k(e(ce),{docUrl:e(a).docUrl,name:e(n)("files_external","External storage"),description:e(n)("files_external","External storage enables you to mount external storage services and devices as secondary Nextcloud storage devices.")+(e(a).isAdmin?" "+e(n)("files_external","You may also allow people to mount their own external storage services."):"")},{default:w(()=>[(u(!0),h(S,null,O(e(r),(_,m)=>(u(),k(e(re),{key:m,type:"error"},{default:w(()=>[V(v(_),1)]),_:2},1024))),128)),(u(!0),h(S,null,O(e(d),(_,m)=>(u(),k(e(re),{key:m,type:"warning"},{default:w(()=>[y("p",null,[m==="curl"?(u(),h(S,{key:0},[V(v(e(n)("files_external","The cURL support in PHP is not enabled or installed.")),1)],64)):m==="ftp"?(u(),h(S,{key:1},[V(v(e(n)("files_external","The FTP support in PHP is not enabled or installed.")),1)],64)):(u(),h(S,{key:2},[V(v(e(n)("files_external","{module} is not installed.",{module:m})),1)],64)),V(" "+v(e(Ee)("files_external","Please ask your system administrator to install it as otherwise mounting the following backend is not possible:","Please ask your system administrator to install it as otherwise mounting the following backends is not possible:",_.length)),1)]),y("ul",{class:x(s.$style.externalStoragesSection__dependantList),"aria-label":e(n)("files_external","Dependant backends")},[(u(!0),h(S,null,O(_,g=>(u(),h("li",{key:g},v(g),1))),128))],10,Ya)]),_:2},1024))),128)),T("",!0),b(Ga),b(e(P),{class:x(s.$style.externalStoragesSection__newStorageButton),variant:"primary",onClick:p[0]||(p[0]=_=>c.value=!c.value)},{icon:w(()=>[b(e(F),{path:e(Pe)},null,8,["path"])]),default:w(()=>[V(" "+v(e(n)("files_external","Add external storage")),1)]),_:1},8,["class"]),b(xe,{open:c.value,"onUpdate:open":p[1]||(p[1]=_=>c.value=_),storage:o.value,onClose:i},null,8,["open","storage"]),e(a).isAdmin?(u(),k(Wa,{key:1})):T("",!0)]),_:1},8,["docUrl","name","description"]))}}),Xa="_externalStoragesSection__dependantList_atsmn_2",et="_externalStoragesSection__newStorageButton_atsmn_7",at={externalStoragesSection__dependantList:Xa,externalStoragesSection__newStorageButton:et},tt={$style:at},lt=N(Ja,[["__cssModules",tt]]),st=$({__name:"GlobalCredentialsSection",setup(l){const a=A("files_external","global-credentials"),t=M(!1),r=M(a.user),d=M(a.password);fe(U);async function c(){try{t.value=!0;const{data:o}=await U.post(R("apps/files_external/globalcredentials"),{uid:a.uid,user:r.value,password:d.value},{confirmPassword:I.Strict});if(o){le(n("files_external","Global credentials saved"));return}}catch(o){ve.error(o)}finally{t.value=!1}te(n("files_external","Could not save global credentials")),r.value=a.user,d.value=a.password}return(o,i)=>(u(),k(e(ce),{name:e(n)("files_external","Global credentials"),description:e(n)("files_external","Global credentials can be used to authenticate with multiple external storages that have the same credentials.")},{default:w(()=>[y("form",{id:"global_credentials",class:x(o.$style.globalCredentialsSectionForm),autocomplete:"false",onSubmit:Me(c,["prevent"])},[b(e(_e),{modelValue:r.value,"onUpdate:modelValue":i[0]||(i[0]=s=>r.value=s),name:"username",autocomplete:"false",label:e(n)("files_external","Login")},null,8,["modelValue","label"]),b(e(De),{modelValue:d.value,"onUpdate:modelValue":i[1]||(i[1]=s=>d.value=s),name:"password",autocomplete:"false",label:e(n)("files_external","Password")},null,8,["modelValue","label"]),b(e(P),{class:x(o.$style.globalCredentialsSectionForm__submit),disabled:t.value,variant:"primary",type:"submit"},{default:w(()=>[V(v(t.value?e(n)("files_external","Saving …"):e(n)("files_external","Save")),1)]),_:1},8,["class","disabled"])],34)]),_:1},8,["name","description"]))}}),nt="_globalCredentialsSectionForm_bgjv2_2",ot="_globalCredentialsSectionForm__submit_bgjv2_10",it={globalCredentialsSectionForm:nt,globalCredentialsSectionForm__submit:ot},rt={$style:it},ut=N(st,[["__cssModules",rt]]),dt=$({__name:"FilesExternalSettings",setup(l){return(a,t)=>(u(),h(S,null,[b(lt),b(ut)],64))}}),ct=Ve(),X=Ae(dt);X.config.idPrefix="files-external",X.use(ct),X.mount("#files-external"); +import{d as ke,c as Ve}from"./pinia-CLibr4cC.chunk.mjs";import{H as K,a9 as ee,R as Se,v as C,b as $,n as B,o as u,c as k,u as e,l as M,z,f as h,y as x,g as y,t as v,F as S,C as Ce,B as O,L as W,M as Y,h as T,s as Z,a1 as Q,U as ie,k as b,w,j as V,N as Me,e as Ae}from"./Web-BwmPK40i.chunk.mjs";import{s as Ue,g as $e,t as Te,u as Oe,l as Ne,v as qe,N as re,k as Pe}from"./mdi-Lt-19ASw.chunk.mjs";import{_ as N,l as A}from"./public-C1mLBHT3.chunk.mjs";import{t as n,a as Ee}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import{N as P}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import{N as F}from"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import{N as ce}from"./ContentCopy-BF1gBM5z.chunk.mjs";import{N as Re,s as Fe}from"./index-BW4M2n71.chunk.mjs";import{N as ae}from"./index-BOH7nBEM.chunk.mjs";import{_ as _e}from"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";import{c as U}from"./index-BLNGy7h5.chunk.mjs";import{b as R}from"./index-B-dGqfIG.chunk.mjs";import{N as Be}from"./NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs";import{b as Le}from"./index-DlyLvrtV.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";/* empty css */import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import{N as me}from"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import{N as E}from"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import{N as je}from"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import{N as De}from"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./index-xEyWukTf.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import{N as He}from"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import{_ as pe}from"./AuthMechanismRsa-Bue2F6rp.chunk.mjs";import{C as H,a as ge,M as G,S as L,b as Ge,c as Ie}from"./types-BINwlUX8.chunk.mjs";import{a as fe,P as I}from"./index-BU6wm4Hd.chunk.mjs";import{a as te,d as le}from"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import{l as ve}from"./logger-n22jyIXx.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";const Qe='',J=Se(new Map);function be(l){const a=C(()=>ee(l).map(t=>({id:`user:${t}`,user:t,displayName:J.get(t)||t})));return K(async()=>{const t=ee(l).filter(r=>!J.has(r));if(t.length>0){const{data:r}=await U.post(R("/displaynames"),{users:t});for(const[d,c]of Object.entries(r.users))J.set(d,c)}}),a}function ze(l){return C(()=>ee(l).map(ye))}function ye(l){return{id:l,isNoUser:!0,displayName:l,iconSvg:Qe}}const Ze=$({__name:"ApplicableEntities",props:{groups:{default:()=>[]},groupsModifiers:{},users:{default:()=>[]},usersModifiers:{}},emits:["update:groups","update:users"],setup(l){const a=B(l,"groups"),t=B(l,"users"),r=M([]),d=be(t),c=ze(a),o=C({get(){return[...c.value,...d.value]},set(p){t.value=p.filter(_=>_.user).map(_=>_.user),a.value=p.filter(_=>_.isNoUser).map(_=>_.id)}}),i=Le(s,500);async function s(p){const{data:_}=await U.get(R("apps/files_external/ajax/applicable"),{params:{pattern:p,limit:20}}),m=[...r.value.map(g=>[g.id,g]),...Object.entries(_.groups).map(([g,f])=>[g,{...ye(g),displayName:f}]),...Object.entries(_.users).map(([g,f])=>[`user:${g}`,{id:`user:${g}`,user:g,displayName:f}])];r.value=[...new Map(m).values()]}return(p,_)=>(u(),k(e(Be),{modelValue:o.value,"onUpdate:modelValue":_[0]||(_[0]=m=>o.value=m),keepOpen:"",multiple:"",options:r.value,inputLabel:e(n)("files_external","Restrict to"),onSearch:e(i)},null,8,["modelValue","options","inputLabel","onSearch"]))}}),Ke=$({__name:"AuthMechanismConfiguration",props:Z({authMechanism:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(l){const a=B(l,"modelValue"),t=l,r=C(()=>{if(!t.authMechanism.configuration)return;const s=Object.entries(t.authMechanism.configuration).filter(([,p])=>!(p.flags&H.UserProvided));return Object.fromEntries(s)}),d=C(()=>window.OCA.FilesExternal.AuthMechanism.getHandler(t.authMechanism)),c=C(()=>{if(!r.value)return!1;for(const s of Object.values(r.value))if(!(s.flags&H.Hidden||s.flags&H.UserProvided))return!0;return!1}),o=M(!1);K(async()=>{d.value&&(o.value=!0,await window.customElements.whenDefined(d.value.tagName),o.value=!1)}),z(r,()=>{for(const s in r.value)s in a.value||(a.value[s]=r.value[s]?.type===ge.Boolean?!1:"")});function i(s){const p=[s.detail].flat()[0];a.value={...a.value,...p}}return(s,p)=>c.value?(u(),h("fieldset",{key:0,class:x(s.$style.authMechanismConfiguration)},[y("legend",null,v(e(n)("files_external","Authentication")),1),d.value?(u(),h(S,{key:0},[o.value?(u(),k(e(me),{key:0})):(u(),k(Ce(d.value.tagName),{key:1,".modelValue":a.value,".authMechanism":l.authMechanism,"onUpdate:modelValue":i},null,40,[".modelValue",".authMechanism"]))],64)):(u(!0),h(S,{key:1},O(r.value,(_,m)=>W((u(),k(pe,{key:_.value,modelValue:a.value[m],"onUpdate:modelValue":g=>a.value[m]=g,"config-key":m,"config-option":_},null,8,["modelValue","onUpdate:modelValue","config-key","config-option"])),[[Y,!(_.flags&e(H).Hidden)]])),128))],2)):T("",!0)}}),We="_authMechanismConfiguration_kpcpy_2",Ye={authMechanismConfiguration:We},Je={$style:Ye},Xe=N(Ke,[["__cssModules",Je]]),ea=$({__name:"BackendConfiguration",props:Z({configuration:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(l){const a=B(l,"modelValue"),t=l;return z(()=>t.configuration,()=>{for(const r in t.configuration)r in a.value||(a.value[r]=t.configuration[r]?.defaultValue??(t.configuration[r]?.type===ge.Boolean?!1:""))},{immediate:!0}),(r,d)=>(u(),h("fieldset",{class:x(r.$style.backendConfiguration)},[y("legend",null,v(e(n)("files_external","Storage configuration")),1),(u(!0),h(S,null,O(l.configuration,(c,o)=>W((u(),k(pe,{key:c.value,modelValue:a.value[o],"onUpdate:modelValue":i=>a.value[o]=i,configKey:o,configOption:c},null,8,["modelValue","onUpdate:modelValue","configKey","configOption"])),[[Y,!(c.flags&e(H).Hidden)]])),128))],2))}}),aa="_backendConfiguration_1sf6y_2",ta={backendConfiguration:aa},la={$style:ta},sa=N(ea,[["__cssModules",la]]),{isAdmin:na}=A("files_external","settings"),se=ke("files_external--storages",()=>{const l=M([]),a=M([]);async function t(m){const g=R("apps/files_external/globalstorages"),{data:f}=await U.post(g,Q(m),{confirmPassword:I.Strict});l.value.push(j(f))}async function r(m){const g=R("apps/files_external/userstorages"),{data:f}=await U.post(g,Q(m),{confirmPassword:I.Strict});a.value.push(j(f))}async function d(m){await U.delete(p(m),{confirmPassword:I.Strict}),m.type==="personal"?a.value=a.value.filter(g=>g.id!==m.id):l.value=l.value.filter(g=>g.id!==m.id)}async function c(m){const{data:g}=await U.put(p(m),Q(m),{confirmPassword:I.Strict});_(j(g))}async function o(m){const{data:g}=await U.get(p(m));_(j(g))}return s(),{globalStorages:l,userStorages:a,createGlobalStorage:t,createUserStorage:r,deleteStorage:d,reloadStorage:o,updateStorage:c};async function i(m){const g=`apps/files_external/${m}`,{data:f}=await U.get(R(g));return Object.values(f).map(j)}async function s(){fe(U),na?l.value=await i("globalstorages"):(a.value=await i("userstorages"),l.value=await i("userglobalstorages"))}function p(m){const g=m.type==="personal"?"userstorages":"globalstorages";return R(`apps/files_external/${g}/${m.id}`)}function _(m){if(m.type==="personal"){const g=a.value.findIndex(f=>f.id===m.id);a.value.splice(g,1,m)}else{const g=l.value.findIndex(f=>f.id===m.id);l.value.splice(g,1,m)}}});function j(l){return{...l,mountOptions:he(l.mountOptions)}}function he(l){const a={...l};return a.encrypt=D(a.encrypt,!0),a.previews=D(a.previews,!0),a.enable_sharing=D(a.enable_sharing,!1),a.filesystem_check_changes=typeof a.filesystem_check_changes=="string"?Number.parseInt(a.filesystem_check_changes):a.filesystem_check_changes??G.OncePerRequest,a.encoding_compatibility=D(a.encoding_compatibility,!1),a.readonly=D(a.readonly,!1),a}function D(l,a=!1){return l===void 0?a:l===!0||l==="true"||l==="1"}const oa=["id","aria-labelledby"],ia=$({__name:"MountOptions",props:{modelValue:{required:!0},modelModifiers:{}},emits:["update:modelValue"],setup(l){const a=B(l,"modelValue");K(()=>{Object.keys(a.value).length===0&&(a.value=he(a.value))});const{hasEncryption:t}=A("files_external","settings"),r=ie(),d=ie(),c=M(!1),o=[{label:n("files_external","Never"),value:G.Never},{label:n("files_external","Once every direct access"),value:G.OncePerRequest},{label:n("files_external","Always"),value:G.Always}],i=C({get(){return o.find(s=>s.value===a.value.filesystem_check_changes)},set(s){a.value.filesystem_check_changes=s?.value??G.OncePerRequest}});return(s,p)=>(u(),h("div",{class:x(s.$style.mountOptions)},[b(e(P),{id:e(r),"aria-controls":e(d),"aria-expanded":c.value,variant:"tertiary-no-background",onClick:p[0]||(p[0]=_=>c.value=!c.value)},{icon:w(()=>[b(e(F),{directional:"",path:c.value?e(Ue):e($e)},null,8,["path"])]),default:w(()=>[V(" "+v(e(n)("files_external","Mount options")),1)]),_:1},8,["id","aria-controls","aria-expanded"]),W(y("fieldset",{id:e(d),class:x(s.$style.mountOptions__fieldset),"aria-labelledby":e(r)},[b(e(ae),{modelValue:i.value,"onUpdate:modelValue":p[1]||(p[1]=_=>i.value=_),inputLabel:e(n)("files_external","Check filesystem changes"),options:o},null,8,["modelValue","inputLabel"]),b(e(E),{modelValue:l.modelValue.readonly,"onUpdate:modelValue":p[2]||(p[2]=_=>l.modelValue.readonly=_),type:"switch"},{default:w(()=>[V(v(e(n)("files_external","Read only")),1)]),_:1},8,["modelValue"]),b(e(E),{modelValue:l.modelValue.previews,"onUpdate:modelValue":p[3]||(p[3]=_=>l.modelValue.previews=_),type:"switch"},{default:w(()=>[V(v(e(n)("files_external","Enable previews")),1)]),_:1},8,["modelValue"]),b(e(E),{modelValue:l.modelValue.enable_sharing,"onUpdate:modelValue":p[4]||(p[4]=_=>l.modelValue.enable_sharing=_),type:"switch"},{default:w(()=>[V(v(e(n)("files_external","Enable sharing")),1)]),_:1},8,["modelValue"]),e(t)?(u(),k(e(E),{key:0,modelValue:l.modelValue.encrypt,"onUpdate:modelValue":p[5]||(p[5]=_=>l.modelValue.encrypt=_),type:"switch"},{default:w(()=>[V(v(e(n)("files_external","Enable encryption")),1)]),_:1},8,["modelValue"])):T("",!0),b(e(E),{modelValue:l.modelValue.encoding_compatibility,"onUpdate:modelValue":p[6]||(p[6]=_=>l.modelValue.encoding_compatibility=_),type:"switch"},{default:w(()=>[V(v(e(n)("files_external","Compatibility with Mac NFD encoding (slow)")),1)]),_:1},8,["modelValue"])],10,oa),[[Y,c.value]])],2))}}),ra="_mountOptions_1fqyb_2",ua="_mountOptions__fieldset_1fqyb_12",da={mountOptions:ra,mountOptions__fieldset:ua},ca={$style:da},_a=N(ia,[["__cssModules",ca]]),{isAdmin:ue}=A("files_external","settings"),ma=A("files_external","allowedBackends"),de=A("files_external","backends").filter(l=>ma.includes(l.identifier)),pa=A("files_external","authMechanisms"),ga=$({__name:"AddExternalStorageDialog",props:Z({storage:{default:()=>({backendOptions:{},mountOptions:{},type:ue?"system":"personal"})}},{open:{type:Boolean,default:!0},openModifiers:{}}),emits:Z(["close"],["update:open"]),setup(l){const a=B(l,"open"),t=M(structuredClone(Q(l.storage)));K(()=>{a.value&&(t.value=structuredClone(Q(l.storage)))});const r=C({get(){return de.find(o=>o.identifier===t.value.backend)},set(o){t.value.backend=o?.identifier}}),d=C(()=>pa.filter(({scheme:o})=>r.value?.authSchemes[o])),c=C({get(){return d.value.find(o=>o.identifier===t.value.authMechanism)},set(o){t.value.authMechanism=o?.identifier}});return z(d,()=>{d.value.length===1&&(t.value.authMechanism=d.value[0].identifier)}),(o,i)=>(u(),k(e(Re),{open:a.value,"onUpdate:open":[i[9]||(i[9]=s=>a.value=s),i[11]||(i[11]=s=>s||o.$emit("close"))],isForm:"",contentClasses:o.$style.externalStorageDialog,name:t.value.id?e(n)("files_external","Edit storage"):e(n)("files_external","Add storage"),onSubmit:i[10]||(i[10]=s=>o.$emit("close",t.value))},{actions:w(()=>[l.storage.id?(u(),k(e(P),{key:0,onClick:i[8]||(i[8]=s=>o.$emit("close"))},{default:w(()=>[V(v(e(n)("files_external","Cancel")),1)]),_:1})):T("",!0),b(e(P),{variant:"primary",type:"submit"},{default:w(()=>[V(v(l.storage.id?e(n)("files_external","Edit"):e(n)("files_external","Create")),1)]),_:1})]),default:w(()=>[b(e(_e),{modelValue:t.value.mountPoint,"onUpdate:modelValue":i[0]||(i[0]=s=>t.value.mountPoint=s),label:e(n)("files_external","Folder name"),required:""},null,8,["modelValue","label"]),b(_a,{modelValue:t.value.mountOptions,"onUpdate:modelValue":i[1]||(i[1]=s=>t.value.mountOptions=s)},null,8,["modelValue"]),e(ue)?(u(),k(Ze,{key:0,groups:t.value.applicableGroups,"onUpdate:groups":i[2]||(i[2]=s=>t.value.applicableGroups=s),users:t.value.applicableUsers,"onUpdate:users":i[3]||(i[3]=s=>t.value.applicableUsers=s)},null,8,["groups","users"])):T("",!0),b(e(ae),{modelValue:r.value,"onUpdate:modelValue":i[4]||(i[4]=s=>r.value=s),options:e(de),disabled:!!(t.value.id&&t.value.backend),inputLabel:e(n)("files_external","External storage"),label:"name",required:""},null,8,["modelValue","options","disabled","inputLabel"]),b(e(ae),{modelValue:c.value,"onUpdate:modelValue":i[5]||(i[5]=s=>c.value=s),options:d.value,disabled:!t.value.backend||d.value.length<=1||!!(t.value.id&&t.value.authMechanism),inputLabel:e(n)("files_external","Authentication"),label:"name",required:""},null,8,["modelValue","options","disabled","inputLabel"]),r.value&&t.value.backendOptions?(u(),k(sa,{key:1,modelValue:t.value.backendOptions,"onUpdate:modelValue":i[6]||(i[6]=s=>t.value.backendOptions=s),class:x(o.$style.externalStorageDialog__configuration),configuration:r.value.configuration},null,8,["modelValue","class","configuration"])):T("",!0),c.value&&t.value.backendOptions?(u(),k(Xe,{key:2,modelValue:t.value.backendOptions,"onUpdate:modelValue":i[7]||(i[7]=s=>t.value.backendOptions=s),class:x(o.$style.externalStorageDialog__configuration),authMechanism:c.value},null,8,["modelValue","class","authMechanism"])):T("",!0)]),_:1},8,["open","contentClasses","name"]))}}),fa="_externalStorageDialog_9wew8_2",va="_externalStorageDialog__configuration_9wew8_9",ba={externalStorageDialog:fa,externalStorageDialog__configuration:va},ya={$style:ba},xe=N(ga,[["__cssModules",ya]]),ha={class:"hidden-visually"},xa={key:0},wa=$({__name:"ExternalStorageTableRow",props:{storage:{},isAdmin:{type:Boolean}},setup(l){const a=l,t=se(),r=A("files_external","backends"),d=C(()=>r.find(f=>f.identifier===a.storage.backend).name),c=A("files_external","authMechanisms"),o=C(()=>c.find(f=>f.identifier===a.storage.authMechanism).name),i=M(!1),s=C(()=>{if(i.value)return{icon:"loading",label:n("files_external","Checking …")};const f=a.storage.status??L.Indeterminate,ne=a.storage.statusMessage||Ge[f],q=Ie[f],oe=f===L.NetworkError||f===L.Timeout,we=!oe&&f!==L.Success&&f!==L.Indeterminate;return{icon:q,label:ne,isWarning:oe,isError:we}}),p=be(()=>a.storage.applicableUsers||[]);async function _(){await t.deleteStorage(a.storage)}async function m(){const f=await Fe(xe,{storage:a.storage});f&&await t.updateStorage(f)}async function g(){i.value=!0;try{await t.reloadStorage(a.storage)}finally{i.value=!1}}return(f,ne)=>(u(),h("tr",{class:x(f.$style.storageTableRow)},[y("td",null,[y("span",ha,v(s.value.label),1),b(e(P),{"aria-label":e(n)("files_external","Recheck status"),title:s.value.label,variant:"tertiary-no-background",onClick:g},{icon:w(()=>[s.value.icon==="loading"?(u(),k(e(me),{key:0})):(u(),k(e(F),{key:1,class:x({[f.$style.storageTableRow__status_error]:s.value.isError,[f.$style.storageTableRow__status_warning]:s.value.isWarning}),path:s.value.icon},null,8,["class","path"]))]),_:1},8,["aria-label","title"])]),y("td",null,v(l.storage.mountPoint),1),y("td",null,v(d.value),1),y("td",null,v(o.value),1),l.isAdmin?(u(),h("td",xa,[y("div",{class:x(f.$style.storageTableRow__cellApplicable)},[(u(!0),h(S,null,O(l.storage.applicableGroups,q=>(u(),k(e(je),{key:q,iconPath:e(Te),noClose:"",text:q},null,8,["iconPath","text"]))),128)),(u(!0),h(S,null,O(e(p),q=>(u(),k(e(He),{key:q.user,displayName:q.displayName,size:24,user:q.user},null,8,["displayName","user"]))),128))],2)])):T("",!0),y("td",null,[l.isAdmin||l.storage.type==="personal"?(u(),h("div",{key:0,class:x(f.$style.storageTableRow__cellActions)},[b(e(P),{"aria-label":e(n)("files_external","Edit"),title:e(n)("files_external","Edit"),onClick:m},{icon:w(()=>[b(e(F),{path:e(Oe)},null,8,["path"])]),_:1},8,["aria-label","title"]),b(e(P),{"aria-label":e(n)("files_external","Delete"),title:e(n)("files_external","Delete"),variant:"error",onClick:_},{icon:w(()=>[b(e(F),{path:e(Ne)},null,8,["path"])]),_:1},8,["aria-label","title"])],2)):(u(),k(e(F),{key:1,inline:"",path:e(qe),name:e(n)("files_external","System provided storage"),title:e(n)("files_external","System provided storage")},null,8,["path","name","title"]))])],2))}}),ka="_storageTableRow__cellActions_1k62p_2",Va="_storageTableRow__cellApplicable_1k62p_7",Sa="_storageTableRow__status_warning_1k62p_17",Ca="_storageTableRow__status_error_1k62p_21",Ma={storageTableRow__cellActions:ka,storageTableRow__cellApplicable:Va,storageTableRow__status_warning:Sa,storageTableRow__status_error:Ca},Aa={$style:Ma},Ua=N(wa,[["__cssModules",Aa]]),$a=["aria-label"],Ta={class:"hidden-visually"},Oa={key:0},Na={class:"hidden-visually"},qa=$({__name:"ExternalStorageTable",setup(l){const a=se(),{isAdmin:t}=A("files_external","settings"),r=C(()=>t?a.globalStorages:[...a.userStorages,...a.globalStorages]);return(d,c)=>(u(),h("table",{class:x(d.$style.storageTable),"aria-label":e(n)("files_external","External storages")},[y("thead",{class:x(d.$style.storageTable__header)},[y("tr",null,[y("th",{class:x(d.$style.storageTable__headerStatus)},[y("span",Ta,v(e(n)("files_external","Status")),1)],2),y("th",{class:x(d.$style.storageTable__headerFolder)},v(e(n)("files_external","Folder name")),3),y("th",{class:x(d.$style.storageTable__headerBackend)},v(e(n)("files_external","External storage")),3),y("th",{class:x(d.$style.storageTable__headerAuthentication)},v(e(n)("files_external","Authentication")),3),e(t)?(u(),h("th",Oa,v(e(n)("files_external","Restricted to")),1)):T("",!0),y("th",{class:x(d.$style.storageTable__headerActions)},[y("span",Na,v(e(n)("files_external","Actions")),1)],2)])],2),y("tbody",null,[(u(!0),h(S,null,O(r.value,o=>(u(),k(Ua,{key:o.id,isAdmin:e(t),storage:o},null,8,["isAdmin","storage"]))),128))])],10,$a))}}),Pa="_storageTable_1dqte_2",Ea="_storageTable__header_1dqte_11",Ra="_storageTable__headerStatus_1dqte_16",Fa="_storageTable__headerFolder_1dqte_20",Ba="_storageTable__headerBackend_1dqte_24",La="_storageTable__headerFAuthentication_1dqte_28",ja="_storageTable__headerActions_1dqte_32",Da={storageTable:Pa,storageTable__header:Ea,storageTable__headerStatus:Ra,storageTable__headerFolder:Fa,storageTable__headerBackend:Ba,storageTable__headerFAuthentication:La,storageTable__headerActions:ja},Ha={$style:Da},Ga=N(qa,[["__cssModules",Ha]]),Ia=$({__name:"UserMountSettings",setup(l){const a=A("files_external","user-mounting"),t=A("files_external","backends").filter(c=>c.identifier!=="local"),r=M(a.allowUserMounting),d=M(a.allowedBackends);return z(r,()=>{const c=!r.value;window.OCP.AppConfig.setValue("files_external","allow_user_mounting",r.value?"yes":"no",{success:()=>le(n("files_external","Saved")),error:()=>{r.value=c,te(n("files_external","Error while saving"))}})}),z(d,(c,o)=>{window.OCP.AppConfig.setValue("files_external","user_mounting_backends",c.join(","),{success:()=>le(n("files_external","Saved allowed backends")),error:()=>{te(n("files_external","Failed to save allowed backends")),d.value=o}})}),(c,o)=>(u(),h("form",null,[y("h3",{class:x(c.$style.userMountSettings__heading)},v(e(n)("files_external","Advanced options for external storage mounts")),3),b(e(E),{modelValue:r.value,"onUpdate:modelValue":o[0]||(o[0]=i=>r.value=i),type:"switch"},{default:w(()=>[V(v(e(n)("files_external","Allow people to mount external storage")),1)]),_:1},8,["modelValue"]),W(y("fieldset",{class:x(c.$style.userMountSettings__backends)},[y("legend",null,v(e(n)("files_external","External storage backends people are allowed to mount")),1),(u(!0),h(S,null,O(e(t),i=>(u(),k(e(E),{key:i.identifier,modelValue:d.value,"onUpdate:modelValue":o[1]||(o[1]=s=>d.value=s),value:i.identifier,name:"allowUserMountingBackends[]"},{default:w(()=>[V(v(i.name),1)]),_:2},1032,["modelValue","value"]))),128))],2),[[Y,r.value]])]))}}),Qa="_userMountSettings__heading_59moz_2",za="_userMountSettings__backends_59moz_9",Za={userMountSettings__heading:Qa,userMountSettings__backends:za},Ka={$style:Za},Wa=N(Ia,[["__cssModules",Ka]]);const Ya=["aria-label"],Ja=$({__name:"ExternalStoragesSection",setup(l){const a=A("files_external","settings",{docUrl:"",dependencyIssues:{messages:null,modules:null},isAdmin:!1}),t=se(),r=a.dependencyIssues?.messages??[],d=a.dependencyIssues?.modules??{},c=M(!1),o=M();async function i(s){if(c.value=!1,!!s)try{a.isAdmin?await t.createGlobalStorage(s):await t.createUserStorage(s),o.value=void 0}catch(p){ve.error("Failed to add external storage",{error:p,storage:s}),o.value={...s},c.value=!0}}return(s,p)=>(u(),k(e(ce),{docUrl:e(a).docUrl,name:e(n)("files_external","External storage"),description:e(n)("files_external","External storage enables you to mount external storage services and devices as secondary Nextcloud storage devices.")+(e(a).isAdmin?" "+e(n)("files_external","You may also allow people to mount their own external storage services."):"")},{default:w(()=>[(u(!0),h(S,null,O(e(r),(_,m)=>(u(),k(e(re),{key:m,type:"error"},{default:w(()=>[V(v(_),1)]),_:2},1024))),128)),(u(!0),h(S,null,O(e(d),(_,m)=>(u(),k(e(re),{key:m,type:"warning"},{default:w(()=>[y("p",null,[m==="curl"?(u(),h(S,{key:0},[V(v(e(n)("files_external","The cURL support in PHP is not enabled or installed.")),1)],64)):m==="ftp"?(u(),h(S,{key:1},[V(v(e(n)("files_external","The FTP support in PHP is not enabled or installed.")),1)],64)):(u(),h(S,{key:2},[V(v(e(n)("files_external","{module} is not installed.",{module:m})),1)],64)),V(" "+v(e(Ee)("files_external","Please ask your system administrator to install it as otherwise mounting the following backend is not possible:","Please ask your system administrator to install it as otherwise mounting the following backends is not possible:",_.length)),1)]),y("ul",{class:x(s.$style.externalStoragesSection__dependantList),"aria-label":e(n)("files_external","Dependant backends")},[(u(!0),h(S,null,O(_,g=>(u(),h("li",{key:g},v(g),1))),128))],10,Ya)]),_:2},1024))),128)),T("",!0),b(Ga),b(e(P),{class:x(s.$style.externalStoragesSection__newStorageButton),variant:"primary",onClick:p[0]||(p[0]=_=>c.value=!c.value)},{icon:w(()=>[b(e(F),{path:e(Pe)},null,8,["path"])]),default:w(()=>[V(" "+v(e(n)("files_external","Add external storage")),1)]),_:1},8,["class"]),b(xe,{open:c.value,"onUpdate:open":p[1]||(p[1]=_=>c.value=_),storage:o.value,onClose:i},null,8,["open","storage"]),e(a).isAdmin?(u(),k(Wa,{key:1})):T("",!0)]),_:1},8,["docUrl","name","description"]))}}),Xa="_externalStoragesSection__dependantList_atsmn_2",et="_externalStoragesSection__newStorageButton_atsmn_7",at={externalStoragesSection__dependantList:Xa,externalStoragesSection__newStorageButton:et},tt={$style:at},lt=N(Ja,[["__cssModules",tt]]),st=$({__name:"GlobalCredentialsSection",setup(l){const a=A("files_external","global-credentials"),t=M(!1),r=M(a.user),d=M(a.password);fe(U);async function c(){try{t.value=!0;const{data:o}=await U.post(R("apps/files_external/globalcredentials"),{uid:a.uid,user:r.value,password:d.value},{confirmPassword:I.Strict});if(o){le(n("files_external","Global credentials saved"));return}}catch(o){ve.error(o)}finally{t.value=!1}te(n("files_external","Could not save global credentials")),r.value=a.user,d.value=a.password}return(o,i)=>(u(),k(e(ce),{name:e(n)("files_external","Global credentials"),description:e(n)("files_external","Global credentials can be used to authenticate with multiple external storages that have the same credentials.")},{default:w(()=>[y("form",{id:"global_credentials",class:x(o.$style.globalCredentialsSectionForm),autocomplete:"false",onSubmit:Me(c,["prevent"])},[b(e(_e),{modelValue:r.value,"onUpdate:modelValue":i[0]||(i[0]=s=>r.value=s),name:"username",autocomplete:"false",label:e(n)("files_external","Login")},null,8,["modelValue","label"]),b(e(De),{modelValue:d.value,"onUpdate:modelValue":i[1]||(i[1]=s=>d.value=s),name:"password",autocomplete:"false",label:e(n)("files_external","Password")},null,8,["modelValue","label"]),b(e(P),{class:x(o.$style.globalCredentialsSectionForm__submit),disabled:t.value,variant:"primary",type:"submit"},{default:w(()=>[V(v(t.value?e(n)("files_external","Saving …"):e(n)("files_external","Save")),1)]),_:1},8,["class","disabled"])],34)]),_:1},8,["name","description"]))}}),nt="_globalCredentialsSectionForm_bgjv2_2",ot="_globalCredentialsSectionForm__submit_bgjv2_10",it={globalCredentialsSectionForm:nt,globalCredentialsSectionForm__submit:ot},rt={$style:it},ut=N(st,[["__cssModules",rt]]),dt=$({__name:"FilesExternalSettings",setup(l){return(a,t)=>(u(),h(S,null,[b(lt),b(ut)],64))}}),ct=Ve(),X=Ae(dt);X.config.idPrefix="files-external",X.use(ct),X.mount("#files-external"); //# sourceMappingURL=files_external-settings.mjs.map diff --git a/dist/files_reminders-init.css b/dist/files_reminders-init.css index 426550c47e712..a8abc2df9e9b0 100644 --- a/dist/files_reminders-init.css +++ b/dist/files_reminders-init.css @@ -17,7 +17,7 @@ @import './common-NcEmptyContent-CGAPqk4S-Don1d5Bd.chunk.css'; @import './common-NcPasswordField-Be5_qcfm-Crp_EMfV.chunk.css'; @import './common-NcBreadcrumbs-5gl8Syfa-CfbvucBX.chunk.css'; -@import './common-NcTextArea-Dxzj4zdb-DIo27L88.chunk.css'; +@import './common-NcTextArea-Dxzj4zdb-B-B2llha.chunk.css'; @import './common-NcActionSeparator-Ct2RnclR-pXJ_-D_I.chunk.css'; @import './common-NcCheckboxRadioSwitch-D8Dfv4iw-CPGkDj-p.chunk.css'; @import './common-Plus-Som-mR4B.chunk.css'; diff --git a/dist/files_reminders-init.mjs b/dist/files_reminders-init.mjs index c3b92b587f1b2..779e9ec861314 100644 --- a/dist/files_reminders-init.mjs +++ b/dist/files_reminders-init.mjs @@ -1,2 +1,2 @@ -import{a as l}from"./index-BDagnpAU.chunk.mjs";import{c as Q}from"./dav-CGJ67RGS.chunk.mjs";import{c as B,f as D,g as X}from"./index-B-dGqfIG.chunk.mjs";import{b as O,t as i}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import{c as W}from"./index-BLNGy7h5.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import"./NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs";import{N as J}from"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import{_ as ee}from"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";/* empty css */import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import{N as k}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import{N as te,s as re}from"./index-BW4M2n71.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import{N as M}from"./mdi-Lt-19ASw.chunk.mjs";import"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./index-xEyWukTf.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import"./ContentCopy-BF1gBM5z.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import{b as ie,A as ae,D as ne,o as v,c as y,w as d,g as se,N as oe,k as b,u as n,j as m,t as u,h as A,l as c}from"./Web-BwmPK40i.chunk.mjs";import{a as f,d as N}from"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import{_ as de}from"./public-C1mLBHT3.chunk.mjs";import"./folder-29HuacU_-Joa_bkj_.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";import"./index-BYnFfAmz.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";const le='';async function E(e,t){const r=B("/apps/files_reminders/api/v1/{fileId}",{fileId:e});return(await W.put(r,{dueDate:t.toISOString()})).data.ocs.data}async function Z(e){const t=B("/apps/files_reminders/api/v1/{fileId}",{fileId:e});return(await W.delete(t)).data.ocs.data}var p=(e=>(e.LaterToday="later-today",e.Tomorrow="tomorrow",e.ThisWeekend="this-weekend",e.NextWeek="next-week",e))(p||{});function F(){const e=new Date;return e.setHours(0,0,0,0),e.setDate(e.getDate()-e.getDay()+1),new Date(e)}function I(e){new Date(e).setHours(0,0,0,0);const t=new Date(e.getFullYear(),0,1,0,0,0,0),r=(e.getTime()-t.getTime())/864e5;return Math.ceil((r+t.getDay()+1)/7)}function me(e,t){return I(e)===I(t)&&e.getFullYear()===t.getFullYear()}function ue(e,t){return e.getDate()===t.getDate()&&e.getMonth()===t.getMonth()&&e.getFullYear()===t.getFullYear()}function _(e){return{"later-today":()=>{const t=new Date,r=new Date;r.setHours(18,0,0,0);const s=new Date;return s.setHours(17,0,0,0),t>=s?null:r},tomorrow:()=>{const t=new Date,r=new Date;return r.setDate(t.getDate()+1),r.setHours(8,0,0,0),r},"this-weekend":()=>{const t=new Date;if([5,6,0].includes(t.getDay()))return null;const r=new Date,s=F();return r.setDate(s.getDate()+5),r.setHours(8,0,0,0),r},"next-week":()=>{if(new Date().getDay()===0)return null;const t=new Date,r=F();return t.setDate(r.getDate()+7),t.setHours(8,0,0,0),t}}[e]()}function ce(){const e=new Date,t=new Date;return t.setHours(e.getHours()+2,0,0,0),t}function V(e){let t={hour:"numeric",minute:"2-digit"};const r=new Date;return ue(e,r)||(t={...t,weekday:"short"}),me(e,r)||(t={...t,month:"short",day:"numeric"}),e.getFullYear()!==r.getFullYear()&&(t={...t,year:"numeric"}),e.toLocaleString(O(),t)}function h(e){let t={month:"long",day:"numeric",weekday:"long",hour:"numeric",minute:"2-digit"};const r=new Date;return e.getFullYear()!==r.getFullYear()&&(t={...t,year:"numeric"}),e.toLocaleString(O(),t)}const fe={id:"clear-reminder",displayName:()=>i("files_reminders","Clear reminder"),title:({nodes:e})=>{const t=e.at(0),r=new Date(t.attributes["reminder-due-date"]);return`${i("files_reminders","Clear reminder")} – ${h(r)}`},iconSvgInline:()=>le,enabled:({nodes:e})=>e.length!==1?!1:!!e.at(0).attributes["reminder-due-date"],async exec({nodes:e}){const t=e.at(0);if(t.fileid)try{return await Z(t.fileid),t.attributes["reminder-due-date"]="",D("files:node:updated",t),!0}catch{return!1}return null},order:19},U='',L=X().setApp("files_reminders").detectUser().build(),pe=ie({__name:"SetCustomReminderModal",props:{node:{}},emits:["close"],setup(e,{emit:t}){const r=e,s=t,S=c(!1),C=c(!1),g=c(!0),o=c(),x=c(new Date);ae(()=>{const a=r.node.attributes["reminder-due-date"]?new Date(r.node.attributes["reminder-due-date"]):void 0;S.value=!!a,g.value=!0,C.value=!0,o.value=a??ce(),x.value=new Date}),ne(()=>{const a=document.getElementById("set-custom-reminder");a.focus(),S.value||a.showPicker()});async function q(){if(!(o.value instanceof Date)||isNaN(o.value.getTime())){f(i("files_reminders","Please choose a valid date & time"));return}try{await E(r.node.fileid,o.value);const a=r.node.clone();a.attributes["reminder-due-date"]=o.value.toISOString(),D("files:node:updated",a),N(i("files_reminders",'Reminder set for "{fileName}"',{fileName:r.node.displayname})),w()}catch(a){L.error("Failed to set reminder",{error:a}),f(i("files_reminders","Failed to set reminder"))}}async function z(){try{await Z(r.node.fileid);const a=r.node.clone();a.attributes["reminder-due-date"]="",D("files:node:updated",a),N(i("files_reminders",'Reminder cleared for "{fileName}"',{fileName:r.node.displayname})),w()}catch(a){L.error("Failed to clear reminder",{error:a}),f(i("files_reminders","Failed to clear reminder"))}}function w(){C.value=!1,s("close")}function G(){const a=document.getElementById("set-custom-reminder");g.value=a.checkValidity()}return(a,H)=>C.value?(v(),y(n(te),{key:0,name:n(i)("files_reminders","Set reminder for '{fileName}'",{fileName:e.node.displayname}),outTransition:"",size:"small",closeOnClickOutside:"",onClosing:w},{actions:d(()=>[b(n(k),{variant:"tertiary",onClick:w},{default:d(()=>[m(u(n(i)("files_reminders","Cancel")),1)]),_:1}),S.value?(v(),y(n(k),{key:0,onClick:z},{default:d(()=>[m(u(n(i)("files_reminders","Clear reminder")),1)]),_:1})):A("",!0),b(n(k),{disabled:!g.value,variant:"primary",form:"set-custom-reminder-form",type:"submit"},{default:d(()=>[m(u(n(i)("files_reminders","Set reminder")),1)]),_:1},8,["disabled"])]),default:d(()=>[se("form",{id:"set-custom-reminder-form",class:"custom-reminder-modal",onSubmit:oe(q,["prevent"])},[b(n(J),{id:"set-custom-reminder",modelValue:o.value,"onUpdate:modelValue":H[0]||(H[0]=K=>o.value=K),label:n(i)("files_reminders","Reminder at custom date & time"),min:x.value,required:!0,type:"datetime-local",onInput:G},null,8,["modelValue","label","min"]),g.value&&o.value?(v(),y(n(M),{key:0,type:"info"},{default:d(()=>[m(u(n(i)("files_reminders","We will remind you of this file"))+" ",1),b(n(ee),{timestamp:o.value},null,8,["timestamp"])]),_:1})):(v(),y(n(M),{key:1,type:"error"},{default:d(()=>[m(u(n(i)("files_reminders","Please choose a valid date & time")),1)]),_:1}))],32)]),_:1},8,["name"])):A("",!0)}}),ge=de(pe,[["__scopeId","data-v-1cc1857f"]]);async function j(e){await re(ge,{node:e})}const we={id:"reminder-status",inline:()=>!0,displayName:()=>"",title:({nodes:e})=>{const t=e.at(0),r=new Date(t.attributes["reminder-due-date"]);return`${i("files_reminders","Reminder set")} – ${h(r)}`},iconSvgInline:()=>U,enabled:({nodes:e})=>e.length!==1?!1:!!e.at(0).attributes["reminder-due-date"],async exec({nodes:e}){const t=e.at(0);return await j(t),null},order:-15},ve='',T="set-reminder-menu",ye={id:T,displayName:()=>i("files_reminders","Set reminder"),iconSvgInline:()=>U,enabled:({nodes:e,view:t})=>t.id==="trashbin"||e.length!==1?!1:e.at(0).attributes["reminder-due-date"]!==void 0,async exec(){return null},order:20},be={id:"set-reminder-custom",displayName:()=>i("files_reminders","Custom reminder"),title:()=>i("files_reminders","Reminder at custom date & time"),iconSvgInline:()=>ve,enabled:({nodes:e,view:t})=>t.id==="trashbin"||e.length!==1?!1:e.at(0).attributes["reminder-due-date"]!==void 0,parent:T,async exec({nodes:e}){const t=e.at(0);return j(t),null},order:22},P={dateTimePreset:p.LaterToday,label:i("files_reminders","Later today"),ariaLabel:i("files_reminders","Set reminder for later today"),dateString:"",verboseDateString:""},Y={dateTimePreset:p.Tomorrow,label:i("files_reminders","Tomorrow"),ariaLabel:i("files_reminders","Set reminder for tomorrow"),dateString:"",verboseDateString:""},$={dateTimePreset:p.ThisWeekend,label:i("files_reminders","This weekend"),ariaLabel:i("files_reminders","Set reminder for this weekend"),dateString:"",verboseDateString:""},R={dateTimePreset:p.NextWeek,label:i("files_reminders","Next week"),ariaLabel:i("files_reminders","Set reminder for next week"),dateString:"",verboseDateString:""};function De(){return[P,Y,$,R].forEach(e=>{const t=_(e.dateTimePreset);t&&(e.dateString=V(t),e.verboseDateString=h(t),setInterval(()=>{const r=_(e.dateTimePreset);r&&(e.dateString=V(r),e.verboseDateString=h(r))},1e3*30*60))}),[P,Y,$,R].map(_e)}function _e(e){return{id:`set-reminder-${e.dateTimePreset}`,displayName:()=>`${e.label} – ${e.dateString}`,title:()=>`${e.ariaLabel} – ${e.verboseDateString}`,iconSvgInline:()=>"",enabled:({nodes:t,view:r})=>r.id==="trashbin"||t.length!==1?!1:t.at(0).attributes["reminder-due-date"]!==void 0&&!!_(e.dateTimePreset),parent:T,async exec({nodes:t}){const r=t.at(0);if(!r.fileid)return L.error("Failed to set reminder, missing file id"),f(i("files_reminders","Failed to set reminder")),null;try{const s=_(e.dateTimePreset);await E(r.fileid,s),r.attributes["reminder-due-date"]=s.toISOString(),D("files:node:updated",r),N(i("files_reminders",'Reminder set for "{fileName}"',{fileName:r.basename}))}catch(s){L.error("Failed to set reminder",{error:s}),f(i("files_reminders","Failed to set reminder"))}return null},order:21}}Q("nc:reminder-due-date",{nc:"http://nextcloud.org/ns"}),l(we),l(fe),l(ye),l(be),De().forEach(l); +import{a as l}from"./index-BDagnpAU.chunk.mjs";import{c as Q}from"./dav-CGJ67RGS.chunk.mjs";import{c as B,f as D,g as X}from"./index-B-dGqfIG.chunk.mjs";import{b as O,t as i}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import{c as W}from"./index-BLNGy7h5.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import"./NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs";import{N as J}from"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import{_ as ee}from"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";/* empty css */import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import{N as k}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import{N as te,s as re}from"./index-BW4M2n71.chunk.mjs";import"./index-BOH7nBEM.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import{N as M}from"./mdi-Lt-19ASw.chunk.mjs";import"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./index-xEyWukTf.chunk.mjs";import"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import"./ContentCopy-BF1gBM5z.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import{b as ie,A as ae,D as ne,o as v,c as y,w as d,g as se,N as oe,k as b,u as n,j as m,t as u,h as A,l as c}from"./Web-BwmPK40i.chunk.mjs";import{a as f,d as N}from"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import{_ as de}from"./public-C1mLBHT3.chunk.mjs";import"./folder-29HuacU_-Joa_bkj_.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";import"./index-BYnFfAmz.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";const le='';async function E(e,t){const r=B("/apps/files_reminders/api/v1/{fileId}",{fileId:e});return(await W.put(r,{dueDate:t.toISOString()})).data.ocs.data}async function Z(e){const t=B("/apps/files_reminders/api/v1/{fileId}",{fileId:e});return(await W.delete(t)).data.ocs.data}var p=(e=>(e.LaterToday="later-today",e.Tomorrow="tomorrow",e.ThisWeekend="this-weekend",e.NextWeek="next-week",e))(p||{});function F(){const e=new Date;return e.setHours(0,0,0,0),e.setDate(e.getDate()-e.getDay()+1),new Date(e)}function I(e){new Date(e).setHours(0,0,0,0);const t=new Date(e.getFullYear(),0,1,0,0,0,0),r=(e.getTime()-t.getTime())/864e5;return Math.ceil((r+t.getDay()+1)/7)}function me(e,t){return I(e)===I(t)&&e.getFullYear()===t.getFullYear()}function ue(e,t){return e.getDate()===t.getDate()&&e.getMonth()===t.getMonth()&&e.getFullYear()===t.getFullYear()}function _(e){return{"later-today":()=>{const t=new Date,r=new Date;r.setHours(18,0,0,0);const s=new Date;return s.setHours(17,0,0,0),t>=s?null:r},tomorrow:()=>{const t=new Date,r=new Date;return r.setDate(t.getDate()+1),r.setHours(8,0,0,0),r},"this-weekend":()=>{const t=new Date;if([5,6,0].includes(t.getDay()))return null;const r=new Date,s=F();return r.setDate(s.getDate()+5),r.setHours(8,0,0,0),r},"next-week":()=>{if(new Date().getDay()===0)return null;const t=new Date,r=F();return t.setDate(r.getDate()+7),t.setHours(8,0,0,0),t}}[e]()}function ce(){const e=new Date,t=new Date;return t.setHours(e.getHours()+2,0,0,0),t}function V(e){let t={hour:"numeric",minute:"2-digit"};const r=new Date;return ue(e,r)||(t={...t,weekday:"short"}),me(e,r)||(t={...t,month:"short",day:"numeric"}),e.getFullYear()!==r.getFullYear()&&(t={...t,year:"numeric"}),e.toLocaleString(O(),t)}function h(e){let t={month:"long",day:"numeric",weekday:"long",hour:"numeric",minute:"2-digit"};const r=new Date;return e.getFullYear()!==r.getFullYear()&&(t={...t,year:"numeric"}),e.toLocaleString(O(),t)}const fe={id:"clear-reminder",displayName:()=>i("files_reminders","Clear reminder"),title:({nodes:e})=>{const t=e.at(0),r=new Date(t.attributes["reminder-due-date"]);return`${i("files_reminders","Clear reminder")} – ${h(r)}`},iconSvgInline:()=>le,enabled:({nodes:e})=>e.length!==1?!1:!!e.at(0).attributes["reminder-due-date"],async exec({nodes:e}){const t=e.at(0);if(t.fileid)try{return await Z(t.fileid),t.attributes["reminder-due-date"]="",D("files:node:updated",t),!0}catch{return!1}return null},order:19},U='',L=X().setApp("files_reminders").detectUser().build(),pe=ie({__name:"SetCustomReminderModal",props:{node:{}},emits:["close"],setup(e,{emit:t}){const r=e,s=t,S=c(!1),C=c(!1),g=c(!0),o=c(),x=c(new Date);ae(()=>{const a=r.node.attributes["reminder-due-date"]?new Date(r.node.attributes["reminder-due-date"]):void 0;S.value=!!a,g.value=!0,C.value=!0,o.value=a??ce(),x.value=new Date}),ne(()=>{const a=document.getElementById("set-custom-reminder");a.focus(),S.value||a.showPicker()});async function q(){if(!(o.value instanceof Date)||isNaN(o.value.getTime())){f(i("files_reminders","Please choose a valid date & time"));return}try{await E(r.node.fileid,o.value);const a=r.node.clone();a.attributes["reminder-due-date"]=o.value.toISOString(),D("files:node:updated",a),N(i("files_reminders",'Reminder set for "{fileName}"',{fileName:r.node.displayname})),w()}catch(a){L.error("Failed to set reminder",{error:a}),f(i("files_reminders","Failed to set reminder"))}}async function z(){try{await Z(r.node.fileid);const a=r.node.clone();a.attributes["reminder-due-date"]="",D("files:node:updated",a),N(i("files_reminders",'Reminder cleared for "{fileName}"',{fileName:r.node.displayname})),w()}catch(a){L.error("Failed to clear reminder",{error:a}),f(i("files_reminders","Failed to clear reminder"))}}function w(){C.value=!1,s("close")}function G(){const a=document.getElementById("set-custom-reminder");g.value=a.checkValidity()}return(a,H)=>C.value?(v(),y(n(te),{key:0,name:n(i)("files_reminders","Set reminder for '{fileName}'",{fileName:e.node.displayname}),outTransition:"",size:"small",closeOnClickOutside:"",onClosing:w},{actions:d(()=>[b(n(k),{variant:"tertiary",onClick:w},{default:d(()=>[m(u(n(i)("files_reminders","Cancel")),1)]),_:1}),S.value?(v(),y(n(k),{key:0,onClick:z},{default:d(()=>[m(u(n(i)("files_reminders","Clear reminder")),1)]),_:1})):A("",!0),b(n(k),{disabled:!g.value,variant:"primary",form:"set-custom-reminder-form",type:"submit"},{default:d(()=>[m(u(n(i)("files_reminders","Set reminder")),1)]),_:1},8,["disabled"])]),default:d(()=>[se("form",{id:"set-custom-reminder-form",class:"custom-reminder-modal",onSubmit:oe(q,["prevent"])},[b(n(J),{id:"set-custom-reminder",modelValue:o.value,"onUpdate:modelValue":H[0]||(H[0]=K=>o.value=K),label:n(i)("files_reminders","Reminder at custom date & time"),min:x.value,required:!0,type:"datetime-local",onInput:G},null,8,["modelValue","label","min"]),g.value&&o.value?(v(),y(n(M),{key:0,type:"info"},{default:d(()=>[m(u(n(i)("files_reminders","We will remind you of this file"))+" ",1),b(n(ee),{timestamp:o.value},null,8,["timestamp"])]),_:1})):(v(),y(n(M),{key:1,type:"error"},{default:d(()=>[m(u(n(i)("files_reminders","Please choose a valid date & time")),1)]),_:1}))],32)]),_:1},8,["name"])):A("",!0)}}),ge=de(pe,[["__scopeId","data-v-1cc1857f"]]);async function j(e){await re(ge,{node:e})}const we={id:"reminder-status",inline:()=>!0,displayName:()=>"",title:({nodes:e})=>{const t=e.at(0),r=new Date(t.attributes["reminder-due-date"]);return`${i("files_reminders","Reminder set")} – ${h(r)}`},iconSvgInline:()=>U,enabled:({nodes:e})=>e.length!==1?!1:!!e.at(0).attributes["reminder-due-date"],async exec({nodes:e}){const t=e.at(0);return await j(t),null},order:-15},ve='',T="set-reminder-menu",ye={id:T,displayName:()=>i("files_reminders","Set reminder"),iconSvgInline:()=>U,enabled:({nodes:e,view:t})=>t.id==="trashbin"||e.length!==1?!1:e.at(0).attributes["reminder-due-date"]!==void 0,async exec(){return null},order:20},be={id:"set-reminder-custom",displayName:()=>i("files_reminders","Custom reminder"),title:()=>i("files_reminders","Reminder at custom date & time"),iconSvgInline:()=>ve,enabled:({nodes:e,view:t})=>t.id==="trashbin"||e.length!==1?!1:e.at(0).attributes["reminder-due-date"]!==void 0,parent:T,async exec({nodes:e}){const t=e.at(0);return j(t),null},order:22},P={dateTimePreset:p.LaterToday,label:i("files_reminders","Later today"),ariaLabel:i("files_reminders","Set reminder for later today"),dateString:"",verboseDateString:""},Y={dateTimePreset:p.Tomorrow,label:i("files_reminders","Tomorrow"),ariaLabel:i("files_reminders","Set reminder for tomorrow"),dateString:"",verboseDateString:""},$={dateTimePreset:p.ThisWeekend,label:i("files_reminders","This weekend"),ariaLabel:i("files_reminders","Set reminder for this weekend"),dateString:"",verboseDateString:""},R={dateTimePreset:p.NextWeek,label:i("files_reminders","Next week"),ariaLabel:i("files_reminders","Set reminder for next week"),dateString:"",verboseDateString:""};function De(){return[P,Y,$,R].forEach(e=>{const t=_(e.dateTimePreset);t&&(e.dateString=V(t),e.verboseDateString=h(t),setInterval(()=>{const r=_(e.dateTimePreset);r&&(e.dateString=V(r),e.verboseDateString=h(r))},1e3*30*60))}),[P,Y,$,R].map(_e)}function _e(e){return{id:`set-reminder-${e.dateTimePreset}`,displayName:()=>`${e.label} – ${e.dateString}`,title:()=>`${e.ariaLabel} – ${e.verboseDateString}`,iconSvgInline:()=>"",enabled:({nodes:t,view:r})=>r.id==="trashbin"||t.length!==1?!1:t.at(0).attributes["reminder-due-date"]!==void 0&&!!_(e.dateTimePreset),parent:T,async exec({nodes:t}){const r=t.at(0);if(!r.fileid)return L.error("Failed to set reminder, missing file id"),f(i("files_reminders","Failed to set reminder")),null;try{const s=_(e.dateTimePreset);await E(r.fileid,s),r.attributes["reminder-due-date"]=s.toISOString(),D("files:node:updated",r),N(i("files_reminders",'Reminder set for "{fileName}"',{fileName:r.basename}))}catch(s){L.error("Failed to set reminder",{error:s}),f(i("files_reminders","Failed to set reminder"))}return null},order:21}}Q("nc:reminder-due-date",{nc:"http://nextcloud.org/ns"}),l(we),l(fe),l(ye),l(be),De().forEach(l); //# sourceMappingURL=files_reminders-init.mjs.map diff --git a/dist/types-Bs8ER_x7.chunk.mjs b/dist/types-Cpv__FHC.chunk.mjs similarity index 93% rename from dist/types-Bs8ER_x7.chunk.mjs rename to dist/types-Cpv__FHC.chunk.mjs index ab41ecc9de6f4..586ac0c23f38a 100644 --- a/dist/types-Bs8ER_x7.chunk.mjs +++ b/dist/types-Cpv__FHC.chunk.mjs @@ -1,2 +1,2 @@ -import"./NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs";import{_ as f,c as m}from"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import{b as G,x as y,o as a,f as l,g as n,i as t,j as p,t as _,y as s,h as b}from"./Web-BwmPK40i.chunk.mjs";import{g as h}from"./index-B-dGqfIG.chunk.mjs";const $=["aria-describedby"],g=G({__name:"NcFormGroup",props:{label:{default:()=>{}},description:{default:()=>{}},hideLabel:{type:Boolean,default:!1},hideDescription:{type:Boolean,default:!1},noGap:{type:Boolean,default:!1}},setup(e){const c=y(),i=`${`nc-form-group-${m()}`}-description`,r=()=>!!e.description||!!c.description,d=()=>r()?i:void 0,u=()=>e.hideLabel&&(!r()||e.hideDescription);return(o,L)=>(a(),l("fieldset",{class:s([o.$style.formGroup,{[o.$style.formGroup_noGap]:e.noGap}]),"aria-describedby":d()},[n("legend",{class:s([o.$style.formGroup__label,{"hidden-visually":e.hideLabel}])},[t(o.$slots,"label",{},()=>[p(_(e.label||"⚠️ Missing label"),1)])],2),r()?(a(),l("div",{key:0,id:i,class:s([o.$style.formGroup__description,{"hidden-visually":e.hideDescription}])},[t(o.$slots,"description",{},()=>[p(_(e.description),1)])],2)):b("",!0),n("div",{class:s([o.$style.formGroup__content,{[o.$style.formGroup__content_only]:u()}])},[t(o.$slots,"default")],2)],10,$))}}),j="_formGroup_sNzER",v="_formGroup_noGap_ChojB",N="_formGroup__label_Z81k5",x="_formGroup__description_xWRa-",B="_formGroup__content_wHRjf",I="_formGroup__content_only_VejcN",z={"material-design-icon":"_material-design-icon_QhThW",formGroup:j,formGroup_noGap:v,formGroup__label:N,formGroup__description:x,formGroup__content:B,formGroup__content_only:I},D={$style:z},M=f(g,[["__cssModules",D]]),A=h().setApp("encryption").build(),C=Object.freeze({NotInitialized:"0",InitExecuted:"1",InitSuccessful:"2"});export{C as I,M as N,A as l}; -//# sourceMappingURL=types-Bs8ER_x7.chunk.mjs.map +import"./NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs";import{_ as f,c as m}from"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import{b as G,x as y,o as a,f as l,g as n,i as t,j as p,t as _,y as s,h as b}from"./Web-BwmPK40i.chunk.mjs";import{g as h}from"./index-B-dGqfIG.chunk.mjs";const $=["aria-describedby"],g=G({__name:"NcFormGroup",props:{label:{default:()=>{}},description:{default:()=>{}},hideLabel:{type:Boolean,default:!1},hideDescription:{type:Boolean,default:!1},noGap:{type:Boolean,default:!1}},setup(e){const c=y(),i=`${`nc-form-group-${m()}`}-description`,r=()=>!!e.description||!!c.description,d=()=>r()?i:void 0,u=()=>e.hideLabel&&(!r()||e.hideDescription);return(o,L)=>(a(),l("fieldset",{class:s([o.$style.formGroup,{[o.$style.formGroup_noGap]:e.noGap}]),"aria-describedby":d()},[n("legend",{class:s([o.$style.formGroup__label,{"hidden-visually":e.hideLabel}])},[t(o.$slots,"label",{},()=>[p(_(e.label||"⚠️ Missing label"),1)])],2),r()?(a(),l("div",{key:0,id:i,class:s([o.$style.formGroup__description,{"hidden-visually":e.hideDescription}])},[t(o.$slots,"description",{},()=>[p(_(e.description),1)])],2)):b("",!0),n("div",{class:s([o.$style.formGroup__content,{[o.$style.formGroup__content_only]:u()}])},[t(o.$slots,"default")],2)],10,$))}}),j="_formGroup_sNzER",v="_formGroup_noGap_ChojB",N="_formGroup__label_Z81k5",x="_formGroup__description_xWRa-",B="_formGroup__content_wHRjf",I="_formGroup__content_only_VejcN",z={"material-design-icon":"_material-design-icon_QhThW",formGroup:j,formGroup_noGap:v,formGroup__label:N,formGroup__description:x,formGroup__content:B,formGroup__content_only:I},D={$style:z},M=f(g,[["__cssModules",D]]),A=h().setApp("encryption").build(),C=Object.freeze({NotInitialized:"0",InitExecuted:"1",InitSuccessful:"2"});export{C as I,M as N,A as l}; +//# sourceMappingURL=types-Cpv__FHC.chunk.mjs.map diff --git a/dist/types-Bs8ER_x7.chunk.mjs.license b/dist/types-Cpv__FHC.chunk.mjs.license similarity index 100% rename from dist/types-Bs8ER_x7.chunk.mjs.license rename to dist/types-Cpv__FHC.chunk.mjs.license diff --git a/dist/types-Bs8ER_x7.chunk.mjs.map b/dist/types-Cpv__FHC.chunk.mjs.map similarity index 99% rename from dist/types-Bs8ER_x7.chunk.mjs.map rename to dist/types-Cpv__FHC.chunk.mjs.map index c5c2bb5cea696..18defb7bdf53c 100644 --- a/dist/types-Bs8ER_x7.chunk.mjs.map +++ b/dist/types-Cpv__FHC.chunk.mjs.map @@ -1 +1 @@ -{"version":3,"file":"types-Bs8ER_x7.chunk.mjs","sources":["../node_modules/@nextcloud/vue/dist/chunks/NcFormGroup-DvLGFMdb.mjs","../build/frontend/apps/encryption/src/utils/logger.ts","../build/frontend/apps/encryption/src/utils/types.ts"],"sourcesContent":["import '../assets/NcFormGroup-qFucmL8a.css';\nimport { defineComponent, useSlots, openBlock, createElementBlock, normalizeClass, createElementVNode, renderSlot, createTextVNode, toDisplayString, createCommentVNode } from \"vue\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _hoisted_1 = [\"aria-describedby\"];\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcFormGroup\",\n props: {\n label: { default: () => void 0 },\n description: { default: () => void 0 },\n hideLabel: { type: Boolean, default: false },\n hideDescription: { type: Boolean, default: false },\n noGap: { type: Boolean, default: false }\n },\n setup(__props) {\n const slots = useSlots();\n const id = `nc-form-group-${createElementId()}`;\n const descriptionId = `${id}-description`;\n const hasDescription = () => !!__props.description || !!slots.description;\n const getDescriptionId = () => hasDescription() ? descriptionId : void 0;\n const hasContentOnly = () => __props.hideLabel && (!hasDescription() || __props.hideDescription);\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"fieldset\", {\n class: normalizeClass([_ctx.$style.formGroup, { [_ctx.$style.formGroup_noGap]: __props.noGap }]),\n \"aria-describedby\": getDescriptionId()\n }, [\n createElementVNode(\"legend\", {\n class: normalizeClass([_ctx.$style.formGroup__label, { \"hidden-visually\": __props.hideLabel }])\n }, [\n renderSlot(_ctx.$slots, \"label\", {}, () => [\n createTextVNode(toDisplayString(__props.label || \"⚠️ Missing label\"), 1)\n ])\n ], 2),\n hasDescription() ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n id: descriptionId,\n class: normalizeClass([_ctx.$style.formGroup__description, { \"hidden-visually\": __props.hideDescription }])\n }, [\n renderSlot(_ctx.$slots, \"description\", {}, () => [\n createTextVNode(toDisplayString(__props.description), 1)\n ])\n ], 2)) : createCommentVNode(\"\", true),\n createElementVNode(\"div\", {\n class: normalizeClass([_ctx.$style.formGroup__content, { [_ctx.$style.formGroup__content_only]: hasContentOnly() }])\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 2)\n ], 10, _hoisted_1);\n };\n }\n});\nconst formGroup = \"_formGroup_sNzER\";\nconst formGroup_noGap = \"_formGroup_noGap_ChojB\";\nconst formGroup__label = \"_formGroup__label_Z81k5\";\nconst formGroup__description = \"_formGroup__description_xWRa-\";\nconst formGroup__content = \"_formGroup__content_wHRjf\";\nconst formGroup__content_only = \"_formGroup__content_only_VejcN\";\nconst style0 = {\n \"material-design-icon\": \"_material-design-icon_QhThW\",\n formGroup,\n formGroup_noGap,\n formGroup__label,\n formGroup__description,\n formGroup__content,\n formGroup__content_only\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcFormGroup = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n NcFormGroup as N\n};\n//# sourceMappingURL=NcFormGroup-DvLGFMdb.mjs.map\n","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport const logger = getLoggerBuilder()\n\t.setApp('encryption')\n\t.build()\n","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nexport const InitStatus = Object.freeze({\n\tNotInitialized: '0',\n\tInitExecuted: '1',\n\tInitSuccessful: '2',\n})\n"],"names":["_hoisted_1","_sfc_main","defineComponent","__props","slots","useSlots","descriptionId","createElementId","hasDescription","getDescriptionId","hasContentOnly","_ctx","_cache","openBlock","createElementBlock","normalizeClass","createElementVNode","renderSlot","createTextVNode","toDisplayString","createCommentVNode","formGroup","formGroup_noGap","formGroup__label","formGroup__description","formGroup__content","formGroup__content_only","style0","cssModules","NcFormGroup","_export_sfc","logger","getLoggerBuilder","InitStatus"],"mappings":"qRAIA,MAAMA,EAAa,CAAC,kBAAkB,EAChCC,EAA4BC,EAAgB,CAChD,OAAQ,cACR,MAAO,CACL,MAAO,CAAE,QAAS,IAAA,CAAA,CAAY,EAC9B,YAAa,CAAE,QAAS,IAAA,CAAA,CAAY,EACpC,UAAW,CAAE,KAAM,QAAS,QAAS,EAAK,EAC1C,gBAAiB,CAAE,KAAM,QAAS,QAAS,EAAK,EAChD,MAAO,CAAE,KAAM,QAAS,QAAS,EAAK,CAC1C,EACE,MAAMC,EAAS,CACb,MAAMC,EAAQC,EAAQ,EAEhBC,EAAgB,GADX,iBAAiBC,EAAe,CAAE,EAClB,eACrBC,EAAiB,IAAM,CAAC,CAACL,EAAQ,aAAe,CAAC,CAACC,EAAM,YACxDK,EAAmB,IAAMD,EAAc,EAAKF,EAAgB,OAC5DI,EAAiB,IAAMP,EAAQ,YAAc,CAACK,EAAc,GAAML,EAAQ,iBAChF,MAAO,CAACQ,EAAMC,KACLC,EAAS,EAAIC,EAAmB,WAAY,CACjD,MAAOC,EAAe,CAACJ,EAAK,OAAO,UAAW,CAAE,CAACA,EAAK,OAAO,eAAe,EAAGR,EAAQ,KAAK,CAAE,CAAC,EAC/F,mBAAoBM,EAAgB,CAC5C,EAAS,CACDO,EAAmB,SAAU,CAC3B,MAAOD,EAAe,CAACJ,EAAK,OAAO,iBAAkB,CAAE,kBAAmBR,EAAQ,UAAW,CAAC,CACxG,EAAW,CACDc,EAAWN,EAAK,OAAQ,QAAS,CAAA,EAAI,IAAM,CACzCO,EAAgBC,EAAgBhB,EAAQ,OAAS,kBAAkB,EAAG,CAAC,CACnF,CAAW,CACX,EAAW,CAAC,EACJK,KAAoBK,IAAaC,EAAmB,MAAO,CACzD,IAAK,EACL,GAAIR,EACJ,MAAOS,EAAe,CAACJ,EAAK,OAAO,uBAAwB,CAAE,kBAAmBR,EAAQ,gBAAiB,CAAC,CACpH,EAAW,CACDc,EAAWN,EAAK,OAAQ,cAAe,CAAA,EAAI,IAAM,CAC/CO,EAAgBC,EAAgBhB,EAAQ,WAAW,EAAG,CAAC,CACnE,CAAW,CACX,EAAW,CAAC,GAAKiB,EAAmB,GAAI,EAAI,EACpCJ,EAAmB,MAAO,CACxB,MAAOD,EAAe,CAACJ,EAAK,OAAO,mBAAoB,CAAE,CAACA,EAAK,OAAO,uBAAuB,EAAGD,EAAc,CAAE,CAAE,CAAC,CAC7H,EAAW,CACDO,EAAWN,EAAK,OAAQ,SAAS,CAC3C,EAAW,CAAC,CACZ,EAAS,GAAIX,CAAU,EAErB,CACF,CAAC,EACKqB,EAAY,mBACZC,EAAkB,yBAClBC,EAAmB,0BACnBC,EAAyB,gCACzBC,EAAqB,4BACrBC,EAA0B,iCAC1BC,EAAS,CACb,uBAAwB,8BACxB,UAAAN,EACA,gBAAAC,EACA,iBAAAC,EACA,uBAAAC,EACA,mBAAAC,EACA,wBAAAC,CACF,EACME,EAAa,CACjB,OAAUD,CACZ,EACME,EAA8BC,EAAY7B,EAAW,CAAC,CAAC,eAAgB2B,CAAU,CAAC,CAAC,EC9D5EG,EAASC,EAAA,EACpB,OAAO,YAAY,EACnB,MAAA,ECJWC,EAAa,OAAO,OAAO,CACvC,eAAgB,IAChB,aAAc,IACd,eAAgB,GACjB,CAAC","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"types-Cpv__FHC.chunk.mjs","sources":["../node_modules/@nextcloud/vue/dist/chunks/NcFormGroup-DvLGFMdb.mjs","../build/frontend/apps/encryption/src/utils/logger.ts","../build/frontend/apps/encryption/src/utils/types.ts"],"sourcesContent":["import '../assets/NcFormGroup-qFucmL8a.css';\nimport { defineComponent, useSlots, openBlock, createElementBlock, normalizeClass, createElementVNode, renderSlot, createTextVNode, toDisplayString, createCommentVNode } from \"vue\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _hoisted_1 = [\"aria-describedby\"];\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"NcFormGroup\",\n props: {\n label: { default: () => void 0 },\n description: { default: () => void 0 },\n hideLabel: { type: Boolean, default: false },\n hideDescription: { type: Boolean, default: false },\n noGap: { type: Boolean, default: false }\n },\n setup(__props) {\n const slots = useSlots();\n const id = `nc-form-group-${createElementId()}`;\n const descriptionId = `${id}-description`;\n const hasDescription = () => !!__props.description || !!slots.description;\n const getDescriptionId = () => hasDescription() ? descriptionId : void 0;\n const hasContentOnly = () => __props.hideLabel && (!hasDescription() || __props.hideDescription);\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"fieldset\", {\n class: normalizeClass([_ctx.$style.formGroup, { [_ctx.$style.formGroup_noGap]: __props.noGap }]),\n \"aria-describedby\": getDescriptionId()\n }, [\n createElementVNode(\"legend\", {\n class: normalizeClass([_ctx.$style.formGroup__label, { \"hidden-visually\": __props.hideLabel }])\n }, [\n renderSlot(_ctx.$slots, \"label\", {}, () => [\n createTextVNode(toDisplayString(__props.label || \"⚠️ Missing label\"), 1)\n ])\n ], 2),\n hasDescription() ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n id: descriptionId,\n class: normalizeClass([_ctx.$style.formGroup__description, { \"hidden-visually\": __props.hideDescription }])\n }, [\n renderSlot(_ctx.$slots, \"description\", {}, () => [\n createTextVNode(toDisplayString(__props.description), 1)\n ])\n ], 2)) : createCommentVNode(\"\", true),\n createElementVNode(\"div\", {\n class: normalizeClass([_ctx.$style.formGroup__content, { [_ctx.$style.formGroup__content_only]: hasContentOnly() }])\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 2)\n ], 10, _hoisted_1);\n };\n }\n});\nconst formGroup = \"_formGroup_sNzER\";\nconst formGroup_noGap = \"_formGroup_noGap_ChojB\";\nconst formGroup__label = \"_formGroup__label_Z81k5\";\nconst formGroup__description = \"_formGroup__description_xWRa-\";\nconst formGroup__content = \"_formGroup__content_wHRjf\";\nconst formGroup__content_only = \"_formGroup__content_only_VejcN\";\nconst style0 = {\n \"material-design-icon\": \"_material-design-icon_QhThW\",\n formGroup,\n formGroup_noGap,\n formGroup__label,\n formGroup__description,\n formGroup__content,\n formGroup__content_only\n};\nconst cssModules = {\n \"$style\": style0\n};\nconst NcFormGroup = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n NcFormGroup as N\n};\n//# sourceMappingURL=NcFormGroup-DvLGFMdb.mjs.map\n","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport const logger = getLoggerBuilder()\n\t.setApp('encryption')\n\t.build()\n","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nexport const InitStatus = Object.freeze({\n\tNotInitialized: '0',\n\tInitExecuted: '1',\n\tInitSuccessful: '2',\n})\n"],"names":["_hoisted_1","_sfc_main","defineComponent","__props","slots","useSlots","descriptionId","createElementId","hasDescription","getDescriptionId","hasContentOnly","_ctx","_cache","openBlock","createElementBlock","normalizeClass","createElementVNode","renderSlot","createTextVNode","toDisplayString","createCommentVNode","formGroup","formGroup_noGap","formGroup__label","formGroup__description","formGroup__content","formGroup__content_only","style0","cssModules","NcFormGroup","_export_sfc","logger","getLoggerBuilder","InitStatus"],"mappings":"qRAIA,MAAMA,EAAa,CAAC,kBAAkB,EAChCC,EAA4BC,EAAgB,CAChD,OAAQ,cACR,MAAO,CACL,MAAO,CAAE,QAAS,IAAA,CAAA,CAAY,EAC9B,YAAa,CAAE,QAAS,IAAA,CAAA,CAAY,EACpC,UAAW,CAAE,KAAM,QAAS,QAAS,EAAK,EAC1C,gBAAiB,CAAE,KAAM,QAAS,QAAS,EAAK,EAChD,MAAO,CAAE,KAAM,QAAS,QAAS,EAAK,CAC1C,EACE,MAAMC,EAAS,CACb,MAAMC,EAAQC,EAAQ,EAEhBC,EAAgB,GADX,iBAAiBC,EAAe,CAAE,EAClB,eACrBC,EAAiB,IAAM,CAAC,CAACL,EAAQ,aAAe,CAAC,CAACC,EAAM,YACxDK,EAAmB,IAAMD,EAAc,EAAKF,EAAgB,OAC5DI,EAAiB,IAAMP,EAAQ,YAAc,CAACK,EAAc,GAAML,EAAQ,iBAChF,MAAO,CAACQ,EAAMC,KACLC,EAAS,EAAIC,EAAmB,WAAY,CACjD,MAAOC,EAAe,CAACJ,EAAK,OAAO,UAAW,CAAE,CAACA,EAAK,OAAO,eAAe,EAAGR,EAAQ,KAAK,CAAE,CAAC,EAC/F,mBAAoBM,EAAgB,CAC5C,EAAS,CACDO,EAAmB,SAAU,CAC3B,MAAOD,EAAe,CAACJ,EAAK,OAAO,iBAAkB,CAAE,kBAAmBR,EAAQ,UAAW,CAAC,CACxG,EAAW,CACDc,EAAWN,EAAK,OAAQ,QAAS,CAAA,EAAI,IAAM,CACzCO,EAAgBC,EAAgBhB,EAAQ,OAAS,kBAAkB,EAAG,CAAC,CACnF,CAAW,CACX,EAAW,CAAC,EACJK,KAAoBK,IAAaC,EAAmB,MAAO,CACzD,IAAK,EACL,GAAIR,EACJ,MAAOS,EAAe,CAACJ,EAAK,OAAO,uBAAwB,CAAE,kBAAmBR,EAAQ,gBAAiB,CAAC,CACpH,EAAW,CACDc,EAAWN,EAAK,OAAQ,cAAe,CAAA,EAAI,IAAM,CAC/CO,EAAgBC,EAAgBhB,EAAQ,WAAW,EAAG,CAAC,CACnE,CAAW,CACX,EAAW,CAAC,GAAKiB,EAAmB,GAAI,EAAI,EACpCJ,EAAmB,MAAO,CACxB,MAAOD,EAAe,CAACJ,EAAK,OAAO,mBAAoB,CAAE,CAACA,EAAK,OAAO,uBAAuB,EAAGD,EAAc,CAAE,CAAE,CAAC,CAC7H,EAAW,CACDO,EAAWN,EAAK,OAAQ,SAAS,CAC3C,EAAW,CAAC,CACZ,EAAS,GAAIX,CAAU,EAErB,CACF,CAAC,EACKqB,EAAY,mBACZC,EAAkB,yBAClBC,EAAmB,0BACnBC,EAAyB,gCACzBC,EAAqB,4BACrBC,EAA0B,iCAC1BC,EAAS,CACb,uBAAwB,8BACxB,UAAAN,EACA,gBAAAC,EACA,iBAAAC,EACA,uBAAAC,EACA,mBAAAC,EACA,wBAAAC,CACF,EACME,EAAa,CACjB,OAAUD,CACZ,EACME,EAA8BC,EAAY7B,EAAW,CAAC,CAAC,eAAgB2B,CAAU,CAAC,CAAC,EC9D5EG,EAASC,EAAA,EACpB,OAAO,YAAY,EACnB,MAAA,ECJWC,EAAa,OAAO,OAAO,CACvC,eAAgB,IAChB,aAAc,IACd,eAAgB,GACjB,CAAC","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/dist/types-Bs8ER_x7.chunk.mjs.map.license b/dist/types-Cpv__FHC.chunk.mjs.map.license similarity index 100% rename from dist/types-Bs8ER_x7.chunk.mjs.map.license rename to dist/types-Cpv__FHC.chunk.mjs.map.license diff --git a/dist/user_ldap-settings-admin.css b/dist/user_ldap-settings-admin.css index 2c10b71cc25d1..bcb43818d1481 100644 --- a/dist/user_ldap-settings-admin.css +++ b/dist/user_ldap-settings-admin.css @@ -17,7 +17,7 @@ @import './common-NcEmptyContent-CGAPqk4S-Don1d5Bd.chunk.css'; @import './common-NcPasswordField-Be5_qcfm-Crp_EMfV.chunk.css'; @import './common-NcBreadcrumbs-5gl8Syfa-CfbvucBX.chunk.css'; -@import './common-NcTextArea-Dxzj4zdb-DIo27L88.chunk.css'; +@import './common-NcTextArea-Dxzj4zdb-B-B2llha.chunk.css'; @import './common-NcActionSeparator-Ct2RnclR-pXJ_-D_I.chunk.css'; @import './common-NcCheckboxRadioSwitch-D8Dfv4iw-CPGkDj-p.chunk.css'; @import './common-Plus-Som-mR4B.chunk.css'; diff --git a/dist/user_ldap-settings-admin.mjs b/dist/user_ldap-settings-admin.mjs index dc9bf4c4e0afd..563b0f9d4f5d3 100644 --- a/dist/user_ldap-settings-admin.mjs +++ b/dist/user_ldap-settings-admin.mjs @@ -1,2 +1,2 @@ -import{l as A,v as I,b as O,o as v,f as V,g as p,t as n,u as e,k as i,w as h,j as w,c as T,h as F,A as X,m as re,z as ee,F as W,y as oe,$ as ie,B as se,e as de}from"./Web-BwmPK40i.chunk.mjs";import{l as ae,g as Q,_ as G}from"./public-C1mLBHT3.chunk.mjs";import{t as a,a as ue}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import{a as B}from"./NcTextArea-Dxzj4zdb-FMRUOSZF.chunk.mjs";import"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";/* empty css */import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import{N as x}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import{N as Y}from"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import{g as ne,c as M}from"./index-B-dGqfIG.chunk.mjs";import{N as k}from"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import{P as pe}from"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import"./index-BW4M2n71.chunk.mjs";import{N as R}from"./index-BOH7nBEM.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import{N as ce}from"./mdi-Lt-19ASw.chunk.mjs";import"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./index-xEyWukTf.chunk.mjs";import{c as j,i as me}from"./index-BLNGy7h5.chunk.mjs";import{_ as b}from"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import{I as le}from"./ContentCopy-BF1gBM5z.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import{d as _e,s as $,c as ge}from"./pinia-CLibr4cC.chunk.mjs";import{a as H,d as te,g as fe,s as ve,b as q}from"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";const S=ne().setApp("LDAP").detectUser().build();async function he(){const u=await j.post(M("apps/user_ldap/api/v1/config"));return S.debug("Created configuration",{configId:u.data.ocs.data.configID}),u.data.ocs.data.configID}async function be(u){const s=new FormData;s.set("copyConfig",u);const m=await j.post(M("apps/user_ldap/api/v1/config/{configId}/copy",{configId:u}),s);return S.debug("Created configuration",{configId:m.data.ocs.data.configID}),m.data.ocs.data.configID}async function we(u){const s=await j.get(M("apps/user_ldap/api/v1/config/{configId}",{configId:u}));return S.debug("Fetched configuration",{configId:u,config:s.data.ocs.data}),s.data.ocs.data}async function ye(u,s){const m=await j.put(M("apps/user_ldap/api/v1/config/{configId}",{configId:u}),{configData:s});return S.debug("Updated configuration",{configId:u,config:s}),m.data.ocs.data}async function Ae(u){try{if(!await J(a("user_ldap","Confirm action"),a("user_ldap","Are you sure you want to permanently delete this LDAP configuration? This cannot be undone.")))return!1;await j.delete(M("apps/user_ldap/api/v1/config/{configId}",{configId:u})),S.debug("Deleted configuration",{configId:u})}catch(s){const m=s.response;H(m?.data.ocs.meta.message||a("user_ldap","Failed to delete config"))}return!0}async function Ve(u){const s=new FormData,m=await j.post(M("apps/user_ldap/api/v1/config/{configId}/test",{configId:u}));return S.debug(`Configuration is ${m.data.ocs.data.success?"valide":"invalide"}`,{configId:u,params:s,response:m}),m.data.ocs.data}async function De(u){if(!await J(a("user_ldap","Confirm action"),a("user_ldap","Are you sure you want to permanently clear the LDAP mapping? This cannot be undone.")))return!1;try{const s=await j.post(M("apps/user_ldap/api/v1/wizard/clearMappings"),{subject:u});return S.debug("Cleared mapping",{subject:u,response:s}),te(a("user_ldap","Mapping cleared")),!0}catch(s){const m=s.response;H(m?.data.ocs.meta.message||a("user_ldap","Failed to clear mapping"))}}async function P(u,s,m={}){const t=new FormData;Object.entries(m).forEach(([o,c])=>{t.set(o,c)});try{const o=await j.post(M("apps/user_ldap/api/v1/wizard/{configId}/{action}",{configId:s,action:u}),t);return S.debug(`Called wizard action: ${u}`,{configId:s,params:t,response:o}),o.data.ocs.data}catch(o){let c=a("user_ldap","An error occurred");throw me(o)&&o.response?.data.ocs.meta.status==="failure"&&o.response.data.ocs.meta.message!==""&&o.response.data.ocs.meta.message!==void 0&&(c=o.response.data.ocs.meta.message),H(c),o}}async function Z(){return await J(a("user_ldap","Mode switch"),a("user_ldap","Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?"))}async function J(u,s){let m=!1;return await fe(u).setText(s).setSeverity("warning").addButton({label:a("user_ldap","Cancel"),callback(){}}).addButton({label:a("user_ldap","Confirm"),variant:"error",callback(){m=!0}}).build().show(),m}const E=_e("ldap-configs",()=>{const u=A(ae("user_ldap","ldapConfigs")),s=A(Object.keys(u.value)[0]),m=I(()=>s.value===void 0?void 0:u.value[s.value]),t=A(0);function o(l,y={}){if(u.value[l]===void 0)throw new Error(`Config with id ${l} does not exist`);return new Proxy(u.value[l],{get(L,C){return L[C]},set(L,C,D){return L[C]=D,(async()=>(t.value++,await ye(l,{[C]:D}),t.value--,y[C]!==void 0&&y[C](L[C])))(),!0}})}async function c(){const l=await he();return u.value[l]=await we(l),s.value=l,l}async function g(l){if(u.value[l]===void 0)throw new Error(`Config with id ${l} does not exist`);const y=await be(l);return u.value[y]={...u.value[l]},s.value=y,y}async function r(l){await Ae(l)===!0&&(Object.keys(u.value).length===1?(s.value=await c(),s.value!==l&&delete u.value[l]):(s.value=Object.keys(u.value).filter(y=>l!==y)[0],delete u.value[l]))}return{ldapConfigs:u,selectedConfigId:s,selectedConfig:m,updatingConfig:t,getConfigProxy:o,create:c,copyConfig:g,removeConfig:r}}),Ue={class:"ldap-wizard__advanced"},Ce={open:"",name:"ldap-wizard__advanced__section",class:"ldap-wizard__advanced__section"},Le={name:"ldap-wizard__advanced__section",class:"ldap-wizard__advanced__section"},Ie={class:"tablecell"},Pe={name:"ldap-wizard__advanced__section",class:"ldap-wizard__advanced__section"},xe={name:"ldap-wizard__advanced__section",class:"ldap-wizard__advanced__section"},Te=O({__name:"AdvancedTab",props:{configId:{}},setup(u){const s=u,m=E(),t=I(()=>m.getConfigProxy(s.configId)),o=Q().theming.name,c={uniqueMember:"uniqueMember",memberUid:"memberUid",member:"member (AD)",gidNumber:"gidNumber",zimbraMailForwardingAddress:"zimbraMailForwardingAddress"};return(g,r)=>(v(),V("fieldset",Ue,[p("details",Ce,[p("summary",null,[p("h3",null,n(e(a)("user_ldap","Connection Settings")),1)]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Backup (Replica) Host"),modelValue:t.value.ldapBackupHost,helperText:e(a)("user_ldap","Give an optional backup host. It must be a replica of the main LDAP/AD server."),onChange:r[0]||(r[0]=l=>t.value.ldapBackupHost=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{type:"number",modelValue:t.value.ldapBackupPort,label:e(a)("user_ldap","Backup (Replica) Port"),onChange:r[1]||(r[1]=l=>t.value.ldapBackupPort=l.target.value)},null,8,["modelValue","label"]),i(e(k),{modelValue:t.value.ldapOverrideMainServer==="1",type:"switch","aria-label":e(a)("user_ldap","Only connect to the replica server."),"onUpdate:modelValue":r[2]||(r[2]=l=>t.value.ldapOverrideMainServer=l?"1":"0")},{default:h(()=>[w(n(e(a)("user_ldap","Disable Main Server")),1)]),_:1},8,["modelValue","aria-label"]),i(e(k),{modelValue:t.value.turnOffCertCheck==="1","aria-label":e(a)("user_ldap","Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your {instanceName} server.",{instanceName:e(o)}),"onUpdate:modelValue":r[3]||(r[3]=l=>t.value.turnOffCertCheck=l?"1":"0")},{default:h(()=>[w(n(e(a)("user_ldap","Turn off SSL certificate validation.")),1)]),_:1},8,["modelValue","aria-label"]),i(e(b),{type:"number",label:e(a)("user_ldap","Cache Time-To-Live"),modelValue:t.value.ldapCacheTTL,helperText:e(a)("user_ldap","in seconds. A change empties the cache."),onChange:r[4]||(r[4]=l=>t.value.ldapCacheTTL=l.target.value)},null,8,["label","modelValue","helperText"])]),p("details",Le,[p("summary",null,[p("h3",null,n(e(a)("user_ldap","Directory Settings")),1)]),i(e(b),{autocomplete:"off",modelValue:t.value.ldapUserDisplayName,label:e(a)("user_ldap","User Display Name Field"),helperText:e(a)("user_ldap","The LDAP attribute to use to generate the user's display name."),onChange:r[5]||(r[5]=l=>t.value.ldapUserDisplayName=l.target.value)},null,8,["modelValue","label","helperText"]),i(e(b),{autocomplete:"off",modelValue:t.value.ldapUserDisplayName2,label:e(a)("user_ldap","2nd User Display Name Field"),helperText:e(a)("user_ldap","Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«."),onChange:r[6]||(r[6]=l=>t.value.ldapUserDisplayName2=l.target.value)},null,8,["modelValue","label","helperText"]),i(e(B),{modelValue:t.value.ldapBaseUsers,placeholder:e(a)("user_ldap","One User Base DN per line"),label:e(a)("user_ldap","Base User Tree"),onChange:r[7]||(r[7]=l=>t.value.ldapBaseUsers=l.target.value)},null,8,["modelValue","placeholder","label"]),i(e(B),{modelValue:t.value.ldapAttributesForUserSearch,placeholder:e(a)("user_ldap","Optional; one attribute per line"),label:e(a)("user_ldap","User Search Attributes"),onChange:r[8]||(r[8]=l=>t.value.ldapAttributesForUserSearch=l.target.value)},null,8,["modelValue","placeholder","label"]),i(e(k),{modelValue:t.value.markRemnantsAsDisabled==="1","aria-label":e(a)("user_ldap","When switched on, users imported from LDAP which are then missing will be disabled"),"onUpdate:modelValue":r[9]||(r[9]=l=>t.value.markRemnantsAsDisabled=l?"1":"0")},{default:h(()=>[w(n(e(a)("user_ldap","Disable users missing from LDAP")),1)]),_:1},8,["modelValue","aria-label"]),i(e(b),{autocomplete:"off",modelValue:t.value.ldapGroupDisplayName,label:e(a)("user_ldap","Group Display Name Field"),title:e(a)("user_ldap","The LDAP attribute to use to generate the groups's display name."),onChange:r[10]||(r[10]=l=>t.value.ldapGroupDisplayName=l.target.value)},null,8,["modelValue","label","title"]),i(e(B),{modelValue:t.value.ldapBaseGroups,placeholder:e(a)("user_ldap","One Group Base DN per line"),label:e(a)("user_ldap","Base Group Tree"),onChange:r[11]||(r[11]=l=>t.value.ldapBaseGroups=l.target.value)},null,8,["modelValue","placeholder","label"]),i(e(B),{modelValue:t.value.ldapAttributesForGroupSearch,placeholder:e(a)("user_ldap","Optional; one attribute per line"),label:e(a)("user_ldap","Group Search Attributes"),onChange:r[12]||(r[12]=l=>t.value.ldapAttributesForGroupSearch=l.target.value)},null,8,["modelValue","placeholder","label"]),i(e(R),{modelValue:t.value.ldapGroupMemberAssocAttr,"onUpdate:modelValue":r[13]||(r[13]=l=>t.value.ldapGroupMemberAssocAttr=l),options:Object.keys(c),inputLabel:e(a)("user_ldap","Group-Member association")},{option:h(({label:l})=>[w(n(c[l]),1)]),"selected-option":h(({label:l})=>[w(n(c[l]),1)]),_:1},8,["modelValue","options","inputLabel"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Dynamic Group Member URL"),modelValue:t.value.ldapDynamicGroupMemberURL,helperText:e(a)("user_ldap","The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)"),onChange:r[14]||(r[14]=l=>t.value.ldapDynamicGroupMemberURL=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(k),{modelValue:t.value.ldapNestedGroups==="1","aria-label":e(a)("user_ldap","When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)"),"onUpdate:modelValue":r[15]||(r[15]=l=>t.value.ldapNestedGroups=l?"1":"0")},{default:h(()=>[w(n(e(a)("user_ldap","Nested Groups")),1)]),_:1},8,["modelValue","aria-label"]),i(e(b),{type:"number",label:e(a)("user_ldap","Paging chunksize"),modelValue:t.value.ldapPagingSize,helperText:e(a)("user_ldap","Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)"),onChange:r[16]||(r[16]=l=>t.value.ldapPagingSize=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(k),{modelValue:t.value.turnOnPasswordChange==="1","aria-label":e(a)("user_ldap","Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server."),"onUpdate:modelValue":r[17]||(r[17]=l=>t.value.turnOnPasswordChange=l?"1":"0")},{default:h(()=>[w(n(e(a)("user_ldap","Enable LDAP password changes per user")),1)]),_:1},8,["modelValue","aria-label"]),p("span",Ie,n(e(a)("user_ldap","(New password is sent as plain text to LDAP)")),1),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Default password policy DN"),modelValue:t.value.ldapDefaultPPolicyDN,helperText:e(a)("user_ldap","The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling."),onChange:r[18]||(r[18]=l=>t.value.ldapDefaultPPolicyDN=l.target.value)},null,8,["label","modelValue","helperText"])]),p("details",Pe,[p("summary",null,[p("h3",null,n(e(a)("user_ldap","Special Attributes")),1)]),i(e(b),{autocomplete:"off",modelValue:t.value.ldapQuotaAttribute,label:e(a)("user_ldap","Quota Field"),helperText:e(a)("user_ldap","Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute."),onChange:r[19]||(r[19]=l=>t.value.ldapQuotaAttribute=l.target.value)},null,8,["modelValue","label","helperText"]),i(e(b),{autocomplete:"off",modelValue:t.value.ldapQuotaDefault,label:e(a)("user_ldap","Quota Default"),helperText:e(a)("user_ldap","Override default quota for LDAP users who do not have a quota set in the Quota Field."),onChange:r[20]||(r[20]=l=>t.value.ldapQuotaDefault=l.target.value)},null,8,["modelValue","label","helperText"]),i(e(b),{autocomplete:"off",modelValue:t.value.ldapEmailAttribute,label:e(a)("user_ldap","Email Field"),helperText:e(a)("user_ldap","Set the user's email from their LDAP attribute. Leave it empty for default behaviour."),onChange:r[21]||(r[21]=l=>t.value.ldapEmailAttribute=l.target.value)},null,8,["modelValue","label","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","User Home Folder Naming Rule"),modelValue:t.value.homeFolderNamingRule,helperText:e(a)("user_ldap","Leave empty for username (default). Otherwise, specify an LDAP/AD attribute."),onChange:r[22]||(r[22]=l=>t.value.homeFolderNamingRule=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","`$home` Placeholder Field"),modelValue:t.value.ldapExtStorageHomeAttribute,helperText:e(a)("user_ldap","$home in an external storage configuration will be replaced with the value of the specified attribute"),onChange:r[23]||(r[23]=l=>t.value.ldapExtStorageHomeAttribute=l.target.value)},null,8,["label","modelValue","helperText"])]),p("details",xe,[p("summary",null,[p("h3",null,n(e(a)("user_ldap","User Profile Attributes")),1)]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Phone Field"),modelValue:t.value.ldapAttributePhone,helperText:e(a)("user_ldap","User profile Phone will be set from the specified attribute"),onChange:r[24]||(r[24]=l=>t.value.ldapAttributePhone=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Website Field"),modelValue:t.value.ldapAttributeWebsite,helperText:e(a)("user_ldap","User profile Website will be set from the specified attribute"),onChange:r[25]||(r[25]=l=>t.value.ldapAttributeWebsite=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Address Field"),modelValue:t.value.ldapAttributeAddress,helperText:e(a)("user_ldap","User profile Address will be set from the specified attribute"),onChange:r[26]||(r[26]=l=>t.value.ldapAttributeAddress=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Twitter Field"),modelValue:t.value.ldapAttributeTwitter,helperText:e(a)("user_ldap","User profile Twitter will be set from the specified attribute"),onChange:r[27]||(r[27]=l=>t.value.ldapAttributeTwitter=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Fediverse Field"),modelValue:t.value.ldapAttributeFediverse,helperText:e(a)("user_ldap","User profile Fediverse will be set from the specified attribute"),onChange:r[28]||(r[28]=l=>t.value.ldapAttributeFediverse=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Organisation Field"),modelValue:t.value.ldapAttributeOrganisation,helperText:e(a)("user_ldap","User profile Organisation will be set from the specified attribute"),onChange:r[29]||(r[29]=l=>t.value.ldapAttributeOrganisation=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Role Field"),modelValue:t.value.ldapAttributeRole,helperText:e(a)("user_ldap","User profile Role will be set from the specified attribute"),onChange:r[30]||(r[30]=l=>t.value.ldapAttributeRole=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Headline Field"),modelValue:t.value.ldapAttributeHeadline,helperText:e(a)("user_ldap","User profile Headline will be set from the specified attribute"),onChange:r[31]||(r[31]=l=>t.value.ldapAttributeHeadline=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Biography Field"),modelValue:t.value.ldapAttributeBiography,helperText:e(a)("user_ldap","User profile Biography will be set from the specified attribute"),onChange:r[32]||(r[32]=l=>t.value.ldapAttributeBiography=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Birthdate Field"),modelValue:t.value.ldapAttributeBirthDate,helperText:e(a)("user_ldap","User profile Date of birth will be set from the specified attribute"),onChange:r[33]||(r[33]=l=>t.value.ldapAttributeBirthDate=l.target.value)},null,8,["label","modelValue","helperText"])])]))}}),Fe=G(Te,[["__scopeId","data-v-270da57a"]]),ke={class:"ldap-wizard__expert"},ze={class:"ldap-wizard__expert__line"},Ne={id:"ldap_expert_username_attr"},Ge={class:"ldap-wizard__expert__line"},Be={id:"ldap_expert_uuid_user_attr"},Oe=O({__name:"ExpertTab",props:{configId:{}},setup(u){const s=u,m=E(),t=I(()=>m.getConfigProxy(s.configId));return(o,c)=>(v(),V("fieldset",ke,[p("div",ze,[p("strong",null,n(e(a)("user_ldap","Internal Username")),1),p("p",Ne,n(e(a)("user_ldap","By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior.")),1),i(e(b),{"aria-describedby":"ldap_expert_username_attr",autocomplete:"off",label:e(a)("user_ldap","Internal Username Attribute:"),modelValue:t.value.ldapExpertUsernameAttr,onChange:c[0]||(c[0]=g=>t.value.ldapExpertUsernameAttr=g.target.value)},null,8,["label","modelValue"])]),p("div",Ge,[p("strong",null,n(e(a)("user_ldap","Override UUID detection")),1),p("p",Be,n(e(a)("user_ldap","By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups.")),1),i(e(b),{"aria-describedby":"ldap_expert_uuid_user_attr",autocomplete:"off",label:e(a)("user_ldap","UUID Attribute for Users"),modelValue:t.value.ldapExpertUUIDUserAttr,onChange:c[1]||(c[1]=g=>t.value.ldapExpertUUIDUserAttr=g.target.value)},null,8,["label","modelValue"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","UUID Attribute for Groups"),modelValue:t.value.ldapExpertUUIDGroupAttr,onChange:c[2]||(c[2]=g=>t.value.ldapExpertUUIDGroupAttr=g.target.value)},null,8,["label","modelValue"])])]))}}),Me=G(Oe,[["__scopeId","data-v-e77b52a4"]]),je={class:"ldap-wizard__groups"},Se={class:"ldap-wizard__groups__line ldap-wizard__groups__filter-selection"},Ee={class:"ldap-wizard__groups__line ldap-wizard__groups__groups-filter"},He={key:0},Re={key:1},$e={class:"ldap-wizard__groups__line ldap-wizard__groups__groups-count-check"},Qe={key:1},qe=O({__name:"GroupsTab",props:{configId:{}},setup(u){const s=u,m=E(),{ldapConfigs:t}=$(m),o=I(()=>m.getConfigProxy(s.configId,{ldapGroupFilterObjectclass:U,ldapGroupFilterGroups:U})),c=Q().theming.name,g=A(void 0),r=A([]),l=A([]),y=A(!1),L=I({get(){return o.value.ldapGroupFilterObjectclass.split(";").filter(d=>d!=="")},set(d){o.value.ldapGroupFilterObjectclass=d.join(";")}}),C=I({get(){return o.value.ldapGroupFilterGroups.split(";").filter(d=>d!=="")},set(d){o.value.ldapGroupFilterGroups=d.join(";")}});async function D(){const d=await P("determineGroupObjectClasses",s.configId);r.value=d.options?.ldap_groupfilter_objectclass??[];const _=await P("determineGroupsForGroups",s.configId);l.value=_.options?.ldap_groupfilter_groups??[]}D();async function U(){const d=await P("getGroupFilter",s.configId);t.value[s.configId].ldapGroupFilter=d.changes?.ldap_group_filter??""}async function z(){try{y.value=!0;const d=await P("countGroups",s.configId);g.value=d.changes.ldap_group_count}finally{y.value=!1}}async function f(d){d?o.value.ldapGroupFilterMode="1":o.value.ldapGroupFilterMode=await Z()?"0":"1"}return(d,_)=>(v(),V("fieldset",je,[p("legend",null,n(e(a)("user_ldap","Groups meeting these criteria are available in {instanceName}:",{instanceName:e(c)})),1),p("div",Se,[i(e(R),{modelValue:L.value,"onUpdate:modelValue":_[0]||(_[0]=N=>L.value=N),class:"ldap-wizard__groups__group-filter-groups__select",options:r.value,disabled:o.value.ldapGroupFilterMode==="1",inputLabel:e(a)("user_ldap","Only these object classes:"),multiple:!0},null,8,["modelValue","options","disabled","inputLabel"]),i(e(R),{modelValue:C.value,"onUpdate:modelValue":_[1]||(_[1]=N=>C.value=N),class:"ldap-wizard__groups__group-filter-groups__select",options:l.value,disabled:o.value.ldapGroupFilterMode==="1",inputLabel:e(a)("user_ldap","Only from these groups:"),multiple:!0},null,8,["modelValue","options","disabled","inputLabel"])]),p("div",Ee,[i(e(k),{modelValue:o.value.ldapGroupFilterMode==="1","onUpdate:modelValue":f},{default:h(()=>[w(n(e(a)("user_ldap","Edit LDAP Query")),1)]),_:1},8,["modelValue"]),o.value.ldapGroupFilterMode==="1"?(v(),V("div",He,[i(e(B),{modelValue:o.value.ldapGroupFilter,"onUpdate:modelValue":_[2]||(_[2]=N=>o.value.ldapGroupFilter=N),placeholder:e(a)("user_ldap","Edit LDAP Query"),helperText:e(a)("user_ldap","The filter specifies which LDAP groups shall have access to the {instanceName} instance.",{instanceName:e(c)})},null,8,["modelValue","placeholder","helperText"])])):(v(),V("div",Re,[p("span",null,n(e(a)("user_ldap","LDAP Filter:")),1),p("code",null,n(o.value.ldapGroupFilter),1)]))]),p("div",$e,[i(e(x),{disabled:y.value,onClick:z},{default:h(()=>[w(n(e(a)("user_ldap","Verify settings and count the groups")),1)]),_:1},8,["disabled"]),y.value?(v(),T(e(Y),{key:0,size:20})):F("",!0),g.value!==void 0&&!y.value?(v(),V("span",Qe,n(g.value),1)):F("",!0)])]))}}),We=G(qe,[["__scopeId","data-v-d46b1472"]]),Ye={class:"ldap-wizard__login"},Ze={class:"ldap-wizard__login__line ldap-wizard__login__login-attributes"},Je={class:"ldap-wizard__login__line ldap-wizard__login__user-login-filter"},Ke={key:1},Xe={class:"ldap-wizard__login__line"},ea=O({__name:"LoginTab",props:{configId:{}},setup(u){const s=u,m=E(),{ldapConfigs:t}=$(m),o=I(()=>m.getConfigProxy(s.configId,{ldapLoginFilterAttributes:D,ldapLoginFilterUsername:D,ldapLoginFilterEmail:D})),c=Q().theming.name,g=A(""),r=A([]),l=I({get(){return o.value.ldapLoginFilterAttributes.split(";").filter(f=>f!=="")},set(f){o.value.ldapLoginFilterAttributes=f.join(";")}}),y=I(()=>o.value.ldapLoginFilterMode==="1"),L=I(()=>r.value.filter(f=>!l.value.includes(f)));X(C);async function C(){const f=await P("determineAttributes",s.configId);r.value=f.options?.ldap_loginfilter_attributes??[]}async function D(){if(o.value.ldapLoginFilterMode==="0"){const f=await P("getUserLoginFilter",s.configId);t.value[s.configId].ldapLoginFilter=f.changes?.ldap_login_filter??""}}async function U(){try{const f=await P("testLoginName",s.configId,{loginName:g.value}),d=f.changes.ldap_test_loginname,_=f.changes.ldap_test_effective_filter;d<1?H(a("user_ldap","User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): {filter}",{filter:_})):d===1?te(a("user_ldap","User found and settings verified.")):d>1&&ve(a("user_ldap","Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in."))}catch(f){switch(f??a("user_ldap","An unspecified error occurred. Please check log and settings.")){case"Bad search filter":H(a("user_ldap","The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise."));break;case"connection error":H(a("user_ldap","A connection error to LDAP/AD occurred. Please check host, port and credentials."));break;case"missing placeholder":H(a("user_ldap",'The "%uid" placeholder is missing. It will be replaced with the login name when querying LDAP/AD.'));break}}}async function z(f){f?o.value.ldapLoginFilterMode="1":o.value.ldapLoginFilterMode=await Z()?"0":"1"}return(f,d)=>(v(),V("fieldset",Ye,[p("legend",null,n(e(a)("user_ldap","When logging in, {instanceName} will find the user based on the following attributes:",{instanceName:e(c)})),1),i(e(k),{modelValue:o.value.ldapLoginFilterUsername==="1",description:e(a)("user_ldap","Allows login against the LDAP/AD username, which is either 'uid' or 'sAMAccountName' and will be detected."),"onUpdate:modelValue":d[0]||(d[0]=_=>o.value.ldapLoginFilterUsername=_?"1":"0")},{default:h(()=>[w(n(e(a)("user_ldap","LDAP/AD Username:")),1)]),_:1},8,["modelValue","description"]),i(e(k),{modelValue:o.value.ldapLoginFilterEmail==="1",description:e(a)("user_ldap","Allows login against an email attribute. 'mail' and 'mailPrimaryAddress' allowed."),"onUpdate:modelValue":d[1]||(d[1]=_=>o.value.ldapLoginFilterEmail=_?"1":"0")},{default:h(()=>[w(n(e(a)("user_ldap","LDAP/AD Email Address:")),1)]),_:1},8,["modelValue","description"]),p("div",Ze,[i(e(R),{modelValue:l.value,"onUpdate:modelValue":d[2]||(d[2]=_=>l.value=_),keepOpen:"",disabled:y.value,options:L.value,inputLabel:e(a)("user_ldap","Other Attributes:"),multiple:!0},null,8,["modelValue","disabled","options","inputLabel"])]),p("div",Je,[i(e(k),{modelValue:y.value,"onUpdate:modelValue":z},{default:h(()=>[w(n(e(a)("user_ldap","Edit LDAP Query")),1)]),_:1},8,["modelValue"]),y.value?(v(),T(e(B),{key:0,modelValue:o.value.ldapLoginFilter,placeholder:e(a)("user_ldap","Edit LDAP Query"),helperText:e(a)("user_ldap","Defines the filter to apply, when login is attempted. `%%uid` replaces the username in the login action. Example: `uid=%%uid`"),onChange:d[3]||(d[3]=_=>o.value.ldapLoginFilter=_.target.value)},null,8,["modelValue","placeholder","helperText"])):(v(),V("div",Ke,[p("span",null,n(e(a)("user_ldap","LDAP Filter:")),1),p("code",null,n(o.value.ldapLoginFilter),1)]))]),p("div",Xe,[i(e(b),{modelValue:g.value,"onUpdate:modelValue":d[4]||(d[4]=_=>g.value=_),helperText:e(a)("user_ldap","Attempts to receive a DN for the given login name and the current login filter"),label:e(a)("user_ldap","Test Login name"),autocomplete:"off"},null,8,["modelValue","helperText","label"]),i(e(x),{disabled:g.value.length===0,onClick:U},{default:h(()=>[w(n(e(a)("user_ldap","Verify settings")),1)]),_:1},8,["disabled"])])]))}}),aa=G(ea,[["__scopeId","data-v-72e489d5"]]),la={name:"DeleteIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},ta=["aria-hidden","aria-label"],ra=["fill","width","height"],oa={d:"M19,4H15.5L14.5,3H9.5L8.5,4H5V6H19M6,19A2,2 0 0,0 8,21H16A2,2 0 0,0 18,19V7H6V19Z"},ia={key:0};function sa(u,s,m,t,o,c){return v(),V("span",re(u.$attrs,{"aria-hidden":m.title?null:"true","aria-label":m.title,class:"material-design-icon delete-icon",role:"img",onClick:s[0]||(s[0]=g=>u.$emit("click",g))}),[(v(),V("svg",{fill:m.fillColor,class:"material-design-icon__svg",width:m.size,height:m.size,viewBox:"0 0 24 24"},[p("path",oa,[m.title?(v(),V("title",ia,n(m.title),1)):F("",!0)])],8,ra))],16,ta)}const da=G(la,[["render",sa]]),ua={class:"ldap-wizard__server"},na={class:"ldap-wizard__server__line"},pa={class:"ldap-wizard__server__line"},ca={class:"ldap-wizard__server__host__port"},ma={class:"ldap-wizard__server__line"},_a={class:"ldap-wizard__server__line"},ga={class:"ldap-wizard__server__line"},fa=O({__name:"ServerTab",props:{configId:{}},setup(u){const s=u,m=E(),{ldapConfigs:t}=$(m),o=I(()=>m.getConfigProxy(s.configId)),c=A(!1),g=A(!1),r=A(!1),l=A(o.value.ldapAgentName),y=A(o.value.ldapAgentPassword),L=I(()=>o.value.ldapAgentName!==l.value||o.value.ldapAgentPassword!==y.value);ee(o,f=>{l.value=f.ldapAgentName,f.ldapAgentPassword==="***"?y.value="":y.value=f.ldapAgentPassword});function C(){o.value.ldapAgentName=l.value,o.value.ldapAgentPassword=y.value}async function D(){try{c.value=!0;const{changes:f}=await P("guessPortAndTLS",s.configId);t.value[s.configId].ldapPort=f.ldap_port??""}finally{c.value=!1}}async function U(){try{r.value=!0;const{changes:f}=await P("guessBaseDN",s.configId);o.value.ldapBase=f.ldap_base??""}finally{r.value=!1}}async function z(){try{g.value=!0;const{changes:f}=await P("countInBaseDN",s.configId),d=f.ldap_test_base;d<1?q(a("user_ldap","No object found in the given Base DN. Please revise.")):d>1e3?q(a("user_ldap","More than 1,000 directory entries available.")):q(ue("user_ldap","{ldapTestBase} entry available within the provided Base DN","{ldapTestBase} entries available within the provided Base DN",d,{ldapTestBase:d}))}finally{g.value=!1}}return(f,d)=>(v(),V("fieldset",ua,[p("div",na,[i(e(k),{modelValue:o.value.ldapConfigurationActive==="1",type:"switch","aria-label":e(a)("user_ldap","When unchecked, this configuration will be skipped."),"onUpdate:modelValue":d[0]||(d[0]=_=>o.value.ldapConfigurationActive=_?"1":"0")},{default:h(()=>[w(n(e(a)("user_ldap","Configuration active")),1)]),_:1},8,["modelValue","aria-label"]),i(e(x),{title:e(a)("user_ldap","Copy current configuration into new directory binding"),onClick:d[1]||(d[1]=_=>e(m).copyConfig(u.configId))},{icon:h(()=>[i(le,{size:20})]),default:h(()=>[w(" "+n(e(a)("user_ldap","Copy configuration")),1)]),_:1},8,["title"]),i(e(x),{variant:"error",onClick:d[2]||(d[2]=_=>e(m).removeConfig(u.configId))},{icon:h(()=>[i(da,{size:20})]),default:h(()=>[w(" "+n(e(a)("user_ldap","Delete configuration")),1)]),_:1})]),p("div",pa,[i(e(b),{modelValue:o.value.ldapHost,helperText:e(a)("user_ldap","You can omit the protocol, unless you require SSL. If so, start with ldaps://"),label:e(a)("user_ldap","Host"),placeholder:"ldaps://localhost",autocomplete:"off",onChange:d[3]||(d[3]=_=>o.value.ldapHost=_.target.value)},null,8,["modelValue","helperText","label"]),p("div",ca,[i(e(b),{modelValue:o.value.ldapPort,label:e(a)("user_ldap","Port"),placeholder:"389",type:"number",autocomplete:"off",onChange:d[4]||(d[4]=_=>o.value.ldapPort=_.target.value)},null,8,["modelValue","label"]),i(e(x),{disabled:c.value,onClick:D},{default:h(()=>[w(n(e(a)("user_ldap","Detect Port")),1)]),_:1},8,["disabled"])])]),p("div",ma,[i(e(b),{modelValue:l.value,"onUpdate:modelValue":d[5]||(d[5]=_=>l.value=_),helperText:e(a)("user_ldap","The DN of the client user with which the bind shall be done. For anonymous access, leave DN and Password empty."),label:e(a)("user_ldap","User DN"),placeholder:"uid=agent,dc=example,dc=com",autocomplete:"off"},null,8,["modelValue","helperText","label"])]),p("div",_a,[i(e(b),{modelValue:y.value,"onUpdate:modelValue":d[6]||(d[6]=_=>y.value=_),type:"password",helperText:e(a)("user_ldap","For anonymous access, leave DN and Password empty."),label:e(a)("user_ldap","Password"),autocomplete:"off"},null,8,["modelValue","helperText","label"]),i(e(x),{disabled:!L.value,onClick:C},{default:h(()=>[w(n(e(a)("user_ldap","Save credentials")),1)]),_:1},8,["disabled"])]),p("div",ga,[i(e(B),{label:e(a)("user_ldap","Base DN"),modelValue:o.value.ldapBase,placeholder:e(a)("user_ldap","One Base DN per line"),helperText:e(a)("user_ldap","You can specify Base DN for users and groups in the Advanced tab"),onChange:d[7]||(d[7]=_=>o.value.ldapBase=_.target.value)},null,8,["label","modelValue","placeholder","helperText"]),i(e(x),{disabled:r.value||L.value,onClick:U},{default:h(()=>[w(n(e(a)("user_ldap","Detect Base DN")),1)]),_:1},8,["disabled"]),i(e(x),{disabled:g.value||o.value.ldapBase==="",onClick:z},{default:h(()=>[w(n(e(a)("user_ldap","Test Base DN")),1)]),_:1},8,["disabled"])])]))}}),va=G(fa,[["__scopeId","data-v-1a7392db"]]),ha={class:"ldap-wizard__users"},ba={class:"ldap-wizard__users__line ldap-wizard__users__user-filter-object-class"},wa={class:"ldap-wizard__users__line ldap-wizard__users__user-filter-groups"},ya={class:"ldap-wizard__users__line ldap-wizard__users__user-filter"},Aa={key:0},Va={key:1},Da={class:"ldap-wizard__users__line ldap-wizard__users__user-count-check"},Ua={key:1},Ca=O({__name:"UsersTab",props:{configId:{}},setup(u){const s=u,m=E(),{ldapConfigs:t}=$(m),o=I(()=>m.getConfigProxy(s.configId,{ldapUserFilterObjectclass:U,ldapUserFilterGroups:U})),c=A(void 0),g=A(!1),r=Q().theming.name,l=A([]),y=A([]),L=I({get(){return o.value.ldapUserFilterObjectclass?.split(";").filter(d=>d!=="")??[]},set(d){o.value.ldapUserFilterObjectclass=d.join(";")}}),C=I({get(){return o.value.ldapUserFilterGroups.split(";").filter(d=>d!=="")},set(d){o.value.ldapUserFilterGroups=d.join(";")}});X(D);async function D(){const d=await P("determineUserObjectClasses",s.configId);l.value=d.options?.ldap_userfilter_objectclass??[],t.value[s.configId].ldapUserFilterObjectclass=d.changes?.ldap_userfilter_objectclass?.join(";")??"";const _=await P("determineGroupsForUsers",s.configId);y.value=_.options?.ldap_userfilter_groups??[],t.value[s.configId].ldapUserFilterGroups=_.changes?.ldap_userfilter_groups?.join(";")??""}async function U(){if(o.value.ldapUserFilterMode==="0"){const d=await P("getUserListFilter",s.configId);t.value[s.configId].ldapUserFilter=d.changes?.ldap_userlist_filter??"";const _=await P("getUserLoginFilter",s.configId);t.value[s.configId].ldapLoginFilter=_.changes?.ldap_login_filter??""}}async function z(){try{g.value=!0;const d=await P("countUsers",s.configId);c.value=d.changes.ldap_user_count}finally{g.value=!1}}async function f(d){d?o.value.ldapUserFilterMode="1":o.value.ldapUserFilterMode=await Z()?"0":"1"}return(d,_)=>(v(),V("fieldset",ha,[w(n(e(a)("user_ldap","Listing and searching for users is constrained by these criteria:"))+" ",1),p("div",ba,[i(e(R),{modelValue:L.value,"onUpdate:modelValue":_[0]||(_[0]=N=>L.value=N),disabled:o.value.ldapUserFilterMode==="1",class:"ldap-wizard__users__user-filter-object-class__select",options:l.value,inputLabel:e(a)("user_ldap","Only these object classes:"),multiple:!0},null,8,["modelValue","disabled","options","inputLabel"]),w(" "+n(e(a)("user_ldap","The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin.")),1)]),p("div",wa,[i(e(R),{modelValue:C.value,"onUpdate:modelValue":_[1]||(_[1]=N=>C.value=N),class:"ldap-wizard__users__user-filter-groups__select",disabled:o.value.ldapUserFilterMode==="1",options:y.value,inputLabel:e(a)("user_ldap","Only from these groups:"),multiple:!0},null,8,["modelValue","disabled","options","inputLabel"])]),p("div",ya,[i(e(k),{modelValue:o.value.ldapUserFilterMode==="1","onUpdate:modelValue":f},{default:h(()=>[w(n(e(a)("user_ldap","Edit LDAP Query")),1)]),_:1},8,["modelValue"]),o.value.ldapUserFilterMode==="1"?(v(),V("div",Aa,[i(e(B),{modelValue:o.value.ldapUserFilter,"onUpdate:modelValue":_[2]||(_[2]=N=>o.value.ldapUserFilter=N),placeholder:e(a)("user_ldap","Edit LDAP Query"),helperText:e(a)("user_ldap","The filter specifies which LDAP users shall have access to the {instanceName} instance.",{instanceName:e(r)})},null,8,["modelValue","placeholder","helperText"])])):(v(),V("div",Va,[p("label",null,n(e(a)("user_ldap","LDAP Filter:")),1),p("code",null,n(o.value.ldapUserFilter),1)]))]),p("div",Da,[i(e(x),{disabled:g.value,onClick:z},{default:h(()=>[w(n(e(a)("user_ldap","Verify settings and count users")),1)]),_:1},8,["disabled"]),g.value?(v(),T(e(Y),{key:0,size:16})):F("",!0),c.value!==void 0&&!g.value?(v(),V("span",Ua,n(e(a)("user_ldap","User count: {usersCount}",{usersCount:c.value},{escape:!1})),1)):F("",!0)])]))}}),La=G(Ca,[["__scopeId","data-v-8bb498fe"]]),Ia={class:"ldap-wizard__controls"},Pa={class:"ldap-wizard__controls__state_message"},xa=O({__name:"WizardControls",props:{configId:{}},setup(u){const s=u,m=E(),{updatingConfig:t}=$(m),o=A(!1),c=A(null),g=I(()=>c.value?.success);ee(t,()=>{c.value=null});async function r(){try{o.value=!0,c.value=await Ve(s.configId)}finally{o.value=!1}}return(l,y)=>(v(),V("div",Ia,[i(e(x),{variant:"primary",disabled:o.value,onClick:r},{default:h(()=>[w(n(e(a)("user_ldap","Test Configuration")),1)]),_:1},8,["disabled"]),i(e(x),{variant:"tertiary",href:"https://docs.nextcloud.com/server/stable/go.php?to=admin-ldap",target:"_blank",rel:"noreferrer noopener"},{icon:h(()=>[i(le,{size:20})]),default:h(()=>[p("span",null,n(e(a)("user_ldap","Help")),1)]),_:1}),c.value!==null&&!o.value?(v(),V(W,{key:0},[p("span",{class:oe(["ldap-wizard__controls__state_indicator",{"ldap-wizard__controls__state_indicator--valid":g.value}])},null,2),p("span",Pa,n(c.value.message),1)],64)):F("",!0),o.value?(v(),T(e(Y),{key:1,size:16})):F("",!0)]))}}),Ta=G(xa,[["__scopeId","data-v-4518d86f"]]),Fa={class:"ldap-wizard"},ka={class:"ldap-wizard__config-selection"},za={key:0,class:"ldap-wizard__tab-container"},Na={class:"ldap-wizard__tab-selection-container"},Ga={class:"ldap-wizard__tab-selection"},Ba={class:"ldap-wizard__clear-mapping"},Oa={class:"ldap-wizard__clear-mapping__buttons"},Ma=O({__name:"LDAPSettingsApp",setup(u){const s=ae("user_ldap","ldapModuleInstalled"),m={server:a("user_ldap","Server"),users:a("user_ldap","Users"),login:a("user_ldap","Login Attributes"),groups:a("user_ldap","Groups"),advanced:a("user_ldap","Advanced"),expert:a("user_ldap","Expert")},t=E(),{ldapConfigs:o,selectedConfigId:c,selectedConfig:g}=$(t),r=A("server"),l=A(!1),y=I(()=>g.value!==void 0&&g.value.ldapHost!==""&&g.value.ldapPort!==""&&g.value.ldapBase!=="");async function L(C){try{l.value=!0,await De(C)}finally{l.value=!1}}return(C,D)=>(v(),V("form",Fa,[p("h2",null,n(e(a)("user_ldap","LDAP/AD integration")),1),e(s)?F("",!0):(v(),T(e(ce),{key:0,type:"warning",text:e(a)("user_ldap","The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.")},null,8,["text"])),e(s)?(v(),V(W,{key:1},[p("div",ka,[e(c)!==void 0?(v(),T(e(R),{key:0,modelValue:e(c),"onUpdate:modelValue":D[0]||(D[0]=U=>ie(c)?c.value=U:null),options:Object.keys(e(o)),inputLabel:e(a)("user_ldap","Select LDAP Config")},{option:h(({label:U})=>[w(n(`${U}: ${e(o)[U]?.ldapHost??""}`),1)]),"selected-option":h(({label:U})=>[w(n(`${U}: ${e(o)[U]?.ldapHost??""}`),1)]),_:1},8,["modelValue","options","inputLabel"])):F("",!0),i(e(x),{label:e(a)("user_ldap","Create New Config"),class:"ldap-wizard__config-selection__create-button",onClick:e(t).create},{icon:h(()=>[i(pe,{size:20})]),default:h(()=>[w(" "+n(e(a)("user_ldap","Create configuration")),1)]),_:1},8,["label","onClick"])]),e(c)!==void 0?(v(),V("div",za,[p("div",Na,[p("div",Ga,[(v(),V(W,null,se(m,(U,z)=>i(e(k),{key:z,modelValue:r.value,"onUpdate:modelValue":D[1]||(D[1]=f=>r.value=f),buttonVariant:!0,value:z,type:"radio",disabled:z!=="server"&&!y.value,buttonVariantGrouped:"horizontal"},{default:h(()=>[w(n(U),1)]),_:2},1032,["modelValue","value","disabled"])),64))])]),r.value==="server"?(v(),T(va,{key:0,configId:e(c)},null,8,["configId"])):r.value==="users"?(v(),T(La,{key:1,configId:e(c)},null,8,["configId"])):r.value==="login"?(v(),T(aa,{key:2,configId:e(c)},null,8,["configId"])):r.value==="groups"?(v(),T(We,{key:3,configId:e(c)},null,8,["configId"])):r.value==="expert"?(v(),T(Me,{key:4,configId:e(c)},null,8,["configId"])):r.value==="advanced"?(v(),T(Fe,{key:5,configId:e(c)},null,8,["configId"])):F("",!0),i(Ta,{class:"ldap-wizard__controls",configId:e(c)},null,8,["configId"])])):F("",!0),p("div",Ba,[p("strong",null,n(e(a)("user_ldap","Username-LDAP User Mapping")),1),w(" "+n(e(a)("user_ldap","Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage."))+" ",1),p("div",Oa,[i(e(x),{variant:"error",disabled:l.value,onClick:D[2]||(D[2]=U=>L("user"))},{default:h(()=>[w(n(e(a)("user_ldap","Clear Username-LDAP User Mapping")),1)]),_:1},8,["disabled"]),i(e(x),{variant:"error",disabled:l.value,onClick:D[3]||(D[3]=U=>L("group"))},{default:h(()=>[w(n(e(a)("user_ldap","Clear Groupname-LDAP Group Mapping")),1)]),_:1},8,["disabled"])])])],64)):F("",!0)]))}}),ja=G(Ma,[["__scopeId","data-v-cb2f6989"]]),Sa=ge(),K=de(ja);K.use(Sa),K.mount("#content-ldap-settings"); +import{l as A,v as I,b as O,o as v,f as V,g as p,t as n,u as e,k as i,w as h,j as w,c as T,h as F,A as X,m as re,z as ee,F as W,y as oe,$ as ie,B as se,e as de}from"./Web-BwmPK40i.chunk.mjs";import{l as ae,g as Q,_ as G}from"./public-C1mLBHT3.chunk.mjs";import{t as a,a as ue}from"./translation-DoG5ZELJ-CFYnqluG.chunk.mjs";import"./PencilOutline-CJ2aSuY5.chunk.mjs";import"./createElementId-DhjFt1I9-B4kXTdvj.chunk.mjs";import{a as B}from"./NcTextArea-Dxzj4zdb-stc727hj.chunk.mjs";import"./NcBreadcrumbs-5gl8Syfa-DEY8F3C7.chunk.mjs";import"./NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7-B1iF5g9H.chunk.mjs";import"./NcModal-DUWLRm_F-CU-AeBE5.chunk.mjs";/* empty css */import"./NcAvatar-M3-CbKbq-D3H79LgO.chunk.mjs";import"./NcContent-BhMoPROW-DisoN_bw.chunk.mjs";import{N as x}from"./logger-D3RVzcfQ-8mOgKmZ4.chunk.mjs";import{N as Y}from"./TrashCanOutline-Cv7t-yKN.chunk.mjs";import{g as ne,c as M}from"./index-B-dGqfIG.chunk.mjs";import{N as k}from"./NcCheckboxRadioSwitch-D8Dfv4iw-ChIm2mK6.chunk.mjs";import{P as pe}from"./Plus-DYmK9QaT.chunk.mjs";import"./index-BoBLp2fu.chunk.mjs";import"./TrayArrowDown-BI3qCRD6.chunk.mjs";import"./index-CMXcwXc6.chunk.mjs";import"./index-BW4M2n71.chunk.mjs";import{N as R}from"./index-BOH7nBEM.chunk.mjs";import"./NcEmojiPicker-Bpw-68QP-D7y9NGJt.chunk.mjs";import"./NcEmptyContent-CGAPqk4S-6l5cDfPe.chunk.mjs";import"./index-C_wPY1fR.chunk.mjs";/* empty css */import"./NcInputField-B1bGxYHt-BybY_CkS.chunk.mjs";import{N as ce}from"./mdi-Lt-19ASw.chunk.mjs";import"./NcPasswordField-Be5_qcfm-ZLEgTVOQ.chunk.mjs";import"./index-xEyWukTf.chunk.mjs";import{c as j,i as me}from"./index-BLNGy7h5.chunk.mjs";import{_ as b}from"./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r-BU5OWoch.chunk.mjs";import"./NcSelectTags-D7qWNjXa-DQjEDMdI.chunk.mjs";import{I as le}from"./ContentCopy-BF1gBM5z.chunk.mjs";import"./NcUserBubble-CDQa0hGy-BM5qrjQl.chunk.mjs";import"./NcUserStatusIcon-DsviB2Cr-CpKCZ3VO.chunk.mjs";import"./emoji-C8k9NUlo-rFKNlNNR.chunk.mjs";import"./colors-BDeMBgfq-BQ_6MaUU.chunk.mjs";import{d as _e,s as $,c as ge}from"./pinia-CLibr4cC.chunk.mjs";import{a as H,d as te,g as fe,s as ve,b as q}from"./index-DL1yHC1K-DnBG6QLJ.chunk.mjs";import"./ArrowRight-DKsMJImQ.chunk.mjs";import"./util-Alk1iwuj.chunk.mjs";const S=ne().setApp("LDAP").detectUser().build();async function he(){const u=await j.post(M("apps/user_ldap/api/v1/config"));return S.debug("Created configuration",{configId:u.data.ocs.data.configID}),u.data.ocs.data.configID}async function be(u){const s=new FormData;s.set("copyConfig",u);const m=await j.post(M("apps/user_ldap/api/v1/config/{configId}/copy",{configId:u}),s);return S.debug("Created configuration",{configId:m.data.ocs.data.configID}),m.data.ocs.data.configID}async function we(u){const s=await j.get(M("apps/user_ldap/api/v1/config/{configId}",{configId:u}));return S.debug("Fetched configuration",{configId:u,config:s.data.ocs.data}),s.data.ocs.data}async function ye(u,s){const m=await j.put(M("apps/user_ldap/api/v1/config/{configId}",{configId:u}),{configData:s});return S.debug("Updated configuration",{configId:u,config:s}),m.data.ocs.data}async function Ae(u){try{if(!await J(a("user_ldap","Confirm action"),a("user_ldap","Are you sure you want to permanently delete this LDAP configuration? This cannot be undone.")))return!1;await j.delete(M("apps/user_ldap/api/v1/config/{configId}",{configId:u})),S.debug("Deleted configuration",{configId:u})}catch(s){const m=s.response;H(m?.data.ocs.meta.message||a("user_ldap","Failed to delete config"))}return!0}async function Ve(u){const s=new FormData,m=await j.post(M("apps/user_ldap/api/v1/config/{configId}/test",{configId:u}));return S.debug(`Configuration is ${m.data.ocs.data.success?"valide":"invalide"}`,{configId:u,params:s,response:m}),m.data.ocs.data}async function De(u){if(!await J(a("user_ldap","Confirm action"),a("user_ldap","Are you sure you want to permanently clear the LDAP mapping? This cannot be undone.")))return!1;try{const s=await j.post(M("apps/user_ldap/api/v1/wizard/clearMappings"),{subject:u});return S.debug("Cleared mapping",{subject:u,response:s}),te(a("user_ldap","Mapping cleared")),!0}catch(s){const m=s.response;H(m?.data.ocs.meta.message||a("user_ldap","Failed to clear mapping"))}}async function P(u,s,m={}){const t=new FormData;Object.entries(m).forEach(([o,c])=>{t.set(o,c)});try{const o=await j.post(M("apps/user_ldap/api/v1/wizard/{configId}/{action}",{configId:s,action:u}),t);return S.debug(`Called wizard action: ${u}`,{configId:s,params:t,response:o}),o.data.ocs.data}catch(o){let c=a("user_ldap","An error occurred");throw me(o)&&o.response?.data.ocs.meta.status==="failure"&&o.response.data.ocs.meta.message!==""&&o.response.data.ocs.meta.message!==void 0&&(c=o.response.data.ocs.meta.message),H(c),o}}async function Z(){return await J(a("user_ldap","Mode switch"),a("user_ldap","Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?"))}async function J(u,s){let m=!1;return await fe(u).setText(s).setSeverity("warning").addButton({label:a("user_ldap","Cancel"),callback(){}}).addButton({label:a("user_ldap","Confirm"),variant:"error",callback(){m=!0}}).build().show(),m}const E=_e("ldap-configs",()=>{const u=A(ae("user_ldap","ldapConfigs")),s=A(Object.keys(u.value)[0]),m=I(()=>s.value===void 0?void 0:u.value[s.value]),t=A(0);function o(l,y={}){if(u.value[l]===void 0)throw new Error(`Config with id ${l} does not exist`);return new Proxy(u.value[l],{get(L,C){return L[C]},set(L,C,D){return L[C]=D,(async()=>(t.value++,await ye(l,{[C]:D}),t.value--,y[C]!==void 0&&y[C](L[C])))(),!0}})}async function c(){const l=await he();return u.value[l]=await we(l),s.value=l,l}async function g(l){if(u.value[l]===void 0)throw new Error(`Config with id ${l} does not exist`);const y=await be(l);return u.value[y]={...u.value[l]},s.value=y,y}async function r(l){await Ae(l)===!0&&(Object.keys(u.value).length===1?(s.value=await c(),s.value!==l&&delete u.value[l]):(s.value=Object.keys(u.value).filter(y=>l!==y)[0],delete u.value[l]))}return{ldapConfigs:u,selectedConfigId:s,selectedConfig:m,updatingConfig:t,getConfigProxy:o,create:c,copyConfig:g,removeConfig:r}}),Ue={class:"ldap-wizard__advanced"},Ce={open:"",name:"ldap-wizard__advanced__section",class:"ldap-wizard__advanced__section"},Le={name:"ldap-wizard__advanced__section",class:"ldap-wizard__advanced__section"},Ie={class:"tablecell"},Pe={name:"ldap-wizard__advanced__section",class:"ldap-wizard__advanced__section"},xe={name:"ldap-wizard__advanced__section",class:"ldap-wizard__advanced__section"},Te=O({__name:"AdvancedTab",props:{configId:{}},setup(u){const s=u,m=E(),t=I(()=>m.getConfigProxy(s.configId)),o=Q().theming.name,c={uniqueMember:"uniqueMember",memberUid:"memberUid",member:"member (AD)",gidNumber:"gidNumber",zimbraMailForwardingAddress:"zimbraMailForwardingAddress"};return(g,r)=>(v(),V("fieldset",Ue,[p("details",Ce,[p("summary",null,[p("h3",null,n(e(a)("user_ldap","Connection Settings")),1)]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Backup (Replica) Host"),modelValue:t.value.ldapBackupHost,helperText:e(a)("user_ldap","Give an optional backup host. It must be a replica of the main LDAP/AD server."),onChange:r[0]||(r[0]=l=>t.value.ldapBackupHost=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{type:"number",modelValue:t.value.ldapBackupPort,label:e(a)("user_ldap","Backup (Replica) Port"),onChange:r[1]||(r[1]=l=>t.value.ldapBackupPort=l.target.value)},null,8,["modelValue","label"]),i(e(k),{modelValue:t.value.ldapOverrideMainServer==="1",type:"switch","aria-label":e(a)("user_ldap","Only connect to the replica server."),"onUpdate:modelValue":r[2]||(r[2]=l=>t.value.ldapOverrideMainServer=l?"1":"0")},{default:h(()=>[w(n(e(a)("user_ldap","Disable Main Server")),1)]),_:1},8,["modelValue","aria-label"]),i(e(k),{modelValue:t.value.turnOffCertCheck==="1","aria-label":e(a)("user_ldap","Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your {instanceName} server.",{instanceName:e(o)}),"onUpdate:modelValue":r[3]||(r[3]=l=>t.value.turnOffCertCheck=l?"1":"0")},{default:h(()=>[w(n(e(a)("user_ldap","Turn off SSL certificate validation.")),1)]),_:1},8,["modelValue","aria-label"]),i(e(b),{type:"number",label:e(a)("user_ldap","Cache Time-To-Live"),modelValue:t.value.ldapCacheTTL,helperText:e(a)("user_ldap","in seconds. A change empties the cache."),onChange:r[4]||(r[4]=l=>t.value.ldapCacheTTL=l.target.value)},null,8,["label","modelValue","helperText"])]),p("details",Le,[p("summary",null,[p("h3",null,n(e(a)("user_ldap","Directory Settings")),1)]),i(e(b),{autocomplete:"off",modelValue:t.value.ldapUserDisplayName,label:e(a)("user_ldap","User Display Name Field"),helperText:e(a)("user_ldap","The LDAP attribute to use to generate the user's display name."),onChange:r[5]||(r[5]=l=>t.value.ldapUserDisplayName=l.target.value)},null,8,["modelValue","label","helperText"]),i(e(b),{autocomplete:"off",modelValue:t.value.ldapUserDisplayName2,label:e(a)("user_ldap","2nd User Display Name Field"),helperText:e(a)("user_ldap","Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«."),onChange:r[6]||(r[6]=l=>t.value.ldapUserDisplayName2=l.target.value)},null,8,["modelValue","label","helperText"]),i(e(B),{modelValue:t.value.ldapBaseUsers,placeholder:e(a)("user_ldap","One User Base DN per line"),label:e(a)("user_ldap","Base User Tree"),onChange:r[7]||(r[7]=l=>t.value.ldapBaseUsers=l.target.value)},null,8,["modelValue","placeholder","label"]),i(e(B),{modelValue:t.value.ldapAttributesForUserSearch,placeholder:e(a)("user_ldap","Optional; one attribute per line"),label:e(a)("user_ldap","User Search Attributes"),onChange:r[8]||(r[8]=l=>t.value.ldapAttributesForUserSearch=l.target.value)},null,8,["modelValue","placeholder","label"]),i(e(k),{modelValue:t.value.markRemnantsAsDisabled==="1","aria-label":e(a)("user_ldap","When switched on, users imported from LDAP which are then missing will be disabled"),"onUpdate:modelValue":r[9]||(r[9]=l=>t.value.markRemnantsAsDisabled=l?"1":"0")},{default:h(()=>[w(n(e(a)("user_ldap","Disable users missing from LDAP")),1)]),_:1},8,["modelValue","aria-label"]),i(e(b),{autocomplete:"off",modelValue:t.value.ldapGroupDisplayName,label:e(a)("user_ldap","Group Display Name Field"),title:e(a)("user_ldap","The LDAP attribute to use to generate the groups's display name."),onChange:r[10]||(r[10]=l=>t.value.ldapGroupDisplayName=l.target.value)},null,8,["modelValue","label","title"]),i(e(B),{modelValue:t.value.ldapBaseGroups,placeholder:e(a)("user_ldap","One Group Base DN per line"),label:e(a)("user_ldap","Base Group Tree"),onChange:r[11]||(r[11]=l=>t.value.ldapBaseGroups=l.target.value)},null,8,["modelValue","placeholder","label"]),i(e(B),{modelValue:t.value.ldapAttributesForGroupSearch,placeholder:e(a)("user_ldap","Optional; one attribute per line"),label:e(a)("user_ldap","Group Search Attributes"),onChange:r[12]||(r[12]=l=>t.value.ldapAttributesForGroupSearch=l.target.value)},null,8,["modelValue","placeholder","label"]),i(e(R),{modelValue:t.value.ldapGroupMemberAssocAttr,"onUpdate:modelValue":r[13]||(r[13]=l=>t.value.ldapGroupMemberAssocAttr=l),options:Object.keys(c),inputLabel:e(a)("user_ldap","Group-Member association")},{option:h(({label:l})=>[w(n(c[l]),1)]),"selected-option":h(({label:l})=>[w(n(c[l]),1)]),_:1},8,["modelValue","options","inputLabel"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Dynamic Group Member URL"),modelValue:t.value.ldapDynamicGroupMemberURL,helperText:e(a)("user_ldap","The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)"),onChange:r[14]||(r[14]=l=>t.value.ldapDynamicGroupMemberURL=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(k),{modelValue:t.value.ldapNestedGroups==="1","aria-label":e(a)("user_ldap","When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)"),"onUpdate:modelValue":r[15]||(r[15]=l=>t.value.ldapNestedGroups=l?"1":"0")},{default:h(()=>[w(n(e(a)("user_ldap","Nested Groups")),1)]),_:1},8,["modelValue","aria-label"]),i(e(b),{type:"number",label:e(a)("user_ldap","Paging chunksize"),modelValue:t.value.ldapPagingSize,helperText:e(a)("user_ldap","Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)"),onChange:r[16]||(r[16]=l=>t.value.ldapPagingSize=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(k),{modelValue:t.value.turnOnPasswordChange==="1","aria-label":e(a)("user_ldap","Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server."),"onUpdate:modelValue":r[17]||(r[17]=l=>t.value.turnOnPasswordChange=l?"1":"0")},{default:h(()=>[w(n(e(a)("user_ldap","Enable LDAP password changes per user")),1)]),_:1},8,["modelValue","aria-label"]),p("span",Ie,n(e(a)("user_ldap","(New password is sent as plain text to LDAP)")),1),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Default password policy DN"),modelValue:t.value.ldapDefaultPPolicyDN,helperText:e(a)("user_ldap","The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling."),onChange:r[18]||(r[18]=l=>t.value.ldapDefaultPPolicyDN=l.target.value)},null,8,["label","modelValue","helperText"])]),p("details",Pe,[p("summary",null,[p("h3",null,n(e(a)("user_ldap","Special Attributes")),1)]),i(e(b),{autocomplete:"off",modelValue:t.value.ldapQuotaAttribute,label:e(a)("user_ldap","Quota Field"),helperText:e(a)("user_ldap","Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute."),onChange:r[19]||(r[19]=l=>t.value.ldapQuotaAttribute=l.target.value)},null,8,["modelValue","label","helperText"]),i(e(b),{autocomplete:"off",modelValue:t.value.ldapQuotaDefault,label:e(a)("user_ldap","Quota Default"),helperText:e(a)("user_ldap","Override default quota for LDAP users who do not have a quota set in the Quota Field."),onChange:r[20]||(r[20]=l=>t.value.ldapQuotaDefault=l.target.value)},null,8,["modelValue","label","helperText"]),i(e(b),{autocomplete:"off",modelValue:t.value.ldapEmailAttribute,label:e(a)("user_ldap","Email Field"),helperText:e(a)("user_ldap","Set the user's email from their LDAP attribute. Leave it empty for default behaviour."),onChange:r[21]||(r[21]=l=>t.value.ldapEmailAttribute=l.target.value)},null,8,["modelValue","label","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","User Home Folder Naming Rule"),modelValue:t.value.homeFolderNamingRule,helperText:e(a)("user_ldap","Leave empty for username (default). Otherwise, specify an LDAP/AD attribute."),onChange:r[22]||(r[22]=l=>t.value.homeFolderNamingRule=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","`$home` Placeholder Field"),modelValue:t.value.ldapExtStorageHomeAttribute,helperText:e(a)("user_ldap","$home in an external storage configuration will be replaced with the value of the specified attribute"),onChange:r[23]||(r[23]=l=>t.value.ldapExtStorageHomeAttribute=l.target.value)},null,8,["label","modelValue","helperText"])]),p("details",xe,[p("summary",null,[p("h3",null,n(e(a)("user_ldap","User Profile Attributes")),1)]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Phone Field"),modelValue:t.value.ldapAttributePhone,helperText:e(a)("user_ldap","User profile Phone will be set from the specified attribute"),onChange:r[24]||(r[24]=l=>t.value.ldapAttributePhone=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Website Field"),modelValue:t.value.ldapAttributeWebsite,helperText:e(a)("user_ldap","User profile Website will be set from the specified attribute"),onChange:r[25]||(r[25]=l=>t.value.ldapAttributeWebsite=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Address Field"),modelValue:t.value.ldapAttributeAddress,helperText:e(a)("user_ldap","User profile Address will be set from the specified attribute"),onChange:r[26]||(r[26]=l=>t.value.ldapAttributeAddress=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Twitter Field"),modelValue:t.value.ldapAttributeTwitter,helperText:e(a)("user_ldap","User profile Twitter will be set from the specified attribute"),onChange:r[27]||(r[27]=l=>t.value.ldapAttributeTwitter=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Fediverse Field"),modelValue:t.value.ldapAttributeFediverse,helperText:e(a)("user_ldap","User profile Fediverse will be set from the specified attribute"),onChange:r[28]||(r[28]=l=>t.value.ldapAttributeFediverse=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Organisation Field"),modelValue:t.value.ldapAttributeOrganisation,helperText:e(a)("user_ldap","User profile Organisation will be set from the specified attribute"),onChange:r[29]||(r[29]=l=>t.value.ldapAttributeOrganisation=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Role Field"),modelValue:t.value.ldapAttributeRole,helperText:e(a)("user_ldap","User profile Role will be set from the specified attribute"),onChange:r[30]||(r[30]=l=>t.value.ldapAttributeRole=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Headline Field"),modelValue:t.value.ldapAttributeHeadline,helperText:e(a)("user_ldap","User profile Headline will be set from the specified attribute"),onChange:r[31]||(r[31]=l=>t.value.ldapAttributeHeadline=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Biography Field"),modelValue:t.value.ldapAttributeBiography,helperText:e(a)("user_ldap","User profile Biography will be set from the specified attribute"),onChange:r[32]||(r[32]=l=>t.value.ldapAttributeBiography=l.target.value)},null,8,["label","modelValue","helperText"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","Birthdate Field"),modelValue:t.value.ldapAttributeBirthDate,helperText:e(a)("user_ldap","User profile Date of birth will be set from the specified attribute"),onChange:r[33]||(r[33]=l=>t.value.ldapAttributeBirthDate=l.target.value)},null,8,["label","modelValue","helperText"])])]))}}),Fe=G(Te,[["__scopeId","data-v-270da57a"]]),ke={class:"ldap-wizard__expert"},ze={class:"ldap-wizard__expert__line"},Ne={id:"ldap_expert_username_attr"},Ge={class:"ldap-wizard__expert__line"},Be={id:"ldap_expert_uuid_user_attr"},Oe=O({__name:"ExpertTab",props:{configId:{}},setup(u){const s=u,m=E(),t=I(()=>m.getConfigProxy(s.configId));return(o,c)=>(v(),V("fieldset",ke,[p("div",ze,[p("strong",null,n(e(a)("user_ldap","Internal Username")),1),p("p",Ne,n(e(a)("user_ldap","By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all DAV services. With this setting, the default behavior can be overridden. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior.")),1),i(e(b),{"aria-describedby":"ldap_expert_username_attr",autocomplete:"off",label:e(a)("user_ldap","Internal Username Attribute:"),modelValue:t.value.ldapExpertUsernameAttr,onChange:c[0]||(c[0]=g=>t.value.ldapExpertUsernameAttr=g.target.value)},null,8,["label","modelValue"])]),p("div",Ge,[p("strong",null,n(e(a)("user_ldap","Override UUID detection")),1),p("p",Be,n(e(a)("user_ldap","By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups.")),1),i(e(b),{"aria-describedby":"ldap_expert_uuid_user_attr",autocomplete:"off",label:e(a)("user_ldap","UUID Attribute for Users"),modelValue:t.value.ldapExpertUUIDUserAttr,onChange:c[1]||(c[1]=g=>t.value.ldapExpertUUIDUserAttr=g.target.value)},null,8,["label","modelValue"]),i(e(b),{autocomplete:"off",label:e(a)("user_ldap","UUID Attribute for Groups"),modelValue:t.value.ldapExpertUUIDGroupAttr,onChange:c[2]||(c[2]=g=>t.value.ldapExpertUUIDGroupAttr=g.target.value)},null,8,["label","modelValue"])])]))}}),Me=G(Oe,[["__scopeId","data-v-e77b52a4"]]),je={class:"ldap-wizard__groups"},Se={class:"ldap-wizard__groups__line ldap-wizard__groups__filter-selection"},Ee={class:"ldap-wizard__groups__line ldap-wizard__groups__groups-filter"},He={key:0},Re={key:1},$e={class:"ldap-wizard__groups__line ldap-wizard__groups__groups-count-check"},Qe={key:1},qe=O({__name:"GroupsTab",props:{configId:{}},setup(u){const s=u,m=E(),{ldapConfigs:t}=$(m),o=I(()=>m.getConfigProxy(s.configId,{ldapGroupFilterObjectclass:U,ldapGroupFilterGroups:U})),c=Q().theming.name,g=A(void 0),r=A([]),l=A([]),y=A(!1),L=I({get(){return o.value.ldapGroupFilterObjectclass.split(";").filter(d=>d!=="")},set(d){o.value.ldapGroupFilterObjectclass=d.join(";")}}),C=I({get(){return o.value.ldapGroupFilterGroups.split(";").filter(d=>d!=="")},set(d){o.value.ldapGroupFilterGroups=d.join(";")}});async function D(){const d=await P("determineGroupObjectClasses",s.configId);r.value=d.options?.ldap_groupfilter_objectclass??[];const _=await P("determineGroupsForGroups",s.configId);l.value=_.options?.ldap_groupfilter_groups??[]}D();async function U(){const d=await P("getGroupFilter",s.configId);t.value[s.configId].ldapGroupFilter=d.changes?.ldap_group_filter??""}async function z(){try{y.value=!0;const d=await P("countGroups",s.configId);g.value=d.changes.ldap_group_count}finally{y.value=!1}}async function f(d){d?o.value.ldapGroupFilterMode="1":o.value.ldapGroupFilterMode=await Z()?"0":"1"}return(d,_)=>(v(),V("fieldset",je,[p("legend",null,n(e(a)("user_ldap","Groups meeting these criteria are available in {instanceName}:",{instanceName:e(c)})),1),p("div",Se,[i(e(R),{modelValue:L.value,"onUpdate:modelValue":_[0]||(_[0]=N=>L.value=N),class:"ldap-wizard__groups__group-filter-groups__select",options:r.value,disabled:o.value.ldapGroupFilterMode==="1",inputLabel:e(a)("user_ldap","Only these object classes:"),multiple:!0},null,8,["modelValue","options","disabled","inputLabel"]),i(e(R),{modelValue:C.value,"onUpdate:modelValue":_[1]||(_[1]=N=>C.value=N),class:"ldap-wizard__groups__group-filter-groups__select",options:l.value,disabled:o.value.ldapGroupFilterMode==="1",inputLabel:e(a)("user_ldap","Only from these groups:"),multiple:!0},null,8,["modelValue","options","disabled","inputLabel"])]),p("div",Ee,[i(e(k),{modelValue:o.value.ldapGroupFilterMode==="1","onUpdate:modelValue":f},{default:h(()=>[w(n(e(a)("user_ldap","Edit LDAP Query")),1)]),_:1},8,["modelValue"]),o.value.ldapGroupFilterMode==="1"?(v(),V("div",He,[i(e(B),{modelValue:o.value.ldapGroupFilter,"onUpdate:modelValue":_[2]||(_[2]=N=>o.value.ldapGroupFilter=N),placeholder:e(a)("user_ldap","Edit LDAP Query"),helperText:e(a)("user_ldap","The filter specifies which LDAP groups shall have access to the {instanceName} instance.",{instanceName:e(c)})},null,8,["modelValue","placeholder","helperText"])])):(v(),V("div",Re,[p("span",null,n(e(a)("user_ldap","LDAP Filter:")),1),p("code",null,n(o.value.ldapGroupFilter),1)]))]),p("div",$e,[i(e(x),{disabled:y.value,onClick:z},{default:h(()=>[w(n(e(a)("user_ldap","Verify settings and count the groups")),1)]),_:1},8,["disabled"]),y.value?(v(),T(e(Y),{key:0,size:20})):F("",!0),g.value!==void 0&&!y.value?(v(),V("span",Qe,n(g.value),1)):F("",!0)])]))}}),We=G(qe,[["__scopeId","data-v-d46b1472"]]),Ye={class:"ldap-wizard__login"},Ze={class:"ldap-wizard__login__line ldap-wizard__login__login-attributes"},Je={class:"ldap-wizard__login__line ldap-wizard__login__user-login-filter"},Ke={key:1},Xe={class:"ldap-wizard__login__line"},ea=O({__name:"LoginTab",props:{configId:{}},setup(u){const s=u,m=E(),{ldapConfigs:t}=$(m),o=I(()=>m.getConfigProxy(s.configId,{ldapLoginFilterAttributes:D,ldapLoginFilterUsername:D,ldapLoginFilterEmail:D})),c=Q().theming.name,g=A(""),r=A([]),l=I({get(){return o.value.ldapLoginFilterAttributes.split(";").filter(f=>f!=="")},set(f){o.value.ldapLoginFilterAttributes=f.join(";")}}),y=I(()=>o.value.ldapLoginFilterMode==="1"),L=I(()=>r.value.filter(f=>!l.value.includes(f)));X(C);async function C(){const f=await P("determineAttributes",s.configId);r.value=f.options?.ldap_loginfilter_attributes??[]}async function D(){if(o.value.ldapLoginFilterMode==="0"){const f=await P("getUserLoginFilter",s.configId);t.value[s.configId].ldapLoginFilter=f.changes?.ldap_login_filter??""}}async function U(){try{const f=await P("testLoginName",s.configId,{loginName:g.value}),d=f.changes.ldap_test_loginname,_=f.changes.ldap_test_effective_filter;d<1?H(a("user_ldap","User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command-line validation): {filter}",{filter:_})):d===1?te(a("user_ldap","User found and settings verified.")):d>1&&ve(a("user_ldap","Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in."))}catch(f){switch(f??a("user_ldap","An unspecified error occurred. Please check log and settings.")){case"Bad search filter":H(a("user_ldap","The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise."));break;case"connection error":H(a("user_ldap","A connection error to LDAP/AD occurred. Please check host, port and credentials."));break;case"missing placeholder":H(a("user_ldap",'The "%uid" placeholder is missing. It will be replaced with the login name when querying LDAP/AD.'));break}}}async function z(f){f?o.value.ldapLoginFilterMode="1":o.value.ldapLoginFilterMode=await Z()?"0":"1"}return(f,d)=>(v(),V("fieldset",Ye,[p("legend",null,n(e(a)("user_ldap","When logging in, {instanceName} will find the user based on the following attributes:",{instanceName:e(c)})),1),i(e(k),{modelValue:o.value.ldapLoginFilterUsername==="1",description:e(a)("user_ldap","Allows login against the LDAP/AD username, which is either 'uid' or 'sAMAccountName' and will be detected."),"onUpdate:modelValue":d[0]||(d[0]=_=>o.value.ldapLoginFilterUsername=_?"1":"0")},{default:h(()=>[w(n(e(a)("user_ldap","LDAP/AD Username:")),1)]),_:1},8,["modelValue","description"]),i(e(k),{modelValue:o.value.ldapLoginFilterEmail==="1",description:e(a)("user_ldap","Allows login against an email attribute. 'mail' and 'mailPrimaryAddress' allowed."),"onUpdate:modelValue":d[1]||(d[1]=_=>o.value.ldapLoginFilterEmail=_?"1":"0")},{default:h(()=>[w(n(e(a)("user_ldap","LDAP/AD Email Address:")),1)]),_:1},8,["modelValue","description"]),p("div",Ze,[i(e(R),{modelValue:l.value,"onUpdate:modelValue":d[2]||(d[2]=_=>l.value=_),keepOpen:"",disabled:y.value,options:L.value,inputLabel:e(a)("user_ldap","Other Attributes:"),multiple:!0},null,8,["modelValue","disabled","options","inputLabel"])]),p("div",Je,[i(e(k),{modelValue:y.value,"onUpdate:modelValue":z},{default:h(()=>[w(n(e(a)("user_ldap","Edit LDAP Query")),1)]),_:1},8,["modelValue"]),y.value?(v(),T(e(B),{key:0,modelValue:o.value.ldapLoginFilter,placeholder:e(a)("user_ldap","Edit LDAP Query"),helperText:e(a)("user_ldap","Defines the filter to apply, when login is attempted. `%%uid` replaces the username in the login action. Example: `uid=%%uid`"),onChange:d[3]||(d[3]=_=>o.value.ldapLoginFilter=_.target.value)},null,8,["modelValue","placeholder","helperText"])):(v(),V("div",Ke,[p("span",null,n(e(a)("user_ldap","LDAP Filter:")),1),p("code",null,n(o.value.ldapLoginFilter),1)]))]),p("div",Xe,[i(e(b),{modelValue:g.value,"onUpdate:modelValue":d[4]||(d[4]=_=>g.value=_),helperText:e(a)("user_ldap","Attempts to receive a DN for the given login name and the current login filter"),label:e(a)("user_ldap","Test Login name"),autocomplete:"off"},null,8,["modelValue","helperText","label"]),i(e(x),{disabled:g.value.length===0,onClick:U},{default:h(()=>[w(n(e(a)("user_ldap","Verify settings")),1)]),_:1},8,["disabled"])])]))}}),aa=G(ea,[["__scopeId","data-v-72e489d5"]]),la={name:"DeleteIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},ta=["aria-hidden","aria-label"],ra=["fill","width","height"],oa={d:"M19,4H15.5L14.5,3H9.5L8.5,4H5V6H19M6,19A2,2 0 0,0 8,21H16A2,2 0 0,0 18,19V7H6V19Z"},ia={key:0};function sa(u,s,m,t,o,c){return v(),V("span",re(u.$attrs,{"aria-hidden":m.title?null:"true","aria-label":m.title,class:"material-design-icon delete-icon",role:"img",onClick:s[0]||(s[0]=g=>u.$emit("click",g))}),[(v(),V("svg",{fill:m.fillColor,class:"material-design-icon__svg",width:m.size,height:m.size,viewBox:"0 0 24 24"},[p("path",oa,[m.title?(v(),V("title",ia,n(m.title),1)):F("",!0)])],8,ra))],16,ta)}const da=G(la,[["render",sa]]),ua={class:"ldap-wizard__server"},na={class:"ldap-wizard__server__line"},pa={class:"ldap-wizard__server__line"},ca={class:"ldap-wizard__server__host__port"},ma={class:"ldap-wizard__server__line"},_a={class:"ldap-wizard__server__line"},ga={class:"ldap-wizard__server__line"},fa=O({__name:"ServerTab",props:{configId:{}},setup(u){const s=u,m=E(),{ldapConfigs:t}=$(m),o=I(()=>m.getConfigProxy(s.configId)),c=A(!1),g=A(!1),r=A(!1),l=A(o.value.ldapAgentName),y=A(o.value.ldapAgentPassword),L=I(()=>o.value.ldapAgentName!==l.value||o.value.ldapAgentPassword!==y.value);ee(o,f=>{l.value=f.ldapAgentName,f.ldapAgentPassword==="***"?y.value="":y.value=f.ldapAgentPassword});function C(){o.value.ldapAgentName=l.value,o.value.ldapAgentPassword=y.value}async function D(){try{c.value=!0;const{changes:f}=await P("guessPortAndTLS",s.configId);t.value[s.configId].ldapPort=f.ldap_port??""}finally{c.value=!1}}async function U(){try{r.value=!0;const{changes:f}=await P("guessBaseDN",s.configId);o.value.ldapBase=f.ldap_base??""}finally{r.value=!1}}async function z(){try{g.value=!0;const{changes:f}=await P("countInBaseDN",s.configId),d=f.ldap_test_base;d<1?q(a("user_ldap","No object found in the given Base DN. Please revise.")):d>1e3?q(a("user_ldap","More than 1,000 directory entries available.")):q(ue("user_ldap","{ldapTestBase} entry available within the provided Base DN","{ldapTestBase} entries available within the provided Base DN",d,{ldapTestBase:d}))}finally{g.value=!1}}return(f,d)=>(v(),V("fieldset",ua,[p("div",na,[i(e(k),{modelValue:o.value.ldapConfigurationActive==="1",type:"switch","aria-label":e(a)("user_ldap","When unchecked, this configuration will be skipped."),"onUpdate:modelValue":d[0]||(d[0]=_=>o.value.ldapConfigurationActive=_?"1":"0")},{default:h(()=>[w(n(e(a)("user_ldap","Configuration active")),1)]),_:1},8,["modelValue","aria-label"]),i(e(x),{title:e(a)("user_ldap","Copy current configuration into new directory binding"),onClick:d[1]||(d[1]=_=>e(m).copyConfig(u.configId))},{icon:h(()=>[i(le,{size:20})]),default:h(()=>[w(" "+n(e(a)("user_ldap","Copy configuration")),1)]),_:1},8,["title"]),i(e(x),{variant:"error",onClick:d[2]||(d[2]=_=>e(m).removeConfig(u.configId))},{icon:h(()=>[i(da,{size:20})]),default:h(()=>[w(" "+n(e(a)("user_ldap","Delete configuration")),1)]),_:1})]),p("div",pa,[i(e(b),{modelValue:o.value.ldapHost,helperText:e(a)("user_ldap","You can omit the protocol, unless you require SSL. If so, start with ldaps://"),label:e(a)("user_ldap","Host"),placeholder:"ldaps://localhost",autocomplete:"off",onChange:d[3]||(d[3]=_=>o.value.ldapHost=_.target.value)},null,8,["modelValue","helperText","label"]),p("div",ca,[i(e(b),{modelValue:o.value.ldapPort,label:e(a)("user_ldap","Port"),placeholder:"389",type:"number",autocomplete:"off",onChange:d[4]||(d[4]=_=>o.value.ldapPort=_.target.value)},null,8,["modelValue","label"]),i(e(x),{disabled:c.value,onClick:D},{default:h(()=>[w(n(e(a)("user_ldap","Detect Port")),1)]),_:1},8,["disabled"])])]),p("div",ma,[i(e(b),{modelValue:l.value,"onUpdate:modelValue":d[5]||(d[5]=_=>l.value=_),helperText:e(a)("user_ldap","The DN of the client user with which the bind shall be done. For anonymous access, leave DN and Password empty."),label:e(a)("user_ldap","User DN"),placeholder:"uid=agent,dc=example,dc=com",autocomplete:"off"},null,8,["modelValue","helperText","label"])]),p("div",_a,[i(e(b),{modelValue:y.value,"onUpdate:modelValue":d[6]||(d[6]=_=>y.value=_),type:"password",helperText:e(a)("user_ldap","For anonymous access, leave DN and Password empty."),label:e(a)("user_ldap","Password"),autocomplete:"off"},null,8,["modelValue","helperText","label"]),i(e(x),{disabled:!L.value,onClick:C},{default:h(()=>[w(n(e(a)("user_ldap","Save credentials")),1)]),_:1},8,["disabled"])]),p("div",ga,[i(e(B),{label:e(a)("user_ldap","Base DN"),modelValue:o.value.ldapBase,placeholder:e(a)("user_ldap","One Base DN per line"),helperText:e(a)("user_ldap","You can specify Base DN for users and groups in the Advanced tab"),onChange:d[7]||(d[7]=_=>o.value.ldapBase=_.target.value)},null,8,["label","modelValue","placeholder","helperText"]),i(e(x),{disabled:r.value||L.value,onClick:U},{default:h(()=>[w(n(e(a)("user_ldap","Detect Base DN")),1)]),_:1},8,["disabled"]),i(e(x),{disabled:g.value||o.value.ldapBase==="",onClick:z},{default:h(()=>[w(n(e(a)("user_ldap","Test Base DN")),1)]),_:1},8,["disabled"])])]))}}),va=G(fa,[["__scopeId","data-v-1a7392db"]]),ha={class:"ldap-wizard__users"},ba={class:"ldap-wizard__users__line ldap-wizard__users__user-filter-object-class"},wa={class:"ldap-wizard__users__line ldap-wizard__users__user-filter-groups"},ya={class:"ldap-wizard__users__line ldap-wizard__users__user-filter"},Aa={key:0},Va={key:1},Da={class:"ldap-wizard__users__line ldap-wizard__users__user-count-check"},Ua={key:1},Ca=O({__name:"UsersTab",props:{configId:{}},setup(u){const s=u,m=E(),{ldapConfigs:t}=$(m),o=I(()=>m.getConfigProxy(s.configId,{ldapUserFilterObjectclass:U,ldapUserFilterGroups:U})),c=A(void 0),g=A(!1),r=Q().theming.name,l=A([]),y=A([]),L=I({get(){return o.value.ldapUserFilterObjectclass?.split(";").filter(d=>d!=="")??[]},set(d){o.value.ldapUserFilterObjectclass=d.join(";")}}),C=I({get(){return o.value.ldapUserFilterGroups.split(";").filter(d=>d!=="")},set(d){o.value.ldapUserFilterGroups=d.join(";")}});X(D);async function D(){const d=await P("determineUserObjectClasses",s.configId);l.value=d.options?.ldap_userfilter_objectclass??[],t.value[s.configId].ldapUserFilterObjectclass=d.changes?.ldap_userfilter_objectclass?.join(";")??"";const _=await P("determineGroupsForUsers",s.configId);y.value=_.options?.ldap_userfilter_groups??[],t.value[s.configId].ldapUserFilterGroups=_.changes?.ldap_userfilter_groups?.join(";")??""}async function U(){if(o.value.ldapUserFilterMode==="0"){const d=await P("getUserListFilter",s.configId);t.value[s.configId].ldapUserFilter=d.changes?.ldap_userlist_filter??"";const _=await P("getUserLoginFilter",s.configId);t.value[s.configId].ldapLoginFilter=_.changes?.ldap_login_filter??""}}async function z(){try{g.value=!0;const d=await P("countUsers",s.configId);c.value=d.changes.ldap_user_count}finally{g.value=!1}}async function f(d){d?o.value.ldapUserFilterMode="1":o.value.ldapUserFilterMode=await Z()?"0":"1"}return(d,_)=>(v(),V("fieldset",ha,[w(n(e(a)("user_ldap","Listing and searching for users is constrained by these criteria:"))+" ",1),p("div",ba,[i(e(R),{modelValue:L.value,"onUpdate:modelValue":_[0]||(_[0]=N=>L.value=N),disabled:o.value.ldapUserFilterMode==="1",class:"ldap-wizard__users__user-filter-object-class__select",options:l.value,inputLabel:e(a)("user_ldap","Only these object classes:"),multiple:!0},null,8,["modelValue","disabled","options","inputLabel"]),w(" "+n(e(a)("user_ldap","The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin.")),1)]),p("div",wa,[i(e(R),{modelValue:C.value,"onUpdate:modelValue":_[1]||(_[1]=N=>C.value=N),class:"ldap-wizard__users__user-filter-groups__select",disabled:o.value.ldapUserFilterMode==="1",options:y.value,inputLabel:e(a)("user_ldap","Only from these groups:"),multiple:!0},null,8,["modelValue","disabled","options","inputLabel"])]),p("div",ya,[i(e(k),{modelValue:o.value.ldapUserFilterMode==="1","onUpdate:modelValue":f},{default:h(()=>[w(n(e(a)("user_ldap","Edit LDAP Query")),1)]),_:1},8,["modelValue"]),o.value.ldapUserFilterMode==="1"?(v(),V("div",Aa,[i(e(B),{modelValue:o.value.ldapUserFilter,"onUpdate:modelValue":_[2]||(_[2]=N=>o.value.ldapUserFilter=N),placeholder:e(a)("user_ldap","Edit LDAP Query"),helperText:e(a)("user_ldap","The filter specifies which LDAP users shall have access to the {instanceName} instance.",{instanceName:e(r)})},null,8,["modelValue","placeholder","helperText"])])):(v(),V("div",Va,[p("label",null,n(e(a)("user_ldap","LDAP Filter:")),1),p("code",null,n(o.value.ldapUserFilter),1)]))]),p("div",Da,[i(e(x),{disabled:g.value,onClick:z},{default:h(()=>[w(n(e(a)("user_ldap","Verify settings and count users")),1)]),_:1},8,["disabled"]),g.value?(v(),T(e(Y),{key:0,size:16})):F("",!0),c.value!==void 0&&!g.value?(v(),V("span",Ua,n(e(a)("user_ldap","User count: {usersCount}",{usersCount:c.value},{escape:!1})),1)):F("",!0)])]))}}),La=G(Ca,[["__scopeId","data-v-8bb498fe"]]),Ia={class:"ldap-wizard__controls"},Pa={class:"ldap-wizard__controls__state_message"},xa=O({__name:"WizardControls",props:{configId:{}},setup(u){const s=u,m=E(),{updatingConfig:t}=$(m),o=A(!1),c=A(null),g=I(()=>c.value?.success);ee(t,()=>{c.value=null});async function r(){try{o.value=!0,c.value=await Ve(s.configId)}finally{o.value=!1}}return(l,y)=>(v(),V("div",Ia,[i(e(x),{variant:"primary",disabled:o.value,onClick:r},{default:h(()=>[w(n(e(a)("user_ldap","Test Configuration")),1)]),_:1},8,["disabled"]),i(e(x),{variant:"tertiary",href:"https://docs.nextcloud.com/server/stable/go.php?to=admin-ldap",target:"_blank",rel:"noreferrer noopener"},{icon:h(()=>[i(le,{size:20})]),default:h(()=>[p("span",null,n(e(a)("user_ldap","Help")),1)]),_:1}),c.value!==null&&!o.value?(v(),V(W,{key:0},[p("span",{class:oe(["ldap-wizard__controls__state_indicator",{"ldap-wizard__controls__state_indicator--valid":g.value}])},null,2),p("span",Pa,n(c.value.message),1)],64)):F("",!0),o.value?(v(),T(e(Y),{key:1,size:16})):F("",!0)]))}}),Ta=G(xa,[["__scopeId","data-v-4518d86f"]]),Fa={class:"ldap-wizard"},ka={class:"ldap-wizard__config-selection"},za={key:0,class:"ldap-wizard__tab-container"},Na={class:"ldap-wizard__tab-selection-container"},Ga={class:"ldap-wizard__tab-selection"},Ba={class:"ldap-wizard__clear-mapping"},Oa={class:"ldap-wizard__clear-mapping__buttons"},Ma=O({__name:"LDAPSettingsApp",setup(u){const s=ae("user_ldap","ldapModuleInstalled"),m={server:a("user_ldap","Server"),users:a("user_ldap","Users"),login:a("user_ldap","Login Attributes"),groups:a("user_ldap","Groups"),advanced:a("user_ldap","Advanced"),expert:a("user_ldap","Expert")},t=E(),{ldapConfigs:o,selectedConfigId:c,selectedConfig:g}=$(t),r=A("server"),l=A(!1),y=I(()=>g.value!==void 0&&g.value.ldapHost!==""&&g.value.ldapPort!==""&&g.value.ldapBase!=="");async function L(C){try{l.value=!0,await De(C)}finally{l.value=!1}}return(C,D)=>(v(),V("form",Fa,[p("h2",null,n(e(a)("user_ldap","LDAP/AD integration")),1),e(s)?F("",!0):(v(),T(e(ce),{key:0,type:"warning",text:e(a)("user_ldap","The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.")},null,8,["text"])),e(s)?(v(),V(W,{key:1},[p("div",ka,[e(c)!==void 0?(v(),T(e(R),{key:0,modelValue:e(c),"onUpdate:modelValue":D[0]||(D[0]=U=>ie(c)?c.value=U:null),options:Object.keys(e(o)),inputLabel:e(a)("user_ldap","Select LDAP Config")},{option:h(({label:U})=>[w(n(`${U}: ${e(o)[U]?.ldapHost??""}`),1)]),"selected-option":h(({label:U})=>[w(n(`${U}: ${e(o)[U]?.ldapHost??""}`),1)]),_:1},8,["modelValue","options","inputLabel"])):F("",!0),i(e(x),{label:e(a)("user_ldap","Create New Config"),class:"ldap-wizard__config-selection__create-button",onClick:e(t).create},{icon:h(()=>[i(pe,{size:20})]),default:h(()=>[w(" "+n(e(a)("user_ldap","Create configuration")),1)]),_:1},8,["label","onClick"])]),e(c)!==void 0?(v(),V("div",za,[p("div",Na,[p("div",Ga,[(v(),V(W,null,se(m,(U,z)=>i(e(k),{key:z,modelValue:r.value,"onUpdate:modelValue":D[1]||(D[1]=f=>r.value=f),buttonVariant:!0,value:z,type:"radio",disabled:z!=="server"&&!y.value,buttonVariantGrouped:"horizontal"},{default:h(()=>[w(n(U),1)]),_:2},1032,["modelValue","value","disabled"])),64))])]),r.value==="server"?(v(),T(va,{key:0,configId:e(c)},null,8,["configId"])):r.value==="users"?(v(),T(La,{key:1,configId:e(c)},null,8,["configId"])):r.value==="login"?(v(),T(aa,{key:2,configId:e(c)},null,8,["configId"])):r.value==="groups"?(v(),T(We,{key:3,configId:e(c)},null,8,["configId"])):r.value==="expert"?(v(),T(Me,{key:4,configId:e(c)},null,8,["configId"])):r.value==="advanced"?(v(),T(Fe,{key:5,configId:e(c)},null,8,["configId"])):F("",!0),i(Ta,{class:"ldap-wizard__controls",configId:e(c)},null,8,["configId"])])):F("",!0),p("div",Ba,[p("strong",null,n(e(a)("user_ldap","Username-LDAP User Mapping")),1),w(" "+n(e(a)("user_ldap","Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage."))+" ",1),p("div",Oa,[i(e(x),{variant:"error",disabled:l.value,onClick:D[2]||(D[2]=U=>L("user"))},{default:h(()=>[w(n(e(a)("user_ldap","Clear Username-LDAP User Mapping")),1)]),_:1},8,["disabled"]),i(e(x),{variant:"error",disabled:l.value,onClick:D[3]||(D[3]=U=>L("group"))},{default:h(()=>[w(n(e(a)("user_ldap","Clear Groupname-LDAP Group Mapping")),1)]),_:1},8,["disabled"])])])],64)):F("",!0)]))}}),ja=G(Ma,[["__scopeId","data-v-cb2f6989"]]),Sa=ge(),K=de(ja);K.use(Sa),K.mount("#content-ldap-settings"); //# sourceMappingURL=user_ldap-settings-admin.mjs.map diff --git a/lib/private/NavigationManager.php b/lib/private/NavigationManager.php index be052ce9a86d7..468e2617d67f0 100644 --- a/lib/private/NavigationManager.php +++ b/lib/private/NavigationManager.php @@ -37,6 +37,8 @@ class NavigationManager implements INavigationManager { protected bool $init = false; /** User defined app order (cached for the `add` function) */ private ?array $customAppOrder = null; + /** List of loaded app info */ + private array $loadedAppInfo = []; public function __construct( protected IAppManager $appManager, @@ -56,7 +58,7 @@ public function add(array|callable $entry): void { $this->closureEntries[] = $entry; return; } - $this->init(false); + $this->init(); $id = $entry['id']; @@ -99,7 +101,7 @@ private function updateDefaultEntries(): void { #[Override] public function getAll(string $type = 'link'): array { - $this->init(); + $this->resolveAppNavigationEntries(); $result = $this->entries; if ($type !== 'all') { @@ -180,7 +182,16 @@ public function getActiveEntry(): ?string { return $this->activeEntry; } - private function init(bool $resolveClosures = true): void { + /** + * Initialize the internal state. + * This loads the default app mapping and user mapping for app ordering. + */ + private function init(): void { + if ($this->init) { + return; + } + $this->init = true; + if ($this->customAppOrder === null) { if ($this->userSession->isLoggedIn()) { $user = $this->userSession->getUser(); @@ -189,21 +200,23 @@ private function init(bool $resolveClosures = true): void { $this->customAppOrder = []; } } + } - if ($resolveClosures) { - while ($c = array_pop($this->closureEntries)) { - $this->add($c()); - } + /** + * Resolve the app navigation entries from closures and info.xml files. + */ + private function resolveAppNavigationEntries(): void { + // Resolve app navigation closures + while ($c = array_pop($this->closureEntries)) { + $this->add($c()); } - if ($this->init) { - return; + // Resolve dynamically added navigation entries via event listeners + if ($this->loadedAppInfo === []) { + $this->eventDispatcher->dispatchTyped(new LoadAdditionalEntriesEvent()); } - $this->init = true; - - $l = $this->l10nFac->get('lib'); - $this->eventDispatcher->dispatchTyped(new LoadAdditionalEntriesEvent()); + // Resolve classic info.xml based navigation entries if ($this->userSession->isLoggedIn()) { $user = $this->userSession->getUser(); $apps = $this->appManager->getEnabledAppsForUser($user); @@ -212,6 +225,11 @@ private function init(bool $resolveClosures = true): void { } foreach ($apps as $app) { + // skip already loaded apps + if (in_array($app, $this->loadedAppInfo)) { + continue; + } + // load plugins and collections from info.xml $info = $this->appManager->getAppInfo($app); if (!isset($info['navigations']['navigation'])) { @@ -230,7 +248,6 @@ private function init(bool $resolveClosures = true): void { if ($role === 'admin' && !$this->isAdmin()) { continue; } - $l = $this->l10nFac->get($app); $id = $nav['id'] ?? $app . ($key === 0 ? '' : $key); $order = $nav['order'] ?? 100; $type = $nav['type']; @@ -249,7 +266,14 @@ private function init(bool $resolveClosures = true): void { if ($icon === null) { $icon = $this->urlGenerator->imagePath('core', 'places/default-app-icon.svg'); } + if ($type === 'link' && $route === '') { + // This means either the route is invalid in the info.xml or the app was not year loaded by the router + $this->logger->debug('Missing or invalid navigation route for app ' . $app, ['entry' => $nav]); + continue; + } + $l = $this->l10nFac->get($app); + $this->loadedAppInfo[] = $app; $this->add(array_merge([ // Navigation id 'id' => $id, @@ -287,13 +311,13 @@ public function setUnreadCounter(string $id, int $unreadCounter): void { #[Override] public function get(string $id): ?array { - $this->init(); + $this->resolveAppNavigationEntries(); return $this->entries[$id]; } #[Override] public function getDefaultEntryIdForUser(?IUser $user = null, bool $withFallbacks = true): string { - $this->init(); + $this->resolveAppNavigationEntries(); // Disable fallbacks here, as we need to override them with the user defaults if none are configured. $defaultEntryIds = $this->getDefaultEntryIds(false); @@ -335,7 +359,7 @@ public function getDefaultEntryIdForUser(?IUser $user = null, bool $withFallback #[Override] public function getDefaultEntryIds(bool $withFallbacks = true): array { - $this->init(); + $this->resolveAppNavigationEntries(); $storedIds = explode(',', $this->config->getSystemValueString('defaultapp', $withFallbacks ? 'dashboard,files' : '')); $ids = []; $entryIds = array_keys($this->entries); @@ -349,7 +373,7 @@ public function getDefaultEntryIds(bool $withFallbacks = true): array { #[Override] public function setDefaultEntryIds(array $ids): void { - $this->init(); + $this->resolveAppNavigationEntries(); $entryIds = array_keys($this->entries); foreach ($ids as $id) {