Files
orca/tests
Brennan Benson a37ff2fa62 Show matching settings as a results list in Settings search (#40852)
* Show matching settings as a results list in the Settings sidebar

Typing in the Settings search now replaces the nav with a ranked list of
individual settings (pane title on the second line, matched text marked).
The first result is selected and previewed: its pane opens unfiltered,
scrolled to the setting with the target highlight. Arrow keys move and
preview, Enter or a click picks and keeps the query, Esc or the clear
button returns to the nav while leaving the shown pane open.

The sidebar query no longer filters page content. The Back to app row is
now 48px so its border lines up with the Settings header.

* Highlight settings search targets with a full-bleed bar and find unanchored rows

Matches in the results list are marked with semibold text (the jump palette's
HighlightedText) instead of a grey box. The landed-on row gets a tint from card
edge to card edge with a left bar that fades after ~3s, replacing the inset
grey block that sat off-center in the card padding. Integration provider rows
get anchors, and rows not wrapped in SearchableSetting are found by their
visible label.

* Fit the search highlight to each row's enclosing card

Settings cards pad differently (groups, plain sections, shadcn cards, the
Appearance accordion), so the highlight now measures the gap from the row to
its nearest card's inner edges instead of assuming one gutter. A group title
match highlights that group's card rather than the heading text.

* Give the settings target highlight a single owner

Components applied the highlight through SettingsTargetHighlightContext while the
page effect applied it to whatever element the jump scrolled to; when those
differed (Jira's provider row vs. its card shell) two highlights showed. The
effect now owns it alone, and the context, its provider and the macOS
Permissions prop are removed. Jira and Linear reuse their existing anchor ids.

* Use a plain fading tint for the settings target highlight

Drops the left bar; the tint still spans the enclosing card and fades after ~3s.

* Mark settings result titles with the ranking fold

The title highlight lowercased by hand and skipped titles whose length changed,
so İstanbul matching "stan" (or a query of İ) ranked but was never marked. Fold
per code point with the ranking's own fold and map offsets back to the title.

* Make settings search list-only until a pick and reveal collapsed targets

Typing now only changes the result rows: nothing is selected and the page does
not move until Enter or a click (arrows move the selection only). This removes
previews that discarded the Open in draft, re-ran repo hook checks, mounted a
pane per keystroke and drifted after deep links.

- Rank once on a deferred query, cap the list at 50 with a 'keep typing' hint,
  and skip rendering the normal nav while searching.
- A settings jump dispatches a reveal event from its target; Appearance sections,
  Advanced disclosures and the network/mobile collapsibles (now kept mounted)
  open themselves instead of reading the search query.
- Nested scrollers (Shortcuts) scroll the target into view; General sub-page
  results open their page; mirror recovery deep-links to the mirror field; a
  target that never mounts drops its pending jump; group-title matches use
  data-settings-group.

* Fix follow-ups from the settings search repair review

- Two more e2e specs pick a result with ArrowDown + Enter instead of relying on
  typing to navigate.
- After a jump reveals a growing section, re-scroll once if the row is still cut off.
- Hide 'No settings match' while the deferred ranking catches up.
- The reveal hook is a ref callback so disclosures that mount later still open.
- The Advanced disclosure fixture shows the real forced-open case (unsaved edits).

* Give every settings search result a reachable row

* Type the General sub-page anchors as a list instead of casting map entries

* Keep the reveal callback ref out of render

* Match the e2e shortcut labels to main's sentence-case names

* Highlight the result's card, not its section title or a bare label
2026-11-12 19:39:39 -08:00
..