UNPKG

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

1,248 lines (1,210 loc) 55.3 kB
'use client'; 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); var PrimeReact = require('primereact/api'); var componentbase = require('primereact/componentbase'); var hooks = require('primereact/hooks'); var angledown = require('primereact/icons/angledown'); var angleup = require('primereact/icons/angleup'); var inputtext = require('primereact/inputtext'); var ripple = require('primereact/ripple'); var tooltip = require('primereact/tooltip'); var utils = require('primereact/utils'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } function _interopNamespace(e) { if (e && e.__esModule) return e; var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); } n["default"] = e; return Object.freeze(n); } var React__namespace = /*#__PURE__*/_interopNamespace(React); var PrimeReact__default = /*#__PURE__*/_interopDefaultLegacy(PrimeReact); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } 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(); } function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function toPropertyKey(t) { var i = toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _defineProperty(e, r, t) { return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } var classes = { root: function root(_ref) { var props = _ref.props, focusedState = _ref.focusedState, stacked = _ref.stacked, horizontal = _ref.horizontal, vertical = _ref.vertical; return utils.classNames('p-inputnumber p-component p-inputwrapper', { 'p-inputwrapper-filled': props.value != null && props.value.toString().length > 0, 'p-inputwrapper-focus': focusedState, 'p-inputnumber-buttons-stacked': stacked, 'p-inputnumber-buttons-horizontal': horizontal, 'p-inputnumber-buttons-vertical': vertical, 'p-invalid': props.invalid }); }, input: function input(_ref2) { var props = _ref2.props, context = _ref2.context; return utils.classNames('p-inputnumber-input', { 'p-variant-filled': props.variant ? props.variant === 'filled' : context && context.inputStyle === 'filled' }); }, buttonGroup: 'p-inputnumber-button-group', incrementButton: function incrementButton(_ref3) { var props = _ref3.props; return utils.classNames('p-inputnumber-button p-inputnumber-button-up p-button p-button-icon-only p-component', { 'p-disabled': props.disabled }); }, incrementIcon: 'p-button-icon', decrementButton: function decrementButton(_ref4) { var props = _ref4.props; return utils.classNames('p-inputnumber-button p-inputnumber-button-down p-button p-button-icon-only p-component', { 'p-disabled': props.disabled }); }, decrementIcon: 'p-button-icon' }; var styles = "\n@layer primereact {\n .p-inputnumber {\n display: inline-flex;\n }\n \n .p-inputnumber-button {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 auto;\n }\n \n .p-inputnumber-buttons-stacked .p-button.p-inputnumber-button .p-button-label,\n .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button .p-button-label {\n display: none;\n }\n \n .p-inputnumber-buttons-stacked .p-button.p-inputnumber-button-up {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n padding: 0;\n }\n \n .p-inputnumber-buttons-stacked .p-inputnumber-input {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n \n .p-inputnumber-buttons-stacked .p-button.p-inputnumber-button-down {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-left-radius: 0;\n padding: 0;\n }\n \n .p-inputnumber-buttons-stacked .p-inputnumber-button-group {\n display: flex;\n flex-direction: column;\n }\n \n .p-inputnumber-buttons-stacked .p-inputnumber-button-group .p-button.p-inputnumber-button {\n flex: 1 1 auto;\n }\n \n .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-up {\n order: 3;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n \n .p-inputnumber-buttons-horizontal .p-inputnumber-input {\n order: 2;\n border-radius: 0;\n }\n \n .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-down {\n order: 1;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n \n .p-inputnumber-buttons-vertical {\n flex-direction: column;\n }\n \n .p-inputnumber-buttons-vertical .p-button.p-inputnumber-button-up {\n order: 1;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n width: 100%;\n }\n \n .p-inputnumber-buttons-vertical .p-inputnumber-input {\n order: 2;\n border-radius: 0;\n text-align: center;\n }\n \n .p-inputnumber-buttons-vertical .p-button.p-inputnumber-button-down {\n order: 3;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n width: 100%;\n }\n \n .p-inputnumber-input {\n flex: 1 1 auto;\n }\n \n .p-fluid .p-inputnumber {\n width: 100%;\n }\n \n .p-fluid .p-inputnumber .p-inputnumber-input {\n width: 1%;\n }\n \n .p-fluid .p-inputnumber-buttons-vertical .p-inputnumber-input {\n width: 100%;\n }\n}\n"; var InputNumberBase = componentbase.ComponentBase.extend({ defaultProps: { __TYPE: 'InputNumber', __parentMetadata: null, allowEmpty: true, ariaLabelledBy: null, autoFocus: false, buttonLayout: 'stacked', className: null, currency: undefined, currencyDisplay: undefined, decrementButtonClassName: null, decrementButtonIcon: null, disabled: false, format: true, id: null, incrementButtonClassName: null, incrementButtonIcon: null, inputClassName: null, inputId: null, inputMode: null, inputRef: null, inputStyle: null, invalid: false, variant: null, locale: undefined, localeMatcher: undefined, max: null, maxFractionDigits: undefined, maxLength: null, min: null, minFractionDigits: undefined, mode: 'decimal', name: null, onBlur: null, onChange: null, onFocus: null, onKeyDown: null, onKeyUp: null, onValueChange: null, pattern: null, placeholder: null, prefix: null, readOnly: false, required: false, roundingMode: undefined, showButtons: false, size: null, step: 1, style: null, suffix: null, tabIndex: null, tooltip: null, tooltipOptions: null, type: 'text', useGrouping: true, value: null, children: undefined }, css: { classes: classes, styles: styles } }); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var InputNumber = /*#__PURE__*/React__namespace.memo(/*#__PURE__*/React__namespace.forwardRef(function (inProps, ref) { var mergeProps = hooks.useMergeProps(); var context = React__namespace.useContext(PrimeReact.PrimeReactContext); var props = InputNumberBase.getProps(inProps, context); var _React$useState = React__namespace.useState(false), _React$useState2 = _slicedToArray(_React$useState, 2), focusedState = _React$useState2[0], setFocusedState = _React$useState2[1]; var metaData = _objectSpread(_objectSpread({ props: props }, props.__parentMetadata), {}, { state: { focused: focusedState } }); var _InputNumberBase$setM = InputNumberBase.setMetaData(metaData), ptm = _InputNumberBase$setM.ptm, cx = _InputNumberBase$setM.cx, isUnstyled = _InputNumberBase$setM.isUnstyled; componentbase.useHandleStyle(InputNumberBase.css.styles, isUnstyled, { name: 'inputnumber' }); var elementRef = React__namespace.useRef(null); var inputRef = React__namespace.useRef(null); var timer = React__namespace.useRef(null); var lastValue = React__namespace.useRef(null); var numberFormat = React__namespace.useRef(null); var groupChar = React__namespace.useRef(null); var prefixChar = React__namespace.useRef(null); var suffixChar = React__namespace.useRef(null); var isSpecialChar = React__namespace.useRef(null); var _numeral = React__namespace.useRef(null); var _group = React__namespace.useRef(null); var _minusSign = React__namespace.useRef(null); var _currency = React__namespace.useRef(null); var _decimal = React__namespace.useRef(null); var _decimalSeparator = React__namespace.useRef(null); var _suffix = React__namespace.useRef(null); var _prefix = React__namespace.useRef(null); var _index = React__namespace.useRef(null); var isFocusedByClick = React__namespace.useRef(false); var _locale = props.locale || context && context.locale || PrimeReact__default["default"].locale; var stacked = props.showButtons && props.buttonLayout === 'stacked'; var horizontal = props.showButtons && props.buttonLayout === 'horizontal'; var vertical = props.showButtons && props.buttonLayout === 'vertical'; var inputMode = props.inputMode || (props.mode === 'decimal' && !props.minFractionDigits ? 'numeric' : 'decimal'); var getOptions = function getOptions() { var _props$minFractionDig, _props$maxFractionDig; return { localeMatcher: props.localeMatcher, style: props.mode, currency: props.currency, currencyDisplay: props.currencyDisplay, useGrouping: props.useGrouping, minimumFractionDigits: (_props$minFractionDig = props.minFractionDigits) !== null && _props$minFractionDig !== void 0 ? _props$minFractionDig : undefined, maximumFractionDigits: (_props$maxFractionDig = props.maxFractionDigits) !== null && _props$maxFractionDig !== void 0 ? _props$maxFractionDig : undefined, roundingMode: props.roundingMode }; }; var constructParser = function constructParser() { numberFormat.current = new Intl.NumberFormat(_locale, getOptions()); var numerals = _toConsumableArray(new Intl.NumberFormat(_locale, { useGrouping: false }).format(9876543210)).reverse(); var index = new Map(numerals.map(function (d, i) { return [d, i]; })); _numeral.current = new RegExp("[".concat(numerals.join(''), "]"), 'g'); _group.current = getGroupingExpression(); // regular expression /[,]/g, /[.]/g _minusSign.current = getMinusSignExpression(); // regular expression /[-]/g _currency.current = getCurrencyExpression(); // regular expression for currency (e.g. /[$]/g, /[€]/g, /[]/g and more) _decimal.current = getDecimalExpression(); // regular expression /[,]/g, /[.]/g, /[]/g _decimalSeparator.current = getDecimalSeparator(); // current decimal separator '.', ',' _suffix.current = getSuffixExpression(); // regular expression for suffix (e.g. /℃/g) _prefix.current = getPrefixExpression(); // regular expression for prefix (e.g. /\ days/g) _index.current = function (d) { return index.get(d); }; }; var escapeRegExp = function escapeRegExp(text) { return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); }; /** * get decimal separator in current locale */ var getDecimalSeparator = function getDecimalSeparator() { return new Intl.NumberFormat(_locale, { useGrouping: false }).format(1.1).trim().replace(_numeral.current, ''); }; var getDecimalExpression = function getDecimalExpression() { var formatter = new Intl.NumberFormat(_locale, _objectSpread(_objectSpread({}, getOptions()), {}, { useGrouping: false })); return new RegExp("[".concat(formatter.format(1.1).replace(_currency.current, '').trim().replace(_numeral.current, ''), "]"), 'g'); }; var getGroupingExpression = function getGroupingExpression() { var formatter = new Intl.NumberFormat(_locale, { useGrouping: true }); groupChar.current = formatter.format(1000000).trim().replace(_numeral.current, '').charAt(0); return new RegExp("[".concat(groupChar.current, "]"), 'g'); }; var getMinusSignExpression = function getMinusSignExpression() { var formatter = new Intl.NumberFormat(_locale, { useGrouping: false }); return new RegExp("[".concat(formatter.format(-1).trim().replace(_numeral.current, ''), "]"), 'g'); }; var getCurrencyExpression = function getCurrencyExpression() { if (props.currency) { var formatter = new Intl.NumberFormat(_locale, { style: 'currency', currency: props.currency, currencyDisplay: props.currencyDisplay, minimumFractionDigits: 0, maximumFractionDigits: 0, roundingMode: props.roundingMode }); return new RegExp("[".concat(formatter.format(1).replace(/\s/g, '').replace(_numeral.current, '').replace(_group.current, ''), "]"), 'g'); } return new RegExp('[]', 'g'); }; var getPrefixExpression = function getPrefixExpression() { if (props.prefix) { prefixChar.current = props.prefix; } else { var formatter = new Intl.NumberFormat(_locale, { style: props.mode, currency: props.currency, currencyDisplay: props.currencyDisplay }); prefixChar.current = formatter.format(1).split('1')[0]; } return new RegExp("".concat(escapeRegExp(prefixChar.current || '')), 'g'); }; var getSuffixExpression = function getSuffixExpression() { if (props.suffix) { suffixChar.current = props.suffix; } else { var formatter = new Intl.NumberFormat(_locale, { style: props.mode, currency: props.currency, currencyDisplay: props.currencyDisplay, minimumFractionDigits: 0, maximumFractionDigits: 0, roundingMode: props.roundingMode }); suffixChar.current = formatter.format(1).split('1')[1]; } return new RegExp("".concat(escapeRegExp(suffixChar.current || '')), 'g'); }; var formatValue = function formatValue(value) { if (value != null) { if (value === '-') { // Minus sign return value; } if (props.format) { var formatter = new Intl.NumberFormat(_locale, getOptions()); var _formattedValue = formatter.format(value); if (props.prefix) { _formattedValue = props.prefix + _formattedValue; } if (props.suffix) { _formattedValue = _formattedValue + props.suffix; } return _formattedValue; } return value.toString(); } return ''; }; var parseValue = function parseValue(text) { var filteredText = text.replace(_suffix.current, '').replace(_prefix.current, '').trim().replace(/\s/g, '').replace(_currency.current, '').replace(_group.current, '').replace(_minusSign.current, '-').replace(_decimal.current, '.').replace(_numeral.current, _index.current); if (filteredText) { if (filteredText === '-') { // Minus sign return filteredText; } var parsedValue = +filteredText; return isNaN(parsedValue) ? null : parsedValue; } return null; }; var _repeat = function repeat(event, interval, dir) { var i = interval || 500; clearTimer(); timer.current = setTimeout(function () { _repeat(event, 40, dir); }, i); spin(event, dir); }; var spin = function spin(event, dir) { if (inputRef.current) { var step = props.step * dir; var currentValue = parseValue(inputRef.current.value) || 0; var newValue = validateValue(currentValue + step); if (props.maxLength && props.maxLength < formatValue(newValue).length) { return; } // #3913 onChange should be called before onValueChange handleOnChange(event, currentValue, newValue); // touch devices trigger the keyboard to display because of setSelectionRange !utils.DomHandler.isTouchDevice() && updateInput(newValue, null, 'spin'); updateModel(event, newValue); } }; var onUpButtonMouseDown = function onUpButtonMouseDown(event) { if (!props.disabled && !props.readOnly) { if (!utils.DomHandler.isTouchDevice()) { utils.DomHandler.focus(inputRef.current, props.autoFocus); } _repeat(event, null, 1); event.preventDefault(); } }; var onUpButtonMouseUp = function onUpButtonMouseUp() { if (!props.disabled && !props.readOnly) { clearTimer(); } }; var onUpButtonMouseLeave = function onUpButtonMouseLeave() { if (!props.disabled && !props.readOnly) { clearTimer(); } }; var onUpButtonKeyUp = function onUpButtonKeyUp() { if (!props.disabled && !props.readOnly) { clearTimer(); } }; var onUpButtonKeyDown = function onUpButtonKeyDown(event) { if (!props.disabled && !props.readOnly && (event.keyCode === 32 || event.keyCode === 13)) { _repeat(event, null, 1); } }; var onDownButtonMouseDown = function onDownButtonMouseDown(event) { if (!props.disabled && !props.readOnly) { if (!utils.DomHandler.isTouchDevice()) { utils.DomHandler.focus(inputRef.current, props.autoFocus); } _repeat(event, null, -1); event.preventDefault(); } }; var onDownButtonMouseUp = function onDownButtonMouseUp() { if (!props.disabled && !props.readOnly) { clearTimer(); } }; var onDownButtonMouseLeave = function onDownButtonMouseLeave() { if (!props.disabled && !props.readOnly) { clearTimer(); } }; var onDownButtonKeyUp = function onDownButtonKeyUp() { if (!props.disabled && !props.readOnly) { clearTimer(); } }; var onDownButtonKeyDown = function onDownButtonKeyDown(event) { if (!props.disabled && !props.readOnly && (event.keyCode === 32 || event.keyCode === 13)) { _repeat(event, null, -1); } }; var onInput = function onInput(event) { if (props.disabled || props.readOnly) { return; } if (isSpecialChar.current) { event.target.value = lastValue.current; isSpecialChar.current = false; } if (utils.DomHandler.isAndroid()) { return; } // #6324 Chrome is allowing accent-dead characters through... var inputType = event.nativeEvent.inputType; var data = event.nativeEvent.data; if (inputType === 'insertText' && /\D/.test(data)) { event.target.value = lastValue.current; } }; var onInputAndroidKey = function onInputAndroidKey(event) { if (!utils.DomHandler.isAndroid() || props.disabled || props.readOnly) { return; } if (props.onKeyUp) { props.onKeyUp(event); // do not continue if the user defined event wants to prevent if (event.defaultPrevented) { return; } } var code = event.which || event.keyCode; if (code !== 13) { // to submit a form event.preventDefault(); } var _char = String.fromCharCode(code); var _isDecimalSign = isDecimalSign(_char); var _isMinusSign = isMinusSign(_char); if (48 <= code && code <= 57 || _isMinusSign || _isDecimalSign) { insert(event, _char, { isDecimalSign: _isDecimalSign, isMinusSign: _isMinusSign }); } else { updateValue(event, event.target.value, null, 'delete-single'); } }; var onInputKeyDown = function onInputKeyDown(event) { if (props.disabled || props.readOnly) { return; } if (event.altKey || event.ctrlKey || event.metaKey) { // #7039 Treat cut as normal character if (event.key.toLowerCase() === 'x' && (event.ctrlKey || event.metaKey)) { isSpecialChar.current = false; } else { isSpecialChar.current = true; } return; } if (props.onKeyDown) { props.onKeyDown(event); // Do not continue if the user-defined event wants to prevent if (event.defaultPrevented) { return; } } lastValue.current = event.target.value; // Android is handled specially in onInputAndroidKey if (utils.DomHandler.isAndroid()) { return; } var selectionStart = event.target.selectionStart; var selectionEnd = event.target.selectionEnd; var inputValue = event.target.value; var newValueStr = null; switch (event.code) { //up case 'ArrowUp': spin(event, 1); event.preventDefault(); break; //down case 'ArrowDown': spin(event, -1); event.preventDefault(); break; //left case 'ArrowLeft': if (!isNumeralChar(inputValue.charAt(selectionStart - 1))) { event.preventDefault(); } break; //right case 'ArrowRight': if (!isNumeralChar(inputValue.charAt(selectionStart))) { event.preventDefault(); } break; //enter and tab case 'Tab': case 'Enter': case 'NumpadEnter': newValueStr = validateValue(parseValue(inputValue)); inputRef.current.value = formatValue(newValueStr); inputRef.current.setAttribute('aria-valuenow', newValueStr); updateModel(event, newValueStr); break; //backspace case 'Backspace': event.preventDefault(); if (selectionStart === selectionEnd) { var deleteChar = inputValue.charAt(selectionStart - 1); if (isNumeralChar(deleteChar)) { var _getDecimalCharIndexe = getDecimalCharIndexes(inputValue), decimalCharIndex = _getDecimalCharIndexe.decimalCharIndex, decimalCharIndexWithoutPrefix = _getDecimalCharIndexe.decimalCharIndexWithoutPrefix; var decimalLength = getDecimalLength(inputValue); if (_group.current.test(deleteChar)) { _group.current.lastIndex = 0; newValueStr = inputValue.slice(0, selectionStart - 2) + inputValue.slice(selectionStart - 1); } else if (_decimal.current.test(deleteChar)) { _decimal.current.lastIndex = 0; if (decimalLength) { inputRef.current.setSelectionRange(selectionStart - 1, selectionStart - 1); } else { newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart); } } else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) { var insertedText = isDecimalMode() && (props.minFractionDigits || 0) < decimalLength ? '' : '0'; newValueStr = inputValue.slice(0, selectionStart - 1) + insertedText + inputValue.slice(selectionStart); } else if (decimalCharIndexWithoutPrefix === 1) { newValueStr = inputValue.slice(0, selectionStart - 1) + '0' + inputValue.slice(selectionStart); newValueStr = parseValue(newValueStr) > 0 ? newValueStr : ''; } else { newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart); } } else if (_currency.current.test(deleteChar)) { var _getCharIndexes = getCharIndexes(inputValue), minusCharIndex = _getCharIndexes.minusCharIndex, currencyCharIndex = _getCharIndexes.currencyCharIndex; if (minusCharIndex === currencyCharIndex - 1) { newValueStr = inputValue.slice(0, minusCharIndex) + inputValue.slice(selectionStart); } } updateValue(event, newValueStr, null, 'delete-single'); } else { newValueStr = deleteRange(inputValue, selectionStart, selectionEnd); updateValue(event, newValueStr, null, 'delete-range'); } break; // del case 'Delete': event.preventDefault(); if (selectionStart === selectionEnd) { var _deleteChar = inputValue.charAt(selectionStart); var _getDecimalCharIndexe2 = getDecimalCharIndexes(inputValue), _decimalCharIndex = _getDecimalCharIndexe2.decimalCharIndex, _decimalCharIndexWithoutPrefix = _getDecimalCharIndexe2.decimalCharIndexWithoutPrefix; if (isNumeralChar(_deleteChar)) { var _decimalLength = getDecimalLength(inputValue); if (_group.current.test(_deleteChar)) { _group.current.lastIndex = 0; newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 2); } else if (_decimal.current.test(_deleteChar)) { _decimal.current.lastIndex = 0; if (_decimalLength) { inputRef.current.setSelectionRange(selectionStart + 1, selectionStart + 1); } else { newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1); } } else if (_decimalCharIndex > 0 && selectionStart > _decimalCharIndex) { var _insertedText = isDecimalMode() && (props.minFractionDigits || 0) < _decimalLength ? '' : '0'; newValueStr = inputValue.slice(0, selectionStart) + _insertedText + inputValue.slice(selectionStart + 1); } else if (_decimalCharIndexWithoutPrefix === 1) { newValueStr = inputValue.slice(0, selectionStart) + '0' + inputValue.slice(selectionStart + 1); newValueStr = parseValue(newValueStr) > 0 ? newValueStr : ''; } else { newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1); } } updateValue(event, newValueStr, null, 'delete-back-single'); } else { newValueStr = deleteRange(inputValue, selectionStart, selectionEnd); updateValue(event, newValueStr, null, 'delete-range'); } break; case 'End': event.preventDefault(); if (!utils.ObjectUtils.isEmpty(props.max)) { updateModel(event, props.max); } break; case 'Home': event.preventDefault(); if (!utils.ObjectUtils.isEmpty(props.min)) { updateModel(event, props.min); } break; default: event.preventDefault(); var _char2 = event.key; if (_char2) { var _isDecimalSign = isDecimalSign(_char2); var _isMinusSign = isMinusSign(_char2); if (Number(_char2) >= 0 && Number(_char2) <= 9 || _isMinusSign || _isDecimalSign) { insert(event, _char2, { isDecimalSign: _isDecimalSign, isMinusSign: _isMinusSign }); } } break; } }; var onPaste = function onPaste(event) { event.preventDefault(); if (props.disabled || props.readOnly) { return; } var data = (event.clipboardData || window.clipboardData).getData('Text'); if (data) { var filteredData = parseValue(data); if (filteredData != null) { if (isFloat(filteredData)) { var _formattedValue2 = formatValue(filteredData); inputRef.current.value = _formattedValue2; updateModel(event, filteredData); } else { insert(event, filteredData.toString()); } } } }; var allowMinusSign = function allowMinusSign() { return utils.ObjectUtils.isEmpty(props.min) || props.min < 0; }; var isMinusSign = function isMinusSign(_char3) { if (_minusSign.current.test(_char3) || _char3 === '-') { _minusSign.current.lastIndex = 0; return true; } return false; }; var replaceDecimalSeparator = function replaceDecimalSeparator(val) { if (isFloat(val)) { return val.toString().replace(/\.(?=[^.]*$)/, _decimalSeparator.current); } return val; }; var isDecimalSign = function isDecimalSign(_char4) { if (_decimal.current.test(_char4) || isFloat(_char4)) { _decimal.current.lastIndex = 0; return true; } return false; }; var isDecimalMode = function isDecimalMode() { return props.mode === 'decimal'; }; var isFloat = function isFloat(val) { var formatter = new Intl.NumberFormat(_locale, getOptions()); var parseVal = parseValue(formatter.format(val)); if (parseVal === null) { return false; } return parseVal % 1 !== 0; }; var getDecimalCharIndexes = function getDecimalCharIndexes(val) { var decimalCharIndex = val.search(_decimal.current); _decimal.current.lastIndex = 0; var filteredVal = val.replace(_prefix.current, '').trim().replace(/\s/g, '').replace(_currency.current, ''); var decimalCharIndexWithoutPrefix = filteredVal.search(_decimal.current); _decimal.current.lastIndex = 0; return { decimalCharIndex: decimalCharIndex, decimalCharIndexWithoutPrefix: decimalCharIndexWithoutPrefix }; }; var getCharIndexes = function getCharIndexes(val) { var decimalCharIndex = val.search(_decimal.current); _decimal.current.lastIndex = 0; var minusCharIndex = val.search(_minusSign.current); _minusSign.current.lastIndex = 0; var suffixCharIndex = val.search(_suffix.current); _suffix.current.lastIndex = 0; var currencyCharIndex = val.search(_currency.current); if (currencyCharIndex === 0 && prefixChar.current && prefixChar.current.length > 1) { currencyCharIndex = prefixChar.current.trim().length; } _currency.current.lastIndex = 0; return { decimalCharIndex: decimalCharIndex, minusCharIndex: minusCharIndex, suffixCharIndex: suffixCharIndex, currencyCharIndex: currencyCharIndex }; }; var insert = function insert(event, text) { var sign = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : { isDecimalSign: false, isMinusSign: false }; var minusCharIndexOnText = text.search(_minusSign.current); _minusSign.current.lastIndex = 0; if (!allowMinusSign() && minusCharIndexOnText !== -1) { return; } var selectionStart = inputRef.current.selectionStart; var selectionEnd = inputRef.current.selectionEnd; var inputValue = inputRef.current.value.trim(); var _getCharIndexes2 = getCharIndexes(inputValue), decimalCharIndex = _getCharIndexes2.decimalCharIndex, minusCharIndex = _getCharIndexes2.minusCharIndex, suffixCharIndex = _getCharIndexes2.suffixCharIndex, currencyCharIndex = _getCharIndexes2.currencyCharIndex; var maxFractionDigits = numberFormat.current.resolvedOptions().maximumFractionDigits; var newValueStr; if (sign.isMinusSign) { var isNewMinusSign = minusCharIndex === -1; // #6522 - Selected negative value can't be overwritten with a minus ('-') symbol if (selectionStart === 0 || selectionStart === currencyCharIndex + 1) { newValueStr = inputValue; if (isNewMinusSign || selectionEnd !== 0) { newValueStr = insertText(inputValue, text, 0, selectionEnd); } updateValue(event, newValueStr, text, 'insert'); } } else if (sign.isDecimalSign) { if (decimalCharIndex > 0 && selectionStart === decimalCharIndex) { updateValue(event, inputValue, text, 'insert'); } else if (decimalCharIndex > selectionStart && decimalCharIndex < selectionEnd) { newValueStr = insertText(inputValue, text, selectionStart, selectionEnd); updateValue(event, newValueStr, text, 'insert'); } else if (decimalCharIndex === -1 && (maxFractionDigits || props.maxFractionDigits)) { var allowedDecimal = inputMode !== 'numeric' || inputMode === 'numeric' && (props.min || props.max); if (allowedDecimal) { newValueStr = insertText(inputValue, text, selectionStart, selectionEnd); updateValue(event, newValueStr, text, 'insert'); } } } else { var operation = selectionStart !== selectionEnd ? 'range-insert' : 'insert'; if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) { if (selectionStart + text.length - (decimalCharIndex + 1) <= maxFractionDigits) { var charIndex = currencyCharIndex >= selectionStart ? currencyCharIndex - 1 : suffixCharIndex >= selectionStart ? suffixCharIndex : inputValue.length; newValueStr = inputValue.slice(0, selectionStart) + text + inputValue.slice(selectionStart + text.length, charIndex) + inputValue.slice(charIndex); updateValue(event, newValueStr, text, operation); } } else { newValueStr = insertText(inputValue, text, selectionStart, selectionEnd); updateValue(event, newValueStr, text, operation); } } }; var replaceSuffix = function replaceSuffix(value) { return value ? value.replace(_suffix.current, '').trim().replace(/\s/g, '').replace(_currency.current, '') : value; }; var insertText = function insertText(value, text, start, end) { var textSplit = isDecimalSign(text) ? text : text.split(_decimal.current); if (textSplit.length === 2) { var decimalCharIndex = value.slice(start, end).search(_decimal.current); _decimal.current.lastIndex = 0; return decimalCharIndex > 0 ? value.slice(0, start) + formatValue(text) + replaceSuffix(value).slice(end) : value || formatValue(text); } else if (isDecimalSign(text) && value.length === 0) { return formatValue('0.'); } else if (end - start === value.length) { return formatValue(text); } else if (start === 0) { var suffix = utils.ObjectUtils.isLetter(value[end]) ? end - 1 : end; return text + value.slice(suffix); } else if (end === value.length) { return value.slice(0, start) + text; } var selectionValue = value.slice(start, end); // Fix: if the suffix starts with a space, the input will be cleared after pasting var space = /\s$/.test(selectionValue) ? ' ' : ''; return value.slice(0, start) + text + space + value.slice(end); }; var deleteRange = function deleteRange(value, start, end) { var newValueStr; if (end - start === value.length) { newValueStr = ''; } else if (start === 0) { newValueStr = value.slice(end); } else if (end === value.length) { newValueStr = value.slice(0, start); } else { newValueStr = value.slice(0, start) + value.slice(end); } return newValueStr; }; var initCursor = function initCursor() { var selectionStart = inputRef.current.selectionStart; var inputValue = inputRef.current.value; var valueLength = inputValue.length; var index = null; // remove prefix var prefixLength = (prefixChar.current || '').length; inputValue = inputValue.replace(_prefix.current, ''); selectionStart = selectionStart - prefixLength; var _char5 = inputValue.charAt(selectionStart); if (isNumeralChar(_char5)) { return selectionStart + prefixLength; } //left var i = selectionStart - 1; while (i >= 0) { _char5 = inputValue.charAt(i); if (isNumeralChar(_char5)) { index = i + prefixLength; break; } else { i--; } } if (index !== null) { inputRef.current.setSelectionRange(index + 1, index + 1); } else { i = selectionStart; while (i < valueLength) { _char5 = inputValue.charAt(i); if (isNumeralChar(_char5)) { index = i + prefixLength; break; } else { i++; } } if (index !== null) { inputRef.current.setSelectionRange(index, index); } } return index || 0; }; var onInputPointerDown = function onInputPointerDown() { isFocusedByClick.current = true; }; var onInputClick = function onInputClick() { initCursor(); }; var isNumeralChar = function isNumeralChar(_char6) { if (_char6.length === 1 && (_numeral.current.test(_char6) || _decimal.current.test(_char6) || _group.current.test(_char6) || _minusSign.current.test(_char6))) { resetRegex(); return true; } return false; }; var resetRegex = function resetRegex() { _numeral.current.lastIndex = 0; _decimal.current.lastIndex = 0; _group.current.lastIndex = 0; _minusSign.current.lastIndex = 0; }; var updateValue = function updateValue(event, valueStr, insertedValueStr, operation) { var currentValue = inputRef.current.value; var newValue = null; if (valueStr != null) { newValue = evaluateEmpty(parseValue(valueStr)); updateInput(newValue, insertedValueStr, operation, valueStr); handleOnChange(event, currentValue, newValue); } }; var evaluateEmpty = function evaluateEmpty(newValue) { return !newValue && !props.allowEmpty ? props.min || 0 : newValue; }; var handleOnChange = function handleOnChange(event, currentValue, newValue) { if (props.onChange && isValueChanged(currentValue, newValue)) { props.onChange({ originalEvent: event, value: newValue }); } }; var isValueChanged = function isValueChanged(currentValue, newValue) { if (newValue === null && currentValue !== null) { return true; } if (newValue != null) { var parsedCurrentValue = typeof currentValue === 'string' ? parseValue(currentValue) : currentValue; return newValue !== parsedCurrentValue; } return false; }; var validateValue = function validateValue(value) { if (value === '-') { return null; } return validateValueByLimit(value); }; var validateValueByLimit = function validateValueByLimit(value) { if (utils.ObjectUtils.isEmpty(value)) { return null; } if (props.min !== null && value < props.min) { return props.min; } if (props.max !== null && value > props.max) { return props.max; } return value; }; var updateInput = function updateInput(value, insertedValueStr, operation, valueStr) { insertedValueStr = insertedValueStr || ''; var inputEl = inputRef.current; var inputValue = inputEl.value; var newValue = formatValue(value); var currentLength = inputValue.length; if (newValue !== valueStr) { newValue = concatValues(newValue, valueStr); } if (currentLength === 0) { inputEl.value = newValue; inputEl.setSelectionRange(0, 0); var index = initCursor(); var selectionEnd = index + insertedValueStr.length + (isDecimalSign(insertedValueStr) ? 1 : 0); inputEl.setSelectionRange(selectionEnd, selectionEnd); } else { var selectionStart = inputEl.selectionStart; var _selectionEnd = inputEl.selectionEnd; if (props.maxLength && props.maxLength < newValue.length) { return; } inputEl.value = newValue; var newLength = newValue.length; if (operation === 'range-insert') { var startValue = parseValue((inputValue || '').slice(0, selectionStart)); var startValueStr = startValue !== null ? startValue.toString() : ''; var startExpr = startValueStr.split('').join("(".concat(groupChar.current, ")?")); var sRegex = new RegExp(startExpr, 'g'); sRegex.test(newValue); var tExpr = insertedValueStr.split('').join("(".concat(groupChar.current, ")?")); var tRegex = new RegExp(tExpr, 'g'); tRegex.test(newValue.slice(sRegex.lastIndex)); _selectionEnd = sRegex.lastIndex + tRegex.lastIndex; inputEl.setSelectionRange(_selectionEnd, _selectionEnd); } else if (newLength === currentLength) { if (operation === 'insert' || operation === 'delete-back-single') { var newSelectionEnd = _selectionEnd; if (insertedValueStr === '0') { newSelectionEnd = _selectionEnd + 1; } else { newSelectionEnd = newSelectionEnd + Number(isDecimalSign(value) || isDecimalSign(insertedValueStr)); } inputEl.setSelectionRange(newSelectionEnd, newSelectionEnd); } else if (operation === 'delete-single') { inputEl.setSelectionRange(_selectionEnd - 1, _selectionEnd - 1); } else if (operation === 'delete-range' || operation === 'spin') { inputEl.setSelectionRange(_selectionEnd, _selectionEnd); } } else if (operation === 'delete-back-single') { var prevChar = inputValue.charAt(_selectionEnd - 1); var nextChar = inputValue.charAt(_selectionEnd); var diff = currentLength - newLength; var isGroupChar = _group.current.test(nextChar); if (isGroupChar && diff === 1) { _selectionEnd = _selectionEnd + 1; } else if (!isGroupChar && isNumeralChar(prevChar)) { _selectionEnd = _selectionEnd + (-1 * diff + 1); } _group.current.lastIndex = 0; inputEl.setSelectionRange(_selectionEnd, _selectionEnd); } else if (inputValue === '-' && operation === 'insert') { inputEl.setSelectionRange(0, 0); var _index2 = initCursor(); var _selectionEnd2 = _index2 + insertedValueStr.length + 1; inputEl.setSelectionRange(_selectionEnd2, _selectionEnd2); } else { _selectionEnd = _selectionEnd + (newLength - currentLength); inputEl.setSelectionRange(_selectionEnd, _selectionEnd); } } inputEl.setAttribute('aria-valuenow', value); }; var updateInputValue = function updateInputValue(newValue) { newValue = evaluateEmpty(newValue); var inputEl = inputRef.current; var value = inputEl.value; var _formattedValue = formattedValue(newValue); if (value !== _formattedValue) { inputEl.value = _formattedValue; inputEl.setAttribute('aria-valuenow', newValue); } }; var formattedValue = function formattedValue(val) { return formatValue(evaluateEmpty(val)); }; var concatValues = function concatValues(val1, val2) { if (val1 && val2) { var decimalCharIndex = val2.search(_decimal.current); _decimal.current.lastIndex = 0; var newVal1 = replaceDecimalSeparator(val1).split(_decimal.current)[0].replace(_suffix.current, '').trim(); return decimalCharIndex !== -1 ? newVal1 + val2.slice(decimalCharIndex) : val1; } return val1; }; var getDecimalLength = function getDecimalLength(value) { if (value) { var valueSplit = value.split(_decimal.current); if (valueSplit.length === 2) { return replaceSuffix(valueSplit[1]).length; } } return 0; }; var updateModel = function updateModel(event, value) { if (props.onValueChange) { props.onValueChange({ originalEvent: event, value: value, stopPropagation: function stopPropagation() { event === null || event === void 0 || event.stopPropagation(); }, preventDefault: function preventDefault() { event === null || event === void 0 || event.preventDefault(); }, target: { name: props.name, id: props.id, value: value } }); } }; var onInputFocus = function onInputFocus(event) { setFocusedState(true); props.onFocus && props.onFocus(event); if ((props.suffix || props.currency || props.prefix) && inputRef.current && !isFocusedByClick.current) { // GitHub #1866,#5537 var inputValue = inputRef.current.value; var prefixLength = (prefixChar.current || '').length; var suffixLength = (suffixChar.current || '').length; var end = inputValue.length === 0 ? 0 : inputValue.length - suffixLength; inputRef.current.setSelectionRange(prefixLength, end); } }; var onInputBlur = function onInputBlur(event) { setFocusedState(false); isFocusedByClick.current = false; if (inputRef.current) { var currentValue = inputRef.current.value; if (isValueChanged(currentValue, props.value)) { var newValue = validateValue(parseValue(currentValue)); updateInputValue(newValue); updateModel(event, newValue); } } props.onBlur && props.onBlur(event); }; var clearTimer = function clearTimer() { if (timer.current) { clearInterval(timer.current); } }; var changeValue = function changeValue() { var val = validateValueByLimit(props.value); updateInputValue(props.format ? val : replaceDecimalSeparator(val)); var newValue = validateValue(props.value); if (props.value !== null && props.value !== newValue) { updateModel(null, newValue); } }; var getFormatter = function getFormatter() { return numberFormat.current; }; React__namespace.useImperativeHandle(ref, function () { return { props: props, focus: function focus() { return utils.DomHandler.focus(inputRef.current); }, getFormatter: getFormatter, getElement: function getElement() { return elementRef.current; }, getInput: function getInput() { return inputRef.current; } }; }); React__namespace.useEffect(function () { utils.ObjectUtils.combinedRefs(inputRef, props.inputRef); }, [inputRef, props.inputRef]); hooks.useUnmountEffect(function () { clearTimer(); }); hooks.useMountEffect(function () { constructParser(); var newValue = validateValue(props.value); if (props.value !== null && props.value !== newValue) { updateModel(null, newValue); } }); hooks.useUpdateEffect(function () { constructParser(); changeValue(); }, [_locale, props.locale, props.localeMatcher, props.mode, props.currency, props.currencyDisplay, props.useGrouping, props.minFractionDigits, props.maxFractionDigits, props.suffix, props.prefix]); hooks.useUpdateEffect(function () { changeValue(); }, [props.value]); hooks.useUpdateEffect(function () { // #5245 prevent infinite loop if (props.disabled) { clearTimer(); } }, [props.disabled]); var createInputElement = function createI