diff --git a/.jules/palette.md b/.jules/palette.md new file mode 100644 index 0000000..5e26c9c --- /dev/null +++ b/.jules/palette.md @@ -0,0 +1,3 @@ +## 2025-02-21 - Accessible Tabs Pattern +**Learning:** React Tabs need `role="tablist"`, `role="tab"`, `aria-selected`, `aria-controls`, and `id` for proper accessibility and keyboard navigation. Using React `useId` for components is helpful for auto-generating accessible IDs. +**Action:** When implementing tabs or collapsibles, ensure these ARIA attributes are correctly linked. diff --git a/src/app/cite/page.tsx b/src/app/cite/page.tsx index 0d86f84..873d07c 100644 --- a/src/app/cite/page.tsx +++ b/src/app/cite/page.tsx @@ -1961,7 +1961,11 @@ function CitePageContent() { onTabChange={setActiveTab} /> -
+
{activeTab === "quick-add" && (

Quick Add

diff --git a/src/components/wiki/wiki-collapsible.tsx b/src/components/wiki/wiki-collapsible.tsx index 5284dd8..f507721 100644 --- a/src/components/wiki/wiki-collapsible.tsx +++ b/src/components/wiki/wiki-collapsible.tsx @@ -1,6 +1,6 @@ "use client"; -import { useState } from "react"; +import { useState, useId } from "react"; interface WikiCollapsibleProps { title: string; @@ -14,6 +14,7 @@ export function WikiCollapsible({ defaultOpen = true, }: WikiCollapsibleProps) { const [isOpen, setIsOpen] = useState(defaultOpen); + const contentId = useId(); return (
@@ -22,11 +23,14 @@ export function WikiCollapsible({
- {isOpen &&
{children}
} + {isOpen &&
{children}
}
); } diff --git a/src/components/wiki/wiki-tabs.tsx b/src/components/wiki/wiki-tabs.tsx index 75b22a5..eaaf61c 100644 --- a/src/components/wiki/wiki-tabs.tsx +++ b/src/components/wiki/wiki-tabs.tsx @@ -14,10 +14,14 @@ interface WikiTabsProps { export function WikiTabs({ tabs, onTabChange }: WikiTabsProps) { return ( -
+
{tabs.map((tab) => (