From 4ddbf6d462f8e52dca57c2f1af280a0e38cff670 Mon Sep 17 00:00:00 2001 From: Andrew Moore Date: Sat, 11 Apr 2026 00:55:28 -0600 Subject: [PATCH] feat: 4 new LiveView rules (#102, #103, #105, #106) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Builds on the LiveViewRules framework shipped in 0.13.0 by adding four new rules that catch Phoenix-specific a11y anti-patterns axe-core can't see. Each rule is a single module in lib/excessibility/live_view_rules/rules/, auto-discovered at compile time. - :toggle_missing_aria_state (#102) Parses the serialized JSON in phx-click to detect JS.toggle/show/hide operations; flags triggers that have no aria-expanded. Surfaces the target id from the JS command in the finding message. - :click_away_without_escape (#103) Flags phx-click-away without a matching phx-window-keydown or phx-keydown paired with phx-key="Escape". role="dialog" / role="alertdialog" are accepted as evidence of keyboard dismissal. - :debounce_without_live_region (#105) Conservative heuristic: flags only when the whole snapshot has zero aria-live / role=status|alert|log regions. Avoids false positives when an app announces updates somewhere else in the page. - :hidden_form_control_without_aria (#106) Flags when the wrapping