From 6337373f0e0a4aa9a39bb093ceadcf13144bad86 Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Fri, 11 Jul 2025 08:17:28 -0700 Subject: [PATCH 1/9] chore: clean up a11y analysis code --- .changeset/warm-olives-applaud.md | 5 + .../2-analyze/visitors/RegularElement.js | 2 +- .../2-analyze/visitors/SvelteElement.js | 2 +- .../visitors/shared/a11y/constants.js | 318 +++++ .../shared/{a11y.js => a11y/utils.js} | 1070 +++++++---------- 5 files changed, 743 insertions(+), 654 deletions(-) create mode 100644 .changeset/warm-olives-applaud.md create mode 100644 packages/svelte/src/compiler/phases/2-analyze/visitors/shared/a11y/constants.js rename packages/svelte/src/compiler/phases/2-analyze/visitors/shared/{a11y.js => a11y/utils.js} (52%) diff --git a/.changeset/warm-olives-applaud.md b/.changeset/warm-olives-applaud.md new file mode 100644 index 000000000000..63a7803b99d0 --- /dev/null +++ b/.changeset/warm-olives-applaud.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +chore: clean up a11y analysis code diff --git a/packages/svelte/src/compiler/phases/2-analyze/visitors/RegularElement.js b/packages/svelte/src/compiler/phases/2-analyze/visitors/RegularElement.js index d5689e5d5592..e15f68609ca2 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/visitors/RegularElement.js +++ b/packages/svelte/src/compiler/phases/2-analyze/visitors/RegularElement.js @@ -9,7 +9,7 @@ import * as e from '../../../errors.js'; import * as w from '../../../warnings.js'; import { create_attribute, is_custom_element_node } from '../../nodes.js'; import { regex_starts_with_newline } from '../../patterns.js'; -import { check_element } from './shared/a11y.js'; +import { check_element } from './shared/a11y/utils.js'; import { validate_element } from './shared/element.js'; import { mark_subtree_dynamic } from './shared/fragment.js'; diff --git a/packages/svelte/src/compiler/phases/2-analyze/visitors/SvelteElement.js b/packages/svelte/src/compiler/phases/2-analyze/visitors/SvelteElement.js index c45859408c4b..795b9776eb58 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/visitors/SvelteElement.js +++ b/packages/svelte/src/compiler/phases/2-analyze/visitors/SvelteElement.js @@ -2,7 +2,7 @@ /** @import { Context } from '../types' */ import { NAMESPACE_MATHML, NAMESPACE_SVG } from '../../../../constants.js'; import { is_text_attribute } from '../../../utils/ast.js'; -import { check_element } from './shared/a11y.js'; +import { check_element } from './shared/a11y/utils.js'; import { validate_element } from './shared/element.js'; import { mark_subtree_dynamic } from './shared/fragment.js'; diff --git a/packages/svelte/src/compiler/phases/2-analyze/visitors/shared/a11y/constants.js b/packages/svelte/src/compiler/phases/2-analyze/visitors/shared/a11y/constants.js new file mode 100644 index 000000000000..4161e7d997d0 --- /dev/null +++ b/packages/svelte/src/compiler/phases/2-analyze/visitors/shared/a11y/constants.js @@ -0,0 +1,318 @@ +/** @import { ARIARoleRelationConcept } from 'aria-query' */ +import { roles as roles_map, elementRoles } from 'aria-query'; +// @ts-expect-error package doesn't provide typings +import { AXObjects, elementAXObjects } from 'axobject-query'; +export const aria_attributes = + 'activedescendant atomic autocomplete busy checked colcount colindex colspan controls current describedby description details disabled dropeffect errormessage expanded flowto grabbed haspopup hidden invalid keyshortcuts label labelledby level live modal multiline multiselectable orientation owns placeholder posinset pressed readonly relevant required roledescription rowcount rowindex rowspan selected setsize sort valuemax valuemin valuenow valuetext'.split( + ' ' + ); +/** @type {Record} */ +export const a11y_required_attributes = { + a: ['href'], + area: ['alt', 'aria-label', 'aria-labelledby'], + // html-has-lang + html: ['lang'], + // iframe-has-title + iframe: ['title'], + img: ['alt'], + object: ['title', 'aria-label', 'aria-labelledby'] +}; +export const a11y_distracting_elements = ['blink', 'marquee']; + +// this excludes `` and `