{"version":3,"sources":["../layouts/sidebar1/context-switcher.tsx"],"sourcesContent":["\"use client\";\nimport * as React from 'react';\nimport { ChevronsUpDown, Plus } from 'lucide-react';\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuLabel,\n  DropdownMenuSeparator,\n  DropdownMenuShortcut,\n  DropdownMenuTrigger,\n} from '../../components/ui/dropdown-menu';\nimport { SidebarMenu, SidebarMenuButton, SidebarMenuItem, useSidebar } from '../../components/ui/sidebar';\nimport { cn } from '../../utils/ui';\n\nexport interface INavContext {\n  name: string;\n  logo?: React.ElementType;\n  logoUrl?: string;\n  text: string;\n  active?: boolean;\n  className?: string;\n}\n\nexport function ContextSwitcher({\n  items,\n  title = 'Contexts',\n  newContextText = 'Add context',\n  canAdd = false,\n  onContextAdd,\n  onContextSelected,\n}: {\n  items: INavContext[];\n  title?: string;\n  newContextText?: string;\n  canAdd?: boolean;\n  onContextAdd?: () => void;\n  onContextSelected?: (context: INavContext) => void;\n}) {\n  const { isMobile } = useSidebar();\n  const [activeContext, setActiveContext] = React.useState(items.find((item) => item.active) || items[0]);\n\n  React.useEffect(() => {\n    if (!items || items.length === 0) return;\n    setActiveContext((prev) => {\n      const stillExists = items.find((item) => item.name === prev?.name);\n      return stillExists ?? items[0];\n    });\n  }, [items]);\n\n  return (\n    <SidebarMenu>\n      <SidebarMenuItem>\n        <DropdownMenu>\n          <DropdownMenuTrigger asChild>\n            <SidebarMenuButton\n              size=\"lg\"\n              className=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n            >\n              <div\n                className={cn(\n                  'flex aspect-square size-8 items-center justify-center rounded-lg bg-dark text-dark-foreground',\n                  activeContext.className,\n                )}\n              >\n                {activeContext.logo ? (\n                  <activeContext.logo className=\"size-4\" />\n                ) : (\n                  <img src={activeContext.logoUrl} alt={activeContext.name} className=\"size-4 rounded-sm\" />\n                )}\n              </div>\n\n              <div className=\"grid flex-1 text-left text-sm leading-tight\">\n                <span className=\"truncate font-semibold\">{activeContext.name}</span>\n                <span className=\"truncate text-xs\">{activeContext.text}</span>\n              </div>\n\n              <ChevronsUpDown className=\"ml-auto\" />\n            </SidebarMenuButton>\n          </DropdownMenuTrigger>\n\n          <DropdownMenuContent\n            className=\"w-[--radix-dropdown-menu-trigger-width] min-w-56 rounded-lg\"\n            align=\"start\"\n            side={isMobile ? 'bottom' : 'right'}\n            sideOffset={4}\n          >\n            <DropdownMenuLabel className=\"text-xs text-muted-foreground\">{title}</DropdownMenuLabel>\n\n            {items.map((item, index) => (\n              <DropdownMenuItem\n                key={item.name}\n                onClick={() => {\n                  setActiveContext(item);\n                  if (onContextSelected) {\n                    onContextSelected(item);\n                  }\n                }}\n                className=\"gap-2 p-2\"\n              >\n                <div className=\"flex size-6 items-center justify-center rounded-sm border\">\n                  {item.logo ? (\n                    <item.logo className=\"size-4 shrink-0\" />\n                  ) : (\n                    <img src={item.logoUrl} alt={item.name} className=\"size-4 shrink-0 rounded-sm\" />\n                  )}\n                </div>\n                {item.name}\n                {/* <DropdownMenuShortcut>⌘{index + 1}</DropdownMenuShortcut> */}\n              </DropdownMenuItem>\n            ))}\n\n            {canAdd && (\n              <>\n                <DropdownMenuSeparator />\n\n                <DropdownMenuItem\n                  className=\"gap-2 p-2\"\n                  onClick={() => {\n                    if (onContextAdd) {\n                      onContextAdd();\n                    }\n                  }}\n                >\n                  <div className=\"flex size-6 items-center justify-center rounded-md border bg-background\">\n                    <Plus className=\"size-4\" />\n                  </div>\n                  <div className=\"font-medium text-muted-foreground\">{newContextText}</div>\n                </DropdownMenuItem>\n              </>\n            )}\n          </DropdownMenuContent>\n        </DropdownMenu>\n      </SidebarMenuItem>\n    </SidebarMenu>\n  );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AACA,YAAY,WAAW;AACvB,SAAS,gBAAgB,YAAY;AAsB9B,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,SAAS;AAAA,EACT;AAAA,EACA;AACF,GAOG;AACD,QAAM,EAAE,SAAS,IAAI,WAAW;AAChC,QAAM,CAAC,eAAe,gBAAgB,IAAU,eAAS,MAAM,KAAK,CAAC,SAAS,KAAK,MAAM,KAAK,MAAM,CAAC,CAAC;AAEtG,EAAM,gBAAU,MAAM;AACpB,QAAI,CAAC,SAAS,MAAM,WAAW,EAAG;AAClC,qBAAiB,CAAC,SAAS;AACzB,YAAM,cAAc,MAAM,KAAK,CAAC,SAAS,KAAK,UAAS,6BAAM,KAAI;AACjE,aAAO,oCAAe,MAAM,CAAC;AAAA,IAC/B,CAAC;AAAA,EACH,GAAG,CAAC,KAAK,CAAC;AAEV,SACE,oCAAC,mBACC,oCAAC,uBACC,oCAAC,oBACC,oCAAC,uBAAoB,SAAO,QAC1B;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAU;AAAA;AAAA,IAEV;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,cAAc;AAAA,QAChB;AAAA;AAAA,MAEC,cAAc,OACb,oCAAC,cAAc,MAAd,EAAmB,WAAU,UAAS,IAEvC,oCAAC,SAAI,KAAK,cAAc,SAAS,KAAK,cAAc,MAAM,WAAU,qBAAoB;AAAA,IAE5F;AAAA,IAEA,oCAAC,SAAI,WAAU,iDACb,oCAAC,UAAK,WAAU,4BAA0B,cAAc,IAAK,GAC7D,oCAAC,UAAK,WAAU,sBAAoB,cAAc,IAAK,CACzD;AAAA,IAEA,oCAAC,kBAAe,WAAU,WAAU;AAAA,EACtC,CACF,GAEA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAM;AAAA,MACN,MAAM,WAAW,WAAW;AAAA,MAC5B,YAAY;AAAA;AAAA,IAEZ,oCAAC,qBAAkB,WAAU,mCAAiC,KAAM;AAAA,IAEnE,MAAM,IAAI,CAAC,MAAM,UAChB;AAAA,MAAC;AAAA;AAAA,QACC,KAAK,KAAK;AAAA,QACV,SAAS,MAAM;AACb,2BAAiB,IAAI;AACrB,cAAI,mBAAmB;AACrB,8BAAkB,IAAI;AAAA,UACxB;AAAA,QACF;AAAA,QACA,WAAU;AAAA;AAAA,MAEV,oCAAC,SAAI,WAAU,+DACZ,KAAK,OACJ,oCAAC,KAAK,MAAL,EAAU,WAAU,mBAAkB,IAEvC,oCAAC,SAAI,KAAK,KAAK,SAAS,KAAK,KAAK,MAAM,WAAU,8BAA6B,CAEnF;AAAA,MACC,KAAK;AAAA,IAER,CACD;AAAA,IAEA,UACC,0DACE,oCAAC,2BAAsB,GAEvB;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,SAAS,MAAM;AACb,cAAI,cAAc;AAChB,yBAAa;AAAA,UACf;AAAA,QACF;AAAA;AAAA,MAEA,oCAAC,SAAI,WAAU,6EACb,oCAAC,QAAK,WAAU,UAAS,CAC3B;AAAA,MACA,oCAAC,SAAI,WAAU,uCAAqC,cAAe;AAAA,IACrE,CACF;AAAA,EAEJ,CACF,CACF,CACF;AAEJ;","names":[]}