UNPKG

@useloops/design-system

Version:

The official React based Loops design system

2 lines (1 loc) 905 B
"use strict";var e=require("react");exports.useKeyCombo=(t,r,s=null)=>{const n=e.useRef(r);e.useEffect(()=>{n.current=r},[r]);const o=e=>{if("string"!=typeof e)return e;const t=e.toLowerCase().split("+");return{key:t[t.length-1],altKey:t.includes("alt"),ctrlKey:t.includes("ctrl")||t.includes("control"),metaKey:t.includes("meta")||t.includes("cmd")||t.includes("command"),shiftKey:t.includes("shift")}},c=Array.isArray(t)?t.map(o):[o(t)],i=e.useCallback(e=>{for(const t of c)if("string"==typeof t){if(e.key.toLowerCase()===t.toLowerCase())return void n.current(e)}else{const r="*"===t.key||e.key.toLowerCase()===t.key.toLowerCase(),s=e.altKey===!!t.altKey&&e.ctrlKey===!!t.ctrlKey&&e.metaKey===!!t.metaKey&&e.shiftKey===!!t.shiftKey;if(r&&s)return void n.current(e)}},[c]);e.useEffect(()=>{const e=s??document,t=i;return e?.addEventListener("keydown",t),()=>e?.removeEventListener("keydown",t)},[i,s])};