UNPKG

primevue

Version:

PrimeVue is an open source UI library for Vue featuring a rich set of 80+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with PrimeBloc

2 lines (1 loc) 3.91 kB
this.primevue=this.primevue||{},this.primevue.focustrap=function(e,t,o){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}return n(t).default.extend({style:n(o).default}).extend("focustrap",{mounted:function(e,t){(t.value||{}).disabled||(this.createHiddenFocusableElements(e,t),this.bind(e,t),this.autoFocus(e,t)),e.setAttribute("data-pd-focustrap",!0),this.$el=e},updated:function(e,t){(t.value||{}).disabled&&this.unbind(e)},unmounted:function(e){this.unbind(e)},methods:{getComputedSelector:function(e){return':not(.p-hidden-focusable):not([data-p-hidden-focusable="true"])'.concat(null!=e?e:"")},bind:function(t,o){var n=this,s=o.value||{},u=s.onFocusIn,c=s.onFocusOut;t.$_pfocustrap_mutationobserver=new MutationObserver((function(o){o.forEach((function(o){if("childList"===o.type&&!t.contains(document.activeElement)){e.DomHandler.focus(function o(s){var u=e.DomHandler.isFocusableElement(s)?e.DomHandler.isFocusableElement(s,n.getComputedSelector(t.$_pfocustrap_focusableselector))?s:e.DomHandler.getFirstFocusableElement(t,n.getComputedSelector(t.$_pfocustrap_focusableselector)):e.DomHandler.getFirstFocusableElement(s);return e.ObjectUtils.isNotEmpty(u)?u:s.nextSibling&&o(s.nextSibling)}(o.nextSibling))}}))})),t.$_pfocustrap_mutationobserver.disconnect(),t.$_pfocustrap_mutationobserver.observe(t,{childList:!0}),t.$_pfocustrap_focusinlistener=function(e){return u&&u(e)},t.$_pfocustrap_focusoutlistener=function(e){return c&&c(e)},t.addEventListener("focusin",t.$_pfocustrap_focusinlistener),t.addEventListener("focusout",t.$_pfocustrap_focusoutlistener)},unbind:function(e){e.$_pfocustrap_mutationobserver&&e.$_pfocustrap_mutationobserver.disconnect(),e.$_pfocustrap_focusinlistener&&e.removeEventListener("focusin",e.$_pfocustrap_focusinlistener)&&(e.$_pfocustrap_focusinlistener=null),e.$_pfocustrap_focusoutlistener&&e.removeEventListener("focusout",e.$_pfocustrap_focusoutlistener)&&(e.$_pfocustrap_focusoutlistener=null)},autoFocus:function(t,o){var n=o.value||{},s=n.autoFocusSelector,u=n.firstFocusableSelector,c=void 0===u?"":u,a=n.autoFocus,r=void 0!==a&&a,i=e.DomHandler.getFirstFocusableElement(t,"[autofocus]".concat(this.getComputedSelector(void 0===s?"":s)));r&&!i&&(i=e.DomHandler.getFirstFocusableElement(t,this.getComputedSelector(c))),e.DomHandler.focus(i)},onFirstHiddenElementFocus:function(t){var o,n=t.currentTarget,s=t.relatedTarget,u=s!==n.$_pfocustrap_lasthiddenfocusableelement&&null!==(o=this.$el)&&void 0!==o&&o.contains(s)?n.$_pfocustrap_lasthiddenfocusableelement:e.DomHandler.getFirstFocusableElement(n.parentElement,this.getComputedSelector(n.$_pfocustrap_focusableselector));e.DomHandler.focus(u)},onLastHiddenElementFocus:function(t){var o,n=t.currentTarget,s=t.relatedTarget,u=s!==n.$_pfocustrap_firsthiddenfocusableelement&&null!==(o=this.$el)&&void 0!==o&&o.contains(s)?n.$_pfocustrap_firsthiddenfocusableelement:e.DomHandler.getLastFocusableElement(n.parentElement,this.getComputedSelector(n.$_pfocustrap_focusableselector));e.DomHandler.focus(u)},createHiddenFocusableElements:function(t,o){var n=this,s=o.value||{},u=s.tabIndex,c=void 0===u?0:u,a=s.firstFocusableSelector,r=void 0===a?"":a,i=s.lastFocusableSelector,l=void 0===i?"":i,d=function(t){return e.DomHandler.createElement("span",{class:"p-hidden-accessible p-hidden-focusable",tabIndex:c,role:"presentation","aria-hidden":!0,"data-p-hidden-accessible":!0,"data-p-hidden-focusable":!0,onFocus:null==t?void 0:t.bind(n)})},f=d(this.onFirstHiddenElementFocus),p=d(this.onLastHiddenElementFocus);f.$_pfocustrap_lasthiddenfocusableelement=p,f.$_pfocustrap_focusableselector=r,f.setAttribute("data-pc-section","firstfocusableelement"),p.$_pfocustrap_firsthiddenfocusableelement=f,p.$_pfocustrap_focusableselector=l,p.setAttribute("data-pc-section","lastfocusableelement"),t.prepend(f),t.append(p)}}})}(primevue.utils,primevue.basedirective,primevue.focustrap.style);