UNPKG

@nextcloud/vue

Version:
2 lines (1 loc) 3.62 kB
var m=require("../assets/index5.css");const r=require("@vueuse/components"),n=require("focus-trap"),s=require("../chunks/GenRandomId-67df40eb.cjs"),a=require("../Mixins/clickOutsideOptions.cjs");require("../chunks/IsMobileState-151fc57d.cjs"),require("@nextcloud/router"),/* empty css */const o=require("../chunks/_plugin-vue2_normalizer-764a4c12.cjs");require("linkify-string"),require("escape-html"),require("striptags"),require("vue"),require("@nextcloud/auth"),require("@nextcloud/axios"),require("@nextcloud/capabilities");const u=require("../chunks/focusTrap-139520e2.cjs");const d={name:"NcHeaderMenu",directives:{ClickOutside:r.vOnClickOutside},mixins:[a],props:{id:{type:String,required:!0},ariaLabel:{type:String,default:""},open:{type:Boolean,default:!1},isNav:{type:Boolean,default:!1},description:{type:String,default:null}},emits:["close","closed","open","opened","update:open","cancel"],data(){var e,t,i;return{focusTrap:null,opened:this.open,shortcutsDisabled:(i=(t=(e=window.OCP)==null?void 0:e.Accessibility)==null?void 0:t.disableKeyboardShortcuts)==null?void 0:i.call(t),triggerId:s.GenRandomId(),descriptionId:s.GenRandomId()}},computed:{wrapperTag(){return this.isNav?"nav":"div"},clickOutsideConfig(){return[this.closeMenu,this.clickOutsideOptions]}},watch:{open(e){e?this.openMenu():this.closeMenu()}},mounted(){document.addEventListener("keydown",this.onKeyDown)},beforeDestroy(){document.removeEventListener("keydown",this.onKeyDown)},methods:{toggleMenu(){this.opened?this.closeMenu():this.openMenu()},closeMenu(e=!1){this.opened=!1,this.$emit(e?"cancel":"close"),this.$emit("update:open",!1),this.clearFocusTrap(),this.$nextTick(()=>{this.$emit("closed")})},openMenu(){this.opened=!0,this.$emit("open"),this.$emit("update:open",!0),this.$nextTick(()=>{this.useFocusTrap(),this.$emit("opened")})},onKeyDown(e){this.shortcutsDisabled||!this.opened||e.key==="Escape"&&(e.preventDefault(),this.closeMenu(!0))},async useFocusTrap(){if(this.focusTrap)return;const e=this.$refs.content;this.focusTrap=n.createFocusTrap(e,{allowOutsideClick:!0,trapStack:u.getTrapStack(),fallbackFocus:this.$refs.trigger}),this.focusTrap.activate()},clearFocusTrap(){var e;(e=this.focusTrap)==null||e.deactivate(),this.focusTrap=null}}};var c=function(){var e=this,t=e._self._c;return t(e.wrapperTag,{directives:[{name:"click-outside",rawName:"v-click-outside",value:e.clickOutsideConfig,expression:"clickOutsideConfig"}],tag:"component",staticClass:"header-menu",class:{"header-menu--opened":e.opened},attrs:{id:e.id,"aria-labelledby":e.isNav?e.triggerId:null}},[t("button",{ref:"trigger",staticClass:"header-menu__trigger button-vue",attrs:{id:e.triggerId,"aria-label":e.ariaLabel,"aria-describedby":e.description?e.descriptionId:null,"aria-controls":`header-menu-${e.id}`,"aria-expanded":e.opened.toString()},on:{click:function(i){return i.preventDefault(),e.toggleMenu.apply(null,arguments)}}},[e._t("trigger")],2),e.description?t("span",{staticClass:"header-menu__description hidden-visually",attrs:{id:e.descriptionId}},[e._v(" "+e._s(e.description)+" ")]):e._e(),t("div",{directives:[{name:"show",rawName:"v-show",value:e.opened,expression:"opened"}],staticClass:"header-menu__carret"}),t("div",{directives:[{name:"show",rawName:"v-show",value:e.opened,expression:"opened"}],staticClass:"header-menu__wrapper",attrs:{id:`header-menu-${e.id}`}},[t("div",{ref:"content",staticClass:"header-menu__content"},[e._t("default")],2)])])},l=[],p=o.normalizeComponent(d,c,l,!1,null,"ca4dc36b",null,null);const h=p.exports;module.exports=h;