smdm-slide-menu
Version:
A library agnostic multilevel page menu with a smooth slide effect based on CSS transitions, focused on accessibility.
1 lines • 20.4 kB
JavaScript
var e=function(e){return e.Left=`left`,e.Right=`right`,e}({}),t=function(e){return e.Back=`back`,e.Close=`close`,e.Forward=`forward`,e.Navigate=`navigate`,e.NavigateTo=`navigateTo`,e.Open=`open`,e.Initialize=`init`,e}({}),n=`slide-menu`,r={active:`${n}__submenu--active`,current:`${n}__submenu--current`,backlink:`${n}__backlink`,control:`${n}__control`,controls:`${n}__controls`,decorator:`${n}__decorator`,navigator:`${n}__navigator`,slider:`${n}__slider`,item:`${n}__item`,listItem:`${n}__listitem`,submenu:`${n}__submenu`,sliderWrapper:`${n}__slider__wrapper`,foldableWrapper:`${n}__foldable__wrapper`,hasSubMenu:`${n}__item--has-submenu`,activeItem:`${n}__item--active`,hasFoldableSubmenu:`${n}__item--has-foldable-submenu`,foldableSubmenu:`${n}__submenu--foldable`,foldableSubmenuAlignTop:`${n}__submenu--foldable-align-top`,foldOpen:`${n}--fold-open`,slideIn:`${n}--slide-in`,slideOut:`${n}--slide-out`,open:`${n}--open`,left:`${n}--left`,right:`${n}--right`,title:`${n}__title`,hiddenOnRoot:`${n}--hidden-on-root-level`,invisibleOnRoot:`${n}--invisible-on-root-level`};function i(e,t,n){let r=[];for(;e&&e.parentElement!==null&&(n===void 0||r.length<n);)e instanceof HTMLElement&&e.matches(t)&&r.push(e),e=e.parentElement;return r}function a(e,t){let n=i(e,t,1);return n.length?n[0]:null}var o=`a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type="text"]:not([disabled]), input[type="radio"]:not([disabled]), input[type="checkbox"]:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"]):not([disabled])`;function s(e){Array.from(e?.querySelectorAll(`a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type="text"]:not([disabled]), input[type="radio"]:not([disabled]), input[type="checkbox"]:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"]):not([disabled])`)??[]).find(e=>c(e))?.focus()}function c(e){for(let t=e;t&&t!==document;t=t.parentNode)if(t.style?.display===`none`||getComputedStyle(t).display===`none`)return!1;return!0}function l(e,t,n,r){let i=t.querySelectorAll(o),a=n??i[0],s=r??i[i.length-1];e.key===`Tab`&&(e.shiftKey?document.activeElement===a&&(s.focus(),e.preventDefault()):document.activeElement===s&&(a.focus(),e.preventDefault()))}function u(e){try{return document.querySelector(e),!0}catch{return!1}}var d=0,f=class{get isActive(){return this.active}constructor(e,t,n,i){this.menuElem=e,this.options=t,this.anchorElem=n,this.isFoldable=!1,this.active=!1,this.id=e.id?e.id:`smdm-`+d,e.id=this.id,d++,this.name=this.anchorElem?.textContent??``,this.ref=n?n.href.replace(window.location.origin,``):`/`,this.parentMenuElem=n?.parentElement?.closest(`ul`)??void 0,this.parent=this.parentMenuElem?i?.get(this.parentMenuElem):void 0,this.isFoldable=!!n?.classList.contains(r.hasFoldableSubmenu)}mount(){let{anchorElem:e,menuElem:n,options:i}=this;return e&&(e.classList.add(r.hasSubMenu),i.navigationButtons||(e.dataset.action=t.NavigateTo,e.dataset.arg=this.id,e.role=`button`,e.setAttribute(`aria-controls`,this.id),e.setAttribute(`aria-expanded`,`false`))),n.classList.add(r.submenu),n.dataset.smdmId=this.id,n.querySelectorAll(`li`).forEach(e=>{e.classList.add(r.listItem)}),n.querySelectorAll(`a`).forEach(e=>{e.classList.add(r.item)}),this.isFoldable&&n.classList.add(r.foldableSubmenu),i.showBackLink&&this.addBackLink(i),this.addNavigatorButton(i),this}addBackLink(e=this.options){let n=this.anchorElem?.textContent??``,i=document.createElement(`a`);i.innerHTML=(e.backLinkBefore??``)+n+(e.backLinkAfter??``),i.classList.add(r.backlink,r.control,r.item),i.dataset.action=t.Back,i.setAttribute(`href`,`#`);let a=document.createElement(`li`);return a.appendChild(i),this.menuElem.insertBefore(a,this.menuElem.firstChild),i}addNavigatorButton(e){if(!e.navigationButtons)return;let n=Array.from(this.anchorElem?.parentElement?.children??[]).find(e=>e.classList.contains(r.navigator))??document.createElement(`button`);n.classList.add(r.navigator),n.dataset.action=n.dataset?.action??t.NavigateTo,n.dataset.arg=n.dataset?.arg??this.id,n.setAttribute(`aria-controls`,this.id),n.setAttribute(`aria-expanded`,`false`),n.setAttribute(`tabindex`,`0`),n.title=n.title?n.title:e.navigationButtonsLabel+`: `+this.name,n.tagName!==`BUTTON`&&(n.role=`button`),typeof e.navigationButtons==`string`&&!n.innerHTML.trim()?n.innerHTML=e.navigationButtons:n.getAttribute(`aria-label`)||n.setAttribute(`aria-label`,e.navigationButtonsLabel+`: `+this.name),this.anchorElem?.insertAdjacentElement(`afterend`,n),this.navigatorElem=n}deactivate(){return this.active=!1,this.menuElem.classList.remove(r.active),this.menuElem.classList.remove(r.current),this.options.navigationButtons?this.navigatorElem?.setAttribute(`aria-expanded`,`false`):this.anchorElem?.setAttribute(`aria-expanded`,`false`),this}activate(){return this.active=!0,this.menuElem.classList.add(r.active),this.menuElem.classList.add(r.current),this.options.navigationButtons?this.navigatorElem?.setAttribute(`aria-expanded`,`true`):this.anchorElem?.setAttribute(`aria-expanded`,`true`),this}setInvisible(){return this.isActive&&this.menuElem.classList.add(r.active),this.menuElem.classList.remove(r.current),this}enableTabbing(){this.menuElem.removeAttribute(`inert`)}disableTabbing(){this.menuElem.setAttribute(`inert`,`true`)}appendTo(e){return e.appendChild(this.menuElem),this}getClosestUnfoldableSlide(){return this.isFoldable?this.getAllParents().find(e=>!e.isFoldable):this}getAllFoldableParents(){return this.isFoldable?this.getAllParents().filter(e=>e.isFoldable):[]}getFirstUnfoldableParent(){return this.getAllParents().find(e=>!e.canFold())}hasParent(e){return this.getAllParents().some(t=>t.id===e?.id)}getAllParents(){let e=[],t=this.parent;for(;t;)e.push(t),t=t.parent;return e}focusFirstElem(){s(this.menuElem)}canFold(){return this.isFoldable&&window.innerWidth>=this.options.minWidthFold}matches(e){let t=u(e.trim());return!!(this.id===e||this.menuElem.id===e||this.anchorElem?.id===e.replace(`#`,``)||e.replace(window.location.origin,``).startsWith(this.ref)||t&&this.menuElem.querySelector(e.trim()+`:not(.${r.hasSubMenu})`))}contains(e){return this.anchorElem===e||this.menuElem.contains(e)}},p=class{constructor(e,t,n,r){this.slides=e,this.sliderWrapperElem=t,this.foldableWrapperElem=n,this.menuElem=r,this._isOpen=!1}get isOpen(){return this._isOpen}open(){this.slides.forEach(e=>{e.isFoldable&&e.appendTo(this.foldableWrapperElem)}),this.menuElem.classList.add(r.foldOpen),this._isOpen=!0}close(){this.slides.forEach(e=>{e.isFoldable&&e.appendTo(this.sliderWrapperElem)}),this.menuElem.classList.remove(r.foldOpen),this._isOpen=!1}},m=class{constructor(){this.isOpen=!1}open(){}close(){}},h=class{constructor(e,t,n,r,i){this.menuElem=e,this.sliderElem=t,this.foldableWrapperElem=n,this.sliderWrapperElem=r,this.triggerEvent=i,this._isAnimating=!1,this.lastAction=null,this.boundOnTransitionEnd=this.onTransitionEnd.bind(this),this.menuElem.addEventListener(`transitionend`,this.boundOnTransitionEnd),this.sliderElem.addEventListener(`transitionend`,this.boundOnTransitionEnd)}get isAnimating(){return this._isAnimating}moveElem(e,t,n=`%`,r){r!==void 0&&(this.lastAction=r),setTimeout(()=>{t.toString().includes(n)||(t+=n);let r=`translateX(${t})`;e.style.transform!==r&&(this._isAnimating=!0,e.style.transform=r)},0)}runWithoutAnimation(e){let t=[this.menuElem,this.sliderElem];t.forEach(e=>e.style.transition=`none`),e(),this.menuElem.offsetHeight,t.forEach(e=>e.style.removeProperty(`transition`)),this._isAnimating=!1}setLastAction(e){this.lastAction=e}destroy(){this.menuElem.removeEventListener(`transitionend`,this.boundOnTransitionEnd),this.sliderElem.removeEventListener(`transitionend`,this.boundOnTransitionEnd)}onTransitionEnd(e){e.target!==this.menuElem&&e.target!==this.sliderElem&&e.target!==this.foldableWrapperElem&&e.target!==this.sliderWrapperElem||(this._isAnimating=!1,this.lastAction&&=(this.triggerEvent(this.lastAction,!0),null))}},g=class{constructor(e,t){this.options=e,this.callbacks=t,this.keydownHandler=null,this.menuKeydownHandler=null}init(){this.initDocumentKeybindings(),this.initMenuKeybindings()}destroy(){this.keydownHandler&&=(document.removeEventListener(`keydown`,this.keydownHandler),null),this.menuKeydownHandler&&=(this.callbacks.getMenuElem().removeEventListener(`keydown`,this.menuKeydownHandler),null)}initDocumentKeybindings(){this.keydownHandler=e=>{let t=document.activeElement;switch(e.key){case this.options.keyClose:e.preventDefault(),this.callbacks.close();break;case this.options.keyOpen:e.preventDefault(),this.callbacks.show();break;case`Enter`:t?.classList.contains(r.navigator)&&t.click();break}},document.addEventListener(`keydown`,this.keydownHandler)}initMenuKeybindings(){let e=this.callbacks.getMenuElem();this.menuKeydownHandler=t=>{t.key===` `&&t.target instanceof HTMLAnchorElement&&t.target.role===`button`&&(t.preventDefault(),t.target.click());let n=e.querySelector(`.${r.controls} .${r.control}:not([disabled]):not([tabindex="-1"])`);l(t,this.callbacks.getActiveSubmenu()?.menuElem??e,n)},e.addEventListener(`keydown`,this.menuKeydownHandler)}},_={backLinkAfter:``,backLinkBefore:``,showBackLink:!0,keyClose:`Escape`,keyOpen:``,position:e.Right,submenuLinkBefore:``,closeOnClickOutside:!1,navigationButtonsLabel:`Open submenu `,navigationButtons:!1,menuWidth:320,minWidthFold:640,transitionDuration:300,dynamicOpenDefault:!1,debug:!1,id:``},v=0,y=!1,b=class{constructor(e,i){if(this.lastFocusedElement=null,this.isOpen=!1,this.slides=[],this.sortedSlides=[],this.slidesByElem=new WeakMap,this.menuTitleDefaultText=`Menu`,this.cachedDefaultOpenTarget=void 0,this.resizeObserver=null,this.outsideClickHandler=null,!e)throw Error("Argument `elem` must be a valid HTML node");for(this.options=Object.assign({},_,i),this.menuElem=e,this.options.id=this.menuElem.id?this.menuElem.id:`smdm-slide-menu-`+v,v++,y||(y=!0,S()),this.menuElem.id=this.options.id,this.menuElem.classList.add(n),this.menuElem.classList.add(this.options.position),this.menuElem.role=`navigation`,this.menuElem._slideMenu=this,this.menuElem.style.setProperty(`--smdm-sm-menu-width`,`${this.options.menuWidth}px`),this.menuElem.style.setProperty(`--smdm-sm-min-width-fold`,`${this.options.minWidthFold}px`),this.menuElem.style.setProperty(`--smdm-sm-transition-duration`,`${this.options.transitionDuration}ms`),this.menuElem.style.setProperty(`--smdm-sm-menu-level`,`0`),this.sliderElem=document.createElement(`div`),this.sliderElem.classList.add(r.slider);this.menuElem.firstChild;)this.sliderElem.appendChild(this.menuElem.firstChild);if(this.menuElem.appendChild(this.sliderElem),this.sliderWrapperElem=document.createElement(`div`),this.sliderWrapperElem.classList.add(r.sliderWrapper),this.sliderElem.appendChild(this.sliderWrapperElem),this.foldableWrapperElem=document.createElement(`div`),this.foldableWrapperElem.classList.add(r.foldableWrapper),this.sliderElem.after(this.foldableWrapperElem),this.menuTitle=this.menuElem.querySelector(`.${r.title}`),this.menuTitleDefaultText=this.menuTitle?.textContent?.trim()??this.menuTitleDefaultText,this.animation=new h(this.menuElem,this.sliderElem,this.foldableWrapperElem,this.sliderWrapperElem,(e,t)=>this.triggerEvent(e,t)),this.initMenu(),this.slides.length===0)throw Error(`SlideMenu: no <ul> found inside the menu element. A root <ul> is required.`);this.initSlides();let a=this.slides.some(e=>e.isFoldable);this.fold=a?new p(this.slides,this.sliderWrapperElem,this.foldableWrapperElem,this.menuElem):new m,this.sortedSlides=this.slides.slice().sort((e,t)=>{let n=e.ref.split(`/`).length,r=t.ref.split(`/`).length;return r===n?t.ref.length-e.ref.length:r-n}),this.cachedDefaultOpenTarget=this.resolveDefaultOpenTarget(),this.keyboard=new g({keyClose:this.options.keyClose,keyOpen:this.options.keyOpen},{close:()=>this.close(),show:()=>this.show(),getActiveSubmenu:()=>this.activeSubmenu,getMenuElem:()=>this.menuElem}),this.initEventHandlers(),this.menuElem.style.display=`flex`,this.activeSubmenu=this.rootSlide.activate(),this.navigateTo(this.cachedDefaultOpenTarget??this.rootSlide,!1),a&&this.initResizeObserver(),this.menuElem.setAttribute(`inert`,`true`),this.slides.forEach(e=>{e.disableTabbing()}),this.triggerEvent(t.Initialize)}resolveDefaultOpenTarget(){let e=this.menuElem.dataset.openDefault??this.menuElem.dataset.defaultTarget??this.menuElem.dataset.openTarget??this.menuElem.dataset.defaultOpenTarget;if(e)return this.getTargetSlideByIdentifier(e)}get rootSlide(){return this.slides[0]}get isFoldOpen(){return this.fold.isOpen}destroy(){clearTimeout(this.visibilityTimeoutId),clearTimeout(this.navigateTimeoutId),this.animation.destroy(),this.keyboard.destroy(),this.outsideClickHandler&&document.removeEventListener(`click`,this.outsideClickHandler),this.resizeObserver?.disconnect(),this.menuElem.removeAttribute(`inert`),document.body?.classList.remove(r.open),document.body?.removeAttribute(`data-slide-menu-level`),delete this.menuElem._slideMenu}debugLog(...e){this.options.debug&&console.log(...e)}toggleVisibility(n,r=!0){let i;if(n===void 0){this.isOpen?this.close(r):this.show(r);return}clearTimeout(this.visibilityTimeoutId),n?(i=0,this.lastFocusedElement=document.activeElement,this.visibilityTimeoutId=setTimeout(()=>{this.activeSubmenu?.focusFirstElem()},this.options.transitionDuration)):(i=this.options.position===e.Left?`-100%`:`100%`,this.visibilityTimeoutId=setTimeout(()=>{this.slides.forEach(e=>!e.isActive&&e.deactivate()),this.lastFocusedElement?.focus(),this.fold.close()},this.options.transitionDuration)),this.isOpen=!!n,this.animation.moveElem(this.menuElem,i,`%`,n?t.Open:t.Close)}getTargetSlideDynamically(){let e=location.pathname,t=location.hash,n=this.slides.find(e=>e.matches(t));return this.slides.find(t=>t.matches(e))??n}open(e=!0){let t=(this.options.dynamicOpenDefault?this.getTargetSlideDynamically():this.cachedDefaultOpenTarget)??this.activeSubmenu;this.menuElem.removeAttribute(`inert`),t&&this.navigateTo(t),this.show(e)}toggle(e=!0){if(this.isOpen){this.close(e);return}this.open(e)}show(e=!0){this.triggerEvent(t.Open),this.toggleVisibility(!0,e),document.body?.classList.add(r.open)}close(e=!0){this.triggerEvent(t.Close),this.toggleVisibility(!1,e),this.menuElem.setAttribute(`inert`,`true`),this.slides.forEach(e=>{e.disableTabbing()}),document.body?.classList.remove(r.open)}back(e=!1){let t=this.activeSubmenu?.parent??this.rootSlide;e&&(this.activeSubmenu=this.activeSubmenu?.getClosestUnfoldableSlide()??this.rootSlide,t=this.activeSubmenu?.parent??this.rootSlide,this.fold.close()),this.navigateTo(t)}navigateTo(e,n=!0){n&&!this.isOpen&&this.show();let r=this.findNextMenu(e),i=this.activeSubmenu,a=r.getAllParents(),o=r.getFirstUnfoldableParent(),s=new Set([r,...r.getAllFoldableParents()]);o&&s.add(o);let c=i?.hasParent(r),l=r?.hasParent(i);n&&(this.triggerEvent(t.Navigate),c?this.triggerEvent(t.Back):l?this.triggerEvent(t.Forward):this.triggerEvent(t.NavigateTo)),this.updateMenuTitle(r,o),this.setTabbing(r,o,i,a);let u=[r,...a];this.activateMenus(u,c,i,r);let d=this.setSlideLevel(r,c);this.hideControlsIfOnRootLevel(d),this.activeSubmenu=r,clearTimeout(this.navigateTimeoutId),this.navigateTimeoutId=setTimeout(()=>{n&&r.focusFirstElem(),c&&i?.deactivate(),this.slides.forEach(e=>{e.isActive&&!s.has(e)&&e.setInvisible()})},this.options.transitionDuration)}setBodyTagSlideLevel(e){document.body?.setAttribute(`data-slide-menu-level`,e.toString())}setTabbing(e,t,n,r){if(this.isOpen&&this.menuElem.removeAttribute(`inert`),e.canFold()){this.fold.open(),e.getAllParents().forEach(e=>{e.canFold()&&e.enableTabbing()}),t?.enableTabbing(),t?.getAllParents().forEach(e=>{e.disableTabbing()});return}n?.canFold()&&!e.canFold()&&this.fold.close(),r.forEach(e=>{e.disableTabbing()}),e.enableTabbing()}activateMenus(e,t,n,r){let i=e.map(e=>e?.id);this.slides.forEach(e=>{if(!i.includes(e.id)){if(t&&e.id===n?.id)return;e.deactivate(),e.disableTabbing()}}),e.forEach(e=>{e?.activate()}),r.enableTabbing()}findNextMenu(e){if(typeof e==`string`){let t=this.getTargetSlideByIdentifier(e);if(t instanceof f)return t;throw Error("Invalid parameter `target`. A valid query selector is required.")}if(e instanceof HTMLElement){let t=this.slides.find(t=>t.contains(e));if(t instanceof f)return t;throw Error("Invalid parameter `target`. Not found in slide menu")}if(e instanceof f)return e;throw Error(`No valid next slide fund`)}hideControlsIfOnRootLevel(e){let t=document.querySelectorAll(`.${r.control}.${r.hiddenOnRoot}, .${r.control}.${r.invisibleOnRoot}`);e===0?t.forEach(e=>{e.setAttribute(`tabindex`,`-1`)}):t.forEach(e=>{e.removeAttribute(`tabindex`)})}setSlideLevel(e,t=!1){let n=Array.from(this.sliderWrapperElem.querySelectorAll(`.${r.active}, .${r.current}`)).length,i=e?.canFold()?0:Number(t),a=Math.max(1,n)-1-i;return this.setBodyTagSlideLevel(a),this.menuElem.style.setProperty(`--smdm-sm-menu-level`,`${a}`),a}updateMenuTitle(e,t){if(this.menuTitle){let n=e?.anchorElem?.textContent??this.menuTitleDefaultText,r=this.options.navigationButtons??``,i=this.options.submenuLinkBefore??``;e.canFold()&&t&&(n=t.anchorElem?.textContent??n),r&&typeof r==`string`&&(n=n.replace(r,``)),i&&typeof i==`string`&&(n=n.replace(i,``)),this.menuTitle.tagName===`A`&&(this.menuTitle.href=e.ref),this.menuTitle.innerText=n.trim()}}getTargetSlideByIdentifier(e){return this.sortedSlides.find(t=>t.matches(e))}initEventHandlers(){this.options.closeOnClickOutside&&(this.outsideClickHandler=e=>{this.isOpen&&!this.animation.isAnimating&&!this.menuElem.contains(e.target)&&!e.target?.closest(`.`+r.control)&&this.close()},document.addEventListener(`click`,this.outsideClickHandler)),this.keyboard.init()}triggerEvent(e,t=!1){let n=`sm.${e}${t?`-after`:``}`,r=new CustomEvent(n);this.menuElem.dispatchEvent(r)}markSelectedItem(e){this.menuElem.querySelectorAll(`.`+r.activeItem).forEach(e=>{e.classList.remove(r.activeItem)}),e.classList.add(r.activeItem)}initMenu(){this.animation.runWithoutAnimation(()=>{switch(this.options.position){case e.Left:Object.assign(this.menuElem.style,{left:0,right:`auto`,transform:`translateX(-100%)`});break;default:Object.assign(this.menuElem.style,{left:`auto`,right:0});break}});let t=this.menuElem.querySelector(`ul`);if(t){let e=new f(t,this.options,void 0,this.slidesByElem);this.slidesByElem.set(e.menuElem,e),e.mount(),this.slides.push(e)}}initResizeObserver(){this.resizeObserver=new ResizeObserver(e=>{if(e.length===0)return;let t=e[0].contentRect.width;if(t<this.options.minWidthFold&&this.fold.isOpen){this.fold.close();let e=this.activeSubmenu?.getAllParents(),t=e?.find(e=>!e.canFold());this.setTabbing(this.activeSubmenu??this.rootSlide,t,this.activeSubmenu,e??[]),this.setSlideLevel(this.activeSubmenu??this.rootSlide)}if(t>this.options.minWidthFold&&!this.fold.isOpen){this.fold.open();let e=this.activeSubmenu?.getAllParents(),t=e?.find(e=>!e.canFold());this.setTabbing(this.activeSubmenu??this.rootSlide,t,this.activeSubmenu,e??[]),this.setSlideLevel(this.activeSubmenu??this.rootSlide)}}),this.resizeObserver.observe(document.body)}initSlides(){this.menuElem.querySelectorAll(`a`).forEach(e=>{if(e.parentElement===null)return;let t=e.parentElement.querySelector(`ul`);if(!t)return;let n=new f(t,this.options,e,this.slidesByElem);this.slidesByElem.set(n.menuElem,n),n.mount(),this.slides.push(n)}),this.slides.forEach(e=>{e.appendTo(this.sliderWrapperElem)})}get onlyNavigateDecorator(){return!!this.options.navigationButtons}},x=new Set([`open`,`close`,`toggle`,`show`,`back`,`navigateTo`,`markSelectedItem`]);window.SlideMenu=b,window.dispatchEvent(new Event(`sm.ready`));function S(){document.addEventListener(`click`,e=>{let t=e=>e?e.classList.contains(r.control)||e.classList.contains(r.hasSubMenu)||e.classList.contains(r.navigator):!1,i=t(e.target)?e.target:e.target?.closest(`.${r.navigator}[data-action], .${r.control}[data-action], .${r.hasSubMenu}[data-action]`);if(!i||!t(i))return;let o=i.getAttribute(`data-target`),s=!o||o===`this`?a(i,`.${n}`):document.getElementById(o)??document.querySelector(o);if(!s)throw Error(`Unable to find menu ${o}`);let c=s._slideMenu;c&&!c.onlyNavigateDecorator&&e.preventDefault();let l=i.getAttribute(`data-action`),u=i.getAttribute(`data-arg`)??i.href,d={false:!1,true:!0,null:null,undefined:void 0},f=Object.keys(d).includes(u?.toString()??``)?d[u]:u;if(c&&l&&x.has(l)){let e=c;typeof e[l]==`function`&&(f?e[l](f):e[l]())}})}