Skip to content

fix: disable search auto-focus on mobile/touch devices#4128

Merged
kasya merged 10 commits intoOWASP:mainfrom
ItsImran10140:fix/search-autofocus-mobile
Mar 14, 2026
Merged

fix: disable search auto-focus on mobile/touch devices#4128
kasya merged 10 commits intoOWASP:mainfrom
ItsImran10140:fix/search-autofocus-mobile

Conversation

@ItsImran10140
Copy link
Copy Markdown
Contributor

@ItsImran10140 ItsImran10140 commented Mar 1, 2026

Proposed change

Disable search auto-focus on mobile/touch devices

Resolves #3182

  • Added useShouldAutoFocusSearch hook that detects small screens (<768px) and touch devices (pointer: coarse)
  • Updated Search.tsx to conditionally auto-focus based on device type
  • Updated MultiSearch.tsx (homepage) with same logic
  • Updated Search component tests to cover mobile behavior
iPhone-13-PRO-localhost-3mep_uwoc1mnur.webm

Checklist

  • Required: I followed the contributing workflow
  • Required: I verified that my code works as intended and resolves the issue as described
  • Required: I ran make check-test locally: all warnings addressed, tests passed
  • I used AI for code, documentation, tests, or communication related to this PR

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Mar 1, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Adds a media-query-driven hook useShouldAutoFocusSearch to disable auto-focus on small or touch devices; integrates it into Search.tsx and MultiSearch.tsx to gate input.focus(); updates Search.test.tsx to mock the hook and expand autofocus-related tests.

Changes

Cohort / File(s) Summary
Auto-focus Hook
frontend/src/hooks/useShouldAutoFocusSearch.ts
New client-side React hook using (max-width: 767px) and (pointer: coarse) media queries; returns boolean shouldAutoFocus (false on small/touch devices) and subscribes to media query changes.
Search component
frontend/src/components/Search.tsx
Imports and uses useShouldAutoFocusSearch; gates initial input focus and focus-after-clear on shouldAutoFocus; updates focus effect dependencies.
MultiSearch component
frontend/src/components/MultiSearch.tsx
Uses useShouldAutoFocusSearch to conditionally call input.focus() and updates outside-click effect dependencies to include shouldAutoFocus and isLoaded.
Tests (Search)
frontend/__tests__/unit/components/Search.test.tsx
Adds a global mock for useShouldAutoFocusSearch, ensures default true in setup, and expands tests for autofocus true/false, mobile/touch behavior, re-render focus retention, and focus-after-clear interactions.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • kasya
  • arkid15r
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Linked Issues check ❓ Inconclusive The PR addresses the core objective [#3182] of disabling auto-focus on mobile/touch devices by implementing the useShouldAutoFocusSearch hook and updating Search.tsx and MultiSearch.tsx components, but the PR description notes that MultiSearch no longer exists in the codebase and has been replaced by GlobalSearch, indicating incomplete alignment with current repository state. Verify whether MultiSearch changes are still applicable or if GlobalSearch should be updated instead to fully resolve the issue across all search implementations in the codebase.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title 'fix: disable search auto-focus on mobile/touch devices' clearly and concisely describes the main change, accurately reflecting the primary objective of the PR.
Description check ✅ Passed The description is directly related to the changeset, explaining the proposed changes, implementation details, and linking to the relevant issue.
Out of Scope Changes check ✅ Passed All changes are directly related to the objective of disabling search auto-focus on mobile/touch devices: the new hook, updates to Search.tsx and MultiSearch.tsx, and expanded test coverage align with the PR scope.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
📝 Coding Plan
  • Generate coding plan for human review comments

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
frontend/src/components/MultiSearch.tsx (1)

162-178: ⚠️ Potential issue | 🟠 Major

Autofocus can be skipped when isLoaded changes after mount.

The effect only depends on shouldAutoFocus. If input is not mounted yet (isLoaded=false), focus is missed and not retried when loading completes.

💡 Suggested fix
   useEffect(() => {
-    if(shouldAutoFocus){
+    if (isLoaded && shouldAutoFocus) {
       inputRef.current?.focus()
     }
@@
-  }, [shouldAutoFocus])
+  }, [isLoaded, shouldAutoFocus])
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@frontend/src/components/MultiSearch.tsx` around lines 162 - 178, The effect
in MultiSearch.tsx that focuses the input and attaches the outside-click handler
currently only depends on shouldAutoFocus, so if the input mounts later
(isLoaded toggles) the focus is missed; update the useEffect dependencies to
include isLoaded and run the focus logic only when isLoaded is true (use
inputRef.current?.focus()), and keep the click-outside handler behavior intact
(attach/remove document listener as before) so that focus is retried after
loading completes; reference the useEffect block that uses shouldAutoFocus,
isLoaded, inputRef, searchBarRef, and setShowSuggestions.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In `@frontend/src/components/MultiSearch.tsx`:
- Around line 162-178: The effect in MultiSearch.tsx that focuses the input and
attaches the outside-click handler currently only depends on shouldAutoFocus, so
if the input mounts later (isLoaded toggles) the focus is missed; update the
useEffect dependencies to include isLoaded and run the focus logic only when
isLoaded is true (use inputRef.current?.focus()), and keep the click-outside
handler behavior intact (attach/remove document listener as before) so that
focus is retried after loading completes; reference the useEffect block that
uses shouldAutoFocus, isLoaded, inputRef, searchBarRef, and setShowSuggestions.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6d1c458 and 536458c.

📒 Files selected for processing (4)
  • frontend/__tests__/unit/components/Search.test.tsx
  • frontend/src/components/MultiSearch.tsx
  • frontend/src/components/Search.tsx
  • frontend/src/hooks/useShouldAutoFocusSearch.ts

coderabbitai[bot]
coderabbitai Bot previously approved these changes Mar 1, 2026
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 4 files

Confidence score: 4/5

  • This PR appears safe to merge; the only noted issue is a minor test weakness rather than a product behavior change.
  • In frontend/__tests__/unit/components/Search.test.tsx, the new expect(input).toHaveFocus() doesn’t actually verify refocus behavior because the input is already focused on mount when useShouldAutoFocusSearch is true.
  • Pay close attention to frontend/__tests__/unit/components/Search.test.tsx - the focus assertion may not be exercising the intended refocus path.
Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="frontend/__tests__/unit/components/Search.test.tsx">

<violation number="1" location="frontend/__tests__/unit/components/Search.test.tsx:166">
P2: The added `expect(input).toHaveFocus()` does not actually test refocus behavior. With `useShouldAutoFocusSearch` mocked to true, the input is already focused on mount, and `fireEvent.click` doesn’t move focus to the button. The input stays focused regardless of whether the clear handler calls `focus()`, so this assertion will pass even if refocus logic is removed. Consider blurring the input (or using userEvent to change focus) before asserting refocus so the test can catch regressions.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

Comment thread frontend/__tests__/unit/components/Search.test.tsx
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@frontend/__tests__/unit/components/Search.test.tsx`:
- Around line 171-177: The test queries the clear button with
container.querySelector which may return null and is clicked unguarded; update
the test in Search.test.tsx so the clearButton is checked before calling
fireEvent.click — either assert/expect that clearButton is truthy (or throw a
descriptive error) or prefer a non-null query (e.g., getByRole/getByLabelText)
to retrieve the button; ensure the change is applied to the test case using the
clearButton variable in the it('does not refocus input after clear when on
mobile') block and keep useShouldAutoFocusSearch and SearchBar usage unchanged.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 536458c and 198dbb7.

📒 Files selected for processing (2)
  • frontend/__tests__/unit/components/Search.test.tsx
  • frontend/src/components/MultiSearch.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • frontend/src/components/MultiSearch.tsx

Comment thread frontend/__tests__/unit/components/Search.test.tsx
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (1)
frontend/__tests__/unit/components/Search.test.tsx (1)

174-184: ⚠️ Potential issue | 🟡 Minor

Guard nullable clearButton and assert focus precondition in the mobile clear test.

On Line 181, fireEvent.click(clearButton) is unguarded after a nullable querySelector. Also, this test should explicitly prove the input is unfocused before clear; otherwise “does not refocus” can pass vacuously.

Proposed test-hardening patch
     it('does not refocus input after clear when on mobile', async () => {
       ;(useShouldAutoFocusSearch as jest.Mock).mockReturnValue(false)
       const { container } = render(<SearchBar {...defaultProps} isLoaded={true} />)
       const input = screen.getByPlaceholderText('Search projects...')
       fireEvent.change(input, { target: { value: 'test' } })
       const clearButton = container.querySelector('button.absolute.rounded-md[class*="right-2"]')
       expect(clearButton).toBeInTheDocument()
-      fireEvent.click(clearButton)
+      input.blur()
+      expect(input).not.toHaveFocus()
+      if (!clearButton) {
+        throw new Error('Clear button not found')
+      }
+      fireEvent.click(clearButton)
       expect(input).toHaveValue('')
       // NOSONAR: Verifies input is not refocused on mobile when shouldAutoFocus is false
       expect(input).not.toHaveFocus()
     })
#!/bin/bash
# Verify nullable querySelector usages and unguarded clearButton click sites in this test file.
rg -nP -C2 "const clearButton = container\.querySelector\(|fireEvent\.click\(clearButton\)" frontend/__tests__/unit/components/Search.test.tsx
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@frontend/__tests__/unit/components/Search.test.tsx` around lines 174 - 184,
The test should guard the nullable clearButton and assert a precondition that
the input is focused before clicking to ensure "does not refocus" isn't passing
vacuously: update the 'does not refocus input after clear when on mobile' test
for SearchBar by (1) asserting the input is focused (or programmatically
focusing it) before the clear click so we have a meaningful precondition, (2)
null-checking clearButton (the value returned from container.querySelector) and
failing the test early if it's missing, and (3) then performing the click and
asserting input.value is '' and input does not have focus; keep references to
clearButton, input, and the SearchBar render in the same test.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@frontend/__tests__/unit/components/Search.test.tsx`:
- Around line 174-184: The test should guard the nullable clearButton and assert
a precondition that the input is focused before clicking to ensure "does not
refocus" isn't passing vacuously: update the 'does not refocus input after clear
when on mobile' test for SearchBar by (1) asserting the input is focused (or
programmatically focusing it) before the clear click so we have a meaningful
precondition, (2) null-checking clearButton (the value returned from
container.querySelector) and failing the test early if it's missing, and (3)
then performing the click and asserting input.value is '' and input does not
have focus; keep references to clearButton, input, and the SearchBar render in
the same test.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 198dbb7 and e7521a3.

📒 Files selected for processing (1)
  • frontend/__tests__/unit/components/Search.test.tsx

coderabbitai[bot]
coderabbitai Bot previously approved these changes Mar 1, 2026
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (3)
frontend/__tests__/unit/components/Search.test.tsx (3)

347-348: Inconsistent clear button query pattern; unguarded null access.

This test still uses container.querySelector without a null guard, while the updated tests at lines 163 and 178 use the more robust screen.getByRole('button', { name: 'Clear search' }). Consider aligning this test with the improved pattern for consistency and better error messages on failure.

Suggested refactor
-      const clearButton = container.querySelector('button.absolute.rounded-md[class*="right-2"]')
-      fireEvent.click(clearButton)
+      const clearButton = screen.getByRole('button', { name: 'Clear search' })
+      fireEvent.click(clearButton)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@frontend/__tests__/unit/components/Search.test.tsx` around lines 347 - 348,
The test is querying the clear button with container.querySelector and then
clicking it without guarding for null; replace the query with the accessible
query used elsewhere: use screen.getByRole('button', { name: 'Clear search' })
to find the button and then call fireEvent.click on that element (replace
references to clearButton and the container.querySelector invocation), which
removes the unguarded null access and yields better failure messages.

380-381: Same inconsistent query pattern in keyboard event tests.

These keyboard accessibility tests also use container.querySelector without guards. For consistency with the refactored clear button tests, consider using screen.getByRole('button', { name: 'Clear search' }) throughout this describe block.

Suggested refactor for all three tests
-      const clearButton = container.querySelector('button.absolute.rounded-md[class*="right-2"]')
+      const clearButton = screen.getByRole('button', { name: 'Clear search' })

Also applies to: 395-396, 410-411

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@frontend/__tests__/unit/components/Search.test.tsx` around lines 380 - 381,
Replace the fragile container.querySelector usage in the keyboard accessibility
tests with an accessible query: use screen.getByRole('button', { name: 'Clear
search' }) to locate the clear button (instead of
container.querySelector('button.absolute.rounded-md[class*="right-2"]')) and
then call fireEvent.keyDown on that element; update all occurrences in this
describe block (including the instances referenced around lines ~395 and ~410)
so the tests consistently use getByRole for the clear button and will fail
loudly if the control is missing.

126-131: Minor formatting inconsistency.

Line 126 is missing a space before the arrow function, unlike other tests in this file (e.g., line 119).

Formatting fix
-    it('should NOT auto-focus on mobile/touch devices',()=>{
+    it('should NOT auto-focus on mobile/touch devices', () => {
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@frontend/__tests__/unit/components/Search.test.tsx` around lines 126 - 131,
The test "should NOT auto-focus on mobile/touch devices" has a formatting
inconsistency: add a space before the arrow in the anonymous function
declaration so it matches other tests (change the it call in the Search.test.tsx
where useShouldAutoFocusSearch is mocked and SearchBar is rendered to use ", ()
=> {" instead of ",()=>{"). Ensure the same spacing style is used for that
it(...) callback to mirror the surrounding tests (see the
useShouldAutoFocusSearch mock, render(<SearchBar ... />) and expect assertions).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@frontend/__tests__/unit/components/Search.test.tsx`:
- Around line 347-348: The test is querying the clear button with
container.querySelector and then clicking it without guarding for null; replace
the query with the accessible query used elsewhere: use
screen.getByRole('button', { name: 'Clear search' }) to find the button and then
call fireEvent.click on that element (replace references to clearButton and the
container.querySelector invocation), which removes the unguarded null access and
yields better failure messages.
- Around line 380-381: Replace the fragile container.querySelector usage in the
keyboard accessibility tests with an accessible query: use
screen.getByRole('button', { name: 'Clear search' }) to locate the clear button
(instead of
container.querySelector('button.absolute.rounded-md[class*="right-2"]')) and
then call fireEvent.keyDown on that element; update all occurrences in this
describe block (including the instances referenced around lines ~395 and ~410)
so the tests consistently use getByRole for the clear button and will fail
loudly if the control is missing.
- Around line 126-131: The test "should NOT auto-focus on mobile/touch devices"
has a formatting inconsistency: add a space before the arrow in the anonymous
function declaration so it matches other tests (change the it call in the
Search.test.tsx where useShouldAutoFocusSearch is mocked and SearchBar is
rendered to use ", () => {" instead of ",()=>{"). Ensure the same spacing style
is used for that it(...) callback to mirror the surrounding tests (see the
useShouldAutoFocusSearch mock, render(<SearchBar ... />) and expect assertions).

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e7521a3 and 25e61da.

📒 Files selected for processing (1)
  • frontend/__tests__/unit/components/Search.test.tsx

coderabbitai[bot]
coderabbitai Bot previously approved these changes Mar 1, 2026
@ItsImran10140 ItsImran10140 marked this pull request as ready for review March 1, 2026 04:10
@kasya
Copy link
Copy Markdown
Collaborator

kasya commented Mar 8, 2026

@ItsImran10140 Hi! were you able yo reproduce this issue originally on the iOS device you used in the simulator? With the keyboard popping up on loading Chapters page?

Copy link
Copy Markdown
Contributor

@anurag2787 anurag2787 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @ItsImran10140 Thanks for working on it!
It is working fine Just a small suggestion ⬇️

@ItsImran10140
Copy link
Copy Markdown
Contributor Author

Hi @kasya @anurag2787 I don't know In my physical android device I am seeing this behaviour and I don't have Iphone physically present So used the emulator and the their is also it showing. I can not say about the physical device. you can see what its showing.
iPhone-13-PRO-nest.owasp.org-qfdgn0ppgl8ajp.webm

Thank you for the guide.

@kasya
Copy link
Copy Markdown
Collaborator

kasya commented Mar 8, 2026

Hi @ItsImran10140 Thanks for working on it! It is working fine Just a small suggestion ⬇️

hi @anurag2787 ! I think you forgot to submit your suggestion 👀

@kasya
Copy link
Copy Markdown
Collaborator

kasya commented Mar 8, 2026

@MohdWaqar98 could you also resolve conflicts? We no longer have MultiSearch component available - we now have GlobalSearch that is available in the header from any page.

I'm still not able to reproduce this on a simulator 🤔

@anurag2787
Copy link
Copy Markdown
Contributor

Hi @ItsImran10140 Thanks for working on it! It is working fine Just a small suggestion ⬇️

hi @anurag2787 ! I think you forgot to submit your suggestion 👀

Oh sorry about that 😅
I’m not sure why it didn’t get published might have been a GitHub glitch.

image

Hi @ItsImran10140 please refer to this

coderabbitai[bot]
coderabbitai Bot previously approved these changes Mar 9, 2026
- Add useShouldAutoFocusSearch hook to detect mobile and touch devices
- Update Search and MultiSearch components to conditionally auto-focus
- Add tests for mobile auto-focus behavior
- Fixes keyboard opening immediately on mobile when visiting /chapters and other search pages
@ItsImran10140 ItsImran10140 marked this pull request as ready for review March 10, 2026 05:05
@ItsImran10140
Copy link
Copy Markdown
Contributor Author

ItsImran10140 commented Mar 10, 2026

Hi @kasya @anurag2787 Thank you for the Guide. I have done what think is good can you review it and give some feedback.

Copy link
Copy Markdown
Contributor

@anurag2787 anurag2787 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@sonarqubecloud
Copy link
Copy Markdown

Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

0 issues found across 2 files (changes from recent commits).

@codecov
Copy link
Copy Markdown

codecov Bot commented Mar 14, 2026

Codecov Report

❌ Patch coverage is 81.81818% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 99.47%. Comparing base (f1a1611) to head (cb25d2b).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
frontend/src/components/GlobalSearch.tsx 66.66% 0 Missing and 2 partials ⚠️
Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main    #4128      +/-   ##
==========================================
- Coverage   99.48%   99.47%   -0.02%     
==========================================
  Files         520      520              
  Lines       16305    16311       +6     
  Branches     2204     2207       +3     
==========================================
+ Hits        16221    16225       +4     
  Misses         56       56              
- Partials       28       30       +2     
Flag Coverage Δ
backend 99.83% <ø> (ø)
frontend 98.43% <81.81%> (-0.05%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
frontend/src/components/Search.tsx 100.00% <100.00%> (ø)
frontend/src/components/GlobalSearch.tsx 76.38% <66.66%> (-0.66%) ⬇️

Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f1a1611...cb25d2b. Read the comment docs.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link
Copy Markdown
Collaborator

@kasya kasya left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ItsImran10140 thanks for working on this! 👍🏼

I pushed a small update. Please run make check-test before every push to your PR, to make sure all checks are passing. They were failing this last time.

@kasya kasya enabled auto-merge March 14, 2026 03:48
@kasya kasya added this pull request to the merge queue Mar 14, 2026
Merged via the queue into OWASP:main with commit c8f37ed Mar 14, 2026
39 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Search field auto-focus affects mobile experience

3 participants