{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "model-selector",
  "type": "registry:component",
  "title": "Model Selector",
  "description": "Model picker with reasoning effort levels, search, and runtime integration.",
  "dependencies": [
    "@assistant-ui/react"
  ],
  "registryDependencies": [
    "https://r.assistant-ui.com/elements-model-selector.json"
  ],
  "files": [
    {
      "type": "registry:component",
      "path": "components/assistant-ui/elements/model-selector.aui.tsx",
      "sourcePath": "packages/ui/src/components/react/assistant-ui/elements/model-selector.aui.tsx",
      "content": "\"use client\";\n\nimport { memo, useEffect } from \"react\";\nimport { useAui } from \"@assistant-ui/react\";\nimport {\n  ModelSelectorRoot,\n  ModelSelectorTrigger,\n  ModelSelectorValue,\n  ModelSelectorContent,\n  ModelSelectorSearch,\n  ModelSelectorFocusAnchor,\n  ModelSelectorList,\n  ModelSelectorEmpty,\n  ModelSelectorGroup,\n  ModelSelectorSeparator,\n  ModelSelectorItem,\n  ModelSelectorEffort,\n  useModelSelectorContext,\n  type ModelSelectorProps,\n} from \"./model-selector\";\n\nexport {\n  DEFAULT_EFFORT_OPTIONS,\n  modelSelectorTriggerVariants,\n  resolveModelEffort,\n  useModelSelectorEfforts,\n  ModelSelectorRoot,\n  ModelSelectorTrigger,\n  ModelSelectorValue,\n  ModelSelectorContent,\n  ModelSelectorSearch,\n  ModelSelectorFocusAnchor,\n  ModelSelectorList,\n  ModelSelectorEmpty,\n  ModelSelectorGroup,\n  ModelSelectorSeparator,\n  ModelSelectorItem,\n  ModelSelectorEffort,\n} from \"./model-selector\";\n\nexport type {\n  ModelOption,\n  ModelSelectorEffortOption,\n  ModelSelectorProps,\n  ModelSelectorRootProps,\n  ModelSelectorTriggerProps,\n  ModelSelectorValueProps,\n  ModelSelectorContentProps,\n  ModelSelectorSearchProps,\n  ModelSelectorListProps,\n  ModelSelectorEmptyProps,\n  ModelSelectorGroupProps,\n  ModelSelectorSeparatorProps,\n  ModelSelectorItemProps,\n  ModelSelectorEffortProps,\n} from \"./model-selector\";\n\n/** Registers the selection with assistant-ui's ModelContext system. The\n * context's effort is already resolved against the selected model. */\nfunction ModelSelectorModelContext() {\n  const { value, effort } = useModelSelectorContext();\n  const api = useAui();\n\n  useEffect(() => {\n    if (value === undefined) return;\n    const config = {\n      config: {\n        modelName: value,\n        ...(effort !== undefined ? { reasoningEffort: effort } : undefined),\n      },\n    };\n    return api.modelContext.register({\n      getModelContext: () => config,\n    });\n  }, [api, value, effort]);\n\n  return null;\n}\n\nconst ModelSelectorImpl = ({\n  searchable,\n  variant,\n  size,\n  align,\n  className,\n  contentClassName,\n  ...rootProps\n}: ModelSelectorProps) => {\n  return (\n    <ModelSelectorRoot {...rootProps}>\n      <ModelSelectorModelContext />\n      <ModelSelectorTrigger\n        variant={variant}\n        size={size}\n        className={className}\n      />\n      <ModelSelectorContent\n        {...(align !== undefined ? { align } : {})}\n        className={contentClassName}\n        searchable={searchable ?? false}\n      />\n    </ModelSelectorRoot>\n  );\n};\n\ntype ModelSelectorComponent = typeof ModelSelectorImpl & {\n  displayName?: string;\n  Root: typeof ModelSelectorRoot;\n  Trigger: typeof ModelSelectorTrigger;\n  Value: typeof ModelSelectorValue;\n  Content: typeof ModelSelectorContent;\n  Search: typeof ModelSelectorSearch;\n  FocusAnchor: typeof ModelSelectorFocusAnchor;\n  List: typeof ModelSelectorList;\n  Empty: typeof ModelSelectorEmpty;\n  Group: typeof ModelSelectorGroup;\n  Separator: typeof ModelSelectorSeparator;\n  Item: typeof ModelSelectorItem;\n  Effort: typeof ModelSelectorEffort;\n};\n\nconst ModelSelector = memo(\n  ModelSelectorImpl,\n) as unknown as ModelSelectorComponent;\n\nModelSelector.displayName = \"ModelSelector\";\nModelSelector.Root = ModelSelectorRoot;\nModelSelector.Trigger = ModelSelectorTrigger;\nModelSelector.Value = ModelSelectorValue;\nModelSelector.Content = ModelSelectorContent;\nModelSelector.Search = ModelSelectorSearch;\nModelSelector.FocusAnchor = ModelSelectorFocusAnchor;\nModelSelector.List = ModelSelectorList;\nModelSelector.Empty = ModelSelectorEmpty;\nModelSelector.Group = ModelSelectorGroup;\nModelSelector.Separator = ModelSelectorSeparator;\nModelSelector.Item = ModelSelectorItem;\nModelSelector.Effort = ModelSelectorEffort;\n\nexport { ModelSelector };\n"
    }
  ]
}