PageTabs
PageTabs is a native button wrapper for document-style page tab strips. Use it for editor buffers, terminal pages, and other tab rows that navigate between pages without owning panels.
import { PageTabs } from "density-base-ui";
import { useState } from "react";
const items = [
{ id: "overview", label: "Overview" },
{ id: "roadmap", label: "Roadmap" },
{ id: "activity", label: "Activity" },
];
export default function PageTabsExample() {
const [activeId, setActiveId] = useState("overview");
return (
<PageTabs
activeId={activeId}
aria-label="Project pages"
items={items}
onActiveIdChange={setActiveId}
/>
);
}Props
| Prop | Attribute | Values | Default |
|---|---|---|---|
items |
None | { id, label, disabled? }[] |
Required |
activeId |
None | string |
Required |
onActiveIdChange |
None | (id) => void |
None |
depth |
data-dn-depth |
1, 2, 3, 4, 5, 6, 7 |
1 |
size |
data-dn-size |
2xs, xs, sm, md, lg, xl, 2xl, 3xl |
md |
| Other native div props | Mixed | HTMLAttributes<HTMLDivElement> |
None |
Depth
import { PageTabs } from "density-base-ui";
const items = [
{ id: "one", label: "Page" },
{ id: "two", label: "Settings" },
];
export default function PageTabsDepthExample() {
return (
<div style={styles.stack}>
<PageTabs
activeId="one"
aria-label="Depth 1 tabs"
depth="1"
items={items}
/>
<PageTabs
activeId="one"
aria-label="Depth 2 tabs"
depth="2"
items={items}
/>
<PageTabs
activeId="one"
aria-label="Depth 3 tabs"
depth="3"
items={items}
/>
<PageTabs
activeId="one"
aria-label="Depth 4 tabs"
depth="4"
items={items}
/>
<PageTabs
activeId="one"
aria-label="Depth 5 tabs"
depth="5"
items={items}
/>
<PageTabs
activeId="one"
aria-label="Depth 6 tabs"
depth="6"
items={items}
/>
<PageTabs
activeId="one"
aria-label="Depth 7 tabs"
depth="7"
items={items}
/>
</div>
);
}
const styles = {
stack: { display: "grid", gap: "0.75rem", width: "100%" },
} as const;Size
import { PageTabs } from "density-base-ui";
const items = [
{ id: "one", label: "Page" },
{ id: "two", label: "Settings" },
];
export default function PageTabsSizeExample() {
return (
<div style={styles.stack}>
<PageTabs activeId="one" aria-label="2xs tabs" items={items} size="2xs" />
<PageTabs activeId="one" aria-label="xs tabs" items={items} size="xs" />
<PageTabs activeId="one" aria-label="sm tabs" items={items} size="sm" />
<PageTabs activeId="one" aria-label="md tabs" items={items} size="md" />
<PageTabs activeId="one" aria-label="lg tabs" items={items} size="lg" />
<PageTabs activeId="one" aria-label="xl tabs" items={items} size="xl" />
<PageTabs activeId="one" aria-label="2xl tabs" items={items} size="2xl" />
<PageTabs activeId="one" aria-label="3xl tabs" items={items} size="3xl" />
</div>
);
}
const styles = {
stack: { display: "grid", gap: "0.75rem", width: "100%" },
} as const;