UNPKG

@tolokoban/ui

Version:

React components with theme

37 lines 2.52 kB
import * as React from "react"; /** * A keyboard shortcut to trigger an action. * Use these prefixes (in that order) for modifiers keys: * * `C-` for **Control**. * * `S-` for **Shift**. * * `M-` for **Alt** (Meta). * For example, if you want to react at Shift + Control + Enter, * the hotkey willl be "C-S-enter". * * @param hotkey * @param onKeyDown * @param enabled */ export function useHotKey(hotkey, onKeyDown, enabled = true) { React.useEffect(() => { if (!enabled || !hotkey) return; const handleKeyDown = (evt) => { let current = evt.key.toLowerCase(); if (evt.altKey) current = `M-${current}`; if (evt.shiftKey) current = `S-${current}`; if (evt.ctrlKey) current = `C-${current}`; if (current === hotkey) { evt.preventDefault(); evt.stopPropagation(); onKeyDown(); } }; window.addEventListener("keydown", handleKeyDown, true); return () => window.removeEventListener("keydown", handleKeyDown, true); }, [enabled, hotkey, onKeyDown]); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90a2V5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL2hvdGtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQTtBQTRDOUI7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FDckIsTUFBMEIsRUFDMUIsU0FBcUIsRUFDckIsT0FBTyxHQUFHLElBQUk7SUFFZCxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNqQixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU07UUFFL0IsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFrQixFQUFFLEVBQUU7WUFDekMsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtZQUNuQyxJQUFJLEdBQUcsQ0FBQyxNQUFNO2dCQUFFLE9BQU8sR0FBRyxLQUFLLE9BQU8sRUFBRSxDQUFBO1lBQ3hDLElBQUksR0FBRyxDQUFDLFFBQVE7Z0JBQUUsT0FBTyxHQUFHLEtBQUssT0FBTyxFQUFFLENBQUE7WUFDMUMsSUFBSSxHQUFHLENBQUMsT0FBTztnQkFBRSxPQUFPLEdBQUcsS0FBSyxPQUFPLEVBQUUsQ0FBQTtZQUN6QyxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDckIsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFBO2dCQUNwQixHQUFHLENBQUMsZUFBZSxFQUFFLENBQUE7Z0JBQ3JCLFNBQVMsRUFBRSxDQUFBO1lBQ2YsQ0FBQztRQUNMLENBQUMsQ0FBQTtRQUNELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ3ZELE9BQU8sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDM0UsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFBO0FBQ3BDLENBQUMifQ==