UNPKG

@material/dom

Version:
126 lines 4.28 kB
/** * @license * Copyright 2020 Google Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /** * KEY provides normalized string values for keys. */ export var KEY = { UNKNOWN: 'Unknown', BACKSPACE: 'Backspace', ENTER: 'Enter', SPACEBAR: 'Spacebar', PAGE_UP: 'PageUp', PAGE_DOWN: 'PageDown', END: 'End', HOME: 'Home', ARROW_LEFT: 'ArrowLeft', ARROW_UP: 'ArrowUp', ARROW_RIGHT: 'ArrowRight', ARROW_DOWN: 'ArrowDown', DELETE: 'Delete', ESCAPE: 'Escape', TAB: 'Tab', }; var normalizedKeys = new Set(); // IE11 has no support for new Map with iterable so we need to initialize this // by hand. normalizedKeys.add(KEY.BACKSPACE); normalizedKeys.add(KEY.ENTER); normalizedKeys.add(KEY.SPACEBAR); normalizedKeys.add(KEY.PAGE_UP); normalizedKeys.add(KEY.PAGE_DOWN); normalizedKeys.add(KEY.END); normalizedKeys.add(KEY.HOME); normalizedKeys.add(KEY.ARROW_LEFT); normalizedKeys.add(KEY.ARROW_UP); normalizedKeys.add(KEY.ARROW_RIGHT); normalizedKeys.add(KEY.ARROW_DOWN); normalizedKeys.add(KEY.DELETE); normalizedKeys.add(KEY.ESCAPE); normalizedKeys.add(KEY.TAB); var KEY_CODE = { BACKSPACE: 8, ENTER: 13, SPACEBAR: 32, PAGE_UP: 33, PAGE_DOWN: 34, END: 35, HOME: 36, ARROW_LEFT: 37, ARROW_UP: 38, ARROW_RIGHT: 39, ARROW_DOWN: 40, DELETE: 46, ESCAPE: 27, TAB: 9, }; var mappedKeyCodes = new Map(); // IE11 has no support for new Map with iterable so we need to initialize this // by hand. mappedKeyCodes.set(KEY_CODE.BACKSPACE, KEY.BACKSPACE); mappedKeyCodes.set(KEY_CODE.ENTER, KEY.ENTER); mappedKeyCodes.set(KEY_CODE.SPACEBAR, KEY.SPACEBAR); mappedKeyCodes.set(KEY_CODE.PAGE_UP, KEY.PAGE_UP); mappedKeyCodes.set(KEY_CODE.PAGE_DOWN, KEY.PAGE_DOWN); mappedKeyCodes.set(KEY_CODE.END, KEY.END); mappedKeyCodes.set(KEY_CODE.HOME, KEY.HOME); mappedKeyCodes.set(KEY_CODE.ARROW_LEFT, KEY.ARROW_LEFT); mappedKeyCodes.set(KEY_CODE.ARROW_UP, KEY.ARROW_UP); mappedKeyCodes.set(KEY_CODE.ARROW_RIGHT, KEY.ARROW_RIGHT); mappedKeyCodes.set(KEY_CODE.ARROW_DOWN, KEY.ARROW_DOWN); mappedKeyCodes.set(KEY_CODE.DELETE, KEY.DELETE); mappedKeyCodes.set(KEY_CODE.ESCAPE, KEY.ESCAPE); mappedKeyCodes.set(KEY_CODE.TAB, KEY.TAB); var navigationKeys = new Set(); // IE11 has no support for new Set with iterable so we need to initialize this // by hand. navigationKeys.add(KEY.PAGE_UP); navigationKeys.add(KEY.PAGE_DOWN); navigationKeys.add(KEY.END); navigationKeys.add(KEY.HOME); navigationKeys.add(KEY.ARROW_LEFT); navigationKeys.add(KEY.ARROW_UP); navigationKeys.add(KEY.ARROW_RIGHT); navigationKeys.add(KEY.ARROW_DOWN); /** * normalizeKey returns the normalized string for a navigational action. */ export function normalizeKey(evt) { var key = evt.key; // If the event already has a normalized key, return it if (normalizedKeys.has(key)) { return key; } // tslint:disable-next-line:deprecation var mappedKey = mappedKeyCodes.get(evt.keyCode); if (mappedKey) { return mappedKey; } return KEY.UNKNOWN; } /** * isNavigationEvent returns whether the event is a navigation event */ export function isNavigationEvent(evt) { return navigationKeys.has(normalizeKey(evt)); } //# sourceMappingURL=keyboard.js.map