summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-02-09 07:19:17 -0600
committerAdam <[email protected]>2026-02-09 07:38:05 -0600
commit03f3029dc697f520a0e154c31f8188743113deb4 (patch)
tree3334ee9c77d58ad73a9f3177c4e04234094f3361 /packages/app/src
parentaed7bb8c09f1251926a1cd82ef3764d53d2e0a7c (diff)
downloadopencode-03f3029dc697f520a0e154c31f8188743113deb4.tar.gz
opencode-03f3029dc697f520a0e154c31f8188743113deb4.zip
feat(app): polish Open in icon treatment
Bring in the Open in button-group and transparent icon updates from #12641 while keeping locale strings unchanged. Replace CSS inversion with dedicated light/dark Zed icon assets for cleaner theme handling. Co-authored-by: Edin <[email protected]>
Diffstat (limited to 'packages/app/src')
-rw-r--r--packages/app/src/components/session/session-header.tsx103
1 files changed, 53 insertions, 50 deletions
diff --git a/packages/app/src/components/session/session-header.tsx b/packages/app/src/components/session/session-header.tsx
index fcba47004..c7e2993ff 100644
--- a/packages/app/src/components/session/session-header.tsx
+++ b/packages/app/src/components/session/session-header.tsx
@@ -322,57 +322,60 @@ export function SessionHeader() {
}
>
<div class="flex items-center">
- <Button
- variant="ghost"
- class="rounded-sm h-[24px] py-1.5 pr-3 pl-2 gap-2 border-none shadow-none rounded-r-none"
- onClick={() => openDir(current().id)}
- aria-label={language.t("session.header.open.ariaLabel", { app: current().label })}
- >
- <AppIcon id={current().icon} class="size-5" />
- <span class="text-12-regular text-text-strong">
- {language.t("session.header.open.action", { app: current().label })}
- </span>
- </Button>
- <DropdownMenu>
- <DropdownMenu.Trigger
- as={IconButton}
- icon="chevron-down"
+ <div class="flex items-center rounded-full border border-border-base bg-surface-panel">
+ <Button
variant="ghost"
- class="rounded-sm h-[24px] w-auto px-1.5 border-none shadow-none rounded-l-none data-[expanded]:bg-surface-raised-base-active"
- aria-label={language.t("session.header.open.menu")}
- />
- <DropdownMenu.Portal>
- <DropdownMenu.Content placement="bottom-end" gutter={6}>
- <DropdownMenu.Group>
- <DropdownMenu.GroupLabel>{language.t("session.header.openIn")}</DropdownMenu.GroupLabel>
- <DropdownMenu.RadioGroup
- value={prefs.app}
- onChange={(value) => {
- if (!OPEN_APPS.includes(value as OpenApp)) return
- setPrefs("app", value as OpenApp)
- }}
- >
- {options().map((o) => (
- <DropdownMenu.RadioItem value={o.id} onSelect={() => openDir(o.id)}>
- <AppIcon id={o.icon} class="size-5" />
- <DropdownMenu.ItemLabel>{o.label}</DropdownMenu.ItemLabel>
- <DropdownMenu.ItemIndicator>
- <Icon name="check-small" size="small" class="text-icon-weak" />
- </DropdownMenu.ItemIndicator>
- </DropdownMenu.RadioItem>
- ))}
- </DropdownMenu.RadioGroup>
- </DropdownMenu.Group>
- <DropdownMenu.Separator />
- <DropdownMenu.Item onSelect={copyPath}>
- <Icon name="copy" size="small" class="text-icon-weak" />
- <DropdownMenu.ItemLabel>
- {language.t("session.header.open.copyPath")}
- </DropdownMenu.ItemLabel>
- </DropdownMenu.Item>
- </DropdownMenu.Content>
- </DropdownMenu.Portal>
- </DropdownMenu>
+ class="rounded-full h-[28px] py-1.5 pr-4 pl-3 gap-2 border-none shadow-none"
+ onClick={() => openDir(current().id)}
+ aria-label={language.t("session.header.open.ariaLabel", { app: current().label })}
+ >
+ <AppIcon id={current().icon} class="size-5" />
+ <span class="text-12-regular text-text-strong">
+ {language.t("session.header.open.action", { app: current().label })}
+ </span>
+ </Button>
+ <div class="h-6 w-px bg-border-base" />
+ <DropdownMenu>
+ <DropdownMenu.Trigger
+ as={IconButton}
+ icon="chevron-down"
+ variant="ghost"
+ class="rounded-full h-[28px] w-auto px-2 border-none shadow-none data-[expanded]:bg-surface-raised-base-active"
+ aria-label={language.t("session.header.open.menu")}
+ />
+ <DropdownMenu.Portal>
+ <DropdownMenu.Content placement="bottom-end" gutter={6}>
+ <DropdownMenu.Group>
+ <DropdownMenu.GroupLabel>{language.t("session.header.openIn")}</DropdownMenu.GroupLabel>
+ <DropdownMenu.RadioGroup
+ value={prefs.app}
+ onChange={(value) => {
+ if (!OPEN_APPS.includes(value as OpenApp)) return
+ setPrefs("app", value as OpenApp)
+ }}
+ >
+ {options().map((o) => (
+ <DropdownMenu.RadioItem value={o.id} onSelect={() => openDir(o.id)}>
+ <AppIcon id={o.icon} class="size-5" />
+ <DropdownMenu.ItemLabel>{o.label}</DropdownMenu.ItemLabel>
+ <DropdownMenu.ItemIndicator>
+ <Icon name="check-small" size="small" class="text-icon-weak" />
+ </DropdownMenu.ItemIndicator>
+ </DropdownMenu.RadioItem>
+ ))}
+ </DropdownMenu.RadioGroup>
+ </DropdownMenu.Group>
+ <DropdownMenu.Separator />
+ <DropdownMenu.Item onSelect={copyPath}>
+ <Icon name="copy" size="small" class="text-icon-weak" />
+ <DropdownMenu.ItemLabel>
+ {language.t("session.header.open.copyPath")}
+ </DropdownMenu.ItemLabel>
+ </DropdownMenu.Item>
+ </DropdownMenu.Content>
+ </DropdownMenu.Portal>
+ </DropdownMenu>
+ </div>
</div>
</Show>
</div>