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() {
}
>
-
-
-
+
-
-
-
- {language.t("session.header.openIn")}
- {
- if (!OPEN_APPS.includes(value as OpenApp)) return
- setPrefs("app", value as OpenApp)
- }}
- >
- {options().map((o) => (
- openDir(o.id)}>
-
- {o.label}
-
-
-
-
- ))}
-
-
-
-
-
-
- {language.t("session.header.open.copyPath")}
-
-
-
-
-
+ 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 })}
+ >
+
+
+ {language.t("session.header.open.action", { app: current().label })}
+
+
+
+
+
+
+
+
+ {language.t("session.header.openIn")}
+ {
+ if (!OPEN_APPS.includes(value as OpenApp)) return
+ setPrefs("app", value as OpenApp)
+ }}
+ >
+ {options().map((o) => (
+ openDir(o.id)}>
+
+ {o.label}
+
+
+
+
+ ))}
+
+
+
+
+
+
+ {language.t("session.header.open.copyPath")}
+
+
+
+
+
+
diff --git a/packages/ui/src/assets/icons/app/cursor.svg b/packages/ui/src/assets/icons/app/cursor.svg
index c2c8c1819..5aa26e8e7 100644
--- a/packages/ui/src/assets/icons/app/cursor.svg
+++ b/packages/ui/src/assets/icons/app/cursor.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
diff --git a/packages/ui/src/assets/icons/app/finder.png b/packages/ui/src/assets/icons/app/finder.png
index 4edf53bca..2cff579e6 100644
Binary files a/packages/ui/src/assets/icons/app/finder.png and b/packages/ui/src/assets/icons/app/finder.png differ
diff --git a/packages/ui/src/assets/icons/app/zed-dark.svg b/packages/ui/src/assets/icons/app/zed-dark.svg
new file mode 100644
index 000000000..67a99ae4a
--- /dev/null
+++ b/packages/ui/src/assets/icons/app/zed-dark.svg
@@ -0,0 +1,15 @@
+
diff --git a/packages/ui/src/assets/icons/app/zed.svg b/packages/ui/src/assets/icons/app/zed.svg
index 7c9a0e591..a845bf181 100644
--- a/packages/ui/src/assets/icons/app/zed.svg
+++ b/packages/ui/src/assets/icons/app/zed.svg
@@ -1 +1,15 @@
-
\ No newline at end of file
+
diff --git a/packages/ui/src/components/app-icon.css b/packages/ui/src/components/app-icon.css
index edcdbcceb..16cb0dcc1 100644
--- a/packages/ui/src/components/app-icon.css
+++ b/packages/ui/src/components/app-icon.css
@@ -1,9 +1,5 @@
img[data-component="app-icon"] {
display: block;
box-sizing: border-box;
- padding: 2px;
- border-radius: 0.125rem;
- background: var(--smoke-light-2);
- border: 1px solid var(--smoke-light-alpha-4);
object-fit: contain;
}
diff --git a/packages/ui/src/components/app-icon.tsx b/packages/ui/src/components/app-icon.tsx
index e3f2a0fb2..e91638b98 100644
--- a/packages/ui/src/components/app-icon.tsx
+++ b/packages/ui/src/components/app-icon.tsx
@@ -1,5 +1,5 @@
import type { Component, ComponentProps } from "solid-js"
-import { splitProps } from "solid-js"
+import { createSignal, onCleanup, onMount, splitProps } from "solid-js"
import type { IconName } from "./app-icons/types"
import androidStudio from "../assets/icons/app/android-studio.svg"
@@ -15,6 +15,7 @@ import textmate from "../assets/icons/app/textmate.png"
import vscode from "../assets/icons/app/vscode.svg"
import xcode from "../assets/icons/app/xcode.png"
import zed from "../assets/icons/app/zed.svg"
+import zedDark from "../assets/icons/app/zed-dark.svg"
import sublimetext from "../assets/icons/app/sublimetext.svg"
const icons = {
@@ -34,17 +35,43 @@ const icons = {
"sublime-text": sublimetext,
} satisfies Record
+const themed: Partial> = {
+ zed: {
+ light: zed,
+ dark: zedDark,
+ },
+}
+
+const scheme = () => {
+ if (typeof document !== "object") return "light" as const
+ if (document.documentElement.dataset.colorScheme === "dark") return "dark" as const
+ return "light" as const
+}
+
export type AppIconProps = Omit, "src"> & {
id: IconName
}
export const AppIcon: Component = (props) => {
const [local, rest] = splitProps(props, ["id", "class", "classList", "alt", "draggable"])
+ const [mode, setMode] = createSignal(scheme())
+
+ onMount(() => {
+ const sync = () => setMode(scheme())
+ const observer = new MutationObserver(sync)
+ observer.observe(document.documentElement, {
+ attributes: true,
+ attributeFilter: ["data-color-scheme"],
+ })
+ sync()
+ onCleanup(() => observer.disconnect())
+ })
+
return (
