{"$schema":"https://ui.shadcn.com/schema/registry-item.json","name":"model-selector","title":"Model Selector","description":"Dropdown for selecting AI models with radio groups, sub-menus, and custom items","dependencies":["radix-ui","@hugeicons/react","@hugeicons/core-free-icons"],"files":[{"path":"components/nexus-ui/model-selector.tsx","content":"\"use client\";\n\nimport * as React from \"react\";\nimport {\n  Tick02Icon,\n  ArrowDown01Icon,\n  ArrowRight01Icon,\n  SquareLock01Icon,\n  Search01Icon,\n} from \"@hugeicons/core-free-icons\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst triggerVariants = cva(\n  \"inline-flex h-8 cursor-pointer items-center gap-1 rounded-full px-3 font-normal text-primary text-sm outline-none transition-all duration-200 ease-out [&>span:last-child]:transition-transform [&>span:last-child]:duration-200 data-[state=open]:[&>span:last-child]:rotate-180\",\n  {\n    variants: {\n      variant: {\n        filled:\n          \"bg-muted hover:bg-border\",\n        outline:\n          \"border border-input bg-transparent hover:bg-muted data-[state=open]:bg-transparent\",\n        ghost:\n          \"bg-transparent hover:bg-muted data-[state=open]:bg-transparent\",\n      },\n    },\n    defaultVariants: {\n      variant: \"filled\",\n    },\n  },\n);\n\nexport type ModelItemData = {\n  icon?: React.ComponentType<{ className?: string }>;\n  title: string;\n  description?: string;\n};\n\nfunction matchesModelItemFilter(\n  filterQuery: string,\n  fields: {\n    value?: string;\n    title?: string | null;\n    description?: string | null;\n  },\n) {\n  const q = filterQuery.trim().toLowerCase();\n  if (!q) return true;\n  if (fields.value != null && fields.value.toLowerCase().includes(q)) {\n    return true;\n  }\n  if (fields.title?.toLowerCase().includes(q)) return true;\n  if (fields.description?.toLowerCase().includes(q)) return true;\n  return false;\n}\n\nconst ModelSelectorContext = React.createContext<{\n  value: string;\n  onValueChange: (value: string) => void;\n  items: Map<string, ModelItemData>;\n  filterQuery: string;\n  setFilterQuery: (query: string) => void;\n} | null>(null);\n\nfunction useModelSelectorContext() {\n  const ctx = React.useContext(ModelSelectorContext);\n  if (!ctx) {\n    throw new Error(\n      \"ModelSelector components must be used within ModelSelector\",\n    );\n  }\n  return ctx;\n}\n\nfunction ModelSelector({\n  value,\n  onValueChange,\n  items: itemsProp,\n  children,\n  onOpenChange,\n  ...props\n}: Omit<\n  React.ComponentProps<typeof DropdownMenuPrimitive.Root>,\n  \"value\" | \"onValueChange\"\n> & {\n  value: string;\n  onValueChange: (value: string) => void;\n  items?: Array<{ value: string } & ModelItemData>;\n}) {\n  const items = React.useMemo(() => {\n    if (!itemsProp) return new Map<string, ModelItemData>();\n    const m = new Map<string, ModelItemData>();\n    for (const { value: v, ...rest } of itemsProp) {\n      m.set(v, rest);\n    }\n    return m;\n  }, [itemsProp]);\n\n  const [filterQuery, setFilterQuery] = React.useState(\"\");\n\n  const handleOpenChange = React.useCallback(\n    (open: boolean) => {\n      onOpenChange?.(open);\n      if (!open) setFilterQuery(\"\");\n    },\n    [onOpenChange],\n  );\n\n  const ctx = React.useMemo(\n    () => ({\n      value,\n      onValueChange,\n      items,\n      filterQuery,\n      setFilterQuery,\n    }),\n    [value, onValueChange, items, filterQuery],\n  );\n\n  return (\n    <ModelSelectorContext.Provider value={ctx}>\n      <DropdownMenuPrimitive.Root\n        data-slot=\"model-selector\"\n        onOpenChange={handleOpenChange}\n        {...props}\n      >\n        {children}\n      </DropdownMenuPrimitive.Root>\n    </ModelSelectorContext.Provider>\n  );\n}\n\nModelSelector.displayName = \"ModelSelector\";\n\nfunction ModelSelectorPortal({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n  return (\n    <DropdownMenuPrimitive.Portal\n      data-slot=\"model-selector-portal\"\n      {...props}\n    />\n  );\n}\n\nModelSelectorPortal.displayName = \"ModelSelectorPortal\";\n\nfunction ModelSelectorTrigger({\n  className,\n  children,\n  asChild,\n  variant = \"filled\",\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger> &\n  VariantProps<typeof triggerVariants>) {\n  const { value, items } = useModelSelectorContext();\n  const selected = items.get(value);\n\n  const defaultContent = (\n    <>\n      <span\n        data-slot=\"model-selector-trigger-content\"\n        className=\"flex items-center gap-1\"\n      >\n        {selected?.icon && <selected.icon className=\"size-4 shrink-0\" />}\n        <span\n          data-slot=\"model-selector-trigger-title\"\n          className=\"truncate text-sm\"\n        >\n          {selected?.title ?? value}\n        </span>\n      </span>\n      <span data-slot=\"model-selector-trigger-chevron\">\n        <HugeiconsIcon\n          icon={ArrowDown01Icon}\n          strokeWidth={2.0}\n          className=\"size-4 shrink-0\"\n        />\n      </span>\n    </>\n  );\n\n  const content = children ?? defaultContent;\n\n  let triggerContent = content;\n  if (asChild && React.isValidElement(children)) {\n    const child = children as React.ReactElement<{\n      children?: React.ReactNode;\n    }>;\n    triggerContent = React.cloneElement(child, {\n      children: child.props.children ?? defaultContent,\n    });\n  }\n\n  return (\n    <DropdownMenuPrimitive.Trigger\n      data-slot=\"model-selector-trigger\"\n      data-variant={variant}\n      asChild={asChild}\n      className={cn(triggerVariants({ variant }), className)}\n      {...props}\n    >\n      {triggerContent}\n    </DropdownMenuPrimitive.Trigger>\n  );\n}\n\nModelSelectorTrigger.displayName = \"ModelSelectorTrigger\";\n\nfunction ModelSelectorContent({\n  className,\n  sideOffset = 4,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n  return (\n    <DropdownMenuPrimitive.Portal>\n      <DropdownMenuPrimitive.Content\n        data-slot=\"model-selector-content\"\n        sideOffset={sideOffset}\n        className={cn(\n          \"z-50 max-h-[min(var(--model-selector-content-max-height,500px),var(--radix-dropdown-menu-content-available-height))] min-w-48 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto overscroll-none rounded-lg border border-accent bg-popover p-1 text-popover-foreground shadow-modal duration-200 ease-out data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:overflow-hidden data-[state=closed]:duration-0 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n          className,\n        )}\n        {...props}\n      />\n    </DropdownMenuPrimitive.Portal>\n  );\n}\n\nModelSelectorContent.displayName = \"ModelSelectorContent\";\n\nconst ModelSelectorSearch = React.forwardRef<\n  HTMLInputElement,\n  React.ComponentProps<\"input\">\n>(function ModelSelectorSearch(\n  {\n    className,\n    type = \"text\",\n    onKeyDown,\n    onPointerDown,\n    onChange,\n    autoComplete = \"off\",\n    ...props\n  },\n  ref,\n) {\n  const { filterQuery, setFilterQuery } = useModelSelectorContext();\n  return (\n    <div\n      data-slot=\"model-selector-search-wrapper\"\n      className=\"sticky top-0 z-10 bg-popover py-1\"\n      onPointerDown={(e) => {\n        e.preventDefault();\n      }}\n    >\n      <HugeiconsIcon\n        icon={Search01Icon}\n        className=\"absolute top-1/2 left-2.75 -mb-0.25 size-4 -translate-y-1/2 text-muted-foreground\"\n        strokeWidth={2}\n      />\n      <input\n        ref={ref}\n        type={type}\n        data-slot=\"model-selector-search\"\n        autoComplete={autoComplete}\n        className={cn(\n          \"inline-flex h-8 w-full items-center gap-2 rounded-sm bg-muted p-1.5 ps-8.5 pe-2 text-[13px] leading-6 font-[350] text-muted-foreground transition-all placeholder:text-muted-foreground hover:bg-border/50 focus-visible:ring-2 focus-visible:outline-0 focus-visible:ring-border dark:focus-visible:ring-ring\",\n          className,\n        )}\n        onKeyDown={(e) => {\n          onKeyDown?.(e);\n          if (e.key === \"Escape\") return;\n          e.stopPropagation();\n        }}\n        onPointerDown={(e) => {\n          onPointerDown?.(e);\n          e.stopPropagation();\n        }}\n        {...props}\n        value={filterQuery}\n        onChange={(e) => {\n          setFilterQuery(e.target.value);\n          onChange?.(e);\n        }}\n      />\n    </div>\n  );\n});\n\nModelSelectorSearch.displayName = \"ModelSelectorSearch\";\n\nfunction ModelSelectorEmpty({\n  className,\n  children,\n  ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n  const { filterQuery, items } = useModelSelectorContext();\n  const q = filterQuery.trim();\n  const hasCatalogMatch = React.useMemo(() => {\n    if (!q || items.size === 0) return true;\n    for (const [value, data] of items) {\n      if (\n        matchesModelItemFilter(q, {\n          value,\n          title: data.title,\n          description: data.description,\n        })\n      ) {\n        return true;\n      }\n    }\n    return false;\n  }, [q, items]);\n\n  if (!q || hasCatalogMatch) return null;\n\n  return (\n    <div data-slot=\"model-selector-empty\" className={cn(\"flex h-27 w-full items-center justify-center px-3 py-2 text-center text-[13px] font-[350] text-muted-foreground\", className)} {...props}>\n      {children ?? \"No models found\"}\n    </div>\n  );\n}\n\nModelSelectorEmpty.displayName = \"ModelSelectorEmpty\";\n\nfunction ModelSelectorGroup({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n  return (\n    <DropdownMenuPrimitive.Group data-slot=\"model-selector-group\" {...props} />\n  );\n}\n\nModelSelectorGroup.displayName = \"ModelSelectorGroup\";\n\nfunction ModelSelectorItemTitle({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLParagraphElement>) {\n  return (\n    <p\n      data-slot=\"model-selector-item-title\"\n      className={cn(\"truncate\", className)}\n      {...props}\n    />\n  );\n}\n\nModelSelectorItemTitle.displayName = \"ModelSelectorItemTitle\";\n\nfunction ModelSelectorItemDescription({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLParagraphElement>) {\n  return (\n    <p\n      data-slot=\"model-selector-item-description\"\n      className={cn(\"truncate text-xs\", className)}\n      {...props}\n    />\n  );\n}\n\nModelSelectorItemDescription.displayName = \"ModelSelectorItemDescription\";\n\nfunction ModelSelectorItemIcon({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLSpanElement>) {\n  return (\n    <span\n      data-slot=\"model-selector-item-icon\"\n      className={cn(\"flex shrink-0 items-center justify-center\", className)}\n      {...props}\n    />\n  );\n}\n\nModelSelectorItemIcon.displayName = \"ModelSelectorItemIcon\";\n\nfunction ModelSelectorItemIndicator({\n  className,\n  children,\n  wrapWithItemIndicator = true,\n  ...props\n}: React.HTMLAttributes<HTMLSpanElement> & {\n  /** When false, children are rendered directly without ItemIndicator. Use for always-visible content (e.g. LockIcon when disabled). */\n  wrapWithItemIndicator?: boolean;\n}) {\n  return (\n    <span\n      data-slot=\"model-selector-item-indicator\"\n      className={cn(\n        \"pointer-events-none absolute right-2 flex size-3.5 items-center justify-center\",\n        className,\n      )}\n      {...props}\n    >\n      {wrapWithItemIndicator ? (\n        <DropdownMenuPrimitive.ItemIndicator>\n          {children}\n        </DropdownMenuPrimitive.ItemIndicator>\n      ) : (\n        children\n      )}\n    </span>\n  );\n}\n\nModelSelectorItemIndicator.displayName = \"ModelSelectorItemIndicator\";\n\nfunction ModelSelectorItem({\n  className,\n  inset,\n  variant = \"default\",\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n  inset?: boolean;\n  variant?: \"default\" | \"destructive\";\n}) {\n  return (\n    <DropdownMenuPrimitive.Item\n      data-slot=\"dropdown-menu-item\"\n      data-inset={inset}\n      data-variant={variant}\n      className={cn(\n        \"group/dropdown-menu-item relative flex cursor-pointer items-center gap-1.5 rounded-md px-3 py-2 text-sm font-normal text-primary outline-hidden transition-colors duration-0 select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nModelSelectorItem.displayName = \"ModelSelectorItem\";\n\nfunction ModelSelectorCheckboxItem({\n  className,\n  children,\n  checked,\n  icon: Icon,\n  title,\n  description,\n  disabled,\n  indicator,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem> & {\n  icon?: React.ComponentType<{ className?: string }>;\n  title?: string;\n  description?: string;\n  disabled?: boolean;\n  indicator?: React.ReactNode;\n  /** Custom content to show when selected. Renders inside ItemIndicator. Defaults to CheckIcon. */\n}) {\n  const { filterQuery } = useModelSelectorContext();\n  const hasFilterableText = title != null || description != null;\n  if (\n    hasFilterableText &&\n    !matchesModelItemFilter(filterQuery, { title, description })\n  ) {\n    return null;\n  }\n\n  const defaultContent = (\n    <>\n      {Icon && (\n        <ModelSelectorItemIcon className=\"size-8 rounded-md bg-muted\">\n          <Icon className=\"size-4 text-muted-foreground\" />\n        </ModelSelectorItemIcon>\n      )}\n      <div\n        data-slot=\"model-selector-checkbox-item-content\"\n        className=\"min-w-0 flex-1\"\n      >\n        {title != null && (\n          <ModelSelectorItemTitle className=\"font-medium\">\n            {title}\n          </ModelSelectorItemTitle>\n        )}\n        {description != null && (\n          <ModelSelectorItemDescription className=\"text-muted-foreground\">\n            {description}\n          </ModelSelectorItemDescription>\n        )}\n      </div>\n    </>\n  );\n\n  return (\n    <DropdownMenuPrimitive.CheckboxItem\n      data-slot=\"model-selector-checkbox-item\"\n      className={cn(\n        \"relative flex min-h-9 cursor-pointer items-center gap-2.5 rounded-md py-3 pr-3 pl-3 text-sm outline-hidden transition-colors duration-0 select-none hover:bg-accent focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n        className,\n      )}\n      checked={checked}\n      disabled={disabled}\n      {...props}\n    >\n      {children ?? defaultContent}\n      <ModelSelectorItemIndicator\n        className=\"right-3 size-4\"\n        wrapWithItemIndicator={!disabled}\n      >\n        {disabled ? (\n          <HugeiconsIcon\n            icon={SquareLock01Icon}\n            strokeWidth={2.0}\n            className=\"size-4 opacity-50\"\n          />\n        ) : (\n          (indicator ?? (\n            <HugeiconsIcon\n              icon={Tick02Icon}\n              strokeWidth={2.0}\n              className=\"size-4\"\n            />\n          ))\n        )}\n      </ModelSelectorItemIndicator>\n    </DropdownMenuPrimitive.CheckboxItem>\n  );\n}\n\nModelSelectorCheckboxItem.displayName = \"ModelSelectorCheckboxItem\";\n\nfunction ModelSelectorRadioGroup({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n  return (\n    <DropdownMenuPrimitive.RadioGroup\n      data-slot=\"model-selector-radio-group\"\n      {...props}\n    />\n  );\n}\n\nModelSelectorRadioGroup.displayName = \"ModelSelectorRadioGroup\";\n\nfunction ModelSelectorRadioItem({\n  className,\n  value,\n  children,\n  icon: Icon,\n  title,\n  description,\n  disabled,\n  indicator,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem> & {\n  icon?: React.ComponentType<{ className?: string }>;\n  title?: string;\n  description?: string;\n  /** Custom content to show when selected. Renders inside ItemIndicator. Defaults to CheckIcon. */\n  indicator?: React.ReactNode;\n}) {\n  const { filterQuery } = useModelSelectorContext();\n  if (\n    !matchesModelItemFilter(filterQuery, {\n      value,\n      title,\n      description,\n    })\n  ) {\n    return null;\n  }\n\n  const defaultContent = (\n    <>\n      {Icon && (\n        <ModelSelectorItemIcon>\n          <Icon className=\"size-4\" />\n        </ModelSelectorItemIcon>\n      )}\n      <div\n        data-slot=\"model-selector-radio-item-content\"\n        className=\"flex min-w-0 flex-1 flex-col gap-0.25\"\n      >\n        {title != null && (\n          <ModelSelectorItemTitle className=\"text-sm font-normal\">\n            {title}\n          </ModelSelectorItemTitle>\n        )}\n        {description != null && (\n          <ModelSelectorItemDescription className=\"font-[350] text-muted-foreground\">\n            {description}\n          </ModelSelectorItemDescription>\n        )}\n      </div>\n    </>\n  );\n\n  return (\n    <DropdownMenuPrimitive.RadioItem\n      data-slot=\"model-selector-radio-item\"\n      value={value}\n      disabled={disabled}\n      className={cn(\n        \"relative flex min-h-9 cursor-pointer items-center gap-2 rounded-md py-2 pr-9 pl-3 text-sm outline-hidden transition-colors duration-0 select-none focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n        className,\n      )}\n      {...props}\n    >\n      {children ?? defaultContent}\n      <ModelSelectorItemIndicator\n        className=\"right-3 size-4\"\n        wrapWithItemIndicator={!disabled}\n      >\n        {disabled ? (\n          <HugeiconsIcon\n            icon={SquareLock01Icon}\n            strokeWidth={2.0}\n            className=\"size-4 opacity-50\"\n          />\n        ) : (\n          (indicator ?? (\n            <HugeiconsIcon\n              icon={Tick02Icon}\n              strokeWidth={2.0}\n              className=\"size-4\"\n            />\n          ))\n        )}\n      </ModelSelectorItemIndicator>\n    </DropdownMenuPrimitive.RadioItem>\n  );\n}\n\nModelSelectorRadioItem.displayName = \"ModelSelectorRadioItem\";\n\nfunction ModelSelectorLabel({\n  className,\n  inset,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n  inset?: boolean;\n}) {\n  return (\n    <DropdownMenuPrimitive.Label\n      data-slot=\"model-selector-label\"\n      data-inset={inset}\n      className={cn(\n        \"px-3 py-2 text-xs font-[450] text-muted-foreground data-inset:pl-8\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nModelSelectorLabel.displayName = \"ModelSelectorLabel\";\n\nfunction ModelSelectorSeparator({\n  className,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n  return (\n    <DropdownMenuPrimitive.Separator\n      data-slot=\"model-selector-separator\"\n      className={cn(\n        \"mx-auto my-2 h-px w-[calc(100%-24px)] bg-border transition-opacity duration-150\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nModelSelectorSeparator.displayName = \"ModelSelectorSeparator\";\n\nfunction ModelSelectorSub({\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n  return (\n    <DropdownMenuPrimitive.Sub data-slot=\"model-selector-sub\" {...props} />\n  );\n}\n\nModelSelectorSub.displayName = \"ModelSelectorSub\";\n\nfunction ModelSelectorSubTrigger({\n  className,\n  inset,\n  children,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n  inset?: boolean;\n}) {\n  return (\n    <DropdownMenuPrimitive.SubTrigger\n      data-slot=\"model-selector-sub-trigger\"\n      data-inset={inset}\n      className={cn(\n        \"flex cursor-pointer items-center gap-2 rounded-md px-3 py-2 text-sm outline-hidden transition-colors duration-0 select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-primary [&>svg:last-child]:transition-transform [&>svg:last-child]:duration-200 data-[state=open]:[&>svg:last-child]:rotate-90\",\n        className,\n      )}\n      {...props}\n    >\n      {children}\n      <HugeiconsIcon\n        icon={ArrowRight01Icon}\n        strokeWidth={2.0}\n        className=\"ml-auto size-4\"\n      />\n    </DropdownMenuPrimitive.SubTrigger>\n  );\n}\n\nModelSelectorSubTrigger.displayName = \"ModelSelectorSubTrigger\";\n\nfunction ModelSelectorSubContent({\n  className,\n  ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n  return (\n    <DropdownMenuPrimitive.SubContent\n      data-slot=\"model-selector-sub-content\"\n      className={cn(\n        \"z-50 min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden overscroll-none rounded-lg border border-accent bg-popover p-1 text-popover-foreground shadow-modal duration-200 ease-out data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:duration-0 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nModelSelectorSubContent.displayName = \"ModelSelectorSubContent\";\n\nexport {\n  ModelSelector,\n  ModelSelectorPortal,\n  ModelSelectorTrigger,\n  ModelSelectorContent,\n  ModelSelectorSearch,\n  ModelSelectorEmpty,\n  ModelSelectorGroup,\n  ModelSelectorLabel,\n  ModelSelectorItemTitle,\n  ModelSelectorItemDescription,\n  ModelSelectorItemIcon,\n  ModelSelectorItemIndicator,\n  ModelSelectorItem,\n  ModelSelectorCheckboxItem,\n  ModelSelectorRadioGroup,\n  ModelSelectorRadioItem,\n  ModelSelectorSeparator,\n  ModelSelectorSub,\n  ModelSelectorSubTrigger,\n  ModelSelectorSubContent,\n};\n","type":"registry:file","target":"~/components/nexus-ui/model-selector.tsx"}],"type":"registry:ui"}