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) 5 kB
import{DomHandler as e,ObjectUtils as t}from"primevue/utils";import o from"primevue/basedirective";import n from"primevue/focustrap/style";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 s(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 u(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?s(Object(o),!0).forEach((function(t){c(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):s(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)}var a=o.extend({style:n}).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(o,n){var r=this,s=n.value||{},u=s.onFocusIn,c=s.onFocusOut;o.$_pfocustrap_mutationobserver=new MutationObserver((function(n){n.forEach((function(n){if("childList"===n.type&&!o.contains(document.activeElement)){e.focus(function n(s){var u=e.isFocusableElement(s)?e.isFocusableElement(s,r.getComputedSelector(o.$_pfocustrap_focusableselector))?s:e.getFirstFocusableElement(o,r.getComputedSelector(o.$_pfocustrap_focusableselector)):e.getFirstFocusableElement(s);return t.isNotEmpty(u)?u:s.nextSibling&&n(s.nextSibling)}(n.nextSibling))}}))})),o.$_pfocustrap_mutationobserver.disconnect(),o.$_pfocustrap_mutationobserver.observe(o,{childList:!0}),o.$_pfocustrap_focusinlistener=function(e){return u&&u(e)},o.$_pfocustrap_focusoutlistener=function(e){return c&&c(e)},o.addEventListener("focusin",o.$_pfocustrap_focusinlistener),o.addEventListener("focusout",o.$_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:u(u({},e),{},{autoFocus:!0})})},autoElementFocus:function(t,o){var n=o.value||{},r=n.autoFocusSelector,s=n.firstFocusableSelector,u=void 0===s?"":s,c=n.autoFocus,i=void 0!==c&&c,a=e.getFirstFocusableElement(t,"[autofocus]".concat(this.getComputedSelector(void 0===r?"":r)));i&&!a&&(a=e.getFirstFocusableElement(t,this.getComputedSelector(u))),e.focus(a)},onFirstHiddenElementFocus:function(t){var o,n=t.currentTarget,r=t.relatedTarget,s=r!==n.$_pfocustrap_lasthiddenfocusableelement&&null!==(o=this.$el)&&void 0!==o&&o.contains(r)?n.$_pfocustrap_lasthiddenfocusableelement:e.getFirstFocusableElement(n.parentElement,this.getComputedSelector(n.$_pfocustrap_focusableselector));e.focus(s)},onLastHiddenElementFocus:function(t){var o,n=t.currentTarget,r=t.relatedTarget,s=r!==n.$_pfocustrap_firsthiddenfocusableelement&&null!==(o=this.$el)&&void 0!==o&&o.contains(r)?n.$_pfocustrap_firsthiddenfocusableelement:e.getLastFocusableElement(n.parentElement,this.getComputedSelector(n.$_pfocustrap_focusableselector));e.focus(s)},createHiddenFocusableElements:function(t,o){var n=this,r=o.value||{},s=r.tabIndex,u=void 0===s?0:s,c=r.firstFocusableSelector,i=void 0===c?"":c,a=r.lastFocusableSelector,l=void 0===a?"":a,f=function(t){return e.createElement("span",{class:"p-hidden-accessible p-hidden-focusable",tabIndex:u,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)}}});export{a as default};