From 3853ee7dd5885068eaf913294b16a5332b8d333c Mon Sep 17 00:00:00 2001 From: Robert Snow Date: Fri, 24 Oct 2025 09:22:49 +1100 Subject: [PATCH 1/2] fix: NumberParser useGrouping false returned wrong value --- packages/@internationalized/number/src/NumberParser.ts | 3 ++- packages/@internationalized/number/test/NumberParser.test.js | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/@internationalized/number/src/NumberParser.ts b/packages/@internationalized/number/src/NumberParser.ts index ae6448f027d..afbf40ef548 100644 --- a/packages/@internationalized/number/src/NumberParser.ts +++ b/packages/@internationalized/number/src/NumberParser.ts @@ -282,7 +282,8 @@ function getSymbols(locale: string, formatter: Intl.NumberFormat, intlOptions: I maximumSignificantDigits: 21, roundingIncrement: 1, roundingPriority: 'auto', - roundingMode: 'halfExpand' + roundingMode: 'halfExpand', + useGrouping: true }); // Note: some locale's don't add a group symbol until there is a ten thousands place let allParts = symbolFormatter.formatToParts(-10000.111); diff --git a/packages/@internationalized/number/test/NumberParser.test.js b/packages/@internationalized/number/test/NumberParser.test.js index a9266d997cf..a279a08b98e 100644 --- a/packages/@internationalized/number/test/NumberParser.test.js +++ b/packages/@internationalized/number/test/NumberParser.test.js @@ -56,6 +56,11 @@ describe('NumberParser', function () { expect(new NumberParser('en-US', {style: 'decimal'}).parse('1abc')).toBe(NaN); }); + it('should return NaN for invalid grouping', function () { + expect(new NumberParser('en-US', {useGrouping: false}).parse('1234,7')).toBe(12347); + expect(new NumberParser('de-DE', {useGrouping: false}).parse('1234.7')).toBe(12347); + }); + describe('currency', function () { it('should parse without the currency symbol', function () { expect(new NumberParser('en-US', {currency: 'USD', style: 'currency'}).parse('10.50')).toBe(10.5); From 97d82db6be7850eec2c52cf265e4accc2fc734a4 Mon Sep 17 00:00:00 2001 From: Robert Snow Date: Fri, 24 Oct 2025 09:28:22 +1100 Subject: [PATCH 2/2] add typing and pasting test --- .../test/NumberField.test.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/react-aria-components/test/NumberField.test.js b/packages/react-aria-components/test/NumberField.test.js index d29514fe54c..c99c99c824d 100644 --- a/packages/react-aria-components/test/NumberField.test.js +++ b/packages/react-aria-components/test/NumberField.test.js @@ -189,4 +189,19 @@ describe('NumberField', () => { expect(input).not.toHaveAttribute('aria-describedby'); expect(numberfield).not.toHaveAttribute('data-invalid'); }); + + it('should not type the grouping characters when useGrouping is false', async () => { + let {getByRole} = render(); + let input = getByRole('textbox'); + + await user.keyboard('102,4'); + expect(input).toHaveAttribute('value', '1024'); + + await user.clear(input); + expect(input).toHaveAttribute('value', ''); + + await user.paste('102,4'); + await user.tab(); + expect(input).toHaveAttribute('value', '1024'); + }); });