diff --git a/.changeset/proud-bushes-tie.md b/.changeset/proud-bushes-tie.md new file mode 100644 index 00000000..2440800c --- /dev/null +++ b/.changeset/proud-bushes-tie.md @@ -0,0 +1,5 @@ +--- +"ai-elements": patch +--- + +Fixed invisible white text in Shiki's one-light theme by adding a transformer that replaces `color:white` with a visible dark color diff --git a/packages/elements/src/code-block.tsx b/packages/elements/src/code-block.tsx index 4fe71bf0..cc653d86 100644 --- a/packages/elements/src/code-block.tsx +++ b/packages/elements/src/code-block.tsx @@ -49,6 +49,23 @@ const lineNumberTransformer: ShikiTransformer = { }, }; +const fixWhiteColorInLightThemeTransformer: ShikiTransformer = { + name: "fix-white-color-in-light-theme", + span(node) { + const style = node.properties.style; + if (style && typeof style === "string") { + // Replace white colors with a visible dark color + const fixedStyle = style.replace( + /color:\s*(white)\b/gi, + "color:#383A42" + ); + if (fixedStyle !== style) { + node.properties.style = fixedStyle; + } + } + }, +}; + export async function highlightCode( code: string, language: BundledLanguage, @@ -57,12 +74,11 @@ export async function highlightCode( const transformers: ShikiTransformer[] = showLineNumbers ? [lineNumberTransformer] : []; - return await Promise.all([ codeToHtml(code, { lang: language, theme: "one-light", - transformers, + transformers: [...transformers, fixWhiteColorInLightThemeTransformer], }), codeToHtml(code, { lang: language,