feat(web): add settings sidebar search - #4682
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
ApprovabilityVerdict: Needs human review This PR introduces a new settings sidebar search feature with keyboard navigation, search results UI, and scroll-to-target animations. New user-facing features with new components and behaviors warrant human review. You can customize Macroscope's approvability policy. Learn more. |
5525708 to
18af1be
Compare
…rgets Disable TanStack Router's built-in hashScrollIntoView on settings search navigations so it can't fight the custom centered scroll/focus/pulse, and keep search target ids off loading placeholders (source control skeleton, archive loading state) so the hash survives until real content mounts. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… titles Panels now spread id/title from searchableSetting() instead of restating them, and the sidebar nav derives its entries from the shared section labels, so a retitle (or a future translation pass) happens in one module. Also fixes the Project Grouping/Project grouping drift the split had already caused. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…/settings-sidebar-search # Conflicts: # apps/web/src/components/settings/SettingsSidebarNav.tsx
Focusing the destination drew the browser focus ring on top of the pulse animation. Suppress the outline while the pulse class is present; under reduced motion the class is never added, so the ring remains the sole destination indicator there. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Pressing "/" anywhere on a settings page (outside an editable field) focuses and selects the sidebar search, matching the keybindings panel mod+F pattern. The nav only mounts on settings routes, so the listener is scoped automatically. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Same Kbd chip the main sidebar uses for its command palette shortcut; it yields its slot to the clear button while a query is active. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Remove the pulse class when the destination loses focus, so stale targets regain their normal focus outline instead of keeping the suppression for the rest of the session. - Open the sidebar (mobile sheet or collapsed desktop rail) before the "/" shortcut focuses the search input, so it never focuses off-screen. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Bail when the keypress originates inside a dialog or popup so the shortcut cannot pull focus out of a modal focus trap. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 56c2d87. Configure here.
## What's Changed * feat(web): add settings sidebar search by @shivamhwp in pingdotgg/t3code#4682 * fix: threads with open PRs no longer auto-settle by @t3dotgg in pingdotgg/t3code#5151 * fix(server): bound thread catch-up replay and stop full-DB snapshot hydration by @t3dotgg in pingdotgg/t3code#5147 **Full Changelog**: pingdotgg/t3code@v0.0.32-nightly.20260731.968...v0.0.32-nightly.20260801.969 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.32-nightly.20260801.969

Summary
Why
Settings are split across several routed panels. Finding a specific option currently requires knowing which section contains it. This adds a lightweight, dependency-free title index directly in the sidebar while keeping the main Settings layout unchanged.
Screenshots
Search results
Selected setting
Validation
vp test run src/components/settings/settingsSearch.test.ts src/components/settings/settingsLayout.test.tsx --project unitfromapps/web— 9 tests passedvp lintandvp fmtfor changed filesvp run --filter @t3tools/web typecheckReview notes
The initial search pass also showed that hidden descriptions and keywords produced surprising matches. The implementation now matches only visible setting titles, uses a persistent scoped destination highlight, and indexes only the stable Remote environments target. Final hands-on visual review is intentionally left to the reviewer.
Note
Add search to the settings sidebar with hash-based anchor navigation
/, that filters settings by title and lets users jump directly to a setting via keyboard or mouse.searchableSetting(id)helper that attaches stable anchor ids to panels and rows.searchableSetting(...)across all major settings panels (Appearance, General, Providers, Keybindings, Connections, Source Control, Beta) to register them as searchable targets.Macroscope summarized 56c2d87.
Note
Low Risk
UI-only navigation and labeling changes with unit tests; no auth, data, or server behavior changes.
Overview
Adds settings search in the settings sidebar: a title-only index backed by a central
settingsSearchcatalog, with/to focus the field and arrow/Enter/Escape keyboard navigation.While searching, section links swap for matching results (setting title plus parent section). Choosing a result navigates to the right settings route with a URL hash anchor;
SettingsPageContainerandsearchableSettingkeep row/section ids and titles aligned with the catalog so panels and search cannot drift.Scroll, focus, and highlight land on the target row or section header (section headers scroll when the anchor is a
SettingsSection), with a short pulse animation unless reduced motion is enabled; the hash is cleared after handling. Conditional settings can point at a stable parent viatargetId(e.g. environment identification → Appearance).Settings panels across General, Appearance, Beta, Connections, and related areas now spread
searchableSetting(...)instead of hard-coded titles. Minor sidebar chrome cleanup removes an extra separator.Reviewed by Cursor Bugbot for commit 56c2d87. Bugbot is set up for automated code reviews on this repo. Configure here.