From fdd08abc0b63b6367e8e130e437eb1b355fdac7b Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Mon, 10 Aug 2026 16:41:21 +0000 Subject: [PATCH] fix(tui): support single categorical theme hue --- packages/theme/src/tui/syntax.ts | 2 +- packages/tui/test/theme/v2/syntax.test.ts | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 packages/tui/test/theme/v2/syntax.test.ts diff --git a/packages/theme/src/tui/syntax.ts b/packages/theme/src/tui/syntax.ts index d377e67a0380..91acaa7ba746 100644 --- a/packages/theme/src/tui/syntax.ts +++ b/packages/theme/src/tui/syntax.ts @@ -12,7 +12,7 @@ export function generateSyntax(theme: ResolvedThemeTokens, mode: Mode) { rule(["prompt"], theme.hue.accent[step]), rule(["extmark.file"], feedback.warning.default, { bold: true }), rule(["extmark.agent"], theme.categorical[0][step], { bold: true }), - rule(["extmark.skill"], theme.categorical[1][step], { bold: true }), + rule(["extmark.skill"], (theme.categorical[1] ?? theme.categorical[0])[step], { bold: true }), // V1 migration preserves its selected/inverse foreground in this action state. rule(["extmark.paste"], theme.text.action.primary.focused, { background: feedback.warning.default, diff --git a/packages/tui/test/theme/v2/syntax.test.ts b/packages/tui/test/theme/v2/syntax.test.ts new file mode 100644 index 000000000000..e7eb03ad411d --- /dev/null +++ b/packages/tui/test/theme/v2/syntax.test.ts @@ -0,0 +1,12 @@ +import { expect, test } from "bun:test" +import { generateSyntax, resolveThemeDocument } from "@opencode-ai/theme/tui" +import { SyntaxStyle } from "@opentui/core" +import { parseTheme } from "../../../src/theme" + +test("generates syntax for a single categorical hue", () => { + const theme = resolveThemeDocument(parseTheme({ version: 2, light: { categorical: ["red"] } }), "light") + const syntax = generateSyntax(theme, "light") + + expect(syntax).toBeInstanceOf(SyntaxStyle) + syntax.destroy() +})