Skip to content

feat(ui): the topbar avatar becomes the user menu — language, identity, session - #737

Merged
smunini merged 2 commits into
mainfrom
feat/725-avatar-menu
Aug 27, 2026
Merged

feat(ui): the topbar avatar becomes the user menu — language, identity, session#737
smunini merged 2 commits into
mainfrom
feat/725-avatar-menu

Conversation

@angela-helios

@angela-helios angela-helios commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Closes #725proposal B (account card), as decided on the issue.

The topbar avatar is a <details class="menu"> disclosure (tenant/version-selector idiom, works without JavaScript): a centered 56px avatar over the signed-in name and secondary line, the language selector as a segmented EN/ES/DE row of real ?lang= links (full language names ride aria-label), and a full-width Sign out row gated on a session existing — which it cannot yet (#320), so today the local-operator state renders.

Local (real, light) Signed in (mocked, light) Signed in (mocked, dark)
local signed light signed dark

The avatar fallback chain (IdP photo → initials → generic user.svg) sits in the template behind Status::user_* — the seam where the claim inventory (#724) plugs in; #738 tracks that wiring plus /ui/logout.

Decisions recorded on the issue: theme toggle stays in the topbar; signed-out shows a Local user row rather than a dead-end Sign in.

Also: the inline lang-switcher nav and its CSS are removed; user.svg/logout.svg join the icon set; new catalog keys in all three locales; the nojs spec drives the language switch through the open menu; a router test pins the menu structure and the absence of Sign out while signed out. Full helios-ui ring plus design-system, a11y (light/dark), theme, and nojs Playwright projects green.

Closes #725.

A details disclosure like the tenant and version selectors, working
without JavaScript: identity block (photo, then initials, then a generic
user icon; /ui carries no principal yet, so the local-operator state
renders), the language selector moved out of the topbar as real ?lang=
links with aria-current, and a Sign out row gated on a session existing,
which it cannot yet (#320). Status::user_* is the seam where the IdP
profile claims (#724) surface.

Decisions recorded: the theme toggle stays in the topbar (one-click,
instant-feedback control - a click deeper would slow the most common
adjustment), and the signed-out state shows a Local user row rather than
a Sign in affordance that would dead-end without a browser login flow.

The inline lang-switcher nav and its CSS are gone; the nojs spec drives
the switch through the open menu.
@codecov

codecov Bot commented Aug 27, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

Proposal B, as decided on #725: centered 56px avatar over the name and
secondary line, the language selector as a segmented EN/ES/DE row (full
names stay on aria-label), Sign out as a full-width row - still gated on
a session existing.
@angela-helios
angela-helios marked this pull request as ready for review August 27, 2026 19:49
@smunini
smunini merged commit 92c3762 into main Aug 27, 2026
26 checks passed
@smunini
smunini deleted the feat/725-avatar-menu branch August 27, 2026 21:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Design the top-right user avatar menu: language selector, user info, and logout

2 participants