From 76f0fa7426270d871c8e984a002bb0ca7e6e3acb Mon Sep 17 00:00:00 2001 From: Marcelo Paiva Date: Thu, 26 Feb 2026 10:05:49 -0500 Subject: [PATCH] Fix all accessibility gaps identified in codebase audit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit HIGH PRIORITY — Icon-only buttons with no accessible name: - _toggle_view.html.erb: aria-label on Templates/Submissions view buttons - _template.html.erb: aria-label on move, restore, edit, clone, archive/delete (also fixes bug: was aria_label: t('restore') for all, now dynamic) - _title.html.erb: aria-label on move-folder pencil link - submissions/show.html.erb: aria-label on download options dropdown toggle, audit log link, event log link, edit submitter pencil in parties view - submit_form/show.html.erb: aria-label on scroll decline button (mobile icon-only) - contenteditable.vue: span→role=button + aria-label + keyboard handlers (Enter/Space) on edit pencil; aria-hidden on decorative icon - signature_step.vue: aria-label + aria-hidden on minimize link MEDIUM PRIORITY — Form inputs with missing labels: - text_step.vue: conditional aria-label fallback on input/textarea when no visible label rendered (showFieldNames=false or field has no name) - area.vue: aria-label on multiple-select checkbox (matches radio pattern) MEDIUM PRIORITY — Images with generic hardcoded alt text: - area.vue: replace 'Image'/'Stamp'/'Knowledge-based authentication' with t('image')/t('stamp')/t('kba') for i18n consistency MEDIUM PRIORITY — Dropdown/menu ARIA: - _navbar.html.erb: aria-controls="user-menu-list" on user menu trigger; id="user-menu-list" on menu