@clr/angular
Version:
Angular components for Clarity
44 lines • 6.01 kB
JavaScript
/*
* Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
* This software is released under MIT license.
* The full license information can be found in LICENSE in the root directory of this project.
*/
import { IEKeys, Keys } from '../../enums/keys.enum';
export function normalizeKey(key) {
if (key === Keys.ArrowUp || key === IEKeys.ArrowUp) {
return Keys.ArrowUp;
}
else if (key === Keys.ArrowDown || key === IEKeys.ArrowDown) {
return Keys.ArrowDown;
}
else if (key === Keys.ArrowRight || key === IEKeys.ArrowRight) {
return Keys.ArrowRight;
}
else if (key === Keys.ArrowLeft || key === IEKeys.ArrowLeft) {
return Keys.ArrowLeft;
}
else if (key === Keys.Space || key === IEKeys.Space) {
return Keys.Space;
}
else if (key === Keys.Escape || key === IEKeys.Escape) {
return Keys.Escape;
}
else {
return key;
}
}
export function preventArrowKeyScroll(event) {
const key = normalizeKey(event.key);
if (key === Keys.ArrowUp || key === Keys.ArrowDown || key === Keys.ArrowLeft || key === Keys.ArrowRight) {
// prevent element container scroll
// MDN references this is really the only way to prevent native browser interactions
// https://developer.mozilla.org/en-US/docs/Web/Accessibility/Keyboard-navigable_JavaScript_widgets
event.preventDefault();
}
}
export function isKeyEitherLetterOrNumber(event) {
const char = event.key;
// Only letter characters differ when they switch between lowercase and uppercase, whether it's an English or non-English letter.
return char.toLowerCase() !== char.toUpperCase() || (char >= '0' && char <= '9');
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL3V0aWxzL2ZvY3VzL2tleS1mb2N1cy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJELE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBVztJQUN0QyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsT0FBTyxJQUFJLEdBQUcsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ2xELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztLQUNyQjtTQUFNLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxTQUFTLElBQUksR0FBRyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUU7UUFDN0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0tBQ3ZCO1NBQU0sSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLFVBQVUsSUFBSSxHQUFHLEtBQUssTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUMvRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7S0FDeEI7U0FBTSxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsU0FBUyxJQUFJLEdBQUcsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFO1FBQzdELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztLQUN2QjtTQUFNLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDckQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0tBQ25CO1NBQU0sSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLE1BQU0sSUFBSSxHQUFHLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRTtRQUN2RCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDcEI7U0FBTTtRQUNMLE9BQU8sR0FBRyxDQUFDO0tBQ1o7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEtBQW9CO0lBQ3hELE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFcEMsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLE9BQU8sSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUN2RyxtQ0FBbUM7UUFDbkMsb0ZBQW9GO1FBQ3BGLG1HQUFtRztRQUNuRyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7S0FDeEI7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLEtBQW9CO0lBQzVELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7SUFDdkIsaUlBQWlJO0lBQ2pJLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ25GLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjMgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IElFS2V5cywgS2V5cyB9IGZyb20gJy4uLy4uL2VudW1zL2tleXMuZW51bSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVLZXkoa2V5OiBzdHJpbmcpIHtcbiAgaWYgKGtleSA9PT0gS2V5cy5BcnJvd1VwIHx8IGtleSA9PT0gSUVLZXlzLkFycm93VXApIHtcbiAgICByZXR1cm4gS2V5cy5BcnJvd1VwO1xuICB9IGVsc2UgaWYgKGtleSA9PT0gS2V5cy5BcnJvd0Rvd24gfHwga2V5ID09PSBJRUtleXMuQXJyb3dEb3duKSB7XG4gICAgcmV0dXJuIEtleXMuQXJyb3dEb3duO1xuICB9IGVsc2UgaWYgKGtleSA9PT0gS2V5cy5BcnJvd1JpZ2h0IHx8IGtleSA9PT0gSUVLZXlzLkFycm93UmlnaHQpIHtcbiAgICByZXR1cm4gS2V5cy5BcnJvd1JpZ2h0O1xuICB9IGVsc2UgaWYgKGtleSA9PT0gS2V5cy5BcnJvd0xlZnQgfHwga2V5ID09PSBJRUtleXMuQXJyb3dMZWZ0KSB7XG4gICAgcmV0dXJuIEtleXMuQXJyb3dMZWZ0O1xuICB9IGVsc2UgaWYgKGtleSA9PT0gS2V5cy5TcGFjZSB8fCBrZXkgPT09IElFS2V5cy5TcGFjZSkge1xuICAgIHJldHVybiBLZXlzLlNwYWNlO1xuICB9IGVsc2UgaWYgKGtleSA9PT0gS2V5cy5Fc2NhcGUgfHwga2V5ID09PSBJRUtleXMuRXNjYXBlKSB7XG4gICAgcmV0dXJuIEtleXMuRXNjYXBlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBrZXk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXZlbnRBcnJvd0tleVNjcm9sbChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICBjb25zdCBrZXkgPSBub3JtYWxpemVLZXkoZXZlbnQua2V5KTtcblxuICBpZiAoa2V5ID09PSBLZXlzLkFycm93VXAgfHwga2V5ID09PSBLZXlzLkFycm93RG93biB8fCBrZXkgPT09IEtleXMuQXJyb3dMZWZ0IHx8IGtleSA9PT0gS2V5cy5BcnJvd1JpZ2h0KSB7XG4gICAgLy8gcHJldmVudCBlbGVtZW50IGNvbnRhaW5lciBzY3JvbGxcbiAgICAvLyBNRE4gcmVmZXJlbmNlcyB0aGlzIGlzIHJlYWxseSB0aGUgb25seSB3YXkgdG8gcHJldmVudCBuYXRpdmUgYnJvd3NlciBpbnRlcmFjdGlvbnNcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BY2Nlc3NpYmlsaXR5L0tleWJvYXJkLW5hdmlnYWJsZV9KYXZhU2NyaXB0X3dpZGdldHNcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0tleUVpdGhlckxldHRlck9yTnVtYmVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gIGNvbnN0IGNoYXIgPSBldmVudC5rZXk7XG4gIC8vIE9ubHkgbGV0dGVyIGNoYXJhY3RlcnMgZGlmZmVyIHdoZW4gdGhleSBzd2l0Y2ggYmV0d2VlbiBsb3dlcmNhc2UgYW5kIHVwcGVyY2FzZSwgd2hldGhlciBpdCdzIGFuIEVuZ2xpc2ggb3Igbm9uLUVuZ2xpc2ggbGV0dGVyLlxuICByZXR1cm4gY2hhci50b0xvd2VyQ2FzZSgpICE9PSBjaGFyLnRvVXBwZXJDYXNlKCkgfHwgKGNoYXIgPj0gJzAnICYmIGNoYXIgPD0gJzknKTtcbn1cbiJdfQ==