{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "sidebar-05",
  "title": "Dual-Rail Sidebar",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/sidebar-05/sidebar-05.component.ts",
      "content": "// Dual-rail sidebar with master/detail behavior. The thin rail picks the section; the\n// main panel renders the rows for the active section. One <ui-sidebar collapsible=\"icon\">\n// contains rail + panel as inline flex siblings.\n//\n// Desktop: when collapsed (trigger clicked), the kit shrinks the sidebar to\n// --sidebar-width-icon. Set that to 3.5rem so only the rail stays. The panel is hidden\n// via group-data-[collapsible=icon] which only fires on the desktop branch of <ui-sidebar>\n// (the mobile sheet has no `group` ancestor with that attr, so mobile always shows rail+panel).\n//\n// IMPORTANT: the parent <ui-sidebar-provider> must set BOTH custom widths, e.g.\n// <ui-sidebar-provider style=\"--sidebar-width: 19.5rem; --sidebar-width-icon: 3.5rem\">\n// The vars set on <ui-sidebar> itself are too deep -- the layout-allocating wrapper sits\n// above it and reads the provider's vars.\n//\n// To wire to your router, replace the signal-based switch with route matches\n// (e.g. set active = 'projects' on /projects/*).\n//\n// Port of the React block 1:1.\nimport { AfterViewInit, ChangeDetectionStrategy, Component, signal } from '@angular/core'\nimport {\n  Bell,\n  Briefcase,\n  Calendar,\n  ChartLine,\n  ChevronsUpDown,\n  ClipboardList,\n  CreditCard,\n  FileText,\n  Folder,\n  Gauge,\n  Headphones,\n  HelpCircle,\n  Home,\n  Inbox,\n  LayoutDashboard,\n  Lock,\n  LucideAngularModule,\n  Mail,\n  MessageSquare,\n  Moon,\n  Search,\n  Send,\n  Settings as SettingsIcon,\n  Star,\n  Sun,\n  Users,\n  type LucideIconData,\n} from 'lucide-angular'\nimport { injectTheme } from '@/lib/use-theme'\nimport { UiAvatarComponent, UiAvatarFallbackComponent } from '@/ui/avatar/avatar.component'\nimport {\n  UiDropdownMenuComponent,\n  UiDropdownMenuContentComponent,\n  UiDropdownMenuItemComponent,\n  UiDropdownMenuLabelComponent,\n  UiDropdownMenuSeparatorComponent,\n  UiDropdownMenuTriggerComponent,\n} from '@/ui/dropdown-menu/dropdown-menu.component'\nimport { UiInputComponent } from '@/ui/input/input.component'\nimport {\n  UiSidebarComponent,\n  UiSidebarContentComponent,\n  UiSidebarGroupComponent,\n  UiSidebarGroupContentComponent,\n  UiSidebarGroupLabelComponent,\n  UiSidebarHeaderComponent,\n  UiSidebarMenuButtonComponent,\n  UiSidebarMenuComponent,\n  UiSidebarMenuItemComponent,\n  injectSidebar,\n} from '@/ui/sidebar/sidebar.component'\n\ntype RailId = 'home' | 'projects' | 'inbox' | 'messages' | 'support' | 'settings'\n\ninterface RailItem {\n  id: RailId\n  icon: LucideIconData\n  label: string\n}\n\nconst rail: RailItem[] = [\n  { id: 'home', icon: Home, label: 'Home' },\n  { id: 'projects', icon: Folder, label: 'Projects' },\n  { id: 'inbox', icon: Bell, label: 'Inbox' },\n  { id: 'messages', icon: MessageSquare, label: 'Messages' },\n]\nconst railLower: RailItem[] = [\n  { id: 'support', icon: Headphones, label: 'Support' },\n  { id: 'settings', icon: SettingsIcon, label: 'Settings' },\n]\n\nconst titles: Record<RailId, string> = {\n  home: 'Workspace',\n  projects: 'Projects',\n  inbox: 'Inbox',\n  messages: 'Messages',\n  support: 'Support',\n  settings: 'Settings',\n}\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-sidebar-05, [ui-sidebar-05]',\n  standalone: true,\n  // React renders <Sidebar> itself: keep this wrapper out of the provider's flex layout.\n  host: { class: 'contents' },\n  imports: [\n    LucideAngularModule,\n    UiAvatarComponent,\n    UiAvatarFallbackComponent,\n    UiDropdownMenuComponent,\n    UiDropdownMenuTriggerComponent,\n    UiDropdownMenuContentComponent,\n    UiDropdownMenuLabelComponent,\n    UiDropdownMenuSeparatorComponent,\n    UiDropdownMenuItemComponent,\n    UiInputComponent,\n    UiSidebarComponent,\n    UiSidebarHeaderComponent,\n    UiSidebarContentComponent,\n    UiSidebarGroupComponent,\n    UiSidebarGroupLabelComponent,\n    UiSidebarGroupContentComponent,\n    UiSidebarMenuComponent,\n    UiSidebarMenuItemComponent,\n    UiSidebarMenuButtonComponent,\n  ],\n  template: `\n    <!-- Single Sidebar primitive containing BOTH rails inline. On desktop the rail (56px)\n         stays visible when collapsed thanks to collapsible=\"icon\" + --sidebar-width-icon:\n         3.5rem; the panel hides only when state=collapsed. On mobile the kit sheet renders\n         the entire dual rail inside a single sheet pane. -->\n    <ui-sidebar collapsible=\"icon\">\n      <div class=\"flex h-full w-full\">\n        <!-- Thin icon rail -- 56px wide. Clicking an icon updates \"active\"\n             which swaps the main panel content below. -->\n        <aside class=\"border-sidebar-border flex w-14 shrink-0 flex-col items-center gap-0.5 border-r py-2\">\n          <button\n            type=\"button\"\n            aria-label=\"uipkge\"\n            class=\"bg-sidebar-primary text-sidebar-primary-foreground mb-1 flex aspect-square size-9 items-center justify-center rounded-lg shadow-sm ring-1 ring-white/10 transition-transform ring-inset hover:scale-105\"\n          >\n            <svg viewBox=\"0 0 24 24\" class=\"size-4\" fill=\"currentColor\" aria-hidden=\"true\">\n              <rect x=\"2\" y=\"2\" width=\"9\" height=\"9\" rx=\"1.5\" />\n              <rect x=\"13\" y=\"2\" width=\"9\" height=\"9\" rx=\"1.5\" opacity=\"0.55\" />\n              <rect x=\"2\" y=\"13\" width=\"9\" height=\"9\" rx=\"1.5\" opacity=\"0.55\" />\n              <rect x=\"13\" y=\"13\" width=\"9\" height=\"9\" rx=\"1.5\" />\n            </svg>\n          </button>\n\n          @for (item of rail; track item.id) {\n            <button\n              type=\"button\"\n              [attr.aria-label]=\"item.label\"\n              [attr.aria-current]=\"active() === item.id ? 'page' : null\"\n              [class]=\"railButtonClass(item.id)\"\n              (click)=\"selectRail(item.id)\"\n            >\n              @if (active() === item.id) {\n                <span class=\"bg-sidebar-primary absolute top-1/2 left-0 h-5 w-0.5 -translate-y-1/2 rounded-r-full\"></span>\n              }\n              <lucide-icon [img]=\"item.icon\" class=\"size-4\" />\n            </button>\n          }\n\n          <div class=\"bg-sidebar-border/70 my-2 h-px w-7\"></div>\n\n          @for (item of railLower; track item.id) {\n            <button\n              type=\"button\"\n              [attr.aria-label]=\"item.label\"\n              [attr.aria-current]=\"active() === item.id ? 'page' : null\"\n              [class]=\"railButtonClass(item.id)\"\n              (click)=\"selectRail(item.id)\"\n            >\n              @if (active() === item.id) {\n                <span class=\"bg-sidebar-primary absolute top-1/2 left-0 h-5 w-0.5 -translate-y-1/2 rounded-r-full\"></span>\n              }\n              <lucide-icon [img]=\"item.icon\" class=\"size-4\" />\n            </button>\n          }\n\n          <div class=\"mt-auto flex flex-col items-center gap-1.5\">\n            <button\n              type=\"button\"\n              [attr.aria-label]=\"isDark ? 'Switch to light theme' : 'Switch to dark theme'\"\n              class=\"text-muted-foreground hover:bg-sidebar-accent/60 hover:text-foreground flex aspect-square size-9 items-center justify-center rounded-lg transition-colors\"\n              (click)=\"toggleTheme()\"\n            >\n              @if (isDark) {\n                <lucide-icon [img]=\"Sun\" class=\"size-4\" />\n              } @else {\n                <lucide-icon [img]=\"Moon\" class=\"size-4\" />\n              }\n            </button>\n\n            <ui-dropdown-menu>\n              <button\n                type=\"button\"\n                ui-dropdown-menu-trigger\n                aria-label=\"James Carter\"\n                class=\"ring-offset-sidebar focus-visible:ring-ring data-[state=open]:ring-ring rounded-full transition focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none data-[state=open]:ring-2\"\n              >\n                <ui-avatar class=\"size-8\">\n                  <ui-avatar-fallback class=\"bg-sidebar-accent text-sidebar-accent-foreground text-xs\"\n                    >JC</ui-avatar-fallback\n                  >\n                </ui-avatar>\n              </button>\n              <ui-dropdown-menu-content\n                class=\"min-w-56 rounded-lg\"\n                [side]=\"sidebar.isMobile ? 'top' : 'right'\"\n                align=\"end\"\n                [sideOffset]=\"8\"\n              >\n                <ui-dropdown-menu-label class=\"p-0 font-normal\">\n                  <div class=\"flex items-center gap-2 px-1 py-1.5 text-left text-sm\">\n                    <ui-avatar class=\"size-8 rounded-lg\">\n                      <ui-avatar-fallback class=\"bg-sidebar-accent text-sidebar-accent-foreground rounded-lg text-xs\"\n                        >JC</ui-avatar-fallback\n                      >\n                    </ui-avatar>\n                    <div class=\"grid flex-1 leading-tight\">\n                      <span class=\"truncate font-medium\">James Carter</span>\n                      <span class=\"text-muted-foreground truncate text-xs\">Admin</span>\n                    </div>\n                  </div>\n                </ui-dropdown-menu-label>\n                <ui-dropdown-menu-separator />\n                <ui-dropdown-menu-item>\n                  <lucide-icon [img]=\"Send\" class=\"size-4\" /> Invite teammates\n                </ui-dropdown-menu-item>\n                <ui-dropdown-menu-item>\n                  <lucide-icon [img]=\"SettingsIcon\" class=\"size-4\" /> Workspace settings\n                </ui-dropdown-menu-item>\n              </ui-dropdown-menu-content>\n            </ui-dropdown-menu>\n          </div>\n        </aside>\n\n        <!-- Main panel -- header is the same for every section; the content area swaps\n             based on \"active\". Each section's rows are spelled out inline so consumers can\n             edit them in place. Hidden on desktop when state=collapsed (rail stays). -->\n        <div class=\"flex min-w-0 flex-1 flex-col group-data-[collapsible=icon]:hidden\">\n          <ui-sidebar-header>\n            <ul ui-sidebar-menu>\n              <li ui-sidebar-menu-item>\n                <button type=\"button\" ui-sidebar-menu-button size=\"lg\">\n                  <div\n                    class=\"bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 shrink-0 items-center justify-center rounded-lg\"\n                  >\n                    <svg viewBox=\"0 0 24 24\" class=\"size-4\" fill=\"currentColor\" aria-hidden=\"true\">\n                      <rect x=\"2\" y=\"2\" width=\"9\" height=\"9\" rx=\"1.5\" />\n                      <rect x=\"13\" y=\"2\" width=\"9\" height=\"9\" rx=\"1.5\" opacity=\"0.55\" />\n                      <rect x=\"2\" y=\"13\" width=\"9\" height=\"9\" rx=\"1.5\" opacity=\"0.55\" />\n                      <rect x=\"13\" y=\"13\" width=\"9\" height=\"9\" rx=\"1.5\" />\n                    </svg>\n                  </div>\n                  <div class=\"grid flex-1 text-left text-sm leading-tight\">\n                    <span class=\"font-display truncate font-bold\">uipkge</span>\n                    <span class=\"text-muted-foreground truncate text-xs\">{{ titles[active()] }}</span>\n                  </div>\n                  <lucide-icon [img]=\"ChevronsUpDown\" class=\"ml-auto size-4\" />\n                </button>\n              </li>\n            </ul>\n\n            <div class=\"px-1 pt-1\">\n              <ui-input\n                type=\"text\"\n                placeholder=\"Search...\"\n                allowClear\n                [prefix]=\"searchPrefix\"\n                [suffix]=\"searchSuffix\"\n                class=\"bg-background h-8 w-full shadow-none\"\n              />\n              <ng-template #searchPrefix>\n                <lucide-icon [img]=\"Search\" class=\"text-muted-foreground size-3.5\" />\n              </ng-template>\n              <ng-template #searchSuffix>\n                <kbd\n                  class=\"bg-muted text-muted-foreground pointer-events-none inline-flex h-5 items-center gap-0.5 rounded border px-1 font-mono text-xs font-medium select-none\"\n                >\n                  <span>&#8984;</span>F\n                </kbd>\n              </ng-template>\n            </div>\n          </ui-sidebar-header>\n\n          <ui-sidebar-content>\n            <!-- HOME: full workspace nav -->\n            @if (active() === 'home') {\n              <ui-sidebar-group>\n                <ui-sidebar-group-content>\n                  <ul ui-sidebar-menu>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button isActive>\n                        <lucide-icon [img]=\"LayoutDashboard\" class=\"size-4\" />\n                        <span>Dashboard</span>\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"Users\" class=\"size-4\" />\n                        <span>Employees</span>\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"Briefcase\" class=\"size-4\" />\n                        <span>Clients</span>\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"Folder\" class=\"size-4\" />\n                        <span>Projects</span>\n                      </button>\n                    </li>\n                  </ul>\n                </ui-sidebar-group-content>\n              </ui-sidebar-group>\n\n              <ui-sidebar-group>\n                <ui-sidebar-group-label>Workforce</ui-sidebar-group-label>\n                <ui-sidebar-group-content>\n                  <ul ui-sidebar-menu>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"Calendar\" class=\"size-4\" />\n                        <span>Calendar</span>\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"ClipboardList\" class=\"size-4\" />\n                        <span>Attendance</span>\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"Mail\" class=\"size-4\" />\n                        <span>Mail</span>\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"ChartLine\" class=\"size-4\" />\n                        <span>Analytics</span>\n                      </button>\n                    </li>\n                  </ul>\n                </ui-sidebar-group-content>\n              </ui-sidebar-group>\n            } @else if (active() === 'projects') {\n              <!-- PROJECTS: pinned and recent projects -->\n              <ui-sidebar-group>\n                <ui-sidebar-group-label>Pinned</ui-sidebar-group-label>\n                <ui-sidebar-group-content>\n                  <ul ui-sidebar-menu>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <div\n                          class=\"bg-chart-1 flex aspect-square size-5 shrink-0 items-center justify-center rounded-md text-white\"\n                        >\n                          <lucide-icon [img]=\"Folder\" class=\"size-3\" />\n                        </div>\n                        <span>Shift Planner</span>\n                        <lucide-icon [img]=\"Star\" class=\"text-warning ml-auto size-3.5 fill-current\" />\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <div\n                          class=\"bg-chart-2 flex aspect-square size-5 shrink-0 items-center justify-center rounded-md text-white\"\n                        >\n                          <lucide-icon [img]=\"Folder\" class=\"size-3\" />\n                        </div>\n                        <span>Training Portal</span>\n                        <lucide-icon [img]=\"Star\" class=\"text-warning ml-auto size-3.5 fill-current\" />\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <div\n                          class=\"bg-chart-3 flex aspect-square size-5 shrink-0 items-center justify-center rounded-md text-white\"\n                        >\n                          <lucide-icon [img]=\"Folder\" class=\"size-3\" />\n                        </div>\n                        <span>Performance Hub</span>\n                        <lucide-icon [img]=\"Star\" class=\"text-warning ml-auto size-3.5 fill-current\" />\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <div\n                          class=\"bg-chart-4 flex aspect-square size-5 shrink-0 items-center justify-center rounded-md text-white\"\n                        >\n                          <lucide-icon [img]=\"Folder\" class=\"size-3\" />\n                        </div>\n                        <span>Expense Claims</span>\n                        <lucide-icon [img]=\"Star\" class=\"text-warning ml-auto size-3.5 fill-current\" />\n                      </button>\n                    </li>\n                  </ul>\n                </ui-sidebar-group-content>\n              </ui-sidebar-group>\n\n              <ui-sidebar-group>\n                <ui-sidebar-group-label>Recent</ui-sidebar-group-label>\n                <ui-sidebar-group-content>\n                  <ul ui-sidebar-menu>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"Folder\" class=\"size-4\" />\n                        <span>Onboarding 2026</span>\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"Folder\" class=\"size-4\" />\n                        <span>Q1 hiring plan</span>\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"Folder\" class=\"size-4\" />\n                        <span>Compliance refresh</span>\n                      </button>\n                    </li>\n                  </ul>\n                </ui-sidebar-group-content>\n              </ui-sidebar-group>\n            } @else if (active() === 'inbox') {\n              <!-- INBOX: notifications list -->\n              <ui-sidebar-group>\n                <ui-sidebar-group-label>Today</ui-sidebar-group-label>\n                <ui-sidebar-group-content>\n                  <ul ui-sidebar-menu>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"Inbox\" class=\"size-4\" />\n                        <span>3 PTO requests pending</span>\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"Bell\" class=\"size-4\" />\n                        <span>Payroll cycle closes today</span>\n                      </button>\n                    </li>\n                  </ul>\n                </ui-sidebar-group-content>\n              </ui-sidebar-group>\n\n              <ui-sidebar-group>\n                <ui-sidebar-group-label>This week</ui-sidebar-group-label>\n                <ui-sidebar-group-content>\n                  <ul ui-sidebar-menu>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"FileText\" class=\"size-4\" />\n                        <span>5 contracts awaiting sign-off</span>\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"Users\" class=\"size-4\" />\n                        <span>2 new hires start Monday</span>\n                      </button>\n                    </li>\n                  </ul>\n                </ui-sidebar-group-content>\n              </ui-sidebar-group>\n            } @else if (active() === 'messages') {\n              <!-- MESSAGES: conversations -->\n              <ui-sidebar-group>\n                <ui-sidebar-group-label>Direct messages</ui-sidebar-group-label>\n                <ui-sidebar-group-content>\n                  <ul ui-sidebar-menu>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <ui-avatar class=\"size-5\">\n                          <ui-avatar-fallback class=\"bg-chart-1/15 text-foreground text-xs\">OB</ui-avatar-fallback>\n                        </ui-avatar>\n                        <span>Olivia Bennett</span>\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <ui-avatar class=\"size-5\">\n                          <ui-avatar-fallback class=\"bg-chart-2/15 text-foreground text-xs\">DM</ui-avatar-fallback>\n                        </ui-avatar>\n                        <span>Daniel Morgan</span>\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <ui-avatar class=\"size-5\">\n                          <ui-avatar-fallback class=\"bg-chart-3/15 text-foreground text-xs\">ER</ui-avatar-fallback>\n                        </ui-avatar>\n                        <span>Ethan Reynolds</span>\n                      </button>\n                    </li>\n                  </ul>\n                </ui-sidebar-group-content>\n              </ui-sidebar-group>\n\n              <ui-sidebar-group>\n                <ui-sidebar-group-label>Channels</ui-sidebar-group-label>\n                <ui-sidebar-group-content>\n                  <ul ui-sidebar-menu>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"MessageSquare\" class=\"size-4\" />\n                        <span># announcements</span>\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"MessageSquare\" class=\"size-4\" />\n                        <span># hiring</span>\n                      </button>\n                    </li>\n                  </ul>\n                </ui-sidebar-group-content>\n              </ui-sidebar-group>\n            } @else if (active() === 'support') {\n              <!-- SUPPORT: help links -->\n              <ui-sidebar-group>\n                <ui-sidebar-group-label>Help center</ui-sidebar-group-label>\n                <ui-sidebar-group-content>\n                  <ul ui-sidebar-menu>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"HelpCircle\" class=\"size-4\" />\n                        <span>Getting started</span>\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"FileText\" class=\"size-4\" />\n                        <span>Onboarding guide</span>\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"Send\" class=\"size-4\" />\n                        <span>Contact support</span>\n                      </button>\n                    </li>\n                  </ul>\n                </ui-sidebar-group-content>\n              </ui-sidebar-group>\n            } @else if (active() === 'settings') {\n              <!-- SETTINGS: workspace settings -->\n              <ui-sidebar-group>\n                <ui-sidebar-group-label>Workspace</ui-sidebar-group-label>\n                <ui-sidebar-group-content>\n                  <ul ui-sidebar-menu>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"SettingsIcon\" class=\"size-4\" />\n                        <span>General</span>\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"Users\" class=\"size-4\" />\n                        <span>Members</span>\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"CreditCard\" class=\"size-4\" />\n                        <span>Billing</span>\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"Gauge\" class=\"size-4\" />\n                        <span>Limits</span>\n                      </button>\n                    </li>\n                  </ul>\n                </ui-sidebar-group-content>\n              </ui-sidebar-group>\n\n              <ui-sidebar-group>\n                <ui-sidebar-group-label>Account</ui-sidebar-group-label>\n                <ui-sidebar-group-content>\n                  <ul ui-sidebar-menu>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"Lock\" class=\"size-4\" />\n                        <span>Security</span>\n                      </button>\n                    </li>\n                    <li ui-sidebar-menu-item>\n                      <button type=\"button\" ui-sidebar-menu-button>\n                        <lucide-icon [img]=\"Bell\" class=\"size-4\" />\n                        <span>Notifications</span>\n                      </button>\n                    </li>\n                  </ul>\n                </ui-sidebar-group-content>\n              </ui-sidebar-group>\n            }\n          </ui-sidebar-content>\n        </div>\n      </div>\n    </ui-sidebar>\n  `,\n})\nexport class UiSidebar05Component implements AfterViewInit {\n  readonly sidebar = injectSidebar()\n  readonly theme = injectTheme()\n\n  readonly rail = rail\n  readonly railLower = railLower\n  readonly titles = titles\n  readonly active = signal<RailId>('home')\n\n  // `mounted` stays false during SSR + the client's first synchronous render, so the\n  // template's isDark is also false on both sides -- no hydration mismatch on the\n  // Sun/Moon icon. ngAfterViewInit only runs after a real browser render (never in plain\n  // instantiation), like Vue's onMounted / React's useEffect.\n  private readonly mounted = signal(false)\n\n  ngAfterViewInit(): void {\n    this.mounted.set(true)\n  }\n\n  protected readonly Search = Search\n  protected readonly Sun = Sun\n  protected readonly Moon = Moon\n  protected readonly Send = Send\n  protected readonly SettingsIcon = SettingsIcon\n  protected readonly ChevronsUpDown = ChevronsUpDown\n  protected readonly LayoutDashboard = LayoutDashboard\n  protected readonly Users = Users\n  protected readonly Briefcase = Briefcase\n  protected readonly Folder = Folder\n  protected readonly Calendar = Calendar\n  protected readonly ClipboardList = ClipboardList\n  protected readonly Mail = Mail\n  protected readonly ChartLine = ChartLine\n  protected readonly Inbox = Inbox\n  protected readonly Bell = Bell\n  protected readonly FileText = FileText\n  protected readonly MessageSquare = MessageSquare\n  protected readonly HelpCircle = HelpCircle\n  protected readonly CreditCard = CreditCard\n  protected readonly Gauge = Gauge\n  protected readonly Lock = Lock\n  protected readonly Star = Star\n\n  get isDark(): boolean {\n    // Template icon: stays Moon until the browser render settles (mounted guard).\n    if (!this.mounted()) return false\n    return this.resolvedDark()\n  }\n\n  private resolvedDark(): boolean {\n    const t = this.theme.theme()\n    if (t === 'dark') return true\n    if (t === 'light') return false\n    return typeof window !== 'undefined' && !!window.matchMedia?.('(prefers-color-scheme: dark)').matches\n  }\n\n  railButtonClass(id: RailId): string {\n    const base = 'relative flex aspect-square size-9 items-center justify-center rounded-lg transition-colors'\n    return this.active() === id\n      ? `${base} bg-sidebar-accent text-foreground`\n      : `${base} text-muted-foreground hover:bg-sidebar-accent/60 hover:text-foreground`\n  }\n\n  // Slack-style rail click: expand the panel if collapsed, or collapse if the user clicks\n  // the already-active icon while expanded. On mobile the sheet open/close is owned by the\n  // inset trigger, so just swap active.\n  selectRail(id: RailId): void {\n    if (this.sidebar.isMobile) {\n      this.active.set(id)\n      return\n    }\n    if (this.sidebar.state === 'expanded' && this.active() === id) {\n      this.sidebar.setOpen(false)\n      return\n    }\n    this.active.set(id)\n    this.sidebar.setOpen(true)\n  }\n\n  toggleTheme(): void {\n    this.theme.setTheme(this.resolvedDark() ? 'light' : 'dark')\n  }\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/sidebar-05/sidebar-05.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/sidebar-05/index.ts",
      "content": "export { UiSidebar05Component } from './sidebar-05.component'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/sidebar-05/index.ts"
    }
  ],
  "dependencies": [
    "lucide-angular"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "https://uipkge.dev/r/angular/sidebar.json",
    "https://uipkge.dev/r/angular/avatar.json",
    "https://uipkge.dev/r/angular/dropdown-menu.json",
    "https://uipkge.dev/r/angular/use-theme.json"
  ],
  "description": "Dual-rail sidebar -- a thin always-visible icon column on the far left holds quick shortcuts (a subset of the full nav), paired with a wider main panel for the brand, search, sections, and footer. Uses collapsible=\"icon\": when the user collapses, only the rail stays. On mobile the kit Sheet shows the full dual rail. Requires the parent SidebarProvider to set both widths: style=\"--sidebar-width: 19.5rem; --sidebar-width-icon: 3.5rem\". Modeled on the GR8R HRMS admin shell.",
  "categories": [
    "layout",
    "sidebar"
  ]
}