rustio-admin 0.30.0

Django Admin, but for Rust. A small, focused admin framework.
Documentation
{# RustIO Console — slim workspace header: workspace id on the start,
 # a centered global search, and actions on the end. #}
<header class="rio-wshead" role="banner">
  <div class="rio-ws-id">
    <strong>{{ app_name }}</strong>
    <svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg>
    <span class="rio-devpill rio-devpill--{{ environment_kind }}">{{ environment_label }}</span>
  </div>
  <button type="button" class="rio-ws-search" data-rio-search-trigger aria-label="Search records (Command-K)">
    <svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg>
    <span class="rio-ws-search-label">Search {{ app_name }}…</span>
    <span class="rio-kbd">⌘K</span>
  </button>
  <div class="rio-ws-actions">
    <a class="rio-iconbtn" href="/admin/notifications" aria-label="Notifications">
      <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 9a6 6 0 1 1 12 0c0 5 2 6 2 6H4s2-1 2-6Z"/><path d="M10.5 19a1.7 1.7 0 0 0 3 0"/></svg>
    </a>
    <button class="rio-iconbtn" id="themeToggle" type="button" aria-label="Toggle theme">
      <svg class="rio-theme-moon" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 12.8A8.5 8.5 0 1 1 11.2 3a6.5 6.5 0 0 0 9.8 9.8Z"/></svg>
      <svg class="rio-theme-sun" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" style="display:none"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M2 12h2M20 12h2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M19.1 4.9l-1.4 1.4M6.3 17.7l-1.4 1.4"/></svg>
    </button>
    <a class="rio-btn rio-btn--subtle rio-btn--sm" href="/admin/docs">
      <svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 4h6v6"/><path d="M20 4 10 14"/><path d="M19 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1h5"/></svg>
      Docs
    </a>
    {% if identity %}
    <div class="rio-usermenu rio-dropdown" data-rio-dropdown>
      <button class="rio-dropdown-toggle rio-usermenu-btn" type="button" aria-haspopup="true" aria-expanded="false" aria-label="Account menu">
        <span class="rio-usermenu-avatar">{{ identity.email | first | upper }}</span>
        <span class="rio-usermenu-name">{{ identity.email }}</span>
        <svg viewBox="0 0 24 24" width="15" height="15" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg>
      </button>
      <div class="rio-dropdown-panel rio-usermenu-panel" role="menu">
        <div class="rio-usermenu-head">
          <span class="rio-usermenu-head-name">{{ identity.email }}</span>
          <span class="rio-usermenu-head-role">{{ identity.role_label | default(identity.role | default("")) }}</span>
        </div>
        <div class="rio-usermenu-sep" aria-hidden="true"></div>
        <a class="rio-usermenu-item" href="/admin/account/sessions" role="menuitem">{{ icon("clock") }} Active sessions</a>
        <a class="rio-usermenu-item" href="/admin/password_change" role="menuitem">{{ icon("key") }} Change password</a>
        <a class="rio-usermenu-item" href="/admin/account/mfa/enroll" role="menuitem">{{ icon("users") }} Two-factor authentication</a>
        <div class="rio-usermenu-sep" aria-hidden="true"></div>
        <a class="rio-usermenu-item rio-usermenu-item--danger" href="/admin/logout" role="menuitem">{{ icon("log-out") }} Sign out</a>
      </div>
    </div>
    {% endif %}
  </div>
</header>