export const isEnter = e => { return e.key === 'Enter'; }; export const isEscape = e => { return e.key === 'Escape'; }; export const hasPressedShift = e => { return e.shiftKey; }; export const hasPressedCommand = e => { return e.metaKey; }; export const hasPressedEnterAndNotCmdOrShift = e => { return isEnter(e) && !hasPressedCommand(e) && !hasPressedShift(e); }; export const hasPressedCommandAndEnter = e => { return hasPressedCommand(e) && isEnter(e); }; /** * Determines whether the active element is typeable. * * @param {KeyboardEvent} e - The keyboard event object. * @returns {boolean} `true` if the active element is typeable, `false` otherwise. * * @example * document.addEventListener('keydown', e => { * if (isActiveElementTypeable(e)) { * handleTypeableElement(e); * } * }); */ export const isActiveElementTypeable = e => { /** @type {HTMLElement | null} */ // @ts-ignore const activeElement = e.target || document.activeElement; return !!( activeElement?.tagName === 'INPUT' || activeElement?.tagName === 'NINJA-KEYS' || activeElement?.tagName === 'TEXTAREA' || activeElement?.contentEditable === 'true' || activeElement?.className?.includes('ProseMirror') ); };