From d0576d77fbaa3747d491a4d8c526d6071e07c0d7 Mon Sep 17 00:00:00 2001
From: maphew <486200+maphew@users.noreply.github.com>
Date: Fri, 11 Sep 2026 04:22:49 +0000
Subject: [PATCH 1/3] fix(web): label forms for screen readers
Add accessible names and error links to six forms. Follow issue #4172.
The password show/hide buttons now stay in the keyboard tab order. They have aria-label, aria-pressed, and aria-controls. The length rule is linked to the password input.
The other changes link a label to its input in the Create Town dialog, mark the Invite Member email input invalid and link its error, name the app prompt and TTFB search inputs, and link the Wasteland name error and organization selector.
Add a server-render test for the password fields.
---
.../new/NewWastelandWizardClient.tsx | 24 +++++++++--
.../alerting-ttfb/TtfbAlertingContent.tsx | 1 +
.../components/app-builder/PromptInput.tsx | 1 +
.../deployments/PasswordFormFields.test.ts | 41 +++++++++++++++++++
.../deployments/PasswordFormFields.tsx | 13 ++++--
.../components/gastown/CreateTownDialog.tsx | 8 +++-
.../members/InviteMemberDialog.tsx | 8 +++-
7 files changed, 87 insertions(+), 9 deletions(-)
create mode 100644 apps/web/src/components/deployments/PasswordFormFields.test.ts
diff --git a/apps/web/src/app/(app)/wasteland/new/NewWastelandWizardClient.tsx b/apps/web/src/app/(app)/wasteland/new/NewWastelandWizardClient.tsx
index 32f631d218..4f17ac70ab 100644
--- a/apps/web/src/app/(app)/wasteland/new/NewWastelandWizardClient.tsx
+++ b/apps/web/src/app/(app)/wasteland/new/NewWastelandWizardClient.tsx
@@ -661,14 +661,21 @@ function IntentStep({
onChange={e => setName(e.target.value)}
maxLength={NAME_MAX_LENGTH}
autoFocus
+ aria-invalid={Boolean(nameError)}
+ aria-describedby={nameError ? 'wasteland-name-error' : undefined}
/>
- {nameError &&
{nameError}
}
+ {nameError && (
+
+ {nameError}
+
+ )}
{/* Ownership */}
-
+
{
if (lockedOrgId) return;
@@ -701,7 +708,12 @@ function IntentStep({
) : (
)}
- {orgError &&