UNPKG

@bianic-ui/utils

Version:

Common utilties and types for Bianic UI

36 lines (33 loc) 1.12 kB
// 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