{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "sidebar-01",
  "title": "Icon Rail Sidebar",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/sidebar-01/sidebar-01.component.ts",
      "content": "// Edit this file to change brand, navigation, and the user dropdown.\n// Every menu item is spelled out below -- copy, remove, or rename rows directly.\nimport { Component, ChangeDetectionStrategy } from '@angular/core'\nimport {\n  BarChart3,\n  BookOpen,\n  FileText,\n  Files,\n  History,\n  LayoutDashboard,\n  LucideAngularModule,\n  Table as TableIcon,\n} from 'lucide-angular'\nimport {\n  UiSidebarComponent,\n  UiSidebarContentComponent,\n  UiSidebarFooterComponent,\n  UiSidebarGroupComponent,\n  UiSidebarGroupContentComponent,\n  UiSidebarGroupLabelComponent,\n  UiSidebarHeaderComponent,\n  UiSidebarMenuButtonComponent,\n  UiSidebarMenuComponent,\n  UiSidebarMenuItemComponent,\n  UiSidebarRailComponent,\n} from '@/ui/sidebar/sidebar.component'\nimport { Sidebar01NavUserComponent } from './nav-user-01.component'\n\n/**\n * Sidebar01 -- the React block, 1:1: a `collapsible=\"icon\"` Sidebar with a brand\n * row, Workspace + Resources groups and a user dropdown footer. It reads the\n * surrounding <ui-sidebar-provider>, so <ui-sidebar-trigger>, the rail and\n * Cmd/Ctrl+B collapse it to the icon rail (labels become tooltips).\n */\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-sidebar-01, [ui-sidebar-01]',\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    UiSidebarComponent,\n    UiSidebarHeaderComponent,\n    UiSidebarContentComponent,\n    UiSidebarFooterComponent,\n    UiSidebarGroupComponent,\n    UiSidebarGroupLabelComponent,\n    UiSidebarGroupContentComponent,\n    UiSidebarMenuComponent,\n    UiSidebarMenuItemComponent,\n    UiSidebarMenuButtonComponent,\n    UiSidebarRailComponent,\n    Sidebar01NavUserComponent,\n  ],\n  template: `\n    <ui-sidebar collapsible=\"icon\">\n      <ui-sidebar-header>\n        <ul ui-sidebar-menu>\n          <li ui-sidebar-menu-item>\n            <button\n              type=\"button\"\n              ui-sidebar-menu-button\n              size=\"lg\"\n              tooltip=\"uipkge\"\n              class=\"group-data-[collapsible=icon]:!justify-center\"\n            >\n              <div\n                class=\"bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 shrink-0 items-center justify-center rounded-lg group-data-[collapsible=icon]:size-6\"\n              >\n                <svg\n                  viewBox=\"0 0 24 24\"\n                  class=\"size-4 group-data-[collapsible=icon]:size-3.5\"\n                  fill=\"currentColor\"\n                  aria-hidden=\"true\"\n                >\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 group-data-[collapsible=icon]:hidden\">\n                <span class=\"font-display truncate font-bold\">uipkge</span>\n                <span class=\"text-muted-foreground truncate text-xs\">uipkge.dev</span>\n              </div>\n            </button>\n          </li>\n        </ul>\n      </ui-sidebar-header>\n      <ui-sidebar-content>\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                <!-- TODO: wrap in a routerLink and bind isActive to your route -->\n                <button type=\"button\" ui-sidebar-menu-button isActive tooltip=\"Dashboard\">\n                  <lucide-icon [img]=\"LayoutDashboard\" class=\"size-4 shrink-0\" />\n                  <span>Dashboard</span>\n                </button>\n              </li>\n              <li ui-sidebar-menu-item>\n                <button type=\"button\" ui-sidebar-menu-button tooltip=\"Data tables\">\n                  <lucide-icon [img]=\"TableIcon\" class=\"size-4 shrink-0\" />\n                  <span>Data tables</span>\n                </button>\n              </li>\n              <li ui-sidebar-menu-item>\n                <button type=\"button\" ui-sidebar-menu-button tooltip=\"Forms\">\n                  <lucide-icon [img]=\"FileText\" class=\"size-4 shrink-0\" />\n                  <span>Forms</span>\n                </button>\n              </li>\n              <li ui-sidebar-menu-item>\n                <button type=\"button\" ui-sidebar-menu-button tooltip=\"Charts\">\n                  <lucide-icon [img]=\"BarChart3\" class=\"size-4 shrink-0\" />\n                  <span>Charts</span>\n                </button>\n              </li>\n              <li ui-sidebar-menu-item>\n                <button type=\"button\" ui-sidebar-menu-button tooltip=\"Pages\">\n                  <lucide-icon [img]=\"Files\" class=\"size-4 shrink-0\" />\n                  <span>Pages</span>\n                </button>\n              </li>\n            </ul>\n          </ui-sidebar-group-content>\n        </ui-sidebar-group>\n        <ui-sidebar-group>\n          <ui-sidebar-group-label>Resources</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 tooltip=\"Docs\">\n                  <lucide-icon [img]=\"BookOpen\" class=\"size-4 shrink-0\" />\n                  <span>Docs</span>\n                </button>\n              </li>\n              <li ui-sidebar-menu-item>\n                <button type=\"button\" ui-sidebar-menu-button tooltip=\"Changelog\">\n                  <lucide-icon [img]=\"History\" class=\"size-4 shrink-0\" />\n                  <span>Changelog</span>\n                </button>\n              </li>\n            </ul>\n          </ui-sidebar-group-content>\n        </ui-sidebar-group>\n      </ui-sidebar-content>\n      <ui-sidebar-footer>\n        <sidebar-01-nav-user />\n      </ui-sidebar-footer>\n      <button ui-sidebar-rail></button>\n    </ui-sidebar>\n  `,\n})\nexport class UiSidebar01Component {\n  protected readonly LayoutDashboard = LayoutDashboard\n  protected readonly TableIcon = TableIcon\n  protected readonly FileText = FileText\n  protected readonly BarChart3 = BarChart3\n  protected readonly Files = Files\n  protected readonly BookOpen = BookOpen\n  protected readonly History = History\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/sidebar-01/sidebar-01.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/sidebar-01/nav-user-01.component.ts",
      "content": "// Edit this file to change the user dropdown content, avatar, and logout handler.\n// The user details are inlined below -- wire them to your auth session in place.\nimport { Component, ChangeDetectionStrategy } from '@angular/core'\nimport {\n  BadgeCheck,\n  ChevronsUpDown,\n  LogOut,\n  LucideAngularModule,\n  Monitor,\n  Moon,\n  Palette,\n  Settings,\n  Sun,\n} from 'lucide-angular'\nimport { injectTheme, type Theme } from '@/lib/use-theme'\nimport { UiAvatarComponent, UiAvatarFallbackComponent } from '@/ui/avatar/avatar.component'\nimport {\n  UiDropdownMenuComponent,\n  UiDropdownMenuContentComponent,\n  UiDropdownMenuGroupComponent,\n  UiDropdownMenuItemComponent,\n  UiDropdownMenuLabelComponent,\n  UiDropdownMenuRadioGroupComponent,\n  UiDropdownMenuRadioItemComponent,\n  UiDropdownMenuSeparatorComponent,\n  UiDropdownMenuSubComponent,\n  UiDropdownMenuSubContentComponent,\n  UiDropdownMenuSubTriggerComponent,\n  UiDropdownMenuTriggerComponent,\n} from '@/ui/dropdown-menu/dropdown-menu.component'\nimport {\n  UiSidebarMenuButtonComponent,\n  UiSidebarMenuComponent,\n  UiSidebarMenuItemComponent,\n  injectSidebar,\n} from '@/ui/sidebar/sidebar.component'\n\nexport type Sidebar01Theme = Theme\n\n// Replace these with your auth session.\nconst user = {\n  name: 'Test User',\n  email: 'you@example.com',\n  initials: 'TU',\n}\n\nfunction handleLogout(): void {\n  // TODO: call your /api/auth/logout endpoint, then redirect.\n  console.warn('NavUser: wire handleLogout() to your auth backend')\n}\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'sidebar-01-nav-user',\n  standalone: true,\n  host: { class: 'contents' },\n  imports: [\n    LucideAngularModule,\n    UiAvatarComponent,\n    UiAvatarFallbackComponent,\n    UiDropdownMenuComponent,\n    UiDropdownMenuTriggerComponent,\n    UiDropdownMenuContentComponent,\n    UiDropdownMenuGroupComponent,\n    UiDropdownMenuItemComponent,\n    UiDropdownMenuLabelComponent,\n    UiDropdownMenuRadioGroupComponent,\n    UiDropdownMenuRadioItemComponent,\n    UiDropdownMenuSeparatorComponent,\n    UiDropdownMenuSubComponent,\n    UiDropdownMenuSubTriggerComponent,\n    UiDropdownMenuSubContentComponent,\n    UiSidebarMenuComponent,\n    UiSidebarMenuItemComponent,\n    UiSidebarMenuButtonComponent,\n  ],\n  template: `\n    <ul ui-sidebar-menu>\n      <li ui-sidebar-menu-item>\n        <ui-dropdown-menu>\n          <button\n            type=\"button\"\n            ui-sidebar-menu-button\n            ui-dropdown-menu-trigger\n            size=\"lg\"\n            class=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground group-data-[collapsible=icon]:!justify-center\"\n          >\n            <ui-avatar class=\"h-8 w-8 shrink-0 rounded-lg group-data-[collapsible=icon]:size-6\">\n              <ui-avatar-fallback class=\"rounded-lg text-xs\">{{ user.initials }}</ui-avatar-fallback>\n            </ui-avatar>\n            <div class=\"grid flex-1 text-left text-sm leading-tight group-data-[collapsible=icon]:hidden\">\n              <span class=\"truncate font-medium\">{{ user.name }}</span>\n              <span class=\"truncate text-xs\">{{ user.email }}</span>\n            </div>\n            <lucide-icon [img]=\"ChevronsUpDown\" class=\"ml-auto size-4 group-data-[collapsible=icon]:hidden\" />\n          </button>\n          <ui-dropdown-menu-content\n            class=\"w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg\"\n            [side]=\"sidebar.isMobile ? 'bottom' : 'right'\"\n            align=\"end\"\n            [sideOffset]=\"4\"\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=\"h-8 w-8 rounded-lg\">\n                  <ui-avatar-fallback class=\"rounded-lg\">{{ user.initials }}</ui-avatar-fallback>\n                </ui-avatar>\n                <div class=\"grid flex-1 text-left text-sm leading-tight\">\n                  <span class=\"truncate font-semibold\">{{ user.name }}</span>\n                  <span class=\"truncate text-xs\">{{ user.email }}</span>\n                </div>\n              </div>\n            </ui-dropdown-menu-label>\n            <ui-dropdown-menu-separator />\n            <ui-dropdown-menu-group>\n              <ui-dropdown-menu-item><lucide-icon [img]=\"BadgeCheck\" class=\"size-4\" /> Profile</ui-dropdown-menu-item>\n              <ui-dropdown-menu-item><lucide-icon [img]=\"Settings\" class=\"size-4\" /> Settings</ui-dropdown-menu-item>\n            </ui-dropdown-menu-group>\n            <ui-dropdown-menu-separator />\n            <ui-dropdown-menu-sub>\n              <ui-dropdown-menu-sub-trigger>\n                <lucide-icon [img]=\"Palette\" class=\"size-4\" />\n                Theme\n                <span class=\"text-muted-foreground ml-auto text-xs capitalize\">{{ theme.theme() }}</span>\n              </ui-dropdown-menu-sub-trigger>\n              <ui-dropdown-menu-sub-content class=\"min-w-36\">\n                <ui-dropdown-menu-radio-group [value]=\"theme.theme()\" (valueChange)=\"theme.setTheme($any($event))\">\n                  <ui-dropdown-menu-radio-item value=\"light\"\n                    ><lucide-icon [img]=\"Sun\" class=\"size-4\" /> Light</ui-dropdown-menu-radio-item\n                  >\n                  <ui-dropdown-menu-radio-item value=\"dark\"\n                    ><lucide-icon [img]=\"Moon\" class=\"size-4\" /> Dark</ui-dropdown-menu-radio-item\n                  >\n                  <ui-dropdown-menu-radio-item value=\"system\"\n                    ><lucide-icon [img]=\"Monitor\" class=\"size-4\" /> System</ui-dropdown-menu-radio-item\n                  >\n                </ui-dropdown-menu-radio-group>\n              </ui-dropdown-menu-sub-content>\n            </ui-dropdown-menu-sub>\n            <ui-dropdown-menu-separator />\n            <ui-dropdown-menu-item (select)=\"logout()\">\n              <lucide-icon [img]=\"LogOut\" class=\"size-4\" />\n              Log out\n            </ui-dropdown-menu-item>\n          </ui-dropdown-menu-content>\n        </ui-dropdown-menu>\n      </li>\n    </ul>\n  `,\n})\nexport class Sidebar01NavUserComponent {\n  readonly sidebar = injectSidebar()\n  readonly theme = injectTheme()\n  readonly user = user\n\n  logout(): void {\n    handleLogout()\n  }\n\n  protected readonly ChevronsUpDown = ChevronsUpDown\n  protected readonly BadgeCheck = BadgeCheck\n  protected readonly Settings = Settings\n  protected readonly Palette = Palette\n  protected readonly Sun = Sun\n  protected readonly Moon = Moon\n  protected readonly Monitor = Monitor\n  protected readonly LogOut = LogOut\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/sidebar-01/nav-user-01.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/sidebar-01/index.ts",
      "content": "export { UiSidebar01Component } from './sidebar-01.component'\nexport { Sidebar01NavUserComponent, type Sidebar01Theme } from './nav-user-01.component'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/sidebar-01/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": "Collapsible icon-rail app sidebar with brand block, two grouped nav sections, and a user dropdown footer with theme switching. Pure template, no props — edit the files to change routes and wire your auth session.",
  "categories": [
    "layout",
    "sidebar"
  ]
}