Skip to content

Failed and Review: choose the folder filter with the kit select #79

Closed

Description

@elementalvoid

What to build

Choosing a source folder to narrow the failed-items or deletion-review list happens in the kit's select control, and after a choice the keyboard focus stays with that control.

Today the control is hand-built: an open/closed flag in the filter model, an option list painted under the button, and a workaround that re-focuses the trigger and advances to the next tab stop, because the activated option unmounts and focus would otherwise fall back to the window's first stop.

Acceptance criteria

  • One source folder is chosen from the kit control, and "all folders" is reachable as a choice, not only as a clear action.
  • After a choice, focus stays on the filter control; after a clear, focus stays there too. No fallback to the window's first tab stop.
  • The active-filter chip still names the folder on screen and still labels the filtered empty state, and its clear action returns the list to all folders.
  • The matching rules are unchanged: a recursive folder includes its subfolders, a non-recursive one includes its direct children only, case handling follows the platform, and a folder that is no longer a source still filters.
  • Both list surfaces share this one control, and each keeps its own element ids so their tests do not collide.
  • Keyboard-only selection, Escape, and the screen-reader name for each option are covered by the tests.

Notes

The rule logic — which items a selected folder keeps, the label, the empty-state wording — is domain code and stays where it is. This ticket replaces the trigger, the list, and the focus handling.

Activity

  1. elementalvoid commented on Oct 31, 2026

    @elementalvoid
    OwnerAuthor

    Landed in main at 35691b2, merged from integration/kit-surface (CI green at 43223e2). Gate on the merged tree: cargo fmt --all -- --check, cargo clippy --workspace --all-targets -D warnings, cargo test --workspace — all clean.

    What the reviews changed. The selected option wrote "selected" into its accessible name — an invented convention where GPUI already has aria_selected. Selection is now exposed as selection and drawn as weight, not a word. The trigger's width comes from the theme scale rather than a hardcoded 200 px. The folder-that-is-no-longer-a-source control path got the test its rule already had. The domain rule logic (keeps, label, empty_heading) is untouched, and its eight tests still pass unchanged.

    Still manual. Real screen readers, popup edge placement, non-default zoom. Filed: #86 — the app registers no kit icon assets, so no caret or check mark draws anywhere; pre-existing, and this control works around it with weight rather than a glyph.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    accessibilityBarrier affecting people with disabilitiesenhancementNew feature or requestready-for-agentFully specified, ready for an AFK agent

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions