Refine appearance settings and syntax highlighting

Keep parsed chat and tool detail content in sync with appearance token changes. Hide font-family controls on native, use One as the default syntax theme, add Swift highlighting, and give Nord a distinct light palette.
This commit is contained in:
Mohamed Boudra
2026-05-31 21:40:38 +07:00
parent 4cc72a84e8
commit 9f88b4e69c
21 changed files with 310 additions and 53 deletions
@@ -30,6 +30,22 @@ describe("highlightCode", () => {
expect(stringToken?.style).toBe("string");
});
it("highlights Swift code", () => {
const code = 'struct Greeter {\n let message = "hello"\n}';
const result = highlightCode(code, "test.swift");
expect(result).toHaveLength(3);
const structToken = result[0].find((t) => t.text === "struct");
expect(structToken?.style).toBe("keyword");
const typeToken = result[0].find((t) => t.text === "Greeter");
expect(typeToken?.style).toBe("definition");
const stringToken = result[1].find((t) => t.text.includes("hello"));
expect(stringToken?.style).toBe("string");
});
it("highlights TSX code with correct dialect", () => {
const code = 'const el = <div className="test">hello</div>;';
const result = highlightCode(code, "test.tsx");
@@ -13,6 +13,7 @@ describe("isLanguageSupported", () => {
expect(isLanguageSupported("test.css")).toBe(true);
expect(isLanguageSupported("test.html")).toBe(true);
expect(isLanguageSupported("test.java")).toBe(true);
expect(isLanguageSupported("test.swift")).toBe(true);
expect(isLanguageSupported("test.ex")).toBe(true);
});
@@ -49,6 +50,7 @@ describe("getSupportedExtensions", () => {
expect(extensions).toContain("py");
expect(extensions).toContain("go");
expect(extensions).toContain("rs");
expect(extensions).toContain("swift");
expect(extensions).toContain("json");
});
});
@@ -59,10 +59,19 @@ describe("resolveSyntaxColors", () => {
});
it("dark-only themes ignore the color scheme", () => {
for (const id of ["dracula", "nord"] as const) {
for (const id of ["dracula"] as const) {
expect(resolveSyntaxColors(id, "light")).toEqual(resolveSyntaxColors(id, "dark"));
}
});
it("nord uses a dark text palette in light mode", () => {
const light = resolveSyntaxColors("nord", "light");
const dark = resolveSyntaxColors("nord", "dark");
expect(light).not.toEqual(dark);
expect(light.variable).toBe("#2e3440");
expect(light.comment).toBe("#6b7280");
});
});
describe("isSyntaxThemeId", () => {