UNPKG

@flexilla/utilities

Version:

Utilities package for flexilla library

2 lines (1 loc) 1.12 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("./selector.cjs"),w=({containerElement:p,targetChildren:a="a:not([disabled]), button:not([disabled])",direction:n})=>{let s=!1;const l=g.$getEl(p)||document.body,t=typeof a=="string"?g.$$(a,l):a,f=r=>{if(r.preventDefault(),l.focus(),t.length===0)return;const c=r.key,u=document.activeElement;let e=t.findIndex(o=>o===u);if(e===-1){c==="ArrowUp"||c==="ArrowLeft"?t[t.length-1].focus():t[0].focus();return}const i=o=>o>0?o-1:t.length-1,d=o=>o<t.length-1?o+1:0,b=n==="all"||n==="up-down",k=n==="all"||n==="left-right";switch(c){case"ArrowDown":b&&(r.preventDefault(),e=d(e));break;case"ArrowRight":k&&(r.preventDefault(),e=d(e));break;case"ArrowUp":b&&(r.preventDefault(),e=i(e));break;case"ArrowLeft":k&&(r.preventDefault(),e=i(e));break;case"Home":r.preventDefault(),e=0;break;case"End":r.preventDefault(),e=t.length-1;break;default:return}t[e]!==u&&t[e].focus()};return{make:()=>{s||(document.addEventListener("keydown",f),s=!0)},destroy:()=>{s&&(document.removeEventListener("keydown",f),s=!1)}}};exports.keyboardNavigation=w;