@mantine/hooks
Version:
A collection of 50+ hooks for state and UI management
36 lines (35 loc) • 1.31 kB
JavaScript
"use client";
const require_parse_hotkey = require("./parse-hotkey.cjs");
let react = require("react");
//#region packages/@mantine/hooks/src/use-hotkeys/use-hotkeys.ts
function shouldFireEvent(event, tagsToIgnore, triggerOnContentEditable = false) {
if (event.target instanceof HTMLElement) {
if (triggerOnContentEditable) return !tagsToIgnore.includes(event.target.tagName);
return !event.target.isContentEditable && !tagsToIgnore.includes(event.target.tagName);
}
return true;
}
function useHotkeys(hotkeys, tagsToIgnore = [
"INPUT",
"TEXTAREA",
"SELECT"
], triggerOnContentEditable = false) {
const handleKeydown = (0, react.useEffectEvent)((event) => {
hotkeys.forEach(([hotkey, handler, options = {
preventDefault: true,
usePhysicalKeys: false
}]) => {
if (require_parse_hotkey.getHotkeyMatcher(hotkey, options.usePhysicalKeys)(event) && shouldFireEvent(event, tagsToIgnore, triggerOnContentEditable)) {
if (options.preventDefault) event.preventDefault();
handler(event);
}
});
});
(0, react.useEffect)(() => {
document.documentElement.addEventListener("keydown", handleKeydown);
return () => document.documentElement.removeEventListener("keydown", handleKeydown);
}, []);
}
//#endregion
exports.useHotkeys = useHotkeys;
//# sourceMappingURL=use-hotkeys.cjs.map