Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .Jules/palette.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## 2024-05-18 - [Add ARIA labels to icon-only buttons]
**Learning:** Found multiple instances where icon-only buttons lacked an `aria-label` attribute (e.g. `title` attributes were present, but not `aria-label`). This causes screen readers to have a poor experience because they do not reliably read `title` attributes on interactive elements. This app uses `<Button size="icon">` and native `<button>` frequently for micro-actions, creating a recurrent a11y vulnerability.
**Action:** When implementing new micro-actions in UI components, always ensure that `aria-label` is set explicitly on icon-only buttons regardless of the presence of `title` attributes.
2 changes: 2 additions & 0 deletions src/components/editor/extensions/code-block-codemirror.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -477,6 +477,7 @@ const CodeMirrorComponent = ({
isLineWrapped ? "text-primary" : "text-muted-foreground",
)}
title="Toggle Line Wrap"
aria-label="Toggle Line Wrap"
>
<HugeiconsIcon icon={TextWrapIcon} size={14} />
</button>
Expand All @@ -485,6 +486,7 @@ const CodeMirrorComponent = ({
onClick={handleCopy}
className="rounded p-1 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground"
title="Copy Code"
aria-label="Copy Code"
>
{copied ? (
<HugeiconsIcon
Expand Down
4 changes: 4 additions & 0 deletions src/components/frontmatter-editor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,8 @@ export function InlineFrontmatterEditor({
className="[&_svg]:inline"
variant="ghost"
size="icon"
title="Delete Icon"
aria-label="Delete Icon"
>
<HugeiconsIcon
icon={
Expand Down Expand Up @@ -296,6 +298,8 @@ export function InlineFrontmatterEditor({
size="icon"
className="opacity-0 group-focus-within:opacity-100"
onClick={() => removeProperty(index)}
title="Remove Property"
aria-label="Remove Property"
>
<HugeiconsIcon icon={Cancel01Icon} />
</Button>
Expand Down
4 changes: 4 additions & 0 deletions src/components/graph-tab.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1319,6 +1319,7 @@ interface ForceGraphInstance {
variant="ghost"
size="icon"
title="Reset settings"
aria-label="Reset settings"
onClick={() => setPanel(DEFAULT_PANEL)}
className="size-7"
>
Expand All @@ -1328,6 +1329,7 @@ interface ForceGraphInstance {
variant="ghost"
size="icon"
title="Close panel"
aria-label="Close panel"
onClick={() => setPaneOpen(false)}
className="size-7"
>
Expand Down Expand Up @@ -1431,6 +1433,8 @@ interface ForceGraphInstance {
<Button
variant="ghost"
size="icon"
title="Remove group"
aria-label="Remove group"
onClick={() => {
const next = panel.groups.filter(
(_, i) => i !== index,
Expand Down