# IconRailSidebar

> Two-level navigation. A slim rail of icons picks the section and a sub-sidebar beside it lists that section's pages. Folds into a sheet on mobile.

Source: https://docs.nasaqui.com/components/icon-rail-sidebar

## Install

```bash
npx shadcn@latest add https://docs.nasaqui.com/r/icon-rail-sidebar.json
```

The navigation frame for products with many areas. The narrow rail (icons with tooltips) holds the areas; the
sub-sidebar next to it lists the pages of the chosen area, in groups, with expandable parents. Your page is
`children` and fills the rest. On narrow screens both fold into a sheet behind a menu button.

## When to use

- Admin areas and dashboards with 4 to 8 top-level areas and several pages in each.

## When not to use

- One flat list of pages: use the `AppShell` sidebar.
- Settings pages: use `SettingsSections`.

## Import

```tsx
import { IconRailSidebar } from "@fadymondy/nasaq/web";
```

## Quick start

```tsx
import { Home, Users } from "lucide-react";
import { IconRailSidebar } from "@fadymondy/nasaq/web";

const sections = [
  { id: "home", label: "Home", icon: <Home />, groups: [{ id: "g", items: [{ id: "dash", label: "Dashboard" }] }] },
  { id: "people", label: "People", icon: <Users />, groups: [{ id: "g", items: [{ id: "users", label: "Users" }, { id: "roles", label: "Roles" }] }] },
];

export function Page() {
  return (
    <IconRailSidebar sections={sections} defaultValue="people" onItemSelect={(id) => console.log(id)}>
      <main>Content</main>
    </IconRailSidebar>
  );
}
```

## Anatomy

```
IconRailSidebar        data-slot="icon-rail-sidebar"
├─ rail                data-slot="icon-rail": brand, section buttons, railFooter
├─ sub-sidebar         data-slot="icon-rail-sub": title, subHeader, groups, subFooter
├─ mobile bar          data-slot="icon-rail-mobile-bar": menu button, opens a Sheet with rail and sub
└─ content             data-slot="icon-rail-content": children
```

## API

### IconRailSidebar

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `sections` | `RailSection[]` | required | `{ id, label, icon, href?, badge?, title?, groups? }`. A section without `groups` is a plain link. |
| `value`, `defaultValue`, `onValueChange` | `string`, `(id) => void` | first section | Active section. |
| `activeItem` | `string` | none | Active page id (controlled). |
| `onItemSelect` | `(id, sectionId) => void` | none | A page, or a section with no sub-sidebar, was chosen. |
| `brand`, `railFooter` | `ReactNode` | none | Top and bottom of the rail. |
| `subHeader`, `subFooter` | `ReactNode` | none | Inside the sub-sidebar. |
| `subOpen`, `defaultSubOpen`, `onSubOpenChange` | `boolean`, `(open) => void` | open | Wide-screen collapse of the sub-sidebar. |
| `labels` | `IconRailSidebarLabels` | en / ar | Menu, collapse, expand and close text. |

`RailGroup` is `{ id, label?, items }`; `RailLink` is `{ id, label, icon?, href?, badge?, children? }`.

## Examples

- **Controlled**: `value={section} onValueChange={setSection} activeItem={page}`.
- **Links**: give each `RailLink` an `href` and route in `onItemSelect`.
- **Arabic**: pass Arabic `label`s; the rail moves to the inline start and mirrors.

## Accessibility

| Key | Action |
| --- | --- |
| Arrow Up / Down | Move between rail buttons. |
| Enter / Space | Choose the section or page. |
| Escape | Close the mobile sheet. |

Rail buttons are named by their `label` (also the tooltip); the active one has `aria-current`. Pass `labels`
for the menu and collapse buttons in other languages.

## RTL & i18n

The rail sits at the inline start and the sub-sidebar mirrors. Built-in English and Arabic strings follow the
Nasaq locale. Section and page labels are yours to translate.

## Styling & tokens

Uses `bg-nq-selected`, `bg-nq-hover`, `border-border`, `rounded-control` and the sidebar item styles.
Extend with `className`.

## Do / Don't

- Do keep the rail to a handful of areas with recognisable icons.
- Do not put actions on the rail; it navigates.

## Related

- [AppShell](https://docs.nasaqui.com/components/app-shell)
- [AdminArea](https://docs.nasaqui.com/components/admin-area)

## Lab

https://docs.nasaqui.com/?path=/docs/components-navigation-icon-rail-sidebar--docs

## Code

### React

```tsx
import { Home, Users } from "lucide-react";
import { IconRailSidebar } from "@fadymondy/nasaq/web";

const sections = [
  { id: "home", label: "Home", icon: <Home />, groups: [{ id: "g", items: [{ id: "dash", label: "Dashboard" }] }] },
  { id: "people", label: "People", icon: <Users />, groups: [{ id: "g", items: [{ id: "users", label: "Users" }, { id: "roles", label: "Roles" }] }] },
];

export function Page() {
  return (
    <IconRailSidebar sections={sections} defaultValue="people" onItemSelect={(id) => console.log(id)}>
      <main>Content</main>
    </IconRailSidebar>
  );
}
```

### shadcn

```tsx
import { Home, Users } from "lucide-react";
import { IconRailSidebar } from "@/components/ui/icon-rail-sidebar";

const sections = [
  { id: "home", label: "Home", icon: <Home />, groups: [{ id: "g", items: [{ id: "dash", label: "Dashboard" }] }] },
  { id: "people", label: "People", icon: <Users />, groups: [{ id: "g", items: [{ id: "users", label: "Users" }, { id: "roles", label: "Roles" }] }] },
];

export function Page() {
  return (
    <IconRailSidebar sections={sections} defaultValue="people" onItemSelect={(id) => console.log(id)}>
      <main>Content</main>
    </IconRailSidebar>
  );
}
```

### Vue

```vue
<script setup lang="ts">
import { Home, Users } from "lucide-vue-next";
import { NqIconRailSidebar } from "@fadymondy/nasaq/vue";

const sections = [
  { id: "home", label: "Home", icon: Home, groups: [{ id: "g", items: [{ id: "dash", label: "Dashboard" }] }] },
  { id: "people", label: "People", icon: Users, groups: [{ id: "g", items: [{ id: "users", label: "Users" }, { id: "roles", label: "Roles" }] }] },
];
</script>

<template>
  <NqIconRailSidebar :sections="sections" default-value="people" class="min-h-80" @item-select="(id) => console.log(id)">
    <main class="p-6">Content</main>
  </NqIconRailSidebar>
</template>
```

### Blade

```blade
<div class="h-[28rem] w-full overflow-hidden rounded-floating border border-border">
    <x-nq::icon-rail-sidebar section="people" active-item="roles" :sections="[
        ['id' => 'home', 'label' => 'Home', 'icon' => 'house', 'groups' => [['id' => 'main', 'label' => 'Main', 'items' => [
            ['id' => 'dash', 'label' => 'Dashboard', 'icon' => 'layout-dashboard', 'href' => '#dash'],
            ['id' => 'inbox', 'label' => 'Inbox', 'icon' => 'inbox', 'badge' => 3],
        ]]]],
        ['id' => 'people', 'label' => 'People', 'title' => 'People and access', 'icon' => 'users', 'badge' => 2, 'groups' => [['id' => 'access', 'items' => [
            ['id' => 'users', 'label' => 'Users', 'icon' => 'user'],
            ['id' => 'access', 'label' => 'Access', 'icon' => 'shield', 'children' => [
                ['id' => 'roles', 'label' => 'Roles'],
                ['id' => 'perms', 'label' => 'Permissions'],
            ]],
        ]]]],
        ['id' => 'help', 'label' => 'Help', 'icon' => 'circle-help', 'href' => '#help'],
    ]">
        <div id="rail-page" class="p-4 text-body-sm">Page content</div>
    </x-nq::icon-rail-sidebar>
</div>
```

### HTML + Alpine

```html
<div class="h-[28rem] w-full overflow-hidden rounded-floating border border-border">
    <div data-slot="icon-rail-sidebar" x-data="nqIconRail(JSON.parse('{\u0022section\u0022:\u0022people\u0022,\u0022item\u0022:\u0022roles\u0022,\u0022subOpen\u0022:true,\u0022subs\u0022:{\u0022home\u0022:true,\u0022people\u0022:true},\u0022owners\u0022:{\u0022dash\u0022:\u0022home\u0022,\u0022inbox\u0022:\u0022home\u0022,\u0022users\u0022:\u0022people\u0022,\u0022access\u0022:\u0022people\u0022,\u0022roles\u0022:\u0022people\u0022,\u0022perms\u0022:\u0022people\u0022}}'))" x-modelable="section"
    class="flex h-full min-h-0 w-full bg-background text-foreground">
    <div class="hidden shrink-0 md:flex">
        <nav aria-label="Sections" data-slot="icon-rail" class="flex w-14 shrink-0 flex-col items-center gap-3 border-e border-border bg-card py-3">
        <ul class="flex min-h-0 flex-1 flex-col items-center gap-1 overflow-y-auto px-2 [scrollbar-width:none]" x-on:keydown="railKey($event)">
                                <li>
                <a data-rail-button href="#" aria-label="Home" title="Home"
                    x-bind:data-active="section === 'home'" x-bind:aria-current="section === 'home' ? 'page' : null"
                     aria-controls="nq-rail-sub-d0bcf8-home" x-bind:aria-expanded="section === 'home' ? subOpen : null"                     x-on:click="pickSection('home', false, $event, false)" class="relative flex size-10 min-h-[var(--nq-touch-min,0px)] min-w-[var(--nq-touch-min,0px)] items-center justify-center rounded-control text-muted-foreground outline-none transition-colors duration-150 ease-nq hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus data-[active=true]:bg-nq-selected data-[active=true]:text-foreground data-[active=true]:before:absolute data-[active=true]:before:inset-y-2 data-[active=true]:before:-start-1.5 data-[active=true]:before:w-0.5 data-[active=true]:before:rounded-full data-[active=true]:before:bg-nq-accent [&amp;_svg]:size-5 [&amp;_svg]:shrink-0">
                    <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"/>
  <path d="M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>
</svg>                                    </a>
            </li>
                                <li>
                <a data-rail-button href="#" aria-label="People" title="People"
                    x-bind:data-active="section === 'people'" x-bind:aria-current="section === 'people' ? 'page' : null"
                     aria-controls="nq-rail-sub-d0bcf8-people" x-bind:aria-expanded="section === 'people' ? subOpen : null"                     x-on:click="pickSection('people', false, $event, false)" class="relative flex size-10 min-h-[var(--nq-touch-min,0px)] min-w-[var(--nq-touch-min,0px)] items-center justify-center rounded-control text-muted-foreground outline-none transition-colors duration-150 ease-nq hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus data-[active=true]:bg-nq-selected data-[active=true]:text-foreground data-[active=true]:before:absolute data-[active=true]:before:inset-y-2 data-[active=true]:before:-start-1.5 data-[active=true]:before:w-0.5 data-[active=true]:before:rounded-full data-[active=true]:before:bg-nq-accent [&amp;_svg]:size-5 [&amp;_svg]:shrink-0">
                    <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/>
  <path d="M16 3.128a4 4 0 0 1 0 7.744"/>
  <path d="M22 21v-2a4 4 0 0 0-3-3.87"/>
  <circle cx="9" cy="7" r="4"/>
</svg>                                            <span class="absolute -end-0.5 -top-0.5 flex min-w-4 items-center justify-center rounded-full bg-nq-accent px-1 text-caption leading-4 font-medium text-foreground">2</span>
                                    </a>
            </li>
                                <li>
                <a data-rail-button href="#help" aria-label="Help" title="Help"
                    x-bind:data-active="section === 'help'" x-bind:aria-current="section === 'help' ? 'page' : null"
                                        x-on:click="pickSection('help', true, $event, false)" class="relative flex size-10 min-h-[var(--nq-touch-min,0px)] min-w-[var(--nq-touch-min,0px)] items-center justify-center rounded-control text-muted-foreground outline-none transition-colors duration-150 ease-nq hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus data-[active=true]:bg-nq-selected data-[active=true]:text-foreground data-[active=true]:before:absolute data-[active=true]:before:inset-y-2 data-[active=true]:before:-start-1.5 data-[active=true]:before:w-0.5 data-[active=true]:before:rounded-full data-[active=true]:before:bg-nq-accent [&amp;_svg]:size-5 [&amp;_svg]:shrink-0">
                    <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
    <circle cx="12" cy="12" r="10"/>
    <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/>
    <path d="M12 17h.01"/>
</svg>                                    </a>
            </li>
            </ul>
    </nav>
        <nav  id="nq-rail-sub-d0bcf8-home"  aria-label="Section navigation: Home" data-slot="icon-rail-sub" data-section="home"
        x-data="{ rail: false, collapsed: false }" x-show="section === 'home' &amp;&amp; subOpen"
        class="flex w-60 shrink-0 flex-col gap-2 overflow-hidden border-e border-border bg-background p-shell">
        <div class="flex h-8 shrink-0 items-center gap-1 ps-2">
            <h2 class="min-w-0 flex-1 truncate text-label text-foreground">Home</h2>
                            <button data-slot="button"
     type="button"                         aria-label="Hide sub-menu" title="Hide sub-menu" x-on:click="setSub(false)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:bg-nq-hover size-control-sm p-0 text-muted-foreground">
        <svg aria-hidden="true" class="rtl:-scale-x-100" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <rect width="18" height="18" x="3" y="3" rx="2"/>
  <path d="M9 3v18"/>
  <path d="m16 15-3-3 3-3"/>
</svg></button>
                    </div>
                <div data-slot="sidebar-content" class="-mx-1 flex min-h-0 flex-1 flex-col gap-[calc(var(--spacing-shell)+--spacing(1))] overflow-y-auto overflow-x-hidden overscroll-contain px-1 [scrollbar-width:thin]"><div data-slot="sidebar-group" role="group"  x-bind:aria-label="(rail && collapsed) ? 'Main' : null"         class="flex flex-col group-data-collapsed/sidebar:border-t group-data-collapsed/sidebar:border-border group-data-collapsed/sidebar:pt-3 group-data-collapsed/sidebar:first:border-0 group-data-collapsed/sidebar:first:pt-0">
                    <div class="group/label flex h-[calc(var(--spacing-nav-row)-4px)] items-center gap-1 ps-2 pe-1 group-data-collapsed/sidebar:hidden">
                <div class="min-w-0 flex-1 truncate text-caption font-medium text-muted-foreground">Main</div>
                            </div>
                <div class="flex flex-col gap-0.5"><div data-slot="tooltip" x-data="nqTooltip(600, false)" x-modelable="open" x-id="['nq-tooltip']" class="contents">
    <span data-slot="tooltip-trigger" class="contents"><a data-slot="sidebar-item"          x-bind:aria-label="(rail && collapsed) ? 'Dashboard' : null"         href="#dash" x-on:click="pickItem(`dash`, true, $event)" x-bind:aria-current="(item === `dash`) ? `page` : null" x-bind:class="(item === `dash`) ? `bg-nq-selected font-medium text-foreground` : ``" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] w-full items-center gap-2 rounded-control px-2 text-start text-body-sm text-sidebar-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus [&_svg]:size-4 [&_svg]:shrink-0 group-data-collapsed/sidebar:size-control group-data-collapsed/sidebar:justify-center group-data-collapsed/sidebar:px-0">
        <span data-slot="sidebar-icon" class="contents"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <rect width="7" height="9" x="3" y="3" rx="1"/>
  <rect width="7" height="5" x="14" y="3" rx="1"/>
  <rect width="7" height="9" x="14" y="12" rx="1"/>
  <rect width="7" height="5" x="3" y="16" rx="1"/>
</svg></span>        <span class="min-w-0 flex-1 truncate group-data-collapsed/sidebar:hidden">Dashboard</span>
            </a></span>
    <template x-teleport="body">
        <div data-slot="tooltip-content" x-bind="popup" x-nq-presence="open" x-anchor.right.offset.6="triggerEl"
            x-bind:class="rail &amp;&amp; collapsed ? &#039;&#039; : &#039;hidden&#039;" class="z-50 max-w-64 rounded-control bg-foreground px-2 py-1 text-caption text-background transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">Dashboard</div>
    </template>
</div>
                                                                                                                            <div data-slot="tooltip" x-data="nqTooltip(600, false)" x-modelable="open" x-id="['nq-tooltip']" class="contents">
    <span data-slot="tooltip-trigger" class="contents"><a data-slot="sidebar-item"          x-bind:aria-label="(rail && collapsed) ? 'Inbox' : null"         href="#" x-on:click="pickItem(`inbox`, false, $event)" x-bind:aria-current="(item === `inbox`) ? `page` : null" x-bind:class="(item === `inbox`) ? `bg-nq-selected font-medium text-foreground` : ``" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] w-full items-center gap-2 rounded-control px-2 text-start text-body-sm text-sidebar-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus [&_svg]:size-4 [&_svg]:shrink-0 group-data-collapsed/sidebar:size-control group-data-collapsed/sidebar:justify-center group-data-collapsed/sidebar:px-0">
        <span data-slot="sidebar-icon" class="contents"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <polyline points="22 12 16 12 14 15 10 15 8 12 2 12"/>
  <path d="M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"/>
</svg></span>        <span class="min-w-0 flex-1 truncate group-data-collapsed/sidebar:hidden">Inbox</span>
        <span class="ms-auto text-caption text-muted-foreground tabular-nums group-data-collapsed/sidebar:hidden">3</span>    </a></span>
    <template x-teleport="body">
        <div data-slot="tooltip-content" x-bind="popup" x-nq-presence="open" x-anchor.right.offset.6="triggerEl"
            x-bind:class="rail &amp;&amp; collapsed ? &#039;&#039; : &#039;hidden&#039;" class="z-50 max-w-64 rounded-control bg-foreground px-2 py-1 text-caption text-background transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">Inbox</div>
    </template>
</div></div>
    </div></div>
            </nav>
            <nav  id="nq-rail-sub-d0bcf8-people"  aria-label="Section navigation: People and access" data-slot="icon-rail-sub" data-section="people"
        x-data="{ rail: false, collapsed: false }" x-show="section === 'people' &amp;&amp; subOpen"
        class="flex w-60 shrink-0 flex-col gap-2 overflow-hidden border-e border-border bg-background p-shell">
        <div class="flex h-8 shrink-0 items-center gap-1 ps-2">
            <h2 class="min-w-0 flex-1 truncate text-label text-foreground">People and access</h2>
                            <button data-slot="button"
     type="button"                         aria-label="Hide sub-menu" title="Hide sub-menu" x-on:click="setSub(false)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:bg-nq-hover size-control-sm p-0 text-muted-foreground">
        <svg aria-hidden="true" class="rtl:-scale-x-100" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <rect width="18" height="18" x="3" y="3" rx="2"/>
  <path d="M9 3v18"/>
  <path d="m16 15-3-3 3-3"/>
</svg></button>
                    </div>
                <div data-slot="sidebar-content" class="-mx-1 flex min-h-0 flex-1 flex-col gap-[calc(var(--spacing-shell)+--spacing(1))] overflow-y-auto overflow-x-hidden overscroll-contain px-1 [scrollbar-width:thin]"><div data-slot="sidebar-group" role="group"         class="flex flex-col group-data-collapsed/sidebar:border-t group-data-collapsed/sidebar:border-border group-data-collapsed/sidebar:pt-3 group-data-collapsed/sidebar:first:border-0 group-data-collapsed/sidebar:first:pt-0">
                <div class="flex flex-col gap-0.5"><div data-slot="tooltip" x-data="nqTooltip(600, false)" x-modelable="open" x-id="['nq-tooltip']" class="contents">
    <span data-slot="tooltip-trigger" class="contents"><a data-slot="sidebar-item"          x-bind:aria-label="(rail && collapsed) ? 'Users' : null"         href="#" x-on:click="pickItem(`users`, false, $event)" x-bind:aria-current="(item === `users`) ? `page` : null" x-bind:class="(item === `users`) ? `bg-nq-selected font-medium text-foreground` : ``" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] w-full items-center gap-2 rounded-control px-2 text-start text-body-sm text-sidebar-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus [&_svg]:size-4 [&_svg]:shrink-0 group-data-collapsed/sidebar:size-control group-data-collapsed/sidebar:justify-center group-data-collapsed/sidebar:px-0">
        <span data-slot="sidebar-icon" class="contents"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/>
  <circle cx="12" cy="7" r="4"/>
</svg></span>        <span class="min-w-0 flex-1 truncate group-data-collapsed/sidebar:hidden">Users</span>
            </a></span>
    <template x-teleport="body">
        <div data-slot="tooltip-content" x-bind="popup" x-nq-presence="open" x-anchor.right.offset.6="triggerEl"
            x-bind:class="rail &amp;&amp; collapsed ? &#039;&#039; : &#039;hidden&#039;" class="z-50 max-w-64 rounded-control bg-foreground px-2 py-1 text-caption text-background transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">Users</div>
    </template>
</div>
                                                                                                <div data-slot="sidebar-nest" class="contents">
    <div data-slot="collapsible" x-data="nqCollapsible(true)" x-modelable="open" x-id="['nq-collapsible']"
    :data-open="open ? '' : undefined" :data-closed="open ? undefined : ''"
     data-open     class="group/nest flex flex-col group-data-collapsed/sidebar:hidden">
    <button type="button" x-on:click="toggle()" x-bind:aria-expanded="open"
            class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] w-full items-center gap-2 rounded-control px-2 text-start text-body-sm text-sidebar-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 font-medium text-foreground">
            <span data-slot="sidebar-icon" class="contents"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/>
</svg></span>            <span class="min-w-0 flex-1 truncate">Access</span>
            <svg aria-hidden="true" class="ms-auto size-3.5! text-muted-foreground transition-[rotate] duration-200 ease-nq group-data-open/nest:rotate-90 rtl:-scale-x-100 rtl:group-data-open/nest:-rotate-90" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="m9 18 6-6-6-6"/>
</svg>        </button>
        <div data-slot="collapsible-panel" x-ref="panel" x-nq-presence="open" :id="$id('nq-collapsible', 'panel')"
     data-open     class="h-(--collapsible-panel-height) overflow-hidden transition-[height,opacity] duration-200 ease-nq motion-reduce:transition-none data-starting-style:h-0 data-starting-style:opacity-0 data-ending-style:h-0 data-ending-style:opacity-0"><div class="ms-4 mt-0.5 flex flex-col gap-0.5 border-s border-border ps-2"><a data-slot="sidebar-sub-item"  href="#" x-on:click="pickItem(`roles`, false, $event)" x-bind:aria-current="(item === `roles`) ? `page` : null" x-bind:class="(item === `roles`) ? `bg-nq-selected font-medium text-foreground` : ``" class="flex h-[calc(var(--spacing-nav-row)-4px)] min-h-[var(--nq-touch-min,0px)] items-center truncate rounded-control px-2 text-body-sm text-muted-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus">Roles</a>
                                                                                                        <a data-slot="sidebar-sub-item"  href="#" x-on:click="pickItem(`perms`, false, $event)" x-bind:aria-current="(item === `perms`) ? `page` : null" x-bind:class="(item === `perms`) ? `bg-nq-selected font-medium text-foreground` : ``" class="flex h-[calc(var(--spacing-nav-row)-4px)] min-h-[var(--nq-touch-min,0px)] items-center truncate rounded-control px-2 text-body-sm text-muted-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus">Permissions</a></div></div>
</div>
    <div data-slot="sidebar-nest-rail" x-data="nqRailFlyout" x-id="['nq-flyout']" class="hidden group-data-collapsed/sidebar:contents">
        <button type="button" x-ref="trigger" aria-label="Access" aria-haspopup="dialog" x-bind:aria-expanded="open"
            x-on:click="toggle()" x-on:pointerenter="hover(true)" x-on:pointerleave="hover(false)" x-bind:data-popup-open="open ? '' : undefined"
            class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] w-full items-center gap-2 rounded-control px-2 text-start text-body-sm text-sidebar-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 justify-center px-0 size-control data-popup-open:bg-nq-hover data-popup-open:text-foreground bg-nq-selected font-medium text-foreground">
            <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/>
</svg>
        </button>
        <template x-teleport="body">
            <div data-slot="sidebar-nest-flyout" x-bind="popup" x-nq-presence="open" x-anchor.right-start.offset.8="$refs.trigger"
                class="z-50 w-auto min-w-44 rounded-floating border border-border bg-popover p-1 text-popover-foreground shadow-floating outline-none transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">
                <div :id="$id('nq-flyout', 'title')" class="px-2 pt-1 pb-1.5 text-caption font-medium text-muted-foreground">Access</div>
                <div class="flex flex-col gap-0.5"><a data-slot="sidebar-sub-item"  href="#" x-on:click="pickItem(`roles`, false, $event)" x-bind:aria-current="(item === `roles`) ? `page` : null" x-bind:class="(item === `roles`) ? `bg-nq-selected font-medium text-foreground` : ``" class="flex h-[calc(var(--spacing-nav-row)-4px)] min-h-[var(--nq-touch-min,0px)] items-center truncate rounded-control px-2 text-body-sm text-muted-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus">Roles</a>
                                                                                                        <a data-slot="sidebar-sub-item"  href="#" x-on:click="pickItem(`perms`, false, $event)" x-bind:aria-current="(item === `perms`) ? `page` : null" x-bind:class="(item === `perms`) ? `bg-nq-selected font-medium text-foreground` : ``" class="flex h-[calc(var(--spacing-nav-row)-4px)] min-h-[var(--nq-touch-min,0px)] items-center truncate rounded-control px-2 text-body-sm text-muted-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus">Permissions</a></div>
            </div>
        </template>
    </div>
</div></div>
    </div></div>
            </nav>
        </div>
    <div class="flex min-w-0 flex-1 flex-col">
        <div data-slot="sheet" x-data="nqDialog(false)" x-modelable="open" x-id="['nq-dialog']" class="contents">
    <div data-slot="icon-rail-mobile-bar" class="flex h-12 shrink-0 items-center gap-2 border-b border-border px-3 md:hidden">
                <button data-slot="sheet-trigger"
     type="button"                         aria-haspopup="dialog" x-on:click="show()" :aria-expanded="open" aria-label="Open navigation" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground hover:bg-nq-hover size-control-sm p-0">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M4 5h16"/>
  <path d="M4 12h16"/>
  <path d="M4 19h16"/>
</svg></button>
                <span class="min-w-0 flex-1 truncate text-label" x-text="JSON.parse('{\u0022home\u0022:\u0022Home\u0022,\u0022people\u0022:\u0022People and access\u0022,\u0022help\u0022:\u0022Help\u0022}')[section]"></span>
            </div>
            <template x-teleport="body">
    <div data-slot="sheet-portal">
        <div data-slot="sheet-backdrop" x-nq-presence="open" x-on:click="close()" class="fixed inset-0 z-50 bg-nq-fg/10 transition-opacity duration-200 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0 dark:bg-nq-bg/60"></div>
        <div data-slot="sheet-content" data-side="start" x-bind="popup" x-nq-presence="open" x-trap.noscroll="open"
            class="fixed z-50 flex flex-col bg-popover text-popover-foreground outline-none shadow-floating transition-[translate,opacity] duration-200 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0 inset-y-0 start-0 h-dvh border-e border-border data-starting-style:-translate-x-8 data-ending-style:-translate-x-8 rtl:data-starting-style:translate-x-8 rtl:data-ending-style:translate-x-8 w-[min(20rem,90vw)] p-0">
            <h2 data-slot="sheet-title" :id="$id('nq-dialog', 'title')" class="text-label text-foreground sr-only">Navigation</h2>
                <div data-slot="sheet-body" class="flex-1 overflow-y-auto overscroll-contain flex h-full min-h-0 p-0"><nav aria-label="Sections" data-slot="icon-rail" class="flex w-14 shrink-0 flex-col items-center gap-3 border-e border-border bg-card py-3">
        <ul class="flex min-h-0 flex-1 flex-col items-center gap-1 overflow-y-auto px-2 [scrollbar-width:none]" x-on:keydown="railKey($event)">
                                <li>
                <a data-rail-button href="#" aria-label="Home" title="Home"
                    x-bind:data-active="section === 'home'" x-bind:aria-current="section === 'home' ? 'page' : null"
                                        x-on:click="pickSection('home', false, $event, true) ? close() : null" class="relative flex size-10 min-h-[var(--nq-touch-min,0px)] min-w-[var(--nq-touch-min,0px)] items-center justify-center rounded-control text-muted-foreground outline-none transition-colors duration-150 ease-nq hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus data-[active=true]:bg-nq-selected data-[active=true]:text-foreground data-[active=true]:before:absolute data-[active=true]:before:inset-y-2 data-[active=true]:before:-start-1.5 data-[active=true]:before:w-0.5 data-[active=true]:before:rounded-full data-[active=true]:before:bg-nq-accent [&amp;_svg]:size-5 [&amp;_svg]:shrink-0">
                    <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"/>
  <path d="M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>
</svg>                                    </a>
            </li>
                                <li>
                <a data-rail-button href="#" aria-label="People" title="People"
                    x-bind:data-active="section === 'people'" x-bind:aria-current="section === 'people' ? 'page' : null"
                                        x-on:click="pickSection('people', false, $event, true) ? close() : null" class="relative flex size-10 min-h-[var(--nq-touch-min,0px)] min-w-[var(--nq-touch-min,0px)] items-center justify-center rounded-control text-muted-foreground outline-none transition-colors duration-150 ease-nq hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus data-[active=true]:bg-nq-selected data-[active=true]:text-foreground data-[active=true]:before:absolute data-[active=true]:before:inset-y-2 data-[active=true]:before:-start-1.5 data-[active=true]:before:w-0.5 data-[active=true]:before:rounded-full data-[active=true]:before:bg-nq-accent [&amp;_svg]:size-5 [&amp;_svg]:shrink-0">
                    <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/>
  <path d="M16 3.128a4 4 0 0 1 0 7.744"/>
  <path d="M22 21v-2a4 4 0 0 0-3-3.87"/>
  <circle cx="9" cy="7" r="4"/>
</svg>                                            <span class="absolute -end-0.5 -top-0.5 flex min-w-4 items-center justify-center rounded-full bg-nq-accent px-1 text-caption leading-4 font-medium text-foreground">2</span>
                                    </a>
            </li>
                                <li>
                <a data-rail-button href="#help" aria-label="Help" title="Help"
                    x-bind:data-active="section === 'help'" x-bind:aria-current="section === 'help' ? 'page' : null"
                                        x-on:click="pickSection('help', true, $event, true) ? close() : null" class="relative flex size-10 min-h-[var(--nq-touch-min,0px)] min-w-[var(--nq-touch-min,0px)] items-center justify-center rounded-control text-muted-foreground outline-none transition-colors duration-150 ease-nq hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus data-[active=true]:bg-nq-selected data-[active=true]:text-foreground data-[active=true]:before:absolute data-[active=true]:before:inset-y-2 data-[active=true]:before:-start-1.5 data-[active=true]:before:w-0.5 data-[active=true]:before:rounded-full data-[active=true]:before:bg-nq-accent [&amp;_svg]:size-5 [&amp;_svg]:shrink-0">
                    <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
    <circle cx="12" cy="12" r="10"/>
    <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/>
    <path d="M12 17h.01"/>
</svg>                                    </a>
            </li>
            </ul>
    </nav>
                    <nav  aria-label="Section navigation: Home" data-slot="icon-rail-sub" data-section="home"
        x-data="{ rail: false, collapsed: false }" x-show="section === 'home'"
        class="flex w-60 shrink-0 flex-col gap-2 overflow-hidden border-e border-border bg-background p-shell">
        <div class="flex h-8 shrink-0 items-center gap-1 ps-2">
            <h2 class="min-w-0 flex-1 truncate text-label text-foreground">Home</h2>
                    </div>
                <div data-slot="sidebar-content" class="-mx-1 flex min-h-0 flex-1 flex-col gap-[calc(var(--spacing-shell)+--spacing(1))] overflow-y-auto overflow-x-hidden overscroll-contain px-1 [scrollbar-width:thin]"><div data-slot="sidebar-group" role="group"  x-bind:aria-label="(rail && collapsed) ? 'Main' : null"         class="flex flex-col group-data-collapsed/sidebar:border-t group-data-collapsed/sidebar:border-border group-data-collapsed/sidebar:pt-3 group-data-collapsed/sidebar:first:border-0 group-data-collapsed/sidebar:first:pt-0">
                    <div class="group/label flex h-[calc(var(--spacing-nav-row)-4px)] items-center gap-1 ps-2 pe-1 group-data-collapsed/sidebar:hidden">
                <div class="min-w-0 flex-1 truncate text-caption font-medium text-muted-foreground">Main</div>
                            </div>
                <div class="flex flex-col gap-0.5"><div data-slot="tooltip" x-data="nqTooltip(600, false)" x-modelable="open" x-id="['nq-tooltip']" class="contents">
    <span data-slot="tooltip-trigger" class="contents"><a data-slot="sidebar-item"          x-bind:aria-label="(rail && collapsed) ? 'Dashboard' : null"         href="#dash" x-on:click="pickItem(`dash`, true, $event) ? close() : null" x-bind:aria-current="(item === `dash`) ? `page` : null" x-bind:class="(item === `dash`) ? `bg-nq-selected font-medium text-foreground` : ``" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] w-full items-center gap-2 rounded-control px-2 text-start text-body-sm text-sidebar-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus [&_svg]:size-4 [&_svg]:shrink-0 group-data-collapsed/sidebar:size-control group-data-collapsed/sidebar:justify-center group-data-collapsed/sidebar:px-0">
        <span data-slot="sidebar-icon" class="contents"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <rect width="7" height="9" x="3" y="3" rx="1"/>
  <rect width="7" height="5" x="14" y="3" rx="1"/>
  <rect width="7" height="9" x="14" y="12" rx="1"/>
  <rect width="7" height="5" x="3" y="16" rx="1"/>
</svg></span>        <span class="min-w-0 flex-1 truncate group-data-collapsed/sidebar:hidden">Dashboard</span>
            </a></span>
    <template x-teleport="body">
        <div data-slot="tooltip-content" x-bind="popup" x-nq-presence="open" x-anchor.right.offset.6="triggerEl"
            x-bind:class="rail &amp;&amp; collapsed ? &#039;&#039; : &#039;hidden&#039;" class="z-50 max-w-64 rounded-control bg-foreground px-2 py-1 text-caption text-background transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">Dashboard</div>
    </template>
</div>
                                                                                                                            <div data-slot="tooltip" x-data="nqTooltip(600, false)" x-modelable="open" x-id="['nq-tooltip']" class="contents">
    <span data-slot="tooltip-trigger" class="contents"><a data-slot="sidebar-item"          x-bind:aria-label="(rail && collapsed) ? 'Inbox' : null"         href="#" x-on:click="pickItem(`inbox`, false, $event) ? close() : null" x-bind:aria-current="(item === `inbox`) ? `page` : null" x-bind:class="(item === `inbox`) ? `bg-nq-selected font-medium text-foreground` : ``" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] w-full items-center gap-2 rounded-control px-2 text-start text-body-sm text-sidebar-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus [&_svg]:size-4 [&_svg]:shrink-0 group-data-collapsed/sidebar:size-control group-data-collapsed/sidebar:justify-center group-data-collapsed/sidebar:px-0">
        <span data-slot="sidebar-icon" class="contents"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <polyline points="22 12 16 12 14 15 10 15 8 12 2 12"/>
  <path d="M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"/>
</svg></span>        <span class="min-w-0 flex-1 truncate group-data-collapsed/sidebar:hidden">Inbox</span>
        <span class="ms-auto text-caption text-muted-foreground tabular-nums group-data-collapsed/sidebar:hidden">3</span>    </a></span>
    <template x-teleport="body">
        <div data-slot="tooltip-content" x-bind="popup" x-nq-presence="open" x-anchor.right.offset.6="triggerEl"
            x-bind:class="rail &amp;&amp; collapsed ? &#039;&#039; : &#039;hidden&#039;" class="z-50 max-w-64 rounded-control bg-foreground px-2 py-1 text-caption text-background transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">Inbox</div>
    </template>
</div></div>
    </div></div>
            </nav>
            <nav  aria-label="Section navigation: People and access" data-slot="icon-rail-sub" data-section="people"
        x-data="{ rail: false, collapsed: false }" x-show="section === 'people'"
        class="flex w-60 shrink-0 flex-col gap-2 overflow-hidden border-e border-border bg-background p-shell">
        <div class="flex h-8 shrink-0 items-center gap-1 ps-2">
            <h2 class="min-w-0 flex-1 truncate text-label text-foreground">People and access</h2>
                    </div>
                <div data-slot="sidebar-content" class="-mx-1 flex min-h-0 flex-1 flex-col gap-[calc(var(--spacing-shell)+--spacing(1))] overflow-y-auto overflow-x-hidden overscroll-contain px-1 [scrollbar-width:thin]"><div data-slot="sidebar-group" role="group"         class="flex flex-col group-data-collapsed/sidebar:border-t group-data-collapsed/sidebar:border-border group-data-collapsed/sidebar:pt-3 group-data-collapsed/sidebar:first:border-0 group-data-collapsed/sidebar:first:pt-0">
                <div class="flex flex-col gap-0.5"><div data-slot="tooltip" x-data="nqTooltip(600, false)" x-modelable="open" x-id="['nq-tooltip']" class="contents">
    <span data-slot="tooltip-trigger" class="contents"><a data-slot="sidebar-item"          x-bind:aria-label="(rail && collapsed) ? 'Users' : null"         href="#" x-on:click="pickItem(`users`, false, $event) ? close() : null" x-bind:aria-current="(item === `users`) ? `page` : null" x-bind:class="(item === `users`) ? `bg-nq-selected font-medium text-foreground` : ``" class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] w-full items-center gap-2 rounded-control px-2 text-start text-body-sm text-sidebar-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus [&_svg]:size-4 [&_svg]:shrink-0 group-data-collapsed/sidebar:size-control group-data-collapsed/sidebar:justify-center group-data-collapsed/sidebar:px-0">
        <span data-slot="sidebar-icon" class="contents"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/>
  <circle cx="12" cy="7" r="4"/>
</svg></span>        <span class="min-w-0 flex-1 truncate group-data-collapsed/sidebar:hidden">Users</span>
            </a></span>
    <template x-teleport="body">
        <div data-slot="tooltip-content" x-bind="popup" x-nq-presence="open" x-anchor.right.offset.6="triggerEl"
            x-bind:class="rail &amp;&amp; collapsed ? &#039;&#039; : &#039;hidden&#039;" class="z-50 max-w-64 rounded-control bg-foreground px-2 py-1 text-caption text-background transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">Users</div>
    </template>
</div>
                                                                                                <div data-slot="sidebar-nest" class="contents">
    <div data-slot="collapsible" x-data="nqCollapsible(true)" x-modelable="open" x-id="['nq-collapsible']"
    :data-open="open ? '' : undefined" :data-closed="open ? undefined : ''"
     data-open     class="group/nest flex flex-col group-data-collapsed/sidebar:hidden">
    <button type="button" x-on:click="toggle()" x-bind:aria-expanded="open"
            class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] w-full items-center gap-2 rounded-control px-2 text-start text-body-sm text-sidebar-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 font-medium text-foreground">
            <span data-slot="sidebar-icon" class="contents"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/>
</svg></span>            <span class="min-w-0 flex-1 truncate">Access</span>
            <svg aria-hidden="true" class="ms-auto size-3.5! text-muted-foreground transition-[rotate] duration-200 ease-nq group-data-open/nest:rotate-90 rtl:-scale-x-100 rtl:group-data-open/nest:-rotate-90" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="m9 18 6-6-6-6"/>
</svg>        </button>
        <div data-slot="collapsible-panel" x-ref="panel" x-nq-presence="open" :id="$id('nq-collapsible', 'panel')"
     data-open     class="h-(--collapsible-panel-height) overflow-hidden transition-[height,opacity] duration-200 ease-nq motion-reduce:transition-none data-starting-style:h-0 data-starting-style:opacity-0 data-ending-style:h-0 data-ending-style:opacity-0"><div class="ms-4 mt-0.5 flex flex-col gap-0.5 border-s border-border ps-2"><a data-slot="sidebar-sub-item"  href="#" x-on:click="pickItem(`roles`, false, $event) ? close() : null" x-bind:aria-current="(item === `roles`) ? `page` : null" x-bind:class="(item === `roles`) ? `bg-nq-selected font-medium text-foreground` : ``" class="flex h-[calc(var(--spacing-nav-row)-4px)] min-h-[var(--nq-touch-min,0px)] items-center truncate rounded-control px-2 text-body-sm text-muted-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus">Roles</a>
                                                                                                        <a data-slot="sidebar-sub-item"  href="#" x-on:click="pickItem(`perms`, false, $event) ? close() : null" x-bind:aria-current="(item === `perms`) ? `page` : null" x-bind:class="(item === `perms`) ? `bg-nq-selected font-medium text-foreground` : ``" class="flex h-[calc(var(--spacing-nav-row)-4px)] min-h-[var(--nq-touch-min,0px)] items-center truncate rounded-control px-2 text-body-sm text-muted-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus">Permissions</a></div></div>
</div>
    <div data-slot="sidebar-nest-rail" x-data="nqRailFlyout" x-id="['nq-flyout']" class="hidden group-data-collapsed/sidebar:contents">
        <button type="button" x-ref="trigger" aria-label="Access" aria-haspopup="dialog" x-bind:aria-expanded="open"
            x-on:click="toggle()" x-on:pointerenter="hover(true)" x-on:pointerleave="hover(false)" x-bind:data-popup-open="open ? '' : undefined"
            class="relative flex h-nav-row min-h-[var(--nq-touch-min,0px)] w-full items-center gap-2 rounded-control px-2 text-start text-body-sm text-sidebar-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 justify-center px-0 size-control data-popup-open:bg-nq-hover data-popup-open:text-foreground bg-nq-selected font-medium text-foreground">
            <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/>
</svg>
        </button>
        <template x-teleport="body">
            <div data-slot="sidebar-nest-flyout" x-bind="popup" x-nq-presence="open" x-anchor.right-start.offset.8="$refs.trigger"
                class="z-50 w-auto min-w-44 rounded-floating border border-border bg-popover p-1 text-popover-foreground shadow-floating outline-none transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">
                <div :id="$id('nq-flyout', 'title')" class="px-2 pt-1 pb-1.5 text-caption font-medium text-muted-foreground">Access</div>
                <div class="flex flex-col gap-0.5"><a data-slot="sidebar-sub-item"  href="#" x-on:click="pickItem(`roles`, false, $event) ? close() : null" x-bind:aria-current="(item === `roles`) ? `page` : null" x-bind:class="(item === `roles`) ? `bg-nq-selected font-medium text-foreground` : ``" class="flex h-[calc(var(--spacing-nav-row)-4px)] min-h-[var(--nq-touch-min,0px)] items-center truncate rounded-control px-2 text-body-sm text-muted-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus">Roles</a>
                                                                                                        <a data-slot="sidebar-sub-item"  href="#" x-on:click="pickItem(`perms`, false, $event) ? close() : null" x-bind:aria-current="(item === `perms`) ? `page` : null" x-bind:class="(item === `perms`) ? `bg-nq-selected font-medium text-foreground` : ``" class="flex h-[calc(var(--spacing-nav-row)-4px)] min-h-[var(--nq-touch-min,0px)] items-center truncate rounded-control px-2 text-body-sm text-muted-foreground transition-colors duration-150 ease-nq outline-none hover:bg-nq-hover hover:text-foreground focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-nq-focus">Permissions</a></div>
            </div>
        </template>
    </div>
</div></div>
    </div></div>
            </nav></div>
                    </div>
    </div>
</template>
</div>
        <div x-show="hasSub && ! subOpen" class="hidden px-3 pt-3 md:block">
            <button data-slot="button"
     type="button"                         aria-label="Show sub-menu" title="Show sub-menu" x-bind:aria-controls="&#039;nq-rail-sub-d0bcf8-&#039; + section" x-bind:aria-expanded="subOpen" x-on:click="setSub(true)" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:bg-nq-hover size-control-sm p-0 text-muted-foreground">
        <svg aria-hidden="true" class="rtl:-scale-x-100" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <rect width="18" height="18" x="3" y="3" rx="2"/>
  <path d="M9 3v18"/>
  <path d="m14 9 3 3-3 3"/>
</svg></button>
        </div>
        <div data-slot="icon-rail-content" class="min-h-0 flex-1 overflow-y-auto"><div id="rail-page" class="p-4 text-body-sm">Page content</div></div>
    </div>
</div>
</div>
```
