Socket
Socket
Sign inDemoInstall

rc-input-number

Package Overview
Dependencies
Maintainers
7
Versions
217
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

rc-input-number - npm Package Compare versions

Comparing version 7.3.9 to 7.3.11

21

es/hooks/useCursor.js

@@ -7,6 +7,4 @@ import { useRef } from 'react';

*/
export default function useCursor(input, focused) {
var selectionRef = useRef(null);
function recordCursor() {

@@ -16,4 +14,4 @@ // Record position

var start = input.selectionStart,
end = input.selectionEnd,
value = input.value;
end = input.selectionEnd,
value = input.value;
var beforeTxt = value.substring(0, start);

@@ -28,3 +26,4 @@ var afterTxt = value.substring(end);

};
} catch (e) {// Fix error in Chrome:
} catch (e) {
// Fix error in Chrome:
// Failed to read the 'selectionStart' property from 'HTMLInputElement'

@@ -39,4 +38,2 @@ // http://stackoverflow.com/q/21177489/3040605

*/
function restoreCursor() {

@@ -47,7 +44,6 @@ if (input && selectionRef.current && focused) {

var _selectionRef$current = selectionRef.current,
beforeTxt = _selectionRef$current.beforeTxt,
afterTxt = _selectionRef$current.afterTxt,
start = _selectionRef$current.start;
beforeTxt = _selectionRef$current.beforeTxt,
afterTxt = _selectionRef$current.afterTxt,
start = _selectionRef$current.start;
var startPos = value.length;
if (value.endsWith(afterTxt)) {

@@ -60,3 +56,2 @@ startPos = value.length - selectionRef.current.afterTxt.length;

var newIndex = value.indexOf(beforeLastChar, start - 1);
if (newIndex !== -1) {

@@ -66,3 +61,2 @@ startPos = newIndex + 1;

}
input.setSelectionRange(startPos, startPos);

@@ -74,4 +68,3 @@ } catch (e) {

}
return [recordCursor, restoreCursor];
}

@@ -6,10 +6,7 @@ import { useRef, useEffect } from 'react';

*/
export default (function () {
var idRef = useRef(0);
var cleanUp = function cleanUp() {
raf.cancel(idRef.current);
};
useEffect(function () {

@@ -16,0 +13,0 @@ return cleanUp;

import InputNumber, { InputNumberProps } from './InputNumber';
export { InputNumberProps };
export type { InputNumberProps };
export default InputNumber;

@@ -28,3 +28,2 @@ import _extends from "@babel/runtime/helpers/esm/extends";

*/
var getDecimalValue = function getDecimalValue(stringMode, decimalValue) {

@@ -34,6 +33,4 @@ if (stringMode || decimalValue.isEmpty()) {

}
return decimalValue.toNumber();
};
var getDecimalIfValidate = function getDecimalIfValidate(value) {

@@ -43,54 +40,48 @@ var decimal = getMiniDecimal(value);

};
var InputNumber = /*#__PURE__*/React.forwardRef(function (props, ref) {
var _classNames;
var _props$prefixCls = props.prefixCls,
prefixCls = _props$prefixCls === void 0 ? 'rc-input-number' : _props$prefixCls,
className = props.className,
style = props.style,
min = props.min,
max = props.max,
_props$step = props.step,
step = _props$step === void 0 ? 1 : _props$step,
defaultValue = props.defaultValue,
value = props.value,
disabled = props.disabled,
readOnly = props.readOnly,
upHandler = props.upHandler,
downHandler = props.downHandler,
keyboard = props.keyboard,
_props$controls = props.controls,
controls = _props$controls === void 0 ? true : _props$controls,
stringMode = props.stringMode,
parser = props.parser,
formatter = props.formatter,
precision = props.precision,
decimalSeparator = props.decimalSeparator,
onChange = props.onChange,
onInput = props.onInput,
onPressEnter = props.onPressEnter,
onStep = props.onStep,
inputProps = _objectWithoutProperties(props, _excluded);
prefixCls = _props$prefixCls === void 0 ? 'rc-input-number' : _props$prefixCls,
className = props.className,
style = props.style,
min = props.min,
max = props.max,
_props$step = props.step,
step = _props$step === void 0 ? 1 : _props$step,
defaultValue = props.defaultValue,
value = props.value,
disabled = props.disabled,
readOnly = props.readOnly,
upHandler = props.upHandler,
downHandler = props.downHandler,
keyboard = props.keyboard,
_props$controls = props.controls,
controls = _props$controls === void 0 ? true : _props$controls,
stringMode = props.stringMode,
parser = props.parser,
formatter = props.formatter,
precision = props.precision,
decimalSeparator = props.decimalSeparator,
onChange = props.onChange,
onInput = props.onInput,
onPressEnter = props.onPressEnter,
onStep = props.onStep,
inputProps = _objectWithoutProperties(props, _excluded);
var inputClassName = "".concat(prefixCls, "-input");
var inputRef = React.useRef(null);
var _React$useState = React.useState(false),
_React$useState2 = _slicedToArray(_React$useState, 2),
focus = _React$useState2[0],
setFocus = _React$useState2[1];
_React$useState2 = _slicedToArray(_React$useState, 2),
focus = _React$useState2[0],
setFocus = _React$useState2[1];
var userTypingRef = React.useRef(false);
var compositionRef = React.useRef(false);
var shiftKeyRef = React.useRef(false); // ============================ Value =============================
var shiftKeyRef = React.useRef(false);
// ============================ Value =============================
// Real value control
var _React$useState3 = React.useState(function () {
return getMiniDecimal(value !== null && value !== void 0 ? value : defaultValue);
}),
_React$useState4 = _slicedToArray(_React$useState3, 2),
decimalValue = _React$useState4[0],
setDecimalValue = _React$useState4[1];
return getMiniDecimal(value !== null && value !== void 0 ? value : defaultValue);
}),
_React$useState4 = _slicedToArray(_React$useState3, 2),
decimalValue = _React$useState4[0],
setDecimalValue = _React$useState4[1];
function setUncontrolledDecimalValue(newDecimal) {

@@ -100,4 +91,4 @@ if (value === undefined) {

}
} // ====================== Parser & Formatter ======================
}
// ====================== Parser & Formatter ======================
/**

@@ -114,4 +105,2 @@ * `precision` is used for formatter & onChange.

*/
var getPrecision = React.useCallback(function (numStr, userTyping) {

@@ -121,27 +110,21 @@ if (userTyping) {

}
if (precision >= 0) {
return precision;
}
return Math.max(getNumberPrecision(numStr), getNumberPrecision(step));
}, [precision, step]); // >>> Parser
}, [precision, step]);
// >>> Parser
var mergedParser = React.useCallback(function (num) {
var numStr = String(num);
if (parser) {
return parser(numStr);
}
var parsedStr = numStr;
if (decimalSeparator) {
parsedStr = parsedStr.replace(decimalSeparator, '.');
} // [Legacy] We still support auto convert `$ 123,456` to `123456`
}
// [Legacy] We still support auto convert `$ 123,456` to `123456`
return parsedStr.replace(/[^\w.-]+/g, '');
}, [parser, decimalSeparator]); // >>> Formatter
}, [parser, decimalSeparator]);
// >>> Formatter
var inputValueRef = React.useRef('');

@@ -155,8 +138,6 @@ var mergedFormatter = React.useCallback(function (number, userTyping) {

}
var str = typeof number === 'number' ? num2str(number) : number; // User typing will not auto format with precision directly
var str = typeof number === 'number' ? num2str(number) : number;
// User typing will not auto format with precision directly
if (!userTyping) {
var mergedPrecision = getPrecision(str, userTyping);
if (validateNumber(str) && (decimalSeparator || mergedPrecision >= 0)) {

@@ -168,6 +149,5 @@ // Separator

}
return str;
}, [formatter, getPrecision, decimalSeparator]); // ========================== InputValue ==========================
}, [formatter, getPrecision, decimalSeparator]);
// ========================== InputValue ==========================
/**

@@ -182,26 +162,22 @@ * Input text value control

*/
var _React$useState5 = React.useState(function () {
var initValue = defaultValue !== null && defaultValue !== void 0 ? defaultValue : value;
if (decimalValue.isInvalidate() && ['string', 'number'].includes(_typeof(initValue))) {
return Number.isNaN(initValue) ? '' : initValue;
}
return mergedFormatter(decimalValue.toString(), false);
}),
_React$useState6 = _slicedToArray(_React$useState5, 2),
inputValue = _React$useState6[0],
setInternalInputValue = _React$useState6[1];
inputValueRef.current = inputValue; // Should always be string
var initValue = defaultValue !== null && defaultValue !== void 0 ? defaultValue : value;
if (decimalValue.isInvalidate() && ['string', 'number'].includes(_typeof(initValue))) {
return Number.isNaN(initValue) ? '' : initValue;
}
return mergedFormatter(decimalValue.toString(), false);
}),
_React$useState6 = _slicedToArray(_React$useState5, 2),
inputValue = _React$useState6[0],
setInternalInputValue = _React$useState6[1];
inputValueRef.current = inputValue;
// Should always be string
function setInputValue(newValue, userTyping) {
setInternalInputValue(mergedFormatter( // Invalidate number is sometime passed by external control, we should let it go
setInternalInputValue(mergedFormatter(
// Invalidate number is sometime passed by external control, we should let it go
// Otherwise is controlled by internal interactive logic which check by userTyping
// You can ref 'show limited value when input is not focused' test for more info.
newValue.isInvalidate() ? newValue.toString(false) : newValue.toString(!userTyping), userTyping));
} // >>> Max & Min limit
}
// >>> Max & Min limit
var maxDecimal = React.useMemo(function () {

@@ -217,3 +193,2 @@ return getDecimalIfValidate(max);

}
return maxDecimal.lessEquals(decimalValue);

@@ -225,11 +200,10 @@ }, [maxDecimal, decimalValue]);

}
return decimalValue.lessEquals(minDecimal);
}, [minDecimal, decimalValue]); // Cursor controller
}, [minDecimal, decimalValue]);
// Cursor controller
var _useCursor = useCursor(inputRef.current, focus),
_useCursor2 = _slicedToArray(_useCursor, 2),
recordCursor = _useCursor2[0],
restoreCursor = _useCursor2[1]; // ============================= Data =============================
_useCursor2 = _slicedToArray(_useCursor, 2),
recordCursor = _useCursor2[0],
restoreCursor = _useCursor2[1];
// ============================= Data =============================
/**

@@ -242,4 +216,2 @@ * Find target value closet within range.

*/
var getRangeValue = function getRangeValue(target) {

@@ -249,9 +221,7 @@ // target > max

return maxDecimal;
} // target < min
}
// target < min
if (minDecimal && !minDecimal.lessEquals(target)) {
return minDecimal;
}
return null;

@@ -262,4 +232,2 @@ };

*/
var isInRange = function isInRange(target) {

@@ -272,10 +240,8 @@ return !getRangeValue(target);

*/
var triggerValueUpdate = function triggerValueUpdate(newValue, userTyping) {
var updateValue = newValue;
var isRangeValidate = isInRange(updateValue) || updateValue.isEmpty(); // Skip align value when trigger value is empty.
var isRangeValidate = isInRange(updateValue) || updateValue.isEmpty();
// Skip align value when trigger value is empty.
// We just trigger onChange(null)
// This should not block user typing
if (!updateValue.isEmpty() && !userTyping) {

@@ -286,21 +252,18 @@ // Revert value in range if needed

}
if (!readOnly && !disabled && isRangeValidate) {
var numStr = updateValue.toString();
var mergedPrecision = getPrecision(numStr, userTyping);
if (mergedPrecision >= 0) {
updateValue = getMiniDecimal(toFixed(numStr, '.', mergedPrecision)); // When to fixed. The value may out of min & max range.
updateValue = getMiniDecimal(toFixed(numStr, '.', mergedPrecision));
// When to fixed. The value may out of min & max range.
// 4 in [0, 3.8] => 3.8 => 4 (toFixed)
if (!isInRange(updateValue)) {
updateValue = getMiniDecimal(toFixed(numStr, '.', mergedPrecision, true));
}
} // Trigger event
}
// Trigger event
if (!updateValue.equals(decimalValue)) {
setUncontrolledDecimalValue(updateValue);
onChange === null || onChange === void 0 ? void 0 : onChange(updateValue.isEmpty() ? null : getDecimalValue(stringMode, updateValue)); // Reformat input if value is not controlled
onChange === null || onChange === void 0 ? void 0 : onChange(updateValue.isEmpty() ? null : getDecimalValue(stringMode, updateValue));
// Reformat input if value is not controlled
if (value === undefined) {

@@ -310,37 +273,30 @@ setInputValue(updateValue, userTyping);

}
return updateValue;
}
return decimalValue;
}; // ========================== User Input ==========================
var onNextPromise = useFrame(); // >>> Collect input value
};
// ========================== User Input ==========================
var onNextPromise = useFrame();
// >>> Collect input value
var collectInputValue = function collectInputValue(inputStr) {
recordCursor(); // Update inputValue incase input can not parse as number
setInternalInputValue(inputStr); // Parse number
recordCursor();
// Update inputValue incase input can not parse as number
setInternalInputValue(inputStr);
// Parse number
if (!compositionRef.current) {
var finalValue = mergedParser(inputStr);
var finalDecimal = getMiniDecimal(finalValue);
if (!finalDecimal.isNaN()) {
triggerValueUpdate(finalDecimal, true);
}
} // Trigger onInput later to let user customize value if they want do handle something after onChange
onInput === null || onInput === void 0 ? void 0 : onInput(inputStr); // optimize for chinese input experience
}
// Trigger onInput later to let user customize value if they want do handle something after onChange
onInput === null || onInput === void 0 ? void 0 : onInput(inputStr);
// optimize for chinese input experience
// https://github.com/ant-design/ant-design/issues/8196
onNextPromise(function () {
var nextInputStr = inputStr;
if (!parser) {
nextInputStr = inputStr.replace(/。/g, '.');
}
if (nextInputStr !== inputStr) {

@@ -350,37 +306,29 @@ collectInputValue(nextInputStr);

});
}; // >>> Composition
};
// >>> Composition
var onCompositionStart = function onCompositionStart() {
compositionRef.current = true;
};
var onCompositionEnd = function onCompositionEnd() {
compositionRef.current = false;
collectInputValue(inputRef.current.value);
}; // >>> Input
};
// >>> Input
var onInternalInput = function onInternalInput(e) {
collectInputValue(e.target.value);
}; // ============================= Step =============================
};
// ============================= Step =============================
var onInternalStep = function onInternalStep(up) {
var _inputRef$current;
// Ignore step since out of range
if (up && upDisabled || !up && downDisabled) {
return;
} // Clear typing status since it may caused by up & down key.
}
// Clear typing status since it may caused by up & down key.
// We should sync with input value.
userTypingRef.current = false;
var stepDecimal = getMiniDecimal(shiftKeyRef.current ? getDecupleSteps(step) : step);
if (!up) {
stepDecimal = stepDecimal.negate();
}
var target = (decimalValue || getMiniDecimal(0)).add(stepDecimal.toString());

@@ -393,13 +341,10 @@ var updatedValue = triggerValueUpdate(target, false);

(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
}; // ============================ Flush =============================
};
// ============================ Flush =============================
/**
* Flush current input content to trigger value change & re-formatter input if needed
*/
var flushInputValue = function flushInputValue(userTyping) {
var parsedValue = getMiniDecimal(mergedParser(inputValue));
var formatValue = parsedValue;
if (!parsedValue.isNaN()) {

@@ -412,3 +357,2 @@ // Only validate value or empty value can be re-fill to inputValue

}
if (value !== undefined) {

@@ -422,8 +366,10 @@ // Reset back with controlled value first

};
// Solve the issue of the event triggering sequence when entering numbers in chinese input (Safari)
var onBeforeInput = function onBeforeInput() {
userTypingRef.current = true;
};
var onKeyDown = function onKeyDown(event) {
var which = event.which,
shiftKey = event.shiftKey;
shiftKey = event.shiftKey;
userTypingRef.current = true;
if (shiftKey) {

@@ -434,3 +380,2 @@ shiftKeyRef.current = true;

}
if (which === KeyCode.ENTER) {

@@ -440,12 +385,9 @@ if (!compositionRef.current) {

}
flushInputValue(false);
onPressEnter === null || onPressEnter === void 0 ? void 0 : onPressEnter(event);
}
if (keyboard === false) {
return;
} // Do step
}
// Do step
if (!compositionRef.current && [KeyCode.UP, KeyCode.DOWN].includes(which)) {

@@ -456,9 +398,7 @@ onInternalStep(KeyCode.UP === which);

};
var onKeyUp = function onKeyUp() {
userTypingRef.current = false;
shiftKeyRef.current = false;
}; // >>> Focus & Blur
};
// >>> Focus & Blur
var onBlur = function onBlur() {

@@ -468,6 +408,5 @@ flushInputValue(false);

userTypingRef.current = false;
}; // ========================== Controlled ==========================
};
// ========================== Controlled ==========================
// Input by precision
useLayoutUpdateEffect(function () {

@@ -477,10 +416,10 @@ if (!decimalValue.isInvalidate()) {

}
}, [precision]); // Input by value
}, [precision]);
// Input by value
useLayoutUpdateEffect(function () {
var newValue = getMiniDecimal(value);
setDecimalValue(newValue);
var currentParsedValue = getMiniDecimal(mergedParser(inputValue)); // When user typing from `1.2` to `1.`, we should not convert to `1` immediately.
var currentParsedValue = getMiniDecimal(mergedParser(inputValue));
// When user typing from `1.2` to `1.`, we should not convert to `1` immediately.
// But let it go if user set `formatter`
if (!newValue.equals(currentParsedValue) || !userTypingRef.current || formatter) {

@@ -490,4 +429,4 @@ // Update value as effect

}
}, [value]); // ============================ Cursor ============================
}, [value]);
// ============================ Cursor ============================
useLayoutUpdateEffect(function () {

@@ -497,4 +436,4 @@ if (formatter) {

}
}, [inputValue]); // ============================ Render ============================
}, [inputValue]);
// ============================ Render ============================
return /*#__PURE__*/React.createElement("div", {

@@ -510,3 +449,4 @@ className: classNames(prefixCls, className, (_classNames = {}, _defineProperty(_classNames, "".concat(prefixCls, "-focused"), focus), _defineProperty(_classNames, "".concat(prefixCls, "-disabled"), disabled), _defineProperty(_classNames, "".concat(prefixCls, "-readonly"), readOnly), _defineProperty(_classNames, "".concat(prefixCls, "-not-a-number"), decimalValue.isNaN()), _defineProperty(_classNames, "".concat(prefixCls, "-out-of-range"), !decimalValue.isInvalidate() && !isInRange(decimalValue)), _classNames)),

onCompositionStart: onCompositionStart,
onCompositionEnd: onCompositionEnd
onCompositionEnd: onCompositionEnd,
onBeforeInput: onBeforeInput
}, controls && /*#__PURE__*/React.createElement(StepHandler, {

@@ -513,0 +453,0 @@ prefixCls: prefixCls,

import _extends from "@babel/runtime/helpers/esm/extends";
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
/* eslint-disable react/no-unknown-property */

@@ -11,3 +10,2 @@ import * as React from 'react';

*/
var STEP_INTERVAL = 200;

@@ -17,41 +15,36 @@ /**

*/
var STEP_DELAY = 600;
export default function StepHandler(_ref) {
var prefixCls = _ref.prefixCls,
upNode = _ref.upNode,
downNode = _ref.downNode,
upDisabled = _ref.upDisabled,
downDisabled = _ref.downDisabled,
onStep = _ref.onStep;
upNode = _ref.upNode,
downNode = _ref.downNode,
upDisabled = _ref.upDisabled,
downDisabled = _ref.downDisabled,
onStep = _ref.onStep;
// ======================== Step ========================
var stepTimeoutRef = React.useRef();
var onStepRef = React.useRef();
onStepRef.current = onStep; // We will interval update step when hold mouse down
onStepRef.current = onStep;
// We will interval update step when hold mouse down
var onStepMouseDown = function onStepMouseDown(e, up) {
e.preventDefault();
onStepRef.current(up); // Loop step for interval
onStepRef.current(up);
// Loop step for interval
function loopStep() {
onStepRef.current(up);
stepTimeoutRef.current = setTimeout(loopStep, STEP_INTERVAL);
} // First time press will wait some time to trigger loop step update
}
// First time press will wait some time to trigger loop step update
stepTimeoutRef.current = setTimeout(loopStep, STEP_DELAY);
};
var onStopStep = function onStopStep() {
clearTimeout(stepTimeoutRef.current);
};
React.useEffect(function () {
return onStopStep;
}, []); // ======================= Render =======================
}, []);
// ======================= Render =======================
if (isMobile()) {
return null;
}
var handlerClassName = "".concat(prefixCls, "-handler");

@@ -58,0 +51,0 @@ var upClassName = classNames(handlerClassName, "".concat(handlerClassName, "-up"), _defineProperty({}, "".concat(handlerClassName, "-up-disabled"), upDisabled));

import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
import _createClass from "@babel/runtime/helpers/esm/createClass";
/* eslint-disable max-classes-per-file */

@@ -10,11 +9,8 @@ import { getNumberPrecision, isE, num2str, trimNumber, validateNumber } from './numberUtil';

*/
export var NumberDecimal = /*#__PURE__*/function () {
function NumberDecimal(value) {
_classCallCheck(this, NumberDecimal);
this.origin = '';
this.number = void 0;
this.empty = void 0;
if (!value && value !== 0 || !String(value).trim()) {

@@ -24,7 +20,5 @@ this.empty = true;

}
this.origin = String(value);
this.number = Number(value);
}
_createClass(NumberDecimal, [{

@@ -41,19 +35,14 @@ key: "negate",

}
var target = Number(value);
if (Number.isNaN(target)) {
return this;
}
var number = this.number + target; // [Legacy] Back to safe integer
var number = this.number + target;
// [Legacy] Back to safe integer
if (number > Number.MAX_SAFE_INTEGER) {
return new NumberDecimal(Number.MAX_SAFE_INTEGER);
}
if (number < Number.MIN_SAFE_INTEGER) {
return new NumberDecimal(Number.MIN_SAFE_INTEGER);
}
var maxPrecision = Math.max(getNumberPrecision(this.number), getNumberPrecision(target));

@@ -96,15 +85,11 @@ return new NumberDecimal(number.toFixed(maxPrecision));

var safe = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
if (!safe) {
return this.origin;
}
if (this.isInvalidate()) {
return '';
}
return num2str(this.number);
}
}]);
return NumberDecimal;

@@ -114,5 +99,5 @@ }();

/** BigInt will convert `0009` to `9`. We need record the len of decimal */
function BigIntDecimal(value) {
_classCallCheck(this, BigIntDecimal);
this.origin = '';

@@ -125,3 +110,2 @@ this.negative = void 0;

this.nan = void 0;
if (!value && value !== 0 || !String(value).trim()) {

@@ -131,5 +115,4 @@ this.empty = true;

}
this.origin = String(value); // Act like Number convert
this.origin = String(value);
// Act like Number convert
if (value === '-') {

@@ -139,11 +122,8 @@ this.nan = true;

}
var mergedValue = value; // We need convert back to Number since it require `toFixed` to handle this
var mergedValue = value;
// We need convert back to Number since it require `toFixed` to handle this
if (isE(mergedValue)) {
mergedValue = Number(mergedValue);
}
mergedValue = typeof mergedValue === 'string' ? mergedValue : num2str(mergedValue);
if (validateNumber(mergedValue)) {

@@ -161,3 +141,2 @@ var trimRet = trimNumber(mergedValue);

}
_createClass(BigIntDecimal, [{

@@ -182,3 +161,2 @@ key: "getMark",

*/
}, {

@@ -203,18 +181,14 @@ key: "alignDecimal",

}
var offset = new BigIntDecimal(value);
if (offset.isInvalidate()) {
return this;
}
var maxDecimalLength = Math.max(this.getDecimalStr().length, offset.getDecimalStr().length);
var myAlignedDecimal = this.alignDecimal(maxDecimalLength);
var offsetAlignedDecimal = offset.alignDecimal(maxDecimalLength);
var valueStr = (myAlignedDecimal + offsetAlignedDecimal).toString(); // We need fill string length back to `maxDecimalLength` to avoid parser failed
var valueStr = (myAlignedDecimal + offsetAlignedDecimal).toString();
// We need fill string length back to `maxDecimalLength` to avoid parser failed
var _trimNumber = trimNumber(valueStr),
negativeStr = _trimNumber.negativeStr,
trimStr = _trimNumber.trimStr;
negativeStr = _trimNumber.negativeStr,
trimStr = _trimNumber.trimStr;
var hydrateValueStr = "".concat(negativeStr).concat(trimStr.padStart(maxDecimalLength + 1, '0'));

@@ -254,3 +228,2 @@ return new BigIntDecimal("".concat(hydrateValueStr.slice(0, -maxDecimalLength), ".").concat(hydrateValueStr.slice(-maxDecimalLength)));

}
return Number(this.toString());

@@ -262,15 +235,11 @@ }

var safe = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
if (!safe) {
return this.origin;
}
if (this.isInvalidate()) {
return '';
}
return trimNumber("".concat(this.getMark()).concat(this.getIntegerStr(), ".").concat(this.getDecimalStr())).fullStr;
}
}]);
return BigIntDecimal;

@@ -284,3 +253,2 @@ }();

}
return new NumberDecimal(value);

@@ -292,22 +260,16 @@ }

*/
export function toFixed(numStr, separatorStr, precision) {
var cutOnly = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
if (numStr === '') {
return '';
}
var _trimNumber2 = trimNumber(numStr),
negativeStr = _trimNumber2.negativeStr,
integerStr = _trimNumber2.integerStr,
decimalStr = _trimNumber2.decimalStr;
negativeStr = _trimNumber2.negativeStr,
integerStr = _trimNumber2.integerStr,
decimalStr = _trimNumber2.decimalStr;
var precisionDecimalStr = "".concat(separatorStr).concat(decimalStr);
var numberWithoutDecimal = "".concat(negativeStr).concat(integerStr);
if (precision >= 0) {
// We will get last + 1 number to check if need advanced number
var advancedNum = Number(decimalStr[precision]);
if (advancedNum >= 5 && !cutOnly) {

@@ -317,15 +279,11 @@ var advancedDecimal = getMiniDecimal(numStr).add("".concat(negativeStr, "0.").concat('0'.repeat(precision)).concat(10 - advancedNum));

}
if (precision === 0) {
return numberWithoutDecimal;
}
return "".concat(numberWithoutDecimal).concat(separatorStr).concat(decimalStr.padEnd(precision, '0').slice(0, precision));
}
if (precisionDecimalStr === '.0') {
return numberWithoutDecimal;
}
return "".concat(numberWithoutDecimal).concat(precisionDecimalStr);
}

@@ -5,20 +5,18 @@ import { supportBigInt } from './supportUtil';

*/
export function trimNumber(numStr) {
var str = numStr.trim();
var negative = str.startsWith('-');
if (negative) {
str = str.slice(1);
}
str = str // Remove decimal 0. `1.000` => `1.`, `1.100` => `1.1`
.replace(/(\.\d*[^0])0*$/, '$1') // Remove useless decimal. `1.` => `1`
.replace(/\.0*$/, '') // Remove integer 0. `0001` => `1`, 000.1' => `.1`
str = str
// Remove decimal 0. `1.000` => `1.`, `1.100` => `1.1`
.replace(/(\.\d*[^0])0*$/, '$1')
// Remove useless decimal. `1.` => `1`
.replace(/\.0*$/, '')
// Remove integer 0. `0001` => `1`, 000.1' => `.1`
.replace(/^0+/, '');
if (str.startsWith('.')) {
str = "0".concat(str);
}
var trimStr = str || '0';

@@ -28,7 +26,5 @@ var splitNumber = trimStr.split('.');

var decimalStr = splitNumber[1] || '0';
if (integerStr === '0' && decimalStr === '0') {
negative = false;
}
var negativeStr = negative ? '-' : '';

@@ -52,17 +48,12 @@ return {

*/
export function getNumberPrecision(number) {
var numStr = String(number);
if (isE(number)) {
var precision = Number(numStr.slice(numStr.indexOf('e-') + 2));
var decimalMatch = numStr.match(/\.(\d+)/);
if (decimalMatch === null || decimalMatch === void 0 ? void 0 : decimalMatch[1]) {
precision += decimalMatch[1].length;
}
return precision;
}
return numStr.includes('.') && validateNumber(numStr) ? numStr.length - numStr.indexOf('.') - 1 : 0;

@@ -73,6 +64,4 @@ }

*/
export function num2str(number) {
var numStr = String(number);
if (isE(number)) {

@@ -82,10 +71,7 @@ if (number > Number.MAX_SAFE_INTEGER) {

}
if (number < Number.MIN_SAFE_INTEGER) {
return String(supportBigInt() ? BigInt(number).toString() : Number.MIN_SAFE_INTEGER);
}
numStr = number.toFixed(getNumberPrecision(numStr));
}
return trimNumber(numStr).fullStr;

@@ -96,12 +82,13 @@ }

return !Number.isNaN(num);
} // Empty
}
// Empty
if (!num) {
return false;
}
return (// Normal type: 11.28
/^\s*-?\d+(\.\d+)?\s*$/.test(num) || // Pre-number: 1.
/^\s*-?\d+\.\s*$/.test(num) || // Post-number: .1
return (
// Normal type: 11.28
/^\s*-?\d+(\.\d+)?\s*$/.test(num) ||
// Pre-number: 1.
/^\s*-?\d+\.\s*$/.test(num) ||
// Post-number: .1
/^\s*-?\.\d+\s*$/.test(num)

@@ -113,8 +100,6 @@ );

var hasPoint = stepStr.includes('.');
if (!hasPoint) {
return step + '0';
}
return trimNumber(stepStr.replace(/(\d)\.(\d)/g, '$1$2.')).fullStr;
}
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {

@@ -9,7 +8,4 @@ value: true

exports.default = useCursor;
var _react = require("react");
var _warning = _interopRequireDefault(require("rc-util/lib/warning"));
/**

@@ -21,3 +17,2 @@ * Keep input cursor in the correct position if possible.

var selectionRef = (0, _react.useRef)(null);
function recordCursor() {

@@ -27,4 +22,4 @@ // Record position

var start = input.selectionStart,
end = input.selectionEnd,
value = input.value;
end = input.selectionEnd,
value = input.value;
var beforeTxt = value.substring(0, start);

@@ -39,3 +34,4 @@ var afterTxt = value.substring(end);

};
} catch (e) {// Fix error in Chrome:
} catch (e) {
// Fix error in Chrome:
// Failed to read the 'selectionStart' property from 'HTMLInputElement'

@@ -50,4 +46,2 @@ // http://stackoverflow.com/q/21177489/3040605

*/
function restoreCursor() {

@@ -58,7 +52,6 @@ if (input && selectionRef.current && focused) {

var _selectionRef$current = selectionRef.current,
beforeTxt = _selectionRef$current.beforeTxt,
afterTxt = _selectionRef$current.afterTxt,
start = _selectionRef$current.start;
beforeTxt = _selectionRef$current.beforeTxt,
afterTxt = _selectionRef$current.afterTxt,
start = _selectionRef$current.start;
var startPos = value.length;
if (value.endsWith(afterTxt)) {

@@ -71,3 +64,2 @@ startPos = value.length - selectionRef.current.afterTxt.length;

var newIndex = value.indexOf(beforeLastChar, start - 1);
if (newIndex !== -1) {

@@ -77,3 +69,2 @@ startPos = newIndex + 1;

}
input.setSelectionRange(startPos, startPos);

@@ -85,4 +76,3 @@ } catch (e) {

}
return [recordCursor, restoreCursor];
}
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {

@@ -9,7 +8,4 @@ value: true

exports.default = void 0;
var _react = require("react");
var _raf = _interopRequireDefault(require("rc-util/lib/raf"));
/**

@@ -20,7 +16,5 @@ * Always trigger latest once when call multiple time

var idRef = (0, _react.useRef)(0);
var cleanUp = function cleanUp() {
_raf.default.cancel(idRef.current);
};
(0, _react.useEffect)(function () {

@@ -36,3 +30,2 @@ return cleanUp;

};
exports.default = _default;
import InputNumber, { InputNumberProps } from './InputNumber';
export { InputNumberProps };
export type { InputNumberProps };
export default InputNumber;
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {

@@ -9,6 +8,4 @@ value: true

exports.default = void 0;
var _InputNumber = _interopRequireDefault(require("./InputNumber"));
var _default = _InputNumber.default;
exports.default = _default;
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof3 = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {

@@ -11,39 +9,20 @@ value: true

exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var React = _interopRequireWildcard(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _KeyCode = _interopRequireDefault(require("rc-util/lib/KeyCode"));
var _useLayoutEffect = require("rc-util/lib/hooks/useLayoutEffect");
var _ref = require("rc-util/lib/ref");
var _MiniDecimal = _interopRequireWildcard(require("./utils/MiniDecimal"));
var _StepHandler = _interopRequireDefault(require("./StepHandler"));
var _numberUtil = require("./utils/numberUtil");
var _useCursor3 = _interopRequireDefault(require("./hooks/useCursor"));
var _useFrame = _interopRequireDefault(require("./hooks/useFrame"));
var _excluded = ["prefixCls", "className", "style", "min", "max", "step", "defaultValue", "value", "disabled", "readOnly", "upHandler", "downHandler", "keyboard", "controls", "stringMode", "parser", "formatter", "precision", "decimalSeparator", "onChange", "onInput", "onPressEnter", "onStep"];
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
/**

@@ -64,6 +43,4 @@ * We support `stringMode` which need handle correct type when user call in onChange

}
return decimalValue.toNumber();
};
var getDecimalIfValidate = function getDecimalIfValidate(value) {

@@ -73,53 +50,48 @@ var decimal = (0, _MiniDecimal.default)(value);

};
var InputNumber = /*#__PURE__*/React.forwardRef(function (props, ref) {
var _classNames;
var _props$prefixCls = props.prefixCls,
prefixCls = _props$prefixCls === void 0 ? 'rc-input-number' : _props$prefixCls,
className = props.className,
style = props.style,
min = props.min,
max = props.max,
_props$step = props.step,
step = _props$step === void 0 ? 1 : _props$step,
defaultValue = props.defaultValue,
value = props.value,
disabled = props.disabled,
readOnly = props.readOnly,
upHandler = props.upHandler,
downHandler = props.downHandler,
keyboard = props.keyboard,
_props$controls = props.controls,
controls = _props$controls === void 0 ? true : _props$controls,
stringMode = props.stringMode,
parser = props.parser,
formatter = props.formatter,
precision = props.precision,
decimalSeparator = props.decimalSeparator,
onChange = props.onChange,
onInput = props.onInput,
onPressEnter = props.onPressEnter,
onStep = props.onStep,
inputProps = (0, _objectWithoutProperties2.default)(props, _excluded);
prefixCls = _props$prefixCls === void 0 ? 'rc-input-number' : _props$prefixCls,
className = props.className,
style = props.style,
min = props.min,
max = props.max,
_props$step = props.step,
step = _props$step === void 0 ? 1 : _props$step,
defaultValue = props.defaultValue,
value = props.value,
disabled = props.disabled,
readOnly = props.readOnly,
upHandler = props.upHandler,
downHandler = props.downHandler,
keyboard = props.keyboard,
_props$controls = props.controls,
controls = _props$controls === void 0 ? true : _props$controls,
stringMode = props.stringMode,
parser = props.parser,
formatter = props.formatter,
precision = props.precision,
decimalSeparator = props.decimalSeparator,
onChange = props.onChange,
onInput = props.onInput,
onPressEnter = props.onPressEnter,
onStep = props.onStep,
inputProps = (0, _objectWithoutProperties2.default)(props, _excluded);
var inputClassName = "".concat(prefixCls, "-input");
var inputRef = React.useRef(null);
var _React$useState = React.useState(false),
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
focus = _React$useState2[0],
setFocus = _React$useState2[1];
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
focus = _React$useState2[0],
setFocus = _React$useState2[1];
var userTypingRef = React.useRef(false);
var compositionRef = React.useRef(false);
var shiftKeyRef = React.useRef(false); // ============================ Value =============================
var shiftKeyRef = React.useRef(false);
// ============================ Value =============================
// Real value control
var _React$useState3 = React.useState(function () {
return (0, _MiniDecimal.default)(value !== null && value !== void 0 ? value : defaultValue);
}),
_React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
decimalValue = _React$useState4[0],
setDecimalValue = _React$useState4[1];
return (0, _MiniDecimal.default)(value !== null && value !== void 0 ? value : defaultValue);
}),
_React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
decimalValue = _React$useState4[0],
setDecimalValue = _React$useState4[1];
function setUncontrolledDecimalValue(newDecimal) {

@@ -129,4 +101,4 @@ if (value === undefined) {

}
} // ====================== Parser & Formatter ======================
}
// ====================== Parser & Formatter ======================
/**

@@ -143,4 +115,2 @@ * `precision` is used for formatter & onChange.

*/
var getPrecision = React.useCallback(function (numStr, userTyping) {

@@ -150,27 +120,21 @@ if (userTyping) {

}
if (precision >= 0) {
return precision;
}
return Math.max((0, _numberUtil.getNumberPrecision)(numStr), (0, _numberUtil.getNumberPrecision)(step));
}, [precision, step]); // >>> Parser
}, [precision, step]);
// >>> Parser
var mergedParser = React.useCallback(function (num) {
var numStr = String(num);
if (parser) {
return parser(numStr);
}
var parsedStr = numStr;
if (decimalSeparator) {
parsedStr = parsedStr.replace(decimalSeparator, '.');
} // [Legacy] We still support auto convert `$ 123,456` to `123456`
}
// [Legacy] We still support auto convert `$ 123,456` to `123456`
return parsedStr.replace(/[^\w.-]+/g, '');
}, [parser, decimalSeparator]); // >>> Formatter
}, [parser, decimalSeparator]);
// >>> Formatter
var inputValueRef = React.useRef('');

@@ -184,8 +148,6 @@ var mergedFormatter = React.useCallback(function (number, userTyping) {

}
var str = typeof number === 'number' ? (0, _numberUtil.num2str)(number) : number; // User typing will not auto format with precision directly
var str = typeof number === 'number' ? (0, _numberUtil.num2str)(number) : number;
// User typing will not auto format with precision directly
if (!userTyping) {
var mergedPrecision = getPrecision(str, userTyping);
if ((0, _numberUtil.validateNumber)(str) && (decimalSeparator || mergedPrecision >= 0)) {

@@ -197,6 +159,5 @@ // Separator

}
return str;
}, [formatter, getPrecision, decimalSeparator]); // ========================== InputValue ==========================
}, [formatter, getPrecision, decimalSeparator]);
// ========================== InputValue ==========================
/**

@@ -211,26 +172,22 @@ * Input text value control

*/
var _React$useState5 = React.useState(function () {
var initValue = defaultValue !== null && defaultValue !== void 0 ? defaultValue : value;
if (decimalValue.isInvalidate() && ['string', 'number'].includes((0, _typeof2.default)(initValue))) {
return Number.isNaN(initValue) ? '' : initValue;
}
return mergedFormatter(decimalValue.toString(), false);
}),
_React$useState6 = (0, _slicedToArray2.default)(_React$useState5, 2),
inputValue = _React$useState6[0],
setInternalInputValue = _React$useState6[1];
inputValueRef.current = inputValue; // Should always be string
var initValue = defaultValue !== null && defaultValue !== void 0 ? defaultValue : value;
if (decimalValue.isInvalidate() && ['string', 'number'].includes((0, _typeof2.default)(initValue))) {
return Number.isNaN(initValue) ? '' : initValue;
}
return mergedFormatter(decimalValue.toString(), false);
}),
_React$useState6 = (0, _slicedToArray2.default)(_React$useState5, 2),
inputValue = _React$useState6[0],
setInternalInputValue = _React$useState6[1];
inputValueRef.current = inputValue;
// Should always be string
function setInputValue(newValue, userTyping) {
setInternalInputValue(mergedFormatter( // Invalidate number is sometime passed by external control, we should let it go
setInternalInputValue(mergedFormatter(
// Invalidate number is sometime passed by external control, we should let it go
// Otherwise is controlled by internal interactive logic which check by userTyping
// You can ref 'show limited value when input is not focused' test for more info.
newValue.isInvalidate() ? newValue.toString(false) : newValue.toString(!userTyping), userTyping));
} // >>> Max & Min limit
}
// >>> Max & Min limit
var maxDecimal = React.useMemo(function () {

@@ -246,3 +203,2 @@ return getDecimalIfValidate(max);

}
return maxDecimal.lessEquals(decimalValue);

@@ -254,11 +210,10 @@ }, [maxDecimal, decimalValue]);

}
return decimalValue.lessEquals(minDecimal);
}, [minDecimal, decimalValue]); // Cursor controller
}, [minDecimal, decimalValue]);
// Cursor controller
var _useCursor = (0, _useCursor3.default)(inputRef.current, focus),
_useCursor2 = (0, _slicedToArray2.default)(_useCursor, 2),
recordCursor = _useCursor2[0],
restoreCursor = _useCursor2[1]; // ============================= Data =============================
_useCursor2 = (0, _slicedToArray2.default)(_useCursor, 2),
recordCursor = _useCursor2[0],
restoreCursor = _useCursor2[1];
// ============================= Data =============================
/**

@@ -271,4 +226,2 @@ * Find target value closet within range.

*/
var getRangeValue = function getRangeValue(target) {

@@ -278,9 +231,7 @@ // target > max

return maxDecimal;
} // target < min
}
// target < min
if (minDecimal && !minDecimal.lessEquals(target)) {
return minDecimal;
}
return null;

@@ -291,4 +242,2 @@ };

*/
var isInRange = function isInRange(target) {

@@ -301,10 +250,8 @@ return !getRangeValue(target);

*/
var triggerValueUpdate = function triggerValueUpdate(newValue, userTyping) {
var updateValue = newValue;
var isRangeValidate = isInRange(updateValue) || updateValue.isEmpty(); // Skip align value when trigger value is empty.
var isRangeValidate = isInRange(updateValue) || updateValue.isEmpty();
// Skip align value when trigger value is empty.
// We just trigger onChange(null)
// This should not block user typing
if (!updateValue.isEmpty() && !userTyping) {

@@ -315,21 +262,18 @@ // Revert value in range if needed

}
if (!readOnly && !disabled && isRangeValidate) {
var numStr = updateValue.toString();
var mergedPrecision = getPrecision(numStr, userTyping);
if (mergedPrecision >= 0) {
updateValue = (0, _MiniDecimal.default)((0, _MiniDecimal.toFixed)(numStr, '.', mergedPrecision)); // When to fixed. The value may out of min & max range.
updateValue = (0, _MiniDecimal.default)((0, _MiniDecimal.toFixed)(numStr, '.', mergedPrecision));
// When to fixed. The value may out of min & max range.
// 4 in [0, 3.8] => 3.8 => 4 (toFixed)
if (!isInRange(updateValue)) {
updateValue = (0, _MiniDecimal.default)((0, _MiniDecimal.toFixed)(numStr, '.', mergedPrecision, true));
}
} // Trigger event
}
// Trigger event
if (!updateValue.equals(decimalValue)) {
setUncontrolledDecimalValue(updateValue);
onChange === null || onChange === void 0 ? void 0 : onChange(updateValue.isEmpty() ? null : getDecimalValue(stringMode, updateValue)); // Reformat input if value is not controlled
onChange === null || onChange === void 0 ? void 0 : onChange(updateValue.isEmpty() ? null : getDecimalValue(stringMode, updateValue));
// Reformat input if value is not controlled
if (value === undefined) {

@@ -339,37 +283,30 @@ setInputValue(updateValue, userTyping);

}
return updateValue;
}
return decimalValue;
}; // ========================== User Input ==========================
var onNextPromise = (0, _useFrame.default)(); // >>> Collect input value
};
// ========================== User Input ==========================
var onNextPromise = (0, _useFrame.default)();
// >>> Collect input value
var collectInputValue = function collectInputValue(inputStr) {
recordCursor(); // Update inputValue incase input can not parse as number
setInternalInputValue(inputStr); // Parse number
recordCursor();
// Update inputValue incase input can not parse as number
setInternalInputValue(inputStr);
// Parse number
if (!compositionRef.current) {
var finalValue = mergedParser(inputStr);
var finalDecimal = (0, _MiniDecimal.default)(finalValue);
if (!finalDecimal.isNaN()) {
triggerValueUpdate(finalDecimal, true);
}
} // Trigger onInput later to let user customize value if they want do handle something after onChange
onInput === null || onInput === void 0 ? void 0 : onInput(inputStr); // optimize for chinese input experience
}
// Trigger onInput later to let user customize value if they want do handle something after onChange
onInput === null || onInput === void 0 ? void 0 : onInput(inputStr);
// optimize for chinese input experience
// https://github.com/ant-design/ant-design/issues/8196
onNextPromise(function () {
var nextInputStr = inputStr;
if (!parser) {
nextInputStr = inputStr.replace(/。/g, '.');
}
if (nextInputStr !== inputStr) {

@@ -379,37 +316,29 @@ collectInputValue(nextInputStr);

});
}; // >>> Composition
};
// >>> Composition
var onCompositionStart = function onCompositionStart() {
compositionRef.current = true;
};
var onCompositionEnd = function onCompositionEnd() {
compositionRef.current = false;
collectInputValue(inputRef.current.value);
}; // >>> Input
};
// >>> Input
var onInternalInput = function onInternalInput(e) {
collectInputValue(e.target.value);
}; // ============================= Step =============================
};
// ============================= Step =============================
var onInternalStep = function onInternalStep(up) {
var _inputRef$current;
// Ignore step since out of range
if (up && upDisabled || !up && downDisabled) {
return;
} // Clear typing status since it may caused by up & down key.
}
// Clear typing status since it may caused by up & down key.
// We should sync with input value.
userTypingRef.current = false;
var stepDecimal = (0, _MiniDecimal.default)(shiftKeyRef.current ? (0, _numberUtil.getDecupleSteps)(step) : step);
if (!up) {
stepDecimal = stepDecimal.negate();
}
var target = (decimalValue || (0, _MiniDecimal.default)(0)).add(stepDecimal.toString());

@@ -422,13 +351,10 @@ var updatedValue = triggerValueUpdate(target, false);

(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
}; // ============================ Flush =============================
};
// ============================ Flush =============================
/**
* Flush current input content to trigger value change & re-formatter input if needed
*/
var flushInputValue = function flushInputValue(userTyping) {
var parsedValue = (0, _MiniDecimal.default)(mergedParser(inputValue));
var formatValue = parsedValue;
if (!parsedValue.isNaN()) {

@@ -441,3 +367,2 @@ // Only validate value or empty value can be re-fill to inputValue

}
if (value !== undefined) {

@@ -451,8 +376,10 @@ // Reset back with controlled value first

};
// Solve the issue of the event triggering sequence when entering numbers in chinese input (Safari)
var onBeforeInput = function onBeforeInput() {
userTypingRef.current = true;
};
var onKeyDown = function onKeyDown(event) {
var which = event.which,
shiftKey = event.shiftKey;
shiftKey = event.shiftKey;
userTypingRef.current = true;
if (shiftKey) {

@@ -463,3 +390,2 @@ shiftKeyRef.current = true;

}
if (which === _KeyCode.default.ENTER) {

@@ -469,12 +395,9 @@ if (!compositionRef.current) {

}
flushInputValue(false);
onPressEnter === null || onPressEnter === void 0 ? void 0 : onPressEnter(event);
}
if (keyboard === false) {
return;
} // Do step
}
// Do step
if (!compositionRef.current && [_KeyCode.default.UP, _KeyCode.default.DOWN].includes(which)) {

@@ -485,9 +408,7 @@ onInternalStep(_KeyCode.default.UP === which);

};
var onKeyUp = function onKeyUp() {
userTypingRef.current = false;
shiftKeyRef.current = false;
}; // >>> Focus & Blur
};
// >>> Focus & Blur
var onBlur = function onBlur() {

@@ -497,6 +418,5 @@ flushInputValue(false);

userTypingRef.current = false;
}; // ========================== Controlled ==========================
};
// ========================== Controlled ==========================
// Input by precision
(0, _useLayoutEffect.useLayoutUpdateEffect)(function () {

@@ -506,10 +426,10 @@ if (!decimalValue.isInvalidate()) {

}
}, [precision]); // Input by value
}, [precision]);
// Input by value
(0, _useLayoutEffect.useLayoutUpdateEffect)(function () {
var newValue = (0, _MiniDecimal.default)(value);
setDecimalValue(newValue);
var currentParsedValue = (0, _MiniDecimal.default)(mergedParser(inputValue)); // When user typing from `1.2` to `1.`, we should not convert to `1` immediately.
var currentParsedValue = (0, _MiniDecimal.default)(mergedParser(inputValue));
// When user typing from `1.2` to `1.`, we should not convert to `1` immediately.
// But let it go if user set `formatter`
if (!newValue.equals(currentParsedValue) || !userTypingRef.current || formatter) {

@@ -519,4 +439,4 @@ // Update value as effect

}
}, [value]); // ============================ Cursor ============================
}, [value]);
// ============================ Cursor ============================
(0, _useLayoutEffect.useLayoutUpdateEffect)(function () {

@@ -526,4 +446,4 @@ if (formatter) {

}
}, [inputValue]); // ============================ Render ============================
}, [inputValue]);
// ============================ Render ============================
return /*#__PURE__*/React.createElement("div", {

@@ -539,3 +459,4 @@ className: (0, _classnames.default)(prefixCls, className, (_classNames = {}, (0, _defineProperty2.default)(_classNames, "".concat(prefixCls, "-focused"), focus), (0, _defineProperty2.default)(_classNames, "".concat(prefixCls, "-disabled"), disabled), (0, _defineProperty2.default)(_classNames, "".concat(prefixCls, "-readonly"), readOnly), (0, _defineProperty2.default)(_classNames, "".concat(prefixCls, "-not-a-number"), decimalValue.isNaN()), (0, _defineProperty2.default)(_classNames, "".concat(prefixCls, "-out-of-range"), !decimalValue.isInvalidate() && !isInRange(decimalValue)), _classNames)),

onCompositionStart: onCompositionStart,
onCompositionEnd: onCompositionEnd
onCompositionEnd: onCompositionEnd,
onBeforeInput: onBeforeInput
}, controls && /*#__PURE__*/React.createElement(_StepHandler.default, {

@@ -542,0 +463,0 @@ prefixCls: prefixCls,

"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {

@@ -11,17 +9,9 @@ value: true

exports.default = StepHandler;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var React = _interopRequireWildcard(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _isMobile = _interopRequireDefault(require("rc-util/lib/isMobile"));
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
/* eslint-disable react/no-unknown-property */

@@ -36,42 +26,36 @@

*/
var STEP_DELAY = 600;
function StepHandler(_ref) {
var prefixCls = _ref.prefixCls,
upNode = _ref.upNode,
downNode = _ref.downNode,
upDisabled = _ref.upDisabled,
downDisabled = _ref.downDisabled,
onStep = _ref.onStep;
upNode = _ref.upNode,
downNode = _ref.downNode,
upDisabled = _ref.upDisabled,
downDisabled = _ref.downDisabled,
onStep = _ref.onStep;
// ======================== Step ========================
var stepTimeoutRef = React.useRef();
var onStepRef = React.useRef();
onStepRef.current = onStep; // We will interval update step when hold mouse down
onStepRef.current = onStep;
// We will interval update step when hold mouse down
var onStepMouseDown = function onStepMouseDown(e, up) {
e.preventDefault();
onStepRef.current(up); // Loop step for interval
onStepRef.current(up);
// Loop step for interval
function loopStep() {
onStepRef.current(up);
stepTimeoutRef.current = setTimeout(loopStep, STEP_INTERVAL);
} // First time press will wait some time to trigger loop step update
}
// First time press will wait some time to trigger loop step update
stepTimeoutRef.current = setTimeout(loopStep, STEP_DELAY);
};
var onStopStep = function onStopStep() {
clearTimeout(stepTimeoutRef.current);
};
React.useEffect(function () {
return onStopStep;
}, []); // ======================= Render =======================
}, []);
// ======================= Render =======================
if ((0, _isMobile.default)()) {
return null;
}
var handlerClassName = "".concat(prefixCls, "-handler");

@@ -78,0 +62,0 @@ var upClassName = (0, _classnames.default)(handlerClassName, "".concat(handlerClassName, "-up"), (0, _defineProperty2.default)({}, "".concat(handlerClassName, "-up-disabled"), upDisabled));

"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {

@@ -11,13 +10,7 @@ value: true

exports.toFixed = toFixed;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _numberUtil = require("./numberUtil");
var _supportUtil = require("./supportUtil");
/* eslint-disable max-classes-per-file */
/**

@@ -32,3 +25,2 @@ * We can remove this when IE not support anymore

this.empty = void 0;
if (!value && value !== 0 || !String(value).trim()) {

@@ -38,7 +30,5 @@ this.empty = true;

}
this.origin = String(value);
this.number = Number(value);
}
(0, _createClass2.default)(NumberDecimal, [{

@@ -55,19 +45,14 @@ key: "negate",

}
var target = Number(value);
if (Number.isNaN(target)) {
return this;
}
var number = this.number + target; // [Legacy] Back to safe integer
var number = this.number + target;
// [Legacy] Back to safe integer
if (number > Number.MAX_SAFE_INTEGER) {
return new NumberDecimal(Number.MAX_SAFE_INTEGER);
}
if (number < Number.MIN_SAFE_INTEGER) {
return new NumberDecimal(Number.MIN_SAFE_INTEGER);
}
var maxPrecision = Math.max((0, _numberUtil.getNumberPrecision)(this.number), (0, _numberUtil.getNumberPrecision)(target));

@@ -110,11 +95,8 @@ return new NumberDecimal(number.toFixed(maxPrecision));

var safe = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
if (!safe) {
return this.origin;
}
if (this.isInvalidate()) {
return '';
}
return (0, _numberUtil.num2str)(this.number);

@@ -125,7 +107,6 @@ }

}();
exports.NumberDecimal = NumberDecimal;
var BigIntDecimal = /*#__PURE__*/function () {
/** BigInt will convert `0009` to `9`. We need record the len of decimal */
function BigIntDecimal(value) {

@@ -140,3 +121,2 @@ (0, _classCallCheck2.default)(this, BigIntDecimal);

this.nan = void 0;
if (!value && value !== 0 || !String(value).trim()) {

@@ -146,5 +126,4 @@ this.empty = true;

}
this.origin = String(value); // Act like Number convert
this.origin = String(value);
// Act like Number convert
if (value === '-') {

@@ -154,11 +133,8 @@ this.nan = true;

}
var mergedValue = value; // We need convert back to Number since it require `toFixed` to handle this
var mergedValue = value;
// We need convert back to Number since it require `toFixed` to handle this
if ((0, _numberUtil.isE)(mergedValue)) {
mergedValue = Number(mergedValue);
}
mergedValue = typeof mergedValue === 'string' ? mergedValue : (0, _numberUtil.num2str)(mergedValue);
if ((0, _numberUtil.validateNumber)(mergedValue)) {

@@ -176,3 +152,2 @@ var trimRet = (0, _numberUtil.trimNumber)(mergedValue);

}
(0, _createClass2.default)(BigIntDecimal, [{

@@ -197,3 +172,2 @@ key: "getMark",

*/
}, {

@@ -218,18 +192,14 @@ key: "alignDecimal",

}
var offset = new BigIntDecimal(value);
if (offset.isInvalidate()) {
return this;
}
var maxDecimalLength = Math.max(this.getDecimalStr().length, offset.getDecimalStr().length);
var myAlignedDecimal = this.alignDecimal(maxDecimalLength);
var offsetAlignedDecimal = offset.alignDecimal(maxDecimalLength);
var valueStr = (myAlignedDecimal + offsetAlignedDecimal).toString(); // We need fill string length back to `maxDecimalLength` to avoid parser failed
var valueStr = (myAlignedDecimal + offsetAlignedDecimal).toString();
// We need fill string length back to `maxDecimalLength` to avoid parser failed
var _trimNumber = (0, _numberUtil.trimNumber)(valueStr),
negativeStr = _trimNumber.negativeStr,
trimStr = _trimNumber.trimStr;
negativeStr = _trimNumber.negativeStr,
trimStr = _trimNumber.trimStr;
var hydrateValueStr = "".concat(negativeStr).concat(trimStr.padStart(maxDecimalLength + 1, '0'));

@@ -269,3 +239,2 @@ return new BigIntDecimal("".concat(hydrateValueStr.slice(0, -maxDecimalLength), ".").concat(hydrateValueStr.slice(-maxDecimalLength)));

}
return Number(this.toString());

@@ -277,11 +246,8 @@ }

var safe = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
if (!safe) {
return this.origin;
}
if (this.isInvalidate()) {
return '';
}
return (0, _numberUtil.trimNumber)("".concat(this.getMark()).concat(this.getIntegerStr(), ".").concat(this.getDecimalStr())).fullStr;

@@ -292,5 +258,3 @@ }

}();
exports.BigIntDecimal = BigIntDecimal;
function getMiniDecimal(value) {

@@ -302,3 +266,2 @@ // We use BigInt here.

}
return new NumberDecimal(value);

@@ -310,23 +273,16 @@ }

*/
function toFixed(numStr, separatorStr, precision) {
var cutOnly = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
if (numStr === '') {
return '';
}
var _trimNumber2 = (0, _numberUtil.trimNumber)(numStr),
negativeStr = _trimNumber2.negativeStr,
integerStr = _trimNumber2.integerStr,
decimalStr = _trimNumber2.decimalStr;
negativeStr = _trimNumber2.negativeStr,
integerStr = _trimNumber2.integerStr,
decimalStr = _trimNumber2.decimalStr;
var precisionDecimalStr = "".concat(separatorStr).concat(decimalStr);
var numberWithoutDecimal = "".concat(negativeStr).concat(integerStr);
if (precision >= 0) {
// We will get last + 1 number to check if need advanced number
var advancedNum = Number(decimalStr[precision]);
if (advancedNum >= 5 && !cutOnly) {

@@ -336,15 +292,11 @@ var advancedDecimal = getMiniDecimal(numStr).add("".concat(negativeStr, "0.").concat('0'.repeat(precision)).concat(10 - advancedNum));

}
if (precision === 0) {
return numberWithoutDecimal;
}
return "".concat(numberWithoutDecimal).concat(separatorStr).concat(decimalStr.padEnd(precision, '0').slice(0, precision));
}
if (precisionDecimalStr === '.0') {
return numberWithoutDecimal;
}
return "".concat(numberWithoutDecimal).concat(precisionDecimalStr);
}

@@ -12,5 +12,3 @@ "use strict";

exports.validateNumber = validateNumber;
var _supportUtil = require("./supportUtil");
/**

@@ -22,16 +20,15 @@ * Format string number to readable number

var negative = str.startsWith('-');
if (negative) {
str = str.slice(1);
}
str = str // Remove decimal 0. `1.000` => `1.`, `1.100` => `1.1`
.replace(/(\.\d*[^0])0*$/, '$1') // Remove useless decimal. `1.` => `1`
.replace(/\.0*$/, '') // Remove integer 0. `0001` => `1`, 000.1' => `.1`
str = str
// Remove decimal 0. `1.000` => `1.`, `1.100` => `1.1`
.replace(/(\.\d*[^0])0*$/, '$1')
// Remove useless decimal. `1.` => `1`
.replace(/\.0*$/, '')
// Remove integer 0. `0001` => `1`, 000.1' => `.1`
.replace(/^0+/, '');
if (str.startsWith('.')) {
str = "0".concat(str);
}
var trimStr = str || '0';

@@ -41,7 +38,5 @@ var splitNumber = trimStr.split('.');

var decimalStr = splitNumber[1] || '0';
if (integerStr === '0' && decimalStr === '0') {
negative = false;
}
var negativeStr = negative ? '-' : '';

@@ -57,3 +52,2 @@ return {

}
function isE(number) {

@@ -67,18 +61,12 @@ var str = String(number);

*/
function getNumberPrecision(number) {
var numStr = String(number);
if (isE(number)) {
var precision = Number(numStr.slice(numStr.indexOf('e-') + 2));
var decimalMatch = numStr.match(/\.(\d+)/);
if (decimalMatch === null || decimalMatch === void 0 ? void 0 : decimalMatch[1]) {
precision += decimalMatch[1].length;
}
return precision;
}
return numStr.includes('.') && validateNumber(numStr) ? numStr.length - numStr.indexOf('.') - 1 : 0;

@@ -89,7 +77,4 @@ }

*/
function num2str(number) {
var numStr = String(number);
if (isE(number)) {

@@ -99,39 +84,33 @@ if (number > Number.MAX_SAFE_INTEGER) {

}
if (number < Number.MIN_SAFE_INTEGER) {
return String((0, _supportUtil.supportBigInt)() ? BigInt(number).toString() : Number.MIN_SAFE_INTEGER);
}
numStr = number.toFixed(getNumberPrecision(numStr));
}
return trimNumber(numStr).fullStr;
}
function validateNumber(num) {
if (typeof num === 'number') {
return !Number.isNaN(num);
} // Empty
}
// Empty
if (!num) {
return false;
}
return (// Normal type: 11.28
/^\s*-?\d+(\.\d+)?\s*$/.test(num) || // Pre-number: 1.
/^\s*-?\d+\.\s*$/.test(num) || // Post-number: .1
return (
// Normal type: 11.28
/^\s*-?\d+(\.\d+)?\s*$/.test(num) ||
// Pre-number: 1.
/^\s*-?\d+\.\s*$/.test(num) ||
// Post-number: .1
/^\s*-?\.\d+\s*$/.test(num)
);
}
function getDecupleSteps(step) {
var stepStr = typeof step === 'number' ? num2str(step) : trimNumber(step).fullStr;
var hasPoint = stepStr.includes('.');
if (!hasPoint) {
return step + '0';
}
return trimNumber(stepStr.replace(/(\d)\.(\d)/g, '$1$2.')).fullStr;
}

@@ -7,5 +7,4 @@ "use strict";

exports.supportBigInt = supportBigInt;
function supportBigInt() {
return typeof BigInt === 'function';
}
{
"name": "rc-input-number",
"version": "7.3.9",
"version": "7.3.11",
"description": "React input-number component",

@@ -47,3 +47,3 @@ "keywords": [

"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "13.3.0",
"@testing-library/react": "^13.3.0",
"@types/classnames": "^2.2.9",

@@ -50,0 +50,0 @@ "@types/enzyme": "^3.10.8",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc