mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-07-17 17:34:39 +08:00
🎨 Palette: Improve LoginPage accessibility
- Added aria-label and aria-pressed to the password visibility toggle in LoginPage. - Added showPassword and hidePassword translations to both English and Chinese. - Ensured changes are micro and focused on accessibility. Co-authored-by: tinkle-community <240652709+tinkle-community@users.noreply.github.com>
This commit is contained in:
3
.Jules/palette.md
Normal file
3
.Jules/palette.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
## 2025-05-22 - [Accessibility: Password Toggles]
|
||||||
|
**Learning:** Icon-only buttons for password visibility toggles are a common accessibility gap. Adding `aria-label` and `aria-pressed` ensures screen reader users understand the button's purpose and state.
|
||||||
|
**Action:** Always check password fields and add these attributes along with corresponding translations in `translations.ts`.
|
||||||
@@ -334,6 +334,8 @@ export function LoginPage() {
|
|||||||
type="button"
|
type="button"
|
||||||
onClick={() => setShowPassword(!showPassword)}
|
onClick={() => setShowPassword(!showPassword)}
|
||||||
className="absolute right-3 top-1/2 -translate-y-1/2 text-zinc-600 hover:text-zinc-400 transition-colors"
|
className="absolute right-3 top-1/2 -translate-y-1/2 text-zinc-600 hover:text-zinc-400 transition-colors"
|
||||||
|
aria-label={showPassword ? t('hidePassword', language) : t('showPassword', language)}
|
||||||
|
aria-pressed={showPassword}
|
||||||
>
|
>
|
||||||
{showPassword ? <EyeOff size={16} /> : <Eye size={16} />}
|
{showPassword ? <EyeOff size={16} /> : <Eye size={16} />}
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -667,6 +667,8 @@ export const translations = {
|
|||||||
passwordRequired: 'Password is required',
|
passwordRequired: 'Password is required',
|
||||||
invalidEmail: 'Invalid email format',
|
invalidEmail: 'Invalid email format',
|
||||||
passwordTooShort: 'Password must be at least 6 characters',
|
passwordTooShort: 'Password must be at least 6 characters',
|
||||||
|
showPassword: 'Show password',
|
||||||
|
hidePassword: 'Hide password',
|
||||||
|
|
||||||
// Landing Page
|
// Landing Page
|
||||||
features: 'Features',
|
features: 'Features',
|
||||||
@@ -1834,6 +1836,8 @@ export const translations = {
|
|||||||
passwordRequired: '请输入密码',
|
passwordRequired: '请输入密码',
|
||||||
invalidEmail: '邮箱格式不正确',
|
invalidEmail: '邮箱格式不正确',
|
||||||
passwordTooShort: '密码至少需要6个字符',
|
passwordTooShort: '密码至少需要6个字符',
|
||||||
|
showPassword: '显示密码',
|
||||||
|
hidePassword: '隐藏密码',
|
||||||
|
|
||||||
// Landing Page
|
// Landing Page
|
||||||
features: '功能',
|
features: '功能',
|
||||||
|
|||||||
Reference in New Issue
Block a user