diff --git a/core/src/components/AppMenu.vue b/core/src/components/AppMenu.vue index 3271901622b02..03ae63f1b09cb 100644 --- a/core/src/components/AppMenu.vue +++ b/core/src/components/AppMenu.vue @@ -117,8 +117,9 @@ const PROFILE_ID = 'profile' // Entry of the app management page, the target of the "More apps" tile. const APP_MANAGEMENT_ID = 'appstore' -// Hover delays, same values as github.com's header navigation. -const HOVER_OPEN_DELAY = 90 +// Pause before hover opens the menu: the trigger sits in the corner, which +// cursors cross on the way elsewhere. +const HOVER_OPEN_DELAY = 300 const HOVER_CLOSE_DELAY = 180 // Ignore a trigger click this long after a hover-open, so it does not close again. const HOVER_CLICK_GRACE = 500 diff --git a/core/src/tests/components/AppMenu.spec.ts b/core/src/tests/components/AppMenu.spec.ts index a7e215639b33b..77b2e8174f0ce 100644 --- a/core/src/tests/components/AppMenu.spec.ts +++ b/core/src/tests/components/AppMenu.spec.ts @@ -326,9 +326,13 @@ describe('core: AppMenu', () => { const wrapper = mount(AppMenu, { attachTo: document.body }) await wrapper.get('.app-menu__trigger').trigger('mouseenter') - // The intent-pause means it must not open on the same tick. + // The intent-pause means it must not open on the same tick, and it + // has to outlast a cursor merely passing over the corner. expect(wrapper.vm.opened).toBe(false) - vi.advanceTimersByTime(90) + vi.advanceTimersByTime(200) + expect(wrapper.vm.opened).toBe(false) + + vi.advanceTimersByTime(100) expect(wrapper.vm.opened).toBe(true) }) @@ -345,7 +349,7 @@ describe('core: AppMenu', () => { it('stays open when the cursor moves from the trigger into the popover', async () => { const wrapper = mount(AppMenu, { attachTo: document.body }) await wrapper.get('.app-menu__trigger').trigger('mouseenter') - vi.advanceTimersByTime(90) + vi.advanceTimersByTime(300) expect(wrapper.vm.opened).toBe(true) // Leaving the trigger schedules a close; entering the popover within the @@ -360,7 +364,7 @@ describe('core: AppMenu', () => { it('closes shortly after the cursor leaves the popover', async () => { const wrapper = mount(AppMenu, { attachTo: document.body }) await wrapper.get('.app-menu__trigger').trigger('mouseenter') - vi.advanceTimersByTime(90) + vi.advanceTimersByTime(300) wrapper.vm.onPopoverPointerEnter() expect(wrapper.vm.opened).toBe(true) @@ -381,7 +385,7 @@ describe('core: AppMenu', () => { it('opens on hover without the focus trap, so focus is not stolen', async () => { const wrapper = mount(AppMenu, { attachTo: document.body }) await wrapper.get('.app-menu__trigger').trigger('mouseenter') - vi.advanceTimersByTime(90) + vi.advanceTimersByTime(300) // Hovering must not pull focus out of e.g. the search field. expect(wrapper.vm.hoverOpen).toBe(true) @@ -398,7 +402,7 @@ describe('core: AppMenu', () => { it('restores the focus trap when a click follows a hover-open', async () => { const wrapper = mount(AppMenu, { attachTo: document.body }) await wrapper.get('.app-menu__trigger').trigger('mouseenter') - vi.advanceTimersByTime(90) + vi.advanceTimersByTime(300) vi.advanceTimersByTime(500) // click grace over await wrapper.get('.app-menu__waffle').trigger('click') @@ -415,7 +419,7 @@ describe('core: AppMenu', () => { it('ignores a trigger click right after a hover-open (habitual click-to-open)', async () => { const wrapper = mount(AppMenu, { attachTo: document.body }) await wrapper.get('.app-menu__trigger').trigger('mouseenter') - vi.advanceTimersByTime(90) + vi.advanceTimersByTime(300) expect(wrapper.vm.opened).toBe(true) // A click within the grace window must not toggle the menu shut. @@ -426,7 +430,7 @@ describe('core: AppMenu', () => { it('allows closing by click once the grace window elapses', async () => { const wrapper = mount(AppMenu, { attachTo: document.body }) await wrapper.get('.app-menu__trigger').trigger('mouseenter') - vi.advanceTimersByTime(90) + vi.advanceTimersByTime(300) vi.advanceTimersByTime(500) // grace window elapses await wrapper.get('.app-menu__waffle').trigger('click') @@ -436,7 +440,7 @@ describe('core: AppMenu', () => { it('blocks the popover auto-hide during the grace window, allows it after', async () => { const wrapper = mount(AppMenu, { attachTo: document.body }) await wrapper.get('.app-menu__trigger').trigger('mouseenter') - vi.advanceTimersByTime(90) + vi.advanceTimersByTime(300) // autoHideCheck() feeds floating-ui: false = don't close on outside // click (e.g. a habitual click on the trigger) during the grace window. diff --git a/dist/core-main.js b/dist/core-main.js index 2007c49e057ab..05202d472533c 100644 --- a/dist/core-main.js +++ b/dist/core-main.js @@ -1,2 +1,2 @@ -(()=>{var e={14634(e,r,n){"use strict";var o={};n.r(o),n.d(o,{clearIconCache:()=>Ke,getIconUrl:()=>Ge});var i={};n.r(i),n.d(i,{deleteKey:()=>fr,getApps:()=>sr,getKeys:()=>cr,getValue:()=>ur,setValue:()=>lr});var a={};n.r(a),n.d(a,{formatLinksPlain:()=>br,formatLinksRich:()=>yr,plainToRich:()=>Ar,richToPlain:()=>mr});var s=n(21777),c=n(44368),u=n(63814),l=n(53334),f=n(95093),p=n.n(f),d=n(85471),h=n(9165),v=n(80474),g=n(46855),A=n(57505),m=n(24764),y=n(74095),b=n(48943),w=n(2769),C=n(6695),x=n(88289),_=n(82182),k=n(23739),E=n(13741),S=n(58582),O=n(41944);const T={name:"ContactMenuEntry",components:{NcActionLink:E.A,NcActionText:S.A,NcActionButton:A.A,NcActions:m.A,NcAvatar:O.A,NcIconSvgWrapper:C.A},props:{contact:{required:!0,type:Object}},computed:{actions(){return this.contact.topAction?[this.contact.topAction,...this.contact.actions]:this.contact.actions},jsActions(){return(0,k.N)(this.contact)},preloadedUserStatus(){if(this.contact.status)return{status:this.contact.status,message:this.contact.statusMessage,icon:this.contact.statusIcon}}}};var I=n(85072),R=n.n(I),M=n(97825),j=n.n(M),N=n(77659),P=n.n(N),B=n(55056),D=n.n(B),L=n(10540),U=n.n(L),F=n(41113),z=n.n(F),H=n(54799),W={};W.styleTagTransform=z(),W.setAttributes=D(),W.insert=P().bind(null,"head"),W.domAPI=j(),W.insertStyleElement=U(),R()(H.A,W),H.A&&H.A.locals&&H.A.locals;var q=n(14486);const V=(0,q.A)(T,function(){var t=this,e=t._self._c;return e("li",{staticClass:"contact"},[e("NcAvatar",{staticClass:"contact__avatar",attrs:{user:t.contact.isUser?t.contact.uid:void 0,"is-no-user":!t.contact.isUser,"disable-menu":!0,"display-name":t.contact.fullName,url:t.contact.isUser?void 0:t.contact.avatar,"preloaded-user-status":t.preloadedUserStatus}}),t._v(" "),e("a",{staticClass:"contact__body",attrs:{href:t.contact.profileUrl||t.contact.topAction?.hyperlink}},[e("div",{staticClass:"contact__body__full-name"},[t._v(t._s(t.contact.fullName))]),t._v(" "),t.contact.lastMessage?e("div",{staticClass:"contact__body__last-message"},[t._v(t._s(t.contact.lastMessage))]):t._e(),t._v(" "),t.contact.statusMessage?e("div",{staticClass:"contact__body__status-message"},[t._v(t._s(t.contact.statusMessage))]):e("div",{staticClass:"contact__body__email-address"},[t._v(t._s(t.contact.emailAddresses[0]))])]),t._v(" "),t.actions.length?e("NcActions",{attrs:{inline:t.contact.topAction?1:0}},[t._l(t.actions,function(r,n){return["#"!==r.hyperlink?e("NcActionLink",{key:`${n}-link`,staticClass:"other-actions",attrs:{href:r.hyperlink},scopedSlots:t._u([{key:"icon",fn:function(){return[e("img",{staticClass:"contact__action__icon",attrs:{"aria-hidden":"true",src:r.icon}})]},proxy:!0}],null,!0)},[t._v("\n\t\t\t\t"+t._s(r.title)+"\n\t\t\t")]):e("NcActionText",{key:`${n}-text`,staticClass:"other-actions",scopedSlots:t._u([{key:"icon",fn:function(){return[e("img",{staticClass:"contact__action__icon",attrs:{"aria-hidden":"true",src:r.icon}})]},proxy:!0}],null,!0)},[t._v("\n\t\t\t\t"+t._s(r.title)+"\n\t\t\t")])]}),t._v(" "),t._l(t.jsActions,function(r){return e("NcActionButton",{key:r.id,staticClass:"other-actions",attrs:{"close-after-click":!0},on:{click:function(e){return r.callback(t.contact)}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("NcIconSvgWrapper",{attrs:{svg:r.iconSvg(t.contact)}})]},proxy:!0}],null,!0)},[t._v("\n\t\t\t"+t._s(r.displayName(t.contact))+"\n\t\t")])})],2):t._e()],1)},[],!1,null,"b4cbc5dc",null).exports;var G=n(35947);const $=null===(K=(0,s.HW)())?(0,G.YK)().setApp("core").build():(0,G.YK)().setApp("core").setUid(K.uid).build();var K;(0,G.YK)().setApp("unified-search").detectUser().build();const Y=[],J=(0,d.pM)({__name:"ContactsMenu",setup(t){const e=(0,v.c0)("core:contacts").persist(!0).clearOnLogout(!0).build(),r=(0,s.HW)(),n=(0,u.Jv)("/apps/contacts"),o=(0,u.Jv)("/settings/apps/social/contacts"),i=(0,d.KR)(),a=(0,d.KR)(window.OC?.ContactsMenu?.actions||[]),f=(0,d.KR)(!1),p=(0,d.KR)([]),k=(0,d.KR)(),E=(0,d.KR)(!1),S=(0,d.KR)(""),O=(0,d.KR)([]),T=(0,d.KR)("$_all_$"),I=(0,d.EW)(()=>O.value.find(t=>t.teamId===T.value)?.displayName),R=e.getItem("core:contacts:team");async function M(){if(0===Y.length)try{const{data:t}=await c.Ay.get((0,u.Jv)("/contactsmenu/teams"));Y.push(...t)}catch(t){$.error("could not load user teams",{error:t})}O.value=[...Y]}async function j(t){k.value=""===t?(0,l.t)("core","Loading your contacts …"):(0,l.t)("core","Looking for {term} …",{term:t}),E.value=!1;try{const{data:e}=await c.Ay.post((0,u.Jv)("/contactsmenu/contacts"),{filter:t,teamId:"$_all_$"!==T.value?T.value:void 0});p.value=e.contacts,f.value=e.contactsAppEnabled,k.value=void 0}catch(e){$.error("could not load contacts",{error:e,searchTerm:t}),E.value=!0}}R&&(T.value=JSON.parse(R)),(0,d.wB)(T,()=>{e.setItem("core:contacts:team",JSON.stringify(T.value)),j(S.value)});const N=(0,g.A)(function(){j(S.value)},500);function P(){(0,d.dY)(()=>{i.value?.focus(),i.value?.select()})}return{__sfc:!0,userTeams:Y,storage:e,user:r,contactsAppURL:n,contactsAppMgmtURL:o,contactsMenuInput:i,actions:a,contactsAppEnabled:f,contacts:p,loadingText:k,hasError:E,searchTerm:S,teams:O,selectedTeam:T,selectedTeamName:I,team:R,onOpened:async function(){await Promise.all([j(""),M()])},getTeams:M,getContacts:j,onInputDebounced:N,onReset:function(){S.value="",p.value=[],P()},focusInput:P,mdiAccountGroupOutline:h.dgQ,mdiContacts:h.aB4,mdiMagnify:h.U4M,t:l.t,NcActionButton:A.A,NcActions:m.A,NcButton:y.A,NcEmptyContent:b.A,NcHeaderMenu:w.A,NcIconSvgWrapper:C.A,NcLoadingIcon:x.A,NcTextField:_.A,ContactMenuEntry:V}}}),Q=J;var X=n(81563),Z={};Z.styleTagTransform=z(),Z.setAttributes=D(),Z.insert=P().bind(null,"head"),Z.domAPI=j(),Z.insertStyleElement=U(),R()(X.A,Z),X.A&&X.A.locals&&X.A.locals;const tt=(0,q.A)(Q,function(){var t=this,e=t._self._c,r=t._self._setupProxy;return e(r.NcHeaderMenu,{staticClass:"contactsmenu",attrs:{id:"contactsmenu","aria-label":r.t("core","Search contacts"),"exclude-click-outside-selectors":".v-popper__popper"},on:{open:r.onOpened},scopedSlots:t._u([{key:"trigger",fn:function(){return[e(r.NcIconSvgWrapper,{staticClass:"contactsmenu__trigger-icon",attrs:{path:r.mdiContacts}})]},proxy:!0}])},[t._v(" "),e("div",{staticClass:"contactsmenu__menu"},[e("div",{staticClass:"contactsmenu__menu__search-container"},[e("div",{staticClass:"contactsmenu__menu__input-wrapper"},[e(r.NcActions,{attrs:{"force-menu":"","aria-label":r.t("core","Filter by team"),variant:"tertiary"},scopedSlots:t._u([{key:"icon",fn:function(){return[e(r.NcIconSvgWrapper,{attrs:{path:r.mdiAccountGroupOutline}})]},proxy:!0},{key:"default",fn:function(){return[e(r.NcActionButton,{attrs:{modelValue:r.selectedTeam,value:"$_all_$",type:"radio"},on:{"update:modelValue":function(t){r.selectedTeam=t},"update:model-value":function(t){r.selectedTeam=t}}},[t._v("\n\t\t\t\t\t\t\t"+t._s(r.t("core","All teams"))+"\n\t\t\t\t\t\t")]),t._v(" "),t._l(r.teams,function(n){return e(r.NcActionButton,{key:n.teamId,attrs:{modelValue:r.selectedTeam,value:n.teamId,type:"radio"},on:{"update:modelValue":function(t){r.selectedTeam=t},"update:model-value":function(t){r.selectedTeam=t}}},[t._v("\n\t\t\t\t\t\t\t"+t._s(n.displayName)+"\n\t\t\t\t\t\t")])})]},proxy:!0}])}),t._v(" "),e(r.NcTextField,{ref:"contactsMenuInput",staticClass:"contactsmenu__menu__search",attrs:{id:"contactsmenu__menu__search","trailing-button-icon":"close",label:r.selectedTeamName?r.t("core","Search contacts in team {team}",{team:r.selectedTeamName}):r.t("core","Search contacts …"),"trailing-button-label":r.t("core","Reset search"),"show-trailing-button":""!==r.searchTerm,type:"search"},on:{input:r.onInputDebounced,"trailing-button-click":r.onReset},model:{value:r.searchTerm,callback:function(t){r.searchTerm=t},expression:"searchTerm"}})],1),t._v(" "),t._l(r.actions,function(n){return e(r.NcButton,{key:n.id,staticClass:"contactsmenu__menu__action",attrs:{"aria-label":n.label,title:n.label,variant:"tertiary-no-background"},on:{click:n.onClick},scopedSlots:t._u([{key:"icon",fn:function(){return[e(r.NcIconSvgWrapper,{attrs:{svg:n.icon}})]},proxy:!0}],null,!0)})})],2),t._v(" "),r.hasError?e(r.NcEmptyContent,{attrs:{name:r.t("core","Could not load your contacts")},scopedSlots:t._u([{key:"icon",fn:function(){return[e(r.NcIconSvgWrapper,{attrs:{path:r.mdiMagnify}})]},proxy:!0}],null,!1,1853740774)}):r.loadingText?e(r.NcEmptyContent,{attrs:{name:r.loadingText},scopedSlots:t._u([{key:"icon",fn:function(){return[e(r.NcLoadingIcon)]},proxy:!0}])}):0===r.contacts.length?e(r.NcEmptyContent,{attrs:{name:r.t("core","No contacts found")},scopedSlots:t._u([{key:"icon",fn:function(){return[e(r.NcIconSvgWrapper,{attrs:{path:r.mdiMagnify}})]},proxy:!0}])}):e("div",{staticClass:"contactsmenu__menu__content"},[e("div",{attrs:{id:"contactsmenu-contacts"}},[e("ul",{attrs:{"aria-label":r.t("core","Contacts list")}},t._l(r.contacts,function(t){return e(r.ContactMenuEntry,{key:t.id,attrs:{contact:t}})}),1)]),t._v(" "),r.contactsAppEnabled?e("div",{staticClass:"contactsmenu__menu__content__footer"},[e(r.NcButton,{attrs:{variant:"tertiary",href:r.contactsAppURL}},[t._v("\n\t\t\t\t\t"+t._s(r.t("core","Show all contacts"))+"\n\t\t\t\t")])],1):r.user.isAdmin?e("div",{staticClass:"contactsmenu__menu__content__footer"},[e(r.NcButton,{attrs:{variant:"tertiary",href:r.contactsAppMgmtURL}},[t._v("\n\t\t\t\t\t"+t._s(r.t("core","Install the Contacts app"))+"\n\t\t\t\t")])],1):t._e()])],1)])},[],!1,null,"4c0f4bc8",null).exports;class et{constructor(){(function(t,e,r){(e=function(t){var e=function(t){if("object"!=typeof t||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r})(this,"_actions",void 0),this._actions=[]}get actions(){return this._actions}addAction(t){this._actions.push(t)}}var rt=n(61338),nt=n(81222),ot=n(54562);const it={name:"CogIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},at=(0,q.A)(it,function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon cog-icon",attrs:{"aria-hidden":t.title?null:"true","aria-label":t.title,role:"img"},on:{click:function(e){return t.$emit("click",e)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M12,15.5A3.5,3.5 0 0,1 8.5,12A3.5,3.5 0 0,1 12,8.5A3.5,3.5 0 0,1 15.5,12A3.5,3.5 0 0,1 12,15.5M19.43,12.97C19.47,12.65 19.5,12.33 19.5,12C19.5,11.67 19.47,11.34 19.43,11L21.54,9.37C21.73,9.22 21.78,8.95 21.66,8.73L19.66,5.27C19.54,5.05 19.27,4.96 19.05,5.05L16.56,6.05C16.04,5.66 15.5,5.32 14.87,5.07L14.5,2.42C14.46,2.18 14.25,2 14,2H10C9.75,2 9.54,2.18 9.5,2.42L9.13,5.07C8.5,5.32 7.96,5.66 7.44,6.05L4.95,5.05C4.73,4.96 4.46,5.05 4.34,5.27L2.34,8.73C2.21,8.95 2.27,9.22 2.46,9.37L4.57,11C4.53,11.34 4.5,11.67 4.5,12C4.5,12.33 4.53,12.65 4.57,12.97L2.46,14.63C2.27,14.78 2.21,15.05 2.34,15.27L4.34,18.73C4.46,18.95 4.73,19.03 4.95,18.95L7.44,17.94C7.96,18.34 8.5,18.68 9.13,18.93L9.5,21.58C9.54,21.82 9.75,22 10,22H14C14.25,22 14.46,21.82 14.5,21.58L14.87,18.93C15.5,18.67 16.04,18.34 16.56,17.94L19.05,18.95C19.27,19.03 19.54,18.95 19.66,18.73L21.66,15.27C21.78,15.05 21.73,14.78 21.54,14.63L19.43,12.97Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])},[],!1,null,null,null).exports,st={name:"DotsGridIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},ct=(0,q.A)(st,function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon dots-grid-icon",attrs:{"aria-hidden":t.title?null:"true","aria-label":t.title,role:"img"},on:{click:function(e){return t.$emit("click",e)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M12 16C13.1 16 14 16.9 14 18S13.1 20 12 20 10 19.1 10 18 10.9 16 12 16M12 10C13.1 10 14 10.9 14 12S13.1 14 12 14 10 13.1 10 12 10.9 10 12 10M12 4C13.1 4 14 4.9 14 6S13.1 8 12 8 10 7.1 10 6 10.9 4 12 4M6 16C7.1 16 8 16.9 8 18S7.1 20 6 20 4 19.1 4 18 4.9 16 6 16M6 10C7.1 10 8 10.9 8 12S7.1 14 6 14 4 13.1 4 12 4.9 10 6 10M6 4C7.1 4 8 4.9 8 6S7.1 8 6 8 4 7.1 4 6 4.9 4 6 4M18 16C19.1 16 20 16.9 20 18S19.1 20 18 20 16 19.1 16 18 16.9 16 18 16M18 10C19.1 10 20 10.9 20 12S19.1 14 18 14 16 13.1 16 12 16.9 10 18 10M18 4C19.1 4 20 4.9 20 6S19.1 8 18 8 16 7.1 16 6 16.9 4 18 4Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])},[],!1,null,null,null).exports;var ut=n(71680),lt=n(15553);const ft=(0,d.pM)({__name:"AppActionIcon",props:{icon:null,color:null},setup(t){const e=t,r=(0,d.EW)(()=>({"--app-action-icon-url":`url("${(e.icon??"").replace(/["\\]/g,"\\$&")}")`})),n=(0,d.EW)(()=>({"--app-action-icon-indicator-color":e.color}));return{__sfc:!0,props:e,iconStyle:r,indicatorStyle:n,IconPlus:lt.A}}});var pt=n(86675),dt={};dt.styleTagTransform=z(),dt.setAttributes=D(),dt.insert=P().bind(null,"head"),dt.domAPI=j(),dt.insertStyleElement=U(),R()(pt.A,dt),pt.A&&pt.A.locals&&pt.A.locals;const ht=(0,q.A)(ft,function(){var t=this,e=t._self._c,r=t._self._setupProxy;return e("span",{staticClass:"app-action-icon"},[t._t("default",function(){return[t.icon?e("span",{staticClass:"app-action-icon__img",style:r.iconStyle,attrs:{"aria-hidden":"true"}}):t._e()]}),t._v(" "),t.color?e("span",{staticClass:"app-action-icon__indicator",style:r.indicatorStyle,attrs:{"aria-hidden":"true"}},[e(r.IconPlus)],1):t._e()],2)},[],!1,null,"c060ff50",null).exports,vt=(0,d.pM)({__name:"AppIcon",props:{icon:null,outlined:{type:Boolean}},setup(t){const e=t,r=(0,d.EW)(()=>({"--app-icon-url":`url("${e.icon.replace(/["\\]/g,"\\$&")}")`}));return{__sfc:!0,props:e,iconStyle:r}}});var gt=n(42497),At={};At.styleTagTransform=z(),At.setAttributes=D(),At.insert=P().bind(null,"head"),At.domAPI=j(),At.insertStyleElement=U(),R()(gt.A,At),gt.A&>.A.locals&>.A.locals;const mt=(0,q.A)(vt,function(){var t=this,e=t._self._c,r=t._self._setupProxy;return e("span",{staticClass:"app-icon",class:{"app-icon--outlined":t.outlined}},[t.icon?e("span",{staticClass:"app-icon__img",style:r.iconStyle,attrs:{"aria-hidden":"true"}}):t._e(),t._v(" "),t._t("default")],2)},[],!1,null,"5cb82f82",null).exports,yt=(0,d.pM)({__name:"AppMenuItem",props:{app:null,compact:{type:Boolean},newTab:{type:Boolean},outlined:{type:Boolean},tabindex:{default:-1}},emits:["click"],setup(t){const e=t,r=(0,d.EW)(()=>{if(e.app.unread)return(0,l.n)("core","{count} notification","{count} notifications",e.app.unread,{count:e.app.unread})});return{__sfc:!0,props:e,unreadLabel:r,AppIcon:mt}}});var bt=n(13714),wt={};wt.styleTagTransform=z(),wt.setAttributes=D(),wt.insert=P().bind(null,"head"),wt.domAPI=j(),wt.insertStyleElement=U(),R()(bt.A,wt),bt.A&&bt.A.locals&&bt.A.locals;const Ct=(0,q.A)(yt,function(){var t=this,e=t._self._c,r=t._self._setupProxy;return e(t.app.href?"a":"button",{tag:"component",staticClass:"app-item",class:{"app-item--active":t.app.active,"app-item--compact":t.compact,"app-item--outlined":t.outlined},attrs:{type:t.app.href?void 0:"button",href:t.app.href||void 0,target:t.newTab?"_blank":void 0,rel:t.newTab?"noopener noreferrer":void 0,"aria-current":t.app.active?"page":void 0,tabindex:t.tabindex,title:t.app.name,role:"menuitem"},on:{click:function(e){return t.$emit("click",e)}}},[t._t("icon",function(){return[e(r.AppIcon,{attrs:{icon:t.app.icon,outlined:t.outlined}},[t.app.unread?e("span",{staticClass:"app-item__unread",attrs:{"aria-hidden":"true"}}):t._e()])]}),t._v(" "),e("span",{staticClass:"app-item__label"},[t._v("\n\t\t"+t._s(t.app.name)+"\n\t\t"),t.app.unread?e("span",{staticClass:"hidden-visually"},[t._v(", "+t._s(r.unreadLabel))]):t._e()])],2)},[],!1,null,"6f8600fd",null).exports,xt=(0,d.pM)({__name:"AppMenuAction",props:{action:null,compact:{type:Boolean},tabindex:{default:-1}},emits:["click"],setup(t,{emit:e}){const r=t,n=(0,d.EW)(()=>Boolean(r.action.href)&&"#"!==r.action.href),o=(0,d.EW)(()=>n.value?r.action:{...r.action,href:""});return{__sfc:!0,props:r,emit:e,hasLink:n,entry:o,onClick:function(t){n.value||(0,rt.Ic)("core:navigation:action",r.action),e("click",t)},AppActionIcon:ht,AppMenuItem:Ct}}}),_t=(0,q.A)(xt,function(){var t=this,e=t._self._c,r=t._self._setupProxy;return e(r.AppMenuItem,{attrs:{app:r.entry,compact:t.compact,tabindex:t.tabindex},on:{click:r.onClick},scopedSlots:t._u([{key:"icon",fn:function(){return[e(r.AppActionIcon,{attrs:{icon:t.action.icon,color:t.action.color}})]},proxy:!0}])})},[],!1,null,null,null).exports,kt=(0,d.pM)({__name:"AppMenuActions",props:{actions:null},emits:["click"],setup(t,{emit:e}){const r=t,n={id:"more-actions",active:!1,order:Number.MAX_SAFE_INTEGER,href:"",icon:"",type:"action",name:(0,l.t)("core","More"),unread:0},o=(0,d.KR)(0),i=(0,d.KR)(0),a=(0,d.KR)(!1),s=(0,d.KR)([]),c=(0,d.KR)([]),u=(0,d.KR)(null),f=(0,d.EW)(()=>r.actions.length>4),p=(0,d.EW)(()=>f.value?r.actions.slice(0,3):r.actions),h=(0,d.EW)(()=>f.value?r.actions.slice(3):[]),v=(0,d.EW)(()=>p.value.length+(f.value?1:0));function g(t){!a.value||t<=0||(0!==c.value.length?c.value[0].$el.focus():requestAnimationFrame(()=>g(t-1)))}function A(t){f.value&&t===p.value.length?u.value?.$el?.focus():s.value[t]?.$el?.focus()}function m(t,e,r,n){if(t.ctrlKey||t.metaKey||t.altKey||t.shiftKey)return null;if(0===r)return null;const o="horizontal"===n?"ArrowRight":"ArrowDown",i="horizontal"===n?"ArrowLeft":"ArrowUp";let a;switch(t.key){case o:a=Math.min(e+1,r-1);break;case i:a=Math.max(e-1,0);break;case"Home":a=0;break;case"End":a=r-1;break;case"Enter":case" ":return t.preventDefault(),t.stopPropagation(),y(e,n),null;default:return null}return t.preventDefault(),t.stopPropagation(),a}function y(t,e){"vertical"!==e?f.value&&t===p.value.length?u.value?.$el?.click():s.value[t]?.$el?.click():c.value[t]?.$el?.click()}return(0,d.wB)(a,t=>{t&&(i.value=0,g(5))}),(0,d.wB)(()=>r.actions,()=>{o.value>=v.value&&(o.value=0)}),{__sfc:!0,props:r,emit:e,ACTIONS_PER_ROW:4,overflowEntry:n,focusedIndex:o,overflowFocusedIndex:i,overflowOpened:a,rowItems:s,overflowItems:c,overflowTrigger:u,hasOverflow:f,rowActions:p,overflowActions:h,rowLength:v,returnFocusTarget:function(){return u.value?.$el??null},trySubmenuFocus:g,onRowKeydown:function(t){if(t.target?.closest(".app-menu-actions__submenu"))return;const e=m(t,o.value,v.value,"horizontal");null!==e&&(o.value=e,A(e))},onSubmenuKeydown:function(t){if("Escape"===t.key)return t.preventDefault(),t.stopPropagation(),void(a.value=!1);const e=m(t,i.value,h.value.length,"vertical");null!==e&&(i.value=e,c.value[e]?.$el?.focus())},focusRowItem:A,nextIndex:m,activate:y,onOverflowActionClick:function(){a.value=!1,e("click")},t:l.t,NcPopover:ot.A,IconDotsHorizontal:ut.A,AppActionIcon:ht,AppMenuAction:_t,AppMenuItem:Ct}}});var Et=n(38666),St={};St.styleTagTransform=z(),St.setAttributes=D(),St.insert=P().bind(null,"head"),St.domAPI=j(),St.insertStyleElement=U(),R()(Et.A,St),Et.A&&Et.A.locals&&Et.A.locals;var Ot=n(538),Tt={};Tt.styleTagTransform=z(),Tt.setAttributes=D(),Tt.insert=P().bind(null,"head"),Tt.domAPI=j(),Tt.insertStyleElement=U(),R()(Ot.A,Tt),Ot.A&&Ot.A.locals&&Ot.A.locals;const It=(0,q.A)(kt,function(){var t=this,e=t._self._c,r=t._self._setupProxy;return e("div",{staticClass:"app-menu-actions",attrs:{role:"group","aria-label":r.t("core","Actions")},on:{keydown:r.onRowKeydown}},[t._l(r.rowActions,function(t,n){return e(r.AppMenuAction,{key:t.id,ref:"rowItems",refInFor:!0,attrs:{action:t,tabindex:n===r.focusedIndex?0:-1},on:{click:function(t){return r.emit("click")}}})}),t._v(" "),r.hasOverflow?e(r.NcPopover,{attrs:{shown:r.overflowOpened,triggers:[],placement:"auto-end","popover-base-class":"app-menu-actions__popover-base","popup-role":"menu","set-return-focus":r.returnFocusTarget},on:{"update:shown":function(t){r.overflowOpened=t}},scopedSlots:t._u([{key:"trigger",fn:function(){return[e(r.AppMenuItem,{ref:"overflowTrigger",attrs:{app:r.overflowEntry,tabindex:r.focusedIndex===r.rowActions.length?0:-1,"aria-haspopup":"menu","aria-expanded":r.overflowOpened?"true":"false"},on:{click:function(t){r.overflowOpened=!r.overflowOpened}},scopedSlots:t._u([{key:"icon",fn:function(){return[e(r.AppActionIcon,[e(r.IconDotsHorizontal)],1)]},proxy:!0}],null,!1,3246821796)})]},proxy:!0}],null,!1,2379468034)},[t._v(" "),e("div",{staticClass:"app-menu-actions__submenu",attrs:{role:"menu","aria-label":r.overflowEntry.name},on:{keydown:r.onSubmenuKeydown}},t._l(r.overflowActions,function(t,n){return e(r.AppMenuAction,{key:t.id,ref:"overflowItems",refInFor:!0,attrs:{compact:"",action:t,tabindex:n===r.overflowFocusedIndex?0:-1},on:{click:r.onOverflowActionClick}})}),1)]):t._e()],2)},[],!1,null,"53961a2a",null).exports,Rt=new Set(["logout"]),Mt=new Set(["settings_personal","settings_administration","accessibility_settings"]),jt="profile",Nt=(0,d.pM)({name:"AppMenu",components:{AppMenuActions:It,AppMenuItem:Ct,IconCog:at,IconDotsGrid:ct,NcButton:y.A,NcPopover:ot.A},setup(){const t=(0,d.KR)(!1);return{t:l.t,n:l.n,opened:t}},data:()=>({appList:(0,nt.C)("core","apps",[]),navigationActions:(0,nt.C)("core","navigationActions",[]),settingsList:(0,nt.C)("core","settingsNavEntries",{}),appStoreLinkShown:(0,nt.C)("core","appStoreLinkShown",!1),isAdmin:(0,s.HW)()?.isAdmin??!1,focusedIndex:0,openedFrom:null,openTimer:null,closeTimer:null,hoverOpen:!1,suppressCloseClick:!1,suppressClickTimer:null,moreAppsEntry:{id:"more-apps",active:!1,order:Number.MAX_SAFE_INTEGER,href:(0,u.Jv)("/settings/apps"),icon:(0,u.d0)("core","actions/add.svg"),type:"link",name:(0,l.t)("core","More apps"),unread:0},appStoreEntry:{id:"app-store",active:!1,order:Number.MAX_SAFE_INTEGER,href:"https://apps.nextcloud.com/",icon:(0,u.d0)("core","actions/add.svg"),type:"link",name:(0,l.t)("core","App store"),unread:0},popoverSkidding:(0,l.V8)()?82:-82}),computed:{popoverAttrs(){return this.hoverOpen?{autoHide:this.autoHideCheck,noFocusTrap:!0}:{autoHide:this.autoHideCheck}},currentApp(){return this.appList.find(t=>t.active)??Object.values(this.settingsList).find(t=>t.active&&!Rt.has(t.id))},isSettingsSection(){return void 0!==this.currentApp&&Mt.has(this.currentApp.id)},displayName(){return this.currentApp?this.isSettingsSection?(0,l.t)("core","Settings"):this.currentApp.id===jt?(0,l.t)("core","Profile"):this.currentApp.name:""},currentAppIcon(){return this.currentApp?.id===jt?(0,u.d0)("core","actions/user.svg"):this.currentApp?.icon??""},currentAppIconStyle(){return{"--app-icon-url":`url("${this.currentAppIcon.replace(/["\\]/g,"\\$&")}")`}},currentAppLabel(){return this.currentApp?(0,l.t)("core","Open apps menu, currently in {app}",{app:this.displayName}):(0,l.t)("core","Open apps menu")},gridItems(){const t=[];return this.isAdmin?t.push({...this.moreAppsEntry,active:"appstore"===this.currentApp?.id}):this.appStoreLinkShown&&t.push(this.appStoreEntry),[...this.appList,...t]}},watch:{opened(t){t?(this.focusedIndex=this.activeGridIndex(),this.tryRecomputeGridMaxHeight(5)):(this.clearSuppressClickTimer(),this.suppressCloseClick=!1)}},mounted(){(0,rt.B1)("nextcloud:app-menu.refresh",this.setApps),this.focusedIndex=this.activeGridIndex(),this.$refs.popover.$on("after-hide",this.onPopoverAfterHide)},beforeUnmount(){this.clearOpenTimer(),this.clearCloseTimer(),this.clearSuppressClickTimer(),(0,rt.al)("nextcloud:app-menu.refresh",this.setApps),this.$refs.popover?.$off("after-hide",this.onPopoverAfterHide)},methods:{returnFocusTarget(){return"currentApp"===this.openedFrom?this.$el.querySelector(".app-menu__current-app"):this.$el.querySelector(".app-menu__waffle")},autoHideCheck(){return!this.suppressCloseClick},onPopoverAfterHide(){this.openedFrom=null,this.hoverOpen=!1},onTriggerClick(t){this.clearOpenTimer(),this.clearCloseTimer(),this.opened&&this.suppressCloseClick||(this.hoverOpen=!1,this.openedFrom=t,this.opened=!this.opened)},onTriggerPointerEnter(t="waffle"){this.canHoverOpen()&&(this.clearCloseTimer(),this.opened||(this.clearOpenTimer(),this.openTimer=setTimeout(()=>{this.openTimer=null,this.openedFrom=t,this.hoverOpen=!0,this.opened=!0,this.suppressCloseClick=!0,this.clearSuppressClickTimer(),this.suppressClickTimer=setTimeout(()=>{this.suppressClickTimer=null,this.suppressCloseClick=!1},500)},90)))},canHoverOpen(){const t=window.matchMedia?.("(hover: hover) and (pointer: fine)");return(t?.matches??!0)&&document.hasFocus()},onPointerLeave(){this.clearOpenTimer(),this.scheduleClose()},onPopoverPointerEnter(){this.clearCloseTimer()},scheduleClose(){this.clearCloseTimer(),this.closeTimer=setTimeout(()=>{this.closeTimer=null,this.opened=!1},180)},clearOpenTimer(){null!==this.openTimer&&(clearTimeout(this.openTimer),this.openTimer=null)},clearCloseTimer(){null!==this.closeTimer&&(clearTimeout(this.closeTimer),this.closeTimer=null)},clearSuppressClickTimer(){null!==this.suppressClickTimer&&(clearTimeout(this.suppressClickTimer),this.suppressClickTimer=null)},setNavigationCounter(t,e){const r=this.appList.find(({app:e})=>e===t);r?r.unread=e:$.warn(`Could not find app "${t}" for setting navigation count`)},setApps({apps:t}){this.appList=t,this.focusedIndex>=this.gridItems.length&&(this.focusedIndex=this.activeGridIndex())},tryRecomputeGridMaxHeight(t){!this.opened||t<=0||(this.$refs.grid?this.recomputeGridMaxHeight():requestAnimationFrame(()=>this.tryRecomputeGridMaxHeight(t-1)))},recomputeGridMaxHeight(){const t=this.$refs.grid;if(!t)return;const e=t.children;if(e.length<=24)return void(t.style.maxHeight="");const r=e[24],n=e[0];if(!r||!n)return;const o=r.getBoundingClientRect().top-n.getBoundingClientRect().top,i=parseFloat(getComputedStyle(t).getPropertyValue("--default-grid-baseline"))||4;t.style.maxHeight=`${o+6*i}px`},activeGridIndex(){const t=this.gridItems.findIndex(t=>t.active);return-1===t?0:t},async onGridKeydown(t){if(t.ctrlKey||t.metaKey||t.altKey||t.shiftKey)return;if(0===this.gridItems.length)return;const e=this.gridItems.length,r=this.focusedIndex;let n=r;switch(t.key){case"ArrowRight":r%4!=3&&r+1=0&&(n=r-4);break;case"Home":n=0;break;case"End":n=e-1;break;case"Enter":case" ":{const e=this.$refs.items;return e?.[this.focusedIndex]?.$el?.click(),this.opened=!1,t.preventDefault(),void t.stopPropagation()}default:return}t.preventDefault(),t.stopPropagation(),n!==r&&(this.focusedIndex=n),await this.$nextTick();const o=this.$refs.items;o?.[this.focusedIndex]?.$el?.focus()}}});var Pt=n(34854),Bt={};Bt.styleTagTransform=z(),Bt.setAttributes=D(),Bt.insert=P().bind(null,"head"),Bt.domAPI=j(),Bt.insertStyleElement=U(),R()(Pt.A,Bt),Pt.A&&Pt.A.locals&&Pt.A.locals;var Dt=n(16306),Lt={};Lt.styleTagTransform=z(),Lt.setAttributes=D(),Lt.insert=P().bind(null,"head"),Lt.domAPI=j(),Lt.insertStyleElement=U(),R()(Dt.A,Lt),Dt.A&&Dt.A.locals&&Dt.A.locals;const Ut=(0,q.A)(Nt,function(){var t=this,e=t._self._c;return t._self._setupProxy,e("nav",{staticClass:"app-menu",attrs:{"aria-label":t.t("core","Applications")}},[e("NcPopover",t._b({ref:"popover",attrs:{shown:t.opened,triggers:[],placement:"bottom-start",skidding:t.popoverSkidding,"set-return-focus":t.returnFocusTarget,"popover-base-class":"app-menu__popover-base","popup-role":"menu"},on:{"update:shown":function(e){t.opened=e}},scopedSlots:t._u([{key:"trigger",fn:function(){return[e("div",{staticClass:"app-menu__trigger",class:{"app-menu__trigger--open":t.opened},on:{mouseenter:t.onTriggerPointerEnter,mouseleave:t.onPointerLeave}},[e("NcButton",{staticClass:"app-menu__waffle",attrs:{variant:"tertiary-no-background","aria-label":t.t("core","Open apps menu"),"aria-haspopup":"menu","aria-expanded":t.opened?"true":"false"},on:{click:function(e){return t.onTriggerClick("waffle")}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconDotsGrid",{attrs:{size:20}})]},proxy:!0}])}),t._v(" "),t.currentApp?e("NcButton",{staticClass:"app-menu__current-app",attrs:{variant:"tertiary-no-background","aria-label":t.currentAppLabel,"aria-haspopup":"menu","aria-expanded":t.opened?"true":"false"},on:{click:function(e){return t.onTriggerClick("currentApp")}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.isSettingsSection||!t.currentAppIcon?e("IconCog",{staticClass:"app-menu__current-app-cog",attrs:{size:20}}):e("span",{staticClass:"app-menu__current-app-icon"},[e("span",{staticClass:"app-menu__current-app-glyph",style:t.currentAppIconStyle})])]},proxy:!0}],null,!1,3006168059)},[t._v(" "),e("span",{staticClass:"app-menu__current-app-name"},[t._v("\n\t\t\t\t\t\t"+t._s(t.displayName)+"\n\t\t\t\t\t")])]):t._e()],1)]},proxy:!0}])},"NcPopover",t.popoverAttrs,!1),[t._v(" "),e("div",{staticClass:"app-menu__popover",attrs:{role:"menu","aria-label":t.t("core","Apps")},on:{mouseenter:t.onPopoverPointerEnter,mouseleave:t.onPointerLeave}},[e("div",{ref:"grid",staticClass:"app-menu__grid",on:{keydown:t.onGridKeydown}},t._l(t.gridItems,function(r,n){return e("AppMenuItem",{key:r.id,ref:"items",refInFor:!0,attrs:{app:r,outlined:"more-apps"===r.id||"app-store"===r.id,"new-tab":"app-store"===r.id,tabindex:n===t.focusedIndex?0:-1}})}),1),t._v(" "),t.navigationActions.length>0?e("AppMenuActions",{attrs:{actions:t.navigationActions},on:{click:function(e){t.opened=!1}}}):t._e()],1)])],1)},[],!1,null,"2b368372",null).exports;var Ft=n(87485),zt=n(1522);const Ht=(0,nt.C)("core","versionHash",""),Wt=(0,d.pM)({name:"AccountMenuEntry",components:{NcListItem:zt.A,NcLoadingIcon:x.A},props:{id:{type:String,required:!0},name:{type:String,required:!0},href:{type:String,required:!0},active:{type:Boolean,default:!1},icon:{type:String,default:""}},data:()=>({loading:!1}),computed:{iconSource(){return`${this.icon}?v=${Ht}`}},methods:{onClick(t){this.$emit("click",t),t.defaultPrevented||(this.loading=!0)}}});var qt=n(95977),Vt={};Vt.styleTagTransform=z(),Vt.setAttributes=D(),Vt.insert=P().bind(null,"head"),Vt.domAPI=j(),Vt.insertStyleElement=U(),R()(qt.A,Vt),qt.A&&qt.A.locals&&qt.A.locals;const Gt=(0,q.A)(Wt,function(){var t=this,e=t._self._c;return t._self._setupProxy,e("NcListItem",{staticClass:"account-menu-entry",attrs:{id:t.href?void 0:t.id,"anchor-id":t.id,active:t.active,compact:"",href:t.href,name:t.name,target:"_self"},on:{click:t.onClick},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading?e("NcLoadingIcon",{staticClass:"account-menu-entry__loading",attrs:{size:20}}):t.$scopedSlots.icon?t._t("icon"):e("img",{staticClass:"account-menu-entry__icon",class:{"account-menu-entry__icon--active":t.active},attrs:{src:t.iconSource,alt:""}})]},proxy:!0}])})},[],!1,null,"bdb908d2",null).exports;var $t=n(34300),Kt=n(98469);const Yt={name:"QrcodeScanIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},Jt=(0,q.A)(Yt,function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon qrcode-scan-icon",attrs:{"aria-hidden":t.title?null:"true","aria-label":t.title,role:"img"},on:{click:function(e){return t.$emit("click",e)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M4,4H10V10H4V4M20,4V10H14V4H20M14,15H16V13H14V11H16V13H18V11H20V13H18V15H20V18H18V20H16V18H13V20H11V16H14V15M16,15V18H18V15H16M4,20V14H10V20H4M6,6V8H8V6H6M16,6V8H18V6H16M6,16V18H8V16H6M4,11H6V13H4V11M9,11H13V15H11V13H9V11M11,6H13V10H11V6M2,2V6H0V2A2,2 0 0,1 2,0H6V2H2M22,0A2,2 0 0,1 24,2V6H22V2H18V0H22M2,18V22H6V24H2A2,2 0 0,1 0,22V18H2M22,22V18H24V22A2,2 0 0,1 22,24H18V22H22Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])},[],!1,null,null,null).exports;var Qt=n(17816),Xt=n.n(Qt),Zt=n(55581),te=n(94219);const ee=(0,d.pM)({__name:"AccountQRLoginDialog",props:{data:null},emits:["close"],setup(t,{emit:e}){const r=t,n=window.OC.theme.productName,o=[{label:(0,l.t)("spreed","Done"),variant:"primary",callback:()=>{}}],i=3===(r.data?.deviceToken?.type??1),a=(0,d.EW)(()=>{const t=r.data?.loginName??"",e=r.data?.token??"";return`nc://${i?"onetime-login":"login"}/user:${t}&password:${e}&server:${(0,u.$_)()}`}),s=(r.data?.deviceToken?.lastActivity?1e3*r.data.deviceToken.lastActivity:Date.now())+12e4,c=setTimeout(()=>{p("expired")},s-Date.now()),f=(0,Zt.SX)(s);function p(t){clearTimeout(c),e("close",t)}return{__sfc:!0,props:r,emit:e,productName:n,buttons:o,isOneTimeToken:i,qrUrl:a,expirationTimestamp:s,expireTimeout:c,timeCountdown:f,onClosing:p,QR:Xt(),t:l.t,NcDialog:te.A}}}),re=ee;var ne=n(11159),oe={};oe.styleTagTransform=z(),oe.setAttributes=D(),oe.insert=P().bind(null,"head"),oe.domAPI=j(),oe.insertStyleElement=U(),R()(ne.A,oe),ne.A&&ne.A.locals&&ne.A.locals;const ie=(0,q.A)(re,function(){var t=this,e=t._self._c,r=t._self._setupProxy;return e(r.NcDialog,{attrs:{name:r.t("core","Scan QR code to log in"),buttons:r.buttons},on:{closing:r.onClosing}},[e("div",{staticClass:"qr-login__content"},[e("p",{staticClass:"qr-login__description"},[t._v("\n\t\t\t"+t._s(r.t("core","Use {productName} mobile client you want to connect to scan the code",{productName:r.productName}))+"\n\t\t")]),t._v(" "),e(r.QR,{attrs:{value:r.qrUrl}}),t._v(" "),r.isOneTimeToken?[t._v("\n\t\t\t"+t._s(r.t("core","Code will expire {timeCountdown} or after use",{timeCountdown:r.timeCountdown}))+"\n\t\t")]:t._e()],2)])},[],!1,null,null,null).exports;(0,$t.IF)(c.Ay);const{profileEnabled:ae}=(0,nt.C)("user_status","profileEnabled",{profileEnabled:!1}),se=(0,Ft.F)().core?.["can-create-app-token"]??!1,ce=(0,d.pM)({name:"AccountMenuProfileEntry",components:{IconQrcodeScan:Jt,NcButton:y.A,NcListItem:zt.A,NcLoadingIcon:x.A},props:{id:{type:String,required:!0},name:{type:String,required:!0},href:{type:String,required:!0},active:{type:Boolean,required:!0}},setup:()=>({canCreateAppToken:se,displayName:(0,s.HW)().displayName,profileEnabled:ae,t:l.t}),data:()=>({loading:!1}),mounted(){(0,rt.B1)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate),(0,rt.B1)("settings:display-name:updated",this.handleDisplayNameUpdate)},beforeDestroy(){(0,rt.al)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate),(0,rt.al)("settings:display-name:updated",this.handleDisplayNameUpdate)},methods:{handleClick(){this.profileEnabled&&(this.loading=!0)},async handleQrCodeClick(){const{data:t}=await c.Ay.post((0,u.Jv)("/settings/personal/authtokens"),{qrcodeLogin:!0},{confirmPassword:$t.mH.Strict});await(0,Kt.S)(ie,{data:t})},handleProfileEnabledUpdate(t){this.profileEnabled=t},handleDisplayNameUpdate(t){this.displayName=t}}}),ue=ce,le=(0,q.A)(ue,function(){var t=this,e=t._self._c;return t._self._setupProxy,e("NcListItem",{attrs:{id:t.profileEnabled?void 0:t.id,"anchor-id":t.id,active:t.active,compact:"",href:t.profileEnabled?t.href:void 0,name:t.displayName,target:"_self"},scopedSlots:t._u([t.profileEnabled?{key:"subname",fn:function(){return[t._v("\n\t\t"+t._s(t.name)+"\n\t")]},proxy:!0}:null,t.canCreateAppToken?{key:"extra-actions",fn:function(){return[e("NcButton",{attrs:{"aria-label":t.t("core","Show QR code for mobile app login"),variant:"secondary"},on:{click:t.handleQrCodeClick},scopedSlots:t._u([{key:"icon",fn:function(){return[e("IconQrcodeScan",{attrs:{size:20}})]},proxy:!0}],null,!1,3784924786)})]},proxy:!0}:null,t.loading?{key:"indicator",fn:function(){return[e("NcLoadingIcon")]},proxy:!0}:null],null,!0)})},[],!1,null,null,null).exports,fe=[{type:"online",label:(0,l.t)("user_status","Online")},{type:"away",label:(0,l.t)("user_status","Away")},{type:"busy",label:(0,l.t)("user_status","Busy")},{type:"dnd",label:(0,l.t)("user_status","Do not disturb"),subline:(0,l.t)("user_status","Mute all notifications")},{type:"invisible",label:(0,l.t)("user_status","Invisible"),subline:(0,l.t)("user_status","Appear offline")}],pe=(0,d.pM)({name:"AccountMenu",components:{AccountMenuEntry:Gt,AccountMenuProfileEntry:le,NcAvatar:O.A,NcHeaderMenu:w.A},setup(){const t=(0,nt.C)("core","settingsNavEntries",{}),{profile:e,...r}=t;return{currentDisplayName:(0,s.HW)()?.displayName??(0,s.HW)().uid,currentUserId:(0,s.HW)().uid,profileEntry:e,otherEntries:r,t:l.t}},data:()=>function(){const t={status:null,icon:null,message:null};if(!(0,Ft.F)()?.user_status?.enabled)return{showUserStatus:!1,userStatus:t};const e=(0,nt.C)("user_status","status",null);if(null===e||"object"!=typeof e||Array.isArray(e))return{showUserStatus:!1,userStatus:t};const{status:r=null,icon:n=null,message:o=null}=e;return{showUserStatus:!0,userStatus:{status:r,icon:n,message:o}}}(),computed:{translatedUserStatus(){return{...this.userStatus,status:this.translateStatus(this.userStatus.status)}},avatarDescription(){return[(0,l.t)("core","Avatar of {displayName}",{displayName:this.currentDisplayName}),...Object.values(this.translatedUserStatus).filter(Boolean)].join(" — ")}},mounted(){(0,rt.B1)("user_status:status.updated",this.handleUserStatusUpdated),(0,rt.Ic)("core:user-menu:mounted")},methods:{handleUserStatusUpdated(t){this.currentUserId===t.userId&&(this.userStatus={status:t.status,icon:t.icon,message:t.message})},translateStatus(t){const e=Object.fromEntries(fe.map(({type:t,label:e})=>[t,e]));return e[t]?e[t]:t}}});var de=n(69064),he={};he.styleTagTransform=z(),he.setAttributes=D(),he.insert=P().bind(null,"head"),he.domAPI=j(),he.insertStyleElement=U(),R()(de.A,he),de.A&&de.A.locals&&de.A.locals;const ve=(0,q.A)(pe,function(){var t=this,e=t._self._c;return t._self._setupProxy,e("NcHeaderMenu",{staticClass:"account-menu",attrs:{id:"user-menu","is-nav":"","aria-label":t.t("core","Settings menu"),description:t.avatarDescription},scopedSlots:t._u([{key:"trigger",fn:function(){return[e("NcAvatar",{staticClass:"account-menu__avatar",attrs:{"disable-menu":"","disable-tooltip":"","hide-user-status":!t.showUserStatus,user:t.currentUserId,"preloaded-user-status":t.userStatus}})]},proxy:!0}])},[t._v(" "),e("ul",{staticClass:"account-menu__list"},[e("AccountMenuProfileEntry",{attrs:{id:t.profileEntry.id,name:t.profileEntry.name,href:t.profileEntry.href,active:t.profileEntry.active}}),t._v(" "),t._l(t.otherEntries,function(t){return e("AccountMenuEntry",{key:t.id,attrs:{id:t.id,name:t.name,href:t.href,active:t.active,icon:t.icon}})})],2)])},[],!1,null,"3d724f6c",null).exports;function ge(){return document.head.dataset.requesttoken}const{auto_logout:Ae,session_keepalive:me,session_lifetime:ye}=(0,nt.C)("core","config",{});async function be(){try{await async function(){const t=(0,u.Jv)("/csrftoken"),e=await fetch(t);if(!e.ok)throw new Error("Could not fetch CSRF token from API",{cause:e});const{token:r}=await e.json();return function(t){if(!t||"string"!=typeof t)throw new Error("Invalid CSRF token given",{cause:{token:t}});document.head.dataset.requesttoken=t,(0,rt.Ic)("csrf-token-update",{token:t})}(r),r}()}catch(t){$.error("session heartbeat failed",{error:t})}}function we(){const t=window.setInterval(be,1e3*function(){const t=ye?Math.floor(ye/2):900;return Math.min(86400,Math.max(60,t))}());return $.info("session heartbeat polling started"),t}function Ce(t){const e=document.createElement("textarea"),r=document.createTextNode(t);e.appendChild(r),document.body.appendChild(e),e.focus({preventScroll:!0}),e.select();try{document.execCommand("copy")}catch(e){window.prompt((0,l.t)("core","Clipboard not available, please copy manually"),t),$.error("files Unable to copy to clipboard",{error:e})}document.body.removeChild(e)}function xe(t){const e=window.location.protocol+"//"+window.location.host+(0,u.aU)();return t.startsWith(e)||function(t){return!t.startsWith("https://")&&!t.startsWith("http://")}(t)&&t.startsWith((0,u.aU)())}async function _e(){if(null!==(0,s.HW)()&&!0!==_e.running){_e.running=!0;try{const{status:t}=await window.fetch((0,u.Jv)("/apps/files"));401===t&&($.warn("User session was terminated, forwarding to login page."),await async function(){try{window.localStorage.clear(),window.sessionStorage.clear();const t=await window.indexedDB.databases();for(const e of t)await window.indexedDB.deleteDatabase(e.name);$.debug("Browser storages cleared")}catch(t){$.error("Could not clear browser storages",{error:t})}}(),window.location=(0,u.Jv)("/login?redirect_url={url}",{url:window.location.pathname+window.location.search+window.location.hash}))}catch(t){$.warn("Could not check login-state",{error:t})}finally{delete _e.running}}}const ke={zh:"zh-cn",zh_Hans:"zh-cn",zh_Hans_CN:"zh-cn",zh_Hans_HK:"zh-cn",zh_Hans_MO:"zh-cn",zh_Hans_SG:"zh-cn",zh_Hant:"zh-hk",zh_Hant_HK:"zh-hk",zh_Hant_MO:"zh-mo",zh_Hant_TW:"zh-tw"};let Ee=(0,l.JK)();function Se(){var t;XMLHttpRequest.prototype.open=(t=XMLHttpRequest.prototype.open,function(e,r){t.apply(this,arguments),xe(r)&&(this.getResponseHeader("X-Requested-With")||this.setRequestHeader("X-Requested-With","XMLHttpRequest"),this.addEventListener("loadend",function(){401===this.status&&_e()}))}),window.fetch=function(t){return async(e,r)=>{if(!xe(e.url??e.toString()))return await t(e,r);r||(r={}),r.headers||(r.headers=new Headers),r.headers instanceof Headers&&!r.headers.has("X-Requested-With")?r.headers.append("X-Requested-With","XMLHttpRequest"):r.headers instanceof Object&&!r.headers["X-Requested-With"]&&(r.headers["X-Requested-With"]="XMLHttpRequest");const n=await t(e,r);return 401===n.status&&_e(),n}}(window.fetch),window.navigator?.clipboard?.writeText||($.info("Clipboard API not available, using fallback"),Object.defineProperty(window.navigator,"clipboard",{value:{writeText:Ce},writable:!1})),function(){if(function(){if(!Ae||!(0,s.HW)())return;let t=Date.now();window.addEventListener("mousemove",()=>{t=Date.now(),localStorage.setItem("lastActive",JSON.stringify(t))}),window.addEventListener("touchstart",()=>{t=Date.now(),localStorage.setItem("lastActive",JSON.stringify(t))}),window.addEventListener("storage",e=>{"lastActive"===e.key&&null!==e.newValue&&(t=JSON.parse(e.newValue))});let e=0;e=window.setInterval(()=>{const r=Date.now()-1e3*(ye??86400);if(t{$.info("Browser is online again, resuming heartbeat"),t=we();try{await be(),$.info("Session token successfully updated after resuming network"),(0,rt.Ic)("networkOnline",{success:!0})}catch(t){$.error("could not update session token after resuming network",{error:t}),(0,rt.Ic)("networkOnline",{success:!1})}}),window.addEventListener("offline",()=>{$.info("Browser is offline, stopping heartbeat"),(0,rt.Ic)("networkOffline",{}),clearInterval(t),$.info("Session heartbeat polling stopped")})}(),function(){d.Ay.mixin({methods:{t:l.Tl,n:l.zw}});const t=document.getElementById("header-start__appmenu");if(!t)return;const e=new(d.Ay.extend(Ut))({}).$mount(t);Object.assign(OC,{setNavigationCounter(t,r){e.setNavigationCounter(t,r)}})}(),function(){const t=document.getElementById("user-menu");t&&new d.Ay({name:"AccountMenuRoot",el:t,render:t=>t(ve)})}(),function(){const t=document.getElementById("contactsmenu");t&&(window.OC.ContactsMenu=new et,new d.Ay({name:"ContactsMenuRoot",el:t,render:t=>t(tt)}))}()}Object.hasOwn(ke,Ee)&&(Ee=ke[Ee]),p().locale(Ee);var Oe=n(71225);const Te=!!window._oc_isadmin,Ie=window.oc_appconfig||{},Re=void 0!==window._oc_appswebroots&&window._oc_appswebroots,Me=window._oc_config||{},je=document.getElementsByTagName("head")[0].getAttribute("data-user"),Ne=document.getElementsByTagName("head")[0].getAttribute("data-user-displayname"),Pe=void 0!==je&&je,Be=window._oc_debug;var De=n(21363),Le=n(85168),Ue=n(43627);const Fe={YES_NO_BUTTONS:70,OK_BUTTONS:71,FILEPICKER_TYPE_CHOOSE:1,FILEPICKER_TYPE_MOVE:2,FILEPICKER_TYPE_COPY:3,FILEPICKER_TYPE_COPY_MOVE:4,FILEPICKER_TYPE_CUSTOM:5,alert:function(t,e,r,n){this.message(t,e,"alert",Fe.OK_BUTTON,r,n)},info:function(t,e,r,n){this.message(t,e,"info",Fe.OK_BUTTON,r,n)},confirm:function(t,e,r,n){return this.message(t,e,"notice",Fe.YES_NO_BUTTONS,r,n)},confirmDestructive:function(t,e,r=Fe.OK_BUTTONS,n=()=>{}){return(new Le.ik).setName(e).setText(t).setButtons(r===Fe.OK_BUTTONS?[{label:(0,l.t)("core","Yes"),variant:"error",callback:()=>{n.clicked=!0,n(!0)}}]:Fe._getLegacyButtons(r,n)).build().show().then(()=>{n.clicked||n(!1)})},confirmHtml:function(t,e,r){return(new Le.ik).setName(e).setText("").setButtons([{label:(0,l.t)("core","No"),callback:()=>{}},{label:(0,l.t)("core","Yes"),variant:"primary",callback:()=>{r.clicked=!0,r(!0)}}]).build().setHTML(t).show().then(()=>{r.clicked||r(!1)})},prompt:function(t,e,r,o,i,a){return new Promise(o=>{(0,Kt.S)((0,d.$V)(()=>Promise.all([n.e(4208),n.e(3108)]).then(n.bind(n,43108))),{text:t,name:e,callback:r,inputName:i,isPassword:!!a},(...t)=>{r(...t),o()})})},filepicker(t,e,r=!1,n=void 0,o=void 0,i=Le.bh.Choose,a=void 0,s=void 0){const c=(t,e)=>{const n=t=>{const e=t?.root||"";let r=t?.path||"";return r.startsWith(e)&&(r=r.slice(e.length)||"/"),r};return r?r=>t(r.map(n),e):r=>t(n(r[0]),e)},u=(0,Le.a1)(t);i===this.FILEPICKER_TYPE_CUSTOM?(s.buttons||[]).forEach(t=>{u.addButton({callback:c(e,t.type),label:t.text,variant:t.defaultButton?"primary":"secondary"})}):u.setButtonFactory((t,r)=>{const n=[],[o]=t,a=o?.displayname||o?.basename||(0,Ue.basename)(r);return i===Le.bh.Choose&&n.push({callback:c(e,Le.bh.Choose),label:o&&!this.multiSelect?(0,l.t)("core","Choose {file}",{file:a}):(0,l.t)("core","Choose"),variant:"primary"}),i!==Le.bh.CopyMove&&i!==Le.bh.Copy||n.push({callback:c(e,Le.bh.Copy),label:a?(0,l.t)("core","Copy to {target}",{target:a}):(0,l.t)("core","Copy"),variant:"primary",icon:De}),i!==Le.bh.Move&&i!==Le.bh.CopyMove||n.push({callback:c(e,Le.bh.Move),label:a?(0,l.t)("core","Move to {target}",{target:a}):(0,l.t)("core","Move"),variant:i===Le.bh.Move?"primary":"secondary",icon:''}),n}),n&&u.setMimeTypeFilter("string"==typeof n?[n]:n||[]),"function"==typeof s?.filter&&u.setFilter(t=>s.filter((t=>({id:t.fileid||null,path:t.path,mimetype:t.mime||null,mtime:t.mtime?.getTime()||null,permissions:t.permissions,name:t.attributes?.displayName||t.basename,etag:t.attributes?.etag||null,hasPreview:t.attributes?.hasPreview||null,mountType:t.attributes?.mountType||null,quotaAvailableBytes:t.attributes?.quotaAvailableBytes||null,icon:null,sharePermissions:null}))(t))),u.allowDirectories(!0===s?.allowDirectoryChooser||n?.includes("httpd/unix-directory")||!1).setMultiSelect(r).startAt(a).build().pick()},message:function(t,e,r,n,o=()=>{},i,a){const s=(new Le.ik).setName(e).setText(a?"":t).setButtons(Fe._getLegacyButtons(n,o));switch(r){case"alert":s.setSeverity("warning");break;case"notice":s.setSeverity("info")}const c=s.build();return a&&c.setHTML(t),c.show().then(()=>{o._clicked||o(!1)})},_getLegacyButtons(t,e){const r=[];switch("object"==typeof t?t.type:t){case Fe.YES_NO_BUTTONS:r.push({label:t?.cancel??(0,l.t)("core","No"),callback:()=>{e._clicked=!0,e(!1)}}),r.push({label:t?.confirm??(0,l.t)("core","Yes"),variant:"primary",callback:()=>{e._clicked=!0,e(!0)}});break;case Fe.OK_BUTTONS:r.push({label:t?.confirm??(0,l.t)("core","OK"),variant:"primary",callback:()=>{e._clicked=!0,e(!0)}});break;default:$.error("Invalid call to OC.dialogs")}return r}},ze=Fe;function He(t,e){let r,n,o="";if(this.typelessListeners=[],this.closed=!1,e)for(r in e)o+=r+"="+encodeURIComponent(e[r])+"&";o+="requesttoken="+encodeURIComponent(ge()),n="&",-1===t.indexOf("?")&&(n="?"),this.source=new EventSource(t+n+o),this.source.onmessage=function(t){for(let e=0;et.cancel()),r.style.display="block")},finishedSaving(t,e){this.finishedAction(t,e)},finishedAction(t,e){"success"===e.status?this.finishedSuccess(t,e.data.message):this.finishedError(t,e.data.message)},finishedSuccess(t,e){const r=document.querySelector(t);r&&r instanceof HTMLElement&&(r.textContent=e,r.classList.remove("error"),r.classList.add("success"),r.getAnimations?.().forEach(t=>t.cancel()),window.setTimeout(function(){if(!(r&&r instanceof HTMLElement))return;const t=r.animate?.([{opacity:1},{opacity:0}],{duration:900,fill:"forwards"});t?t.addEventListener("finish",()=>{r.style.display="none"}):window.setTimeout(()=>{r.style.display="none"},900)},3e3),r.style.display="block")},finishedError(t,e){const r=document.querySelector(t);r&&r instanceof HTMLElement&&(r.textContent=e,r.classList.remove("success"),r.classList.add("error"),r.style.display="block")}},Je={requiresPasswordConfirmation:()=>(0,$t.oB)(),requirePasswordConfirmation(t,e,r){(0,$t.C5)().then(t,r)}},Qe={_plugins:{},register(t,e){let r=this._plugins[t];r||(r=this._plugins[t]=[]),r.push(e)},getPlugins(t){return this._plugins[t]||[]},attach(t,e,r){const n=this.getPlugins(t);for(let t=0;t="0"&&r<="9";a!==i&&(o++,e[o]="",i=a),e[o]+=r,n++}return e}const er={History:{_handlers:[],_pushState(t,e,r){let n;if(n="string"==typeof t?t:or.buildQueryString(t),window.history.pushState){if(e=e||location.pathname+"?"+n,navigator.userAgent.toLowerCase().indexOf("firefox")>-1&&parseInt(navigator.userAgent.split("/").pop())<51){const t=document.querySelectorAll('[fill^="url(#"], [stroke^="url(#"], [filter^="url(#invert"]');for(let e,r=0,n=t.length;r=0?t.substr(e+1):t.length?t.substr(1):""},_decodeQuery:t=>t.replace(/\+/g," "),parseUrlQuery(){const t=this._parseHashQuery();let e;return t&&(e=or.parseQueryString(this._decodeQuery(t))),{...e||{},...or.parseQueryString(this._decodeQuery(location.search))}},_onPopState(t){if(this._cancelPop)return void(this._cancelPop=!1);let e;if(this._handlers.length){e=t&&t.state,"string"==typeof e?e=or.parseQueryString(e):e||(e=this.parseUrlQuery()||{});for(let t=0;t(void 0===window.TESTING&&or.debug&&$.warn("OC.Util.formatDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment"),e=e||"LLL",p()(t).format(e)),relativeModifiedDate(e){void 0===window.TESTING&&or.debug&&$.warn("OC.Util.relativeModifiedDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment");const r=p()().diff(p()(e));return r>=0&&r<45e3?t("core","seconds ago"):p()(e).fromNow()},getScrollBarWidth(){if(this._scrollBarWidth)return this._scrollBarWidth;const t=document.createElement("p");t.style.width="100%",t.style.height="200px";const e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);const r=t.offsetWidth;e.style.overflow="scroll";let n=t.offsetWidth;return r===n&&(n=e.clientWidth),document.body.removeChild(e),this._scrollBarWidth=r-n,this._scrollBarWidth},stripTime:t=>new Date(t.getFullYear(),t.getMonth(),t.getDate()),naturalSortCompare(t,e){let r;const n=tr(t),o=tr(e);for(r=0;n[r]&&o[r];r++)if(n[r]!==o[r]){const t=Number(n[r]),e=Number(o[r]);return t==n[r]&&e==o[r]?t-e:n[r].localeCompare(o[r],or.getLanguage())}return n.length-o.length},waitFor(t,e){const r=function(){!0!==t()&&setTimeout(r,e)};r()},isCookieSetToValue(t,e){const r=document.cookie.split(";");for(let n=0;n!$_",appConfig:Ie,appswebroots:Re,config:Me,currentUser:Pe,dialogs:ze,EventSource:We,MimeType:o,getCurrentUser:function(){return{uid:Pe,displayName:Ne}},isUserAdmin:()=>Te,L10N:qe,registerXHRForErrorProcessing:()=>{},getCapabilities:function(){return OC.debug&&$.warn("OC.getCapabilities is deprecated and will be removed in Nextcloud 21. See @nextcloud/capabilities"),(0,Ft.F)()},basename:Oe.P8,encodePath:Oe.O0,dirname:Oe.pD,isSamePath:Oe.ys,joinPaths:Oe.fj,getCanonicalLocale:l.lO,getLocale:l.JK,getLanguage:l.Z0,buildQueryString:function(t){return t?new URLSearchParams(t).toString():""},parseQueryString:function(t){const e=new URLSearchParams(t);return Object.fromEntries(e.entries())},msg:Ye,PasswordConfirmation:Je,Plugins:Qe,theme:Xe,Util:er,debug:Be,filePath:u.fg,generateUrl:u.Jv,getRootPath:u.aU,imagePath:u.d0,requestToken:ge(),linkTo:u.uM,linkToOCS:(t,e)=>(0,u.KT)(t,{},{ocsVersion:e||1})+"/",linkToRemote:u.dC,linkToRemoteBase:function(t){return(0,u.aU)()+"/remote.php/"+t},webroot:nr};(0,rt.B1)("csrf-token-update",t=>{OC.requestToken=t.token,$.info("OC.requestToken changed",{token:t.token})}),n(84315),n(7452);const ir={disableKeyboardShortcuts:()=>(0,nt.C)("theming","shortcutsDisabled",!1),setPageHeading:function(t){const e=document.getElementById("page-heading-level-1");e&&(e.textContent=t)}};async function ar(t,e,r={}){"post"!==t&&"delete"!==t||!(0,$t.oB)($t.mH.Lax)||await(0,$t.C5)();try{const{data:n}=await c.Ay.request({method:t.toLowerCase(),url:(0,u.KT)("apps/provisioning_api/api/v1/config/apps")+e,data:r.data||{}});r.success?.(n.ocs.data)}catch(t){r.error?.(t)}}function sr(t){ar("get","",t)}function cr(t,e){ar("get","/"+t,e)}function ur(t,e,r,n){(n=n||{}).data={defaultValue:r},ar("get","/"+t+"/"+e,n)}function lr(t,e,r,n){(n=n||{}).data={value:r},ar("post","/"+t+"/"+e,n)}function fr(t,e,r){ar("delete","/"+t+"/"+e,r)}var pr=n(70580),dr=n.n(pr);const hr={},vr={registerType(t,e){hr[t]=e},trigger:t=>hr[t].action(),getTypes:()=>Object.keys(hr),getIcon:t=>hr[t].typeIconClass||"",getLabel:t=>dr()(hr[t].typeString||t),getLink:(t,e)=>void 0!==hr[t]?hr[t].link(e):""},gr=/(\s|^)(https?:\/\/)([-A-Z0-9+_.]+(?::[0-9]+)?(?:\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\s|$)/gi;function Ar(t){return yr(t)}function mr(t){return br(t)}function yr(t){return t.replace(gr,function(t,e,r,n,o){let i=n;return r?"http://"===r&&(i=r+n):r="https://",e+''+i+""+o})}function br(t){const e=document.createElement("div");return e.innerHTML=t,e.querySelectorAll("a").forEach(t=>{t.replaceWith(document.createTextNode(t.getAttribute("href")||""))}),e.innerHTML}const wr={},Cr={},xr={loadScript(t,e){const r=t+e;return Object.hasOwn(wr,r)?Promise.resolve():(wr[r]=!0,new Promise(function(r,n){const o=(0,u.fg)(t,"js",e),i=document.createElement("script");i.src=o,i.setAttribute("nonce",btoa(OC.requestToken)),i.onload=()=>r(),i.onerror=()=>n(new Error(`Failed to load script from ${o}`)),document.head.appendChild(i)}))},loadStylesheet(t,e){const r=t+e;return Object.hasOwn(Cr,r)?Promise.resolve():(Cr[r]=!0,new Promise(function(r,n){const o=(0,u.fg)(t,"css",e),i=document.createElement("link");i.href=o,i.type="text/css",i.rel="stylesheet",i.onload=()=>r(),i.onerror=()=>n(new Error(`Failed to load stylesheet from ${o}`)),document.head.appendChild(i)}))}},_r={success:(t,e)=>(0,Le.Te)(t,e),warning:(t,e)=>(0,Le.I9)(t,e),error:(t,e)=>(0,Le.Qg)(t,e),info:(t,e)=>(0,Le.cf)(t,e),message:(t,e)=>(0,Le.rG)(t,e)},kr={Accessibility:ir,AppConfig:i,Collaboration:vr,Comments:a,InitialState:{loadState:nt.C},Loader:xr,Toast:_r};window.OC=or,function(t,e,r){(Array.isArray(t)?t:[t]).forEach(t=>{void 0!==window[t]&&delete window[t],Object.defineProperty(window,t,{get:()=>(function(...t){void 0===window.TESTING&&or.debug&&console.warn.apply(console,t)}(r?`${t} is deprecated: ${r}`:`${t} is deprecated`),Se)})})}("initCore",0,"this is an internal function"),window.OCP=kr,window.OCA={},window.t=l.t,window.n=l.n,n.nc=(0,s.aV)(),window.addEventListener("DOMContentLoaded",function(){Se(),window.history.pushState?window.onpopstate=or.Util.History._onPopState.bind(or.Util.History):window.onhashchange=or.Util.History._onPopState.bind(or.Util.History)}),document.addEventListener("DOMContentLoaded",function(){const t=document.getElementById("password-input-form");t&&t.addEventListener("submit",async function(e){e.preventDefault();const r=document.getElementById("requesttoken");if(r){const t=(0,u.Jv)("/csrftoken"),e=await c.Ay.get(t);r.value=e.data.token}t.submit()})})},95977(t,e,r){"use strict";var n=r(71354),o=r.n(n),i=r(76314),a=r.n(i)()(o());a.push([t.id,".account-menu-entry__icon[data-v-bdb908d2]{height:16px;width:16px;margin:calc((var(--default-clickable-area) - 16px)/2);filter:var(--background-invert-if-dark)}.account-menu-entry__icon--active[data-v-bdb908d2]{filter:var(--primary-invert-if-dark)}.account-menu-entry__loading[data-v-bdb908d2]{height:20px;width:20px;margin:calc((var(--default-clickable-area) - 20px)/2)}.account-menu-entry[data-v-bdb908d2] .list-item-content__main{width:fit-content}","",{version:3,sources:["webpack://./core/src/components/AccountMenu/AccountMenuEntry.vue"],names:[],mappings:"AAEC,2CACC,WAAA,CACA,UAAA,CACA,qDAAA,CACA,uCAAA,CAEA,mDACC,oCAAA,CAIF,8CACC,WAAA,CACA,UAAA,CACA,qDAAA,CAGD,8DACC,iBAAA",sourcesContent:["\n.account-menu-entry {\n\t&__icon {\n\t\theight: 16px;\n\t\twidth: 16px;\n\t\tmargin: calc((var(--default-clickable-area) - 16px) / 2); // 16px icon size\n\t\tfilter: var(--background-invert-if-dark);\n\n\t\t&--active {\n\t\t\tfilter: var(--primary-invert-if-dark);\n\t\t}\n\t}\n\n\t&__loading {\n\t\theight: 20px;\n\t\twidth: 20px;\n\t\tmargin: calc((var(--default-clickable-area) - 20px) / 2); // 20px icon size\n\t}\n\n\t:deep(.list-item-content__main) {\n\t\twidth: fit-content;\n\t}\n}\n"],sourceRoot:""}]);const s=a;r.d(e,["A",0,s])},11159(t,e,r){"use strict";var n=r(71354),o=r.n(n),i=r(76314),a=r.n(i)()(o());a.push([t.id,".qr-login__content{display:flex;flex-direction:column;align-items:center;gap:var(--default-grid-baseline)}.qr-login__description{text-align:center}","",{version:3,sources:["webpack://./core/src/components/AccountMenu/AccountQRLoginDialog.vue"],names:[],mappings:"AACA,mBACC,YAAA,CACA,qBAAA,CACA,kBAAA,CACA,gCAAA,CAGD,uBACC,iBAAA",sourcesContent:["\n.qr-login__content {\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tgap: var(--default-grid-baseline);\n}\n\n.qr-login__description {\n\ttext-align: center;\n}\n"],sourceRoot:""}]);const s=a;r.d(e,["A",0,s])},86675(t,e,r){"use strict";var n=r(71354),o=r.n(n),i=r(76314),a=r.n(i)()(o());a.push([t.id,".app-action-icon[data-v-c060ff50]{--app-action-icon-glyph-size: calc(var(--app-action-icon-size, calc(var(--default-grid-baseline) * 12)) * 0.8);position:relative;box-sizing:border-box;display:flex;align-items:center;justify-content:center;width:var(--app-action-icon-size, calc(var(--default-grid-baseline) * 12));height:var(--app-action-icon-size, calc(var(--default-grid-baseline) * 12));transform:scale(var(--app-icon-scale, 1));transition:transform var(--animation-quick) ease-out}@media(prefers-reduced-motion: reduce){.app-action-icon[data-v-c060ff50]{transition:none}}.app-action-icon__img[data-v-c060ff50]{width:var(--app-action-icon-glyph-size);height:var(--app-action-icon-glyph-size);background:var(--app-action-icon-url) center/contain no-repeat}.app-action-icon[data-v-c060ff50] .material-design-icon{width:var(--app-action-icon-glyph-size);height:var(--app-action-icon-glyph-size)}.app-action-icon[data-v-c060ff50] .material-design-icon svg{width:100%;height:100%}.app-action-icon__indicator[data-v-c060ff50]{--app-action-icon-indicator-size: max(12px, calc(var(--app-action-icon-size, calc(var(--default-grid-baseline) * 12)) * 0.36));position:absolute;inset-block-end:0;inset-inline-end:0;display:flex;align-items:center;justify-content:center;width:var(--app-action-icon-indicator-size);height:var(--app-action-icon-indicator-size);border-radius:50%;background-color:var(--app-action-icon-indicator-color);border:2px solid var(--color-main-background);box-sizing:content-box;color:#fff}.app-action-icon__indicator[data-v-c060ff50] svg{width:100%;height:100%}","",{version:3,sources:["webpack://./core/src/components/AppActionIcon.vue"],names:[],mappings:"AACA,kCAEC,8GAAA,CACA,iBAAA,CACA,qBAAA,CACA,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,0EAAA,CACA,2EAAA,CACA,yCAAA,CACA,oDAAA,CAEA,uCAbD,kCAcE,eAAA,CAAA,CAGD,uCACC,uCAAA,CACA,wCAAA,CACA,8DAAA,CAID,wDACC,uCAAA,CACA,wCAAA,CAEA,4DACC,UAAA,CACA,WAAA,CAIF,6CACC,8HAAA,CACA,iBAAA,CACA,iBAAA,CACA,kBAAA,CACA,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,2CAAA,CACA,4CAAA,CACA,iBAAA,CACA,uDAAA,CAEA,6CAAA,CACA,sBAAA,CAGA,UAAA,CAEA,iDACC,UAAA,CACA,WAAA",sourcesContent:["\n.app-action-icon {\n\t// Consumers size the icon through --app-action-icon-size, see AppMenuItem.\n\t--app-action-icon-glyph-size: calc(var(--app-action-icon-size, calc(var(--default-grid-baseline) * 12)) * 0.8);\n\tposition: relative;\n\tbox-sizing: border-box;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: var(--app-action-icon-size, calc(var(--default-grid-baseline) * 12));\n\theight: var(--app-action-icon-size, calc(var(--default-grid-baseline) * 12));\n\ttransform: scale(var(--app-icon-scale, 1));\n\ttransition: transform var(--animation-quick) ease-out;\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\ttransition: none;\n\t}\n\n\t&__img {\n\t\twidth: var(--app-action-icon-glyph-size);\n\t\theight: var(--app-action-icon-glyph-size);\n\t\tbackground: var(--app-action-icon-url) center / contain no-repeat;\n\t}\n\n\t// Slotted icon components ship their own SVG dimensions.\n\t:deep(.material-design-icon) {\n\t\twidth: var(--app-action-icon-glyph-size);\n\t\theight: var(--app-action-icon-glyph-size);\n\n\t\tsvg {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t}\n\t}\n\n\t&__indicator {\n\t\t--app-action-icon-indicator-size: max(12px, calc(var(--app-action-icon-size, calc(var(--default-grid-baseline) * 12)) * 0.36));\n\t\tposition: absolute;\n\t\tinset-block-end: 0;\n\t\tinset-inline-end: 0;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: var(--app-action-icon-indicator-size);\n\t\theight: var(--app-action-icon-indicator-size);\n\t\tborder-radius: 50%;\n\t\tbackground-color: var(--app-action-icon-indicator-color);\n\t\t// Separates the indicator from the icon underneath.\n\t\tborder: 2px solid var(--color-main-background);\n\t\tbox-sizing: content-box;\n\t\t// The indicator color is app-provided and saturated, so the glyph on top\n\t\t// of it cannot follow the theme text color.\n\t\tcolor: #fff;\n\n\t\t:deep(svg) {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const s=a;r.d(e,["A",0,s])},42497(t,e,r){"use strict";var n=r(71354),o=r.n(n),i=r(76314),a=r.n(i)()(o());a.push([t.id,".app-icon[data-v-5cb82f82]{--app-icon-circle-size: calc(var(--default-grid-baseline) * 12);--app-icon-icon-size: calc(var(--app-icon-circle-size) * 7 / 12);--app-icon-bevel: inset 0 -1px 0 0 color-mix(in srgb, var(--color-primary-element-light), 10% var(--color-primary-element)), inset 0 -4px 6px -4px color-mix(in srgb, var(--color-primary-element-light), 16% var(--color-primary-element));box-sizing:border-box;position:relative;display:flex;align-items:center;justify-content:center;width:var(--app-icon-circle-size);height:var(--app-icon-circle-size);min-height:var(--app-icon-circle-size);border-radius:50%;transform:scale(var(--app-icon-scale, 1));transition:transform var(--animation-quick) ease-out;background-color:var(--color-primary-element-light);background-image:linear-gradient(to bottom, color-mix(in srgb, var(--color-primary-element-light), 15% var(--color-main-background)) 0%, var(--color-primary-element-light) 100%);box-shadow:var(--app-icon-bevel)}@media(prefers-color-scheme: dark){.app-icon[data-v-5cb82f82]{--app-icon-bevel: none}}@media(prefers-reduced-motion: reduce){.app-icon[data-v-5cb82f82]{transition:none}}.app-icon__img[data-v-5cb82f82]{width:var(--app-icon-icon-size);height:var(--app-icon-icon-size);background-color:var(--color-primary-element);background-image:linear-gradient(to bottom, color-mix(in srgb, var(--color-primary-element), 28% var(--color-primary-element-light)) 0%, var(--color-primary-element) 100%);mask:var(--app-icon-url) center/contain no-repeat}@media(forced-colors: active){.app-icon__img[data-v-5cb82f82]{background-color:CanvasText;background-image:none}}.app-icon--outlined[data-v-5cb82f82]{background:rgba(0,0,0,0);background-image:none;box-shadow:inset 0 0 0 2px var(--color-border)}.app-icon--outlined .app-icon__img[data-v-5cb82f82]{background-color:var(--color-text-maxcontrast);background-image:none}[data-themes*=dark] .app-icon{--app-icon-bevel: none}[data-themes*=light] .app-icon{--app-icon-bevel: inset 0 -1px 0 0 color-mix(in srgb, var(--color-primary-element-light), 10% var(--color-primary-element)), inset 0 -4px 6px -4px color-mix(in srgb, var(--color-primary-element-light), 16% var(--color-primary-element))}","",{version:3,sources:["webpack://./core/src/components/AppIcon.vue"],names:[],mappings:"AAKA,2BACC,+DAAA,CAEA,gEAAA,CACA,2OAAA,CACA,qBAAA,CACA,iBAAA,CACA,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,iCAAA,CACA,kCAAA,CACA,sCAAA,CACA,iBAAA,CACA,yCAAA,CACA,oDAAA,CACA,mDAAA,CACA,iLAAA,CAKA,gCAAA,CAEA,mCAxBD,2BAyBE,sBAAA,CAAA,CAGD,uCA5BD,2BA6BE,eAAA,CAAA,CAGD,gCACC,+BAAA,CACA,gCAAA,CAGA,6CAAA,CACA,2KAAA,CAKA,iDAAA,CAID,8BACC,gCACC,2BAAA,CACA,qBAAA,CAAA,CAMF,qCACC,wBAAA,CACA,qBAAA,CACA,8CAAA,CAGD,oDACC,8CAAA,CACA,qBAAA,CAKF,8BACC,sBAAA,CAGD,+BACC,2OAAA",sourcesContent:['\n$bevel:\n\tinset 0 -1px 0 0 color-mix(in srgb, var(--color-primary-element-light), 10% var(--color-primary-element)),\n\tinset 0 -4px 6px -4px color-mix(in srgb, var(--color-primary-element-light), 16% var(--color-primary-element));\n\n.app-icon {\n\t--app-icon-circle-size: calc(var(--default-grid-baseline) * 12);\n\t// 28px on a 48px circle, so it follows when consumers resize the circle.\n\t--app-icon-icon-size: calc(var(--app-icon-circle-size) * 7 / 12);\n\t--app-icon-bevel: #{$bevel};\n\tbox-sizing: border-box;\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: var(--app-icon-circle-size);\n\theight: var(--app-icon-circle-size);\n\tmin-height: var(--app-icon-circle-size);\n\tborder-radius: 50%;\n\ttransform: scale(var(--app-icon-scale, 1));\n\ttransition: transform var(--animation-quick) ease-out;\n\tbackground-color: var(--color-primary-element-light);\n\tbackground-image: linear-gradient(\n\t\tto bottom,\n\t\tcolor-mix(in srgb, var(--color-primary-element-light), 15% var(--color-main-background)) 0%,\n\t\tvar(--color-primary-element-light) 100%\n\t);\n\tbox-shadow: var(--app-icon-bevel);\n\n\t@media (prefers-color-scheme: dark) {\n\t\t--app-icon-bevel: none;\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\ttransition: none;\n\t}\n\n\t&__img {\n\t\twidth: var(--app-icon-icon-size);\n\t\theight: var(--app-icon-icon-size);\n\t\t// Masked rather than shown: app icons ship a hardcoded fill, so\n\t\t// currentColor never applies and a filter could only flip black and white.\n\t\tbackground-color: var(--color-primary-element);\n\t\tbackground-image: linear-gradient(\n\t\t\tto bottom,\n\t\t\tcolor-mix(in srgb, var(--color-primary-element), 28% var(--color-primary-element-light)) 0%,\n\t\t\tvar(--color-primary-element) 100%\n\t\t);\n\t\tmask: var(--app-icon-url) center / contain no-repeat;\n\t}\n\n\t// Masked backgrounds are not force-adjusted the way is.\n\t@media (forced-colors: active) {\n\t\t&__img {\n\t\t\tbackground-color: CanvasText;\n\t\t\tbackground-image: none;\n\t\t}\n\t}\n\n\t// Utility entries ("More apps", "App store") stay subdued: a plain circle\n\t// with the icon in the same muted color as the label.\n\t&--outlined {\n\t\tbackground: transparent;\n\t\tbackground-image: none;\n\t\tbox-shadow: inset 0 0 0 2px var(--color-border);\n\t}\n\n\t&--outlined &__img {\n\t\tbackground-color: var(--color-text-maxcontrast);\n\t\tbackground-image: none;\n\t}\n}\n\n// An explicit theme choice must beat the media query above, which only sees the OS.\n:global([data-themes*=dark] .app-icon) {\n\t--app-icon-bevel: none;\n}\n\n:global([data-themes*=light] .app-icon) {\n\t--app-icon-bevel: #{$bevel};\n}\n'],sourceRoot:""}]);const s=a;r.d(e,["A",0,s])},34854(t,e,r){"use strict";var n=r(71354),o=r.n(n),i=r(76314),a=r.n(i)()(o());a.push([t.id,'.app-menu[data-v-2b368372]{display:flex;align-items:center}.app-menu__trigger[data-v-2b368372]{position:relative;display:flex;align-items:center;height:var(--header-height);isolation:isolate}.app-menu__trigger[data-v-2b368372]::before{content:"";position:absolute;inset-block:calc((var(--header-height) - var(--default-clickable-area))/2);inset-inline:0;border-radius:var(--border-radius-element);z-index:-1;pointer-events:none}.app-menu__trigger[data-v-2b368372]:hover::before,.app-menu__trigger--open[data-v-2b368372]::before{background-color:rgba(0,0,0,.1)}.app-menu__trigger[data-v-2b368372]:active::before{background-color:rgba(0,0,0,.15)}.app-menu__waffle[data-v-2b368372],.app-menu__current-app[data-v-2b368372]{height:var(--header-height) !important;position:relative;--color-main-text: var(--color-background-plain-text);color:var(--color-background-plain-text)}.app-menu__waffle.button-vue[data-v-2b368372]:hover:not(:disabled),.app-menu__waffle.button-vue[data-v-2b368372]:active:not(:disabled),.app-menu__current-app.button-vue[data-v-2b368372]:hover:not(:disabled),.app-menu__current-app.button-vue[data-v-2b368372]:active:not(:disabled){background-color:rgba(0,0,0,0) !important}.app-menu__waffle.button-vue[data-v-2b368372]:focus-visible,.app-menu__current-app.button-vue[data-v-2b368372]:focus-visible{outline:none !important;box-shadow:none !important}.app-menu__waffle.button-vue[data-v-2b368372]:focus-visible::before,.app-menu__current-app.button-vue[data-v-2b368372]:focus-visible::before{content:"";position:absolute;inset-block:calc((var(--header-height) - var(--default-clickable-area))/2);inset-inline:0;border-radius:var(--border-radius-element);box-shadow:inset 0 0 0 2px var(--color-background-plain-text);pointer-events:none}.app-menu__current-app[data-v-2b368372] .button-vue__text{min-width:0}@media only screen and (max-width: 1024px){.app-menu__current-app[data-v-2b368372]{display:none !important}}.app-menu__current-app-icon[data-v-2b368372]{display:flex;width:calc(var(--default-grid-baseline)*5);height:calc(var(--default-grid-baseline)*5);mask:var(--header-menu-icon-mask)}.app-menu__current-app-glyph[data-v-2b368372]{width:100%;height:100%;background-color:var(--color-background-plain-text);mask:var(--app-icon-url) center/contain no-repeat}@media(forced-colors: active){.app-menu__current-app-glyph[data-v-2b368372]{background-color:CanvasText}}.app-menu__current-app-cog[data-v-2b368372]{mask:var(--header-menu-icon-mask)}.app-menu__current-app-name[data-v-2b368372]{display:inline-block;vertical-align:middle;font-size:var(--default-font-size);font-weight:500;white-space:nowrap;letter-spacing:-0.5px;overflow:hidden;text-overflow:ellipsis;max-width:clamp(80px,22vw,320px)}.app-menu__popover[data-v-2b368372]{--app-item-col-width: 69px;--app-item-row-height: calc(15 * var(--default-grid-baseline) + 1.5 * var(--default-font-size));display:flex;flex-direction:column;max-height:calc(100vh - var(--header-height) - var(--default-grid-baseline));max-width:calc(100vw - var(--default-grid-baseline)*4);background-color:var(--color-main-background)}.app-menu__grid[data-v-2b368372]{box-sizing:border-box;padding:calc(var(--default-grid-baseline)*2);display:grid;grid-template-columns:repeat(4, var(--app-item-col-width));grid-auto-rows:minmax(var(--app-item-row-height), max-content);min-height:0;overflow-y:auto;overflow-x:hidden}.app-menu__grid[data-v-2b368372]>:nth-child(-n+4){padding-block-start:calc(var(--default-grid-baseline)*2) !important}.app-menu__grid[data-v-2b368372]{scrollbar-width:thin;scrollbar-color:var(--color-scrollbar) rgba(0,0,0,0)}',"",{version:3,sources:["webpack://./core/src/components/AppMenu.vue"],names:[],mappings:"AACA,2BACC,YAAA,CACA,kBAAA,CAIA,oCACC,iBAAA,CACA,YAAA,CACA,kBAAA,CACA,2BAAA,CAEA,iBAAA,CAKA,4CACC,UAAA,CACA,iBAAA,CACA,0EAAA,CACA,cAAA,CACA,0CAAA,CAEA,UAAA,CACA,mBAAA,CAKD,oGAEC,+BAAA,CAGD,mDACC,gCAAA,CAIF,2EAIC,sCAAA,CAEA,iBAAA,CAKA,qDAAA,CACA,wCAAA,CAIA,wRAEC,yCAAA,CAMD,6HACC,uBAAA,CACA,0BAAA,CAGD,6IACC,UAAA,CACA,iBAAA,CACA,0EAAA,CACA,cAAA,CACA,0CAAA,CACA,6DAAA,CACA,mBAAA,CAOD,0DACC,WAAA,CAGD,2CAPD,wCAQE,uBAAA,CAAA,CAIF,6CACC,YAAA,CACA,0CAAA,CACA,2CAAA,CAEA,iCAAA,CAGD,8CACC,UAAA,CACA,WAAA,CAGA,mDAAA,CACA,iDAAA,CAID,8BACC,8CACC,2BAAA,CAAA,CAIF,4CACC,iCAAA,CAGD,6CAEC,oBAAA,CACA,qBAAA,CACA,kCAAA,CACA,eAAA,CACA,kBAAA,CACA,qBAAA,CACA,eAAA,CACA,sBAAA,CAGA,gCAAA,CAGD,oCAGC,0BAAA,CACA,+FAAA,CAGA,YAAA,CACA,qBAAA,CACA,4EAAA,CACA,sDAAA,CACA,6CAAA,CAGD,iCAGC,qBAAA,CACA,4CAAA,CACA,YAAA,CACA,0DAAA,CACA,8DAAA,CAGA,YAAA,CAEA,eAAA,CACA,iBAAA,CAKA,kDACC,mEAAA,CAnBF,iCAwBC,oBAAA,CACA,oDAAA",sourcesContent:["\n.app-menu {\n\tdisplay: flex;\n\talign-items: center;\n\n\t// Wrapper for both triggers: full header height for the click area, with one\n\t// shared highlight spanning the waffle and the current app.\n\t&__trigger {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\theight: var(--header-height);\n\t\t// Own stacking context so the highlight can sit behind the buttons.\n\t\tisolation: isolate;\n\n\t\t// The shared highlight, inset from top/bottom so it stays smaller than the\n\t\t// header. inset-inline: 0 spans both triggers; collapses to the waffle when\n\t\t// the current-app button is hidden.\n\t\t&::before {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\tinset-block: calc((var(--header-height) - var(--default-clickable-area)) / 2);\n\t\t\tinset-inline: 0;\n\t\t\tborder-radius: var(--border-radius-element);\n\t\t\t// Behind the buttons (whose backgrounds stay transparent).\n\t\t\tz-index: -1;\n\t\t\tpointer-events: none;\n\t\t}\n\n\t\t// Translucent black: --color-background-hover has too little contrast on the\n\t\t// header tint. Keep the highlight while the menu is open.\n\t\t&:hover::before,\n\t\t&--open::before {\n\t\t\tbackground-color: rgba(0, 0, 0, 0.1);\n\t\t}\n\n\t\t&:active::before {\n\t\t\tbackground-color: rgba(0, 0, 0, 0.15);\n\t\t}\n\t}\n\n\t&__waffle,\n\t&__current-app {\n\t\t// Full header height for the click area; the highlight is on __trigger, so\n\t\t// the buttons stay transparent. !important beats NcButton's scoped rules.\n\t\theight: var(--header-height) !important;\n\t\t// Anchor the per-button focus ring below to the button, not __trigger.\n\t\tposition: relative;\n\n\t\t// NcButton's tertiary-no-background variant uses --color-main-text,\n\t\t// which is dark on light themes. The header sits on the theme primary\n\t\t// background, so override to use the matching plain-text color.\n\t\t--color-main-text: var(--color-background-plain-text);\n\t\tcolor: var(--color-background-plain-text);\n\n\t\t// Hide NcButton's own hover/active fill so only the __trigger highlight\n\t\t// shows. The extra .button-vue makes this win over NcButton's rule.\n\t\t&.button-vue:hover:not(:disabled),\n\t\t&.button-vue:active:not(:disabled) {\n\t\t\tbackground-color: transparent !important;\n\t\t}\n\n\t\t// Per-button keyboard focus ring, matched to the highlight pill. Hide\n\t\t// NcButton's own ring (outline + halo); the extra .button-vue makes our\n\t\t// override win over it.\n\t\t&.button-vue:focus-visible {\n\t\t\toutline: none !important;\n\t\t\tbox-shadow: none !important;\n\t\t}\n\n\t\t&.button-vue:focus-visible::before {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\tinset-block: calc((var(--header-height) - var(--default-clickable-area)) / 2);\n\t\t\tinset-inline: 0;\n\t\t\tborder-radius: var(--border-radius-element);\n\t\t\tbox-shadow: inset 0 0 0 2px var(--color-background-plain-text);\n\t\t\tpointer-events: none;\n\t\t}\n\t}\n\n\t&__current-app {\n\t\t// Lets the inner label shrink to its max-width and ellipsize instead of\n\t\t// pushing the button wider than the inline-flex text slot.\n\t\t:deep(.button-vue__text) {\n\t\t\tmin-width: 0;\n\t\t}\n\n\t\t@media only screen and (max-width: 1024px) {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__current-app-icon {\n\t\tdisplay: flex;\n\t\twidth: calc(var(--default-grid-baseline) * 5);\n\t\theight: calc(var(--default-grid-baseline) * 5);\n\t\t// Vertical alpha fade, like the cog and the other header icons.\n\t\tmask: var(--header-menu-icon-mask);\n\t}\n\n\t&__current-app-glyph {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\t// Masked rather than shown: app icons ship a hardcoded fill, so the\n\t\t// color has to come from the background. Matches AppIcon.vue.\n\t\tbackground-color: var(--color-background-plain-text);\n\t\tmask: var(--app-icon-url) center / contain no-repeat;\n\t}\n\n\t// Masked backgrounds are not force-adjusted the way is.\n\t@media (forced-colors: active) {\n\t\t&__current-app-glyph {\n\t\t\tbackground-color: CanvasText;\n\t\t}\n\t}\n\n\t&__current-app-cog {\n\t\tmask: var(--header-menu-icon-mask);\n\t}\n\n\t&__current-app-name {\n\t\t// inline-block: inline elements ignore max-width + overflow.\n\t\tdisplay: inline-block;\n\t\tvertical-align: middle;\n\t\tfont-size: var(--default-font-size);\n\t\tfont-weight: 500;\n\t\twhite-space: nowrap;\n\t\tletter-spacing: -0.5px;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\t// Cap width so long localized labels ellipsize instead of pushing\n\t\t// the header icons off-screen (.header-start doesn't shrink).\n\t\tmax-width: clamp(80px, 22vw, 320px);\n\t}\n\n\t&__popover {\n\t\t// Shared by the app grid and the actions row below it, so both use the\n\t\t// same column raster.\n\t\t--app-item-col-width: 69px;\n\t\t--app-item-row-height: calc(15 * var(--default-grid-baseline) + 1.5 * var(--default-font-size)); // 12x for icon + 3x for padding + text\n\t\t// Column flex so the actions row keeps its height and the grid owns\n\t\t// the remaining space (and the scrolling).\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tmax-height: calc(100vh - var(--header-height) - var(--default-grid-baseline));\n\t\tmax-width: calc(100vw - var(--default-grid-baseline) * 4);\n\t\tbackground-color: var(--color-main-background);\n\t}\n\n\t&__grid {\n\t\t// border-box: the JS-set max-height (see recomputeGridMaxHeight)\n\t\t// needs to include padding for the peek math to hold.\n\t\tbox-sizing: border-box;\n\t\tpadding: calc(var(--default-grid-baseline) * 2);\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(4, var(--app-item-col-width));\n\t\tgrid-auto-rows: minmax(var(--app-item-row-height), max-content);\n\t\t// Allows the grid to shrink below its content height inside the\n\t\t// column flex parent, so the scroll cap always applies.\n\t\tmin-height: 0;\n\t\t// max-height set inline by recomputeGridMaxHeight(); CSS just owns the scroll.\n\t\toverflow-y: auto;\n\t\toverflow-x: hidden;\n\n\t\t// Extra top padding on first-row tiles so the hover bg reads\n\t\t// concentric with the popover's rounded top corner. !important\n\t\t// because AppItem's scoped rule has the same specificity.\n\t\t> :nth-child(-n+4) {\n\t\t\tpadding-block-start: calc(var(--default-grid-baseline) * 2) !important;\n\t\t}\n\n\t\t// WebKit equivalents are in the unscoped block below: scoped CSS\n\t\t// data-attrs don't reach ::-webkit-scrollbar pseudo-elements in Chrome.\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: var(--color-scrollbar) transparent;\n\t}\n}\n"],sourceRoot:""}]);const s=a;r.d(e,["A",0,s])},16306(t,e,r){"use strict";var n=r(71354),o=r.n(n),i=r(76314),a=r.n(i)()(o());a.push([t.id,".app-menu__popover-base{--border-radius-large: var(--border-radius-container-large);--border-radius-element: var(--border-radius-container-large)}.app-menu__popover-base .v-popper__arrow-container{display:none}.app-menu__popover-base .v-popper__wrapper{margin-block-start:-10px}.app-menu__popover-base .app-menu__popover{--border-radius-element: 8px}.app-menu__popover-base .app-menu__grid{scrollbar-width:thin !important;scrollbar-color:var(--color-scrollbar) rgba(0,0,0,0) !important}.app-menu__popover-base .app-menu__grid::-webkit-scrollbar{width:6px !important;height:6px !important}.app-menu__popover-base .app-menu__grid::-webkit-scrollbar-track{background:rgba(0,0,0,0) !important}.app-menu__popover-base .app-menu__grid::-webkit-scrollbar-thumb{background-color:var(--color-scrollbar) !important;border:none !important;border-radius:3px !important;background-clip:padding-box !important}","",{version:3,sources:["webpack://./core/src/components/AppMenu.vue"],names:[],mappings:"AACA,wBACC,2DAAA,CACA,6DAAA,CAID,mDACC,YAAA,CAID,2CACC,wBAAA,CAKD,2CACC,4BAAA,CAKD,wCACC,+BAAA,CACA,+DAAA,CAEA,2DACC,oBAAA,CACA,qBAAA,CAGD,iEACC,mCAAA,CAGD,iEACC,kDAAA,CACA,sBAAA,CACA,4BAAA,CACA,sCAAA",sourcesContent:["\n.app-menu__popover-base {\n\t--border-radius-large: var(--border-radius-container-large);\n\t--border-radius-element: var(--border-radius-container-large);\n}\n\n// No arrow: the menu reads as a panel below the header, not a tooltip.\n.app-menu__popover-base .v-popper__arrow-container {\n\tdisplay: none;\n}\n\n// Cancel NcPopover's 10px distance so the menu starts right below the header.\n.app-menu__popover-base .v-popper__wrapper {\n\tmargin-block-start: -10px;\n}\n\n// Without this reset the override above cascades into AppItem and inflates\n// its hover radius. Restores the system default from apps/theming/css/default.css.\n.app-menu__popover-base .app-menu__popover {\n\t--border-radius-element: 8px;\n}\n\n// Outside the scoped block: ::-webkit-scrollbar pseudo-elements need unscoped\n// CSS to bind in Chrome. !important: core/css/styles.scss forces a 12 px thumb.\n.app-menu__popover-base .app-menu__grid {\n\tscrollbar-width: thin !important;\n\tscrollbar-color: var(--color-scrollbar) transparent !important;\n\n\t&::-webkit-scrollbar {\n\t\twidth: 6px !important;\n\t\theight: 6px !important;\n\t}\n\n\t&::-webkit-scrollbar-track {\n\t\tbackground: transparent !important;\n\t}\n\n\t&::-webkit-scrollbar-thumb {\n\t\tbackground-color: var(--color-scrollbar) !important;\n\t\tborder: none !important;\n\t\tborder-radius: 3px !important;\n\t\tbackground-clip: padding-box !important;\n\t}\n}\n"],sourceRoot:""}]);const s=a;r.d(e,["A",0,s])},38666(t,e,r){"use strict";var n=r(71354),o=r.n(n),i=r(76314),a=r.n(i)()(o());a.push([t.id,".app-menu-actions[data-v-53961a2a]{position:sticky;inset-block-end:0;z-index:1;flex-shrink:0;box-sizing:border-box;display:grid;grid-template-columns:repeat(4, var(--app-item-col-width, 69px));padding:calc(var(--default-grid-baseline)*2);border-block-start:1px solid var(--color-border);background-color:var(--color-main-background)}.app-menu-actions[data-v-53961a2a] .v-popper{display:flex}.app-menu-actions[data-v-53961a2a] .app-item{width:100%}","",{version:3,sources:["webpack://./core/src/components/AppMenuActions.vue"],names:[],mappings:"AACA,mCAGC,eAAA,CACA,iBAAA,CACA,SAAA,CACA,aAAA,CACA,qBAAA,CACA,YAAA,CAEA,gEAAA,CACA,4CAAA,CACA,gDAAA,CACA,6CAAA,CAIA,6CACC,YAAA,CAGD,6CACC,UAAA",sourcesContent:["\n.app-menu-actions {\n\t// The app grid is the scroll container, but this also keeps the row pinned\n\t// if the popover itself scrolls.\n\tposition: sticky;\n\tinset-block-end: 0;\n\tz-index: 1;\n\tflex-shrink: 0;\n\tbox-sizing: border-box;\n\tdisplay: grid;\n\t// Same columns as .app-menu__grid so the items align with the apps above.\n\tgrid-template-columns: repeat(4, var(--app-item-col-width, 69px));\n\tpadding: calc(var(--default-grid-baseline) * 2);\n\tborder-block-start: 1px solid var(--color-border);\n\tbackground-color: var(--color-main-background);\n\n\t// NcPopover's positioning element wraps the overflow trigger and has to\n\t// fill its grid cell to line the item up with the other columns.\n\t:deep(.v-popper) {\n\t\tdisplay: flex;\n\t}\n\n\t:deep(.app-item) {\n\t\twidth: 100%;\n\t}\n}\n"],sourceRoot:""}]);const s=a;r.d(e,["A",0,s])},538(t,e,r){"use strict";var n=r(71354),o=r.n(n),i=r(76314),a=r.n(i)()(o());a.push([t.id,".app-menu-actions__popover-base .app-menu-actions__submenu{display:flex;flex-direction:column;gap:var(--default-grid-baseline);padding:var(--default-grid-baseline);min-width:200px;max-width:min(320px,100vw - var(--default-grid-baseline)*4);background-color:var(--color-main-background)}","",{version:3,sources:["webpack://./core/src/components/AppMenuActions.vue"],names:[],mappings:"AACA,2DACC,YAAA,CACA,qBAAA,CACA,gCAAA,CACA,oCAAA,CACA,eAAA,CACA,2DAAA,CACA,6CAAA",sourcesContent:["\n.app-menu-actions__popover-base .app-menu-actions__submenu {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--default-grid-baseline);\n\tpadding: var(--default-grid-baseline);\n\tmin-width: 200px;\n\tmax-width: min(320px, calc(100vw - var(--default-grid-baseline) * 4));\n\tbackground-color: var(--color-main-background);\n}\n"],sourceRoot:""}]);const s=a;r.d(e,["A",0,s])},13714(t,e,r){"use strict";var n=r(71354),o=r.n(n),i=r(76314),a=r.n(i)()(o());a.push([t.id,".app-item[data-v-6f8600fd]{display:flex;flex-direction:column;align-items:center;gap:var(--default-grid-baseline);padding-block:var(--default-grid-baseline);border-radius:var(--border-radius-element);text-decoration:none;color:var(--color-main-text);min-width:0;padding-inline:0;border:none;background-color:rgba(0,0,0,0);font:inherit;cursor:pointer}.app-item[data-v-6f8600fd]:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--color-primary-element)}.app-item[data-v-6f8600fd]:hover,.app-item[data-v-6f8600fd]:focus-visible{--app-icon-scale: 1.08}.app-item[data-v-6f8600fd]:active{--app-icon-scale: 0.96}.app-item__unread[data-v-6f8600fd]{position:absolute;top:0;inset-inline-end:0;width:calc(var(--default-grid-baseline)*3);height:calc(var(--default-grid-baseline)*3);border-radius:50%;background-color:var(--color-error);border:2px solid var(--color-main-background);box-sizing:content-box}.app-item__label[data-v-6f8600fd]{font-size:12px;line-height:1.3;text-align:center;color:var(--color-main-text);-webkit-hyphens:auto;hyphens:auto;word-break:normal;overflow-wrap:break-word;max-width:100%;letter-spacing:-0.3px;padding-inline:var(--default-grid-baseline)}.app-item--active .app-item__label[data-v-6f8600fd]{font-weight:bold}.app-item--outlined .app-item__label[data-v-6f8600fd]{color:var(--color-text-maxcontrast)}.app-item--compact[data-v-6f8600fd]{flex-direction:row;align-items:center;gap:calc(var(--default-grid-baseline)*2);width:100%;padding-inline:var(--default-grid-baseline);--app-icon-circle-size: calc(var(--default-grid-baseline) * 8);--app-action-icon-size: calc(var(--default-grid-baseline) * 8)}.app-item--compact[data-v-6f8600fd]:hover,.app-item--compact[data-v-6f8600fd]:focus-visible{background-color:var(--color-background-hover)}.app-item--compact .app-item__label[data-v-6f8600fd]{font-size:var(--default-font-size);text-align:start;white-space:nowrap;hyphens:none;overflow:hidden;text-overflow:ellipsis;letter-spacing:normal}","",{version:3,sources:["webpack://./core/src/components/AppMenuItem.vue"],names:[],mappings:"AACA,2BACC,YAAA,CACA,qBAAA,CACA,kBAAA,CACA,gCAAA,CAEA,0CAAA,CACA,0CAAA,CACA,oBAAA,CACA,4BAAA,CACA,WAAA,CAEA,gBAAA,CACA,WAAA,CACA,8BAAA,CACA,YAAA,CACA,cAAA,CAKA,yCACC,YAAA,CACA,uDAAA,CAGD,0EAEC,sBAAA,CAGD,kCACC,sBAAA,CAGD,mCACC,iBAAA,CACA,KAAA,CACA,kBAAA,CACA,0CAAA,CACA,2CAAA,CACA,iBAAA,CACA,mCAAA,CACA,6CAAA,CACA,sBAAA,CAGD,kCACC,cAAA,CACA,eAAA,CACA,iBAAA,CACA,4BAAA,CAEA,oBAAA,CACA,YAAA,CACA,iBAAA,CACA,wBAAA,CACA,cAAA,CACA,qBAAA,CACA,2CAAA,CAGD,oDACC,gBAAA,CAID,sDACC,mCAAA,CAKD,oCACC,kBAAA,CACA,kBAAA,CACA,wCAAA,CACA,UAAA,CACA,2CAAA,CAEA,8DAAA,CACA,8DAAA,CAEA,4FAEC,8CAAA,CAIF,qDACC,kCAAA,CACA,gBAAA,CACA,kBAAA,CACA,YAAA,CACA,eAAA,CACA,sBAAA,CACA,qBAAA",sourcesContent:["\n.app-item {\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tgap: var(--default-grid-baseline);\n\t// Keeps the grown circle and the focus ring off the tile's edge.\n\tpadding-block: var(--default-grid-baseline);\n\tborder-radius: var(--border-radius-element);\n\ttext-decoration: none;\n\tcolor: var(--color-main-text);\n\tmin-width: 0;\n\t// Reset the user-agent styles of the