mirror of https://github.com/docusealco/docuseal
- C1: Remove maximum-scale/user-scalable=no from viewport meta (WCAG 1.4.4) - C2: Restore focus indicators on 7 inputs — replace outline-none/ring-0 with ring (WCAG 2.4.7) - C3: Add focus trap + dialog role to turbo_modal.js; focus on open, restore on close (WCAG 2.4.3, 2.1.2) - C4/C6: Replace all alert()/prompt() with ARIA live regions and custom password dialog (WCAG 3.3.1, 4.1.3) - C5: Add aria-label to signature text input, signing reason select, checkbox and radio in area.vue (WCAG 1.3.1, 4.1.2) - C7: Replace text-gray-100 → text-white on dark code blocks in _embedding.html.erb (WCAG 1.4.3) - H1: Change submission name div → h1 in submit_form/show.html.erb (WCAG 2.4.6) - H2: form.html.erb already has lang attr (confirmed correct) - H3: Add skip link to form.html.erb layout (WCAG 2.4.1) - H4: Replace text-gray-300/400 → text-gray-600 on light backgrounds across 5 files (WCAG 1.4.3) - H5: Replace <a> close buttons → <button> in turbo_modal partials (WCAG 4.1.2) - H6: Fix duplicate id="decline_button" → header/scroll variants (WCAG 4.1.1) - L10: Add role="button" tabindex="0" to html_modal label close (WCAG 4.1.2) - Add shared aria_announce.js utility for assertive/polite live region announcements - Add aria-labelledby to turbo modal dialog with per-instance IDs Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>pull/599/head
parent
692341dd2d
commit
e41dd55716
@ -0,0 +1,18 @@
|
|||||||
|
export function announceError (message, timeout = 7000) {
|
||||||
|
const el = document.createElement('div')
|
||||||
|
el.setAttribute('role', 'alert')
|
||||||
|
el.setAttribute('aria-live', 'assertive')
|
||||||
|
el.className = 'sr-only'
|
||||||
|
el.textContent = message
|
||||||
|
document.body.append(el)
|
||||||
|
setTimeout(() => el.remove(), timeout)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function announcePolite (message, timeout = 5000) {
|
||||||
|
const el = document.createElement('div')
|
||||||
|
el.setAttribute('aria-live', 'polite')
|
||||||
|
el.className = 'sr-only'
|
||||||
|
el.textContent = message
|
||||||
|
document.body.append(el)
|
||||||
|
setTimeout(() => el.remove(), timeout)
|
||||||
|
}
|
||||||
@ -1,5 +1,5 @@
|
|||||||
<div class="mt-2 mb-1">
|
<div class="mt-2 mb-1">
|
||||||
<div class="tooltip w-full" data-tip="<%= t('unlock_with_docuseal_pro') %>">
|
<div class="tooltip w-full" data-tip="<%= t('unlock_with_docuseal_pro') %>">
|
||||||
<%= link_to submitter.sent_at? ? t('re_send_sms') : t('send_sms'), Docuseal.multitenant? ? console_redirect_index_path(redir: "#{Docuseal::CONSOLE_URL}/plans") : "#{Docuseal::CLOUD_URL}/sign_up?#{{ redir: "#{Docuseal::CONSOLE_URL}/on_premises" }.to_query}", class: 'btn btn-sm btn-primary text-gray-400 w-full' %>
|
<%= link_to submitter.sent_at? ? t('re_send_sms') : t('send_sms'), Docuseal.multitenant? ? console_redirect_index_path(redir: "#{Docuseal::CONSOLE_URL}/plans") : "#{Docuseal::CLOUD_URL}/sign_up?#{{ redir: "#{Docuseal::CONSOLE_URL}/on_premises" }.to_query}", class: 'btn btn-sm btn-primary text-gray-600 w-full' %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Loading…
Reference in new issue