mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-16 05:03:26 +00:00
Add theme-configurable HTML export colors (from PR #387)
- Add optional 'export' section to theme JSON with pageBg, cardBg, infoBg - If not specified, colors are auto-derived from userMessageBg - Add export colors to dark.json and light.json - Update theme-schema.json and TypeBox schema - Add documentation to docs/theme.md - Add margin-top back to tool-output for spacing between header and content
This commit is contained in:
parent
d612bc45f5
commit
6267720660
7 changed files with 104 additions and 6 deletions
|
|
@ -82,6 +82,13 @@ const ThemeJsonSchema = Type.Object({
|
|||
// Bash Mode (1 color)
|
||||
bashMode: ColorValueSchema,
|
||||
}),
|
||||
export: Type.Optional(
|
||||
Type.Object({
|
||||
pageBg: Type.Optional(ColorValueSchema),
|
||||
cardBg: Type.Optional(ColorValueSchema),
|
||||
infoBg: Type.Optional(ColorValueSchema),
|
||||
}),
|
||||
),
|
||||
});
|
||||
|
||||
type ThemeJson = Static<typeof ThemeJsonSchema>;
|
||||
|
|
@ -737,6 +744,44 @@ export function isLightTheme(themeName?: string): boolean {
|
|||
return themeName === "light";
|
||||
}
|
||||
|
||||
/**
|
||||
* Get explicit export colors from theme JSON, if specified.
|
||||
* Returns undefined for each color that isn't explicitly set.
|
||||
*/
|
||||
export function getThemeExportColors(themeName?: string): {
|
||||
pageBg?: string;
|
||||
cardBg?: string;
|
||||
infoBg?: string;
|
||||
} {
|
||||
const name = themeName ?? getDefaultTheme();
|
||||
try {
|
||||
const themeJson = loadThemeJson(name);
|
||||
const exportSection = themeJson.export;
|
||||
if (!exportSection) return {};
|
||||
|
||||
const vars = themeJson.vars ?? {};
|
||||
const resolve = (value: string | number | undefined): string | undefined => {
|
||||
if (value === undefined) return undefined;
|
||||
if (typeof value === "number") return ansi256ToHex(value);
|
||||
if (value.startsWith("$")) {
|
||||
const resolved = vars[value];
|
||||
if (resolved === undefined) return undefined;
|
||||
if (typeof resolved === "number") return ansi256ToHex(resolved);
|
||||
return resolved;
|
||||
}
|
||||
return value;
|
||||
};
|
||||
|
||||
return {
|
||||
pageBg: resolve(exportSection.pageBg),
|
||||
cardBg: resolve(exportSection.cardBg),
|
||||
infoBg: resolve(exportSection.infoBg),
|
||||
};
|
||||
} catch {
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// TUI Helpers
|
||||
// ============================================================================
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue