@semcore/input-number 17.2.1 → 17.2.2-prerelease.1
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 +9 -0
- package/lib/cjs/InputNumber.js +100 -62
- package/lib/cjs/InputNumber.js.map +1 -1
- package/lib/cjs/InputNumber.type.js +2 -0
- package/lib/cjs/InputNumber.type.js.map +1 -0
- package/lib/cjs/buttons.js.map +1 -1
- package/lib/cjs/index.js +17 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/translations/__intergalactic-dynamic-locales.js.map +1 -1
- package/lib/es6/InputNumber.js +101 -62
- package/lib/es6/InputNumber.js.map +1 -1
- package/lib/es6/InputNumber.type.js +2 -0
- package/lib/es6/InputNumber.type.js.map +1 -0
- package/lib/es6/buttons.js.map +1 -1
- package/lib/es6/index.js +1 -0
- package/lib/es6/index.js.map +1 -1
- package/lib/es6/translations/__intergalactic-dynamic-locales.js.map +1 -1
- package/lib/esm/InputNumber.mjs +94 -63
- package/lib/esm/InputNumber.type.mjs +1 -0
- package/lib/esm/index.mjs +1 -0
- package/lib/types/InputNumber.d.ts +9 -0
- package/lib/types/InputNumber.type.d.ts +92 -0
- package/lib/types/buttons.d.ts +3 -0
- package/lib/types/index.d.ts +3 -63
- package/lib/types/translations/__intergalactic-dynamic-locales.d.ts +59 -0
- package/package.json +4 -4
- package/vite.config.ts +1 -1
- package/lib/cjs/index.d.js +0 -2
- package/lib/cjs/index.d.js.map +0 -1
- package/lib/es6/index.d.js +0 -2
- package/lib/es6/index.d.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
CHANGELOG.md standards are inspired by [keepachangelog.com](https://keepachangelog.com/en/1.0.0/).
|
|
4
4
|
|
|
5
|
+
## [17.2.2] - 2026-07-10
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Rewrite component to TS. Deprecate atomic types. Atomic types are part
|
|
10
|
+
of `NSInputNumber` namespace.
|
|
11
|
+
- Aligned typed, incremented, and decremented value precision with the
|
|
12
|
+
configured step precision.
|
|
13
|
+
|
|
5
14
|
## [17.2.1] - 2026-06-26
|
|
6
15
|
|
|
7
16
|
### Fixed
|
package/lib/cjs/InputNumber.js
CHANGED
|
@@ -16,18 +16,25 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
16
16
|
var _buttons = require("./buttons");
|
|
17
17
|
var _intergalacticDynamicLocales = require("./translations/__intergalactic-dynamic-locales");
|
|
18
18
|
/*!__reshadow-styles__:"./style/input-number.shadow.css"*/
|
|
19
|
-
const style = (/*__reshadow_css_start__*/_core.sstyled.insert(/*__inner_css_start__*/".
|
|
19
|
+
const style = (/*__reshadow_css_start__*/_core.sstyled.insert(/*__inner_css_start__*/".___SValue_1i69c_gg_:focus~.___SControls_1i69c_gg_{display:flex}.___SControls_1i69c_gg_{display:none;flex-flow:column;justify-content:center;height:100%;box-sizing:border-box}.___SControls_1i69c_gg_.__showControls_1i69c_gg_{display:flex}.___SDown_1i69c_gg_,.___SUp_1i69c_gg_{padding:0;width:16px;color:var(--intergalactic-icon-secondary-neutral,rgba(0,5,2,.385));box-sizing:border-box;display:inline-flex;justify-content:center;border:none;background:none;cursor:pointer}@media (color-gamut:p3){.___SDown_1i69c_gg_,.___SUp_1i69c_gg_{color:var(--intergalactic-icon-secondary-neutral,oklch(.104 .023 162.3/.385))}}.___SDown_1i69c_gg_:focus,.___SUp_1i69c_gg_:focus{outline:none}@media (hover:hover){.___SDown_1i69c_gg_:hover,.___SUp_1i69c_gg_:hover{color:var(--intergalactic-icon-secondary-neutral-hover-active,#0005026e)}@media (color-gamut:p3){.___SDown_1i69c_gg_:hover,.___SUp_1i69c_gg_:hover{color:var(--intergalactic-icon-secondary-neutral-hover-active,oklch(.1 .023 159.1/.433))}}}.___SUp_1i69c_gg_{padding-bottom:1px}.___SDown_1i69c_gg_{padding-top:1px}.___SValue_1i69c_gg_::-webkit-inner-spin-button,.___SValue_1i69c_gg_::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.___SValue_1i69c_gg_._type_number_1i69c_gg_{-moz-appearance:textfield}.___SValue_1i69c_gg_.__disabled_1i69c_gg_~.___SControls_1i69c_gg_{opacity:var(--intergalactic-disabled-opacity,.4);cursor:default;pointer-events:none}.___SValueHidden_1i69c_gg_{position:absolute;top:0;width:1px;height:1px;padding:0;overflow:hidden}", /*__inner_css_end__*/"1i69c_gg_"),
|
|
20
20
|
/*__reshadow_css_end__*/
|
|
21
21
|
{
|
|
22
|
-
"__SValue": "
|
|
23
|
-
"__SControls": "
|
|
24
|
-
"_showControls": "
|
|
25
|
-
"__SUp": "
|
|
26
|
-
"__SDown": "
|
|
27
|
-
"_disabled": "
|
|
28
|
-
"__SValueHidden": "
|
|
29
|
-
"_type_number": "
|
|
22
|
+
"__SValue": "___SValue_1i69c_gg_",
|
|
23
|
+
"__SControls": "___SControls_1i69c_gg_",
|
|
24
|
+
"_showControls": "__showControls_1i69c_gg_",
|
|
25
|
+
"__SUp": "___SUp_1i69c_gg_",
|
|
26
|
+
"__SDown": "___SDown_1i69c_gg_",
|
|
27
|
+
"_disabled": "__disabled_1i69c_gg_",
|
|
28
|
+
"__SValueHidden": "___SValueHidden_1i69c_gg_",
|
|
29
|
+
"_type_number": "_type_number_1i69c_gg_"
|
|
30
30
|
});
|
|
31
|
+
/** Events that can trigger a value step (buttons, keyboard arrows, mouse wheel). */
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The input DOM node whose native `stepUp`/`stepDown` methods are replaced at runtime
|
|
35
|
+
* (see `Value.componentDidMount`) with event-aware versions.
|
|
36
|
+
*/
|
|
37
|
+
|
|
31
38
|
function parseValueWithMinMax(value, min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER) {
|
|
32
39
|
return Math.max(min, Math.min(max, value));
|
|
33
40
|
}
|
|
@@ -44,7 +51,8 @@ class InputNumber extends _core.Component {
|
|
|
44
51
|
}
|
|
45
52
|
getValueProps() {
|
|
46
53
|
const numberFormatter = new Intl.NumberFormat(this.asProps.locale, {
|
|
47
|
-
style: 'decimal'
|
|
54
|
+
style: 'decimal',
|
|
55
|
+
maximumFractionDigits: 100
|
|
48
56
|
});
|
|
49
57
|
return {
|
|
50
58
|
inputRef: this.inputRef,
|
|
@@ -55,11 +63,9 @@ class InputNumber extends _core.Component {
|
|
|
55
63
|
}
|
|
56
64
|
getControlsProps() {
|
|
57
65
|
const {
|
|
58
|
-
size,
|
|
59
66
|
getI18nText
|
|
60
67
|
} = this.asProps;
|
|
61
68
|
return {
|
|
62
|
-
size,
|
|
63
69
|
increment: this.increment,
|
|
64
70
|
decrement: this.decrement,
|
|
65
71
|
getI18nText
|
|
@@ -85,6 +91,9 @@ class InputNumber extends _core.Component {
|
|
|
85
91
|
class Value extends _core.Component {
|
|
86
92
|
constructor(...args) {
|
|
87
93
|
super(...args);
|
|
94
|
+
(0, _defineProperty2.default)(this, "state", {
|
|
95
|
+
displayValue: ''
|
|
96
|
+
});
|
|
88
97
|
(0, _defineProperty2.default)(this, "valueInputRef", /*#__PURE__*/_react.default.createRef());
|
|
89
98
|
(0, _defineProperty2.default)(this, "cursorPosition", -1);
|
|
90
99
|
(0, _defineProperty2.default)(this, "getFormattedValue", value => {
|
|
@@ -104,9 +113,9 @@ class Value extends _core.Component {
|
|
|
104
113
|
let displayValue = '';
|
|
105
114
|
if (/\.[0-9]*0$/.test(stringNumber)) {
|
|
106
115
|
const [int, decimal] = stringNumber.split(this.separatorDecimal);
|
|
107
|
-
displayValue = numberFormatter.format(int) + this.separatorDecimal + decimal;
|
|
116
|
+
displayValue = numberFormatter.format(+int) + this.separatorDecimal + decimal;
|
|
108
117
|
} else if (stringNumber !== '') {
|
|
109
|
-
displayValue = numberFormatter.format(stringNumber);
|
|
118
|
+
displayValue = numberFormatter.format(+stringNumber);
|
|
110
119
|
}
|
|
111
120
|
return {
|
|
112
121
|
parsedValue: stringNumber,
|
|
@@ -116,21 +125,22 @@ class Value extends _core.Component {
|
|
|
116
125
|
(0, _defineProperty2.default)(this, "handleValidation", event => {
|
|
117
126
|
const {
|
|
118
127
|
value,
|
|
119
|
-
displayValue,
|
|
120
128
|
min,
|
|
121
129
|
max,
|
|
122
130
|
step
|
|
123
131
|
} = this.asProps;
|
|
132
|
+
const {
|
|
133
|
+
displayValue
|
|
134
|
+
} = this.state;
|
|
124
135
|
const {
|
|
125
136
|
parsedValue
|
|
126
137
|
} = this.valueParser(event.currentTarget.value, value, displayValue);
|
|
127
|
-
const roundCoefficient = step < 1 ? step.toString().split('.')[1].length : 1;
|
|
128
138
|
if (Number.isNaN(value) || Number.isNaN(Number.parseFloat(parsedValue))) {
|
|
129
139
|
event.currentTarget.value = '';
|
|
130
140
|
this.handlers.value('', event);
|
|
131
141
|
} else {
|
|
132
142
|
let numberValue = parseValueWithMinMax(Number.parseFloat(parsedValue), min, max);
|
|
133
|
-
const rounded = this.round(numberValue % step
|
|
143
|
+
const rounded = this.round(numberValue % step);
|
|
134
144
|
if (rounded !== 0) {
|
|
135
145
|
if (rounded >= step / 2) {
|
|
136
146
|
numberValue += step - rounded;
|
|
@@ -138,8 +148,7 @@ class Value extends _core.Component {
|
|
|
138
148
|
numberValue -= rounded;
|
|
139
149
|
}
|
|
140
150
|
}
|
|
141
|
-
|
|
142
|
-
this.handlers.value(String(numberValueRounded), event);
|
|
151
|
+
this.handlers.value(this.getDisplayValue(numberValue), event);
|
|
143
152
|
}
|
|
144
153
|
});
|
|
145
154
|
(0, _defineProperty2.default)(this, "onWheel", event => {
|
|
@@ -149,9 +158,9 @@ class Value extends _core.Component {
|
|
|
149
158
|
if (event.target !== this.valueInputRef.current) return;
|
|
150
159
|
if (document.activeElement !== this.valueInputRef.current) return;
|
|
151
160
|
event.preventDefault();
|
|
152
|
-
if (event.
|
|
161
|
+
if (event.deltaY < 0) {
|
|
153
162
|
this.stepUp(event);
|
|
154
|
-
} else if (event.
|
|
163
|
+
} else if (event.deltaY > 0) {
|
|
155
164
|
this.stepDown(event);
|
|
156
165
|
}
|
|
157
166
|
});
|
|
@@ -162,7 +171,9 @@ class Value extends _core.Component {
|
|
|
162
171
|
value: prevValue
|
|
163
172
|
} = this.asProps;
|
|
164
173
|
if (value === '.' || value === '-') {
|
|
165
|
-
this.
|
|
174
|
+
this.setState({
|
|
175
|
+
displayValue: value
|
|
176
|
+
});
|
|
166
177
|
return false;
|
|
167
178
|
}
|
|
168
179
|
if (value.endsWith('-')) {
|
|
@@ -170,7 +181,9 @@ class Value extends _core.Component {
|
|
|
170
181
|
}
|
|
171
182
|
if (value.endsWith('.')) {
|
|
172
183
|
if (value.length > prevValue.length) {
|
|
173
|
-
this.
|
|
184
|
+
this.setState({
|
|
185
|
+
displayValue: numberFormatter.format(value) + this.separatorDecimal
|
|
186
|
+
});
|
|
174
187
|
return false;
|
|
175
188
|
} else {
|
|
176
189
|
this.handlers.value(value.slice(0, -1), event);
|
|
@@ -179,7 +192,7 @@ class Value extends _core.Component {
|
|
|
179
192
|
}
|
|
180
193
|
const digits = /^[0-9.-]+$/.test(value);
|
|
181
194
|
if (digits || value === '') {
|
|
182
|
-
this.handlers.value(value, event);
|
|
195
|
+
this.handlers.value(this.limitDecimals(value), event);
|
|
183
196
|
}
|
|
184
197
|
});
|
|
185
198
|
(0, _defineProperty2.default)(this, "handleKeyUp", event => {
|
|
@@ -193,7 +206,7 @@ class Value extends _core.Component {
|
|
|
193
206
|
const length = value.length;
|
|
194
207
|
const {
|
|
195
208
|
displayValue
|
|
196
|
-
} = this.
|
|
209
|
+
} = this.state;
|
|
197
210
|
if (event.key === '.' || event.key === ',') {
|
|
198
211
|
// for the first decimal separator we should replace both ',' and '.' to '.' because of how js convert strings to numbers (with ',' it will be Number.NaN)
|
|
199
212
|
if (value.indexOf(this.separatorDecimal) === -1 && event.key === ',') {
|
|
@@ -208,11 +221,13 @@ class Value extends _core.Component {
|
|
|
208
221
|
if (event.key === 'Backspace' && value.endsWith(this.separatorDecimal)) {
|
|
209
222
|
event.preventDefault();
|
|
210
223
|
event.stopPropagation();
|
|
211
|
-
this.
|
|
224
|
+
this.setState({
|
|
225
|
+
displayValue: displayValue?.slice(0, -1)
|
|
226
|
+
});
|
|
212
227
|
return false;
|
|
213
228
|
}
|
|
214
229
|
if (element.selectionStart !== length && (event.key === 'Backspace' || event.key === this.separatorDecimal || ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].includes(event.key))) {
|
|
215
|
-
const afterSelection = value.slice(element.selectionEnd);
|
|
230
|
+
const afterSelection = value.slice(element.selectionEnd ?? undefined);
|
|
216
231
|
requestAnimationFrame(() => {
|
|
217
232
|
const newValue = this.state.displayValue;
|
|
218
233
|
const index = newValue.lastIndexOf(afterSelection);
|
|
@@ -258,6 +273,7 @@ class Value extends _core.Component {
|
|
|
258
273
|
}
|
|
259
274
|
});
|
|
260
275
|
(0, _defineProperty2.default)(this, "moveSelectionLeft", (element, cursorIndex) => {
|
|
276
|
+
if (element.selectionStart === null) return;
|
|
261
277
|
const value = element.value;
|
|
262
278
|
const nextPosition = element.selectionStart - 1 >= 0 ? element.selectionStart - 1 : 0;
|
|
263
279
|
const cursorPosition = value[element.selectionStart - cursorIndex] === this.separatorThousands ? element.selectionStart - cursorIndex : nextPosition;
|
|
@@ -265,14 +281,15 @@ class Value extends _core.Component {
|
|
|
265
281
|
// without shift
|
|
266
282
|
element.setSelectionRange(cursorPosition, cursorPosition);
|
|
267
283
|
} else {
|
|
268
|
-
if (element.selectionStart <= this.cursorPosition && element.selectionEnd === this.cursorPosition) {
|
|
284
|
+
if (this.cursorPosition && element.selectionStart <= this.cursorPosition && element.selectionEnd === this.cursorPosition) {
|
|
269
285
|
element.setSelectionRange(cursorPosition, element.selectionEnd);
|
|
270
|
-
} else {
|
|
286
|
+
} else if (element.selectionEnd !== null) {
|
|
271
287
|
element.setSelectionRange(element.selectionStart, value[element.selectionEnd - cursorIndex] === this.separatorThousands ? element.selectionEnd - cursorIndex : element.selectionEnd - 1);
|
|
272
288
|
}
|
|
273
289
|
}
|
|
274
290
|
});
|
|
275
291
|
(0, _defineProperty2.default)(this, "moveSelectionRight", (element, cursorIndex) => {
|
|
292
|
+
if (element.selectionEnd === null) return;
|
|
276
293
|
const value = element.value;
|
|
277
294
|
const nextPosition = element.selectionEnd + 1;
|
|
278
295
|
const cursorPosition = value[element.selectionEnd] === this.separatorThousands ? element.selectionEnd + cursorIndex : nextPosition;
|
|
@@ -280,24 +297,20 @@ class Value extends _core.Component {
|
|
|
280
297
|
// without shift
|
|
281
298
|
element.setSelectionRange(cursorPosition, cursorPosition);
|
|
282
299
|
} else {
|
|
283
|
-
if (element.selectionEnd >= this.cursorPosition && element.selectionStart === this.cursorPosition) {
|
|
300
|
+
if (this.cursorPosition && element.selectionEnd >= this.cursorPosition && element.selectionStart === this.cursorPosition) {
|
|
284
301
|
element.setSelectionRange(element.selectionStart, cursorPosition);
|
|
285
|
-
} else {
|
|
302
|
+
} else if (element.selectionStart !== null) {
|
|
286
303
|
element.setSelectionRange(value[element.selectionStart] === this.separatorThousands ? element.selectionStart + cursorIndex : element.selectionStart + 1, element.selectionEnd);
|
|
287
304
|
}
|
|
288
305
|
}
|
|
289
306
|
});
|
|
290
307
|
(0, _defineProperty2.default)(this, "handleClick", event => {
|
|
291
|
-
const element = event.
|
|
308
|
+
const element = event.currentTarget;
|
|
292
309
|
const value = element.value;
|
|
293
|
-
if (value[element.selectionStart - 1] === this.separatorThousands) {
|
|
310
|
+
if (element.selectionStart !== null && value[element.selectionStart - 1] === this.separatorThousands) {
|
|
294
311
|
element.setSelectionRange(element.selectionStart - 1, element.selectionEnd - 1);
|
|
295
312
|
}
|
|
296
313
|
});
|
|
297
|
-
(0, _defineProperty2.default)(this, "handleBlur", event => {
|
|
298
|
-
this.cursorPosition = -1;
|
|
299
|
-
this.handleValidation(event);
|
|
300
|
-
});
|
|
301
314
|
(0, _defineProperty2.default)(this, "stepUp", event => {
|
|
302
315
|
const {
|
|
303
316
|
max = Number.MAX_SAFE_INTEGER,
|
|
@@ -313,10 +326,9 @@ class Value extends _core.Component {
|
|
|
313
326
|
} else {
|
|
314
327
|
numberValue = Number.parseFloat(value);
|
|
315
328
|
}
|
|
316
|
-
if (
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
}
|
|
329
|
+
if (Number.isNaN(numberValue)) return;
|
|
330
|
+
const nextValue = Math.min(numberValue + step, max);
|
|
331
|
+
this.handlers.value(this.getDisplayValue(nextValue), event);
|
|
320
332
|
});
|
|
321
333
|
(0, _defineProperty2.default)(this, "stepDown", event => {
|
|
322
334
|
const {
|
|
@@ -331,25 +343,27 @@ class Value extends _core.Component {
|
|
|
331
343
|
} else {
|
|
332
344
|
numberValue = Number.parseFloat(value);
|
|
333
345
|
}
|
|
334
|
-
if (
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
}
|
|
346
|
+
if (Number.isNaN(numberValue)) return;
|
|
347
|
+
const nextValue = Math.max(numberValue - step, min);
|
|
348
|
+
this.handlers.value(this.getDisplayValue(nextValue), event);
|
|
338
349
|
});
|
|
339
350
|
}
|
|
340
351
|
uncontrolledProps() {
|
|
341
352
|
return {
|
|
342
|
-
displayValue: null,
|
|
343
353
|
value: [null, newValue => {
|
|
344
354
|
const {
|
|
345
|
-
value: prevValue,
|
|
346
355
|
displayValue: prevDisplayValue
|
|
356
|
+
} = this.state;
|
|
357
|
+
const {
|
|
358
|
+
value: prevValue
|
|
347
359
|
} = this.asProps;
|
|
348
360
|
const {
|
|
349
361
|
parsedValue,
|
|
350
362
|
displayValue
|
|
351
|
-
} = this.valueParser(newValue, prevValue, prevDisplayValue);
|
|
352
|
-
this.
|
|
363
|
+
} = this.valueParser(newValue ?? '', prevValue, prevDisplayValue);
|
|
364
|
+
this.setState({
|
|
365
|
+
displayValue
|
|
366
|
+
});
|
|
353
367
|
return parsedValue;
|
|
354
368
|
}]
|
|
355
369
|
};
|
|
@@ -366,9 +380,30 @@ class Value extends _core.Component {
|
|
|
366
380
|
} = this.props;
|
|
367
381
|
return numberFormatter.format(1111).replace(/\d/g, '');
|
|
368
382
|
}
|
|
369
|
-
|
|
370
|
-
const
|
|
371
|
-
|
|
383
|
+
get stepPrecision() {
|
|
384
|
+
const {
|
|
385
|
+
step
|
|
386
|
+
} = this.asProps;
|
|
387
|
+
const [_, decimals] = step?.toString().split('.') ?? [];
|
|
388
|
+
return decimals?.length ?? 0;
|
|
389
|
+
}
|
|
390
|
+
getDisplayValue(value) {
|
|
391
|
+
return value === 0 ? `${value}` : value.toFixed(this.stepPrecision);
|
|
392
|
+
}
|
|
393
|
+
limitDecimals(value) {
|
|
394
|
+
const {
|
|
395
|
+
stepPrecision
|
|
396
|
+
} = this;
|
|
397
|
+
if (stepPrecision === 0) return value;
|
|
398
|
+
const dotIndex = value.indexOf('.');
|
|
399
|
+
if (dotIndex === -1 || value.length - dotIndex - 1 <= stepPrecision) return value;
|
|
400
|
+
return value.slice(0, dotIndex + 1 + stepPrecision);
|
|
401
|
+
}
|
|
402
|
+
round(value) {
|
|
403
|
+
const {
|
|
404
|
+
stepPrecision
|
|
405
|
+
} = this;
|
|
406
|
+
return stepPrecision === 0 ? value : Number(value.toPrecision(stepPrecision));
|
|
372
407
|
}
|
|
373
408
|
// https://stackoverflow.com/questions/57358640/cancel-wheel-event-with-e-preventdefault-in-react-event-bubbling
|
|
374
409
|
componentDidMount() {
|
|
@@ -391,15 +426,19 @@ class Value extends _core.Component {
|
|
|
391
426
|
const {
|
|
392
427
|
displayValue
|
|
393
428
|
} = this.valueParser(value, '', '');
|
|
394
|
-
this.
|
|
429
|
+
this.setState({
|
|
430
|
+
displayValue
|
|
431
|
+
});
|
|
395
432
|
}
|
|
396
433
|
}
|
|
397
|
-
componentDidUpdate(prevProps) {
|
|
434
|
+
componentDidUpdate(prevProps, prevState) {
|
|
398
435
|
if (prevProps.value !== this.props.value) {
|
|
399
436
|
const {
|
|
400
437
|
displayValue
|
|
401
|
-
} = this.valueParser(this.props.value, prevProps.value,
|
|
402
|
-
this.
|
|
438
|
+
} = this.valueParser(this.props.value ?? '', prevProps.value, prevState.displayValue);
|
|
439
|
+
this.setState({
|
|
440
|
+
displayValue
|
|
441
|
+
});
|
|
403
442
|
}
|
|
404
443
|
}
|
|
405
444
|
componentWillUnmount() {
|
|
@@ -415,9 +454,11 @@ class Value extends _core.Component {
|
|
|
415
454
|
max,
|
|
416
455
|
step,
|
|
417
456
|
forwardRef,
|
|
418
|
-
inputRef
|
|
419
|
-
displayValue
|
|
457
|
+
inputRef
|
|
420
458
|
} = this.asProps;
|
|
459
|
+
const {
|
|
460
|
+
displayValue
|
|
461
|
+
} = this.state;
|
|
421
462
|
return _ref5 = (0, _core.sstyled)(styles), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(SValue, _ref5.cn("SValue", {
|
|
422
463
|
...(0, _core.assignProps)({
|
|
423
464
|
"autoComplete": 'off',
|
|
@@ -426,7 +467,7 @@ class Value extends _core.Component {
|
|
|
426
467
|
"onKeyDown": this.handleKeyDown,
|
|
427
468
|
"onKeyUp": this.handleKeyUp,
|
|
428
469
|
"onClick": this.handleClick,
|
|
429
|
-
"use:ref": (0, _ref7.forkRef)(this.valueInputRef, inputRef, forwardRef),
|
|
470
|
+
"use:ref": (0, _ref7.forkRef)(this.valueInputRef, inputRef, forwardRef ?? null),
|
|
430
471
|
"use:value": displayValue,
|
|
431
472
|
"inputMode": Number.isInteger(step) ? 'numeric' : 'decimal',
|
|
432
473
|
"min": min,
|
|
@@ -449,7 +490,6 @@ function Controls(props) {
|
|
|
449
490
|
Children,
|
|
450
491
|
increment,
|
|
451
492
|
decrement,
|
|
452
|
-
size,
|
|
453
493
|
styles,
|
|
454
494
|
getI18nText
|
|
455
495
|
} = props;
|
|
@@ -464,13 +504,11 @@ function Controls(props) {
|
|
|
464
504
|
"onClick": increment,
|
|
465
505
|
"tabIndex": -1,
|
|
466
506
|
"type": 'button',
|
|
467
|
-
"size": size,
|
|
468
507
|
"aria-label": getI18nText('increment')
|
|
469
508
|
}), /*#__PURE__*/_react.default.createElement(_buttons.IncrementIcon, _ref6.cn("IncrementIcon", {}))), /*#__PURE__*/_react.default.createElement(SDown, _ref6.cn("SDown", {
|
|
470
509
|
"onClick": decrement,
|
|
471
510
|
"tabIndex": -1,
|
|
472
511
|
"type": 'button',
|
|
473
|
-
"size": size,
|
|
474
512
|
"aria-label": getI18nText('decrement')
|
|
475
513
|
}), /*#__PURE__*/_react.default.createElement(_buttons.DecrementIcon, _ref6.cn("DecrementIcon", {}))), /*#__PURE__*/_react.default.createElement(Children, _ref6.cn("Children", {})));
|
|
476
514
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputNumber.js","names":["_core","require","_assignProps4","_i18nEnhance","_interopRequireDefault","_ref7","_input","_react","_buttons","_intergalacticDynamicLocales","style","sstyled","insert","parseValueWithMinMax","value","min","Number","MIN_SAFE_INTEGER","max","MAX_SAFE_INTEGER","Math","InputNumber","Component","constructor","args","_defineProperty2","default","React","createRef","event","inputRef","current","stepUp","stepDown","getValueProps","numberFormatter","Intl","NumberFormat","asProps","locale","increment","decrement","getControlsProps","size","getI18nText","render","_ref","_ref4","SInputNumber","Input","createElement","cn","assignProps","i18nEnhance","localizedMessages","i18n","Value","replace","RegExp","separatorThousands","separatorDecimal","prevValue","prevDisplayValue","props","stringNumber","getFormattedValue","String","isNaN","parsedValue","displayValue","test","int","decimal","split","format","step","valueParser","currentTarget","roundCoefficient","toString","length","parseFloat","handlers","numberValue","rounded","round","abs","numberValueRounded","toFixed","callAllEventHandlers","onWheel","handleWheel","target","valueInputRef","document","activeElement","preventDefault","wheelDelta","endsWith","slice","digits","key","cursorPosition","element","indexOf","stopPropagation","selectionStart","includes","afterSelection","selectionEnd","requestAnimationFrame","newValue","state","index","lastIndexOf","setSelectionRange","cursorIndex","shiftKey","moveSelectionLeft","moveSelectionRight","nextPosition","handleValidation","uncontrolledProps","countDecimals","floor","toPrecision","componentDidMount","addEventListener","autoFocus","setTimeout","focus","componentDidUpdate","prevProps","componentWillUnmount","removeEventListener","_ref2","_ref5","SValue","styles","forwardRef","Fragment","handleChange","handleKeyDown","handleKeyUp","handleClick","forkRef","isInteger","defaultValue","defaultDisplayValue","Controls","_ref3","arguments[0]","_ref6","Children","SControls","Addon","SUp","SDown","IncrementIcon","DecrementIcon","_default","exports","createComponent"],"sources":["../../src/InputNumber.jsx"],"sourcesContent":["import { Component, createComponent, Root, sstyled } from '@semcore/core';\nimport { callAllEventHandlers } from '@semcore/core/lib/utils/assignProps';\nimport i18nEnhance from '@semcore/core/lib/utils/enhances/i18nEnhance';\nimport { forkRef } from '@semcore/core/lib/utils/ref';\nimport Input from '@semcore/input';\nimport React from 'react';\n\nimport { DecrementIcon, IncrementIcon } from './buttons';\nimport style from './style/input-number.shadow.css';\nimport { localizedMessages } from './translations/__intergalactic-dynamic-locales';\n\nexport function parseValueWithMinMax(\n value,\n min = Number.MIN_SAFE_INTEGER,\n max = Number.MAX_SAFE_INTEGER,\n) {\n return Math.max(min, Math.min(max, value));\n}\n\nclass InputNumber extends Component {\n static displayName = 'InputNumber';\n static style = style;\n static enhance = [i18nEnhance(localizedMessages)];\n static defaultProps = {\n size: 'm',\n i18n: localizedMessages,\n locale: 'en',\n };\n\n inputRef = React.createRef();\n\n increment = (event) => {\n this.inputRef.current?.stepUp?.(event);\n };\n\n decrement = (event) => {\n this.inputRef.current?.stepDown?.(event);\n };\n\n getValueProps() {\n const numberFormatter = new Intl.NumberFormat(this.asProps.locale, { style: 'decimal' });\n\n return {\n inputRef: this.inputRef,\n increment: this.increment,\n decrement: this.decrement,\n numberFormatter,\n };\n }\n\n getControlsProps() {\n const { size, getI18nText } = this.asProps;\n return {\n size,\n increment: this.increment,\n decrement: this.decrement,\n getI18nText,\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 style = style;\n static defaultProps = {\n defaultValue: '',\n defaultDisplayValue: '',\n step: 1,\n };\n\n valueInputRef = React.createRef();\n\n cursorPosition = -1;\n\n uncontrolledProps() {\n return {\n displayValue: null,\n value: [\n null,\n (newValue) => {\n const { value: prevValue, displayValue: prevDisplayValue } = this.asProps;\n\n const { parsedValue, displayValue } = this.valueParser(\n newValue,\n prevValue,\n prevDisplayValue,\n );\n\n this.handlers.displayValue(displayValue);\n\n return parsedValue;\n },\n ],\n };\n }\n\n get separatorDecimal() {\n const { numberFormatter } = this.props;\n\n return numberFormatter.format(11.11).replace(/\\d/g, '');\n }\n\n get separatorThousands() {\n const { numberFormatter } = this.props;\n\n return numberFormatter.format(1111).replace(/\\d/g, '');\n }\n\n getFormattedValue = (value) => {\n return value\n .replace(new RegExp(`[${this.separatorThousands}]`, 'g'), '')\n .replace(this.separatorDecimal, '.');\n };\n\n valueParser = (value, prevValue, prevDisplayValue) => {\n const { numberFormatter } = this.props;\n\n const stringNumber = this.getFormattedValue(String(value));\n\n if (Number.isNaN(Number(stringNumber))) {\n return {\n parsedValue: prevValue,\n displayValue: prevDisplayValue,\n };\n }\n\n let displayValue = '';\n\n if (/\\.[0-9]*0$/.test(stringNumber)) {\n const [int, decimal] = stringNumber.split(this.separatorDecimal);\n displayValue = numberFormatter.format(int) + this.separatorDecimal + decimal;\n } else if (stringNumber !== '') {\n displayValue = numberFormatter.format(stringNumber);\n }\n\n return {\n parsedValue: stringNumber,\n displayValue: displayValue,\n };\n };\n\n round(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 = (event) => {\n const { value, displayValue, min, max, step } = this.asProps;\n const { parsedValue } = this.valueParser(event.currentTarget.value, value, displayValue);\n const roundCoefficient = step < 1 ? step.toString().split('.')[1].length : 1;\n\n if (Number.isNaN(value) || Number.isNaN(Number.parseFloat(parsedValue))) {\n event.currentTarget.value = '';\n this.handlers.value('', event);\n } else {\n let numberValue = parseValueWithMinMax(Number.parseFloat(parsedValue), min, max);\n const rounded = this.round(numberValue % step, step);\n if (rounded !== 0) {\n if (rounded >= step / 2) {\n numberValue += step - rounded;\n } else if (Math.abs(rounded) < step) {\n numberValue -= rounded;\n }\n }\n const numberValueRounded = Number(numberValue.toFixed(roundCoefficient));\n\n this.handlers.value(String(numberValueRounded), event);\n }\n };\n\n // https://stackoverflow.com/questions/57358640/cancel-wheel-event-with-e-preventdefault-in-react-event-bubbling\n componentDidMount() {\n this.valueInputRef.current?.addEventListener('wheel', this.onWheel);\n\n const { inputRef, value, autoFocus } = this.asProps;\n\n if (autoFocus) {\n setTimeout(() => {\n this.valueInputRef.current?.focus();\n });\n }\n\n if (inputRef.current) {\n inputRef.current.stepUp = this.stepUp;\n inputRef.current.stepDown = this.stepDown;\n }\n\n if (value !== '') {\n const { displayValue } = this.valueParser(value, '', '');\n this.handlers.displayValue(displayValue);\n }\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.value !== this.props.value) {\n const { displayValue } = this.valueParser(\n this.props.value,\n prevProps.value,\n prevProps.displayValue,\n );\n this.handlers.displayValue(displayValue);\n }\n }\n\n componentWillUnmount() {\n this.valueInputRef.current?.removeEventListener('wheel', this.onWheel);\n }\n\n onWheel = (event) => {\n callAllEventHandlers(this.asProps.onWheel, this.handleWheel)(event);\n };\n\n handleWheel = (event) => {\n if (event.target !== this.valueInputRef.current) return;\n if (document.activeElement !== this.valueInputRef.current) return;\n event.preventDefault();\n if (event.wheelDelta > 0) {\n this.stepUp(event);\n } else if (event.wheelDelta < 0) {\n this.stepDown(event);\n }\n };\n\n handleChange = (event) => {\n const value = this.getFormattedValue(event.currentTarget.value);\n const { numberFormatter, value: prevValue } = this.asProps;\n\n if (value === '.' || value === '-') {\n this.handlers.displayValue(value);\n return false;\n }\n\n if (value.endsWith('-')) {\n return false;\n }\n\n if (value.endsWith('.')) {\n if (value.length > prevValue.length) {\n this.handlers.displayValue(numberFormatter.format(value) + this.separatorDecimal);\n return false;\n } else {\n this.handlers.value(value.slice(0, -1), event);\n return false;\n }\n }\n\n const digits = /^[0-9.-]+$/.test(value);\n\n if (digits || value === '') {\n this.handlers.value(value, event);\n }\n };\n\n handleKeyUp = (event) => {\n if (event.key === 'Shift') {\n this.cursorPosition = -1;\n }\n };\n\n handleKeyDown = (event) => {\n const element = event.currentTarget;\n const value = element.value;\n const length = value.length;\n const { displayValue } = this.asProps;\n\n if (event.key === '.' || event.key === ',') {\n // for the first decimal separator we should replace both ',' and '.' to '.' because of how js convert strings to numbers (with ',' it will be Number.NaN)\n if (value.indexOf(this.separatorDecimal) === -1 && event.key === ',') {\n event.currentTarget.value = value + '.';\n } else if (value.indexOf(this.separatorDecimal) !== -1) { // we could press decimal separator second time - prevent this '1.5.'\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n }\n\n if (event.key === 'Backspace' && value.endsWith(this.separatorDecimal)) {\n event.preventDefault();\n event.stopPropagation();\n this.handlers.displayValue(displayValue.slice(0, -1));\n return false;\n }\n\n if (\n element.selectionStart !== length &&\n (event.key === 'Backspace' ||\n event.key === this.separatorDecimal ||\n ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].includes(event.key))\n ) {\n const afterSelection = value.slice(element.selectionEnd);\n\n requestAnimationFrame(() => {\n const newValue = this.state.displayValue;\n const index = newValue.lastIndexOf(afterSelection);\n const selectionStart = index;\n const selectionEnd = index;\n\n element.setSelectionRange(selectionStart, selectionEnd);\n });\n }\n\n // For correct moving cursor with skip separatorThousands.\n // Examples:\n // - Press ArrowLeft: `12,3|4 -> 12|,34`\n // - Press ArrowRight: `1|,55 -> 1,5|5`\n const cursorIndex = 2;\n\n if (event.shiftKey && this.cursorPosition === -1) {\n this.cursorPosition = element.selectionStart;\n }\n\n switch (event.key) {\n case 'ArrowLeft': {\n event.preventDefault();\n this.moveSelectionLeft(element, cursorIndex);\n break;\n }\n case 'ArrowRight': {\n event.preventDefault();\n this.moveSelectionRight(element, cursorIndex);\n break;\n }\n case 'ArrowDown': {\n event.preventDefault();\n this.stepDown(event);\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n this.stepUp(event);\n break;\n }\n }\n };\n\n moveSelectionLeft = (element, cursorIndex) => {\n const value = element.value;\n const nextPosition = element.selectionStart - 1 >= 0 ? element.selectionStart - 1 : 0;\n\n const cursorPosition =\n value[element.selectionStart - cursorIndex] === this.separatorThousands\n ? element.selectionStart - cursorIndex\n : nextPosition;\n\n if (this.cursorPosition === -1) {\n // without shift\n element.setSelectionRange(cursorPosition, cursorPosition);\n } else {\n if (\n element.selectionStart <= this.cursorPosition &&\n element.selectionEnd === this.cursorPosition\n ) {\n element.setSelectionRange(cursorPosition, element.selectionEnd);\n } else {\n element.setSelectionRange(\n element.selectionStart,\n value[element.selectionEnd - cursorIndex] === this.separatorThousands\n ? element.selectionEnd - cursorIndex\n : element.selectionEnd - 1,\n );\n }\n }\n };\n\n moveSelectionRight = (element, cursorIndex) => {\n const value = element.value;\n const nextPosition = element.selectionEnd + 1;\n\n const cursorPosition =\n value[element.selectionEnd] === this.separatorThousands\n ? element.selectionEnd + cursorIndex\n : nextPosition;\n\n if (this.cursorPosition === -1) {\n // without shift\n element.setSelectionRange(cursorPosition, cursorPosition);\n } else {\n if (\n element.selectionEnd >= this.cursorPosition &&\n element.selectionStart === this.cursorPosition\n ) {\n element.setSelectionRange(element.selectionStart, cursorPosition);\n } else {\n element.setSelectionRange(\n value[element.selectionStart] === this.separatorThousands\n ? element.selectionStart + cursorIndex\n : element.selectionStart + 1,\n element.selectionEnd,\n );\n }\n }\n };\n\n handleClick = (event) => {\n const element = event.target;\n const value = element.value;\n\n if (value[element.selectionStart - 1] === this.separatorThousands) {\n element.setSelectionRange(element.selectionStart - 1, element.selectionEnd - 1);\n }\n };\n\n handleBlur = (event) => {\n this.cursorPosition = -1;\n this.handleValidation(event);\n };\n\n stepUp = (event) => {\n const { max = Number.MAX_SAFE_INTEGER, min, step, value } = this.asProps;\n\n let numberValue;\n\n // https://stackoverflow.com/questions/68010124/safari-number-input-stepup-stepdown-not-functioning-with-empty-value\n if (value === '') {\n numberValue = min ?? 0;\n } else {\n numberValue = Number.parseFloat(value);\n }\n\n if (!Number.isNaN(numberValue)) {\n const newValue = numberValue + step <= max ? numberValue + step : max;\n\n this.handlers.value(newValue.toString(), event);\n }\n };\n\n stepDown = (event) => {\n const { max, min = Number.MIN_SAFE_INTEGER, step, value } = this.asProps;\n\n let numberValue;\n\n if (value === '') {\n numberValue = max ?? 0;\n } else {\n numberValue = Number.parseFloat(value);\n }\n\n if (!Number.isNaN(numberValue)) {\n const newValue = numberValue - step >= min ? numberValue - step : min;\n\n this.handlers.value(newValue.toString(), event);\n }\n };\n\n render() {\n const SValue = Root;\n const { styles, min, max, step, forwardRef, inputRef, displayValue } = this.asProps;\n\n return sstyled(styles)(\n <>\n <SValue\n render={Input.Value}\n autoComplete='off'\n onBlur={this.handleValidation}\n use:onChange={this.handleChange}\n onKeyDown={this.handleKeyDown}\n onKeyUp={this.handleKeyUp}\n onClick={this.handleClick}\n use:ref={forkRef(this.valueInputRef, inputRef, forwardRef)}\n use:value={displayValue}\n inputMode={Number.isInteger(step) ? 'numeric' : 'decimal'}\n min={min}\n max={max}\n step={step}\n />\n </>,\n );\n }\n}\n\nfunction Controls(props) {\n const { Children, increment, decrement, size, styles, getI18nText } = props;\n const SControls = Root;\n const SUp = 'button';\n const SDown = 'button';\n\n return sstyled(styles)(\n <SControls render={Input.Addon} aria-hidden='true'>\n <SUp\n onClick={increment}\n tabIndex={-1}\n type='button'\n size={size}\n aria-label={getI18nText('increment')}\n >\n <IncrementIcon />\n </SUp>\n <SDown\n onClick={decrement}\n tabIndex={-1}\n type='button'\n size={size}\n aria-label={getI18nText('decrement')}\n >\n <DecrementIcon />\n </SDown>\n <Children />\n </SControls>,\n );\n}\nControls.style = style;\n\n/**\n * InputNumber\n *\n * {@link https://developer.semrush.com/intergalactic/components/input-number/input-number-api/|API} | {@link https://developer.semrush.com/intergalactic/components/input-number/input-number-code/|Examples}\n */\nexport default createComponent(InputNumber, {\n Value,\n Controls,\n Addon: Input.Addon,\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"InputNumber.js","names":["_core","require","_assignProps4","_i18nEnhance","_interopRequireDefault","_ref7","_input","_react","_buttons","_intergalacticDynamicLocales","style","sstyled","insert","parseValueWithMinMax","value","min","Number","MIN_SAFE_INTEGER","max","MAX_SAFE_INTEGER","Math","InputNumber","Component","constructor","args","_defineProperty2","default","React","createRef","event","inputRef","current","stepUp","stepDown","getValueProps","numberFormatter","Intl","NumberFormat","asProps","locale","maximumFractionDigits","increment","decrement","getControlsProps","getI18nText","render","_ref","_ref4","SInputNumber","Input","createElement","cn","assignProps","i18nEnhance","localizedMessages","size","i18n","Value","displayValue","replace","RegExp","separatorThousands","separatorDecimal","prevValue","prevDisplayValue","props","stringNumber","getFormattedValue","String","isNaN","parsedValue","test","int","decimal","split","format","step","state","valueParser","currentTarget","parseFloat","handlers","numberValue","rounded","round","abs","getDisplayValue","callAllEventHandlers","onWheel","handleWheel","target","valueInputRef","document","activeElement","preventDefault","deltaY","setState","endsWith","length","slice","digits","limitDecimals","key","cursorPosition","element","indexOf","stopPropagation","selectionStart","includes","afterSelection","selectionEnd","undefined","requestAnimationFrame","newValue","index","lastIndexOf","setSelectionRange","cursorIndex","shiftKey","moveSelectionLeft","moveSelectionRight","nextPosition","nextValue","uncontrolledProps","stepPrecision","_","decimals","toString","toFixed","dotIndex","toPrecision","componentDidMount","addEventListener","autoFocus","setTimeout","focus","componentDidUpdate","prevProps","prevState","componentWillUnmount","removeEventListener","_ref2","_ref5","SValue","styles","forwardRef","Fragment","handleValidation","handleChange","handleKeyDown","handleKeyUp","handleClick","forkRef","isInteger","defaultValue","defaultDisplayValue","Controls","_ref3","arguments[0]","_ref6","Children","SControls","Addon","SUp","SDown","IncrementIcon","DecrementIcon","_default","exports","createComponent"],"sources":["../../src/InputNumber.tsx"],"sourcesContent":["import type { Intergalactic } from '@semcore/core';\nimport { Component, createComponent, Root, sstyled } from '@semcore/core';\nimport { callAllEventHandlers } from '@semcore/core/lib/utils/assignProps';\nimport type { WithI18nEnhanceProps } from '@semcore/core/lib/utils/enhances/i18nEnhance';\nimport i18nEnhance from '@semcore/core/lib/utils/enhances/i18nEnhance';\nimport { forkRef } from '@semcore/core/lib/utils/ref';\nimport Input from '@semcore/input';\nimport React from 'react';\n\nimport { DecrementIcon, IncrementIcon } from './buttons';\nimport type { NSInputNumber } from './InputNumber.type';\nimport style from './style/input-number.shadow.css';\nimport { localizedMessages } from './translations/__intergalactic-dynamic-locales';\n\n/** Events that can trigger a value step (buttons, keyboard arrows, mouse wheel). */\ntype StepEvent =\n | React.MouseEvent\n | React.KeyboardEvent\n | WheelEvent;\n\n/**\n * The input DOM node whose native `stepUp`/`stepDown` methods are replaced at runtime\n * (see `Value.componentDidMount`) with event-aware versions.\n */\ntype InputElement = Omit<HTMLInputElement, 'stepUp' | 'stepDown'> & {\n stepUp: (event: StepEvent) => void;\n stepDown: (event: StepEvent) => void;\n};\n\nexport function parseValueWithMinMax(\n value: number,\n min = Number.MIN_SAFE_INTEGER,\n max = Number.MAX_SAFE_INTEGER,\n) {\n return Math.max(min, Math.min(max, value));\n}\n\nclass InputNumber extends Component<\n Intergalactic.InternalTypings.InferComponentProps<NSInputNumber.Component>,\n typeof InputNumber.enhance,\n {},\n WithI18nEnhanceProps,\n {},\n NSInputNumber.DefaultProps\n> {\n static displayName = 'InputNumber';\n static style = style;\n static enhance = [i18nEnhance(localizedMessages)] as const;\n static defaultProps = {\n size: 'm',\n i18n: localizedMessages,\n locale: 'en',\n } as const;\n\n inputRef = React.createRef<InputElement>();\n\n increment = (event: React.MouseEvent) => {\n (this.inputRef.current)?.stepUp?.(event);\n };\n\n decrement = (event: React.MouseEvent) => {\n (this.inputRef.current)?.stepDown?.(event);\n };\n\n getValueProps() {\n const numberFormatter = new Intl.NumberFormat(this.asProps.locale, {\n style: 'decimal',\n maximumFractionDigits: 100,\n });\n\n return {\n inputRef: this.inputRef,\n increment: this.increment,\n decrement: this.decrement,\n numberFormatter,\n };\n }\n\n getControlsProps() {\n const { getI18nText } = this.asProps;\n return {\n increment: this.increment,\n decrement: this.decrement,\n getI18nText,\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 Intergalactic.InternalTypings.InferChildComponentProps<NSInputNumber.Value.Component, typeof InputNumber, 'Value'>,\n [],\n NSInputNumber.Value.Handlers,\n {},\n NSInputNumber.Value.State,\n NSInputNumber.Value.DefaultProps\n> {\n static style = style;\n static defaultProps = {\n defaultValue: '',\n defaultDisplayValue: '',\n step: 1,\n } as const;\n\n state: NSInputNumber.Value.State = {\n displayValue: '',\n };\n\n valueInputRef = React.createRef<HTMLInputElement>();\n\n cursorPosition: number | null = -1;\n\n uncontrolledProps(): NSInputNumber.Value.Handlers {\n return {\n value: [\n null,\n (newValue) => {\n const { displayValue: prevDisplayValue } = this.state;\n const { value: prevValue } = this.asProps;\n\n const { parsedValue, displayValue } = this.valueParser(\n newValue ?? '',\n prevValue,\n prevDisplayValue,\n );\n\n this.setState({ displayValue });\n\n return parsedValue;\n },\n ],\n };\n }\n\n get separatorDecimal() {\n const { numberFormatter } = this.props;\n\n return numberFormatter.format(11.11).replace(/\\d/g, '');\n }\n\n get separatorThousands() {\n const { numberFormatter } = this.props;\n\n return numberFormatter.format(1111).replace(/\\d/g, '');\n }\n\n getFormattedValue = (value: string) => {\n return value\n .replace(new RegExp(`[${this.separatorThousands}]`, 'g'), '')\n .replace(this.separatorDecimal, '.');\n };\n\n valueParser = (\n value: typeof this.asProps['value'],\n prevValue: typeof this.asProps['value'],\n prevDisplayValue: NSInputNumber.Value.State['displayValue'],\n ) => {\n const { numberFormatter } = this.props;\n\n const stringNumber = this.getFormattedValue(String(value));\n\n if (Number.isNaN(Number(stringNumber))) {\n return {\n parsedValue: prevValue,\n displayValue: prevDisplayValue,\n };\n }\n\n let displayValue = '';\n\n if (/\\.[0-9]*0$/.test(stringNumber)) {\n const [int, decimal] = stringNumber.split(this.separatorDecimal);\n displayValue = numberFormatter.format(+int) + this.separatorDecimal + decimal;\n } else if (stringNumber !== '') {\n displayValue = numberFormatter.format(+stringNumber);\n }\n\n return {\n parsedValue: stringNumber,\n displayValue: displayValue,\n };\n };\n\n get stepPrecision() {\n const { step } = this.asProps;\n const [_, decimals] = step?.toString().split('.') ?? [];\n\n return decimals?.length ?? 0;\n }\n\n getDisplayValue(value: number): string {\n return value === 0 ? `${value}` : value.toFixed(this.stepPrecision);\n }\n\n limitDecimals(value: string) {\n const { stepPrecision } = this;\n if (stepPrecision === 0) return value;\n\n const dotIndex = value.indexOf('.');\n if (dotIndex === -1 || value.length - dotIndex - 1 <= stepPrecision) return value;\n\n return value.slice(0, dotIndex + 1 + stepPrecision);\n }\n\n round(value: number): number {\n const { stepPrecision } = this;\n\n return stepPrecision === 0\n ? value\n : Number(value.toPrecision(stepPrecision));\n }\n\n handleValidation = (event: React.FocusEvent<HTMLInputElement>) => {\n const { value, min, max, step } = this.asProps;\n const { displayValue } = this.state;\n const { parsedValue } = this.valueParser(event.currentTarget.value, value, displayValue);\n\n if (Number.isNaN(value) || Number.isNaN(Number.parseFloat(parsedValue))) {\n event.currentTarget.value = '';\n this.handlers.value('', event);\n } else {\n let numberValue = parseValueWithMinMax(Number.parseFloat(parsedValue), min, max);\n const rounded = this.round(numberValue % step);\n if (rounded !== 0) {\n if (rounded >= step / 2) {\n numberValue += step - rounded;\n } else if (Math.abs(rounded) < step) {\n numberValue -= rounded;\n }\n }\n\n this.handlers.value(this.getDisplayValue(numberValue), event);\n }\n };\n\n // https://stackoverflow.com/questions/57358640/cancel-wheel-event-with-e-preventdefault-in-react-event-bubbling\n componentDidMount() {\n this.valueInputRef.current?.addEventListener('wheel', this.onWheel);\n\n const { inputRef, value, autoFocus } = this.asProps;\n\n if (autoFocus) {\n setTimeout(() => {\n this.valueInputRef.current?.focus();\n });\n }\n\n if (inputRef.current) {\n inputRef.current.stepUp = this.stepUp;\n inputRef.current.stepDown = this.stepDown;\n }\n\n if (value !== '') {\n const { displayValue } = this.valueParser(value, '', '');\n this.setState({ displayValue });\n }\n }\n\n componentDidUpdate(prevProps: typeof this.asProps, prevState: typeof this.state) {\n if (prevProps.value !== this.props.value) {\n const { displayValue } = this.valueParser(\n this.props.value ?? '',\n prevProps.value,\n prevState.displayValue,\n );\n this.setState({ displayValue });\n }\n }\n\n componentWillUnmount() {\n this.valueInputRef.current?.removeEventListener('wheel', this.onWheel);\n }\n\n onWheel = (event: WheelEvent) => {\n callAllEventHandlers(this.asProps.onWheel, this.handleWheel)(event);\n };\n\n handleWheel = (event: WheelEvent) => {\n if (event.target !== this.valueInputRef.current) return;\n if (document.activeElement !== this.valueInputRef.current) return;\n event.preventDefault();\n if (event.deltaY < 0) {\n this.stepUp(event);\n } else if (event.deltaY > 0) {\n this.stepDown(event);\n }\n };\n\n handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const value = this.getFormattedValue(event.currentTarget.value);\n const { numberFormatter, value: prevValue } = this.asProps;\n\n if (value === '.' || value === '-') {\n this.setState({ displayValue: value });\n return false;\n }\n\n if (value.endsWith('-')) {\n return false;\n }\n\n if (value.endsWith('.')) {\n if (value.length > prevValue.length) {\n this.setState({ displayValue: numberFormatter.format(value as `${number}`) + this.separatorDecimal });\n return false;\n } else {\n this.handlers.value(value.slice(0, -1), event);\n return false;\n }\n }\n\n const digits = /^[0-9.-]+$/.test(value);\n\n if (digits || value === '') {\n this.handlers.value(this.limitDecimals(value), event);\n }\n };\n\n handleKeyUp = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Shift') {\n this.cursorPosition = -1;\n }\n };\n\n handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const element = event.currentTarget;\n const value = element.value;\n const length = value.length;\n const { displayValue } = this.state;\n\n if (event.key === '.' || event.key === ',') {\n // for the first decimal separator we should replace both ',' and '.' to '.' because of how js convert strings to numbers (with ',' it will be Number.NaN)\n if (value.indexOf(this.separatorDecimal) === -1 && event.key === ',') {\n event.currentTarget.value = value + '.';\n } else if (value.indexOf(this.separatorDecimal) !== -1) { // we could press decimal separator second time - prevent this '1.5.'\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n }\n\n if (event.key === 'Backspace' && value.endsWith(this.separatorDecimal)) {\n event.preventDefault();\n event.stopPropagation();\n this.setState({ displayValue: displayValue?.slice(0, -1) });\n return false;\n }\n\n if (\n element.selectionStart !== length &&\n (event.key === 'Backspace' ||\n event.key === this.separatorDecimal ||\n ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].includes(event.key))\n ) {\n const afterSelection = value.slice(element.selectionEnd ?? undefined);\n\n requestAnimationFrame(() => {\n const newValue = this.state.displayValue;\n const index = newValue.lastIndexOf(afterSelection);\n const selectionStart = index;\n const selectionEnd = index;\n\n element.setSelectionRange(selectionStart, selectionEnd);\n });\n }\n\n // For correct moving cursor with skip separatorThousands.\n // Examples:\n // - Press ArrowLeft: `12,3|4 -> 12|,34`\n // - Press ArrowRight: `1|,55 -> 1,5|5`\n const cursorIndex = 2;\n\n if (event.shiftKey && this.cursorPosition === -1) {\n this.cursorPosition = element.selectionStart;\n }\n\n switch (event.key) {\n case 'ArrowLeft': {\n event.preventDefault();\n this.moveSelectionLeft(element, cursorIndex);\n break;\n }\n case 'ArrowRight': {\n event.preventDefault();\n this.moveSelectionRight(element, cursorIndex);\n break;\n }\n case 'ArrowDown': {\n event.preventDefault();\n this.stepDown(event);\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n this.stepUp(event);\n break;\n }\n }\n };\n\n moveSelectionLeft = (element: React.KeyboardEvent<HTMLInputElement>['currentTarget'], cursorIndex: number) => {\n if (element.selectionStart === null) return;\n\n const value = element.value;\n\n const nextPosition = element.selectionStart - 1 >= 0 ? element.selectionStart - 1 : 0;\n\n const cursorPosition =\n value[element.selectionStart - cursorIndex] === this.separatorThousands\n ? element.selectionStart - cursorIndex\n : nextPosition;\n\n if (this.cursorPosition === -1) {\n // without shift\n element.setSelectionRange(cursorPosition, cursorPosition);\n } else {\n if (\n this.cursorPosition &&\n element.selectionStart <= this.cursorPosition &&\n element.selectionEnd === this.cursorPosition\n ) {\n element.setSelectionRange(cursorPosition, element.selectionEnd);\n } else if (element.selectionEnd !== null) {\n element.setSelectionRange(\n element.selectionStart,\n value[element.selectionEnd - cursorIndex] === this.separatorThousands\n ? element.selectionEnd - cursorIndex\n : element.selectionEnd - 1,\n );\n }\n }\n };\n\n moveSelectionRight = (element: React.KeyboardEvent<HTMLInputElement>['currentTarget'], cursorIndex: number) => {\n if (element.selectionEnd === null) return;\n\n const value = element.value;\n const nextPosition = element.selectionEnd + 1;\n\n const cursorPosition =\n value[element.selectionEnd] === this.separatorThousands\n ? element.selectionEnd + cursorIndex\n : nextPosition;\n\n if (this.cursorPosition === -1) {\n // without shift\n element.setSelectionRange(cursorPosition, cursorPosition);\n } else {\n if (\n this.cursorPosition &&\n element.selectionEnd >= this.cursorPosition &&\n element.selectionStart === this.cursorPosition\n ) {\n element.setSelectionRange(element.selectionStart, cursorPosition);\n } else if (element.selectionStart !== null) {\n element.setSelectionRange(\n value[element.selectionStart] === this.separatorThousands\n ? element.selectionStart + cursorIndex\n : element.selectionStart + 1,\n element.selectionEnd,\n );\n }\n }\n };\n\n handleClick = (event: React.MouseEvent<HTMLInputElement>) => {\n const element = event.currentTarget;\n const value = element.value;\n\n if (element.selectionStart !== null && value[element.selectionStart - 1] === this.separatorThousands) {\n element.setSelectionRange(element.selectionStart - 1, element.selectionEnd! - 1);\n }\n };\n\n stepUp = (event: StepEvent) => {\n const { max = Number.MAX_SAFE_INTEGER, min, step, value } = this.asProps;\n\n let numberValue;\n\n // https://stackoverflow.com/questions/68010124/safari-number-input-stepup-stepdown-not-functioning-with-empty-value\n if (value === '') {\n numberValue = min ?? 0;\n } else {\n numberValue = Number.parseFloat(value);\n }\n\n if (Number.isNaN(numberValue)) return;\n\n const nextValue = Math.min(numberValue + step, max);\n\n this.handlers.value(this.getDisplayValue(nextValue), event);\n };\n\n stepDown = (event: StepEvent) => {\n const { max, min = Number.MIN_SAFE_INTEGER, step, value } = this.asProps;\n\n let numberValue;\n\n if (value === '') {\n numberValue = max ?? 0;\n } else {\n numberValue = Number.parseFloat(value);\n }\n\n if (Number.isNaN(numberValue)) return;\n\n const nextValue = Math.max(numberValue - step, min);\n\n this.handlers.value(this.getDisplayValue(nextValue), event);\n };\n\n render() {\n const SValue = Root;\n const { styles, min, max, step, forwardRef, inputRef } = this.asProps;\n const { displayValue } = this.state;\n\n return sstyled(styles)(\n <>\n <SValue\n render={Input.Value}\n autoComplete='off'\n onBlur={this.handleValidation}\n use:onChange={this.handleChange}\n onKeyDown={this.handleKeyDown}\n onKeyUp={this.handleKeyUp}\n onClick={this.handleClick}\n use:ref={forkRef(this.valueInputRef, inputRef, forwardRef ?? null)}\n use:value={displayValue}\n inputMode={Number.isInteger(step) ? 'numeric' : 'decimal'}\n min={min}\n max={max}\n step={step}\n />\n </>,\n );\n }\n}\n\nfunction Controls(\n props: Intergalactic.InternalTypings.InferChildComponentProps<NSInputNumber.Controls.Component, typeof InputNumber, 'Controls'>,\n) {\n const { Children, increment, decrement, styles, getI18nText } = props;\n const SControls = Root;\n const SUp = 'button';\n const SDown = 'button';\n\n return sstyled(styles)(\n <SControls render={Input.Addon} aria-hidden='true'>\n <SUp\n onClick={increment}\n tabIndex={-1}\n type='button'\n aria-label={getI18nText('increment')}\n >\n <IncrementIcon />\n </SUp>\n <SDown\n onClick={decrement}\n tabIndex={-1}\n type='button'\n aria-label={getI18nText('decrement')}\n >\n <DecrementIcon />\n </SDown>\n <Children />\n </SControls>,\n );\n}\nControls.style = style;\n\n/**\n * InputNumber\n *\n * {@link https://developer.semrush.com/intergalactic/components/input-number/input-number-api/|API} | {@link https://developer.semrush.com/intergalactic/components/input-number/input-number-code/|Examples}\n */\nexport default createComponent<\n NSInputNumber.Component,\n typeof InputNumber\n>(InputNumber, {\n Value,\n Controls,\n Addon: Input.Addon,\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputNumber.type.js","names":[],"sources":["../../src/InputNumber.type.ts"],"sourcesContent":["import type { Intergalactic, PropGetterFn } from '@semcore/core';\nimport type { NSInput } from '@semcore/input';\nimport type React from 'react';\n\nimport type { LocalizedMessages } from './translations/__intergalactic-dynamic-locales';\n\ndeclare namespace NSInputNumber {\n type Value = string;\n type Size = 'm' | 'l';\n type Props = NSInput.Props & {\n /** Input size\n * @default m\n * */\n size?: NSInputNumber.Size;\n /**\n * Locale value\n */\n locale?: string;\n };\n type DefaultProps = {\n size: 'm';\n i18n: LocalizedMessages;\n locale: 'en';\n };\n type Ctx = {\n getValueProps: PropGetterFn;\n getControlsProps: PropGetterFn;\n getAddonProps: PropGetterFn;\n };\n\n namespace Value {\n type Props = NSInput.Value.Props & {\n /** Minimum value\n * @default Number.MIN_SAFE_INTEGER\n */\n min?: number;\n /** Maximum value\n * @default Number.MAX_SAFE_INTEGER\n */\n max?: number;\n /** Value change step\n * @default 1\n */\n step?: number;\n /** Numeric value */\n value?: NSInputNumber.Value;\n /** Called when the input value changes, it returns its current value in numeric format */\n onChange?: (value: NSInputNumber.Value, event?: React.SyntheticEvent<HTMLInputElement>) => void;\n };\n type DefaultProps = {\n defaultValue: '';\n step: 1;\n };\n type State = {\n displayValue: NSInputNumber.Value;\n };\n type Handlers = {\n value: [\n null,\n (value: Props['value'], event: React.SyntheticEvent | WheelEvent) => void,\n ];\n };\n\n type Component = Intergalactic.Component<'input', Props>;\n }\n\n namespace Controls {\n type Props = NSInput.Addon.Props & {\n /** Always displays controls (steppers)\n * @default false\n */\n showControls?: boolean;\n };\n\n type Component = Intergalactic.Component<'div', Props>;\n }\n\n namespace Addon {\n type Component = Intergalactic.Component<'div', NSInput.Addon.Props>;\n }\n\n type Component = Intergalactic.Component<'div', Props, Ctx> & {\n Value: Value.Component;\n Controls: Controls.Component;\n Addon: Addon.Component;\n };\n}\n\n/** @deprecated It will be removed in v18. */\nexport type InputNumberValue = NSInputNumber.Value;\n/** @deprecated It will be removed in v18. */\nexport type InputNumberSize = NSInputNumber.Size;\n/** @deprecated It will be removed in v18. */\nexport type InputNumberProps = NSInputNumber.Props;\n/** @deprecated It will be removed in v18. */\nexport type InputNumberValueProps = NSInputNumber.Value.Props;\n/** @deprecated It will be removed in v18. */\nexport type InputNumberControlsProps = NSInputNumber.Controls.Props;\n/** @deprecated It will be removed in v18. */\nexport type InputNumberCtx = NSInputNumber.Ctx;\n\nexport type { NSInputNumber };\n"],"mappings":"","ignoreList":[]}
|
package/lib/cjs/buttons.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buttons.js","names":["_react","_interopRequireDefault","require","IncrementIcon","default","createElement","fill","width","height","viewBox","d","exports","DecrementIcon"],"sources":["../../src/buttons.
|
|
1
|
+
{"version":3,"file":"buttons.js","names":["_react","_interopRequireDefault","require","IncrementIcon","default","createElement","fill","width","height","viewBox","d","exports","DecrementIcon"],"sources":["../../src/buttons.tsx"],"sourcesContent":["import React from 'react';\n\nexport const IncrementIcon = () => (\n <svg fill='currentColor' width='10' height='5' viewBox='0 0 10 5'>\n <path d='M0,5l5,-5l5,5Z' />\n </svg>\n);\n\nexport const DecrementIcon = () => (\n <svg fill='currentColor' width='10' height='5' viewBox='0 0 10 5'>\n <path d='M0,0l10,0l-5,5Z' />\n </svg>\n);\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEO,MAAMC,aAAa,GAAGA,CAAA,kBAC3BH,MAAA,CAAAI,OAAA,CAAAC,aAAA;EAAKC,IAAI,EAAC,cAAc;EAACC,KAAK,EAAC,IAAI;EAACC,MAAM,EAAC,GAAG;EAACC,OAAO,EAAC;AAAU,gBAC/DT,MAAA,CAAAI,OAAA,CAAAC,aAAA;EAAMK,CAAC,EAAC;AAAgB,CAAE,CACvB,CACN;AAACC,OAAA,CAAAR,aAAA,GAAAA,aAAA;AAEK,MAAMS,aAAa,GAAGA,CAAA,kBAC3BZ,MAAA,CAAAI,OAAA,CAAAC,aAAA;EAAKC,IAAI,EAAC,cAAc;EAACC,KAAK,EAAC,IAAI;EAACC,MAAM,EAAC,GAAG;EAACC,OAAO,EAAC;AAAU,gBAC/DT,MAAA,CAAAI,OAAA,CAAAC,aAAA;EAAMK,CAAC,EAAC;AAAiB,CAAE,CACxB,CACN;AAACC,OAAA,CAAAC,aAAA,GAAAA,aAAA","ignoreList":[]}
|
package/lib/cjs/index.js
CHANGED
|
@@ -4,6 +4,11 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
+
var _exportNames = {
|
|
8
|
+
parseValueWithMinMax: true,
|
|
9
|
+
IncrementIcon: true,
|
|
10
|
+
DecrementIcon: true
|
|
11
|
+
};
|
|
7
12
|
Object.defineProperty(exports, "DecrementIcon", {
|
|
8
13
|
enumerable: true,
|
|
9
14
|
get: function () {
|
|
@@ -30,4 +35,16 @@ Object.defineProperty(exports, "parseValueWithMinMax", {
|
|
|
30
35
|
});
|
|
31
36
|
var _InputNumber = _interopRequireWildcard(require("./InputNumber"));
|
|
32
37
|
var _buttons = require("./buttons");
|
|
38
|
+
var _InputNumber2 = require("./InputNumber.type");
|
|
39
|
+
Object.keys(_InputNumber2).forEach(function (key) {
|
|
40
|
+
if (key === "default" || key === "__esModule") return;
|
|
41
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
42
|
+
if (key in exports && exports[key] === _InputNumber2[key]) return;
|
|
43
|
+
Object.defineProperty(exports, key, {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
get: function () {
|
|
46
|
+
return _InputNumber2[key];
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
33
50
|
//# sourceMappingURL=index.js.map
|