From 81d6740980c9d26a850b538b3864b9584f305b36 Mon Sep 17 00:00:00 2001 From: nayounsang Date: Mon, 19 May 2025 17:19:09 +0900 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20truncate=20values=20=E2=80=8B?= =?UTF-8?q?=E2=80=8Bthat=20exceed=20the=20length=20when=20pasting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../one-time-password-field/src/one-time-password-field.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/react/one-time-password-field/src/one-time-password-field.tsx b/packages/react/one-time-password-field/src/one-time-password-field.tsx index f585b61d5..8328b98fc 100644 --- a/packages/react/one-time-password-field/src/one-time-password-field.tsx +++ b/packages/react/one-time-password-field/src/one-time-password-field.tsx @@ -351,11 +351,13 @@ const OneTimePasswordField = React.forwardRef setValue(value)); focusInput(collection.at(value.length - 1)?.element); return; From 451ac97118707554531a1b45cd1c254c7a8d4f10 Mon Sep 17 00:00:00 2001 From: nayounsang Date: Mon, 19 May 2025 17:28:49 +0900 Subject: [PATCH 2/3] chore: add changeset --- .changeset/famous-icons-arrive.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/famous-icons-arrive.md diff --git a/.changeset/famous-icons-arrive.md b/.changeset/famous-icons-arrive.md new file mode 100644 index 000000000..13ce33db9 --- /dev/null +++ b/.changeset/famous-icons-arrive.md @@ -0,0 +1,5 @@ +--- +'@radix-ui/react-one-time-password-field': patch +--- + +truncate values ​​that exceed the length when pasting From 6981e19b0b7271e8ee5d444ecb7c99ebd4befe33 Mon Sep 17 00:00:00 2001 From: nayounsang Date: Fri, 23 May 2025 16:35:06 +0900 Subject: [PATCH 3/3] chore: add todo test --- .../src/one-time-password-field.test.tsx | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/react/one-time-password-field/src/one-time-password-field.test.tsx b/packages/react/one-time-password-field/src/one-time-password-field.test.tsx index 77c5badcb..7337c6c9b 100644 --- a/packages/react/one-time-password-field/src/one-time-password-field.test.tsx +++ b/packages/react/one-time-password-field/src/one-time-password-field.test.tsx @@ -64,6 +64,17 @@ describe('given a default OneTimePasswordField', () => { await act(async () => await user.paste('1,2,3,4,5,6')); expect(getInputValues(inputs)).toBe('1,2,3,4,5,6'); }); + + // TODO: userEvent paste not behaving as expected. Debug and unskip. + it.todo('should truncate pasted characters to the number of inputs', async () => { + const inputs = screen.getAllByRole('textbox', { + hidden: false, + }); + const firstInput = inputs[0]!; + fireEvent.click(firstInput); + await act(async () => await user.paste('123456789')); + expect(getInputValues(inputs)).toBe('1,2,3,4,5,6'); + }); }); function getInputValues(inputs: HTMLInputElement[]) {