diff --git a/packages/number-field/src/NumberField.ts b/packages/number-field/src/NumberField.ts index 375efaf430..172ee802b9 100644 --- a/packages/number-field/src/NumberField.ts +++ b/packages/number-field/src/NumberField.ts @@ -473,6 +473,8 @@ export class NumberField extends TextfieldBase { } private validateInput(value: number): number { + const signMultiplier = value < 0 ? -1 : 1; // 'signMultiplier' adjusts 'value' for 'validateInput' and reverts it before returning. + value *= signMultiplier; if (typeof this.min !== 'undefined') { value = Math.max(this.min, value); } @@ -498,6 +500,7 @@ export class NumberField extends TextfieldBase { } } } + value *= signMultiplier; return value; } diff --git a/packages/number-field/test/number-field.test.ts b/packages/number-field/test/number-field.test.ts index d21e8df5fc..c7d3a7c94e 100644 --- a/packages/number-field/test/number-field.test.ts +++ b/packages/number-field/test/number-field.test.ts @@ -128,6 +128,20 @@ describe('NumberField', () => { expect(el.formattedValue).to.equal('5'); expect(el.valueAsString).to.equal('5'); }); + + it('supports both positive and negative decimal values', async () => { + const el = await getElFrom( + Default({ + step: 0.001, + min: -10, + max: 10, + value: -2.4, + }) + ); + el.size = 'xl'; + expect(el.value).to.equal(-2.4); + expect(el.valueAsString).to.equal('-2.4'); + }); }); describe('Increments', () => { let el: NumberField;