UNPKG

@testing-library/user-event

Version:
36 lines (33 loc) 1.42 kB
import { isElementType } from '../misc/isElementType.js'; import { getValue } from './getValue.js'; var maxLengthSupportedTypes; (function(maxLengthSupportedTypes) { maxLengthSupportedTypes['email'] = 'email'; maxLengthSupportedTypes['password'] = 'password'; maxLengthSupportedTypes['search'] = 'search'; maxLengthSupportedTypes['telephone'] = 'telephone'; maxLengthSupportedTypes['text'] = 'text'; maxLengthSupportedTypes['url'] = 'url'; })(maxLengthSupportedTypes || (maxLengthSupportedTypes = {})); function getSpaceUntilMaxLength(element) { const value = getValue(element); /* istanbul ignore if */ if (value === null) { return undefined; } const maxLength = getSanitizedMaxLength(element); return maxLength ? maxLength - value.length : undefined; } // can't use .maxLength property because of a jsdom bug: // https://github.com/jsdom/jsdom/issues/2927 function getSanitizedMaxLength(element) { if (!supportsMaxLength(element)) { return undefined; } var ref; const attr = (ref = element.getAttribute('maxlength')) !== null && ref !== void 0 ? ref : ''; return /^\d+$/.test(attr) && Number(attr) >= 0 ? Number(attr) : undefined; } function supportsMaxLength(element) { return isElementType(element, 'textarea') || isElementType(element, 'input') && Boolean(maxLengthSupportedTypes[element.type]); } export { getSpaceUntilMaxLength };