@nextcloud/vue
Version:
Nextcloud vue components
2 lines (1 loc) • 2.14 kB
JavaScript
var d=require("../assets/index23.css");const r=require("floating-vue"),s=require("focus-trap"),a=require("../chunks/focusTrap-139520e2.cjs"),p=require("../chunks/_plugin-vue2_normalizer-764a4c12.cjs");const n={name:"NcPopover",components:{Dropdown:r.Dropdown},inheritAttrs:!1,props:{popoverBaseClass:{type:String,default:""},focusTrap:{type:Boolean,default:!0},setReturnFocus:{default:void 0,type:[HTMLElement,SVGElement,String,Boolean]}},emits:["after-show","after-hide"],beforeDestroy(){this.clearFocusTrap(),this.clearEscapeStopPropagation()},methods:{getPopoverContentElement(){var e,t;return(t=(e=this.$refs.popover)==null?void 0:e.$refs.popperContent)==null?void 0:t.$el},async useFocusTrap(){if(await this.$nextTick(),!this.focusTrap)return;const e=this.getPopoverContentElement();e&&(this.$focusTrap=s.createFocusTrap(e,{escapeDeactivates:!1,allowOutsideClick:!0,setReturnFocus:this.setReturnFocus,trapStack:a.getTrapStack()}),this.$focusTrap.activate())},clearFocusTrap(e={}){var t;try{(t=this.$focusTrap)==null||t.deactivate(e),this.$focusTrap=null}catch(o){console.warn(o)}},addEscapeStopPropagation(){var e;(e=this.getPopoverContentElement())==null||e.addEventListener("keydown",this.stopKeydownEscapeHandler)},clearEscapeStopPropagation(){var e;(e=this.getPopoverContentElement())==null||e.removeEventListener("keydown",this.stopKeydownEscapeHandler)},stopKeydownEscapeHandler(e){e.type==="keydown"&&e.key==="Escape"&&e.stopPropagation()},afterShow(){this.$nextTick(()=>{this.$emit("after-show"),this.useFocusTrap(),this.addEscapeStopPropagation()})},afterHide(){this.$emit("after-hide"),this.clearFocusTrap(),this.clearEscapeStopPropagation()}}};var i=function(){var e=this,t=e._self._c;return t("Dropdown",e._g(e._b({ref:"popover",attrs:{distance:10,"arrow-padding":10,"no-auto-focus":!0,"popper-class":e.popoverBaseClass},on:{"apply-show":e.afterShow,"apply-hide":e.afterHide},scopedSlots:e._u([{key:"popper",fn:function(){return[e._t("default")]},proxy:!0}],null,!0)},"Dropdown",e.$attrs,!1),e.$listeners),[e._t("trigger")],2)},c=[],l=p.normalizeComponent(n,i,c,!1,null,null,null,null);const u=l.exports;module.exports=u;