From de1caa6f6712b1b336f14927243b63dbda8f3c6d Mon Sep 17 00:00:00 2001 From: adamXbot <111877622+adamXbot@users.noreply.github.com> Date: Thu, 23 Jul 2026 22:51:36 +1000 Subject: [PATCH] fix(a11y): make import candidate selection a native radiogroup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The iTunes match candidates in SearchResultBlock were bare clickable
s — no role, no tabIndex, no keyboard path, nothing exposed to assistive tech. They are now
) : ( <> - {candidates.map((candidate) => { - // Bundle-ID fallback catches the legacy-import duplicate - // case where the same physical app exists under a - // different App Store track ID — see TrackedApp comment. - const candidateTracked = - trackedByAppleId.get(candidate.appleId) ?? - (candidate.bundleId - ? trackedByBundleId?.get(candidate.bundleId) - : undefined); - const bundleMismatch = Boolean( - result.sourceBundleId && - candidate.bundleId && - result.sourceBundleId.toLowerCase() !== - candidate.bundleId.toLowerCase() - ); - return ( -
- onChoose( - chosen?.appleId === candidate.appleId ? null : candidate - ) - } - > - + {candidates.map((candidate, candidateIndex) => { + // Bundle-ID fallback catches the legacy-import duplicate + // case where the same physical app exists under a + // different App Store track ID — see TrackedApp comment. + const candidateTracked = + trackedByAppleId.get(candidate.appleId) ?? + (candidate.bundleId + ? trackedByBundleId?.get(candidate.bundleId) + : undefined); + const bundleMismatch = Boolean( + result.sourceBundleId && + candidate.bundleId && + result.sourceBundleId.toLowerCase() !== + candidate.bundleId.toLowerCase() + ); + const isChosen = chosen?.appleId === candidate.appleId; + return ( + + ); + })} +
{result.candidates.length > 1 && (