feat(portal-shell): move theme switcher to footer, drop redundant settings icon #162
Reference in New Issue
Block a user
Delete Branch "feat/portal-shell-theme-switcher-to-footer"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Three coupled chrome adjustments in
portal-shell's shell layout, all motivated by the same realisation that the UserMenu introduced in #149 made the header's standalone Settings icon redundant and surfaced an inconsistency in the theme switcher's placement (header for everyone, soon to be split between header and user-menu depending on auth state).What lands
1. Drop the standalone Settings button from the header
The UserMenu already carries a "Settings (Soon)" row for authenticated users, and Settings has no meaning for anonymous traffic. The header icon pointed nowhere; keeping it doubled the surface and forced readers to guess which control to use.
header.action.settingsis removed frommessages.fr.xlfin the same step — the i18n-strict prod build is now back in sync with the source.2. Move
<app-theme-switcher>from the header to the footerThe switcher now lives beside
<app-locale-switcher>in a single device-prefs cluster on the right side of the footer. Two reasons:3. Reshape the footer into two semantic clusters
The Accessibility statement link moves from the right cluster (where it sat alongside the locale switcher) to the left, joining the copyright with a typographic separator (
·). Left = static info / legal anchor; right = interactive prefs the reader controls.Keyboard order naturally follows: a Tab-traversal from the main content hits the informational anchor before the interactive controls — a small a11y win.
What I left alone
portal-admin's header / footer. No theme switcher there in v1 (the admin chrome is brand-primary-600 hardcoded); no settings icon either. ADR-0020 explicitly trims that admin chrome relative to the user shell — nothing to align right now.Notes for the reviewer
·text separator rather than a CSS border? Border would force vertical alignment math (height, dark-mode color) for one line of footer text; a typographic mid-dot inherits text color, scales with the line, and isaria-hiddenso screen readers don't read it as "middle dot". Smaller surface for one less moving piece.<nav aria-label="Legal">is preserved verbatim (just moved into the left<div>rather than the right). The accessibility statement keeps the same focus styles, keyboard behavior, and routerLink target.Test plan
pnpm nx test portal-shell— 43 specs pass (was 40; +3 net: dropped a Settings-button assertion + the "embeds theme switcher" header assertion swapped to its inverse, added two footer assertions for the theme switcher's new home + the cluster grouping).pnpm nx run-many -t lint test build --projects=portal-shell— green.pnpm nx build portal-shell --configuration=production— i18n-strict prod build passes, confirming theheader.action.settingsxlf removal didn't leave a dangling source-locale reference.pnpm nx serve portal-shellin a browser, confirm:© 2026 APF France handicap · Accessibility statement, the dot being decorative (no link).Follow-ups (optional)