Spaces:
Paused
Paused
OpenAiChatbot / frontend /node_modules /@testing-library /user-event /dist /keyboard /plugins /character.js
| ; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.keypressBehavior = void 0; | |
| var _dom = require("@testing-library/dom"); | |
| var _shared = require("../shared"); | |
| var _utils = require("../../utils"); | |
| /** | |
| * This file should cover the behavior for keys that produce character input | |
| */ | |
| const keypressBehavior = [{ | |
| matches: (keyDef, element) => { | |
| var _keyDef$key; | |
| return ((_keyDef$key = keyDef.key) == null ? void 0 : _keyDef$key.length) === 1 && (0, _utils.isElementType)(element, 'input', { | |
| type: 'time', | |
| readOnly: false | |
| }); | |
| }, | |
| handle: (keyDef, element, options, state) => { | |
| var _state$carryValue; | |
| let newEntry = keyDef.key; | |
| const textToBeTyped = ((_state$carryValue = state.carryValue) != null ? _state$carryValue : '') + newEntry; | |
| const timeNewEntry = (0, _utils.buildTimeValue)(textToBeTyped); | |
| if ((0, _utils.isValidInputTimeValue)(element, timeNewEntry)) { | |
| newEntry = timeNewEntry; | |
| } | |
| const { | |
| newValue, | |
| newSelectionStart | |
| } = (0, _utils.calculateNewValue)(newEntry, element); | |
| const prevValue = (0, _utils.getValue)(element); // this check was provided by fireInputEventIfNeeded | |
| // TODO: verify if it is even needed by this handler | |
| if (prevValue !== newValue) { | |
| (0, _shared.fireInputEvent)(element, { | |
| newValue, | |
| newSelectionStart, | |
| eventOverrides: { | |
| data: keyDef.key, | |
| inputType: 'insertText' | |
| } | |
| }); | |
| } | |
| (0, _shared.fireChangeForInputTimeIfValid)(element, prevValue, timeNewEntry); | |
| state.carryValue = textToBeTyped; | |
| } | |
| }, { | |
| matches: (keyDef, element) => { | |
| var _keyDef$key2; | |
| return ((_keyDef$key2 = keyDef.key) == null ? void 0 : _keyDef$key2.length) === 1 && (0, _utils.isElementType)(element, 'input', { | |
| type: 'date', | |
| readOnly: false | |
| }); | |
| }, | |
| handle: (keyDef, element, options, state) => { | |
| var _state$carryValue2; | |
| let newEntry = keyDef.key; | |
| const textToBeTyped = ((_state$carryValue2 = state.carryValue) != null ? _state$carryValue2 : '') + newEntry; | |
| const isValidToBeTyped = (0, _utils.isValidDateValue)(element, textToBeTyped); | |
| if (isValidToBeTyped) { | |
| newEntry = textToBeTyped; | |
| } | |
| const { | |
| newValue, | |
| newSelectionStart | |
| } = (0, _utils.calculateNewValue)(newEntry, element); | |
| const prevValue = (0, _utils.getValue)(element); // this check was provided by fireInputEventIfNeeded | |
| // TODO: verify if it is even needed by this handler | |
| if (prevValue !== newValue) { | |
| (0, _shared.fireInputEvent)(element, { | |
| newValue, | |
| newSelectionStart, | |
| eventOverrides: { | |
| data: keyDef.key, | |
| inputType: 'insertText' | |
| } | |
| }); | |
| } | |
| if (isValidToBeTyped) { | |
| _dom.fireEvent.change(element, { | |
| target: { | |
| value: textToBeTyped | |
| } | |
| }); | |
| } | |
| state.carryValue = textToBeTyped; | |
| } | |
| }, { | |
| matches: (keyDef, element) => { | |
| var _keyDef$key3; | |
| return ((_keyDef$key3 = keyDef.key) == null ? void 0 : _keyDef$key3.length) === 1 && (0, _utils.isElementType)(element, 'input', { | |
| type: 'number', | |
| readOnly: false | |
| }); | |
| }, | |
| handle: (keyDef, element, options, state) => { | |
| var _ref, _state$carryValue3, _newValue$match, _newValue$match2; | |
| if (!/[\d.\-e]/.test(keyDef.key)) { | |
| return; | |
| } | |
| const oldValue = (_ref = (_state$carryValue3 = state.carryValue) != null ? _state$carryValue3 : (0, _utils.getValue)(element)) != null ? _ref : | |
| /* istanbul ignore next */ | |
| ''; | |
| const { | |
| newValue, | |
| newSelectionStart | |
| } = (0, _utils.calculateNewValue)(keyDef.key, element, oldValue); // the browser allows some invalid input but not others | |
| // it allows up to two '-' at any place before any 'e' or one directly following 'e' | |
| // it allows one '.' at any place before e | |
| const valueParts = newValue.split('e', 2); | |
| if (Number((_newValue$match = newValue.match(/-/g)) == null ? void 0 : _newValue$match.length) > 2 || Number((_newValue$match2 = newValue.match(/\./g)) == null ? void 0 : _newValue$match2.length) > 1 || valueParts[1] && !/^-?\d*$/.test(valueParts[1])) { | |
| return; | |
| } | |
| (0, _shared.fireInputEvent)(element, { | |
| newValue, | |
| newSelectionStart, | |
| eventOverrides: { | |
| data: keyDef.key, | |
| inputType: 'insertText' | |
| } | |
| }); | |
| const appliedValue = (0, _utils.getValue)(element); | |
| if (appliedValue === newValue) { | |
| state.carryValue = undefined; | |
| } else { | |
| state.carryValue = newValue; | |
| } | |
| } | |
| }, { | |
| matches: (keyDef, element) => { | |
| var _keyDef$key4; | |
| return ((_keyDef$key4 = keyDef.key) == null ? void 0 : _keyDef$key4.length) === 1 && ((0, _utils.isElementType)(element, ['input', 'textarea'], { | |
| readOnly: false | |
| }) && !(0, _utils.isClickableInput)(element) || (0, _utils.isContentEditable)(element)) && (0, _utils.getSpaceUntilMaxLength)(element) !== 0; | |
| }, | |
| handle: (keyDef, element) => { | |
| const { | |
| newValue, | |
| newSelectionStart | |
| } = (0, _utils.calculateNewValue)(keyDef.key, element); | |
| (0, _shared.fireInputEvent)(element, { | |
| newValue, | |
| newSelectionStart, | |
| eventOverrides: { | |
| data: keyDef.key, | |
| inputType: 'insertText' | |
| } | |
| }); | |
| } | |
| }, { | |
| matches: (keyDef, element) => keyDef.key === 'Enter' && ((0, _utils.isElementType)(element, 'textarea', { | |
| readOnly: false | |
| }) || (0, _utils.isContentEditable)(element)) && (0, _utils.getSpaceUntilMaxLength)(element) !== 0, | |
| handle: (keyDef, element, options, state) => { | |
| const { | |
| newValue, | |
| newSelectionStart | |
| } = (0, _utils.calculateNewValue)('\n', element); | |
| const inputType = (0, _utils.isContentEditable)(element) && !state.modifiers.shift ? 'insertParagraph' : 'insertLineBreak'; | |
| (0, _shared.fireInputEvent)(element, { | |
| newValue, | |
| newSelectionStart, | |
| eventOverrides: { | |
| inputType | |
| } | |
| }); | |
| } | |
| }]; | |
| exports.keypressBehavior = keypressBehavior; |