Archilyzer · Source

archilyzer

Archilyzer
git clone https://archilyzer.pages.dev/source/archilyzer.git
Log | Files | Refs | README | LICENSE

commit eb7a38d3fd0b4746330adbc3a5f26f21265a4397
parent e0676e48592b6c6879a5a034a3e7be1d7f3fb0aa
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Wed, 30 Sep 2026 18:01:54 -0400

common: the Search in refusal line is a polite live region, not a second role="status"

From xl the Filters panel is always mounted, so the always-mounted line
gave the search page a second "status" beside the video modal's, and
modal-digest.spec's getByRole("status") found two (the first full run after
the review, 213 passed, 1 failed). aria-live="polite" with aria-atomic is
announced the same way on a change of its text and is no status role.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

Diffstat:
Mcommon/components/FiltersPanel.tsx | 10+++++++---
Mexport/e2e/search-in.spec.ts | 2+-
2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/common/components/FiltersPanel.tsx b/common/components/FiltersPanel.tsx @@ -450,11 +450,15 @@ export default function FiltersPanel({ )} {/* Always mounted, empty unless Search is refused: a live region is announced when its content changes, which several screen - readers miss for a region that appears with its text. The - Search button is described by the bar's own copy of these + readers miss for a region that appears with its text. A polite + live region rather than role="status": this panel is always + mounted from xl, and a page-wide second "status" would be a + second answer to `getByRole("status")` (modal-digest.spec). + The Search button is described by the bar's own copy of these words (this panel may be a closed sheet). */} <span - role="status" + aria-live="polite" + aria-atomic="true" data-testid="search-in-empty" className={cn("text-xs text-warning", draftSearchInEmpty && "basis-full")} > diff --git a/export/e2e/search-in.spec.ts b/export/e2e/search-in.spec.ts @@ -182,7 +182,7 @@ test.describe("Search in", () => { const empty = page.getByTestId("search-in-empty"); await expect(submit).toBeDisabled(); await expect(empty).toHaveText("Search in: pick at least one"); - await expect(empty).toHaveAttribute("role", "status"); + await expect(empty).toHaveAttribute("aria-live", "polite"); // The disabled button says why, to a screen reader as well as on hover. await expect(submit).toHaveAccessibleDescription("Search in: pick at least one"); // A save commits the draft, so Save as… is refused the same way.