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) • 5.24 kB
JavaScript
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}}function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function u(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function s(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?u(Object(o),!0).forEach((function(t){c(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):u(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function c(e,t,o){var n;return(t="symbol"==r(n=i(t,"string"))?n:String(n))in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(e,t){if("object"!=r(e)||!e)return e;var o=e[Symbol.toPrimitive];if(void 0!==o){var n=o.call(e,t||"default");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(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.autoElementFocus(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,r=o.value||{},u=r.onFocusIn,s=r.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(r){var u=e.DomHandler.isFocusableElement(r)?e.DomHandler.isFocusableElement(r,n.getComputedSelector(t.$_pfocustrap_focusableselector))?r:e.DomHandler.getFirstFocusableElement(t,n.getComputedSelector(t.$_pfocustrap_focusableselector)):e.DomHandler.getFirstFocusableElement(r);return e.ObjectUtils.isNotEmpty(u)?u:r.nextSibling&&o(r.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 s&&s(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(e){this.autoElementFocus(this.$el,{value:s(s({},e),{},{autoFocus:!0})})},autoElementFocus:function(t,o){var n=o.value||{},r=n.autoFocusSelector,u=n.firstFocusableSelector,s=void 0===u?"":u,c=n.autoFocus,i=void 0!==c&&c,a=e.DomHandler.getFirstFocusableElement(t,"[autofocus]".concat(this.getComputedSelector(void 0===r?"":r)));i&&!a&&(a=e.DomHandler.getFirstFocusableElement(t,this.getComputedSelector(s))),e.DomHandler.focus(a)},onFirstHiddenElementFocus:function(t){var o,n=t.currentTarget,r=t.relatedTarget,u=r!==n.$_pfocustrap_lasthiddenfocusableelement&&null!==(o=this.$el)&&void 0!==o&&o.contains(r)?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,r=t.relatedTarget,u=r!==n.$_pfocustrap_firsthiddenfocusableelement&&null!==(o=this.$el)&&void 0!==o&&o.contains(r)?n.$_pfocustrap_firsthiddenfocusableelement:e.DomHandler.getLastFocusableElement(n.parentElement,this.getComputedSelector(n.$_pfocustrap_focusableselector));e.DomHandler.focus(u)},createHiddenFocusableElements:function(t,o){var n=this,r=o.value||{},u=r.tabIndex,s=void 0===u?0:u,c=r.firstFocusableSelector,i=void 0===c?"":c,a=r.lastFocusableSelector,l=void 0===a?"":a,f=function(t){return e.DomHandler.createElement("span",{class:"p-hidden-accessible p-hidden-focusable",tabIndex:s,role:"presentation","aria-hidden":!0,"data-p-hidden-accessible":!0,"data-p-hidden-focusable":!0,onFocus:null==t?void 0:t.bind(n)})},p=f(this.onFirstHiddenElementFocus),d=f(this.onLastHiddenElementFocus);p.$_pfocustrap_lasthiddenfocusableelement=d,p.$_pfocustrap_focusableselector=i,p.setAttribute("data-pc-section","firstfocusableelement"),d.$_pfocustrap_firsthiddenfocusableelement=p,d.$_pfocustrap_focusableselector=l,d.setAttribute("data-pc-section","lastfocusableelement"),t.prepend(p),t.append(d)}}})}(primevue.utils,primevue.basedirective,primevue.focustrap.style);