smartmenus
Version:
Website/web app navbars with collapsible navs or dropdowns made easy yet highly configurable.
9 lines (8 loc) • 31.8 kB
JavaScript
/*!
* SmartMenus 2.0.0-alpha.1 - Dec 29, 2023
* https://www.smartmenus.org/
* Copyright (c) since 2001 Vasil Dinkov, Vadikom Web Ltd. https://vadikom.com
* Licensed MIT https://github.com/vadikom/smartmenus/blob/master/LICENSE-MIT
*/
"use strict";function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(t,e){for(var i=0;i<e.length;i++){var s=e[i];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&&(s.writable=!0),Object.defineProperty(t,s.key,s)}}function i(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function s(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);e&&(s=s.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,s)}return i}function n(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?s(Object(n),!0).forEach((function(e){i(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function o(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(t)))return;var i=[],s=!0,n=!1,o=void 0;try{for(var a,r=t[Symbol.iterator]();!(s=(a=r.next()).done)&&(i.push(a.value),!e||i.length!==e);s=!0);}catch(t){n=!0,o=t}finally{try{s||null==r.return||r.return()}finally{if(n)throw o}}return i}(t,e)||r(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(t){return function(t){if(Array.isArray(t))return l(t)}(t)||function(t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(t)||r(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(t,e){if(t){if("string"==typeof t)return l(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return"Object"===i&&t.constructor&&(i=t.constructor.name),"Map"===i||"Set"===i?Array.from(t):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?l(t,e):void 0}}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,s=new Array(e);i<e;i++)s[i]=t[i];return s}function c(t,e){var i;if("undefined"==typeof Symbol||null==t[Symbol.iterator]){if(Array.isArray(t)||(i=r(t))||e&&t&&"number"==typeof t.length){i&&(t=i);var s=0,n=function(){};return{s:n,n:function(){return s>=t.length?{done:!0}:{done:!1,value:t[s++]}},e:function(t){throw t},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,l=!1;return{s:function(){i=t[Symbol.iterator]()},n:function(){var t=i.next();return a=t.done,t},e:function(t){l=!0,o=t},f:function(){try{a||null==i.return||i.return()}finally{if(l)throw o}}}}var h=new WeakMap,u={set:function(t,e,i){h.has(t)||h.set(t,new Map),h.get(t).set(e,i)},get:function(t,e){return h.has(t)&&h.get(t).get(e)||null},delete:function(t,e){return!!h.has(t)&&h.get(t).delete(e)}};function d(t,e,i){if(i||"function"!=typeof e||(i=e,e=""),!t||"string"==typeof t){var s={};s[t||""]=i,t=s}e||(e="");for(var n={},o=0,a=Object.keys(t);o<a.length;o++){var r,l=a[o],h=c(l.split(" "));try{for(h.s();!(r=h.n()).done;){n[r.value]=t[l]}}catch(t){h.e(t)}finally{h.f()}}return[t=n,e]}function v(t){var e=t.split(".");return[e[0],e[1]||""]}var _,f={getEventsNS:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i={},s=0,n=Object.keys(t);s<n.length;s++){var o=n[s];i[o.split(" ").join("".concat(e," "))+e]=t[o]}return i},off:function(e,i,s,n){var a=u.get(e,"sm-events");if(a){var r=o(d(i,s,n),2);i=r[0],s=r[1];for(var l=function(){var t=_[h],n=i[t];if(n&&!a.has(n))return{v:void 0};var r,l=o(v(t),2),u=l[0],d=l[1],f=[],p=c(n?(new Map).set(n,a.get(n)):a);try{for(p.s();!(r=p.n()).done;){var b=o(r.value,2),g=b[0],m=b[1];m.eventHandlers=m.eventHandlers.filter((function(t){var i=!1;return u?i=!!(u!==t.eventName||d&&d!==t.eventNS||s&&s!==t.selector):d?i=!(d===t.eventNS&&(!s||s===t.selector)):s&&(i=s!==t.selector),i||e.removeEventListener(t.eventName,t.realHandler,Boolean(t.selector)),i})),0===m.eventHandlers.length&&f.push(g)}}catch(t){p.e(t)}finally{p.f()}for(var y=0,k=f;y<k.length;y++){var w=k[y];a.delete(w)}},h=0,_=Object.keys(i);h<_.length;h++){var f=l();if("object"===t(f))return f.v}}},on:function(t,e,i,s){var n=u.get(t,"sm-events");n||(n=new Map,u.set(t,"sm-events",n));var a=o(d(e,i,s),2);e=a[0],i=a[1];for(var r=function(){var s=c[l],a=e[s],r=o(v(s),2),h=r[0],u=r[1],d=i?/^mouse(enter|leave)$/.test(h)?function(e){var s=e.target;s&&s.matches&&s.matches(i)&&t.contains(s)&&a.call(s,e,s)}:function(e){var s=e.target,n=s&&s.closest&&s.closest(i);n&&t.contains(n)&&a.call(n,e,n)}:function(e){a.call(t,e,t)};n.has(a)||n.set(a,{eventHandlers:[]}),n.get(a).eventHandlers.push({eventName:h,eventNS:u,selector:i,realHandler:d}),t.addEventListener(h,d,Boolean(i))},l=0,c=Object.keys(e);l<c.length;l++)r()},trigger:function(t,e,i){var s=new CustomEvent(e,{bubbles:!0,cancelable:!0,detail:i||null});return t.dispatchEvent(s),s}},p={getComputedStyle:function(t){return p.getWindow(t).getComputedStyle(t)},getDocument:function(t){return t&&t.ownerDocument||window.document},getHeight:function(t){return p._getDimensions(t,!0)},getViewportHeight:function(t){return p._getViewportDimensions(t,!0)},getViewportWidth:function(t){return p._getViewportDimensions(t)},getWidth:function(t){return p._getDimensions(t)},getWindow:function(t){var e=t&&t.ownerDocument;return e&&e.defaultView||window},_getDimensions:function(t,e){var i=t.style,s=null;"none"===p.getComputedStyle(t).display&&(s={position:i.position,visibility:i.visibility,display:i.display},i.position="absolute",i.visibility="hidden",i.display="block");var n=t.getBoundingClientRect()[e?"height":"width"];return s&&(i.display=s.display,i.position=s.position,i.visibility=s.visibility),n},_getViewportDimensions:function(t,e){var i=p.getWindow(t),s=i.visualViewport;if(s)return s[e?"height":"width"];var n=e?"Height":"Width",o=p.getDocument(t).documentElement["client".concat(n)],a=i["inner".concat(n)];return a?Math.min(o,a):o}},b={get:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return e.querySelector(t)},getAll:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return a(e.querySelectorAll(t))},closest:function(t,e){for(var i=null;t;){if(e(t)){i=t;break}t=t.parentElement}return i},parentsUntil:function(t,e,i){for(var s=[],n=t.parentElement;n&&!n.matches(e);)i&&!n.matches(i)||s.push(n),n=n.parentElement;return s}},g=".".concat("sm-mouse"),m="undefined"!=typeof window&&Boolean(window.PointerEvent),y={get supportMouseInput(){return _},disable:function(){void 0!==_&&(f.off(document,g),_=void 0)},enable:function(t){if(void 0===_){_=!1;var e=!0,i=null,s={mousemove:function(s){var n={x:s.pageX,y:s.pageY,timeStamp:Date.now()};if(i){var o=Math.abs(i.x-n.x),a=Math.abs(i.y-n.y);(o>0||a>0)&&o<=4&&a<=4&&n.timeStamp-i.timeStamp<=300&&(_=!0,e&&(t&&t(s),e=!1))}i=n}};s[m?"pointerover pointermove pointerout":"touchstart"]=function(t){/^(4|mouse)$/.test(t.pointerType)||(_=!1)},f.on(document,f.getEventsNS(s,g))}}},k={collapsibleActivateSelectedLinkOnInit:!1,collapsibleBehaviorAccordion:!1,collapsibleResetSubsOnClickOn:"toggler",dropdownsShowTrigger:"click",dropdownsShowTimeout:250,dropdownsHideTrigger:"click",dropdownsHideTimeout:500,dropdownsDropReverseX:!1,dropdownsDropReverseY:!1,dropdownsNavSubOffsetX:0,dropdownsNavSubOffsetY:0,dropdownsSubSubOffsetX:0,dropdownsSubSubOffsetY:0,dropdownsKeepInViewport:!0,markCurrentLinkAsSelectedOnInit:!1,markCurrentLinkParentsAsSelected:!1,resetTogglerOnLinkSelect:!1,showSubOnSplitLinkSelect:!1,classNavbarVertical:"sm-navbar--vertical",classNavbarDropReverseY:"sm-navbar--drop-reverse-y",classNavbarDropReverseX:"sm-navbar--drop-reverse-x",classSubMega:"sm-sub--mega",classLinkExpanded:"sm-expanded",classLinkSelected:"sm-selected",classLinkDisabled:"sm-disabled",classLinkHasSub:"sm-has-sub",classShow:"sm-show",classShowing:"sm-showing",classHiding:"sm-hiding",selectorTogglerState:".sm-toggler-state",selectorTogglerAnchorShow:".sm-toggler-anchor--show",selectorTogglerAnchorHide:".sm-toggler-anchor--hide",selectorCollapse:".sm-collapse",selectorOffcanvas:".sm-offcanvas",selectorOffcanvasOverlay:".sm-offcanvas-overlay",selectorNav:".sm-nav",selectorSub:".sm-sub",selectorItem:".sm-nav-item, .sm-sub-item",selectorLink:".sm-nav-link, .sm-sub-link",selectorLinkSplit:".sm-nav-link--split, .sm-sub-link--split"},w="-".concat("sm"),S="data-".concat("sm","-"),A=".".concat("sm"),L="-".concat("sm"),T=[],O=function(){function i(e,s){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,i),this._navbar=e;for(var o={},a=0,r=Object.keys(k);a<r.length;a++){var l=r[a],c=this._navbar.dataset["".concat("sm").concat(l.charAt(0).toUpperCase()).concat(l.slice(1))];if(void 0!==c){switch(t(k[l])){case"number":c=Number.parseFloat(c,10);break;case"boolean":c="true"===c}o[l]=c}}this._opts=n(n(n({},k),s),o),this._togglerState=null,this._togglerAnchorShow=null,this._togglerAnchorHide=null,this._collapse=null,this._offcanvas=null,this._offcanvasOverlay=null,this._nav=null,this._navbarId=String(Date.now()+Math.random()).replace(/\D/g,""),this._accessIdPrefix="".concat("sm","-").concat(this._navbarId,"-"),this._visibleSubs=[],this._dropdownsShowTimeout=0,this._dropdownsHideTimeout=0,this._clickActivated=!1,this._zIndexInc=0,this._idInc=0,this._disabled=!1,this._wasCollapsible=!1,this._firstLink=null,this._firstSub=null,this._init()}var s,o,r;return s=i,o=[{key:"destroy",value:function(t){this.subHideAll(),this._nav&&(this._destroySubs(),this._destroyNav(),this._nav=null),this._togglerState=null,this._togglerAnchorShow&&(u.delete(this._togglerAnchorShow,"beforefirstshow-fired".concat(w)),this._togglerAnchorShow=null),this._togglerAnchorHide=null,this._collapse=null,this._offcanvas=null,this._offcanvasOverlay=null,this._firstLink=null,this._firstSub=null,t||(this._destroyNavbar(),this._navbar=null)}},{key:"disable",value:function(){this._disabled||(this.subHideAll(),this._disabled=!0)}},{key:"enable",value:function(){this._disabled&&(this._disabled=!1)}},{key:"linkActivate",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"none",i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=t.closest("".concat(this._opts.selectorNav,", ").concat(this._opts.selectorSub)),n=u.get(s,"level".concat(w)),o=u.get(t,"sub".concat(w));if(n>1&&!this._subIsVisible(s)){var a=b.parentsUntil(s,this._opts.selectorNav,this._opts.selectorSub).reverse();a.push(s);var r,l=c(a);try{for(l.s();!(r=l.n()).done;){var h=r.value;this.linkActivate(u.get(h,"parent-link".concat(w)),this._isCollapsible()&&!this._opts.collapsibleBehaviorAccordion?"none":"same")}}catch(t){l.e(t)}finally{l.f()}}switch(e){case"same":this._subHideSubs(n-1);break;case"deeper":this._subHideSubs(n);break;case"self":o&&this._subHide(o)}!f.trigger(this._navbar,"activate".concat(L),t).defaultPrevented&&i&&o&&this._subShow(o)}},{key:"refresh",value:function(){this.destroy(!0),this._init(!0)}},{key:"subHideAll",value:function(){this._clearTimeout(this._dropdownsShowTimeout),this._clearTimeout(this._dropdownsHideTimeout);var t=this._visibleSubs.length;if(t>0){var e,i=c(a(this._visibleSubs).reverse());try{for(i.s();!(e=i.n()).done;){var s=e.value;this._subHide(s)}}catch(t){i.e(t)}finally{i.f()}}this._visibleSubs=[],this._clickActivated=!1,this._zIndexInc=0,t>0&&f.trigger(this._navbar,"hideall".concat(L))}},{key:"_activateSelectedLink",value:function(){var t=b.getAll(".".concat(this._opts.classLinkSelected),this._nav).pop();t&&this.linkActivate(t)}},{key:"_animate",value:function(t,e){t.offsetWidth,t.classList.add(e);var i=p.getComputedStyle(t).animationDuration;if(i&&!i.startsWith("0s")){var s=u.get(t,"animationend-timeout".concat(w));s&&(window.clearTimeout(s),u.get(t,"animationend-trigger".concat(w))());var n=function(){u.delete(t,"animationend-timeout".concat(w)),u.delete(t,"animationend-trigger".concat(w)),t.classList.contains(e)&&f.trigger(t,"animationend")};u.set(t,"animationend-trigger".concat(w),n),u.set(t,"animationend-timeout".concat(w),window.setTimeout(n,1e3*Number.parseFloat(i)+1)),f.on(t,"animationend".concat(A),(function(i){i.target===t&&(f.off(t,"animationend".concat(A)),t.classList.remove(e))}))}else t.classList.remove(e)}},{key:"_animateHide",value:function(t){t.style.setProperty("--".concat("sm","-height"),"".concat(p.getHeight(t),"px")),t.classList.remove(this._opts.classShow),this._animate(t,this._opts.classHiding)}},{key:"_animateShow",value:function(t){t.style.setProperty("--".concat("sm","-height"),"".concat(p.getHeight(t),"px")),t.classList.add(this._opts.classShow),this._animate(t,this._opts.classShowing)}},{key:"_clearTimeout",value:function(t){t&&(window.clearTimeout(t),t=0)}},{key:"_destroyLink",value:function(t){t.classList.contains(this._opts.classLinkHasSub)&&((t.getAttribute("id")||"").startsWith(this._accessIdPrefix)&&t.removeAttribute("id"),t.classList.remove(this._opts.classLinkHasSub),u.delete(t,"sub".concat(w)),u.delete(t,"toggler".concat(w)),u.delete(t,"link".concat(w)),t.removeAttribute("role"),t.removeAttribute("aria-controls"),t.removeAttribute("aria-expanded")),this._opts.markCurrentLinkAsSelectedOnInit&&t.classList.contains(this._opts.classLinkSelected)&&(t.classList.remove(this._opts.classLinkSelected),t.removeAttribute("aria-current"))}},{key:"_destroyNav",value:function(){u.delete(this._nav,"level".concat(w)),f.off(this._nav,A),f.off(window.document,"".concat(A,"-").concat(this._navbarId)),f.off(window,"".concat(A,"-").concat(this._navbarId))}},{key:"_destroyNavbar",value:function(){u.delete(this._navbar,"sm"),this._navbar.removeAttribute("".concat(S,"id")),f.off(this._navbar,A),T.splice(T.indexOf(this),1)}},{key:"_destroySub",value:function(t){u.get(t,"shown-before".concat(w))&&this._subResetPosition(t),(t.getAttribute("id")||"").startsWith(this._accessIdPrefix)&&t.removeAttribute("id"),u.delete(t,"shown-before".concat(w)),u.delete(t,"parent-link".concat(w)),u.delete(t,"level".concat(w)),u.delete(t,"beforefirstshow-fired".concat(w)),t.removeAttribute("aria-hidden"),t.removeAttribute("aria-labelledby")}},{key:"_destroySubs",value:function(){var t,e=c(b.getAll(this._opts.selectorSub,this._nav));try{for(e.s();!(t=e.n()).done;){var i=t.value;this._destroySub(i)}}catch(t){e.e(t)}finally{e.f()}var s,n=c(b.getAll(this._opts.selectorLink,this._nav));try{for(n.s();!(s=n.n()).done;){var o=s.value;this._destroyLink(o)}}catch(t){n.e(t)}finally{n.f()}}},{key:"_docClick",value:function(t){var e=this._isCollapsible();!(!e&&"click"===this._opts.dropdownsHideTrigger||e&&"page"===this._opts.collapsibleResetSubsOnClickOn)||t.target&&this._nav.contains(t.target)||this.subHideAll()}},{key:"_docTouchEnd",value:function(){var t=this;if(this._lastTouch){if(!(void 0!==this._lastTouch.x2&&this._lastTouch.x1!==this._lastTouch.x2||void 0!==this._lastTouch.y2&&this._lastTouch.y1!==this._lastTouch.y2)){this._clearTimeout(this._dropdownsHideTimeout);var e=this._lastTouch.target;this._dropdownsHideTimeout=window.setTimeout((function(){t._docClick({target:e})}),350)}this._lastTouch=null}}},{key:"_docTouchMove",value:function(t){if(this._lastTouch){var e=t.touches[0];this._lastTouch.x2=e.pageX,this._lastTouch.y2=e.pageY}}},{key:"_docTouchStart",value:function(t){var e=t.touches[0];this._lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}}},{key:"_getRootZIndex",value:function(){var t=Number.parseInt(p.getComputedStyle(this._navbar).zIndex,10);return Number.isNaN(t)?1:t}},{key:"_handleEvents",value:function(){return!this._disabled&&this._isCSSOn()}},{key:"_init",value:function(t){if(this._navbar.classList.contains(this._opts.classNavbarDropReverseX)&&(this._opts.dropdownsDropReverseX=!0),this._navbar.classList.contains(this._opts.classNavbarDropReverseY)&&(this._opts.dropdownsDropReverseY=!0),this._togglerState=b.get(this._opts.selectorTogglerState,this._navbar),this._togglerAnchorShow=b.get(this._opts.selectorTogglerAnchorShow,this._navbar),this._togglerAnchorHide=b.get(this._opts.selectorTogglerAnchorHide,this._navbar),this._collapse=b.get(this._opts.selectorCollapse,this._navbar),this._offcanvas=b.get(this._opts.selectorOffcanvas,this._navbar),this._offcanvasOverlay=b.get(this._opts.selectorOffcanvasOverlay,this._navbar),this._nav=b.get(this._opts.selectorNav,this._navbar),t||this._initNavbar(),this._nav){this._initNav(),this._initSubs();var e=this._isCollapsible();this._wasCollapsible=e,this._opts.markCurrentLinkAsSelectedOnInit&&this._markCurrentLinkAsSelected(),this._opts.collapsibleActivateSelectedLinkOnInit&&e&&this._activateSelectedLink(),y.enable((function(t){var e=t.target;null!=e&&e.closest&&T.some((function(i){var s=e.closest(i._opts.selectorLink);return!(!s||!i._navbar.contains(s)||(i._linkEnter(t,s),0))}))}))}}},{key:"_initNav",value:function(){u.set(this._nav,"level".concat(w),1),f.on(this._nav,f.getEventsNS({"mouseover focusin":this._navOver.bind(this),"mouseout focusout":this._navOut.bind(this),keydown:this._navKeyDown.bind(this)},A)),f.on(this._nav,f.getEventsNS({mouseenter:this._linkEnter.bind(this),mouseleave:this._linkLeave.bind(this),mousedown:this._linkDown.bind(this),focus:this._linkFocus.bind(this),blur:this._linkBlur.bind(this),click:this._linkClick.bind(this)},A),this._opts.selectorLink)}},{key:"_initNavbar",value:function(){T.push(this),u.set(this._navbar,"sm",this),this._navbar.setAttribute("".concat(S,"id"),this._navbarId),f.on(this._navbar,"click".concat(A),this._opts.selectorTogglerAnchorShow,this._togglerAnchorShowClick.bind(this)),f.on(this._navbar,"click".concat(A),this._opts.selectorTogglerAnchorHide,this._togglerAnchorHideClick.bind(this)),f.on(this._navbar,"click".concat(A),this._opts.selectorOffcanvasOverlay,this._offcanvasOverlayClick.bind(this))}},{key:"_initSub",value:function(t){var e=b.get(this._opts.selectorLink,t.closest(this._opts.selectorItem));e.classList.add(this._opts.classLinkHasSub);var i=e.nextElementSibling,s=null!=i&&i.matches(this._opts.selectorLinkSplit)&&e.matches(this._opts.selectorLinkSplit)?i:null;s&&(u.set(e,"toggler".concat(w),s),u.set(s,"link".concat(w),e),s.classList.add(this._opts.classLinkHasSub)),u.set(e,"sub".concat(w),t),u.set(t,"parent-link".concat(w),e),u.set(t,"level".concat(w),b.parentsUntil(t,this._opts.selectorNav,this._opts.selectorSub).length+2),this._setTogglerSubARIA(s||e,t)}},{key:"_initSubs",value:function(){"click"!==this._opts.dropdownsHideTrigger&&"page"!==this._opts.collapsibleResetSubsOnClickOn||f.on(window.document,f.getEventsNS({touchstart:this._docTouchStart.bind(this),touchmove:this._docTouchMove.bind(this),touchend:this._docTouchEnd.bind(this),click:this._docClick.bind(this)},"".concat(A,"-").concat(this._navbarId))),f.on(window,f.getEventsNS({"resize orientationchange":this._winResize.bind(this)},"".concat(A,"-").concat(this._navbarId)));var t,e=b.getAll(this._opts.selectorSub,this._nav),i=c(e);try{for(i.s();!(t=i.n()).done;){var s=t.value;this._initSub(s)}}catch(t){i.e(t)}finally{i.f()}this._firstLink=b.get(this._opts.selectorLink,this._nav),this._firstSub=e[0]}},{key:"_isCollapsible",value:function(){return this._isCSSOn()&&this._firstSub&&"static"===p.getComputedStyle(this._firstSub).position}},{key:"_isCSSOn",value:function(){return this._firstLink&&"inline"!==p.getComputedStyle(this._firstLink).display}},{key:"_isTouchMode",value:function(){return!y.supportMouseInput||this._isCollapsible()}},{key:"_linkBlur",value:function(t,e){if(this._handleEvents()){var i=u.get(e,"link".concat(w));i?this._linkBlur(t,i):f.trigger(this._navbar,"blur".concat(L),e)}}},{key:"_linkClick",value:function(t,e){if(this._handleEvents()){if(e.classList.contains(this._opts.classLinkDisabled))return t.preventDefault(),!1;var i=u.get(e,"link".concat(w)),s=Boolean(i);if(s||(i=e),f.trigger(this._navbar,"click".concat(L),i).defaultPrevented)return t.preventDefault(),!1;var n=u.get(i,"toggler".concat(w)),o=u.get(i,"sub".concat(w)),a=o&&this._subIsVisible(o),r=u.get(o,"level".concat(w))-1,l=this._isCollapsible(),c=!o||n&&!s;if(c&&f.trigger(this._navbar,"select".concat(L),i).defaultPrevented)return t.preventDefault(),!1;!o||c&&!this._opts.showSubOnSplitLinkSelect||(this._clickActivated=this._clickActivated||Boolean(!l&&!a&&"click-then-mouseover"===this._opts.dropdownsShowTrigger&&1===r));var h="none";!a||!l||this._opts.collapsibleBehaviorAccordion||c&&this._opts.showSubOnSplitLinkSelect?(!o||(!a||l&&!this._opts.collapsibleBehaviorAccordion||c&&this._opts.showSubOnSplitLinkSelect)&&(a||l&&(!this._opts.collapsibleBehaviorAccordion||c&&!this._opts.showSubOnSplitLinkSelect)))&&(o||l)||(h="same"):h="self";var d=c?this._opts.showSubOnSplitLinkSelect:!a;return this.linkActivate(i,h,d),c?(this._opts.resetTogglerOnLinkSelect&&this._togglerAnchorHide&&"none"!==p.getComputedStyle(this._togglerAnchorHide).display&&this._togglerAnchorHide.offsetWidth>0&&this._togglerAnchorHide.click(),l||o&&!a&&this._opts.showSubOnSplitLinkSelect||this.subHideAll(),!0):o?(!l&&1===r&&a&&this.subHideAll(),t.preventDefault(),!1):void 0}}},{key:"_linkDown",value:function(t,e){if(this._handleEvents()){var i=u.get(e,"link".concat(w));i?this._linkDown(t,i):u.set(e,"mousedown".concat(w),!0)}}},{key:"_linkEnter",value:function(t,e){var i=this;if(this._handleEvents()){var s=u.get(e,"link".concat(w));if(s)this._linkEnter(t,s);else{if(!this._isTouchMode()&&("mouseover"===this._opts.dropdownsShowTrigger||"click-then-mouseover"===this._opts.dropdownsShowTrigger&&this._clickActivated||"click"!==this._opts.dropdownsHideTrigger)){this._clearTimeout(this._dropdownsShowTimeout);var n=u.get(e.closest("".concat(this._opts.selectorNav,", ").concat(this._opts.selectorSub)),"level".concat(w)),o=u.get(e,"sub".concat(w)),a=o&&this._subIsVisible(o)?"deeper":"same",r="mouseover"===this._opts.dropdownsShowTrigger||"click-then-mouseover"===this._opts.dropdownsShowTrigger&&this._clickActivated,l="click-then-mouseover"===this._opts.dropdownsShowTrigger&&1===n?1:this._opts.dropdownsShowTimeout;this._dropdownsShowTimeout=window.setTimeout((function(){i.linkActivate(e,a,r)}),l)}f.trigger(this._navbar,"mouseenter".concat(L),e)}}}},{key:"_linkFocus",value:function(t,e){if(this._handleEvents()){var i=u.get(e,"link".concat(w));if(i)this._linkFocus(t,i);else{if(!u.get(e,"mousedown".concat(w))){var s=u.get(e,"sub".concat(w)),n=this._isCollapsible()&&!this._opts.collapsibleBehaviorAccordion?"none":s&&this._subIsVisible(s)?"deeper":"same";this.linkActivate(e,n,!1)}f.trigger(this._navbar,"focus".concat(L),e)}}}},{key:"_linkLeave",value:function(t,e){if(this._handleEvents()){var i=u.get(e,"link".concat(w));if(i)this._linkLeave(t,i);else{if(!this._isTouchMode()&&"click"!==this._opts.dropdownsHideTrigger){e.blur();var s=u.get(e,"toggler".concat(w));s&&s.blur(),this._clearTimeout(this._dropdownsShowTimeout)}u.delete(e,"mousedown".concat(w)),f.trigger(this._navbar,"mouseleave".concat(L),e)}}}},{key:"_navKeyDown",value:function(t){if(this._handleEvents())switch(t.keyCode){case 27:var e=t.target;if(null!=e&&e.matches(this._opts.selectorLink)){var i=u.get(e,"link".concat(w))||e,s=u.get(i,"toggler".concat(w))||i,n=u.get(i,"sub".concat(w));if(n&&this._subIsVisible(n))return this._linkClick(t,s),void t.preventDefault()}var o=null==e?void 0:e.closest("".concat(this._opts.selectorSub));if(o){var a=u.get(o,"parent-link".concat(w)),r=u.get(a,"toggler".concat(w))||a;this._linkClick(t,r),r.focus(),t.preventDefault()}return;case 32:var l=t.target;null!=l&&l.matches(this._opts.selectorLink)&&(this._linkClick(t,l),t.preventDefault())}}},{key:"_navOut",value:function(t){var e=this;this._handleEvents()&&!this._isTouchMode()&&t.target!==this._nav&&(this._clearTimeout(this._dropdownsHideTimeout),"click"===this._opts.dropdownsHideTrigger&&("mouseout"===t.type||!t.relatedTarget||t.target&&this._nav.contains(t.target))||(this._dropdownsHideTimeout=window.setTimeout((function(){e.subHideAll()}),this._opts.dropdownsHideTimeout)))}},{key:"_navOver",value:function(t){this._handleEvents()&&!this._isTouchMode()&&t.target!==this._nav&&this._clearTimeout(this._dropdownsHideTimeout)}},{key:"_offcanvasOverlayClick",value:function(t){this._handleEvents()&&(this._togglerAnchorHide&&this._togglerAnchorHide.click(),t.preventDefault())}},{key:"_markCurrentLinkAsSelected",value:function(){var t,e=/(index|default)\.[^#/?]*/i,i=window.location.href.replace(e,""),s=i.replace(/#.*/,""),n=c(b.getAll(this._opts.selectorLink,this._nav));try{for(n.s();!(t=n.n()).done;){var o=t.value;if(!u.get(o,"link".concat(w))){var a=o.href.replace(e,"");if(a===i||a===s){o.classList.add(this._opts.classLinkSelected),o.setAttribute("aria-current","page");var r=u.get(o,"toggler".concat(w));if(r&&r.classList.add(this._opts.classLinkSelected),this._opts.markCurrentLinkParentsAsSelected){var l,h=c(b.parentsUntil(o,this._opts.selectorNav,this._opts.selectorSub));try{for(h.s();!(l=h.n()).done;){var d=l.value,v=u.get(d,"parent-link".concat(w));v.classList.add(this._opts.classLinkSelected);var _=u.get(v,"toggler".concat(w));_&&_.classList.add(this._opts.classLinkSelected)}}catch(t){h.e(t)}finally{h.f()}}}}}}catch(t){n.e(t)}finally{n.f()}}},{key:"_setTogglerSubARIA",value:function(t,e){var i=t.getAttribute("id")||this._accessIdPrefix+ ++this._idInc,s=e.getAttribute("id")||this._accessIdPrefix+ ++this._idInc;t.setAttribute("id",i),t.setAttribute("role","button"),t.setAttribute("aria-controls",s),t.setAttribute("aria-expanded","false"),e.setAttribute("id",s),e.setAttribute("aria-hidden","true"),e.setAttribute("aria-labelledby",i)}},{key:"_subHide",value:function(t){if(this._subIsVisible(t)&&!f.trigger(this._navbar,"beforehide".concat(L),t).defaultPrevented){this._animateHide(t);var e=u.get(t,"parent-link".concat(w));e.classList.remove(this._opts.classLinkExpanded);var i=u.get(e,"toggler".concat(w));i?(i.classList.remove(this._opts.classLinkExpanded),i.setAttribute("aria-expanded","false")):e.setAttribute("aria-expanded","false"),t.setAttribute("aria-hidden","true"),this._visibleSubs.splice(this._visibleSubs.indexOf(t),1),f.trigger(this._navbar,"hide".concat(L),t)}}},{key:"_subHideSubs",value:function(t){for(var e=this._visibleSubs.length-1;e>=t;e--)this._subHide(this._visibleSubs[e])}},{key:"_subIsVisible",value:function(t){return t.classList.contains(this._opts.classShow)}},{key:"_subPosition",value:function(t){var e=t.closest(this._opts.selectorItem),i=u.get(t,"level".concat(w)),s=t.classList.contains(this._opts.classSubMega),n=this._navbar.classList.contains(this._opts.classNavbarVertical),o=2===i&&!n,a="rtl"===p.getComputedStyle(this._navbar).direction,r=a&&!this._opts.dropdownsDropReverseX||!a&&this._opts.dropdownsDropReverseX;e.matches("[".concat(S,"drop-reverse-x]"))&&(r=!r);var l=this._opts.dropdownsDropReverseY;e.matches("[".concat(S,"drop-reverse-y]"))&&(l=!l);var c=r?"right":"left",h=c.charAt(0).toUpperCase()+c.slice(1),d=l?"bottom":"top",v=d.charAt(0).toUpperCase()+d.slice(1),_=e.getBoundingClientRect(),f=_[c],g=_[d],m=p.getWidth(e),y=p.getHeight(e),k=p.getComputedStyle(t),A=2===i?this._opts.dropdownsNavSubOffsetX:this._opts.dropdownsSubSubOffsetX,L=2!==i||n?this._opts.dropdownsSubSubOffsetY-Number.parseFloat(k["border".concat(v,"Width")],10)-Number.parseFloat(k["padding".concat(v)],10):this._opts.dropdownsNavSubOffsetY,T=0,O=0;if(o?(T=A,O=y+L):(T=m+A,O=L),s){var H=b.closest(t.parentElement,(function(t){return"static"!==p.getComputedStyle(t).position}));if(H){var C=H.getBoundingClientRect(),I=p.getComputedStyle(H);o?O+=Math.abs(g-C[d])-Number.parseFloat(I["border".concat(v,"Width")],10):T+=Math.abs(f-C[c])-Number.parseFloat(I["border".concat(h,"Width")],10)}}if(this._opts.dropdownsKeepInViewport&&!s){var E=p.getViewportWidth(),x=p.getViewportHeight(),D=p.getWidth(t),N=p.getHeight(t),P=r?E-f:f,R=l?x-g:g;D<E?o?P+T+D>E?T=E-D-P:P+T<0&&(T=-P):P+T+D>E&&(T=A+D<=P?-A-D:P>E-P-m+1?-P:E-D-P):T=-P,o||(N<x?R+O+N>x?O=x-N-R:R+O<0&&(O=-R):O=l?x-N-R:-R)}var j=t.style;j.zIndex=this._zIndexInc=(this._zIndexInc||this._getRootZIndex())+1,s?o?j[d]=O+"px":j[c]=T+"px":(j[c]=T+"px",j[d]=O+"px")}},{key:"_subResetPosition",value:function(t){var e=t.style;e.zIndex="",e.top="",e.left="",e.bottom="",e.right=""}},{key:"_subShow",value:function(t){if(!this._subIsVisible(t)&&(u.get(t,"beforefirstshow-fired".concat(w))||(u.set(t,"beforefirstshow-fired".concat(w),!0),!f.trigger(this._navbar,"beforefirstshow".concat(L),t).defaultPrevented))&&!f.trigger(this._navbar,"beforeshow".concat(L),t).defaultPrevented){u.set(t,"shown-before".concat(w),!0);var e=u.get(t,"parent-link".concat(w));e.classList.add(this._opts.classLinkExpanded);var i=u.get(e,"toggler".concat(w));i&&i.classList.add(this._opts.classLinkExpanded),this._isCollapsible()?this._subResetPosition(t):this._subPosition(t),this._animateShow(t),i?i.setAttribute("aria-expanded","true"):e.setAttribute("aria-expanded","true"),t.setAttribute("aria-hidden","false"),this._visibleSubs.push(t),f.trigger(this._navbar,"show".concat(L),t)}}},{key:"_togglerAnchorHideClick",value:function(t){this._handleEvents()&&(f.trigger(this._navbar,"beforehide".concat(L),this._collapse||this._offcanvas||null).defaultPrevented||("toggler"===this._opts.collapsibleResetSubsOnClickOn&&this.subHideAll(),this._collapse&&this._animateHide(this._collapse),this._offcanvas&&this._animateHide(this._offcanvas),this._offcanvasOverlay&&this._animateHide(this._offcanvasOverlay),this._togglerState&&(this._togglerState.classList.remove(this._opts.classShow),window.location.hash=window.location.hash.replace(new RegExp("^#".concat(this._togglerState.getAttribute("id"),"$")),"")),this._togglerAnchorHide&&this._togglerAnchorShow.focus(),t.preventDefault(),f.trigger(this._navbar,"hide".concat(L),this._collapse||this._offcanvas||null)))}},{key:"_togglerAnchorShowClick",value:function(t,e){this._handleEvents()&&(!u.get(e,"beforefirstshow-fired".concat(w))&&(u.set(e,"beforefirstshow-fired".concat(w),!0),f.trigger(this._navbar,"beforefirstshow".concat(L),this._collapse||this._offcanvas||null).defaultPrevented)||f.trigger(this._navbar,"beforeshow".concat(L),this._collapse||this._offcanvas||null).defaultPrevented||(this._collapse&&this._animateShow(this._collapse),this._offcanvas&&this._animateShow(this._offcanvas),this._offcanvasOverlay&&this._animateShow(this._offcanvasOverlay),this._togglerState&&this._togglerState.classList.add(this._opts.classShow),this._togglerAnchorHide&&this._togglerAnchorHide.focus(),t.preventDefault(),f.trigger(this._navbar,"show".concat(L),this._collapse||this._offcanvas||null)))}},{key:"_winResize",value:function(t){if(this._handleEvents()&&(!("onorientationchange"in window)||"orientationchange"===t.type)){var e=this._isCollapsible();this._wasCollapsible&&e||this.subHideAll(),this._wasCollapsible=e}}}],r=[{key:"destroy",value:function(){for(;T.length>0;)T[0].destroy();y.disable()}},{key:"subHideAll",value:function(){for(var t=0,e=T;t<e.length;t++)e[t].subHideAll()}},{key:"DATA_KEY",get:function(){return"sm"}},{key:"Dom",get:function(){return{Data:u,Events:f,Helpers:p,Query:b}}},{key:"MouseInputDetect",get:function(){return y}},{key:"navbars",get:function(){return T}}],o&&e(s.prototype,o),r&&e(s,r),i}();module.exports=O;
//# sourceMappingURL=smartmenus.cjs.min.js.map