use-keybinds
Version:
Lightweight keybind library for React
3 lines • 1.26 kB
JavaScript
"use client"
import{useContext as x,useEffect as T}from"react";import{useCallback as b,useEffect as v,useState as S}from"react";var C=()=>{let[i,e]=S(typeof window<"u"?document.activeElement:null),n=b(()=>{e(document.activeElement)},[]),t=b(()=>{e(null)},[]);return v(()=>(addEventListener("focusin",n),addEventListener("focusout",t),()=>{removeEventListener("focusin",n),removeEventListener("focusout",t)}),[n,t]),i},m=C;import N,{createContext as k,useMemo as j}from"react";var d=(i,e)=>(e?"isSequential-":"")+i.join("");var K=k({keybinds:{},combinationsToKeybindKey:{}});var P=(i={})=>{let e=m(),{combinationsToKeybindKey:n}=x(K);T(()=>{let t=new Set([]),r=new Set([]),c=()=>{t.clear(),r.clear()},f=s=>Object.keys(n).join("").includes(s),a=s=>{if(e&&["INPUT","TEXTAREA"].includes(e.tagName))return;let o=s.code;f(o)?(t.add(o),r.add(o),setTimeout(()=>r.delete(o),4e3)):c();let E=d([...t],!1),p=d([...r],!0),g=n[E],u=n[p];u&&c();let l=i[u??g];l&&(r.clear(),l(s))},y=s=>{if(e&&["INPUT","TEXTAREA"].includes(e.tagName))return;let o=s.code;t.delete(o)};return addEventListener("keydown",a),addEventListener("keyup",y),()=>{removeEventListener("keydown",a),removeEventListener("keyup",y)}},[i,n,e])},z=P;export{z as default};
//# sourceMappingURL=useKeybinds.mjs.map