The id of the currently active item. Items matching this id get the
active styling and aria-current="page".
Ids of currently-expanded tree items. Items whose id appears here render
with a down-chevron and their children are visible; items not in this
list render with a right-chevron and their children stay collapsed.
Consumer owns the state — toggle in response to (ItemToggled).
Only applies to items where children !== undefined; flat items ignore it.
Emitted when a non-disabled item is clicked.
Emitted when a tree item's chevron is clicked. Consumer should toggle
the item's id in / out of ExpandedIds. Does NOT also fire ItemClicked.
Whether the mobile off-canvas drawer is open. Component-owned, transient UI state — no effect above the 700px breakpoint where the rail is always inline.
Label shown on the mobile drawer header and used as the switcher fallback
label when no item is active. Defaults to 'Menu'. Set to something
domain-specific (e.g. 'Sections', 'Test Suites') for clearer context.
The sections + items that make up the rail. Sections render top-to-bottom in array order; items inside each section render in array order.
Width of the rail in pixels. Defaults to 240. Set to a smaller value (e.g., 200) for denser shells. Only applies to the desktop rail — on mobile the rail becomes a fixed-width off-canvas drawer.
The item matching ActiveId (searched recursively through trees),
used to label the mobile section switcher with the current section's icon
and label. Returns undefined when nothing is active.
Reflects MobileNavOpen onto the host so CSS can drive the drawer.
Whether any top-level item in this section actually has children to expand. The template calls this once per section; the result is threaded through the recursive itemTpl so leaf nodes only reserve a chevron-column placeholder when a sibling will actually render a chevron.
Top-level check is sufficient — if a deeply-nested item has children, its
parent's children.length > 0 already qualifies the section as expandable.
Escape closes the mobile drawer. No-op when it's already closed.
<mj-left-nav>— Canonical left rail for MJ Explorer dashboards that have an internal section-nav (Admin shells, KH Config, KH Analytics, AI Analytics, Communication, Credentials, APIKeys, etc.).Replaces the bespoke
.{name}-nav/.{name}-nav-itempatterns each of those dashboards used to declare in their own CSS files.Supports:
[header]and[footer]content slots (KH Config logo header, etc.)[MobileTitle]for the drawer label.Example
Responsive — at ≤700px the rail becomes an off-canvas drawer (see the feature list above). The consumer should still switch the parent's flex-direction from row → column at the same breakpoint (e.g.
<mj-page-body>Direction="row" with a@mediaoverride) so the in-flow section switcher stacks above the content pane rather than competing with it for horizontal space.