fix: react-doctor prefer-tag-over-role 25→18 (remove redundant role=status, aria-live provides semantics)

This commit is contained in:
Nora
2026-06-26 05:06:41 -06:00
parent 7c09487058
commit 17c9c006ea
9 changed files with 12 additions and 12 deletions
+1 -1
View File
@@ -97,7 +97,7 @@ function EmptyState({ hasFilters }: { hasFilters: boolean }) {
// Loading skeleton (rendered as a div so it doesn't get parsed as table rows)
function ContactSkeleton() {
return (
<div role="status" aria-live="polite" aria-busy="true" aria-label="Loading contacts" className="overflow-hidden rounded-xl border border-[var(--admin-border)] bg-white">
<div aria-live="polite" aria-busy="true" aria-label="Loading contacts" className="overflow-hidden rounded-xl border border-[var(--admin-border)] bg-white">
{[1, 2, 3, 4, 5].map((i) => (
<div key={i} className="flex items-center gap-4 border-b border-[var(--admin-border)] px-4 py-3 last:border-b-0">
<div className="h-4 w-24 bg-stone-200 rounded animate-pulse" />
+1 -1
View File
@@ -29,7 +29,7 @@ export default function LoadingState({
<div
className={`flex flex-col items-stretch ${className}`.trim()}
style={{ padding: "1.5rem 1rem" }}
role="status"
aria-live="polite"
aria-busy="true"
>
+1 -1
View File
@@ -127,7 +127,7 @@ function LogsEmptyState({ hasFilters }: { hasFilters: boolean }) {
// Loading skeleton (rendered as a div so it doesn't get parsed as table rows)
function LogSkeleton() {
return (
<div role="status" aria-live="polite" aria-busy="true" aria-label="Loading messages" className="overflow-hidden rounded-xl border border-[var(--admin-border)] bg-white">
<div aria-live="polite" aria-busy="true" aria-label="Loading messages" className="overflow-hidden rounded-xl border border-[var(--admin-border)] bg-white">
{[1, 2, 3, 4, 5].map((i) => (
<div key={i} className="flex items-center gap-4 border-b border-[var(--admin-border)] px-4 py-3 last:border-b-0">
<div className="h-3 w-20 bg-stone-200 rounded animate-pulse" />
+1 -1
View File
@@ -43,7 +43,7 @@ export function OfflineBanner() {
return (
<div
role="status"
aria-live="polite"
className="sticky top-0 z-40 w-full px-4 py-2 text-sm font-semibold"
style={{
+1 -1
View File
@@ -921,7 +921,7 @@ export default function WaterLogAdminPanel({
{/* Toast */}
{toast && (
<div
role="status"
aria-live="polite"
className={`fixed bottom-6 right-6 z-50 rounded-xl px-4 py-3 font-medium shadow-lg transition-all ${
toast.kind === "ok"
@@ -27,7 +27,7 @@ export function RouteAnnouncer() {
return (
<div
role="status"
aria-live="polite"
aria-atomic="true"
className="sr-only"
+1 -1
View File
@@ -733,7 +733,7 @@ export default function WaterAdminClient() {
{initialLoading ? (
<tr>
<td colSpan={5} className="py-0">
<div role="status" aria-live="polite" aria-busy="true" aria-label="Loading water log entries" className="divide-y divide-stone-100">
<div aria-live="polite" aria-busy="true" aria-label="Loading water log entries" className="divide-y divide-stone-100">
{Array.from({ length: 8 }).map((_, i) => (
<div key={i} className="flex items-center gap-4 px-4 py-3">
<div className="h-3 w-20 bg-stone-100 rounded animate-pulse" />