{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "sidebar-02",
  "title": "Team Switcher Sidebar",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/sidebar-02/sidebar-02.component.ts",
      "content": "import { Component, ChangeDetectionStrategy } from '@angular/core'\nimport {\n  UiSidebarComponent,\n  UiSidebarContentComponent,\n  UiSidebarFooterComponent,\n  UiSidebarHeaderComponent,\n  UiSidebarRailComponent,\n} from '@/ui/sidebar/sidebar.component'\nimport {\n  BookOpen,\n  Bot,\n  Frame,\n  LifeBuoy,\n  Map as MapIcon,\n  PieChart,\n  Send,\n  Settings2,\n  SquareTerminal,\n} from 'lucide-angular'\nimport { NavMainComponent } from './nav-main.component'\nimport { NavProjectsComponent } from './nav-projects.component'\nimport { NavSecondaryComponent } from './nav-secondary.component'\nimport { NavUserComponent } from './nav-user.component'\nimport { TeamSwitcherComponent } from './team-switcher.component'\nimport type { SidebarNavItem, SidebarProject, SidebarUser } from './sidebar-02.models'\n\nconst data: {\n  user: SidebarUser\n  navMain: SidebarNavItem[]\n  navSecondary: SidebarNavItem[]\n  projects: SidebarProject[]\n} = {\n  user: {\n    name: 'shadcn',\n    email: 'm@example.com',\n  },\n  navMain: [\n    {\n      title: 'Playground',\n      url: '#',\n      icon: SquareTerminal,\n      isActive: true,\n      items: [\n        { title: 'History', url: '#' },\n        { title: 'Starred', url: '#' },\n        { title: 'Settings', url: '#' },\n      ],\n    },\n    {\n      title: 'Models',\n      url: '#',\n      icon: Bot,\n      items: [\n        { title: 'Genesis', url: '#' },\n        { title: 'Explorer', url: '#' },\n        { title: 'Quantum', url: '#' },\n      ],\n    },\n    {\n      title: 'Documentation',\n      url: '#',\n      icon: BookOpen,\n      items: [\n        { title: 'Introduction', url: '#' },\n        { title: 'Get Started', url: '#' },\n        { title: 'Tutorials', url: '#' },\n        { title: 'Changelog', url: '#' },\n      ],\n    },\n    {\n      title: 'Settings',\n      url: '#',\n      icon: Settings2,\n      items: [\n        { title: 'General', url: '#' },\n        { title: 'Team', url: '#' },\n        { title: 'Billing', url: '#' },\n        { title: 'Limits', url: '#' },\n      ],\n    },\n  ],\n  navSecondary: [\n    { title: 'Support', url: '#', icon: LifeBuoy },\n    { title: 'Feedback', url: '#', icon: Send },\n  ],\n  projects: [\n    { name: 'Design Engineering', url: '#', icon: Frame },\n    { name: 'Sales & Marketing', url: '#', icon: PieChart },\n    { name: 'Travel', url: '#', icon: MapIcon },\n  ],\n}\n\n/**\n * Sidebar02 -- the React block, 1:1: a `collapsible=\"icon\"` Sidebar with TeamSwitcher\n * header, primary nav, projects, secondary links and a user dropdown footer. It reads\n * the surrounding <ui-sidebar-provider> (pair with <ui-sidebar-inset> +\n * <ui-sidebar-trigger>), so the trigger, the rail and Cmd/Ctrl+B all collapse it.\n * Edit `data` to change routes; each section is a sibling file.\n */\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-sidebar-02, [ui-sidebar-02]',\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    UiSidebarComponent,\n    UiSidebarHeaderComponent,\n    UiSidebarContentComponent,\n    UiSidebarFooterComponent,\n    UiSidebarRailComponent,\n    TeamSwitcherComponent,\n    NavMainComponent,\n    NavProjectsComponent,\n    NavSecondaryComponent,\n    NavUserComponent,\n  ],\n  template: `\n    <ui-sidebar collapsible=\"icon\">\n      <ui-sidebar-header>\n        <team-switcher />\n      </ui-sidebar-header>\n      <ui-sidebar-content>\n        <nav-main [items]=\"data.navMain\" />\n        <nav-projects [projects]=\"data.projects\" />\n        <nav-secondary [items]=\"data.navSecondary\" class=\"mt-auto\" />\n      </ui-sidebar-content>\n      <ui-sidebar-footer>\n        <nav-user [user]=\"data.user\" />\n      </ui-sidebar-footer>\n      <button ui-sidebar-rail></button>\n    </ui-sidebar>\n  `,\n})\nexport class UiSidebar02Component {\n  readonly data = data\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/sidebar-02/sidebar-02.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/sidebar-02/sidebar-02.models.ts",
      "content": "import type { LucideIconData } from 'lucide-angular'\n\nexport interface SidebarSubItem {\n  title: string\n  url: string\n  isActive?: boolean\n}\n\nexport interface SidebarNavItem {\n  title: string\n  url: string\n  icon: LucideIconData\n  isActive?: boolean\n  items?: SidebarSubItem[]\n}\n\nexport interface SidebarProject {\n  name: string\n  url: string\n  icon: LucideIconData\n}\n\n/** `logo: 'uipkge'` renders the 4-quadrant uipkge mark (inline SVG), like the React block. */\nexport interface SidebarTeam {\n  name: string\n  plan: string\n  logo: LucideIconData | 'uipkge'\n}\n\nexport interface SidebarUser {\n  name: string\n  email: string\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/sidebar-02/sidebar-02.models.ts"
    },
    {
      "path": "packages/registry-angular/blocks/sidebar-02/team-switcher.component.ts",
      "content": "// Edit teams + activeTeam below to match your tenant model. The dropdown\n// is the full team switcher pattern -- avatar tile, label, kbd shortcut,\n// and a \"Add team\" footer row. Wire the select handler to your tenant API.\n\nimport { Component, signal, ChangeDetectionStrategy } from '@angular/core'\nimport { AudioWaveform, Check, ChevronsUpDown, Command, LucideAngularModule, Plus } from 'lucide-angular'\nimport {\n  UiDropdownMenuComponent,\n  UiDropdownMenuContentComponent,\n  UiDropdownMenuItemComponent,\n  UiDropdownMenuLabelComponent,\n  UiDropdownMenuSeparatorComponent,\n  UiDropdownMenuShortcutComponent,\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'\nimport type { SidebarTeam } from './sidebar-02.models'\n\nconst teams: SidebarTeam[] = [\n  { name: 'uipkge', logo: 'uipkge', plan: 'UI registry' },\n  { name: 'uipkge HRMS', logo: AudioWaveform, plan: 'Vertical' },\n  { name: 'uipkge Hospital', logo: Command, plan: 'Vertical' },\n]\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'team-switcher',\n  standalone: true,\n  host: { class: 'contents' },\n  imports: [\n    LucideAngularModule,\n    UiSidebarMenuComponent,\n    UiSidebarMenuItemComponent,\n    UiSidebarMenuButtonComponent,\n    UiDropdownMenuComponent,\n    UiDropdownMenuTriggerComponent,\n    UiDropdownMenuContentComponent,\n    UiDropdownMenuItemComponent,\n    UiDropdownMenuLabelComponent,\n    UiDropdownMenuSeparatorComponent,\n    UiDropdownMenuShortcutComponent,\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            <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              @if (activeTeam().logo === 'uipkge') {\n                <!-- 4-quadrant uipkge logo (inline, like the React UipkgeMark). -->\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              } @else {\n                <lucide-icon [img]=\"$any(activeTeam().logo)\" class=\"size-4 group-data-[collapsible=icon]:size-3.5\" />\n              }\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\">{{ activeTeam().name }}</span>\n              <span class=\"text-muted-foreground truncate text-xs\">{{ activeTeam().plan }}</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=\"start\"\n            [sideOffset]=\"4\"\n          >\n            <ui-dropdown-menu-label class=\"text-muted-foreground text-xs\">Teams</ui-dropdown-menu-label>\n            @for (team of teams; track team.name; let i = $index) {\n              <ui-dropdown-menu-item class=\"gap-2 p-2\" (select)=\"activeTeam.set(team)\">\n                <div class=\"flex size-6 items-center justify-center rounded-sm border\">\n                  @if (team.logo === 'uipkge') {\n                    <!-- 4-quadrant uipkge logo (inline, like the React UipkgeMark). -->\n                    <svg viewBox=\"0 0 24 24\" class=\"size-3.5 shrink-0\" 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                  } @else {\n                    <lucide-icon [img]=\"$any(team.logo)\" class=\"size-3.5 shrink-0\" />\n                  }\n                </div>\n                {{ team.name }}\n                @if (activeTeam() === team) {\n                  <lucide-icon [img]=\"Check\" class=\"ml-auto size-4\" />\n                } @else {\n                  <ui-dropdown-menu-shortcut>⌘{{ i + 1 }}</ui-dropdown-menu-shortcut>\n                }\n              </ui-dropdown-menu-item>\n            }\n            <ui-dropdown-menu-separator />\n            <ui-dropdown-menu-item class=\"gap-2 p-2\">\n              <div class=\"bg-background flex size-6 items-center justify-center rounded-md border\">\n                <lucide-icon [img]=\"Plus\" class=\"size-4\" />\n              </div>\n              <div class=\"text-muted-foreground font-medium\">Add team</div>\n            </ui-dropdown-menu-item>\n          </ui-dropdown-menu-content>\n        </ui-dropdown-menu>\n      </li>\n    </ul>\n  `,\n})\nexport class TeamSwitcherComponent {\n  readonly sidebar = injectSidebar()\n  readonly teams = teams\n  readonly activeTeam = signal<SidebarTeam>(teams[0]!)\n  protected readonly ChevronsUpDown = ChevronsUpDown\n  protected readonly Check = Check\n  protected readonly Plus = Plus\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/sidebar-02/team-switcher.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/sidebar-02/nav-main.component.ts",
      "content": "import { Component, Input, ChangeDetectionStrategy } from '@angular/core'\nimport { ChevronRight, LucideAngularModule } from 'lucide-angular'\nimport {\n  UiCollapsibleComponent,\n  UiCollapsibleContentComponent,\n  UiCollapsibleTriggerComponent,\n} from '@/ui/collapsible/collapsible.component'\nimport {\n  UiSidebarGroupComponent,\n  UiSidebarGroupLabelComponent,\n  UiSidebarMenuActionComponent,\n  UiSidebarMenuButtonComponent,\n  UiSidebarMenuComponent,\n  UiSidebarMenuItemComponent,\n  UiSidebarMenuSubButtonComponent,\n  UiSidebarMenuSubComponent,\n  UiSidebarMenuSubItemComponent,\n} from '@/ui/sidebar/sidebar.component'\nimport type { SidebarNavItem } from './sidebar-02.models'\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'nav-main',\n  standalone: true,\n  host: { class: 'contents' },\n  imports: [\n    LucideAngularModule,\n    UiCollapsibleComponent,\n    UiCollapsibleTriggerComponent,\n    UiCollapsibleContentComponent,\n    UiSidebarGroupComponent,\n    UiSidebarGroupLabelComponent,\n    UiSidebarMenuComponent,\n    UiSidebarMenuItemComponent,\n    UiSidebarMenuButtonComponent,\n    UiSidebarMenuActionComponent,\n    UiSidebarMenuSubComponent,\n    UiSidebarMenuSubItemComponent,\n    UiSidebarMenuSubButtonComponent,\n  ],\n  template: `\n    <ui-sidebar-group>\n      <ui-sidebar-group-label>Platform</ui-sidebar-group-label>\n      <ul ui-sidebar-menu>\n        @for (item of items; track item.title) {\n          <li ui-sidebar-menu-item ui-collapsible [defaultOpen]=\"!!item.isActive\">\n            <a ui-sidebar-menu-button [href]=\"item.url\" [tooltip]=\"item.title\" [isActive]=\"!!item.isActive\">\n              <lucide-icon [img]=\"item.icon\" class=\"size-4 shrink-0\" />\n              <span>{{ item.title }}</span>\n            </a>\n            @if (item.items?.length) {\n              <button type=\"button\" ui-sidebar-menu-action ui-collapsible-trigger class=\"data-[state=open]:rotate-90\">\n                <lucide-icon [img]=\"ChevronRight\" class=\"size-4 shrink-0\" />\n                <span class=\"sr-only\">Toggle</span>\n              </button>\n              <ui-collapsible-content>\n                <ul ui-sidebar-menu-sub>\n                  @for (subItem of item.items; track subItem.title) {\n                    <li ui-sidebar-menu-sub-item>\n                      <a ui-sidebar-menu-sub-button [href]=\"subItem.url\" [isActive]=\"!!subItem.isActive\">\n                        <span>{{ subItem.title }}</span>\n                      </a>\n                    </li>\n                  }\n                </ul>\n              </ui-collapsible-content>\n            }\n          </li>\n        }\n      </ul>\n    </ui-sidebar-group>\n  `,\n})\nexport class NavMainComponent {\n  @Input() items: SidebarNavItem[] = []\n  protected readonly ChevronRight = ChevronRight\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/sidebar-02/nav-main.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/sidebar-02/nav-projects.component.ts",
      "content": "import { Component, Input, ChangeDetectionStrategy } from '@angular/core'\nimport { Folder, Forward, LucideAngularModule, MoreHorizontal, Trash2 } from 'lucide-angular'\nimport {\n  UiDropdownMenuComponent,\n  UiDropdownMenuContentComponent,\n  UiDropdownMenuItemComponent,\n  UiDropdownMenuSeparatorComponent,\n  UiDropdownMenuTriggerComponent,\n} from '@/ui/dropdown-menu/dropdown-menu.component'\nimport {\n  UiSidebarGroupComponent,\n  UiSidebarGroupLabelComponent,\n  UiSidebarMenuActionComponent,\n  UiSidebarMenuButtonComponent,\n  UiSidebarMenuComponent,\n  UiSidebarMenuItemComponent,\n  injectSidebar,\n} from '@/ui/sidebar/sidebar.component'\nimport type { SidebarProject } from './sidebar-02.models'\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'nav-projects',\n  standalone: true,\n  host: { class: 'contents' },\n  imports: [\n    LucideAngularModule,\n    UiDropdownMenuComponent,\n    UiDropdownMenuTriggerComponent,\n    UiDropdownMenuContentComponent,\n    UiDropdownMenuItemComponent,\n    UiDropdownMenuSeparatorComponent,\n    UiSidebarGroupComponent,\n    UiSidebarGroupLabelComponent,\n    UiSidebarMenuComponent,\n    UiSidebarMenuItemComponent,\n    UiSidebarMenuButtonComponent,\n    UiSidebarMenuActionComponent,\n  ],\n  template: `\n    <!--\n      Upstream shadcn-ui hides this entire group on icon-mode collapse with\n      group-data-[collapsible=icon]:hidden. We keep it visible so the project icons\n      stay reachable in the narrow column; the group label and the <span> children\n      of each menu button already self-hide on collapse, leaving an icon-only\n      column that lines up with NavMain.\n    -->\n    <ui-sidebar-group>\n      <ui-sidebar-group-label>Projects</ui-sidebar-group-label>\n      <ul ui-sidebar-menu>\n        @for (item of projects; track item.name) {\n          <li ui-sidebar-menu-item>\n            <a ui-sidebar-menu-button [href]=\"item.url\">\n              <lucide-icon [img]=\"item.icon\" class=\"size-4 shrink-0\" />\n              <span>{{ item.name }}</span>\n            </a>\n            <ui-dropdown-menu>\n              <button type=\"button\" ui-sidebar-menu-action ui-dropdown-menu-trigger showOnHover>\n                <lucide-icon [img]=\"MoreHorizontal\" class=\"size-4 shrink-0\" />\n                <span class=\"sr-only\">More</span>\n              </button>\n              <ui-dropdown-menu-content\n                class=\"w-48 rounded-lg\"\n                [side]=\"sidebar.isMobile ? 'bottom' : 'right'\"\n                [align]=\"sidebar.isMobile ? 'end' : 'start'\"\n              >\n                <ui-dropdown-menu-item>\n                  <lucide-icon [img]=\"Folder\" class=\"text-muted-foreground\" />\n                  <span>View Project</span>\n                </ui-dropdown-menu-item>\n                <ui-dropdown-menu-item>\n                  <lucide-icon [img]=\"Forward\" class=\"text-muted-foreground\" />\n                  <span>Share Project</span>\n                </ui-dropdown-menu-item>\n                <ui-dropdown-menu-separator />\n                <ui-dropdown-menu-item>\n                  <lucide-icon [img]=\"Trash2\" class=\"text-muted-foreground\" />\n                  <span>Delete Project</span>\n                </ui-dropdown-menu-item>\n              </ui-dropdown-menu-content>\n            </ui-dropdown-menu>\n          </li>\n        }\n        <li ui-sidebar-menu-item>\n          <button type=\"button\" ui-sidebar-menu-button>\n            <lucide-icon [img]=\"MoreHorizontal\" class=\"size-4 shrink-0\" />\n            <span>More</span>\n          </button>\n        </li>\n      </ul>\n    </ui-sidebar-group>\n  `,\n})\nexport class NavProjectsComponent {\n  readonly sidebar = injectSidebar()\n  @Input() projects: SidebarProject[] = []\n  protected readonly MoreHorizontal = MoreHorizontal\n  protected readonly Folder = Folder\n  protected readonly Forward = Forward\n  protected readonly Trash2 = Trash2\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/sidebar-02/nav-projects.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/sidebar-02/nav-secondary.component.ts",
      "content": "import { Component, Input, ChangeDetectionStrategy } from '@angular/core'\nimport { LucideAngularModule } from 'lucide-angular'\nimport {\n  UiSidebarGroupComponent,\n  UiSidebarGroupContentComponent,\n  UiSidebarMenuButtonComponent,\n  UiSidebarMenuComponent,\n  UiSidebarMenuItemComponent,\n} from '@/ui/sidebar/sidebar.component'\nimport type { SidebarNavItem } from './sidebar-02.models'\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'nav-secondary',\n  standalone: true,\n  host: { class: 'contents' },\n  imports: [\n    LucideAngularModule,\n    UiSidebarGroupComponent,\n    UiSidebarGroupContentComponent,\n    UiSidebarMenuComponent,\n    UiSidebarMenuItemComponent,\n    UiSidebarMenuButtonComponent,\n  ],\n  template: `\n    <ui-sidebar-group [class]=\"className\">\n      <ui-sidebar-group-content>\n        <ul ui-sidebar-menu>\n          @for (item of items; track item.title) {\n            <li ui-sidebar-menu-item>\n              <a ui-sidebar-menu-button size=\"sm\" [href]=\"item.url\" [isActive]=\"!!item.isActive\">\n                <lucide-icon [img]=\"item.icon\" class=\"size-4 shrink-0\" />\n                <span>{{ item.title }}</span>\n              </a>\n            </li>\n          }\n        </ul>\n      </ui-sidebar-group-content>\n    </ui-sidebar-group>\n  `,\n})\nexport class NavSecondaryComponent {\n  @Input() items: SidebarNavItem[] = []\n  /** Forwarded to the SidebarGroup, like React's `{...props}` (e.g. class=\"mt-auto\"). */\n  @Input('class') className?: string\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/sidebar-02/nav-secondary.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/sidebar-02/nav-user.component.ts",
      "content": "import { Component, Input, ChangeDetectionStrategy } from '@angular/core'\nimport {\n  BadgeCheck,\n  Bell,\n  ChevronsUpDown,\n  CreditCard,\n  LogOut,\n  LucideAngularModule,\n  Monitor,\n  Moon,\n  Palette,\n  Sun,\n  Zap,\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'\nimport type { SidebarUser } from './sidebar-02.models'\n\nexport type SidebarTheme = Theme\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: '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\">{{ 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 text-xs\">{{ 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>\n                <lucide-icon [img]=\"Zap\" />\n                Upgrade to Pro\n              </ui-dropdown-menu-item>\n            </ui-dropdown-menu-group>\n            <ui-dropdown-menu-separator />\n            <ui-dropdown-menu-group>\n              <ui-dropdown-menu-item>\n                <lucide-icon [img]=\"BadgeCheck\" />\n                Account\n              </ui-dropdown-menu-item>\n              <ui-dropdown-menu-item>\n                <lucide-icon [img]=\"CreditCard\" />\n                Billing\n              </ui-dropdown-menu-item>\n              <ui-dropdown-menu-item>\n                <lucide-icon [img]=\"Bell\" />\n                Notifications\n              </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\" />\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\" /> Light\n                  </ui-dropdown-menu-radio-item>\n                  <ui-dropdown-menu-radio-item value=\"dark\">\n                    <lucide-icon [img]=\"Moon\" /> Dark\n                  </ui-dropdown-menu-radio-item>\n                  <ui-dropdown-menu-radio-item value=\"system\">\n                    <lucide-icon [img]=\"Monitor\" /> System\n                  </ui-dropdown-menu-radio-item>\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>\n              <lucide-icon [img]=\"LogOut\" />\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 NavUserComponent {\n  readonly sidebar = injectSidebar()\n  readonly theme = injectTheme()\n  @Input() user: SidebarUser = { name: '', email: '' }\n\n  get initials(): string {\n    const parts = this.user.name.trim().split(/\\s+/).slice(0, 2)\n    return parts.map((p) => p[0]?.toUpperCase()).join('') || 'U'\n  }\n\n  protected readonly ChevronsUpDown = ChevronsUpDown\n  protected readonly Zap = Zap\n  protected readonly BadgeCheck = BadgeCheck\n  protected readonly CreditCard = CreditCard\n  protected readonly Bell = Bell\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-02/nav-user.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/sidebar-02/index.ts",
      "content": "export { UiSidebar02Component } from './sidebar-02.component'\nexport { TeamSwitcherComponent } from './team-switcher.component'\nexport { NavMainComponent } from './nav-main.component'\nexport { NavProjectsComponent } from './nav-projects.component'\nexport { NavSecondaryComponent } from './nav-secondary.component'\nexport { NavUserComponent, type SidebarTheme } from './nav-user.component'\nexport type { SidebarNavItem, SidebarSubItem, SidebarProject, SidebarTeam, SidebarUser } from './sidebar-02.models'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/sidebar-02/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/collapsible.json",
    "https://uipkge.dev/r/angular/dropdown-menu.json",
    "https://uipkge.dev/r/angular/use-theme.json"
  ],
  "description": "Full-featured app sidebar — collapsible=\"icon\" rail with TeamSwitcher header, primary nav, projects section, secondary nav, and user dropdown footer with theme switching. Each section ships as a sibling file in the same folder so consumers can edit one piece at a time.",
  "categories": [
    "layout",
    "sidebar"
  ]
}