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:
@@ -230,14 +230,20 @@ const AdminSchedule = () => {
|
||||
</button>
|
||||
<div className="border-t border-zinc-200 dark:border-zinc-700/50 p-3">
|
||||
<p className="text-xs font-semibold text-zinc-500 dark:text-zinc-400 mb-2">Custom Range</p>
|
||||
<label htmlFor="custom-date-start" className="sr-only">Start Date</label>
|
||||
<input
|
||||
id="custom-date-start"
|
||||
name="custom-date-start"
|
||||
type="date"
|
||||
value={customDateRange.start}
|
||||
onChange={(e) => setCustomDateRange(prev => ({ ...prev, start: e.target.value }))}
|
||||
className="w-full px-2 py-1 text-xs bg-white dark:bg-zinc-900 border border-zinc-200 dark:border-zinc-700 rounded mb-2 text-zinc-900 dark:text-white"
|
||||
placeholder="Start date"
|
||||
/>
|
||||
<label htmlFor="custom-date-end" className="sr-only">End Date</label>
|
||||
<input
|
||||
id="custom-date-end"
|
||||
name="custom-date-end"
|
||||
type="date"
|
||||
value={customDateRange.end}
|
||||
onChange={(e) => setCustomDateRange(prev => ({ ...prev, end: e.target.value }))}
|
||||
@@ -272,9 +278,12 @@ const AdminSchedule = () => {
|
||||
{availableStatuses.map(status => (
|
||||
<label
|
||||
key={status}
|
||||
htmlFor={`status-filter-${status.replace(/\s+/g, '-')}`}
|
||||
className="flex items-center gap-2 px-4 py-2 text-sm text-zinc-700 dark:text-zinc-200 hover:bg-zinc-100 dark:hover:bg-zinc-800 cursor-pointer transition-colors"
|
||||
>
|
||||
<input
|
||||
id={`status-filter-${status.replace(/\s+/g, '-')}`}
|
||||
name={`status-filter-${status.replace(/\s+/g, '-')}`}
|
||||
type="checkbox"
|
||||
checked={statusFilter.includes(status)}
|
||||
onChange={() => toggleStatusFilter(status)}
|
||||
|
||||
Reference in New Issue
Block a user