@bianic-ui/utils
Version:
Common utilties and types for Bianic UI
36 lines (33 loc) • 1.12 kB
JavaScript
// Credit goes to Diego Haz for this one
// https://github.com/reakit/reakit/blob/master/packages/reakit-utils/src/createOnKeyDown.ts
import { runIfFn } from "./function";
import { normalizeEventKey } from "./dom";
export function createOnKeyDown(options) {
var {
keyMap,
onKey,
stopPropagation,
onKeyDown,
shouldKeyDown = () => true,
preventDefault = true
} = options;
return event => {
if (!keyMap) return;
var finalKeyMap = runIfFn(keyMap, event);
var shouldPreventDefault = runIfFn(preventDefault, event);
var shouldStopPropagation = runIfFn(stopPropagation, event);
var eventKey = normalizeEventKey(event);
if (eventKey in finalKeyMap) {
var action = finalKeyMap[eventKey];
if (typeof action === "function" && shouldKeyDown(event)) {
if (shouldPreventDefault) event.preventDefault();
if (shouldStopPropagation) event.stopPropagation();
onKey == null ? void 0 : onKey(event);
action(event);
return;
}
}
onKeyDown == null ? void 0 : onKeyDown(event);
};
}
//# sourceMappingURL=keydown.js.map