@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 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
@@ -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__*/".___SValue_9qcwr_gg_:focus~.___SControls_9qcwr_gg_{display:flex}.___SControls_9qcwr_gg_{display:none;flex-flow:column;justify-content:center;height:100%;box-sizing:border-box}.___SControls_9qcwr_gg_.__showControls_9qcwr_gg_{display:flex}.___SDown_9qcwr_gg_,.___SUp_9qcwr_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_9qcwr_gg_,.___SUp_9qcwr_gg_{color:var(--intergalactic-icon-secondary-neutral,oklch(.104 .023 162.3/.385))}}.___SDown_9qcwr_gg_:focus,.___SUp_9qcwr_gg_:focus{outline:none}@media (hover:hover){.___SDown_9qcwr_gg_:hover,.___SUp_9qcwr_gg_:hover{color:var(--intergalactic-icon-secondary-neutral-hover-active,#0005026e)}@media (color-gamut:p3){.___SDown_9qcwr_gg_:hover,.___SUp_9qcwr_gg_:hover{color:var(--intergalactic-icon-secondary-neutral-hover-active,oklch(.1 .023 159.1/.433))}}}.___SUp_9qcwr_gg_{padding-bottom:1px}.___SDown_9qcwr_gg_{padding-top:1px}.___SValue_9qcwr_gg_::-webkit-inner-spin-button,.___SValue_9qcwr_gg_::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.___SValue_9qcwr_gg_._type_number_9qcwr_gg_{-moz-appearance:textfield}.___SValue_9qcwr_gg_.__disabled_9qcwr_gg_~.___SControls_9qcwr_gg_{opacity:var(--intergalactic-disabled-opacity,.4);cursor:default;pointer-events:none}.___SValueHidden_9qcwr_gg_{position:absolute;top:0;width:1px;height:1px;padding:0;overflow:hidden}", /*__inner_css_end__*/"9qcwr_gg_"),
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": "___SValue_9qcwr_gg_",
23
- "__SControls": "___SControls_9qcwr_gg_",
24
- "_showControls": "__showControls_9qcwr_gg_",
25
- "__SUp": "___SUp_9qcwr_gg_",
26
- "__SDown": "___SDown_9qcwr_gg_",
27
- "_disabled": "__disabled_9qcwr_gg_",
28
- "__SValueHidden": "___SValueHidden_9qcwr_gg_",
29
- "_type_number": "_type_number_9qcwr_gg_"
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, 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
- const numberValueRounded = Number(numberValue.toFixed(roundCoefficient));
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.wheelDelta > 0) {
161
+ if (event.deltaY < 0) {
153
162
  this.stepUp(event);
154
- } else if (event.wheelDelta < 0) {
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.handlers.displayValue(value);
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.handlers.displayValue(numberFormatter.format(value) + this.separatorDecimal);
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.asProps;
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.handlers.displayValue(displayValue.slice(0, -1));
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.target;
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 (!Number.isNaN(numberValue)) {
317
- const newValue = numberValue + step <= max ? numberValue + step : max;
318
- this.handlers.value(newValue.toString(), event);
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 (!Number.isNaN(numberValue)) {
335
- const newValue = numberValue - step >= min ? numberValue - step : min;
336
- this.handlers.value(newValue.toString(), event);
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.handlers.displayValue(displayValue);
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
- round(value, step) {
370
- const countDecimals = Math.floor(step) === step ? 0 : step.toString().split('.')[1].length || 0;
371
- return countDecimals === 0 ? Number.parseFloat(value) : Number.parseFloat(value).toPrecision(countDecimals);
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.handlers.displayValue(displayValue);
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, prevProps.displayValue);
402
- this.handlers.displayValue(displayValue);
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,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=InputNumber.type.js.map
@@ -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":[]}
@@ -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.jsx"],"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);\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;AACK,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":[]}
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