@semcore/input-number 4.0.5 → 4.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/README.md +67 -0
- package/lib/cjs/InputNumber.js +4 -1
- package/lib/cjs/InputNumber.js.map +1 -1
- package/lib/es6/InputNumber.js +4 -1
- package/lib/es6/InputNumber.js.map +1 -1
- package/package.json +4 -4
- package/src/InputNumber.jsx +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
CHANGELOG.md standards are inspired by [keepachangelog.com](https://keepachangelog.com/en/1.0.0/).
|
|
4
4
|
|
|
5
|
+
## [4.0.8] - 2022-07-14
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Version patch update due to children dependencies update (`@semcore/input` [3.0.6 ~> 3.0.7]).
|
|
10
|
+
|
|
11
|
+
## [4.0.7] - 2022-07-13
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
|
|
15
|
+
- Fixed rounding float numbers.
|
|
16
|
+
|
|
17
|
+
## [4.0.6] - 2022-07-07
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Version patch update due to children dependencies update (`@semcore/utils` [3.33.0 ~> 3.34.0], `@semcore/input` [3.0.5 ~> 3.0.6]).
|
|
22
|
+
|
|
5
23
|
## [4.0.5] - 2022-06-02
|
|
6
24
|
|
|
7
25
|
### Changed
|
package/README.md
CHANGED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# @semcore/input-number
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/@semcore/input-number)
|
|
4
|
+
[](https://www.npmjs.com/package/@semcore/input-number)
|
|
5
|
+
[](https://github.com/semrush/intergalactic/blob/master/LICENSE)
|
|
6
|
+
|
|
7
|
+
> This component is part of the Intergalactic design system
|
|
8
|
+
|
|
9
|
+
### 📖 [Component documentation](https://developer.semrush.com/intergalactic/components/input-number/)
|
|
10
|
+
|
|
11
|
+
### 🏠 [Design system](https://developer.semrush.com/intergalactic/)
|
|
12
|
+
|
|
13
|
+
## Install
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
npm install @semcore/ui
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
```jsx
|
|
22
|
+
import InputNumber from '@semcore/ui/input-number';
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
<details>
|
|
26
|
+
<summary>Alternative installation and use</summary>
|
|
27
|
+
|
|
28
|
+
**We do not recommend this usage path due to possible dependency and update issues.**
|
|
29
|
+
|
|
30
|
+
### Install
|
|
31
|
+
|
|
32
|
+
You can only install one package from the design system
|
|
33
|
+
|
|
34
|
+
```sh
|
|
35
|
+
npm install @semcore/input-number @semcore/core
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
`@semcore/core` - _is the basic package by which we create our components, and it contains all of the common logic
|
|
39
|
+
of the components that is discussed below. There should only be one version of the package in the project._
|
|
40
|
+
|
|
41
|
+
### Usage
|
|
42
|
+
|
|
43
|
+
You can use the package the same way but without `/ui/` in the import path.
|
|
44
|
+
|
|
45
|
+
```jsx
|
|
46
|
+
import InputNumber from '@semcore/input-number';
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
</details>
|
|
50
|
+
|
|
51
|
+
## 👤 Author
|
|
52
|
+
|
|
53
|
+
[UI-kit team](https://github.com/semrush/intergalactic/blob/master/MAINTAINERS) and [others ❤️](https://github.com/semrush/intergalactic/graphs/contributors)
|
|
54
|
+
|
|
55
|
+
## 🤝 Contributing
|
|
56
|
+
|
|
57
|
+
Contributions, issues and feature requests are welcome!
|
|
58
|
+
|
|
59
|
+
Feel free to check [issues page](https://github.com/semrush/intergalactic/issues). You can also take a look at the [contributing guide](https://github.com/semrush/intergalactic/blob/master/CONTRIBUTING.md).
|
|
60
|
+
|
|
61
|
+
## Show your support
|
|
62
|
+
|
|
63
|
+
Give a ⭐️ if this project helped you!
|
|
64
|
+
|
|
65
|
+
## 📝 License
|
|
66
|
+
|
|
67
|
+
This project is [MIT](https://github.com/semrush/intergalactic/blob/master/LICENSE) licensed.
|
package/lib/cjs/InputNumber.js
CHANGED
|
@@ -165,6 +165,7 @@ var Value = /*#__PURE__*/function (_Component2) {
|
|
|
165
165
|
min = _this2$asProps.min,
|
|
166
166
|
max = _this2$asProps.max,
|
|
167
167
|
step = _this2$asProps.step;
|
|
168
|
+
var roundCoefficient = step < 1 ? step.toString().split('.')[1].length : 1;
|
|
168
169
|
|
|
169
170
|
if (Number.isNaN(e.currentTarget.valueAsNumber)) {
|
|
170
171
|
e.currentTarget.value = '';
|
|
@@ -183,7 +184,9 @@ var Value = /*#__PURE__*/function (_Component2) {
|
|
|
183
184
|
}
|
|
184
185
|
}
|
|
185
186
|
|
|
186
|
-
|
|
187
|
+
var numberValueRounded = Number(numberValue.toFixed(roundCoefficient));
|
|
188
|
+
|
|
189
|
+
_this2.handlers.value(String(numberValueRounded), e);
|
|
187
190
|
}
|
|
188
191
|
});
|
|
189
192
|
return _this2;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/InputNumber.jsx"],"names":["parseValueWithMinMax","value","min","Number","MIN_SAFE_INTEGER","max","MAX_SAFE_INTEGER","Math","IconUp","BUTTONS","up","IconDown","down","InputNumber","React","createRef","e","inputRef","current","stepUp","inputHandlersRef","stepDown","ref","$inputHandlers","size","asProps","inc","handlerInc","dec","handlerDec","SInputNumber","Input","style","Component","Value","step","isNaN","currentTarget","valueAsNumber","handlers","numberValue","parseFloat","r","roundRemainder","abs","
|
|
1
|
+
{"version":3,"sources":["../../src/InputNumber.jsx"],"names":["parseValueWithMinMax","value","min","Number","MIN_SAFE_INTEGER","max","MAX_SAFE_INTEGER","Math","IconUp","BUTTONS","up","IconDown","down","InputNumber","React","createRef","e","inputRef","current","stepUp","inputHandlersRef","stepDown","ref","$inputHandlers","size","asProps","inc","handlerInc","dec","handlerDec","SInputNumber","Input","style","Component","Value","step","roundCoefficient","toString","split","length","isNaN","currentTarget","valueAsNumber","handlers","numberValue","parseFloat","r","roundRemainder","abs","numberValueRounded","toFixed","String","countDecimals","floor","toPrecision","SValue","styles","handleValidation","defaultValue","Controls","props","Children","SControls","Addon","SUp","SDown"],"mappings":"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","sourcesContent":["import React from 'react';\nimport createComponent, { Component, sstyled, Root } from '@semcore/core';\nimport Input from '@semcore/input';\nimport BUTTONS from './buttons';\n\nimport style from './style/input-number.shadow.css';\n\nfunction parseValueWithMinMax(value, min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER) {\n return Math.max(min, Math.min(max, value));\n}\n\nconst IconUp = () => BUTTONS.up;\nconst IconDown = () => BUTTONS.down;\n\nclass InputNumber extends Component {\n static displayName = 'InputNumber';\n static style = style;\n static defaultProps = {\n size: 'm',\n };\n\n inputRef = React.createRef();\n inputHandlersRef = React.createRef();\n\n handlerInc = (e) => {\n // TODO: IE11 dont work\n this.inputRef.current?.stepUp && this.inputRef.current?.stepUp();\n this.inputHandlersRef.current?.value(this.inputRef.current.value, e);\n };\n\n handlerDec = (e) => {\n // TODO: IE11 dont work\n this.inputRef.current?.stepDown && this.inputRef.current?.stepDown();\n this.inputHandlersRef.current?.value(this.inputRef.current.value, e);\n };\n\n getValueProps() {\n return {\n ref: this.inputRef,\n $inputHandlers: this.inputHandlersRef,\n };\n }\n\n getControlsProps() {\n const { size } = this.asProps;\n return {\n size,\n inc: this.handlerInc,\n dec: this.handlerDec,\n };\n }\n\n render() {\n const SInputNumber = Root;\n return sstyled(this.asProps.style)(<SInputNumber render={Input} />);\n }\n}\n\nclass Value extends Component {\n static defaultProps = {\n defaultValue: '',\n step: 1,\n };\n\n uncontrolledProps() {\n return {\n value: null,\n };\n }\n\n roundRemainder(value, step) {\n const countDecimals = Math.floor(step) === step ? 0 : step.toString().split('.')[1].length || 0;\n return countDecimals === 0\n ? Number.parseFloat(value)\n : Number.parseFloat(value).toPrecision(countDecimals);\n }\n\n handleValidation = (e) => {\n const { value, min, max, step } = this.asProps;\n const roundCoefficient = step < 1 ? step.toString().split('.')[1].length : 1;\n if (Number.isNaN(e.currentTarget.valueAsNumber)) {\n e.currentTarget.value = '';\n this.handlers.value('', e);\n } else {\n let numberValue = parseValueWithMinMax(Number.parseFloat(value), min, max);\n const r = this.roundRemainder(numberValue % step, step);\n if (r !== 0) {\n if (r >= step / 2) {\n numberValue += step - r;\n } else if (Math.abs(r) < step) {\n numberValue -= r;\n }\n }\n const numberValueRounded = Number(numberValue.toFixed(roundCoefficient));\n this.handlers.value(String(numberValueRounded), e);\n }\n };\n\n render() {\n const SValue = Root;\n const { styles, $inputHandlers } = this.asProps;\n\n // 🐒 не делайте так\n $inputHandlers.current = this.handlers;\n\n return sstyled(styles)(\n <SValue\n render={Input.Value}\n type=\"number\"\n autoComplete=\"off\"\n onBlur={this.handleValidation}\n onInvalid={this.handleValidation}\n />,\n );\n }\n}\n\nfunction Controls(props) {\n const { Children, inc, dec, size, styles } = props;\n const SControls = Root;\n const SUp = 'button';\n const SDown = 'button';\n\n return sstyled(styles)(\n <SControls render={Input.Addon}>\n <SUp onClick={inc} tabIndex={-1} type=\"button\" size={size} aria-label=\"Increment number\">\n <IconUp />\n </SUp>\n <SDown onClick={dec} tabIndex={-1} type=\"button\" size={size} aria-label=\"Decrement number\">\n <IconDown />\n </SDown>\n <Children />\n </SControls>,\n );\n}\n\nexport default createComponent(InputNumber, {\n Value,\n Controls,\n Addon: Input.Addon,\n});\n"],"file":"InputNumber.js"}
|
package/lib/es6/InputNumber.js
CHANGED
|
@@ -154,6 +154,7 @@ var Value = /*#__PURE__*/function (_Component2) {
|
|
|
154
154
|
min = _this2$asProps.min,
|
|
155
155
|
max = _this2$asProps.max,
|
|
156
156
|
step = _this2$asProps.step;
|
|
157
|
+
var roundCoefficient = step < 1 ? step.toString().split('.')[1].length : 1;
|
|
157
158
|
|
|
158
159
|
if (Number.isNaN(e.currentTarget.valueAsNumber)) {
|
|
159
160
|
e.currentTarget.value = '';
|
|
@@ -172,7 +173,9 @@ var Value = /*#__PURE__*/function (_Component2) {
|
|
|
172
173
|
}
|
|
173
174
|
}
|
|
174
175
|
|
|
175
|
-
|
|
176
|
+
var numberValueRounded = Number(numberValue.toFixed(roundCoefficient));
|
|
177
|
+
|
|
178
|
+
_this2.handlers.value(String(numberValueRounded), e);
|
|
176
179
|
}
|
|
177
180
|
});
|
|
178
181
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/InputNumber.jsx"],"names":["React","createComponent","Component","sstyled","Root","Input","BUTTONS","parseValueWithMinMax","value","min","Number","MIN_SAFE_INTEGER","max","MAX_SAFE_INTEGER","Math","IconUp","up","IconDown","down","InputNumber","createRef","e","inputRef","current","stepUp","inputHandlersRef","stepDown","ref","$inputHandlers","size","asProps","inc","handlerInc","dec","handlerDec","SInputNumber","style","Value","step","isNaN","currentTarget","valueAsNumber","handlers","numberValue","parseFloat","r","roundRemainder","abs","
|
|
1
|
+
{"version":3,"sources":["../../src/InputNumber.jsx"],"names":["React","createComponent","Component","sstyled","Root","Input","BUTTONS","parseValueWithMinMax","value","min","Number","MIN_SAFE_INTEGER","max","MAX_SAFE_INTEGER","Math","IconUp","up","IconDown","down","InputNumber","createRef","e","inputRef","current","stepUp","inputHandlersRef","stepDown","ref","$inputHandlers","size","asProps","inc","handlerInc","dec","handlerDec","SInputNumber","style","Value","step","roundCoefficient","toString","split","length","isNaN","currentTarget","valueAsNumber","handlers","numberValue","parseFloat","r","roundRemainder","abs","numberValueRounded","toFixed","String","countDecimals","floor","toPrecision","SValue","styles","handleValidation","defaultValue","Controls","props","Children","SControls","Addon","SUp","SDown"],"mappings":"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","sourcesContent":["import React from 'react';\nimport createComponent, { Component, sstyled, Root } from '@semcore/core';\nimport Input from '@semcore/input';\nimport BUTTONS from './buttons';\n\nimport style from './style/input-number.shadow.css';\n\nfunction parseValueWithMinMax(value, min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER) {\n return Math.max(min, Math.min(max, value));\n}\n\nconst IconUp = () => BUTTONS.up;\nconst IconDown = () => BUTTONS.down;\n\nclass InputNumber extends Component {\n static displayName = 'InputNumber';\n static style = style;\n static defaultProps = {\n size: 'm',\n };\n\n inputRef = React.createRef();\n inputHandlersRef = React.createRef();\n\n handlerInc = (e) => {\n // TODO: IE11 dont work\n this.inputRef.current?.stepUp && this.inputRef.current?.stepUp();\n this.inputHandlersRef.current?.value(this.inputRef.current.value, e);\n };\n\n handlerDec = (e) => {\n // TODO: IE11 dont work\n this.inputRef.current?.stepDown && this.inputRef.current?.stepDown();\n this.inputHandlersRef.current?.value(this.inputRef.current.value, e);\n };\n\n getValueProps() {\n return {\n ref: this.inputRef,\n $inputHandlers: this.inputHandlersRef,\n };\n }\n\n getControlsProps() {\n const { size } = this.asProps;\n return {\n size,\n inc: this.handlerInc,\n dec: this.handlerDec,\n };\n }\n\n render() {\n const SInputNumber = Root;\n return sstyled(this.asProps.style)(<SInputNumber render={Input} />);\n }\n}\n\nclass Value extends Component {\n static defaultProps = {\n defaultValue: '',\n step: 1,\n };\n\n uncontrolledProps() {\n return {\n value: null,\n };\n }\n\n roundRemainder(value, step) {\n const countDecimals = Math.floor(step) === step ? 0 : step.toString().split('.')[1].length || 0;\n return countDecimals === 0\n ? Number.parseFloat(value)\n : Number.parseFloat(value).toPrecision(countDecimals);\n }\n\n handleValidation = (e) => {\n const { value, min, max, step } = this.asProps;\n const roundCoefficient = step < 1 ? step.toString().split('.')[1].length : 1;\n if (Number.isNaN(e.currentTarget.valueAsNumber)) {\n e.currentTarget.value = '';\n this.handlers.value('', e);\n } else {\n let numberValue = parseValueWithMinMax(Number.parseFloat(value), min, max);\n const r = this.roundRemainder(numberValue % step, step);\n if (r !== 0) {\n if (r >= step / 2) {\n numberValue += step - r;\n } else if (Math.abs(r) < step) {\n numberValue -= r;\n }\n }\n const numberValueRounded = Number(numberValue.toFixed(roundCoefficient));\n this.handlers.value(String(numberValueRounded), e);\n }\n };\n\n render() {\n const SValue = Root;\n const { styles, $inputHandlers } = this.asProps;\n\n // 🐒 не делайте так\n $inputHandlers.current = this.handlers;\n\n return sstyled(styles)(\n <SValue\n render={Input.Value}\n type=\"number\"\n autoComplete=\"off\"\n onBlur={this.handleValidation}\n onInvalid={this.handleValidation}\n />,\n );\n }\n}\n\nfunction Controls(props) {\n const { Children, inc, dec, size, styles } = props;\n const SControls = Root;\n const SUp = 'button';\n const SDown = 'button';\n\n return sstyled(styles)(\n <SControls render={Input.Addon}>\n <SUp onClick={inc} tabIndex={-1} type=\"button\" size={size} aria-label=\"Increment number\">\n <IconUp />\n </SUp>\n <SDown onClick={dec} tabIndex={-1} type=\"button\" size={size} aria-label=\"Decrement number\">\n <IconDown />\n </SDown>\n <Children />\n </SControls>,\n );\n}\n\nexport default createComponent(InputNumber, {\n Value,\n Controls,\n Addon: Input.Addon,\n});\n"],"file":"InputNumber.js"}
|
package/package.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@semcore/input-number",
|
|
3
3
|
"description": "SEMRush InputNumber Component",
|
|
4
|
-
"version": "4.0.
|
|
4
|
+
"version": "4.0.8",
|
|
5
5
|
"main": "lib/cjs/index.js",
|
|
6
6
|
"module": "lib/es6/index.js",
|
|
7
7
|
"typings": "lib/types/index.d.ts",
|
|
8
8
|
"sideEffects": false,
|
|
9
|
-
"author": "
|
|
9
|
+
"author": "UI-kit team <ui-kit-team@semrush.com>",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"scripts": {
|
|
12
12
|
"build": "build --source=js",
|
|
13
13
|
"test": "jest"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@semcore/
|
|
17
|
-
"@semcore/
|
|
16
|
+
"@semcore/input": "^3.0.0",
|
|
17
|
+
"@semcore/utils": "^3.15"
|
|
18
18
|
},
|
|
19
19
|
"peerDependencies": {
|
|
20
20
|
"@semcore/core": "^1.11",
|
package/src/InputNumber.jsx
CHANGED
|
@@ -77,6 +77,7 @@ class Value extends Component {
|
|
|
77
77
|
|
|
78
78
|
handleValidation = (e) => {
|
|
79
79
|
const { value, min, max, step } = this.asProps;
|
|
80
|
+
const roundCoefficient = step < 1 ? step.toString().split('.')[1].length : 1;
|
|
80
81
|
if (Number.isNaN(e.currentTarget.valueAsNumber)) {
|
|
81
82
|
e.currentTarget.value = '';
|
|
82
83
|
this.handlers.value('', e);
|
|
@@ -90,7 +91,8 @@ class Value extends Component {
|
|
|
90
91
|
numberValue -= r;
|
|
91
92
|
}
|
|
92
93
|
}
|
|
93
|
-
|
|
94
|
+
const numberValueRounded = Number(numberValue.toFixed(roundCoefficient));
|
|
95
|
+
this.handlers.value(String(numberValueRounded), e);
|
|
94
96
|
}
|
|
95
97
|
};
|
|
96
98
|
|