use-keybinds
Version:
Lightweight keybind library for React
3 lines • 2.35 kB
JavaScript
"use client"
;var R=Object.create;var m=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var j=(e,n)=>{for(var t in n)m(e,t,{get:n[t],enumerable:!0})},E=(e,n,t,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of h(n))!N.call(e,i)&&i!==t&&m(e,i,{get:()=>n[i],enumerable:!(o=w(n,i))||o.enumerable});return e};var q=(e,n,t)=>(t=e!=null?R(F(e)):{},E(n||!e||!e.__esModule?m(t,"default",{value:e,enumerable:!0}):t,e)),A=e=>E(m({},"__esModule",{value:!0}),e);var M={};j(M,{KeybindsProvider:()=>v,useKeybinds:()=>C,useKeybindsList:()=>k});module.exports=A(M);var c=q(require("react"));var y=(e,n)=>(n?"isSequential-":"")+e.join("");var l=(0,c.createContext)({keybinds:{},combinationsToKeybindKey:{}}),I=e=>{let{children:n,keybinds:t={}}=e,o=(0,c.useMemo)(()=>Object.entries(t).reduce((i,a)=>{let f=a[0],u=a[1],b=y(u.keybind,u.isSequential);return{...i,[b]:f}},{}),[t]);return c.default.createElement(l.Provider,{value:{keybinds:t,combinationsToKeybindKey:o}},n)},v=I;var K=require("react");var r=require("react"),O=()=>{let[e,n]=(0,r.useState)(typeof window<"u"?document.activeElement:null),t=(0,r.useCallback)(()=>{n(document.activeElement)},[]),o=(0,r.useCallback)(()=>{n(null)},[]);return(0,r.useEffect)(()=>(addEventListener("focusin",t),addEventListener("focusout",o),()=>{removeEventListener("focusin",t),removeEventListener("focusout",o)}),[t,o]),e},S=O;var U=(e={})=>{let n=S(),{combinationsToKeybindKey:t}=(0,K.useContext)(l);(0,K.useEffect)(()=>{let o=new Set([]),i=new Set([]),a=()=>{o.clear(),i.clear()},f=d=>Object.keys(t).join("").includes(d),u=d=>{if(n&&["INPUT","TEXTAREA"].includes(n.tagName))return;let s=d.code;f(s)?(o.add(s),i.add(s),setTimeout(()=>i.delete(s),4e3)):a();let P=y([...o],!1),T=y([...i],!0),L=t[P],p=t[T];p&&a();let g=e[p??L];g&&(i.clear(),g(d))},b=d=>{if(n&&["INPUT","TEXTAREA"].includes(n.tagName))return;let s=d.code;o.delete(s)};return addEventListener("keydown",u),addEventListener("keyup",b),()=>{removeEventListener("keydown",u),removeEventListener("keyup",b)}},[e,t,n])},C=U;var x=require("react");var X=()=>{let{keybinds:e}=(0,x.useContext)(l);return{getKeybind:t=>e[t],keybinds:e}},k=X;0&&(module.exports={KeybindsProvider,useKeybinds,useKeybindsList});
//# sourceMappingURL=index.js.map