diff --git a/CODE-AUDIT.md b/CODE-AUDIT.md index 2534a62..b9d7f66 100644 --- a/CODE-AUDIT.md +++ b/CODE-AUDIT.md @@ -263,7 +263,7 @@ token system + shared primitives (UI/SIMP — high value, larger effort) · i18n - [ ] **M14 — Settings search mutates React-owned DOM.** The search toggles each card's `el.style.display` directly; fragile (breaks if a card ever gets a conditional `style`) and matches on `textContent` incl. hidden text. Prefer state-driven filtering. -- [ ] **M15 — Nested interactive controls in `role="button"` (a11y).** LibraryView's group header +- [x] **M15 — Nested interactive controls in `role="button"` (a11y).** LibraryView's group header is a `role="button"` div containing ` @@ -440,10 +456,7 @@ export function LibraryView(): React.JSX.Element { appearance="subtle" icon={} disabled={groupActionable === 0} - onClick={(e) => { - e.stopPropagation() - downloadGroup(row.items) - }} + onClick={() => downloadGroup(row.items)} > Download{groupActionable > 0 ? ` ${groupActionable}` : ''} @@ -729,13 +742,12 @@ function SourceCard({ const focus = useFocusStyles() return (
-
(e.key === 'Enter' || e.key === ' ') && onToggleExpand()} aria-expanded={expanded} + aria-label={source.title} > {expanded ? : }
@@ -755,7 +767,7 @@ function SourceCard({ {source.channel && source.channel !== source.title ? ` · ${source.channel}` : ''}
-
+ {expanded && children}
)