@semcore/input-number 4.0.14 → 4.0.15
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 +6 -0
- package/lib/cjs/InputNumber.js +25 -14
- package/lib/cjs/InputNumber.js.map +1 -1
- package/lib/cjs/style/input-number.shadow.css +9 -0
- package/lib/es6/InputNumber.js +25 -14
- package/lib/es6/InputNumber.js.map +1 -1
- package/lib/es6/style/input-number.shadow.css +9 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
CHANGELOG.md standards are inspired by [keepachangelog.com](https://keepachangelog.com/en/1.0.0/).
|
|
4
4
|
|
|
5
|
+
## [4.0.15] - 2022-08-25
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Added screen reader notification of input value and aria attributes for better a11y.
|
|
10
|
+
|
|
5
11
|
## [4.0.14] - 2022-08-23
|
|
6
12
|
|
|
7
13
|
### Changed
|
package/lib/cjs/InputNumber.js
CHANGED
|
@@ -48,19 +48,20 @@ var style = (
|
|
|
48
48
|
/*__reshadow_css_start__*/
|
|
49
49
|
_core.sstyled.insert(
|
|
50
50
|
/*__inner_css_start__*/
|
|
51
|
-
".
|
|
51
|
+
".___SInputNumber_1ntl1_gg_:hover .___SValue_1ntl1_gg_:not(.__disabled_1ntl1_gg_)~.___SControls_1ntl1_gg_{visibility:visible}.___SValue_1ntl1_gg_:focus~.___SControls_1ntl1_gg_{visibility:visible}.___SControls_1ntl1_gg_{display:flex;flex-flow:column;justify-content:center;height:100%;visibility:hidden;box-sizing:border-box}.___SControls_1ntl1_gg_.__showControls_1ntl1_gg_{visibility:visible}.___SDown_1ntl1_gg_,.___SUp_1ntl1_gg_{padding:0;width:16px;color:#a9abb6;box-sizing:border-box;display:inline-flex;justify-content:center;border:none;background:none;cursor:pointer}.___SDown_1ntl1_gg_:focus,.___SUp_1ntl1_gg_:focus{outline:none}.___SDown_1ntl1_gg_:hover,.___SUp_1ntl1_gg_:hover{color:#484a54}.___SUp_1ntl1_gg_{padding-bottom:1px}.___SDown_1ntl1_gg_{padding-top:1px}.___SValue_1ntl1_gg_::-webkit-inner-spin-button,.___SValue_1ntl1_gg_::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.___SValue_1ntl1_gg_._type_number_1ntl1_gg_{-moz-appearance:textfield}.___SValue_1ntl1_gg_.__disabled_1ntl1_gg_~.___SControls_1ntl1_gg_{opacity:0.3;cursor:default;pointer-events:none}.___SValueHidden_1ntl1_gg_{position:absolute;top:0;width:1px;height:1px;padding:0;overflow:hidden}"
|
|
52
52
|
/*__inner_css_end__*/
|
|
53
|
-
, "
|
|
53
|
+
, "1ntl1_gg_")
|
|
54
54
|
/*__reshadow_css_end__*/
|
|
55
55
|
, {
|
|
56
|
-
"__SInputNumber": "
|
|
57
|
-
"__SValue": "
|
|
58
|
-
"_disabled": "
|
|
59
|
-
"__SControls": "
|
|
60
|
-
"_showControls": "
|
|
61
|
-
"__SDown": "
|
|
62
|
-
"__SUp": "
|
|
63
|
-
"_type_number": "
|
|
56
|
+
"__SInputNumber": "___SInputNumber_1ntl1_gg_",
|
|
57
|
+
"__SValue": "___SValue_1ntl1_gg_",
|
|
58
|
+
"_disabled": "__disabled_1ntl1_gg_",
|
|
59
|
+
"__SControls": "___SControls_1ntl1_gg_",
|
|
60
|
+
"_showControls": "__showControls_1ntl1_gg_",
|
|
61
|
+
"__SDown": "___SDown_1ntl1_gg_",
|
|
62
|
+
"__SUp": "___SUp_1ntl1_gg_",
|
|
63
|
+
"_type_number": "_type_number_1ntl1_gg_",
|
|
64
|
+
"__SValueHidden": "___SValueHidden_1ntl1_gg_"
|
|
64
65
|
});
|
|
65
66
|
|
|
66
67
|
function parseValueWithMinMax(value) {
|
|
@@ -216,17 +217,27 @@ var Value = /*#__PURE__*/function (_Component2) {
|
|
|
216
217
|
_ref5;
|
|
217
218
|
|
|
218
219
|
var SValue = _input["default"].Value;
|
|
220
|
+
var SValueHidden = 'div';
|
|
219
221
|
var _this$asProps = this.asProps,
|
|
220
222
|
styles = _this$asProps.styles,
|
|
221
|
-
$inputHandlers = _this$asProps.$inputHandlers
|
|
223
|
+
$inputHandlers = _this$asProps.$inputHandlers,
|
|
224
|
+
value = _this$asProps.value,
|
|
225
|
+
min = _this$asProps.min,
|
|
226
|
+
max = _this$asProps.max; // 🐒 не делайте так
|
|
222
227
|
|
|
223
228
|
$inputHandlers.current = this.handlers;
|
|
224
|
-
return _ref5 = (0, _core.sstyled)(styles), /*#__PURE__*/_react["default"].createElement(SValue, _ref5.cn("SValue", _objectSpread({}, (0, _core.assignProps)({
|
|
229
|
+
return _ref5 = (0, _core.sstyled)(styles), /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(SValue, _ref5.cn("SValue", _objectSpread({}, (0, _core.assignProps)({
|
|
225
230
|
"type": "number",
|
|
226
231
|
"autoComplete": "off",
|
|
227
232
|
"onBlur": this.handleValidation,
|
|
228
|
-
"onInvalid": this.handleValidation
|
|
229
|
-
|
|
233
|
+
"onInvalid": this.handleValidation,
|
|
234
|
+
"aria-valuenow": value,
|
|
235
|
+
"aria-valuemin": min,
|
|
236
|
+
"aria-valuemax": max
|
|
237
|
+
}, _ref2)))), /*#__PURE__*/_react["default"].createElement(SValueHidden, _ref5.cn("SValueHidden", {
|
|
238
|
+
"aria-live": "polite",
|
|
239
|
+
"aria-atomic": true
|
|
240
|
+
}), value));
|
|
230
241
|
}
|
|
231
242
|
}]);
|
|
232
243
|
return Value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputNumber.js","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","sstyled","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","createComponent"],"sources":["../../src/InputNumber.jsx"],"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
|
|
1
|
+
{"version":3,"file":"InputNumber.js","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","sstyled","style","Component","Value","step","roundCoefficient","toString","split","length","isNaN","currentTarget","valueAsNumber","handlers","numberValue","parseFloat","r","roundRemainder","abs","numberValueRounded","toFixed","String","countDecimals","floor","toPrecision","SValue","SValueHidden","styles","handleValidation","defaultValue","Controls","props","Children","SControls","Addon","SUp","SDown","createComponent"],"sources":["../../src/InputNumber.jsx"],"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 SValueHidden = 'div';\n const { styles, $inputHandlers, value, min, max } = this.asProps;\n\n // 🐒 не делайте так\n $inputHandlers.current = this.handlers;\n\n return sstyled(styles)(\n <>\n <SValue\n render={Input.Value}\n type=\"number\"\n autoComplete=\"off\"\n onBlur={this.handleValidation}\n onInvalid={this.handleValidation}\n aria-valuenow={value}\n aria-valuemin={min}\n aria-valuemax={max}\n />\n {/* the next hidden div is necessary for the screen reader to report the value \n in the input, because after validation the value can change to the `min` or `max` \n if entered less than `min` or more than `max` */}\n <SValueHidden aria-live=\"polite\" aria-atomic={true}>\n {value}\n </SValueHidden>\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"],"mappings":"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"}
|
package/lib/es6/InputNumber.js
CHANGED
|
@@ -28,19 +28,20 @@ var style = (
|
|
|
28
28
|
/*__reshadow_css_start__*/
|
|
29
29
|
_sstyled.insert(
|
|
30
30
|
/*__inner_css_start__*/
|
|
31
|
-
".
|
|
31
|
+
".___SInputNumber_1ntl1_gg_:hover .___SValue_1ntl1_gg_:not(.__disabled_1ntl1_gg_)~.___SControls_1ntl1_gg_{visibility:visible}.___SValue_1ntl1_gg_:focus~.___SControls_1ntl1_gg_{visibility:visible}.___SControls_1ntl1_gg_{display:flex;flex-flow:column;justify-content:center;height:100%;visibility:hidden;box-sizing:border-box}.___SControls_1ntl1_gg_.__showControls_1ntl1_gg_{visibility:visible}.___SDown_1ntl1_gg_,.___SUp_1ntl1_gg_{padding:0;width:16px;color:#a9abb6;box-sizing:border-box;display:inline-flex;justify-content:center;border:none;background:none;cursor:pointer}.___SDown_1ntl1_gg_:focus,.___SUp_1ntl1_gg_:focus{outline:none}.___SDown_1ntl1_gg_:hover,.___SUp_1ntl1_gg_:hover{color:#484a54}.___SUp_1ntl1_gg_{padding-bottom:1px}.___SDown_1ntl1_gg_{padding-top:1px}.___SValue_1ntl1_gg_::-webkit-inner-spin-button,.___SValue_1ntl1_gg_::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.___SValue_1ntl1_gg_._type_number_1ntl1_gg_{-moz-appearance:textfield}.___SValue_1ntl1_gg_.__disabled_1ntl1_gg_~.___SControls_1ntl1_gg_{opacity:0.3;cursor:default;pointer-events:none}.___SValueHidden_1ntl1_gg_{position:absolute;top:0;width:1px;height:1px;padding:0;overflow:hidden}"
|
|
32
32
|
/*__inner_css_end__*/
|
|
33
|
-
, "
|
|
33
|
+
, "1ntl1_gg_")
|
|
34
34
|
/*__reshadow_css_end__*/
|
|
35
35
|
, {
|
|
36
|
-
"__SInputNumber": "
|
|
37
|
-
"__SValue": "
|
|
38
|
-
"_disabled": "
|
|
39
|
-
"__SControls": "
|
|
40
|
-
"_showControls": "
|
|
41
|
-
"__SDown": "
|
|
42
|
-
"__SUp": "
|
|
43
|
-
"_type_number": "
|
|
36
|
+
"__SInputNumber": "___SInputNumber_1ntl1_gg_",
|
|
37
|
+
"__SValue": "___SValue_1ntl1_gg_",
|
|
38
|
+
"_disabled": "__disabled_1ntl1_gg_",
|
|
39
|
+
"__SControls": "___SControls_1ntl1_gg_",
|
|
40
|
+
"_showControls": "__showControls_1ntl1_gg_",
|
|
41
|
+
"__SDown": "___SDown_1ntl1_gg_",
|
|
42
|
+
"__SUp": "___SUp_1ntl1_gg_",
|
|
43
|
+
"_type_number": "_type_number_1ntl1_gg_",
|
|
44
|
+
"__SValueHidden": "___SValueHidden_1ntl1_gg_"
|
|
44
45
|
});
|
|
45
46
|
|
|
46
47
|
function parseValueWithMinMax(value) {
|
|
@@ -206,17 +207,27 @@ var Value = /*#__PURE__*/function (_Component2) {
|
|
|
206
207
|
_ref5;
|
|
207
208
|
|
|
208
209
|
var SValue = Input.Value;
|
|
210
|
+
var SValueHidden = 'div';
|
|
209
211
|
var _this$asProps = this.asProps,
|
|
210
212
|
styles = _this$asProps.styles,
|
|
211
|
-
$inputHandlers = _this$asProps.$inputHandlers
|
|
213
|
+
$inputHandlers = _this$asProps.$inputHandlers,
|
|
214
|
+
value = _this$asProps.value,
|
|
215
|
+
min = _this$asProps.min,
|
|
216
|
+
max = _this$asProps.max; // 🐒 не делайте так
|
|
212
217
|
|
|
213
218
|
$inputHandlers.current = this.handlers;
|
|
214
|
-
return _ref5 = sstyled(styles), /*#__PURE__*/React.createElement(SValue, _ref5.cn("SValue", _objectSpread({}, _assignProps2({
|
|
219
|
+
return _ref5 = sstyled(styles), /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SValue, _ref5.cn("SValue", _objectSpread({}, _assignProps2({
|
|
215
220
|
"type": "number",
|
|
216
221
|
"autoComplete": "off",
|
|
217
222
|
"onBlur": this.handleValidation,
|
|
218
|
-
"onInvalid": this.handleValidation
|
|
219
|
-
|
|
223
|
+
"onInvalid": this.handleValidation,
|
|
224
|
+
"aria-valuenow": value,
|
|
225
|
+
"aria-valuemin": min,
|
|
226
|
+
"aria-valuemax": max
|
|
227
|
+
}, _ref2)))), /*#__PURE__*/React.createElement(SValueHidden, _ref5.cn("SValueHidden", {
|
|
228
|
+
"aria-live": "polite",
|
|
229
|
+
"aria-atomic": true
|
|
230
|
+
}), value));
|
|
220
231
|
}
|
|
221
232
|
}]);
|
|
222
233
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputNumber.js","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"],"sources":["../../src/InputNumber.jsx"],"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
|
|
1
|
+
{"version":3,"file":"InputNumber.js","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","SValueHidden","styles","handleValidation","defaultValue","Controls","props","Children","SControls","Addon","SUp","SDown"],"sources":["../../src/InputNumber.jsx"],"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 SValueHidden = 'div';\n const { styles, $inputHandlers, value, min, max } = this.asProps;\n\n // 🐒 не делайте так\n $inputHandlers.current = this.handlers;\n\n return sstyled(styles)(\n <>\n <SValue\n render={Input.Value}\n type=\"number\"\n autoComplete=\"off\"\n onBlur={this.handleValidation}\n onInvalid={this.handleValidation}\n aria-valuenow={value}\n aria-valuemin={min}\n aria-valuemax={max}\n />\n {/* the next hidden div is necessary for the screen reader to report the value \n in the input, because after validation the value can change to the `min` or `max` \n if entered less than `min` or more than `max` */}\n <SValueHidden aria-live=\"polite\" aria-atomic={true}>\n {value}\n </SValueHidden>\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"],"mappings":"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"}
|