Tab: fix aria-controls

When porting, I thought I was being clever by just using ids instead of refs in $api.panels
But I didn't notice that the refs let you distinguish those panels which are rendered from those which are not.
My implementation had aria-controls= set for all tabs, even when their panels were not in the DOM.
This commit is contained in:
Ryan Gossiaux
2021-12-28 16:51:36 -10:00
parent 90e633f8a8
commit 70c68d00fe
3 changed files with 17 additions and 7 deletions

View File

@@ -1,4 +1,8 @@
<script lang="ts" context="module">
interface PanelData {
id: string;
ref: Readable<HTMLElement | null>;
}
export type StateDefinition = {
// State
selectedIndex: number | null;
@@ -6,14 +10,14 @@
activation: "auto" | "manual";
tabs: (HTMLElement | null)[];
panels: string[];
panels: PanelData[];
// State mutators
setSelectedIndex(index: number): void;
registerTab(tab: HTMLElement | null): void;
unregisterTab(tab: HTMLElement | null): void;
registerPanel(panel: string): void;
unregisterPanel(panel: string): void;
registerPanel(panel: PanelData): void;
unregisterPanel(panel: PanelData): void;
};
const TABS_CONTEXT_NAME = "headlessui-tabs-context";