import type { GetThemesResponse } from "@yaakapp-internal/plugins"; import { invokeCmd } from "../tauri"; import type { Appearance } from "./appearance"; import { resolveAppearance } from "./appearance"; export async function getThemes() { const themes = (await invokeCmd("cmd_get_themes")).flatMap((t) => t.themes); themes.sort((a, b) => a.label.localeCompare(b.label)); // Remove duplicates, in case multiple plugins provide the same theme const uniqueThemes = Array.from(new Map(themes.map((t) => [t.id, t])).values()); return { themes: [yaakDark, yaakLight, ...uniqueThemes] }; } export async function getResolvedTheme( preferredAppearance: Appearance, appearanceSetting: string, themeLight: string, themeDark: string, ) { const appearance = resolveAppearance(preferredAppearance, appearanceSetting); const { themes } = await getThemes(); const darkThemes = themes.filter((t) => t.dark); const lightThemes = themes.filter((t) => !t.dark); const dark = darkThemes.find((t) => t.id === themeDark) ?? darkThemes[0] ?? yaakDark; const light = lightThemes.find((t) => t.id === themeLight) ?? lightThemes[0] ?? yaakLight; const active = appearance === "dark" ? dark : light; return { dark, light, active }; } const yaakDark = { id: "yaak-dark", label: "Yaak", dark: true, base: { surface: "hsl(244,23%,14%)", surfaceHighlight: "hsl(244,23%,20%)", text: "hsl(245,23%,85%)", textSubtle: "hsl(245,18%,58%)", textSubtlest: "hsl(245,18%,45%)", border: "hsl(244,23%,25%)", primary: "hsl(266,100%,79%)", secondary: "hsl(245,23%,60%)", info: "hsl(206,100%,63%)", success: "hsl(150,99%,44%)", notice: "hsl(48,80%,63%)", warning: "hsl(28,100%,61%)", danger: "hsl(342,90%,68%)", }, components: { button: { primary: "hsl(266,100%,71.1%)", secondary: "hsl(244,23%,54%)", info: "hsl(206,100%,56.7%)", success: "hsl(150,99%,37.4%)", notice: "hsl(48,80%,50.4%)", warning: "hsl(28,100%,54.9%)", danger: "hsl(342,90%,61.2%)", }, dialog: { border: "hsl(244,23%,24%)", }, sidebar: { surface: "hsl(243,23%,16%)", border: "hsl(244,23%,22%)", }, responsePane: { surface: "hsl(243,23%,16%)", border: "hsl(246,23%,23%)", }, appHeader: { surface: "hsl(244,23%,12%)", border: "hsl(244,23%,21%)", }, }, }; const yaakLight = { id: "yaak-light", label: "Yaak", dark: false, base: { surface: "hsl(0,0%,100%)", surfaceHighlight: "hsl(218,24%,87%)", text: "hsl(217,24%,10%)", textSubtle: "hsl(217,24%,40%)", textSubtlest: "hsl(217,24%,58%)", border: "hsl(217,22%,90%)", primary: "hsl(266,100%,60%)", secondary: "hsl(220,24%,50%)", info: "hsl(206,100%,40%)", success: "hsl(139,66%,34%)", notice: "hsl(45,100%,34%)", warning: "hsl(30,100%,36%)", danger: "hsl(335,75%,48%)", }, components: { sidebar: { surface: "hsl(220,20%,98%)", border: "hsl(217,22%,88%)", surfaceHighlight: "hsl(217,25%,90%)", }, }, }; export const defaultDarkTheme = yaakDark; export const defaultLightTheme = yaakLight;