fix(a11y): WCAG 2.1 AA fixes (#2219)

This commit is contained in:
Philip Okugbe
2026-05-20 16:47:25 +01:00
committed by GitHub
parent 1c166c4736
commit 92c0e36e46
119 changed files with 1064 additions and 194 deletions
@@ -4,8 +4,8 @@ import {
Menu,
Modal,
Text,
ThemeIcon,
Tooltip,
UnstyledButton,
} from "@mantine/core";
import { useDisclosure } from "@mantine/hooks";
import {
@@ -100,15 +100,20 @@ export function PageVerificationBadge({
if (!pageId) return null;
if (!hasVerificationFeature) {
if (readOnly) return null;
const lockedLabel = `${t("Add verification")}${upgradeLabel}`;
// Use ActionIcon (a real <button>) instead of a ThemeIcon so the tooltip
// is reachable on keyboard focus, and screen readers announce the upgrade
// hint via the accessible name. Click is a no-op since the feature is
// gated; the tooltip explains why.
return (
<Tooltip
label={`${t("Add verification")}${upgradeLabel}`}
withArrow
openDelay={250}
>
<ThemeIcon variant="subtle" color="gray">
<Tooltip label={lockedLabel} withArrow openDelay={250}>
<ActionIcon
variant="subtle"
color="gray"
aria-label={lockedLabel}
>
<IconShieldCheck size={20} stroke={1.5} />
</ThemeIcon>
</ActionIcon>
</Tooltip>
);
}
@@ -132,20 +137,25 @@ export function PageVerificationBadge({
<>
{status !== "none" ? (
<Tooltip label={tooltipLabel} withArrow openDelay={250}>
<Group
gap={4}
<UnstyledButton
onClick={open}
style={{ cursor: "pointer" }}
wrap="nowrap"
aria-label={tooltipLabel}
style={{
display: "inline-flex",
alignItems: "center",
gap: 4,
cursor: "pointer",
}}
>
<IconRosetteDiscountCheckFilled
size={18}
color={`var(--mantine-color-${getStatusColor(status).replace(".", "-")})`}
aria-hidden="true"
/>
<Text size="sm" c={getStatusColor(status)}>
{getStatusLabel(status, t)}
</Text>
</Group>
</UnstyledButton>
</Tooltip>
) : !readOnly ? (
<Tooltip label={t("Set up verification")} withArrow openDelay={250}>