primereact
Version:
PrimeReact is an open source UI library for React featuring a rich set of 90+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with Prime
109 lines (98 loc) • 3.34 kB
JavaScript
'use client';
import { DomHandler } from 'primereact/utils';
function _arrayLikeToArray(r, a) {
(null == a || a > r.length) && (a = r.length);
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
return n;
}
function _arrayWithoutHoles(r) {
if (Array.isArray(r)) return _arrayLikeToArray(r);
}
function _iterableToArray(r) {
if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
}
function _unsupportedIterableToArray(r, a) {
if (r) {
if ("string" == typeof r) return _arrayLikeToArray(r, a);
var t = {}.toString.call(r).slice(8, -1);
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
}
}
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _toConsumableArray(r) {
return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();
}
var KeyFilter = {
/* eslint-disable */
DEFAULT_MASKS: {
pint: /[\d]/,
"int": /[\d\-]/,
pnum: /[\d\.]/,
money: /[\d\.\s,]/,
num: /[\d\-\.]/,
hex: /[0-9a-f]/i,
email: /[a-z0-9_\.\-@]/i,
alpha: /[a-z_]/i,
alphanum: /[a-z0-9_]/i
},
/* eslint-enable */getRegex: function getRegex(keyfilter) {
return KeyFilter.DEFAULT_MASKS[keyfilter] ? KeyFilter.DEFAULT_MASKS[keyfilter] : keyfilter;
},
onBeforeInput: function onBeforeInput(e, keyfilter, validateOnly) {
// android devices must use beforeinput https://stackoverflow.com/questions/36753548/keycode-on-android-is-always-229
if (validateOnly || !DomHandler.isAndroid()) {
return;
}
this.validateKey(e, e.data, keyfilter);
},
onKeyPress: function onKeyPress(e, keyfilter, validateOnly) {
// non android devices use keydown
if (validateOnly || DomHandler.isAndroid()) {
return;
}
if (e.ctrlKey || e.altKey || e.metaKey) {
return;
}
this.validateKey(e, e.key, keyfilter);
},
onPaste: function onPaste(e, keyfilter, validateOnly) {
if (validateOnly) {
return;
}
var regex = this.getRegex(keyfilter);
var clipboard = e.clipboardData.getData('text');
// loop over each letter pasted and if any fail prevent the paste
_toConsumableArray(clipboard).forEach(function (c) {
if (!regex.test(c)) {
e.preventDefault();
return false;
}
});
},
validateKey: function validateKey(e, key, keyfilter) {
if (key === null || key === undefined) {
return;
}
// some AZERTY keys come in with 2 chars like ´ç if Dead key is pressed first
var isPrintableKey = key.length <= 2;
if (!isPrintableKey) {
return;
}
var regex = this.getRegex(keyfilter);
if (!regex.test(key)) {
e.preventDefault();
}
},
validate: function validate(e, keyfilter) {
var value = e.target.value;
var validatePattern = true;
var regex = this.getRegex(keyfilter);
if (value && !regex.test(value)) {
validatePattern = false;
}
return validatePattern;
}
};
export { KeyFilter };