feat(web): consolidate shared UI kit across admin/settings/auth #471

Merged
nrupard merged 1 commit from fix/BUNYIP-467-shared-kit into main 2026-08-04 21:37:21 +02:00
Owner

Consolidates the bunyip-web shared UI kit so admin/settings/auth surfaces stop re-implementing the same patterns. Implements the BUNYIP-467 slice of the 2026-08-04 UI audit (findings F10, F12, F13, F14, F15).

Changes

  • F10: admin config pages (tier-settings, email-config, auto-ban-settings, stripe) now render error_box("Could not load X config.") when the API config fetch returns None, instead of silently drawing an empty form. Matches the reachability pattern the list handlers already use (BUNYIP-461).
  • F12: the account feedback form routes its banners through success_box/error_box and its inputs through dashboard_input(), and its spacing is normalised to the dashboard scale (space-y-4, gap-4). The message textarea keeps its ~7-row height via min-h-[168px] (needed because dashboard_input() sets h-10, which would otherwise shrink it).
  • F13: the docs page textareas route through dashboard_input() for a consistent border/focus treatment.
  • F14: auth_card is refactored into a private auth_card_shell(icon_spec: Option<...>, ...) with two thin public wrappers: auth_card (icon bubble, unchanged public signature so no call site churns) and a new auth_card_plain for the icon-less login card, which previously hand-rolled its own shell.
  • F15: the pagination control pager(base, param, page, total_pages) is promoted to views::ui as the single implementation. The duplicate settings_pager is deleted and the settings + admin call sites route through the shared pager. Dead imports removed.

Verification

just check-container (dockerized fmt + clippy + workspace tests) green.

#BUNYIP-467

Consolidates the bunyip-web shared UI kit so admin/settings/auth surfaces stop re-implementing the same patterns. Implements the BUNYIP-467 slice of the 2026-08-04 UI audit (findings F10, F12, F13, F14, F15). ## Changes - F10: admin config pages (tier-settings, email-config, auto-ban-settings, stripe) now render `error_box("Could not load X config.")` when the API config fetch returns `None`, instead of silently drawing an empty form. Matches the reachability pattern the list handlers already use (BUNYIP-461). - F12: the account feedback form routes its banners through `success_box`/`error_box` and its inputs through `dashboard_input()`, and its spacing is normalised to the dashboard scale (`space-y-4`, `gap-4`). The message textarea keeps its ~7-row height via `min-h-[168px]` (needed because `dashboard_input()` sets `h-10`, which would otherwise shrink it). - F13: the docs page textareas route through `dashboard_input()` for a consistent border/focus treatment. - F14: `auth_card` is refactored into a private `auth_card_shell(icon_spec: Option<...>, ...)` with two thin public wrappers: `auth_card` (icon bubble, unchanged public signature so no call site churns) and a new `auth_card_plain` for the icon-less login card, which previously hand-rolled its own shell. - F15: the pagination control `pager(base, param, page, total_pages)` is promoted to `views::ui` as the single implementation. The duplicate `settings_pager` is deleted and the settings + admin call sites route through the shared `pager`. Dead imports removed. ## Verification `just check-container` (dockerized fmt + clippy + workspace tests) green. #BUNYIP-467
feat(web): consolidate shared UI kit across admin/settings/auth
All checks were successful
E2E PR gate / Install + reachability (no deployment secrets) (pull_request) Successful in 20s
Check / fmt + clippy + build + tests (pull_request) Successful in 7m26s
Create release / Create release from merged PR (pull_request) Has been skipped
73fc2bbdec
Implements the BUNYIP-467 slice of the 2026-08-04 UI audit (F10, F12, F13, F14, F15). Admin config pages surface error_box when their config fetch returns None instead of drawing an empty form; the account feedback form routes banners/inputs through the shared success_box/error_box/dashboard_input helpers and keeps its ~7-row message box via min-h-[168px]; the docs textareas share dashboard_input; auth_card is refactored into a private auth_card_shell with auth_card (unchanged signature) and a new icon-less auth_card_plain that the login card now uses; and the pager control is promoted to views::ui as the single implementation, deleting the duplicate settings_pager and routing all settings + admin call sites through it.

#BUNYIP-467
nrupard scheduled this pull request to auto merge when all checks succeed 2026-08-04 21:32:21 +02:00
nrupard deleted branch fix/BUNYIP-467-shared-kit 2026-08-04 21:37:21 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/bunyip!471
No description provided.