File tree 2 files changed +38
-3
lines changed 2 files changed +38
-3
lines changed Original file line number Diff line number Diff line change @@ -224,15 +224,26 @@ function calculateNewValue(
224
224
isElementType ( node , 'input' , { type : 'number' } as const ) &&
225
225
inputType === 'changeNumberInput'
226
226
) {
227
- const reachedMax = value === node . max
228
227
const step = node . step ? Number ( node . step ) : 1
228
+
229
+ const reachedMax = value === node . max
229
230
if ( inputData === 'ArrowUp' && ! reachedMax ) {
230
- newValue = ( Number ( value ) + step ) . toString ( )
231
+ const exceedsMax = Number ( value ) + step > Number ( node . max )
232
+ if ( exceedsMax && ! ! node . max ) {
233
+ newValue = node . max
234
+ } else {
235
+ newValue = ( Number ( value ) + step ) . toString ( )
236
+ }
231
237
}
232
238
233
239
const reachedMin = value === node . min
234
240
if ( inputData === 'ArrowDown' && ! reachedMin ) {
235
- newValue = ( Number ( value ) - step ) . toString ( )
241
+ const exceedsMin = Number ( value ) - step < Number ( node . min )
242
+ if ( exceedsMin ) {
243
+ newValue = node . min
244
+ } else {
245
+ newValue = ( Number ( value ) - step ) . toString ( )
246
+ }
236
247
}
237
248
}
238
249
Original file line number Diff line number Diff line change @@ -455,3 +455,27 @@ test("decrements number input's value by the defined steps when pressing the arr
455
455
456
456
expect ( element ) . toHaveValue ( 0 )
457
457
} )
458
+
459
+ test ( 'decrements only to the min value when pressing the arrow down key and steps are too large' , async ( ) => {
460
+ const { element} = render < HTMLInputElement > (
461
+ `<input value="5" type="number" min="0" step="10"/>` ,
462
+ )
463
+
464
+ const instance = setupInstance ( )
465
+
466
+ instance . dispatchUIEvent ( element , 'keydown' , { key : 'ArrowDown' } )
467
+
468
+ expect ( element ) . toHaveValue ( 0 )
469
+ } )
470
+
471
+ test ( 'increments only to the max value when pressing the arrow up key and steps are too large' , async ( ) => {
472
+ const { element} = render < HTMLInputElement > (
473
+ `<input value="5" type="number" max="10" step="10"/>` ,
474
+ )
475
+
476
+ const instance = setupInstance ( )
477
+
478
+ instance . dispatchUIEvent ( element , 'keydown' , { key : 'ArrowUp' } )
479
+
480
+ expect ( element ) . toHaveValue ( 10 )
481
+ } )
You can’t perform that action at this time.
0 commit comments