From f85b34f41a898ffbd39bb5c0401155086a6330e5 Mon Sep 17 00:00:00 2001 From: Ryan Smith <100248909+rsmithadhoc@users.noreply.github.com> Date: Mon, 10 Mar 2025 12:30:23 -0400 Subject: [PATCH 1/2] Checkbox aria checked (#1514) * Testing output values * Remove this * Set aria-checked to null when not indeterminate or checked * Add test --- .../components/va-checkbox/test/va-checkbox.e2e.ts | 10 ++++++++++ .../src/components/va-checkbox/va-checkbox.tsx | 11 ++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/packages/web-components/src/components/va-checkbox/test/va-checkbox.e2e.ts b/packages/web-components/src/components/va-checkbox/test/va-checkbox.e2e.ts index 26141d30f..2d51a4089 100644 --- a/packages/web-components/src/components/va-checkbox/test/va-checkbox.e2e.ts +++ b/packages/web-components/src/components/va-checkbox/test/va-checkbox.e2e.ts @@ -284,6 +284,16 @@ describe('va-checkbox', () => { expect(checkboxEl).toEqualAttribute('aria-checked', 'mixed'); }); + it('does not set aria-checked when toggled off', async () => { + const page = await newE2EPage(); + await page.setContent( + '', + ); + const checkboxEl = await page.find('va-checkbox >>> input'); + + expect(checkboxEl).not.toHaveAttribute('aria-checked'); + }); + it('does not set the data-indeterminate attribute if checked is set', async () => { const page = await newE2EPage(); await page.setContent( diff --git a/packages/web-components/src/components/va-checkbox/va-checkbox.tsx b/packages/web-components/src/components/va-checkbox/va-checkbox.tsx index 87ef35023..7fa1ff74d 100644 --- a/packages/web-components/src/components/va-checkbox/va-checkbox.tsx +++ b/packages/web-components/src/components/va-checkbox/va-checkbox.tsx @@ -232,6 +232,15 @@ export class VaCheckbox { .join(' ') // Return null so we don't add the attribute if we have an empty string .trim() || null; + + let ariaChecked: boolean | string | null; + if (indeterminate && !checked) { + ariaChecked = 'mixed'; + } else if (!indeterminate && !checked) { + ariaChecked = null; + } else { + ariaChecked = checked; + } return ( @@ -266,7 +275,7 @@ export class VaCheckbox { aria-invalid={error ? 'true' : 'false'} disabled={disabled} data-indeterminate={indeterminate && !checked} - aria-checked={indeterminate && !checked ? 'mixed' : checked} + aria-checked={ariaChecked} />