fix(ui): accessibility fixes on the login, account and organization pages - #137
Open
BatLeDev wants to merge 5 commits into
Open
fix(ui): accessibility fixes on the login, account and organization pages#137BatLeDev wants to merge 5 commits into
BatLeDev wants to merge 5 commits into
Conversation
Findings from the RGAA re-audit of a customer portal, on the two pages
served by simple-directory inside it.
Login page:
- the logo alternative was the generic "Site logo" i18n string, it now
uses the site title when there is one (RGAA 1.7)
- the served document had no <title>, only the one the SPA sets at
runtime, so the W3C validator rejected it: the built index.html now
carries a {SITE_TITLE} placeholder filled by the site title (RGAA 8.2)
- vite injects <meta property="csp-nonce" nonce="…"> for html.cspNonce
without the content attribute the HTML spec requires next to property,
which is the second error the validator reported (RGAA 8.2)
Account page:
- the email address was displayed in a disabled field, dimmed to 38%
opacity, which drops its contrast well below 4.5:1. It is now readonly,
which keeps it readable and focusable, with a hint saying it cannot be
changed (RGAA 3.2)
- the avatar image had no alt attribute (RGAA 1.1)
The page keeps starting its titles at h2: it is always embedded in an
iframe, the h1 belongs to the host page.
- the four menus opened by a v-fab (create a department, edit the departments, invite a partner organization) had no accessible name: v-fab renders its title on the wrapping div, not on the button it contains. They go back to v-btn, like the invite member button right next to them, which was already correct (RGAA 7.1) - the bell button of the notification menu had no name at all, it gets a title (RGAA 7.1) - the organization, department, member and partner avatars were v-img without alt, so img elements with no alt attribute at all (RGAA 1.1)
- the 2FA roles select and the members role filter were fed the raw role keys (admin, contrib, user) while the readable labels sit right next to them in rolesLabels, which the same page even lets you edit. Both now build their items from those labels, with the configured defaults as fallback, and the role shown under each member follows - the Vuetify 4 upgrade replaced the removed default uppercase on buttons with text-transform: capitalize, which capitalizes every word: "Renouveler Le Mot De Passe". The rule is dropped, buttons render their label as written, and the four labels that were written in lowercase because they relied on it are capitalized
BatLeDev
marked this pull request as draft
August 13, 2026 15:45
Carries the boundIp session field that lib-express 1.25.0 reads, without which tsc rejects the assignment in setSessionCookies.
- Account page email input was changed from disabled to readonly for accessibility (RGAA 3.2 contrast); assert readonly/non-editable instead of disabled. - Raise navigationTimeout to 15s for the e2e project: full page loads (incl. superadmin login) can exceed 5s when the whole suite loads the server, causing flaky failures.
BatLeDev
marked this pull request as ready for review
August 14, 2026 08:57
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Accessibility fixes on the pages served by simple-directory, coming from the RGAA re-audit of a customer portal, plus two regressions of the Vuetify 4 upgrade found along the way.
Login page
Site logoi18n string, it now uses the site title when there is one (RGAA 1.7)<title>, only the one the SPA sets at runtime, so the W3C validator rejected it. The builtindex.htmlnow carries a{SITE_TITLE}placeholder filled by the site title, HTML-escaped before injection<meta property="csp-nonce" nonce="…">forhtml.cspNoncewithout thecontentattribute the HTML spec requires next toproperty, the second error the validator reported. A smalltransformIndexHtmlplugin adds it (RGAA 8.2)Account page
The page keeps starting its titles at h2: it is always embedded in an iframe, the h1 belongs to the host page.
Organization page
v-fab(create a department, edit the departments, invite a partner organization) had no accessible name:v-fabrenders its title on the wrapping div, not on the button it contains. They go back tov-btn, like the invite member button right next to them, which was already correct (RGAA 7.1)v-imgwithout alt, soimgelements with no alt attribute at all (RGAA 1.1)Vuetify 4 upgrade leftovers
admin,contrib,user) while the readable labels sit right next to them inrolesLabels, which the same page even lets you edit. Both now build their items from those labels, with the configured defaults as fallback, and the role shown under each member followstext-transform: capitalize, which capitalizes every word: "Renouveler Le Mot De Passe". The rule is dropped, buttons render their label as written, and the four labels that were written in lowercase because they relied on it are capitalized