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}
/>