Skip to content

Conversation

@brunobergher
Copy link
Collaborator

@brunobergher brunobergher commented Jan 10, 2026

Summary

  • Adds settings search input with keyboard navigation that jumps to sections and highlights matching settings
  • To keep things simple and not add overhead/a checklist to future new settings (or removed settings), this uses the i18n keys as a search index, and the conventions in i18n key naming, which include the settings tab as the first grouping key, like "checkpoints", or "mcp" to determine what tab to show. It doesn't allow for fuzzy search and isn't as accurate as it could be, but works the vast majority of the time without requiring any extra work.
  • Some of those strings are display-only and shouldn't appear in search, so there's an exclusion mechanism
  • To make space for this, I changed the design of tab headers, which led to some other visual refreshes in places in order to keep things consistent.
Screenshot 2026-01-11 at 07 49 28
Screenshot 2026-01-11 at 07 49 36
Screenshot 2026-01-11 at 07 49 45

Important

Adds settings search with keyboard navigation and highlights, refines UI, and updates components and tests for new functionality.

  • Behavior:
    • Adds settings search input with keyboard navigation in SettingsView to jump to sections and highlight matches.
    • Uses i18n keys as a search index, excluding display-only strings.
    • Updates tab headers design for space and consistency.
  • Components:
    • Adds SettingsSearchInput and SettingsSearchResults components.
    • Updates SettingsView to integrate search functionality.
  • Tests:
    • Adds tests for SettingsSearchInput and SettingsSearchResults.
    • Updates parseSettingsI18nKeys.spec.ts and settingsSearchExclusions.spec.ts for new exclusions and parsing logic.
  • Styles:
    • Adds highlight animation in index.css for search navigation.
  • Misc:
    • Removes unused icons from settings.json files.
    • Updates parseSettingsI18nKeys.ts to exclude non-actionable settings.

This description was created by Ellipsis for f4abc87. You can customize this summary. It will automatically update as commits are pushed.

@roomote
Copy link
Contributor

roomote bot commented Jan 10, 2026

Rooviewer Clock   See task on Roo Cloud

Reviewed the new exclusion mechanism commit. The implementation is clean with good test coverage. No new issues found.

  • Global Input component change from rounded-xs to rounded-full may affect other inputs beyond the settings search (author confirmed intentional)
Previous reviews

Mention @roomote in a comment to request specific changes to this pull request or fix all unresolved issues.

@hannesrudolph hannesrudolph added the Issue/PR - Triage New issue. Needs quick review to confirm validity and assign labels. label Jan 10, 2026
@brunobergher brunobergher marked this pull request as ready for review January 11, 2026 08:41
@dosubot dosubot bot added size:XXL This PR changes 1000+ lines, ignoring generated files. UI/UX UI/UX related or focused labels Jan 11, 2026
@roomote
Copy link
Contributor

roomote bot commented Jan 11, 2026

Rooviewer Clock   See task on Roo Cloud

Reviewed the new exclusion mechanism commit. The implementation is clean with good test coverage. No new issues found.

  • Global Input component change from rounded-xs to rounded-full may affect other inputs beyond the settings search (author confirmed intentional)
Previous reviews

Mention @roomote in a comment to request specific changes to this pull request or fix all unresolved issues.

}
}

const defaultExtensionState = {
Copy link
Collaborator

Choose a reason for hiding this comment

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

I usually try to avoid adding tests that require on having all of the state like this, since it leads to more stuff we need to update when adding unrelated things to extension state. Honestly there's so much mocking in this test that it might be better just to delete it.

return []
}

// Normalize query to lowercase for case-insensitive matching
Copy link
Collaborator

Choose a reason for hiding this comment

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

Not blocking feedback, but we have the fzf library - maybe we can use it here?


/**
* Valid section names that correspond to tabs in SettingsView.
* Defined locally to avoid circular dependencies with SettingsView.tsx.
Copy link
Collaborator

Choose a reason for hiding this comment

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

Would really be nice not to duplicate this here

Copy link
Collaborator

Choose a reason for hiding this comment

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

Can we try to unify this logic more with the settingsview logic?

examples?: string[]
}

const SEARCH_EXCLUSIONS: ExclusionRule[] = [
Copy link
Collaborator

Choose a reason for hiding this comment

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

I wonder if instead of doing this, we can add a data-searchable property on the div where we display the information. I haven't thought deeply about it but that seems like it would be more elegant and maintainable.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Issue/PR - Triage New issue. Needs quick review to confirm validity and assign labels. size:XXL This PR changes 1000+ lines, ignoring generated files. UI/UX UI/UX related or focused

Projects

Status: Triage

Development

Successfully merging this pull request may close these issues.

4 participants