{# @description The app sidebar: brand header, AppMenu, fixed footer. #} {# @prop bg:text | default:"mvp-sidebar-bg" | description:"Background class, passed to the header and footer." #} {# @prop brand-url:text | default:"/" | description:"URL the brand mark links to." #} {# @prop class:text | description:"Extra classes on the sidebar root." #} {# @prop menu:text | default:"" | description:"Menu name to render. Empty renders AppMenu (or the mounted app's menu) with no back link." #} {# @prop :collapse:text | description:"How the sidebar collapses: icons for an icon rail, or the default drawer behaviour." #} {# @prop :title:text | description:"Title text shown in the sidebar header." #} {# @prop :boost:boolean | description:"Set hx-boost on the sidebar root so every link inside it — menu items, brand link, footer actions — navigates with htmx." #} {# @slot:header — Replaces the top strip: brand icon, title, collapse toggle. #} {# @slot:body — Replaces the scrolling middle: the back link for a mounted app, then the menu. #} {# @slot:footer — Replaces the fixed bottom strip: user menu or log-in, theme, language. #} {% load flex_menu %} {# The slots are declared so that an unfilled one is empty, rather than a #} {# page variable that happens to be called `header`, `body` or `footer`. #} {# The drawer lives inside , and htmx swaps the body's innerHTML, so a #} {# boosted click renders a fresh drawer in its server-side (closed) state and #} {# the mobile overlay closes on its own. #}