From 5fef584d7dcbaa21e9dbeb13adaef1d003ab67b8 Mon Sep 17 00:00:00 2001 From: Satyam <95536056+Satyam-Rastogi@users.noreply.github.com> Date: Sun, 22 Feb 2026 03:15:21 +0530 Subject: [PATCH] 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 --- src/components/Chatbot.jsx | 6 +++ .../contractor/FinancialSummaryModal.jsx | 9 +++-- .../dashboard/AgentSelectionModal.jsx | 3 ++ src/components/maps/PropertyDetailDrawer.jsx | 24 +++++++---- src/components/owner/CreateItemModal.jsx | 10 ++++- .../owner/FinancialDetailsModal.jsx | 3 ++ .../vendor/VendorFinancialSummaryModal.jsx | 13 +++--- src/pages/AdminSchedule.jsx | 9 +++++ src/pages/CustomerProfile.jsx | 40 ++++++++++--------- src/pages/Login.jsx | 8 +++- src/pages/owner/OwnerProjectDetail.jsx | 4 +- src/pages/owner/OwnerProjectList.jsx | 40 +++++++++++-------- src/pages/owner/PeopleDirectory.jsx | 3 ++ src/pages/owner/VendorDirectory.jsx | 3 ++ src/pages/vendor/VendorOrders.jsx | 3 ++ 15 files changed, 123 insertions(+), 55 deletions(-) diff --git a/src/components/Chatbot.jsx b/src/components/Chatbot.jsx index f36ba3f..654a5fb 100644 --- a/src/components/Chatbot.jsx +++ b/src/components/Chatbot.jsx @@ -716,7 +716,10 @@ const Chatbot = (props) => { {/* Input */}
+ setInput(e.target.value)} @@ -817,7 +820,10 @@ const Chatbot = (props) => { {/* Input */}
+ setInput(e.target.value)} diff --git a/src/components/contractor/FinancialSummaryModal.jsx b/src/components/contractor/FinancialSummaryModal.jsx index 198452a..7c8a22b 100644 --- a/src/components/contractor/FinancialSummaryModal.jsx +++ b/src/components/contractor/FinancialSummaryModal.jsx @@ -124,8 +124,11 @@ const FinancialSummaryModal = ({ isOpen, onClose, role, data }) => { {/* Toolbar */}
+ { {item.status} + }`}>{item.status}
))} @@ -199,8 +202,8 @@ const FinancialSummaryModal = ({ isOpen, onClose, role, data }) => { {item.status} diff --git a/src/components/dashboard/AgentSelectionModal.jsx b/src/components/dashboard/AgentSelectionModal.jsx index fce8ba9..534a87f 100644 --- a/src/components/dashboard/AgentSelectionModal.jsx +++ b/src/components/dashboard/AgentSelectionModal.jsx @@ -33,8 +33,11 @@ export const AgentSelectionModal = ({ isOpen, onClose, onSelect }) => { {/* Search */}
+ { ); }; -const InputGroup = ({ label, children }) => ( +const InputGroup = ({ label, children, htmlFor }) => (
- +
{children}
); @@ -256,6 +256,8 @@ const PropertyDetailDrawer = ({ isOpen, onClose, data, newLocation, onSave, load // Helper for Inputs const RenderInput = ({ label, field, type = "text", placeholder, options, locked = false }) => { + const inputId = `prop-${field}`; + if (!isEditing) { return ( @@ -277,9 +279,11 @@ const PropertyDetailDrawer = ({ isOpen, onClose, data, newLocation, onSave, load } return ( - + {options ? ( ) : ( setFormData({ ...formData, [field]: e.target.value })} @@ -374,10 +380,10 @@ const PropertyDetailDrawer = ({ isOpen, onClose, data, newLocation, onSave, load {/* Status Selector */} {isEditing && (
- -
+ Canvassing Status +
{["Neutral", "Hot Lead", "Renovated", "Customer", "Not Interested"].map(s => ( - + ))}
@@ -551,10 +557,12 @@ const PropertyDetailDrawer = ({ isOpen, onClose, data, newLocation, onSave, load {/* SECTION 6: NOTES */}
-

Field Notes

+

{isEditing ? (