Files
Brennan BensonandClaude Opus 5.5 e5e4f6f4c9 perf(pickers): window the Automations and Skill install workspace pickers (#41396)
* perf(pickers): window workspace comboboxes and the Cmd+J result list

The Automations and Skill install workspace comboboxes mounted one cmdk row
per workspace while open, and the Cmd+J result list mounted every capped
section row plus each See more page. cmdk moves the highlight, runs Enter and
publishes aria-activedescendant by querying mounted rows, so these lists could
not be windowed while cmdk owned selection.

Each surface now owns its highlight over the full ordered result list:
movement keys follow cmdk's bindings over every result, Enter and click share
one activation path, and the input's aria-activedescendant names the
highlighted option, which stays mounted. Rows render as plain listbox options
outside cmdk's registry and only the visible window mounts (TanStack
virtualizer; Cmd+J keeps natural layout below 50 rows). Filtering, ranking,
section caps and See more are unchanged.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* refactor(pickers): share the windowed command virtualizer and keep the compiler gate

Move the active-option pin and command-list reveal padding into one hook used
by all three surfaces, keep virtualizer consumers out of React Compiler like
the other TanStack lists, and express the dialog row styles and the flush skill
rows as command variants.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* chore(pickers): record the windowed command virtualizer hook's compiler bailout

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(pickers): keep virtualizer geometry across scrolls and match prior highlight/IME behavior

- Stable per-list key/size getters so scrolling and hovering no longer rebuild
  every row's virtual geometry.
- Moving the pointer over the already-highlighted option does no work.
- Jump to… numbers every rendered option, disabled ones included.
- The task Cmd/Ctrl+Enter shortcut ignores IME composition keys.
- The skill install workspace picker opened with nothing chosen highlights the
  first workspace again.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(pickers): let the shared virtualizer own row key identity

Callers now pass their ordered row keys; the shared hook keeps one key array
per ordered sequence and derives the key getter from it, so a list rebuilt
with the same rows (for example after an unrelated workspace metadata update)
no longer forces a full geometry rebuild, while real reorder, insert, remove
and filter changes still do.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(pickers): keep the row See more selects in view when Jump to… starts windowing

Crossing 50 rows through See more switches the list to windowed rendering;
reveal the newly highlighted row after that commit so it stays on screen as
it did before.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf(pickers): keep Jump to… on its original list; window only the two workspace pickers

The real-app benchmark showed no meaningful gain for the Jump to… results
(they rarely reach 50 rows), and windowing them changed the See more
behaviour at the threshold. Restore Jump to… exactly as on main and keep the
windowed list, model-owned selection and option primitive for the Automations
and Skill install workspace pickers, which measured clear wins.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-11-13 17:03:58 -08:00
..