UNPKG

@procore/core-react

Version:
497 lines (487 loc) • 27.4 kB
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 _toArray(r) { return _arrayWithHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableRest(); } 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 _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 _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 _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } 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; } 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 _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 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); } import { NumberFormatter } from '@procore/globalization-toolkit'; import { getFormatterLocale } from '../_utils/i18n'; export var defaultLocale = 'en-US'; export var minus = '-'; export var emptyString = ''; export var leftBrace = '('; export var rightBrace = ')'; export var backspaceKey = 'Backspace'; export var deleteKey = 'Delete'; export var numericKeypadDel = 'Del'; // for delete key from numeric keypad in IE export var periodKey = '.'; export var numericKeypadDecimal = 'Decimal'; // for period key from numeric keypad in IE export var numericKeypadKey = 'Del'; // for delete key from numeric keypad in IE export var androidUnidentifiedKey = 'Unidentified'; export var maxDigitLength = 15; // Safe length to avoid the loss of precision export var maxDecimalScale = maxDigitLength - 1; export var commaKey = ','; export var metaKeyIdentifier = 'Meta'; export var controlKey = 'Control'; export var highlightAllKey = 'a'; export var copyKey = 'c'; // fixes binary rounding issues (e.g: (0.615).toFixed(2) returns 0.61) export function toFixed(value, precision) { var isExponentialRecord = value.toString().includes('e'); if (isExponentialRecord) return value; return Number(Number(Math.round(Number(value + 'e' + precision)) + 'e-' + precision).toFixed(precision)); } export function formatterFactory(options) { try { return new NumberFormatter(options); } catch (error) { console.error("Deprecated. @procore/core-react Intl.NumberFormat error for locale ".concat(options.locale, ". Will fall back to en-US. In a future major, this will become an error and not provide a fallback."), error); return new NumberFormatter(_objectSpread(_objectSpread({}, options), {}, { locale: 'en-US' })); } } export function getSeparators(locale) { var formatterLocale = getFormatterLocale(locale); var separators = new NumberFormatter({ locale: formatterLocale }).getNumberSeparators(); return { group: separators.group, decimal: separators.decimal || '' }; } // Check if a valid numeric string is a negative value export var isValidNegative = function isValidNegative(value) { var _value$match; value = String(value); var minusRegExp = new RegExp("".concat(minus), 'g'); var numberOfMinuses = (_value$match = value.match(minusRegExp)) === null || _value$match === void 0 ? void 0 : _value$match.length; var containsValidParenthesis = value.indexOf(leftBrace) === 0 && value.indexOf(rightBrace) === value.length - 1; var isNegative = numberOfMinuses === 1 && !containsValidParenthesis || !numberOfMinuses && containsValidParenthesis; return isNegative; }; export function verifyDecimalScale(decimalScale) { if (decimalScale === true) { return maxDecimalScale; } if (decimalScale === false) { return 0; } if (decimalScale < 0) { console.warn("WARNING: Decimal scale (".concat(decimalScale, ") is out of range. It was reset to 0. Possible values are from 0 to ").concat(maxDecimalScale, ".")); return 0; } if (decimalScale > maxDecimalScale) { console.warn("WARNING: Decimal scale (".concat(decimalScale, ") is out of range. It was reset to the max value of ").concat(maxDecimalScale, ". Possible values are from 0 to ").concat(maxDecimalScale, ".")); return maxDecimalScale; } return decimalScale; } export function unformat(locale, value) { var isNumericString = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var isValueNegative = isValidNegative(value); var decimal = isNumericString || typeof value === 'number' ? periodKey : getSeparators(locale).decimal; var numericRegExp = new RegExp("[^0-9".concat(decimal, "]"), 'g'); var strValue = String(value); // Normalize value with numeric characters strValue = strValue.replace(numericRegExp, emptyString); // Normalize "minus" sign for negatives if (isValueNegative) { strValue = "".concat(minus).concat(strValue); } // Normalize integer and fraction parts of the value var _strValue$split = strValue.split(decimal), _strValue$split2 = _toArray(_strValue$split), integer = _strValue$split2[0], fractions = _strValue$split2.slice(1); var fraction = fractions.join(emptyString); return { integer: integer, decimal: strValue.includes(decimal) ? decimal : emptyString, fraction: fraction, parsedNumber: parseFloat("".concat(integer).concat(periodKey).concat(fraction)) }; } export function refineIntegerFromLeadingZeroes(integer) { var isNegativeValue = isValidNegative(integer); var refinedFromMinus = integer.replace(minus, emptyString); var hasLeadingZeroes = refinedFromMinus.slice(0, 1); var refinedFromLeadingZeroes = refinedFromMinus.replace(/^0+/, emptyString); var zeroPadded = hasLeadingZeroes && refinedFromLeadingZeroes === emptyString; return "".concat(isNegativeValue ? minus : emptyString).concat(zeroPadded ? 0 : refinedFromLeadingZeroes); } export function getLengthInfo(locale, value) { var decimalScale = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var fillDecimalScale = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'none'; var isNumericString = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; var isNegativeValue = isValidNegative(value); var _unformat = unformat(locale, value, isNumericString), integer = _unformat.integer, decimal = _unformat.decimal, fraction = _unformat.fraction; var integerRefinedFromLeadingZeros = refineIntegerFromLeadingZeroes(integer); var getIntegerLength = function getIntegerLength() { var accountEmptyInteger = integer === emptyString && decimal && fraction.length > 0; if (accountEmptyInteger) return 1; var accountEmptyNegativeInteger = integer === minus && decimal && fraction.length > 0; if (accountEmptyNegativeInteger) return 2; var accountInteger = integer.length > 0 && integer !== emptyString && integer !== minus; if (accountInteger) return integerRefinedFromLeadingZeros.length; return 0; }; var integerLength = getIntegerLength(); var fractionLength = fraction.length; var length = integerLength + fractionLength; var safeLength = maxDigitLength + (isNegativeValue ? 1 : 0); var isSafeLength = safeLength - length > -1; var isDecimalScaleNonFillable = fillDecimalScale === 'none'; var safeIntegerLength = isDecimalScaleNonFillable ? safeLength : safeLength - decimalScale; var safeFractionLength = isDecimalScaleNonFillable ? Math.min(safeLength - integerRefinedFromLeadingZeros.slice(0, safeIntegerLength).length, decimalScale) : decimalScale; var isSafeIntegerLength = safeIntegerLength - integerLength > -1; var isSafeFractionLength = safeFractionLength - fractionLength > -1; var safelyTruncatedInteger = isSafeIntegerLength ? integerRefinedFromLeadingZeros : integerRefinedFromLeadingZeros.slice(0, safeIntegerLength); var safelyTruncatedFraction = isSafeFractionLength ? fraction : fraction.slice(0, safeFractionLength); var safelyTruncatedValue = "".concat(safelyTruncatedInteger).concat(decimal).concat(safelyTruncatedFraction); return { length: length, safeLength: safeLength, isSafeLength: isSafeLength, safelyTruncatedValue: safelyTruncatedValue, integerLength: integerLength, safeIntegerLength: safeIntegerLength, isSafeIntegerLength: isSafeIntegerLength, fractionLength: fractionLength, safeFractionLength: safeFractionLength, isSafeFractionLength: isSafeFractionLength }; } export function format(locale, decimalScale, fillDecimalScale, value) { var isNumericString = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; var fixedDecimalScale = fillDecimalScale === 'always'; var fillDecimalScaleOnBlur = fillDecimalScale === 'onBlur'; var autoFilledScale = fixedDecimalScale || fillDecimalScaleOnBlur; var _getLengthInfo = getLengthInfo(locale, value, decimalScale, fillDecimalScale, isNumericString), length = _getLengthInfo.length, safeLength = _getLengthInfo.safeLength, isSafeLength = _getLengthInfo.isSafeLength, safelyTruncatedValue = _getLengthInfo.safelyTruncatedValue; var isTruncatedBeforeFormatting = autoFilledScale || !isSafeLength; var valueOfVerifiedLength = isTruncatedBeforeFormatting ? safelyTruncatedValue : value; var _unformat2 = unformat(locale, valueOfVerifiedLength, isNumericString || typeof value === 'number'), integer = _unformat2.integer, decimal = _unformat2.decimal, fraction = _unformat2.fraction; var options = { minimumFractionDigits: fixedDecimalScale ? decimalScale : Math.min(Math.max(0, (fraction === null || fraction === void 0 ? void 0 : fraction.length) || 0), decimalScale), maximumFractionDigits: decimalScale }; var formatterLocale = getFormatterLocale(locale); var formatter = formatterFactory(_objectSpread({ locale: formatterLocale }, options)); var isDecimalAllowed = decimalScale > 0; var isEmptyValue = integer === emptyString && !decimal && !fraction; if (isEmptyValue) return emptyString; var isMinusValue = integer === minus && !decimal && !fraction; if (isMinusValue) return minus; var isDecimalValue = integer === emptyString && decimal && !fraction && !fixedDecimalScale; if (isDecimalValue) return isDecimalAllowed ? decimal : emptyString; var isMinusDecimalValue = integer === minus && decimal && !fraction && !fixedDecimalScale; if (isMinusDecimalValue) return "".concat(minus).concat(isDecimalAllowed ? decimal : emptyString); var isFractionValueWithEmptyInteger = (integer === minus || integer === emptyString) && decimal && (fraction || !fraction && fixedDecimalScale); if (isFractionValueWithEmptyInteger) { var numberOfZerosToPad = decimalScale - fraction.length; var preparedFraction = numberOfZerosToPad > 0 && fixedDecimalScale ? fraction.concat(Array.from({ length: numberOfZerosToPad }, function (_) { return '0'; }).join(emptyString)) : fraction.slice(0, decimalScale); return "".concat(integer).concat(isDecimalAllowed ? decimal : emptyString).concat(preparedFraction); } if (typeof valueOfVerifiedLength === 'number') { return formatter.formatNumber(valueOfVerifiedLength); } if (fraction) { var number = parseFloat("".concat(integer).concat(periodKey).concat(fraction.slice(0, options.maximumFractionDigits))); if (isNaN(number)) return emptyString; return formatter.formatNumber(number); } if (integer) { var _number = parseInt(integer, 10); if (isNaN(_number)) return emptyString; var formatted = formatter.formatNumber(_number); var _isDecimalAllowed = !(options.minimumFractionDigits === 0 && options.maximumFractionDigits === 0); var isDecimalAvailable = decimal && !formatted.includes(decimal) && length < safeLength; return _isDecimalAllowed && isDecimalAvailable ? "".concat(formatted).concat(decimal) : formatted; } return emptyString; } export function identifyPressedKey(decimalSeparatorKey, inputType, pressedKey, prevValue, value) { if (pressedKey !== androidUnidentifiedKey) return pressedKey; if (inputType === 'deleteContentBackward') return backspaceKey; if (inputType === 'insertText') { var diff = value.split(emptyString).find(function (_char, i) { return _char !== prevValue.split(emptyString)[i]; }); switch (diff) { case decimalSeparatorKey: return decimalSeparatorKey; case minus: return minus; default: return pressedKey; } } return pressedKey; } export function getPressedKeyInfo(decimalSeparatorKey, group, pressedKey, prevCursorPosition, prevValue, verifiedDecimalScale) { var selectionStart = prevCursorPosition.selectionStart, selectionEnd = prevCursorPosition.selectionEnd, selection = prevCursorPosition.selection; var backspaceWasPressed = pressedKey === backspaceKey; var backspacedChar = backspaceWasPressed ? prevValue.slice(selectionStart + (selection ? 0 : -1), selectionEnd) : null; var decimalWasPressed = [decimalSeparatorKey, numericKeypadDecimal].includes(pressedKey); var decimalPressedForInteger = decimalWasPressed && verifiedDecimalScale === 0; var deleteWasPressed = [deleteKey, numericKeypadDel].includes(pressedKey); var deletedChar = deleteWasPressed ? prevValue.slice(selectionStart, selectionEnd + (selection ? 0 : 1)) : null; var thousandsSeparatorWasBackspaced = backspaceWasPressed && backspacedChar === group; var thousandsSeparatorWasDeleted = deleteWasPressed && deletedChar === group; return { backspaceWasPressed: backspaceWasPressed, backspacedChar: backspacedChar, decimalWasPressed: decimalWasPressed, decimalPressedForInteger: decimalPressedForInteger, deleteWasPressed: deleteWasPressed, deletedChar: deletedChar, thousandsSeparatorWasBackspaced: thousandsSeparatorWasBackspaced, thousandsSeparatorWasDeleted: thousandsSeparatorWasDeleted }; } export function prepareValueToFormatting(decimal, decimalSeparatorKey, group, pressedKey, prevCursorPosition, prevValue, verifiedDecimalScale, value) { var _getPressedKeyInfo = getPressedKeyInfo(decimalSeparatorKey, group, pressedKey, prevCursorPosition, prevValue, verifiedDecimalScale), decimalPressedForInteger = _getPressedKeyInfo.decimalPressedForInteger, thousandsSeparatorWasBackspaced = _getPressedKeyInfo.thousandsSeparatorWasBackspaced, thousandsSeparatorWasDeleted = _getPressedKeyInfo.thousandsSeparatorWasDeleted; // Remove preceding/following integer digit instead of thousands separator if (thousandsSeparatorWasBackspaced || thousandsSeparatorWasDeleted) { var selectionEnd = prevCursorPosition.selectionEnd, selection = prevCursorPosition.selection; var getCursorShift = function getCursorShift() { if (thousandsSeparatorWasDeleted) { var deletedAsSelection = selection === group; return deletedAsSelection ? 0 : 1; } if (thousandsSeparatorWasBackspaced) return -2; return 0; }; var indexOfIntegerDigitToRemove = selectionEnd + getCursorShift(); return prevValue.split(emptyString).filter(function (_, i) { return i !== indexOfIntegerDigitToRemove; }).join(emptyString); } // Ignore typing decimal separator for integer if (decimalPressedForInteger) { return value.replace(new RegExp("[".concat(decimal, "]"), 'g'), emptyString); } return value; } export function getNewCursorPosition(decimal, decimalSeparatorKey, group, newValue, pressedKey, prevCursorPosition, prevValue, value, verifiedDecimalScale, locale, fillDecimalScale) { var fixedDecimalScale = fillDecimalScale === 'always'; var _getLengthInfo2 = getLengthInfo(locale, prevValue, verifiedDecimalScale, fillDecimalScale), prevLength = _getLengthInfo2.length, prevFractionLength = _getLengthInfo2.fractionLength; var _getLengthInfo3 = getLengthInfo(locale, newValue, verifiedDecimalScale, fillDecimalScale), newLength = _getLengthInfo3.length, newSafeLength = _getLengthInfo3.safeLength, newIntegerLength = _getLengthInfo3.integerLength, newSafeIntegerLength = _getLengthInfo3.safeIntegerLength, newFractionLength = _getLengthInfo3.fractionLength, newSafeFractionLength = _getLengthInfo3.safeFractionLength; var _getPressedKeyInfo2 = getPressedKeyInfo(decimalSeparatorKey, group, pressedKey, prevCursorPosition, prevValue, verifiedDecimalScale), backspaceWasPressed = _getPressedKeyInfo2.backspaceWasPressed, backspacedChar = _getPressedKeyInfo2.backspacedChar, decimalWasPressed = _getPressedKeyInfo2.decimalWasPressed, deleteWasPressed = _getPressedKeyInfo2.deleteWasPressed, thousandsSeparatorWasBackspaced = _getPressedKeyInfo2.thousandsSeparatorWasBackspaced; var digitTyped = pressedKey && /\d/g.test(pressedKey); var digitBackspaced = backspaceWasPressed && backspacedChar && /\d/g.test(backspacedChar); var decimalBackspaced = backspaceWasPressed && backspacedChar === decimal; var selectionStart = prevCursorPosition.selectionStart, selectionEnd = prevCursorPosition.selectionEnd, selection = prevCursorPosition.selection; var defaultPosition = Math.max(selectionEnd + (newValue.length - prevValue.length), 0); var isPrevValueNegative = isValidNegative(prevValue); var isNewValueNegative = isValidNegative(newValue); var isDecimalAllowed = verifiedDecimalScale > 0; var digitTypedBeforeMinus = isPrevValueNegative && selectionEnd === 0 && digitTyped; var dotWithoutAnyDigitBefore = value.startsWith(decimal) && digitTyped; var minusWithDotWithoutAnyDigitBefore = value.startsWith(minus + decimal) && digitTyped; var leadingZeroAdded = pressedKey === '0' && selectionEnd === (isPrevValueNegative ? 1 : 0); var prevIndexOfDecimalSeparator = prevValue.indexOf(decimal); var prevCursorPositionInDecimalArea = prevIndexOfDecimalSeparator > -1 && prevIndexOfDecimalSeparator < selectionEnd; var prevCursorPositionInIntegerArea = prevIndexOfDecimalSeparator === -1 || prevIndexOfDecimalSeparator >= selectionEnd; var filledIntegerScaleDigitWasChanged = digitTyped && prevCursorPositionInIntegerArea && selectionEnd !== prevValue.length && newLength === prevLength && (newLength === newSafeLength || newIntegerLength === newSafeIntegerLength); var isDecimalScaleFilled = isDecimalAllowed && newFractionLength === prevFractionLength && newFractionLength === newSafeFractionLength; var filledDecimalScaleDigitWasBackspaced = isDecimalScaleFilled && prevCursorPositionInDecimalArea && digitBackspaced; var filledDecimalScaleDigitWasChanged = isDecimalScaleFilled && prevCursorPositionInDecimalArea && digitTyped; // Manage cursor when decimalSeparator typed in a new place of a decimal-allowed number var decimalNewPosition = newValue.indexOf(decimal); var restructuredByDecimal = isDecimalAllowed && decimalWasPressed && decimalNewPosition > -1; // Preserve cursor after first typed digit and before decimal separator var fixedDecimalScaleFirstTyping = fixedDecimalScale && value.length === (isNewValueNegative ? 2 : 1) && newValue.charAt(isNewValueNegative ? 1 : 0) === pressedKey; // Preserve cursor before "negative" sign var isLeadingZerosRemovedOnPrecedingDigitBackspace = backspaceWasPressed && defaultPosition === 0 && selectionEnd - defaultPosition > 1; var keepCursorBeforeNegativeSign = isNewValueNegative && isLeadingZerosRemovedOnPrecedingDigitBackspace; var getPositionOnRestructuringByDecimal = function getPositionOnRestructuringByDecimal() { return prevCursorPositionInDecimalArea ? newValue.length : decimalNewPosition + 1; }; var getPositionOnDecimalBackspace = function getPositionOnDecimalBackspace() { var removedCharShift = 1; var valueLength = newValue.length; if (prevFractionLength === 0) { return valueLength; } var delta = 0; var anchorDigitIndexFromTheEnd = 0; newValue.split(emptyString).reverse().forEach(function (_char2, i) { if (_char2 === group) { delta++; } if (i - delta === prevFractionLength - 1) { anchorDigitIndexFromTheEnd = i; } }); return valueLength - removedCharShift - anchorDigitIndexFromTheEnd; }; var getPositionOnDelete = function getPositionOnDelete() { var firstSymbolDeleted = selectionEnd === 0; if (firstSymbolDeleted) { return 0; } var removedCharShift = 1; var anchorDigitIndex = prevValue.slice(0, selectionEnd).replace(new RegExp("[".concat(group, "]"), 'g'), emptyString).length - 1; var delta = 0; var cursorPosition = 0; newValue.split(emptyString).forEach(function (_char3, i) { if (_char3 === group) { delta++; } if (i - delta === anchorDigitIndex) { cursorPosition = i; } }); return cursorPosition + removedCharShift; }; var getPositionOnFilledIntegerScaleDigitChange = function getPositionOnFilledIntegerScaleDigitChange() { var getGroupsNumber = function getGroupsNumber(value, start, end) { var _value$slice$match; return ((_value$slice$match = value.slice(start, end).match(new RegExp("[".concat(group, "]"), 'g'))) === null || _value$slice$match === void 0 ? void 0 : _value$slice$match.length) || 0; }; var numberOfGroupsBeforeCursorPrevValue = getGroupsNumber(prevValue, 0, selectionEnd); var numberOfGroupsBeforeCursorNewValue = getGroupsNumber(newValue, 0, selectionEnd + 1); var groupsDiffBeforeCursor = numberOfGroupsBeforeCursorNewValue - numberOfGroupsBeforeCursorPrevValue; var typedDigitShift = leadingZeroAdded ? 0 : 1; return selectionEnd + groupsDiffBeforeCursor + typedDigitShift; }; var getPositionOnSelectionChange = function getPositionOnSelectionChange() { if (restructuredByDecimal) return getPositionOnRestructuringByDecimal(); var getPasteText = function getPasteText() { var beforeSelectionPartLength = prevValue.slice(0, selectionStart).length; var afterSelectionPartLength = prevValue.slice(selectionEnd).length; var valueWithoutBeforePart = value.slice(beforeSelectionPartLength); var pasteText = valueWithoutBeforePart.slice(0, valueWithoutBeforePart.length - afterSelectionPartLength); return pasteText; }; var _unformat3 = unformat(locale, getPasteText()), pasteInteger = _unformat3.integer, pasteDecimal = _unformat3.decimal, pasteFraction = _unformat3.fraction; var refinedPasteText = "".concat(selectionStart === 0 ? refineIntegerFromLeadingZeroes(pasteInteger) : pasteInteger).concat(pasteDecimal).concat(pasteFraction); var refinedPasteTextLength = refinedPasteText.length; var anchorDigitIndexRaw = prevValue.slice(0, selectionStart).replace(new RegExp("[".concat(group).concat(decimal, "]"), 'g'), emptyString).length - 1; var anchorDigitIndexBase = anchorDigitIndexRaw > -1 ? anchorDigitIndexRaw : 0; var anchorDigitIndexShift = anchorDigitIndexRaw > -1 ? refinedPasteTextLength : Math.max(refinedPasteTextLength - 1, 0); var anchorIndex = anchorDigitIndexBase + anchorDigitIndexShift; var getCursorPositionShift = function getCursorPositionShift() { var negativeToPositiveConversion = isValidNegative(refinedPasteText) && isPrevValueNegative; var integerZeroBasedSelectionRemoval = refinedPasteTextLength === 0 && selectionStart === 0; var integerPartRemoved = integerZeroBasedSelectionRemoval && selectionEnd === prevIndexOfDecimalSeparator; var fractionZeroBasedSelectionRemoval = (refinedPasteTextLength === 0 || refinedPasteText === minus) && selectionStart === prevIndexOfDecimalSeparator + 1; var groupSelectionBackspaced = selection === group && thousandsSeparatorWasBackspaced; if (negativeToPositiveConversion || integerPartRemoved) return -1; if (integerZeroBasedSelectionRemoval || groupSelectionBackspaced) return 0; if (fractionZeroBasedSelectionRemoval) return 2; return 1; }; var delta = 0; var cursorPosition = 0; for (var i = 0; i < newValue.length; i++) { var _char4 = newValue.charAt(i); var isDeltaIncrementer = _char4 === group || _char4 === decimal && !pasteDecimal; if (isDeltaIncrementer) { delta++; } if (i - delta === anchorIndex) { cursorPosition = i + getCursorPositionShift(); break; } if (i + 1 === newValue.length) { cursorPosition = newValue.length; } } return cursorPosition; }; var getNewPosition = function getNewPosition() { if (selection) { return getPositionOnSelectionChange(); } if (digitTypedBeforeMinus) { return 2; } if (dotWithoutAnyDigitBefore) { return 3; } if (minusWithDotWithoutAnyDigitBefore) { return 4; } if (filledIntegerScaleDigitWasChanged) { return getPositionOnFilledIntegerScaleDigitChange(); } if (deleteWasPressed) { return getPositionOnDelete(); } if (decimalBackspaced) { return getPositionOnDecimalBackspace(); } if (filledDecimalScaleDigitWasBackspaced) { return selectionEnd - 1; } if (filledDecimalScaleDigitWasChanged) { return selectionEnd + 1; } if (restructuredByDecimal) { return getPositionOnRestructuringByDecimal(); } if (fixedDecimalScaleFirstTyping) { return isNewValueNegative ? 2 : 1; } if (keepCursorBeforeNegativeSign) { return 1; } return defaultPosition; }; return getNewPosition(); } export function identicalLocales(one, two) { var array1 = Array.isArray(one) ? one : [one]; var array2 = Array.isArray(two) ? two : [two]; return array1.join() === array2.join(); } //# sourceMappingURL=NumberInput.utils.js.map