core_components: set aria-required for required inputs (WCAG)

ensure_aria_required_for_input/1 adds aria-required when required
in rest; applied to select, textarea and default input.
This commit is contained in:
Moritz 2026-02-23 22:49:58 +01:00
parent 717b8f5676
commit 50c4ab049d
Signed by: moritz
GPG key ID: 1020A035E5DD0824

View file

@ -448,6 +448,8 @@ defmodule MvWeb.CoreComponents do
end
def input(%{type: "select"} = assigns) do
assigns = ensure_aria_required_for_input(assigns)
~H"""
<fieldset class="mb-2 fieldset">
<label>
@ -475,6 +477,8 @@ defmodule MvWeb.CoreComponents do
end
def input(%{type: "textarea"} = assigns) do
assigns = ensure_aria_required_for_input(assigns)
~H"""
<fieldset class="mb-2 fieldset">
<label>
@ -502,6 +506,8 @@ defmodule MvWeb.CoreComponents do
# All other inputs text, datetime-local, url, password, etc. are handled here...
def input(assigns) do
assigns = ensure_aria_required_for_input(assigns)
~H"""
<fieldset class="mb-2 fieldset">
<label>
@ -529,6 +535,18 @@ defmodule MvWeb.CoreComponents do
"""
end
# WCAG 2.1: set aria-required when required is true so screen readers announce required state
defp ensure_aria_required_for_input(assigns) do
rest = assigns.rest || %{}
rest =
if rest[:required],
do: Map.put(rest, :aria_required, "true"),
else: rest
assign(assigns, :rest, rest)
end
# Helper used by inputs to generate form errors
defp error(assigns) do
~H"""