123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.preKeyupBehavior = exports.preKeydownBehavior = exports.postKeyupBehavior = exports.keyupBehavior = exports.keypressBehavior = exports.keydownBehavior = void 0;
- var _dom = require("@testing-library/dom");
- var _utils = require("../../utils");
- var _getEventProps = require("../getEventProps");
- var _shared = require("../shared");
- /**
- * This file should contain behavior for functional keys as described here:
- * https://w3c.github.io/uievents-code/#key-alphanumeric-functional
- */
- const modifierKeys = {
- Alt: 'alt',
- Control: 'ctrl',
- Shift: 'shift',
- Meta: 'meta'
- };
- const preKeydownBehavior = [// modifierKeys switch on the modifier BEFORE the keydown event
- ...Object.entries(modifierKeys).map(([key, modKey]) => ({
- matches: keyDef => keyDef.key === key,
- handle: (keyDef, element, options, state) => {
- state.modifiers[modKey] = true;
- }
- })), // AltGraph produces an extra keydown for Control
- // The modifier does not change
- {
- matches: keyDef => keyDef.key === 'AltGraph',
- handle: (keyDef, element, options, state) => {
- var _options$keyboardMap$;
- const ctrlKeyDef = (_options$keyboardMap$ = options.keyboardMap.find(k => k.key === 'Control')) != null ? _options$keyboardMap$ :
- /* istanbul ignore next */
- {
- key: 'Control',
- code: 'Control'
- };
- _dom.fireEvent.keyDown(element, (0, _getEventProps.getKeyEventProps)(ctrlKeyDef, state));
- }
- }];
- exports.preKeydownBehavior = preKeydownBehavior;
- const keydownBehavior = [{
- matches: keyDef => keyDef.key === 'CapsLock',
- handle: (keyDef, element, options, state) => {
- state.modifiers.caps = !state.modifiers.caps;
- }
- }, {
- matches: (keyDef, element) => keyDef.key === 'Backspace' && (0, _utils.isEditable)(element) && !(0, _utils.isCursorAtStart)(element),
- handle: (keyDef, element, options, state) => {
- const {
- newValue,
- newSelectionStart
- } = (0, _utils.calculateNewValue)('', element, state.carryValue, undefined, 'backward');
- (0, _shared.fireInputEvent)(element, {
- newValue,
- newSelectionStart,
- eventOverrides: {
- inputType: 'deleteContentBackward'
- }
- });
- (0, _shared.carryValue)(element, state, newValue);
- }
- }];
- exports.keydownBehavior = keydownBehavior;
- const keypressBehavior = [{
- matches: (keyDef, element) => keyDef.key === 'Enter' && (0, _utils.isElementType)(element, 'input') && ['checkbox', 'radio'].includes(element.type),
- handle: (keyDef, element) => {
- const form = element.form;
- if ((0, _utils.hasFormSubmit)(form)) {
- _dom.fireEvent.submit(form);
- }
- }
- }, {
- matches: (keyDef, element) => keyDef.key === 'Enter' && ((0, _utils.isClickableInput)(element) || // Links with href defined should handle Enter the same as a click
- (0, _utils.isElementType)(element, 'a') && Boolean(element.href)),
- handle: (keyDef, element, options, state) => {
- _dom.fireEvent.click(element, (0, _getEventProps.getMouseEventProps)(state));
- }
- }, {
- matches: (keyDef, element) => keyDef.key === 'Enter' && (0, _utils.isElementType)(element, 'input'),
- handle: (keyDef, element) => {
- const form = element.form;
- if (form && (form.querySelectorAll('input').length === 1 || (0, _utils.hasFormSubmit)(form))) {
- _dom.fireEvent.submit(form);
- }
- }
- }];
- exports.keypressBehavior = keypressBehavior;
- const preKeyupBehavior = [// modifierKeys switch off the modifier BEFORE the keyup event
- ...Object.entries(modifierKeys).map(([key, modKey]) => ({
- matches: keyDef => keyDef.key === key,
- handle: (keyDef, element, options, state) => {
- state.modifiers[modKey] = false;
- }
- }))];
- exports.preKeyupBehavior = preKeyupBehavior;
- const keyupBehavior = [{
- matches: (keyDef, element) => keyDef.key === ' ' && (0, _utils.isClickableInput)(element),
- handle: (keyDef, element, options, state) => {
- _dom.fireEvent.click(element, (0, _getEventProps.getMouseEventProps)(state));
- }
- }];
- exports.keyupBehavior = keyupBehavior;
- const postKeyupBehavior = [// AltGraph produces an extra keyup for Control
- // The modifier does not change
- {
- matches: keyDef => keyDef.key === 'AltGraph',
- handle: (keyDef, element, options, state) => {
- var _options$keyboardMap$2;
- const ctrlKeyDef = (_options$keyboardMap$2 = options.keyboardMap.find(k => k.key === 'Control')) != null ? _options$keyboardMap$2 :
- /* istanbul ignore next */
- {
- key: 'Control',
- code: 'Control'
- };
- _dom.fireEvent.keyUp(element, (0, _getEventProps.getKeyEventProps)(ctrlKeyDef, state));
- }
- }];
- exports.postKeyupBehavior = postKeyupBehavior;
|