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.4 to 7.3.5

70

es/InputNumber.js

@@ -10,11 +10,19 @@ import _extends from "@babel/runtime/helpers/esm/extends";

import KeyCode from "rc-util/es/KeyCode";
import { useLayoutUpdateEffect } from "rc-util/es/hooks/useLayoutEffect";
import { composeRef } from "rc-util/es/ref";
import getMiniDecimal, { toFixed } from './utils/MiniDecimal';
import getMiniDecimal, { roundDownUnsignedDecimal, roundUpUnsignedDecimal, toFixed } from './utils/MiniDecimal';
import StepHandler from './StepHandler';
import { getNumberPrecision, num2str, validateNumber } from './utils/numberUtil';
import { getNumberPrecision, num2str, getDecupleSteps, trimNumber, validateNumber } from './utils/numberUtil';
import useCursor from './hooks/useCursor';
import useUpdateEffect from './hooks/useUpdateEffect';
import useFrame from './hooks/useFrame';
/**
* We support `stringMode` which need handle correct type when user call in onChange
* format max or min value
* 1. if isInvalid return null
* 2. if precision is undefined, return decimal
* 3. format with precision
* I. if max > 0, round down with precision. Example: max= 3.5, precision=0 afterFormat: 3
* II. if max < 0, round up with precision. Example: max= -3.5, precision=0 afterFormat: -4
* III. if min > 0, round up with precision. Example: min= 3.5, precision=0 afterFormat: 4
* IV. if min < 0, round down with precision. Example: max= -3.5, precision=0 afterFormat: -3
*/

@@ -30,5 +38,26 @@

var getDecimalIfValidate = function getDecimalIfValidate(value) {
var getDecimalIfValidate = function getDecimalIfValidate(value, precision, isMax) {
var decimal = getMiniDecimal(value);
return decimal.isInvalidate() ? null : decimal;
if (decimal.isInvalidate()) {
return null;
}
if (precision === undefined) {
return decimal;
}
var _trimNumber = trimNumber(decimal.toString()),
negative = _trimNumber.negative,
integerStr = _trimNumber.integerStr,
decimalStr = _trimNumber.decimalStr,
negativeStr = _trimNumber.negativeStr;
var unSignedNumberStr = integerStr + '.' + decimalStr;
if (isMax && !negative || !isMax && negative) {
return getMiniDecimal(negativeStr + roundDownUnsignedDecimal(unSignedNumberStr, precision));
} else {
return getMiniDecimal(negativeStr + roundUpUnsignedDecimal(unSignedNumberStr, precision));
}
};

@@ -76,3 +105,4 @@

var userTypingRef = React.useRef(false);
var compositionRef = React.useRef(false); // ============================ Value =============================
var compositionRef = React.useRef(false);
var shiftKeyRef = React.useRef(false); // ============================ Value =============================
// Real value control

@@ -193,7 +223,7 @@

var maxDecimal = React.useMemo(function () {
return getDecimalIfValidate(max);
}, [max]);
return getDecimalIfValidate(max, precision, true);
}, [max, precision]);
var minDecimal = React.useMemo(function () {
return getDecimalIfValidate(min);
}, [min]);
return getDecimalIfValidate(min, precision, false);
}, [min, precision]);
var upDisabled = React.useMemo(function () {

@@ -352,3 +382,3 @@ if (!maxDecimal || !decimalValue || decimalValue.isInvalidate()) {

userTypingRef.current = false;
var stepDecimal = getMiniDecimal(step);
var stepDecimal = getMiniDecimal(shiftKeyRef.current ? getDecupleSteps(step) : step);

@@ -362,3 +392,3 @@ if (!up) {

onStep === null || onStep === void 0 ? void 0 : onStep(getDecimalValue(stringMode, updatedValue), {
offset: step,
offset: shiftKeyRef.current ? getDecupleSteps(step) : step,
type: up ? 'up' : 'down'

@@ -396,5 +426,12 @@ });

var onKeyDown = function onKeyDown(event) {
var which = event.which;
var which = event.which,
shiftKey = event.shiftKey;
userTypingRef.current = true;
if (shiftKey) {
shiftKeyRef.current = true;
} else {
shiftKeyRef.current = false;
}
if (which === KeyCode.ENTER) {

@@ -422,2 +459,3 @@ if (!compositionRef.current) {

userTypingRef.current = false;
shiftKeyRef.current = false;
}; // >>> Focus & Blur

@@ -434,3 +472,3 @@

useUpdateEffect(function () {
useLayoutUpdateEffect(function () {
if (!decimalValue.isInvalidate()) {

@@ -441,3 +479,3 @@ setInputValue(decimalValue, false);

useUpdateEffect(function () {
useLayoutUpdateEffect(function () {
var newValue = getMiniDecimal(value);

@@ -454,3 +492,3 @@ setDecimalValue(newValue);

useUpdateEffect(function () {
useLayoutUpdateEffect(function () {
if (formatter) {

@@ -457,0 +495,0 @@ restoreCursor();

@@ -65,4 +65,12 @@ export declare type ValueType = string | number;

/**
* round up an unsigned number str, like: 1.4 -> 2, 1.5 -> 2
*/
export declare function roundUpUnsignedDecimal(numStr: string, precision: number): any;
/**
* round up an unsigned number str, like: 1.4 -> 1, 1.5 -> 1
*/
export declare function roundDownUnsignedDecimal(numStr: string, precision: number): string;
/**
* Align the logic of toFixed to around like 1.5 => 2
*/
export declare function toFixed(numStr: string, separatorStr: string, precision?: number): any;

@@ -275,2 +275,32 @@ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";

/**
* round up an unsigned number str, like: 1.4 -> 2, 1.5 -> 2
*/
export function roundUpUnsignedDecimal(numStr, precision) {
var _trimNumber2 = trimNumber(numStr),
integerStr = _trimNumber2.integerStr,
decimalStr = _trimNumber2.decimalStr;
var advancedDecimal = getMiniDecimal(integerStr + '.' + decimalStr).add("0.".concat('0'.repeat(precision), 5));
return toFixed(advancedDecimal.toString(), '.', precision);
}
/**
* round up an unsigned number str, like: 1.4 -> 1, 1.5 -> 1
*/
export function roundDownUnsignedDecimal(numStr, precision) {
var _trimNumber3 = trimNumber(numStr),
negativeStr = _trimNumber3.negativeStr,
integerStr = _trimNumber3.integerStr,
decimalStr = _trimNumber3.decimalStr;
var numberWithoutDecimal = "".concat(negativeStr).concat(integerStr);
if (precision === 0) {
return integerStr;
}
return "".concat(numberWithoutDecimal, ".").concat(decimalStr.padEnd(precision, '0').slice(0, precision));
}
/**
* Align the logic of toFixed to around like 1.5 => 2

@@ -284,6 +314,6 @@ */

var _trimNumber2 = trimNumber(numStr),
negativeStr = _trimNumber2.negativeStr,
integerStr = _trimNumber2.integerStr,
decimalStr = _trimNumber2.decimalStr;
var _trimNumber4 = trimNumber(numStr),
negativeStr = _trimNumber4.negativeStr,
integerStr = _trimNumber4.integerStr,
decimalStr = _trimNumber4.decimalStr;

@@ -290,0 +320,0 @@ var precisionDecimalStr = "".concat(separatorStr).concat(decimalStr);

@@ -23,1 +23,2 @@ /**

export declare function validateNumber(num: string | number): boolean;
export declare function getDecupleSteps(step: string | number): string;

@@ -103,2 +103,12 @@ import { supportBigInt } from './supportUtil';

);
}
export 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;
}

@@ -28,2 +28,4 @@ "use strict";

var _useLayoutEffect = require("rc-util/lib/hooks/useLayoutEffect");
var _ref = require("rc-util/lib/ref");

@@ -39,4 +41,2 @@

var _useUpdateEffect = _interopRequireDefault(require("./hooks/useUpdateEffect"));
var _useFrame = _interopRequireDefault(require("./hooks/useFrame"));

@@ -48,2 +48,10 @@

* We support `stringMode` which need handle correct type when user call in onChange
* format max or min value
* 1. if isInvalid return null
* 2. if precision is undefined, return decimal
* 3. format with precision
* I. if max > 0, round down with precision. Example: max= 3.5, precision=0 afterFormat: 3
* II. if max < 0, round up with precision. Example: max= -3.5, precision=0 afterFormat: -4
* III. if min > 0, round up with precision. Example: min= 3.5, precision=0 afterFormat: 4
* IV. if min < 0, round down with precision. Example: max= -3.5, precision=0 afterFormat: -3
*/

@@ -58,5 +66,26 @@ var getDecimalValue = function getDecimalValue(stringMode, decimalValue) {

var getDecimalIfValidate = function getDecimalIfValidate(value) {
var getDecimalIfValidate = function getDecimalIfValidate(value, precision, isMax) {
var decimal = (0, _MiniDecimal.default)(value);
return decimal.isInvalidate() ? null : decimal;
if (decimal.isInvalidate()) {
return null;
}
if (precision === undefined) {
return decimal;
}
var _trimNumber = (0, _numberUtil.trimNumber)(decimal.toString()),
negative = _trimNumber.negative,
integerStr = _trimNumber.integerStr,
decimalStr = _trimNumber.decimalStr,
negativeStr = _trimNumber.negativeStr;
var unSignedNumberStr = integerStr + '.' + decimalStr;
if (isMax && !negative || !isMax && negative) {
return (0, _MiniDecimal.default)(negativeStr + (0, _MiniDecimal.roundDownUnsignedDecimal)(unSignedNumberStr, precision));
} else {
return (0, _MiniDecimal.default)(negativeStr + (0, _MiniDecimal.roundUpUnsignedDecimal)(unSignedNumberStr, precision));
}
};

@@ -103,3 +132,4 @@

var userTypingRef = React.useRef(false);
var compositionRef = React.useRef(false); // ============================ Value =============================
var compositionRef = React.useRef(false);
var shiftKeyRef = React.useRef(false); // ============================ Value =============================
// Real value control

@@ -220,7 +250,7 @@

var maxDecimal = React.useMemo(function () {
return getDecimalIfValidate(max);
}, [max]);
return getDecimalIfValidate(max, precision, true);
}, [max, precision]);
var minDecimal = React.useMemo(function () {
return getDecimalIfValidate(min);
}, [min]);
return getDecimalIfValidate(min, precision, false);
}, [min, precision]);
var upDisabled = React.useMemo(function () {

@@ -379,3 +409,3 @@ if (!maxDecimal || !decimalValue || decimalValue.isInvalidate()) {

userTypingRef.current = false;
var stepDecimal = (0, _MiniDecimal.default)(step);
var stepDecimal = (0, _MiniDecimal.default)(shiftKeyRef.current ? (0, _numberUtil.getDecupleSteps)(step) : step);

@@ -389,3 +419,3 @@ if (!up) {

onStep === null || onStep === void 0 ? void 0 : onStep(getDecimalValue(stringMode, updatedValue), {
offset: step,
offset: shiftKeyRef.current ? (0, _numberUtil.getDecupleSteps)(step) : step,
type: up ? 'up' : 'down'

@@ -423,5 +453,12 @@ });

var onKeyDown = function onKeyDown(event) {
var which = event.which;
var which = event.which,
shiftKey = event.shiftKey;
userTypingRef.current = true;
if (shiftKey) {
shiftKeyRef.current = true;
} else {
shiftKeyRef.current = false;
}
if (which === _KeyCode.default.ENTER) {

@@ -449,2 +486,3 @@ if (!compositionRef.current) {

userTypingRef.current = false;
shiftKeyRef.current = false;
}; // >>> Focus & Blur

@@ -461,3 +499,3 @@

(0, _useUpdateEffect.default)(function () {
(0, _useLayoutEffect.useLayoutUpdateEffect)(function () {
if (!decimalValue.isInvalidate()) {

@@ -468,3 +506,3 @@ setInputValue(decimalValue, false);

(0, _useUpdateEffect.default)(function () {
(0, _useLayoutEffect.useLayoutUpdateEffect)(function () {
var newValue = (0, _MiniDecimal.default)(value);

@@ -481,3 +519,3 @@ setDecimalValue(newValue);

(0, _useUpdateEffect.default)(function () {
(0, _useLayoutEffect.useLayoutUpdateEffect)(function () {
if (formatter) {

@@ -484,0 +522,0 @@ restoreCursor();

@@ -65,4 +65,12 @@ export declare type ValueType = string | number;

/**
* round up an unsigned number str, like: 1.4 -> 2, 1.5 -> 2
*/
export declare function roundUpUnsignedDecimal(numStr: string, precision: number): any;
/**
* round up an unsigned number str, like: 1.4 -> 1, 1.5 -> 1
*/
export declare function roundDownUnsignedDecimal(numStr: string, precision: number): string;
/**
* Align the logic of toFixed to around like 1.5 => 2
*/
export declare function toFixed(numStr: string, separatorStr: string, precision?: number): any;

@@ -10,2 +10,4 @@ "use strict";

exports.default = getMiniDecimal;
exports.roundDownUnsignedDecimal = roundDownUnsignedDecimal;
exports.roundUpUnsignedDecimal = roundUpUnsignedDecimal;
exports.toFixed = toFixed;

@@ -292,2 +294,34 @@

/**
* round up an unsigned number str, like: 1.4 -> 2, 1.5 -> 2
*/
function roundUpUnsignedDecimal(numStr, precision) {
var _trimNumber2 = (0, _numberUtil.trimNumber)(numStr),
integerStr = _trimNumber2.integerStr,
decimalStr = _trimNumber2.decimalStr;
var advancedDecimal = getMiniDecimal(integerStr + '.' + decimalStr).add("0.".concat('0'.repeat(precision), 5));
return toFixed(advancedDecimal.toString(), '.', precision);
}
/**
* round up an unsigned number str, like: 1.4 -> 1, 1.5 -> 1
*/
function roundDownUnsignedDecimal(numStr, precision) {
var _trimNumber3 = (0, _numberUtil.trimNumber)(numStr),
negativeStr = _trimNumber3.negativeStr,
integerStr = _trimNumber3.integerStr,
decimalStr = _trimNumber3.decimalStr;
var numberWithoutDecimal = "".concat(negativeStr).concat(integerStr);
if (precision === 0) {
return integerStr;
}
return "".concat(numberWithoutDecimal, ".").concat(decimalStr.padEnd(precision, '0').slice(0, precision));
}
/**
* Align the logic of toFixed to around like 1.5 => 2

@@ -302,6 +336,6 @@ */

var _trimNumber2 = (0, _numberUtil.trimNumber)(numStr),
negativeStr = _trimNumber2.negativeStr,
integerStr = _trimNumber2.integerStr,
decimalStr = _trimNumber2.decimalStr;
var _trimNumber4 = (0, _numberUtil.trimNumber)(numStr),
negativeStr = _trimNumber4.negativeStr,
integerStr = _trimNumber4.integerStr,
decimalStr = _trimNumber4.decimalStr;

@@ -308,0 +342,0 @@ var precisionDecimalStr = "".concat(separatorStr).concat(decimalStr);

@@ -23,1 +23,2 @@ /**

export declare function validateNumber(num: string | number): boolean;
export declare function getDecupleSteps(step: string | number): string;

@@ -6,2 +6,3 @@ "use strict";

});
exports.getDecupleSteps = getDecupleSteps;
exports.getNumberPrecision = getNumberPrecision;

@@ -119,2 +120,13 @@ exports.isE = isE;

);
}
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;
}
{
"name": "rc-input-number",
"version": "7.3.4",
"version": "7.3.5",
"description": "React input-number component",

@@ -43,9 +43,11 @@ "keywords": [

"classnames": "^2.2.5",
"rc-util": "^5.9.8"
"rc-util": "^5.23.0"
},
"devDependencies": {
"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "13.3.0",
"@types/classnames": "^2.2.9",
"@types/enzyme": "^3.10.8",
"@types/jest": "^26.0.0",
"@types/react": "^16.9.2",
"@types/react": "^17.0.37",
"@types/react-dom": "^17.0.9",

@@ -55,5 +57,2 @@ "@umijs/fabric": "^2.0.0",

"dumi": "^1.1.0",
"enzyme": "^3.1.1",
"enzyme-adapter-react-16": "^1.0.1",
"enzyme-to-json": "^3.6.1",
"eslint": "^7.1.0",

@@ -67,4 +66,4 @@ "expect.js": "~0.3.1",

"rc-tooltip": "^5.0.2",
"react": "^16.0.0",
"react-dom": "^16.0.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"regenerator-runtime": "^0.13.7",

@@ -71,0 +70,0 @@ "typescript": "^4.0.2"

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