Uses the <alap-link> custom element with Shadow DOM.
Each element is self-contained — no global menu container.
My favorite
<alap-link query="@cars">cars</alap-link>
Check out some
<alap-link query=".coffee">coffee spots</alap-link> <alap-link query=".bridge">bridges</alap-link>
<alap-link query=".nyc + .bridge">NYC bridges</alap-link> <alap-link query=".nyc | .sf">NYC or SF</alap-link> <alap-link query=".nyc - .bridge">NYC without bridges</alap-link>
<alap-link query="(.nyc + .bridge) | (.sf + .bridge)"> NYC or SF bridges </alap-link>
::part()
Shadow DOM isolates menu styles, but ::part() lets you
customize from outside.
/* The menu exposes five parts: menu, list, item, link, image */
#nycspots::part(menu) {
background: #1e293b;
border-color: #334155;
}
#nycspots::part(link) {
color: #e2e8f0;
}
import { registerConfig, defineAlapLink } from 'alap';
import { myConfig } from './config';
// 1. Register config so elements can find it
registerConfig(myConfig);
// 2. Define the <alap-link> custom element
defineAlapLink();
That's it. No class instantiation, no DOM scanning. Each
<alap-link> is self-contained.