{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "enterprise-workspace-switcher",
  "title": "Enterprise Workspace Switcher",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-angular/blocks/enterprise-workspace-switcher/enterprise-workspace-switcher.component.ts",
      "content": "// Multi-organization workspace switcher dropdown and creation modal: active organization display,\n// tier levels, team role badges, member counts, and an organization creation dialog with dynamic\n// slug preview, region selector, and tier plan radios. Port of the React block 1:1.\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, computed, signal } from '@angular/core'\nimport {\n  Building2,\n  Check,\n  ChevronsUpDown,\n  Globe,\n  LogOut,\n  LucideAngularModule,\n  Plus,\n  Settings,\n  UserPlus,\n} from 'lucide-angular'\nimport { cn } from '@/lib/utils'\nimport { UiAvatarComponent, UiAvatarFallbackComponent, UiAvatarImageComponent } from '@/ui/avatar/avatar.component'\nimport { UiBadgeComponent } from '@/ui/badge/badge.component'\nimport { UiButtonComponent } from '@/ui/button/button.component'\nimport {\n  UiDialogComponent,\n  UiDialogContentComponent,\n  UiDialogDescriptionComponent,\n  UiDialogFooterComponent,\n  UiDialogHeaderComponent,\n  UiDialogTitleComponent,\n} from '@/ui/dialog/dialog.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 { UiRadioGroupComponent, UiRadioGroupItemComponent } from '@/ui/radio-group/radio-group.component'\nimport {\n  UiSelectComponent,\n  UiSelectContentComponent,\n  UiSelectItemComponent,\n  UiSelectTriggerComponent,\n  UiSelectValueComponent,\n} from '@/ui/select/select.component'\n\nexport interface WorkspaceItem {\n  id: string\n  name: string\n  slug?: string\n  plan: string\n  planTier: string\n  members: number\n  region: string\n  regionCode: string\n  role: 'Owner' | 'Admin' | 'Member' | 'Personal'\n  color: string\n  initials: string\n}\n\nexport interface WorkspaceUserInfo {\n  name: string\n  email: string\n  avatar?: string\n}\n\nconst DEFAULT_WORKSPACES: WorkspaceItem[] = [\n  {\n    id: 'ws-1',\n    name: 'UIPKGE Enterprise Inc.',\n    slug: 'uipkge-enterprise',\n    plan: 'Enterprise Scale',\n    planTier: 'Enterprise Plan',\n    members: 64,\n    region: 'US East (N. Virginia)',\n    regionCode: 'US-East',\n    role: 'Owner',\n    color: 'bg-primary/10 text-primary border border-primary/20',\n    initials: 'UE',\n  },\n  {\n    id: 'ws-2',\n    name: 'Acme Design Systems Lab',\n    slug: 'acme-design',\n    plan: 'Pro Team',\n    planTier: 'Pro Team',\n    members: 18,\n    region: 'EU Central (Frankfurt)',\n    regionCode: 'EU-Central',\n    role: 'Admin',\n    color: 'bg-info/10 text-info border border-info/20',\n    initials: 'AD',\n  },\n  {\n    id: 'ws-3',\n    name: 'Personal Sandbox',\n    slug: 'personal-sandbox',\n    plan: 'Developer Tier',\n    planTier: 'Free Developer Tier',\n    members: 1,\n    region: 'Global Edge',\n    regionCode: 'Global',\n    role: 'Personal',\n    color: 'bg-success/10 text-success border border-success/20',\n    initials: 'PS',\n  },\n]\n\nconst DEFAULT_USER: WorkspaceUserInfo = {\n  name: 'Elena Rostova',\n  email: 'elena@uipkge.dev',\n  avatar: '',\n}\n\nconst FALLBACK_WORKSPACE: WorkspaceItem = {\n  id: 'ws-fallback',\n  name: 'Workspace',\n  plan: 'Standard',\n  planTier: 'Standard',\n  members: 1,\n  region: 'US-East',\n  regionCode: 'US-East',\n  role: 'Owner',\n  color: 'bg-muted text-foreground border border-border',\n  initials: 'WS',\n}\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.Eager,\n  selector: 'ui-enterprise-workspace-switcher, [ui-enterprise-workspace-switcher]',\n  standalone: true,\n  // React renders the root <div> itself: the host stays out of layout and `class` goes to the root.\n  host: { '[attr.class]': '\"contents\"' },\n  imports: [\n    LucideAngularModule,\n    UiAvatarComponent,\n    UiAvatarFallbackComponent,\n    UiAvatarImageComponent,\n    UiBadgeComponent,\n    UiButtonComponent,\n    UiDialogComponent,\n    UiDialogContentComponent,\n    UiDialogDescriptionComponent,\n    UiDialogFooterComponent,\n    UiDialogHeaderComponent,\n    UiDialogTitleComponent,\n    UiDropdownMenuComponent,\n    UiDropdownMenuContentComponent,\n    UiDropdownMenuItemComponent,\n    UiDropdownMenuLabelComponent,\n    UiDropdownMenuSeparatorComponent,\n    UiDropdownMenuTriggerComponent,\n    UiInputComponent,\n    UiRadioGroupComponent,\n    UiRadioGroupItemComponent,\n    UiSelectComponent,\n    UiSelectContentComponent,\n    UiSelectItemComponent,\n    UiSelectTriggerComponent,\n    UiSelectValueComponent,\n  ],\n  template: `\n    <div data-slot=\"enterprise-workspace-switcher\" [class]=\"rootClass\">\n      <ui-dropdown-menu>\n        <button\n          type=\"button\"\n          ui-dropdown-menu-trigger\n          class=\"group border-border/80 bg-card hover:bg-accent/40 focus-visible:ring-ring flex w-full items-center gap-3 rounded-xl border p-2.5 text-left shadow-xs transition-[background-color,box-shadow] duration-150 focus-visible:ring-2 focus-visible:outline-none\"\n          aria-label=\"Select organization workspace\"\n        >\n          <!-- Org Avatar / Monogram -->\n          <div class=\"relative size-10 shrink-0\">\n            <div\n              [class]=\"\n                cn(\n                  'flex size-10 items-center justify-center rounded-lg text-sm font-semibold shadow-2xs',\n                  activeWorkspace().color\n                )\n              \"\n            >\n              {{ activeWorkspace().initials }}\n            </div>\n            <span\n              class=\"border-card bg-success absolute -top-0.5 -right-0.5 size-2.5 rounded-full border-2\"\n              title=\"Active Organization\"\n              aria-label=\"Active workspace status: Online\"\n            ></span>\n          </div>\n\n          <!-- Active Org Info & Role Badge -->\n          <div class=\"min-w-0 flex-1\">\n            <div class=\"flex items-center gap-1.5\">\n              <span class=\"text-foreground truncate text-sm font-semibold tracking-tight\">\n                {{ activeWorkspace().name }}\n              </span>\n              <span ui-badge variant=\"secondary\" class=\"shrink-0 px-1.5 py-0 text-xs font-medium\">\n                {{ activeWorkspace().role }}\n              </span>\n            </div>\n            <div class=\"text-muted-foreground mt-0.5 flex items-center gap-1.5 truncate text-xs\">\n              <span class=\"truncate font-medium\">Tier: {{ activeWorkspace().plan }}</span>\n              <span class=\"shrink-0\">{{ activeWorkspace().regionCode }}</span>\n            </div>\n          </div>\n\n          <lucide-icon\n            [img]=\"ChevronsUpDown\"\n            class=\"text-muted-foreground/70 group-hover:text-foreground size-4 shrink-0 transition-colors\"\n          />\n        </button>\n\n        <ui-dropdown-menu-content\n          class=\"border-border bg-popover w-80 rounded-xl p-2 shadow-xl sm:w-96\"\n          align=\"start\"\n          [sideOffset]=\"6\"\n        >\n          <!-- User Header Profile Info -->\n          <ui-dropdown-menu-label class=\"p-0 font-normal\">\n            <div class=\"bg-muted/40 flex items-center gap-2.5 rounded-lg px-2.5 py-2 text-left\">\n              <ui-avatar class=\"size-8 rounded-full border\">\n                @if (userState().avatar) {\n                  <ui-avatar-image [src]=\"userState().avatar\" [alt]=\"userState().name\" />\n                }\n                <ui-avatar-fallback class=\"bg-primary/10 text-primary text-xs font-bold\">{{\n                  userInitials()\n                }}</ui-avatar-fallback>\n              </ui-avatar>\n              <div class=\"grid min-w-0 flex-1 text-left leading-tight\">\n                <span class=\"text-muted-foreground text-xs font-medium\">Signed in as</span>\n                <span class=\"text-foreground truncate text-xs font-semibold\">{{ userState().email }}</span>\n              </div>\n              <div class=\"flex items-center gap-1\">\n                <span class=\"bg-success size-2 rounded-full\"></span>\n                <span class=\"text-muted-foreground text-xs font-medium\">Ready</span>\n              </div>\n            </div>\n          </ui-dropdown-menu-label>\n\n          <ui-dropdown-menu-separator class=\"my-1.5\" />\n\n          <!-- Workspaces Section -->\n          <div class=\"flex items-center justify-between px-2 py-1\">\n            <span class=\"text-muted-foreground text-xs font-semibold tracking-wider uppercase\">Workspaces</span>\n            <span class=\"text-muted-foreground/70 text-xs\">{{ workspaces().length }} total</span>\n          </div>\n\n          <div class=\"my-1 space-y-1\">\n            @for (ws of workspaces(); track ws.id) {\n              <ui-dropdown-menu-item\n                class=\"hover:bg-accent focus:bg-accent flex cursor-pointer items-center gap-3 rounded-lg p-2 transition-colors\"\n                (select)=\"handleSelectWorkspace(ws)\"\n              >\n                <div\n                  [class]=\"\n                    cn(\n                      'flex size-8 shrink-0 items-center justify-center rounded-lg text-xs font-semibold shadow-2xs',\n                      ws.color\n                    )\n                  \"\n                >\n                  {{ ws.initials }}\n                </div>\n\n                <div class=\"min-w-0 flex-1\">\n                  <div class=\"flex items-center gap-1.5\">\n                    <span\n                      [class]=\"\n                        cn(\n                          'truncate text-sm font-medium',\n                          activeWorkspaceId() === ws.id ? 'text-foreground font-semibold' : 'text-foreground/90'\n                        )\n                      \"\n                    >\n                      {{ ws.name }}\n                    </span>\n                    @if (ws.role === 'Owner') {\n                      <span ui-badge variant=\"secondary\" class=\"shrink-0 px-1 py-0 text-xs font-medium\">Owner</span>\n                    }\n                    @if (ws.role === 'Admin') {\n                      <span ui-badge variant=\"outline\" class=\"shrink-0 px-1 py-0 text-xs font-medium\">Admin</span>\n                    }\n                  </div>\n                  <p class=\"text-muted-foreground truncate text-xs\">\n                    {{ ws.planTier }} · {{ ws.members }} Member{{ ws.members === 1 ? '' : 's' }} · {{ ws.regionCode }}\n                  </p>\n                </div>\n\n                @if (activeWorkspaceId() === ws.id) {\n                  <lucide-icon [img]=\"Check\" class=\"text-success size-4 shrink-0\" aria-hidden=\"true\" />\n                }\n              </ui-dropdown-menu-item>\n            }\n          </div>\n\n          <ui-dropdown-menu-separator class=\"my-1.5\" />\n\n          <!-- Actions -->\n          <div>\n            <ui-dropdown-menu-item\n              class=\"text-foreground hover:bg-accent focus:bg-accent flex cursor-pointer items-center gap-2.5 rounded-lg px-2 py-1.5 text-sm transition-colors\"\n              (select)=\"isCreateDialogOpen.set(true)\"\n            >\n              <div\n                class=\"border-primary/30 bg-primary/10 text-primary flex size-6 items-center justify-center rounded-md border\"\n              >\n                <lucide-icon [img]=\"Plus\" class=\"size-3.5\" />\n              </div>\n              <span class=\"font-medium\">Create New Workspace</span>\n            </ui-dropdown-menu-item>\n\n            <ui-dropdown-menu-item\n              class=\"text-muted-foreground hover:text-foreground hover:bg-accent focus:bg-accent flex cursor-pointer items-center gap-2.5 rounded-lg px-2 py-1.5 text-sm transition-colors\"\n              (select)=\"workspaceAction.emit('settings')\"\n            >\n              <div class=\"border-border bg-muted flex size-6 items-center justify-center rounded-md border\">\n                <lucide-icon [img]=\"Settings\" class=\"size-3.5\" />\n              </div>\n              <span>Organization Settings & Billing</span>\n            </ui-dropdown-menu-item>\n\n            <ui-dropdown-menu-item\n              class=\"text-muted-foreground hover:text-foreground hover:bg-accent focus:bg-accent flex cursor-pointer items-center gap-2.5 rounded-lg px-2 py-1.5 text-sm transition-colors\"\n              (select)=\"workspaceAction.emit('invite')\"\n            >\n              <div class=\"border-border bg-muted flex size-6 items-center justify-center rounded-md border\">\n                <lucide-icon [img]=\"UserPlus\" class=\"size-3.5\" />\n              </div>\n              <span>Invite Team Members</span>\n            </ui-dropdown-menu-item>\n          </div>\n\n          <ui-dropdown-menu-separator class=\"my-1.5\" />\n\n          <!-- Logout -->\n          <ui-dropdown-menu-item\n            class=\"text-destructive hover:bg-destructive/10 focus:bg-destructive/10 focus:text-destructive flex cursor-pointer items-center gap-2.5 rounded-lg px-2 py-1.5 text-sm font-medium transition-colors\"\n            (select)=\"workspaceAction.emit('logout')\"\n          >\n            <div\n              class=\"border-destructive/20 bg-destructive/10 text-destructive flex size-6 items-center justify-center rounded-md border\"\n            >\n              <lucide-icon [img]=\"LogOut\" class=\"size-3.5\" />\n            </div>\n            <span>Log out</span>\n          </ui-dropdown-menu-item>\n        </ui-dropdown-menu-content>\n      </ui-dropdown-menu>\n\n      <!-- Create New Workspace Modal Dialog -->\n      <ui-dialog [open]=\"isCreateDialogOpen()\" (openChange)=\"isCreateDialogOpen.set($event)\">\n        <ui-dialog-content class=\"border-border bg-background rounded-2xl p-6 shadow-sm sm:max-w-lg\">\n          <div ui-dialog-header class=\"space-y-2 text-left\">\n            <div\n              class=\"border-primary/20 bg-primary/10 text-primary flex size-10 items-center justify-center rounded-xl border shadow-xs\"\n            >\n              <lucide-icon [img]=\"Building2\" class=\"size-5\" />\n            </div>\n            <h2 ui-dialog-title class=\"text-foreground text-lg font-bold tracking-tight\">Create New Workspace</h2>\n            <p ui-dialog-description class=\"text-muted-foreground text-sm leading-relaxed\">\n              Spin up a dedicated organization workspace with multi-region routing and isolated billing.\n            </p>\n          </div>\n\n          <form class=\"space-y-4 py-2\" (submit)=\"handleCreateWorkspace($event)\">\n            <!-- Workspace Name -->\n            <div class=\"space-y-1.5\">\n              <label for=\"new-workspace-name-angular\" class=\"text-foreground text-sm font-medium\">Workspace Name</label>\n              <ui-input\n                id=\"new-workspace-name-angular\"\n                [value]=\"newOrgName()\"\n                (valueChange)=\"newOrgName.set($event)\"\n                placeholder=\"e.g. Stripe Developer Platform\"\n                autoComplete=\"off\"\n                class=\"h-10 text-sm\"\n              />\n            </div>\n\n            <!-- URL Slug Preview -->\n            <div class=\"space-y-1.5\">\n              <label class=\"text-muted-foreground text-xs font-medium\">Workspace URL Slug</label>\n              <div class=\"border-border bg-muted/40 flex items-center gap-2 rounded-lg border px-3 py-2 text-xs\">\n                <lucide-icon [img]=\"Globe\" class=\"text-muted-foreground size-4 shrink-0\" aria-hidden=\"true\" />\n                <span class=\"text-muted-foreground\">uipkge.dev/</span>\n                <span class=\"text-foreground truncate font-semibold\">{{ slugPreview() }}</span>\n              </div>\n            </div>\n\n            <!-- Primary Region Selection -->\n            <div class=\"space-y-1.5\">\n              <label class=\"text-foreground text-sm font-medium\">Primary Region</label>\n              <ui-select [value]=\"newOrgRegion()\" (valueChange)=\"newOrgRegion.set($event)\">\n                <button ui-select-trigger class=\"h-10 w-full\">\n                  <ui-select-value placeholder=\"Select primary region\" />\n                </button>\n                <ui-select-content>\n                  <ui-select-item value=\"us-east\">US East (N. Virginia)</ui-select-item>\n                  <ui-select-item value=\"eu-central\">EU Central (Frankfurt)</ui-select-item>\n                  <ui-select-item value=\"ap-south\">AP South (Mumbai)</ui-select-item>\n                </ui-select-content>\n              </ui-select>\n              <p class=\"text-muted-foreground text-xs\">\n                Primary cluster location for low-latency queries and database replication.\n              </p>\n            </div>\n\n            <!-- Plan Selection Radios -->\n            <div class=\"space-y-2\">\n              <label class=\"text-foreground text-sm font-medium\">Choose Workspace Plan</label>\n              <ui-radio-group\n                [value]=\"newOrgPlan()\"\n                (valueChange)=\"newOrgPlan.set($event)\"\n                class=\"grid grid-cols-1 gap-3 sm:grid-cols-2\"\n              >\n                <label for=\"plan-pro-angular\" [class]=\"planCardClass('pro')\">\n                  <div class=\"flex items-start justify-between gap-2\">\n                    <div class=\"space-y-0.5\">\n                      <span class=\"text-foreground text-sm font-semibold\">Pro Team</span>\n                      <p class=\"text-primary text-xs font-medium\">$29 / month</p>\n                    </div>\n                    <ui-radio-group-item id=\"plan-pro-angular\" value=\"pro\" class=\"mt-0.5\" />\n                  </div>\n                  <p class=\"text-muted-foreground mt-2 text-xs leading-relaxed\">\n                    Up to 25 members, standard 99.9% SLA, and daily automated backups.\n                  </p>\n                </label>\n\n                <label for=\"plan-enterprise-angular\" [class]=\"planCardClass('enterprise')\">\n                  <div class=\"flex items-start justify-between gap-2\">\n                    <div class=\"space-y-0.5\">\n                      <span class=\"text-foreground text-sm font-semibold\">Enterprise Scale</span>\n                      <p class=\"text-primary text-xs font-medium\">Custom billing</p>\n                    </div>\n                    <ui-radio-group-item id=\"plan-enterprise-angular\" value=\"enterprise\" class=\"mt-0.5\" />\n                  </div>\n                  <p class=\"text-muted-foreground mt-2 text-xs leading-relaxed\">\n                    Unlimited members, dedicated VPC peering, 99.99% uptime SLA & SSO.\n                  </p>\n                </label>\n              </ui-radio-group>\n            </div>\n\n            <div ui-dialog-footer class=\"border-border/60 flex gap-2 border-t pt-4 sm:justify-end\">\n              <button ui-button type=\"button\" variant=\"outline\" (click)=\"isCreateDialogOpen.set(false)\">Cancel</button>\n              <button ui-button type=\"submit\" [disabled]=\"!newOrgName().trim()\">Create Workspace</button>\n            </div>\n          </form>\n        </ui-dialog-content>\n      </ui-dialog>\n    </div>\n  `,\n})\nexport class UiEnterpriseWorkspaceSwitcherComponent {\n  protected readonly Building2 = Building2\n  protected readonly Check = Check\n  protected readonly ChevronsUpDown = ChevronsUpDown\n  protected readonly Globe = Globe\n  protected readonly LogOut = LogOut\n  protected readonly Plus = Plus\n  protected readonly Settings = Settings\n  protected readonly UserPlus = UserPlus\n  protected readonly cn = cn\n\n  @Input() set initialWorkspaces(v: WorkspaceItem[] | undefined) {\n    if (v) this.workspaces.set(v.map((w) => ({ ...w })))\n  }\n  @Input() set defaultActiveId(v: string | undefined) {\n    if (v) this.activeWorkspaceId.set(v)\n  }\n  @Input() set user(v: WorkspaceUserInfo | undefined) {\n    if (v) this.userState.set({ ...v })\n  }\n  @Input('class') className?: string\n  @Output() workspaceChange = new EventEmitter<WorkspaceItem>()\n  @Output() workspaceCreate = new EventEmitter<WorkspaceItem>()\n  @Output() workspaceAction = new EventEmitter<'settings' | 'billing' | 'invite' | 'logout'>()\n\n  readonly workspaces = signal<WorkspaceItem[]>(DEFAULT_WORKSPACES.map((w) => ({ ...w })))\n  readonly activeWorkspaceId = signal('ws-1')\n  readonly userState = signal<WorkspaceUserInfo>({ ...DEFAULT_USER })\n  readonly isCreateDialogOpen = signal(false)\n\n  // Dialog form state\n  readonly newOrgName = signal('Stripe Developer Platform')\n  readonly newOrgRegion = signal('us-east')\n  readonly newOrgPlan = signal('pro')\n\n  readonly activeWorkspace = computed<WorkspaceItem>(() => {\n    const list = this.workspaces()\n    return list.find((w) => w.id === this.activeWorkspaceId()) ?? list[0] ?? { ...FALLBACK_WORKSPACE }\n  })\n\n  readonly slugPreview = computed(() => {\n    const cleaned = this.newOrgName()\n      .trim()\n      .toLowerCase()\n      .replace(/[^a-z0-9]+/g, '-')\n      .replace(/^-+|-+$/g, '')\n    return cleaned || 'stripe-dev'\n  })\n\n  readonly userInitials = computed(() => {\n    return (\n      this.userState()\n        .name.split(' ')\n        .map((p) => p[0])\n        .join('')\n        .toUpperCase() || 'U'\n    )\n  })\n\n  get rootClass(): string {\n    return cn('w-full', this.className)\n  }\n\n  planCardClass(plan: string): string {\n    return cn(\n      'border-border/80 hover:border-primary/50 relative flex cursor-pointer flex-col justify-between rounded-xl border p-3.5 shadow-xs transition-colors',\n      this.newOrgPlan() === plan && 'border-primary bg-primary/5 ring-primary/40 shadow-sm ring-1',\n    )\n  }\n\n  handleSelectWorkspace(workspace: WorkspaceItem): void {\n    this.activeWorkspaceId.set(workspace.id)\n    this.workspaceChange.emit(workspace)\n  }\n\n  handleCreateWorkspace(event: Event): void {\n    event.preventDefault()\n    if (!this.newOrgName().trim()) return\n\n    const regionMap: Record<string, { full: string; code: string }> = {\n      'us-east': { full: 'US East (N. Virginia)', code: 'US-East' },\n      'eu-central': { full: 'EU Central (Frankfurt)', code: 'EU-Central' },\n      'ap-south': { full: 'AP South (Mumbai)', code: 'AP-South' },\n    }\n    const regionInfo = regionMap[this.newOrgRegion()] ?? { full: 'US East (N. Virginia)', code: 'US-East' }\n\n    const parts = this.newOrgName().trim().split(/\\s+/)\n    const initials =\n      parts.length > 1\n        ? `${parts[0]?.[0] ?? ''}${parts[1]?.[0] ?? ''}`.toUpperCase()\n        : (parts[0]?.slice(0, 2) ?? 'WS').toUpperCase()\n\n    const newWs: WorkspaceItem = {\n      id: `ws-${Date.now()}`,\n      name: this.newOrgName().trim(),\n      slug: this.slugPreview(),\n      plan: this.newOrgPlan() === 'enterprise' ? 'Enterprise Scale' : 'Pro Team',\n      planTier: this.newOrgPlan() === 'enterprise' ? 'Enterprise Custom' : 'Pro Team',\n      members: 1,\n      region: regionInfo.full,\n      regionCode: regionInfo.code,\n      role: 'Owner',\n      color:\n        this.newOrgPlan() === 'enterprise'\n          ? 'bg-primary/10 text-primary border border-primary/20'\n          : 'bg-info/10 text-info border border-info/20',\n      initials,\n    }\n\n    this.workspaces.update((prev) => [newWs, ...prev])\n    this.activeWorkspaceId.set(newWs.id)\n    this.workspaceCreate.emit(newWs)\n    this.workspaceChange.emit(newWs)\n    this.newOrgName.set('')\n    this.isCreateDialogOpen.set(false)\n  }\n}\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/enterprise-workspace-switcher/enterprise-workspace-switcher.component.ts"
    },
    {
      "path": "packages/registry-angular/blocks/enterprise-workspace-switcher/index.ts",
      "content": "export {\n  UiEnterpriseWorkspaceSwitcherComponent,\n  type WorkspaceItem,\n  type WorkspaceUserInfo,\n} from './enterprise-workspace-switcher.component'\n",
      "type": "registry:block",
      "target": "~/src/app/components/blocks/enterprise-workspace-switcher/index.ts"
    }
  ],
  "dependencies": [
    "lucide-angular"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "https://uipkge.dev/r/angular/avatar.json",
    "https://uipkge.dev/r/angular/badge.json",
    "https://uipkge.dev/r/angular/button.json",
    "https://uipkge.dev/r/angular/dialog.json",
    "https://uipkge.dev/r/angular/dropdown-menu.json",
    "https://uipkge.dev/r/angular/input.json",
    "https://uipkge.dev/r/angular/radio-group.json",
    "https://uipkge.dev/r/angular/select.json"
  ],
  "description": "Multi-organization workspace switcher dropdown and creation modal. Features active organization display, 3 tier levels (Enterprise Scale, Pro Team, Free Sandbox), team role badges, member counts, and an organization creation dialog with dynamic slug preview, region selector, and tier plan radios.",
  "categories": [
    "layout",
    "dashboard",
    "navigation",
    "overlay"
  ]
}