From 522369ca3d305971ac3840c55d7bdf3b94d4834d Mon Sep 17 00:00:00 2001 From: David Rios Date: Fri, 24 Jul 2026 10:41:38 -0400 Subject: [PATCH 1/2] fix(apollo-wind): suppress native search clear button to avoid duplicate in Search MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Search component sets type="search" on the input, so Chromium/WebKit renders a native ::-webkit-search-cancel-button in addition to the component's own InputGroupButton clear control — two clear buttons whenever the field has a value. Hide the native pseudo-elements so only the styled button shows, while keeping type="search" semantics. --- packages/apollo-wind/src/components/ui/search.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/apollo-wind/src/components/ui/search.tsx b/packages/apollo-wind/src/components/ui/search.tsx index b31408587..06329b4b7 100644 --- a/packages/apollo-wind/src/components/ui/search.tsx +++ b/packages/apollo-wind/src/components/ui/search.tsx @@ -45,7 +45,10 @@ const Search = React.forwardRef( onChange?.(e.target.value)} {...props} From 95195c0197d8e3c3692fdab3b0ea4d593a99eff5 Mon Sep 17 00:00:00 2001 From: David Rios Date: Fri, 24 Jul 2026 10:48:16 -0400 Subject: [PATCH 2/2] test(apollo-wind): assert Search keeps native-clear-button suppression classes Regression guard so a future refactor can't drop the ::-webkit-search-cancel-button / ::-webkit-search-decoration suppression and reintroduce the duplicate clear button. --- packages/apollo-wind/src/components/ui/search.test.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/apollo-wind/src/components/ui/search.test.tsx b/packages/apollo-wind/src/components/ui/search.test.tsx index 0e08a09eb..c371e21f6 100644 --- a/packages/apollo-wind/src/components/ui/search.test.tsx +++ b/packages/apollo-wind/src/components/ui/search.test.tsx @@ -97,6 +97,13 @@ describe('Search', () => { expect(input).toHaveClass('custom-search'); }); + it('suppresses the native search clear button to avoid a duplicate', () => { + render(); + const input = screen.getByRole('searchbox'); + expect(input).toHaveClass('[&::-webkit-search-cancel-button]:appearance-none'); + expect(input).toHaveClass('[&::-webkit-search-decoration]:appearance-none'); + }); + it('forwards ref correctly', () => { const ref = { current: null }; render();