import { Component, Show } from "solid-js" import { useDialog } from "@opencode-ai/ui/context/dialog" import { popularProviders, useProviders } from "@/hooks/use-providers" import { Dialog } from "@opencode-ai/ui/dialog" import { List } from "@opencode-ai/ui/list" import { Tag } from "@opencode-ai/ui/tag" import { ProviderIcon } from "@opencode-ai/ui/provider-icon" import { iconNames, type IconName } from "@opencode-ai/ui/icons/provider" import { DialogConnectProvider } from "./dialog-connect-provider" import { useLanguage } from "@/context/language" import { DialogCustomProvider } from "./dialog-custom-provider" const CUSTOM_ID = "_custom" function icon(id: string): IconName { if (iconNames.includes(id as IconName)) return id as IconName return "synthetic" } export const DialogSelectProvider: Component = () => { const dialog = useDialog() const providers = useProviders() const language = useLanguage() const popularGroup = () => language.t("dialog.provider.group.popular") const otherGroup = () => language.t("dialog.provider.group.other") return ( x?.id} items={() => { language.locale() return [{ id: CUSTOM_ID, name: "Custom provider" }, ...providers.all()] }} filterKeys={["id", "name"]} groupBy={(x) => (popularProviders.includes(x.id) ? popularGroup() : otherGroup())} sortBy={(a, b) => { if (a.id === CUSTOM_ID) return -1 if (b.id === CUSTOM_ID) return 1 if (popularProviders.includes(a.id) && popularProviders.includes(b.id)) return popularProviders.indexOf(a.id) - popularProviders.indexOf(b.id) return a.name.localeCompare(b.name) }} sortGroupsBy={(a, b) => { const popular = popularGroup() if (a.category === popular && b.category !== popular) return -1 if (b.category === popular && a.category !== popular) return 1 return 0 }} onSelect={(x) => { if (!x) return if (x.id === CUSTOM_ID) { dialog.show(() => ) return } dialog.show(() => ) }} > {(i) => (
{i.name} {language.t("settings.providers.tag.custom")} {language.t("dialog.provider.tag.recommended")}
{language.t("dialog.provider.anthropic.note")}
{language.t("dialog.provider.openai.note")}
{language.t("dialog.provider.copilot.note")}
)}
) }