feat(a11y): Implement ARIA accessibility sweep and keyboard navigation

- Added visually hidden labels, IDs, and names to form inputs across all key components and pages (modals, directories, chatbots)
- Added tabIndex and onKeyDown handlers to clickable table rows in OwnerProjectDetail for keyboard accessibility
- Validated existing ARIA roles and Escape key bindings on modal components
This commit is contained in:
Satyam
2026-02-22 03:15:21 +05:30
parent b6f899afd2
commit 5fef584d7d
15 changed files with 123 additions and 55 deletions
+6 -2
View File
@@ -204,7 +204,7 @@ const Login = () => {
<form onSubmit={handleLogin} className="space-y-6 md:space-y-8">
<div className="space-y-2">
<label className="text-xs font-bold text-zinc-500 ml-1 uppercase tracking-widest">
<label htmlFor="identifier" className="text-xs font-bold text-zinc-500 ml-1 uppercase tracking-widest">
{loginType === 'employee' ? 'Employee ID' : 'Username'}
</label>
<div className="relative group">
@@ -212,6 +212,8 @@ const Login = () => {
{loginType === 'customer' ? <User size={20} /> : <Briefcase size={20} />}
</div>
<input
id="identifier"
name="identifier"
type="text"
value={identifier}
onChange={(e) => setIdentifier(e.target.value)}
@@ -223,7 +225,7 @@ const Login = () => {
<div className="space-y-2">
<div className="flex justify-between items-center ml-1">
<label className="text-xs font-bold text-zinc-500 uppercase tracking-widest">Password</label>
<label htmlFor="password" className="text-xs font-bold text-zinc-500 uppercase tracking-widest">Password</label>
<button type="button" className="text-xs font-semibold text-zinc-400 hover:text-zinc-600 dark:text-zinc-500 dark:hover:text-zinc-300 transition-colors">
Forgot Password?
</button>
@@ -233,6 +235,8 @@ const Login = () => {
<Lock size={20} />
</div>
<input
id="password"
name="password"
type={showPassword ? "text" : "password"}
value={password}
onChange={(e) => setPassword(e.target.value)}