From 3f74c33d45f1fc1b2b641dc2893045213e6a2225 Mon Sep 17 00:00:00 2001
From: Paul Jankowski <8bittitan@gmail.com>
Date: Wed, 5 Aug 2026 12:15:42 -0400
Subject: [PATCH] fix(v5): ignore slash shortcut on focused buttons (#2955)
Backport of #2871.\n\nOriginal commit: 0e41a78c44e9f731d825a75957e5668aeae30d69
Co-authored-by: Sigmabro <122412346+Sigmabrogz@users.noreply.github.com>
---
.changeset/calm-buttons-listen.md | 6 ++++++
.../src/__tests__/DocSearch.test.tsx | 15 +++++++++++++++
.../src/useDocSearchKeyboardEvents.ts | 3 ++-
.../src/__tests__/keyboardShortcuts.test.tsx | 12 ++++++++++++
.../src/useDocSearchKeyboardEvents.ts | 3 ++-
5 files changed, 37 insertions(+), 2 deletions(-)
create mode 100644 .changeset/calm-buttons-listen.md
diff --git a/.changeset/calm-buttons-listen.md b/.changeset/calm-buttons-listen.md
new file mode 100644
index 00000000..e3d44486
--- /dev/null
+++ b/.changeset/calm-buttons-listen.md
@@ -0,0 +1,6 @@
+---
+"@docsearch/core": patch
+"@docsearch/react": patch
+---
+
+Prevent the slash search shortcut from intercepting key events on focused buttons.
diff --git a/packages/docsearch-core/src/__tests__/DocSearch.test.tsx b/packages/docsearch-core/src/__tests__/DocSearch.test.tsx
index 9defab72..191b22b1 100644
--- a/packages/docsearch-core/src/__tests__/DocSearch.test.tsx
+++ b/packages/docsearch-core/src/__tests__/DocSearch.test.tsx
@@ -138,6 +138,21 @@ describe('@docsearch/core', () => {
expect(screen.getByText('State: modal-search')).toBeInTheDocument();
});
+ it('does not open search with / from a focused button', () => {
+ renderWithProvider(
+ <>
+
+
+ >
+ );
+
+ const button = screen.getByRole('button', { name: 'Action' });
+ button.focus();
+ fireEvent.keyDown(button, { key: '/', code: 'Slash' });
+
+ expect(screen.getByText('State: ready')).toBeInTheDocument();
+ });
+
it('respects keyboard shortcuts', () => {
renderWithProvider(, {
keyboardShortcuts: {
diff --git a/packages/docsearch-core/src/useDocSearchKeyboardEvents.ts b/packages/docsearch-core/src/useDocSearchKeyboardEvents.ts
index 5bcd60f7..73ebf98c 100644
--- a/packages/docsearch-core/src/useDocSearchKeyboardEvents.ts
+++ b/packages/docsearch-core/src/useDocSearchKeyboardEvents.ts
@@ -34,7 +34,8 @@ function isEditingContent(event: KeyboardEvent): boolean {
element.isContentEditable ||
tagName === 'INPUT' ||
tagName === 'SELECT' ||
- tagName === 'TEXTAREA'
+ tagName === 'TEXTAREA' ||
+ tagName === 'BUTTON'
);
}
diff --git a/packages/docsearch-react/src/__tests__/keyboardShortcuts.test.tsx b/packages/docsearch-react/src/__tests__/keyboardShortcuts.test.tsx
index b446a3d7..d3b2f517 100644
--- a/packages/docsearch-react/src/__tests__/keyboardShortcuts.test.tsx
+++ b/packages/docsearch-react/src/__tests__/keyboardShortcuts.test.tsx
@@ -62,6 +62,18 @@ describe('keyboard shortcuts', () => {
expect(document.querySelector('.DocSearch-Modal')).toBeInTheDocument();
});
+
+ it('does not respond to / from the search button', () => {
+ render();
+
+ const button = screen.getByRole('button', { name: /Search/ });
+ button.focus();
+ fireEvent.keyDown(button, { key: '/', code: 'Slash' });
+
+ expect(
+ document.querySelector('.DocSearch-Modal')
+ ).not.toBeInTheDocument();
+ });
});
describe('custom keyboard shortcuts configuration', () => {
diff --git a/packages/docsearch-react/src/useDocSearchKeyboardEvents.ts b/packages/docsearch-react/src/useDocSearchKeyboardEvents.ts
index 0c052cc4..34cfe557 100644
--- a/packages/docsearch-react/src/useDocSearchKeyboardEvents.ts
+++ b/packages/docsearch-react/src/useDocSearchKeyboardEvents.ts
@@ -32,7 +32,8 @@ function isEditingContent(event: KeyboardEvent): boolean {
element.isContentEditable ||
tagName === 'INPUT' ||
tagName === 'SELECT' ||
- tagName === 'TEXTAREA'
+ tagName === 'TEXTAREA' ||
+ tagName === 'BUTTON'
);
}