Skip to content

🤖 Settings > Plugins: Hooks and Uninstall panels drop focus and ignore Escape #7753

Open

Description

@ThomasK33

A keyboard bug bash of Settings > Plugins (3 Sonnet 5.5 charters, sandbox run 2026-10-30) reported focus gaps in the per-plugin panels. I checked each claim against the source. None has a repro test yet.

Claims that the source supports

  1. Hooks panel ignores Escape. PluginHooksPanel has no Escape handler, so Escape inside it closes the whole Settings dialog. ManageComponentsPanel uses useEscapeCancelsPanel for this, and the Hooks panel does not.
  2. Closing the Hooks panel drops focus. Its Close button calls setHooksTarget(null) and nothing refocuses the card's Hooks button. The next Tab starts at the Settings nav.
  3. Cancelling the Uninstall confirmation drops focus. onCancel={() => setUninstallTarget(null)} refocuses nothing. Opening the confirmation also leaves focus on the Uninstall button.

Claim that needs a decision

  1. Opening Manage components leaves focus on the card button. If the user tabs out of the panel, Escape closes Settings, because useEscapeCancelsPanel acts only on events inside the panel.

Expected

Each panel returns focus to the button that opened it when it closes. The Manage components panel already does this through useButtonsByName. Escape inside any panel closes only that panel.

Found while verifying the plugin card layout fix. That PR does not change any focus code.


Generated with xum • Model: anthropic:claude-opus-5-5 • Thinking: high • Cost: $2.38

Activity

  1. ThomasK33 commented on Oct 30, 2026

    @ThomasK33
    MemberAuthor

    Follow-up from the final review of #7754. That PR moves each card's action buttons before the description and the vendor links, to match the visual order. On a card with vendor links (Website, Privacy, Terms, Support), a keyboard user who opens Hooks or Uninstall now tabs past up to four links to reach the panel, because focus stays on the button (items 2 and 3 above). Moving focus into the panel when it opens fixes both.


    Generated with xum • Model: anthropic:claude-opus-5-5 • Thinking: high • Cost: $5.28

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions