VerticalGlobalNav

VerticalGlobalNav is an icon rail for switching between global app areas. It uses native buttons inside Panel, keeps active state controlled by props, and leaves icons to the caller.

Files
import { VerticalGlobalNav, Panel } from "density-base-ui";
import { Blocks, Files, GitBranch, Search, Terminal } from "lucide-react";

const items = [
  {
    id: "files",
    label: "Files",
    icon: <Files aria-hidden="true" size={18} strokeWidth={1.75} />,
  },
  {
    id: "search",
    label: "Search",
    icon: <Search aria-hidden="true" size={18} strokeWidth={1.75} />,
  },
  {
    id: "source-control",
    label: "Source control",
    icon: <GitBranch aria-hidden="true" size={18} strokeWidth={1.75} />,
  },
  {
    id: "terminal",
    label: "Terminal",
    icon: <Terminal aria-hidden="true" size={18} strokeWidth={1.75} />,
  },
  {
    id: "extensions",
    label: "Extensions",
    icon: <Blocks aria-hidden="true" size={18} strokeWidth={1.75} />,
  },
];

export default function VerticalGlobalNavExample() {
  return (
    <Panel>
      <VerticalGlobalNav
        aria-label="Workspace views"
        activeId="files"
        items={items}
      />
      <section style={styles.content}>Files</section>
    </Panel>
  );
}

const styles = {
  content: {
    display: "grid",
    placeItems: "center",
  },
} as const;

Props

Prop Attribute Values Default
items None { id, label, icon, disabled? }[] Required
activeId None string Required
onActiveIdChange None (id) => void None
renderItem None (item, state) => ReactNode None
density-level data-dn-level 1, 2, 3, 4, 5, 6, 7 2
density-size data-dn-size 2xs, xs, sm, md, lg, xl, 2xl, 3xl sm
Other native div props Mixed HTMLAttributes<HTMLDivElement> None