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
4 changes: 4 additions & 0 deletions .jules/palette.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,7 @@
## 2024-05-17 - Generic Visual Text Buttons and ARIA Context
**Learning:** Components frequently use generic visual text buttons like `[hide]`, `[show]`, `[edit]`, or `[delete]` within lists or loops. Screen readers read these buttons without surrounding visual context, confusing users.
**Action:** Always provide a contextual `aria-label` (e.g., `aria-label="Hide ${title}"`) for generic visual text buttons so screen reader users have proper context.

## 2024-06-25 - Contextual ARIA labels for repeated bracket-style inline action buttons
**Learning:** Bracket-style inline action buttons (e.g., `[edit]`, `[delete]`, `[remove]`, `[cancel]`, `[+ add tag]`) are frequently repeated in lists (like `SortableCitation`). When screen readers navigate through these buttons, they announce the visible text. If the visible text is generic, screen reader users lack context on *what* is being edited, deleted, or canceled.
**Action:** Always provide dynamically contextual `aria-label` attributes to these repeated generic buttons, incorporating the relevant entity's name or title (e.g., `aria-label={\`Edit citation \${citation.title}\`}`). Provide descriptive static labels for general actions (e.g., `aria-label="Cancel adding tag"` instead of just `aria-label="Cancel"` or missing label).
1 change: 1 addition & 0 deletions src/components/wiki/share-dialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -515,6 +515,7 @@ export function ShareDialog({
<button
onClick={() => setShowCreator(false)}
className="text-wiki-link hover:underline text-xs focus-visible:outline-dotted focus-visible:outline-1 focus-visible:outline-wiki-text"
aria-label="Cancel sharing"
>
[cancel]
</button>
Expand Down
11 changes: 11 additions & 0 deletions src/components/wiki/sortable-citation.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -383,20 +383,23 @@ export function SortableCitation({
<button
onClick={startEditing}
className="text-wiki-link text-sm hover:underline focus-visible:outline-dotted focus-visible:outline-1 focus-visible:outline-wiki-text"
aria-label={`Edit citation ${citation.fields?.title || 'citation'}`}
>
[edit]
</button>
{onShare && (
<button
onClick={() => onShare(citation.id)}
className="text-wiki-link text-sm hover:underline focus-visible:outline-dotted focus-visible:outline-1 focus-visible:outline-wiki-text"
aria-label={`Share citation ${citation.fields?.title || 'citation'}`}
>
[share]
</button>
)}
<button
onClick={() => onDelete(citation.id)}
className="text-wiki-link text-sm hover:underline focus-visible:outline-dotted focus-visible:outline-1 focus-visible:outline-wiki-text"
aria-label={`Delete citation ${citation.fields?.title || 'citation'}`}
>
[delete]
</button>
Expand Down Expand Up @@ -446,6 +449,7 @@ export function SortableCitation({
setEditingNotes(true);
}}
className="text-wiki-link text-xs hover:underline focus-visible:outline-dotted focus-visible:outline-1 focus-visible:outline-wiki-text"
aria-label={`Edit notes for ${citation.fields?.title || 'citation'}`}
>
[edit]
</button>
Expand All @@ -469,6 +473,7 @@ export function SortableCitation({
setEditingNotes(true);
}}
className="text-wiki-link text-xs hover:underline focus-visible:outline-dotted focus-visible:outline-1 focus-visible:outline-wiki-text"
aria-label={`Add notes to ${citation.fields?.title || 'citation'}`}
>
[+ add notes]
</button>
Expand Down Expand Up @@ -515,6 +520,7 @@ export function SortableCitation({
setQuotesDraft(quotesDraft.filter((_, idx) => idx !== i))
}
className="text-wiki-link text-xs hover:underline pt-1 focus-visible:outline-dotted focus-visible:outline-1 focus-visible:outline-wiki-text"
aria-label={`Remove quote ${i + 1}`}
>
[remove]
</button>
Expand Down Expand Up @@ -563,6 +569,7 @@ export function SortableCitation({
setEditingQuotes(true);
}}
className="text-wiki-link text-xs hover:underline focus-visible:outline-dotted focus-visible:outline-1 focus-visible:outline-wiki-text"
aria-label={`Edit quotes for ${citation.fields?.title || 'citation'}`}
>
[edit]
</button>
Expand All @@ -587,6 +594,7 @@ export function SortableCitation({
setEditingQuotes(true);
}}
className="text-wiki-link text-xs hover:underline focus-visible:outline-dotted focus-visible:outline-1 focus-visible:outline-wiki-text"
aria-label={`Add quote to ${citation.fields?.title || 'citation'}`}
>
[+ add quote]
</button>
Expand Down Expand Up @@ -637,6 +645,7 @@ export function SortableCitation({
<button
onClick={() => onAddTag(citation.id, newTagInput)}
className="text-wiki-link text-xs hover:underline focus-visible:outline-dotted focus-visible:outline-1 focus-visible:outline-wiki-text"
aria-label="Add tag"
>
[add]
</button>
Expand All @@ -646,6 +655,7 @@ export function SortableCitation({
setNewTagInput("");
}}
className="text-wiki-text-muted text-xs hover:underline focus-visible:outline-dotted focus-visible:outline-1 focus-visible:outline-wiki-text"
aria-label="Cancel adding tag"
>
[cancel]
</button>
Expand Down Expand Up @@ -682,6 +692,7 @@ export function SortableCitation({
<button
onClick={() => setEditingTagsId(citation.id)}
className="text-wiki-link text-xs hover:underline focus-visible:outline-dotted focus-visible:outline-1 focus-visible:outline-wiki-text"
aria-label={`Add tag to ${citation.fields?.title || 'citation'}`}
>
[+ add tag]
</button>
Expand Down
Loading