# XWUIMenuModel

The single canonical navigation data model for XWUI: one serialisable `XWUIMenuNode` tree (`key`, `label`, `icon`, `href`, `children`, `badge`, `active`, `visible`, …) authored once, then projected onto every nav renderer's native shape by pure adapter functions - `menuToTreeNodes`, `menuToTabItems`, `menuToNavMenuItems`, `menuToRailItems`, `menuToBreadcrumbItems`, and `menuToFooterColumns`. This is what lets XWUIShellApp render the same menu as a sidebar tree, tab strip, dropdown, rail, breadcrumb, or footer purely from config. Helper lookups (`findMenuNode`, `menuTrail`, `findMenuNodeByHref`, `menuAncestors`, `filterVisibleMenu`) handle active-state, routing correlation, and role-gating.

## Usage

```ts
import {
  type XWUIMenuModel,
  menuToTreeNodes,
  findMenuNodeByHref,
} from './XWUIMenuModel';

const menu: XWUIMenuModel = [
  { key: 'home', label: 'Home', href: '/' },
  {
    key: 'docs',
    label: 'Docs',
    children: [{ key: 'intro', label: 'Intro', href: '/docs/intro' }],
  },
];

const treeNodes = menuToTreeNodes(menu, { activeKey: 'intro' });
const active = findMenuNodeByHref(menu, location.pathname);
```

```api
```
