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")} + + + + + +
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 (