as the first column (matching other form * rows), while a
/ in the second column provides the accessible * grouping required by WCAG 1.3.1. The is visually hidden (sr-only) to * avoid duplicating the visible label text. * * Variables consumed: * string $name — input name attribute (will be posted as array: name[]) * string $label — group label text (htmlspecialchars'd unless $labelHtml is set) * string $labelHtml — raw HTML label override (bypasses htmlspecialchars, optional) * array $options — each element must have 'id' and 'name' keys * array $checked — array of 'id' values that are currently checked * bool $required — whether at least one checkbox must be checked; default false * string $hxPost — optional hx-post URL for HTMX live update * string $hxTarget — optional hx-target CSS selector for HTMX swap * string $hxSwap — optional hx-swap value; default 'outerHTML' * string $hxInclude — optional hx-include selector; default 'this' * string|null $errorFieldName — when set and matches $name, adds aria-invalid on checkboxes */ $checked = $checked ?? []; $required = $required ?? false; $hxPost = $hxPost ?? ''; $hxTarget = $hxTarget ?? ''; $hxSwap = $hxSwap ?? 'outerHTML'; $hxInclude = $hxInclude ?? 'this'; $errorFieldName = $errorFieldName ?? null; $ariaInvalid = ($errorFieldName === $name) ? ' aria-invalid="true" aria-errormessage="flash-error"' : ''; // aria-describedby only when there's an error (no hint text for checkbox groups) $ariaDescribedBy = ($errorFieldName === $name) ? ' aria-describedby="flash-error"' : ''; ?>
*' : '')) ?>
hx-post="" hx-target="" hx-trigger="change" hx-include="" hx-swap="" >