Skip to content

Settings: adopt the kit settings pages and rows #78

Closed

Description

@elementalvoid

What to build

The settings surface becomes the kit's settings component: pages and groups of named rows, each row a title, a description, a help line, and one control. Search filters the rows and lands on the page that holds a match.

Today the surface is a hand-built stack of section cards, with a house helper for the card chrome and another for the label-and-help column, and two other views borrow those helpers. Adopting the component removes the house chrome and gives the rows search.

Acceptance criteria

  • The settings surface is built from pages and groups: connection, general, limits, sync, tagging, and storage.
  • Search filters rows by title and description, lands on the matching page, and produces a sane empty result.
  • Every row keeps what it has now: the label, the help sentence, the unit, the accepted bounds, the element id, and the accessible name. Keyboard paths are unchanged — Enter and Space on switches and radios, Up and Down on numeric fields.
  • Rows with no kit field type render as custom items and stay keyboard reachable and correctly named: the sign-in method radios, the album-scope radios, the read-only storage paths, and the tag-page link.
  • Invalid values are still refused with the same wording, and a save failure still shows its notice without closing the surface.
  • The house card and label helpers leave this surface, and the views that borrowed them end up using whichever of this ticket or the diagnostics ticket is left.
  • Both themes and the narrowest supported window still lay out every row without clipping a control.

Notes

The kit has no radio field type in the pinned version, so the two radio rows need the custom-item path. Connection state, save results, and the backfill line are read from the existing models; this ticket moves layout, not state.

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. Three passes, each finding what a green suite could not:

    • The kit's sidebar is pointer-only — no focus handle, no key binding — so nine of thirteen rows needed a search query you must already know to reach. The surface now owns a six-page strip of Role::Tab elements (the same crate::tab::Tab as Shell: switch surfaces with the kit tab bar #75), and a keyboard walk test reaches every page and every control with no pointer click.
    • Paste into search never refiltered: the view had no InputEvent::Change subscription, and the harness's per-frame render hid it. Now pinned by a view-notification count that reads zero without the subscription.
    • Four numeric rows and the credential radios overflowed the group edge at the real 520 minimum, because removing the sidebar widened the panel. They stack, with a 520×480 layout pass in both themes.

    Still manual. Real screen readers, macOS/Windows. Known: 0.8.1 offers no switch to drop the sidebar's resize handle, so it is covered — no paint, no hit test, no resize cursor — rather than removed; a tree dump still shows it.

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