From e88d02d312403483864f4cbe9f81c405a3c66167 Mon Sep 17 00:00:00 2001 From: Clayton Date: Wed, 11 Feb 2026 04:50:42 -0600 Subject: [PATCH 1/2] fix: enable spacebar to be typed in opened mode --- src/BaseSelect/index.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/BaseSelect/index.tsx b/src/BaseSelect/index.tsx index 2b56b4dc..4c5b82e2 100644 --- a/src/BaseSelect/index.tsx +++ b/src/BaseSelect/index.tsx @@ -468,7 +468,6 @@ const BaseSelect = React.forwardRef((props, ref) const isEnterKey = key === 'Enter'; const isSpaceKey = key === ' '; - // Enter or Space opens dropdown (ARIA combobox: spacebar should open) if (isEnterKey || isSpaceKey) { // Do not submit form when type in the input; prevent Space from scrolling page const isCombobox = mode === 'combobox'; @@ -479,6 +478,10 @@ const BaseSelect = React.forwardRef((props, ref) // We only manage open state here, close logic should handle by list component if (!mergedOpen) { + // Do not submit form when type in the input + if (mode !== 'combobox') { + event.preventDefault(); + } triggerOpen(true); } } From 942a3931305c885cfe46c2e89e77dc04f05c2d39 Mon Sep 17 00:00:00 2001 From: Clayton Date: Tue, 17 Feb 2026 22:20:42 -0600 Subject: [PATCH 2/2] fix: improve test --- src/BaseSelect/index.tsx | 5 +--- tests/Select.test.tsx | 63 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 4 deletions(-) diff --git a/src/BaseSelect/index.tsx b/src/BaseSelect/index.tsx index 4c5b82e2..2b56b4dc 100644 --- a/src/BaseSelect/index.tsx +++ b/src/BaseSelect/index.tsx @@ -468,6 +468,7 @@ const BaseSelect = React.forwardRef((props, ref) const isEnterKey = key === 'Enter'; const isSpaceKey = key === ' '; + // Enter or Space opens dropdown (ARIA combobox: spacebar should open) if (isEnterKey || isSpaceKey) { // Do not submit form when type in the input; prevent Space from scrolling page const isCombobox = mode === 'combobox'; @@ -478,10 +479,6 @@ const BaseSelect = React.forwardRef((props, ref) // We only manage open state here, close logic should handle by list component if (!mergedOpen) { - // Do not submit form when type in the input - if (mode !== 'combobox') { - event.preventDefault(); - } triggerOpen(true); } } diff --git a/tests/Select.test.tsx b/tests/Select.test.tsx index 3cdf6128..320c00d4 100644 --- a/tests/Select.test.tsx +++ b/tests/Select.test.tsx @@ -3007,6 +3007,27 @@ describe('Select.Basic', () => { expect(preventDefaultSpy).not.toHaveBeenCalled(); }); + it('should allow typing space when search has value (React state updated via fireEvent)', () => { + const { container } = render( + ); @@ -3045,4 +3066,46 @@ describe('Select.Basic', () => { expect(preventDefaultSpy).not.toHaveBeenCalled(); }); }); + + describe('Enter key behavior (preventDefault)', () => { + it('should call preventDefault on Enter when not combobox to avoid form submit', () => { + const { container } = render( + , + ); + + const input = container.querySelector('input'); + input.focus(); + + const keyDownEvent = new KeyboardEvent('keydown', { + key: 'Enter', + code: 'Enter', + bubbles: true, + }); + const preventDefaultSpy = jest.spyOn(keyDownEvent, 'preventDefault'); + + input.dispatchEvent(keyDownEvent); + + expect(preventDefaultSpy).not.toHaveBeenCalled(); + }); + }); });