{
  "$schema": "https://uipkge.dev/schema/registry-item.json",
  "name": "enterprise-workspace-switcher",
  "title": "Enterprise Workspace Switcher",
  "type": "registry:block",
  "description": "Multi-organization workspace switcher dropdown and creation modal inspired by Portico/Riter. Features active organization display with emerald ring, 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"
  ],
  "files": [
    {
      "path": "packages/elements-lit/src/blocks/enterprise-workspace-switcher/enterprise-workspace-switcher.ts",
      "content": "import { LitElement, css, html, nothing } from 'lit'\nimport {\n  Building2,\n  Check,\n  ChevronsUpDown,\n  Circle,\n  Globe,\n  LogOut,\n  Plus,\n  Settings,\n  UserPlus,\n} from 'lucide'\nimport { cn } from '../../lib/utils'\nimport { tailwind } from '../../lib/styles'\nimport { ThemeController } from '../../lib/theme'\nimport { icon } from '../../lib/icon'\n// Side-effect imports: register the composed elements for standalone use\n// (consumers who install only this block still get working primitives).\nimport '../../components/avatar/avatar'\nimport '../../components/badge/badge'\nimport '../../components/button/button'\nimport '../../components/dialog/dialog'\nimport '../../components/dropdown-menu/dropdown-menu'\nimport '../../components/input/input'\nimport type { UipInput } from '../../components/input/input'\nimport '../../components/select/select'\nimport type { UipSelect } from '../../components/select/select'\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 type WorkspaceActionKey = 'settings' | 'billing' | 'invite' | 'logout'\n\ntype Plan = 'pro' | 'enterprise'\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 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\nconst radioCircle =\n  'border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square shrink-0 rounded-full border shadow-sm transition-colors duration-200 outline-none focus-visible:ring-[3px] size-4 data-[state=checked]:border-primary mt-0.5'\n\n/**\n * <uip-enterprise-workspace-switcher> — the registry\n * EnterpriseWorkspaceSwitcher block as a web component.\n *\n * Class strings are React's verbatim. React state (workspaces, active id,\n * dialog + form fields) becomes @state fields. `defaultActiveId` and the\n * user become `default-active-id` / `user-name` / `user-email` /\n * `user-avatar` attributes; `onChange` / `onCreate` / `onAction` become\n * `change` / `create` / `action` CustomEvents (bubbles, composed, detail =\n * the workspace or action key).\n *\n * Deviations: React's `className` on DropdownMenu parts reaches the shadow\n * DOM via `[&::part(…)]:…` on the host (their utilities only exist in the\n * shadow sheet). The plan cards keep React's card visuals 1:1 but the radio\n * circle is block-local markup (React's `RadioGroup` only renders plain\n * labels, so it can't host the rich card content) — a real `radiogroup`\n * with roving tabindex and arrows/Home/End.\n */\nexport class UipEnterpriseWorkspaceSwitcher extends LitElement {\n  static shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true }\n  // :host display can't be a utility class (the host has no template of its own).\n  static styles = [tailwind, css`:host { display: block; }`]\n\n  static properties = {\n    defaultActiveId: { attribute: 'default-active-id' },\n    userName: { attribute: 'user-name' },\n    userEmail: { attribute: 'user-email' },\n    userAvatar: { attribute: 'user-avatar' },\n    workspaces: { state: true },\n    activeWorkspaceId: { state: true },\n    isCreateDialogOpen: { state: true },\n    newOrgName: { state: true },\n    newOrgRegion: { state: true },\n    newOrgPlan: { state: true },\n  }\n\n  defaultActiveId = 'ws-1'\n  userName = 'Elena Rostova'\n  userEmail = 'elena@uipkge.dev'\n  userAvatar = ''\n  private workspaces: WorkspaceItem[] = DEFAULT_WORKSPACES\n  private activeWorkspaceId = ''\n  private isCreateDialogOpen = false\n  private newOrgName = 'Stripe Developer Platform'\n  private newOrgRegion = 'us-east'\n  private newOrgPlan: Plan = 'pro'\n\n  constructor() {\n    super()\n    new ThemeController(this)\n  }\n\n  connectedCallback() {\n    super.connectedCallback()\n    this.setAttribute('data-uipkge', '')\n    this.setAttribute('data-slot', 'enterprise-workspace-switcher')\n    if (!this.activeWorkspaceId) this.activeWorkspaceId = this.defaultActiveId\n  }\n\n  private get activeWorkspace(): WorkspaceItem {\n    return this.workspaces.find((w) => w.id === this.activeWorkspaceId) || this.workspaces[0] || FALLBACK_WORKSPACE\n  }\n\n  private get slugPreview() {\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  private get userInitials() {\n    return (\n      this.userName\n        .split(' ')\n        .map((p) => p[0])\n        .join('')\n        .toUpperCase() || 'U'\n    )\n  }\n\n  private handleSelectWorkspace(workspace: WorkspaceItem) {\n    this.activeWorkspaceId = workspace.id\n    this.dispatchEvent(new CustomEvent('change', { detail: workspace, bubbles: true, composed: true }))\n  }\n\n  private handleCreateWorkspace(e: Event) {\n    e.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 = [newWs, ...this.workspaces]\n    this.activeWorkspaceId = newWs.id\n    this.dispatchEvent(new CustomEvent('create', { detail: newWs, bubbles: true, composed: true }))\n    this.dispatchEvent(new CustomEvent('change', { detail: newWs, bubbles: true, composed: true }))\n\n    this.newOrgName = ''\n    this.isCreateDialogOpen = false\n  }\n\n  private onPlanKey(e: KeyboardEvent, value: Plan) {\n    const order: Plan[] = ['pro', 'enterprise']\n    const at = order.indexOf(value)\n    let next: Plan | null = null\n    if (e.key === 'ArrowDown' || e.key === 'ArrowRight') next = order[(at + 1) % order.length] ?? null\n    else if (e.key === 'ArrowUp' || e.key === 'ArrowLeft') next = order[(at + order.length - 1) % order.length] ?? null\n    else if (e.key === 'Home') next = 'pro'\n    else if (e.key === 'End') next = 'enterprise'\n    else if (e.key === ' ' || e.key === 'Enter') next = value\n    if (!next) return\n    e.preventDefault()\n    this.newOrgPlan = next\n    if (e.key !== ' ' && e.key !== 'Enter') {\n      this.renderRoot.querySelector<HTMLElement>(`[data-plan=\"${next}\"]`)?.focus()\n    }\n  }\n\n  private planCard(value: Plan, heading: string, price: string, desc: string) {\n    const checked = this.newOrgPlan === value\n    return html`\n      <div\n        data-plan=${value}\n        role=\"radio\"\n        aria-checked=${checked ? 'true' : 'false'}\n        tabindex=${checked ? '0' : '-1'}\n        class=${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          checked && 'border-primary bg-primary/5 ring-primary/40 shadow-sm ring-1',\n        )}\n        @click=${() => (this.newOrgPlan = value)}\n        @keydown=${(e: KeyboardEvent) => this.onPlanKey(e, value)}\n      >\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\">${heading}</span>\n            <p class=\"text-primary text-xs font-medium\">${price}</p>\n          </div>\n          <span data-uipkge=\"\" data-slot=\"radio-group-item\" data-state=${checked ? 'checked' : 'unchecked'} class=${radioCircle}>\n            ${checked\n              ? html`<span data-uipkge=\"\" data-slot=\"radio-group-indicator\" class=\"relative flex items-center justify-center\">\n                  ${icon(Circle, 'circle', 'absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 fill-current text-current size-2')}\n                </span>`\n              : nothing}\n          </span>\n        </div>\n        <p class=\"text-muted-foreground mt-2 text-xs leading-relaxed\">${desc}</p>\n      </div>\n    `\n  }\n\n  render() {\n    const active = this.activeWorkspace\n    return html`\n      <div data-slot=\"enterprise-workspace-switcher\" class=${cn('w-full')}>\n        <uip-dropdown-menu\n          class=\"[&::part(content)]:w-80 [&::part(content)]:rounded-xl [&::part(content)]:p-2 [&::part(content)]:shadow-xl sm:[&::part(content)]:w-96 [&::part(ws-section)]:p-0 [&::part(ws-section)]:font-normal [&::part(ws-row)]:my-0.5 [&::part(ws-row)]:cursor-pointer [&::part(ws-row)]:gap-3 [&::part(ws-row)]:rounded-lg [&::part(ws-row)]:p-2 [&::part(ws-create)]:cursor-pointer [&::part(ws-create)]:gap-2.5 [&::part(ws-create)]:rounded-lg [&::part(ws-create)]:text-foreground [&::part(ws-action)]:cursor-pointer [&::part(ws-action)]:gap-2.5 [&::part(ws-action)]:rounded-lg [&::part(ws-action)]:text-muted-foreground [&::part(ws-logout)]:cursor-pointer [&::part(ws-logout)]:gap-2.5 [&::part(ws-logout)]:rounded-lg [&::part(ws-sep)]:my-1.5 [&::part(user-label)]:p-0 [&::part(user-label)]:font-normal\"\n        >\n          <button\n            slot=\"trigger\"\n            type=\"button\"\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            <div class=\"relative size-10 shrink-0\">\n              <div class=${cn('flex size-10 items-center justify-center rounded-lg text-sm font-semibold shadow-2xs', active.color)}>\n                ${active.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            <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\">${active.name}</span>\n                <uip-badge\n                  variant=\"secondary\"\n                  class=\"shrink-0 text-xs font-medium [&::part(base)]:px-1.5 [&::part(base)]:py-0\"\n                >\n                  ${active.role}\n                </uip-badge>\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: ${active.plan}</span>\n                <span class=\"shrink-0\">${active.regionCode}</span>\n              </div>\n            </div>\n\n            ${icon(ChevronsUpDown, 'chevrons-up-down', 'text-muted-foreground/70 group-hover:text-foreground size-4 shrink-0 transition-colors')}\n          </button>\n\n          <uip-dropdown-menu-content align=\"start\" side-offset=\"6\">\n            <uip-dropdown-menu-label part=\"user-label\">\n              <div class=\"bg-muted/40 flex items-center gap-2.5 rounded-lg px-2.5 py-2 text-left\">\n                <uip-avatar class=\"size-8 rounded-full border\">\n                  ${this.userAvatar\n                    ? html`<uip-avatar-image src=${this.userAvatar} alt=${this.userName}></uip-avatar-image>`\n                    : nothing}\n                  <uip-avatar-fallback class=\"text-xs font-bold [&::part(base)]:bg-primary/10 [&::part(base)]:text-primary\"\n                    >${this.userInitials}</uip-avatar-fallback\n                  >\n                </uip-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\">${this.userEmail}</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            </uip-dropdown-menu-label>\n\n            <uip-dropdown-menu-separator part=\"ws-sep\"></uip-dropdown-menu-separator>\n\n            <uip-dropdown-menu-label part=\"ws-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\">${this.workspaces.length} total</span>\n              </div>\n            </uip-dropdown-menu-label>\n\n            ${this.workspaces.map(\n              (ws) => html`\n                <uip-dropdown-menu-item part=\"ws-row\" @select=${() => this.handleSelectWorkspace(ws)}>\n                    <div class=${cn('flex size-8 shrink-0 items-center justify-center rounded-lg text-xs font-semibold shadow-2xs', ws.color)}>\n                      ${ws.initials}\n                    </div>\n                    <div class=\"min-w-0 flex-1\">\n                      <div class=\"flex items-center gap-1.5\">\n                        <span class=${cn('truncate text-sm font-medium', this.activeWorkspaceId === ws.id ? 'text-foreground font-semibold' : 'text-foreground/90')}>\n                          ${ws.name}\n                        </span>\n                        ${ws.role === 'Owner'\n                          ? html`<uip-badge variant=\"secondary\" class=\"shrink-0 text-xs font-medium [&::part(base)]:px-1 [&::part(base)]:py-0\">Owner</uip-badge>`\n                          : nothing}\n                        ${ws.role === 'Admin'\n                          ? html`<uip-badge variant=\"outline\" class=\"shrink-0 text-xs font-medium [&::part(base)]:px-1 [&::part(base)]:py-0\">Admin</uip-badge>`\n                          : nothing}\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                    ${this.activeWorkspaceId === ws.id ? icon(Check, 'check', 'text-success size-4 shrink-0') : nothing}\n                  </uip-dropdown-menu-item>\n                `,\n              )}\n\n            <uip-dropdown-menu-separator part=\"ws-sep\"></uip-dropdown-menu-separator>\n\n            <uip-dropdown-menu-group>\n              <uip-dropdown-menu-item part=\"ws-create\" @select=${() => (this.isCreateDialogOpen = true)}>\n                <div class=\"border-primary/30 bg-primary/10 text-primary flex size-6 items-center justify-center rounded-md border\">\n                  ${icon(Plus, 'plus', 'size-3.5')}\n                </div>\n                <span class=\"font-medium\">Create New Workspace</span>\n              </uip-dropdown-menu-item>\n\n              <uip-dropdown-menu-item\n                part=\"ws-action\"\n                @select=${() =>\n                  this.dispatchEvent(new CustomEvent('action', { detail: 'settings', bubbles: true, composed: true }))}\n              >\n                <div class=\"border-border bg-muted flex size-6 items-center justify-center rounded-md border\">\n                  ${icon(Settings, 'settings', 'size-3.5')}\n                </div>\n                <span>Organization Settings & Billing</span>\n              </uip-dropdown-menu-item>\n\n              <uip-dropdown-menu-item\n                part=\"ws-action\"\n                @select=${() =>\n                  this.dispatchEvent(new CustomEvent('action', { detail: 'invite', bubbles: true, composed: true }))}\n              >\n                <div class=\"border-border bg-muted flex size-6 items-center justify-center rounded-md border\">\n                  ${icon(UserPlus, 'user-plus', 'size-3.5')}\n                </div>\n                <span>Invite Team Members</span>\n              </uip-dropdown-menu-item>\n            </uip-dropdown-menu-group>\n\n            <uip-dropdown-menu-separator part=\"ws-sep\"></uip-dropdown-menu-separator>\n\n            <uip-dropdown-menu-item\n              part=\"ws-logout\"\n              variant=\"destructive\"\n              @select=${() =>\n                this.dispatchEvent(new CustomEvent('action', { detail: 'logout', bubbles: true, composed: true }))}\n            >\n              <div class=\"border-destructive/20 bg-destructive/10 text-destructive flex size-6 items-center justify-center rounded-md border\">\n                ${icon(LogOut, 'log-out', 'size-3.5')}\n              </div>\n              <span>Log out</span>\n            </uip-dropdown-menu-item>\n          </uip-dropdown-menu-content>\n        </uip-dropdown-menu>\n\n        <uip-dialog\n          heading=\"Create New Workspace\"\n          description=\"Spin up a dedicated organization workspace with multi-region routing and isolated billing.\"\n          class=\"[&::part(content)]:rounded-2xl [&::part(content)]:p-6 [&::part(content)]:shadow-sm sm:[&::part(content)]:max-w-lg\"\n          ?open=${this.isCreateDialogOpen}\n          @open-change=${(e: CustomEvent<{ open: boolean }>) => {\n            this.isCreateDialogOpen = e.detail.open\n          }}\n        >\n          <span slot=\"header-start\" class=\"border-primary/20 bg-primary/10 text-primary flex size-10 items-center justify-center rounded-xl border shadow-xs\">\n            ${icon(Building2, 'building-2', 'size-5')}\n          </span>\n          <form class=\"space-y-4 py-2\" @submit=${this.handleCreateWorkspace}>\n            <div class=\"space-y-1.5\">\n              <uip-label for=\"new-workspace-name\" class=\"text-foreground text-sm font-medium\">Workspace Name</uip-label>\n              <uip-input\n                id=\"new-workspace-name\"\n                class=\"[&::part(control)]:h-10 text-sm\"\n                .value=${this.newOrgName}\n                placeholder=\"e.g. Stripe Developer Platform\"\n                autocomplete=\"off\"\n                required\n                @input=${(e: Event) => {\n                  this.newOrgName = (e.target as UipInput).value\n                }}\n              ></uip-input>\n            </div>\n\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                ${icon(Globe, 'globe', 'text-muted-foreground size-4 shrink-0')}\n                <span class=\"text-muted-foreground\">uipkge.dev/</span>\n                <span class=\"text-foreground truncate font-semibold\">${this.slugPreview}</span>\n              </div>\n            </div>\n\n            <div class=\"space-y-1.5\">\n              <label class=\"text-foreground text-sm font-medium\">Primary Region</label>\n              <uip-select\n                class=\"w-full [&::part(trigger)]:h-10\"\n                .value=${this.newOrgRegion}\n                @change=${(e: Event) => {\n                  this.newOrgRegion = (e.target as UipSelect).value\n                }}\n              >\n                <option value=\"us-east\">US East (N. Virginia)</option>\n                <option value=\"eu-central\">EU Central (Frankfurt)</option>\n                <option value=\"ap-south\">AP South (Mumbai)</option>\n              </uip-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            <div class=\"space-y-2\">\n              <label class=\"text-foreground text-sm font-medium\">Choose Workspace Plan</label>\n              <div role=\"radiogroup\" aria-label=\"Choose Workspace Plan\" class=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n                ${this.planCard('pro', 'Pro Team', '$29 / month', 'Up to 25 members, standard 99.9% SLA, and daily automated backups.')}\n                ${this.planCard('enterprise', 'Enterprise Scale', 'Custom billing', 'Unlimited members, dedicated VPC peering, 99.99% uptime SLA & SSO.')}\n              </div>\n            </div>\n          </form>\n\n          <div slot=\"footer\" class=\"border-border/60 flex gap-2 border-t pt-4 sm:justify-end\">\n            <uip-button type=\"button\" variant=\"outline\" @click=${() => (this.isCreateDialogOpen = false)}>\n              Cancel\n            </uip-button>\n            <uip-button\n              type=\"button\"\n              ?disabled=${!this.newOrgName.trim()}\n              @click=${() => this.renderRoot.querySelector('form')?.requestSubmit()}\n            >\n              Create Workspace\n            </uip-button>\n          </div>\n        </uip-dialog>\n      </div>\n    `\n  }\n}\n\ncustomElements.get('uip-enterprise-workspace-switcher') ||\n  customElements.define('uip-enterprise-workspace-switcher', UipEnterpriseWorkspaceSwitcher)\n\ndeclare global {\n  interface HTMLElementTagNameMap {\n    'uip-enterprise-workspace-switcher': UipEnterpriseWorkspaceSwitcher\n  }\n}\n",
      "type": "registry:file",
      "target": "src/uip/blocks/enterprise-workspace-switcher/enterprise-workspace-switcher.ts"
    }
  ],
  "dependencies": [
    "lit",
    "lucide"
  ],
  "registryDependencies": [
    "https://uipkge.dev/r/lit/avatar.json",
    "https://uipkge.dev/r/lit/badge.json",
    "https://uipkge.dev/r/lit/button.json",
    "https://uipkge.dev/r/lit/dialog.json",
    "https://uipkge.dev/r/lit/dropdown-menu.json",
    "https://uipkge.dev/r/lit/input.json",
    "https://uipkge.dev/r/lit/lit-core.json",
    "https://uipkge.dev/r/lit/select.json"
  ]
}
