Skip to content

ENG-2266 Make advanced node search popovers keyboard controllable - #1560

Open
trangdoan982 wants to merge 1 commit into
mainfrom
eng-2266-make-the-advanced-node-search-sort-menu-keyboard-navigable
Open

trangdoan982 wants to merge 1 commit into
mainfrom
eng-2266-make-the-advanced-node-search-sort-menu-keyboard-navigable

Conversation

@trangdoan982

@trangdoan982 trangdoan982 commented Oct 17, 2026 •

Copy link
Copy Markdown
Member

Reviewer brief

  • Result: All three advanced node search popovers (type filter, sort, display options) are keyboard controllable through the shared SearchDropdown. Opening by keyboard focuses the selected or first item. ArrowUp/ArrowDown move through the items and wrap. Tab and Shift+Tab only close the popover and return focus to its trigger. Escape and outside clicks behave as before (light dismiss). Div items get a keyboard-only focus ring. This folds in ENG-2263's Tab-away close.
  • Review focus:
    • A pointer open focuses the panel itself rather than an item. Chromium carries :focus-visible over from the focused search input, so focusing an item would ring a mouse open.
    • "Clear filter" moves focus back to the panel when it held focus, because it unmounts on click.
    • On the accent-filled selected row, the inset ring uses --background-modifier-border-focus. It's visible in the default theme but subtle.
  • Risk or follow-up:

Verification

  • pnpm ci:validate passes on the PR head.
  • I verified the behaviour live in Obsidian over CDP. All 14 scenarios passed:
Scenario Result
Sort: keyboard open, ArrowDown ×7, ArrowUp Relevance → … → Author → Asc → Desc → Relevance; Up from Relevance → Desc; ring visible; result highlight unchanged
Sort: Tab / Shift+Tab Closes; focus on sort trigger; sort unchanged
Mouse open Panel focused, no ring; first ArrowDown rings the first row
Click another trigger Sort closes and filter opens in one click
Outside click on a result Popover closes; the click still highlights the result
Escape Closes; modal stays; focus in search input
Type filter arrows One stop per type row, wraps, never lands on "Only"
Filter label / colour dot click Toggles every time; panel stays open
Clear filter by keyboard Filter cleared; focus stays in panel; arrows keep working
"Only" on keyboard focus Stays hidden (opacity 0)
Display options Focus on toggle with ring; Enter toggles; stays open
Ring on selected sort row, ring in dark theme Inset ring present

Loom video

https://www.loom.com/share/e9057b831841450ca6553fbb47f4d62b

Scope check

  • Ran $scope-check against ENG-2266 and the final diff.
  • Scope beyond Done When:
    • Focus-on-open and arrow navigation are in the shared SearchDropdown, so the type filter and display options popovers get them too.
    • Tab and Shift+Tab only close a popover and return focus to its trigger. This is ENG-2263's Tab-away close.
    • The display toggle gets the focus ring.
    • The filter's "Only" button is now mouse-only.
    • Focus stays in the panel after "Clear filter" is pressed by keyboard.
  • Required now: the requester asked for one consistent keyboard model across the search popovers, with ENG-2263 folded in. Doing it per menu would duplicate the logic across the shared component's callers.
  • Decision: ENG-2266 scope update comment. ENG-2263 is canceled as absorbed.

Standards check

  • Ran $dg-pr-adherence-check against the final diff and PR metadata.

Local delegated full review

  • Ran a comprehensive review of the entire final diff in a subagent with a fresh context. Use $dg-delegated-full-review when no other full-review workflow is available.

🤖 Generated with Claude Code

Opening a toolbar popover by keyboard focuses its selected or first item;
arrow keys step through the panel and wrap; Tab only closes it and returns
focus to the trigger. Div items get a keyboard-only focus ring. Folds in
the Tab-away close from ENG-2263.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Entire-Checkpoint: 01M5555T6SE66KYNSZFY7C1MP7
@vercel

vercel Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
discourse-graph Skipped Skipped Oct 17, 2026 2:59pm UTC

Request Review

@linear-code

linear-code Bot commented Oct 17, 2026

Copy link
Copy Markdown

ENG-2266

@supabase

supabase Bot commented Oct 17, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project zytfjzqyijgagqxrzbmz because there are no changes detected in packages/database/supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

@trangdoan982
trangdoan982 marked this pull request as ready for review October 17, 2026 17:18

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Devin Review found 1 potential issue.

1 flag not posted on this PR by your GitHub settings — view it in Devin Review. (Configure)

Devin Review

Comment thread apps/obsidian/src/components/SearchDropdown.tsx
@trangdoan982 trangdoan982 changed the title ENG-2266 Make the advanced node search sort menu keyboard navigable ENG-2266 Make advanced node search popovers keyboard controllable Oct 17, 2026

This branch was previously deployed

1 inactive deployment
Preview — 59928da5 Deployed Oct 17, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant