summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src
diff options
context:
space:
mode:
authorDaniel Polito <[email protected]>2026-01-13 12:41:35 -0300
committerGitHub <[email protected]>2026-01-13 09:41:35 -0600
commit528291532b1d4192302538f9c27054ff717c6982 (patch)
tree63f074530188c78c5a3a56d0e38d53a626a4cb24 /packages/app/src
parent2b77a84c4f3c6e651e0cf224b0c814260ddd8a45 (diff)
downloadopencode-528291532b1d4192302538f9c27054ff717c6982.tar.gz
opencode-528291532b1d4192302538f9c27054ff717c6982.zip
feat(desktop): Adding Provider Icons (#8215)
Diffstat (limited to 'packages/app/src')
-rw-r--r--packages/app/src/components/dialog-select-model.tsx11
-rw-r--r--packages/app/src/components/prompt-input.tsx18
2 files changed, 26 insertions, 3 deletions
diff --git a/packages/app/src/components/dialog-select-model.tsx b/packages/app/src/components/dialog-select-model.tsx
index d54f9369a..c614c2d49 100644
--- a/packages/app/src/components/dialog-select-model.tsx
+++ b/packages/app/src/components/dialog-select-model.tsx
@@ -7,6 +7,8 @@ import { Button } from "@opencode-ai/ui/button"
import { Tag } from "@opencode-ai/ui/tag"
import { Dialog } from "@opencode-ai/ui/dialog"
import { List } from "@opencode-ai/ui/list"
+import { ProviderIcon } from "@opencode-ai/ui/provider-icon"
+import type { IconName } from "@opencode-ai/ui/icons/provider"
import { DialogSelectProvider } from "./dialog-select-provider"
import { DialogManageModels } from "./dialog-manage-models"
@@ -35,6 +37,12 @@ const ModelList: Component<{
filterKeys={["provider.name", "name", "id"]}
sortBy={(a, b) => a.name.localeCompare(b.name)}
groupBy={(x) => x.provider.name}
+ groupHeader={(group) => (
+ <div class="flex items-center gap-x-3">
+ <ProviderIcon data-slot="list-item-extra-icon" id={group.items[0].provider.id as IconName} />
+ <span>{group.category}</span>
+ </div>
+ )}
sortGroupsBy={(a, b) => {
if (a.category === "Recent" && b.category !== "Recent") return -1
if (b.category === "Recent" && a.category !== "Recent") return 1
@@ -52,7 +60,8 @@ const ModelList: Component<{
}}
>
{(i) => (
- <div class="w-full flex items-center gap-x-2 text-13-regular">
+ <div class="w-full flex items-center gap-x-3 pl-1 text-13-regular">
+ <ProviderIcon data-slot="list-item-extra-icon" id={i.provider.id as IconName} />
<span class="truncate">{i.name}</span>
<Show when={i.provider.id === "opencode" && (!i.cost || i.cost?.input === 0)}>
<Tag>Free</Tag>
diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx
index 13f2b00a3..2be8a21c1 100644
--- a/packages/app/src/components/prompt-input.tsx
+++ b/packages/app/src/components/prompt-input.tsx
@@ -33,6 +33,8 @@ import { useSync } from "@/context/sync"
import { FileIcon } from "@opencode-ai/ui/file-icon"
import { Button } from "@opencode-ai/ui/button"
import { Icon } from "@opencode-ai/ui/icon"
+import { ProviderIcon } from "@opencode-ai/ui/provider-icon"
+import type { IconName } from "@opencode-ai/ui/icons/provider"
import { Tooltip, TooltipKeybind } from "@opencode-ai/ui/tooltip"
import { IconButton } from "@opencode-ai/ui/icon-button"
import { Select } from "@opencode-ai/ui/select"
@@ -1560,6 +1562,12 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
fallback={
<TooltipKeybind placement="top" title="Choose model" keybind={command.keybind("model.choose")}>
<Button as="div" variant="ghost" onClick={() => dialog.show(() => <DialogSelectModelUnpaid />)}>
+ <Show when={local.model.current()?.provider?.id}>
+ <ProviderIcon
+ id={local.model.current()!.provider.id as IconName}
+ class="size-4 shrink-0"
+ />
+ </Show>
{local.model.current()?.name ?? "Select model"}
<Icon name="chevron-down" size="small" />
</Button>
@@ -1569,6 +1577,12 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
<ModelSelectorPopover>
<TooltipKeybind placement="top" title="Choose model" keybind={command.keybind("model.choose")}>
<Button as="div" variant="ghost">
+ <Show when={local.model.current()?.provider?.id}>
+ <ProviderIcon
+ id={local.model.current()!.provider.id as IconName}
+ class="size-4 shrink-0"
+ />
+ </Show>
{local.model.current()?.name ?? "Select model"}
<Icon name="chevron-down" size="small" />
</Button>
@@ -1583,10 +1597,10 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
>
<Button
variant="ghost"
- class="text-text-base _hidden group-hover/prompt-input:inline-block"
+ class="text-text-base _hidden group-hover/prompt-input:inline-block capitalize text-12-regular"
onClick={() => local.model.variant.cycle()}
>
- <span class="capitalize text-12-regular">{local.model.variant.current() ?? "Default"}</span>
+ {local.model.variant.current() ?? "Default"}
</Button>
</TooltipKeybind>
</Show>