Skip to content

Commit b1d226e

Browse files
Bump major, clean up theme loading, and add CSS variables theme w defaults
1 parent d58b5a6 commit b1d226e

File tree

3 files changed

+74
-15
lines changed

3 files changed

+74
-15
lines changed

packages/mdx/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@mintlify/mdx",
3-
"version": "1.1.0",
3+
"version": "2.0.0",
44
"description": "Markdown parser from Mintlify",
55
"main": "./dist/index.js",
66
"types": "./dist/index.d.ts",

packages/mdx/src/plugins/rehype/rehypeSyntaxHighlighting.ts

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -45,21 +45,24 @@ export const rehypeSyntaxHighlighting: Plugin<[RehypeSyntaxHighlightingOptions?]
4545
options = {}
4646
) => {
4747
return async (tree) => {
48-
const highlighter = await getHighlighter();
49-
if (options.theme && !DEFAULT_THEMES.includes(options.theme)) {
50-
await highlighter.loadTheme(options.theme);
51-
}
48+
const themesToLoad: ShikiTheme[] = [];
5249
if (options.themes) {
53-
const promises: Promise<void>[] = [];
54-
if (!DEFAULT_THEMES.includes(options.themes.dark)) {
55-
promises.push(highlighter.loadTheme(options.themes.dark));
56-
}
57-
if (!DEFAULT_THEMES.includes(options.themes.light)) {
58-
promises.push(highlighter.loadTheme(options.themes.light));
59-
}
60-
await Promise.all(promises);
50+
themesToLoad.push(options.themes.dark);
51+
themesToLoad.push(options.themes.light);
52+
} else if (options.theme) {
53+
themesToLoad.push(options.theme);
6154
}
6255

56+
const highlighter = await getHighlighter();
57+
await Promise.all(
58+
themesToLoad
59+
.filter(
60+
(theme): theme is Exclude<ShikiTheme, 'css-variables'> =>
61+
!DEFAULT_THEMES.includes(theme) && theme !== 'css-variables'
62+
)
63+
.map(async (theme) => await highlighter.loadTheme(theme))
64+
);
65+
6366
visit(tree, 'element', (node, index, parent) => {
6467
const child = node.children[0];
6568
if (

packages/mdx/src/plugins/rehype/shiki-constants.ts

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,68 @@
1-
import type { BundledLanguage } from 'shiki/types';
1+
import { createCssVariablesTheme } from 'shiki/core';
2+
import type { BundledLanguage, ThemeRegistration } from 'shiki/types';
23

34
export type ShikiLang = BundledLanguage | 'text';
45
export type ShikiTheme = (typeof SHIKI_THEMES)[number];
56

7+
export const SHIKI_CSS_THEME = createCssVariablesTheme({
8+
name: 'css-variables',
9+
variablePrefix: '--mint-',
10+
variableDefaults: {
11+
'color-text': '#171717',
12+
'color-background': 'transparent',
13+
'token-constant': '#171717',
14+
'token-string': '#297a3a',
15+
'token-comment': '#666666',
16+
'token-keyword': '#bd2864',
17+
'token-parameter': '#a35200',
18+
'token-function': '#0068d6',
19+
'token-string-expression': '#297a3a',
20+
'token-punctuation': '#171717',
21+
'token-link': '#297a3a',
22+
23+
'ansi-black': '#000000',
24+
'ansi-black-dim': '#00000080',
25+
'ansi-red': '#bb0000',
26+
'ansi-red-dim': '#bb000080',
27+
'ansi-green': '#00bb00',
28+
'ansi-green-dim': '#00bb0080',
29+
'ansi-yellow': '#bbbb00',
30+
'ansi-yellow-dim': '#bbbb0080',
31+
'ansi-blue': '#0000bb',
32+
'ansi-blue-dim': '#0000bb80',
33+
'ansi-magenta': '#ff00ff',
34+
'ansi-magenta-dim': '#ff00ff80',
35+
'ansi-cyan': '#00bbbb',
36+
'ansi-cyan-dim': '#00bbbb80',
37+
'ansi-white': '#eeeeee',
38+
'ansi-white-dim': '#eeeeee80',
39+
'ansi-bright-black': '#555555',
40+
'ansi-bright-black-dim': '#55555580',
41+
'ansi-bright-red': '#ff5555',
42+
'ansi-bright-red-dim': '#ff555580',
43+
'ansi-bright-green': '#00ff00',
44+
'ansi-bright-green-dim': '#00ff0080',
45+
'ansi-bright-yellow': '#ffff55',
46+
'ansi-bright-yellow-dim': '#ffff5580',
47+
'ansi-bright-blue': '#5555ff',
48+
'ansi-bright-blue-dim': '#5555ff80',
49+
'ansi-bright-magenta': '#ff55ff',
50+
'ansi-bright-magenta-dim': '#ff55ff80',
51+
'ansi-bright-cyan': '#55ffff',
52+
'ansi-bright-cyan-dim': '#55ffff80',
53+
'ansi-bright-white': '#ffffff',
54+
'ansi-bright-white-dim': '#ffffff80',
55+
},
56+
fontStyle: true,
57+
});
58+
659
export const DEFAULT_LANG = 'text' as const;
760
export const DEFAULT_DARK_THEME: ShikiTheme = 'dark-plus' as const;
861
export const DEFAULT_LIGHT_THEME: ShikiTheme = 'github-light-default' as const;
9-
export const DEFAULT_THEMES: [ShikiTheme, ShikiTheme] = [
62+
export const DEFAULT_THEMES: [ShikiTheme, ShikiTheme, ThemeRegistration] = [
1063
DEFAULT_LIGHT_THEME,
1164
DEFAULT_DARK_THEME,
65+
SHIKI_CSS_THEME,
1266
] as const;
1367

1468
export const shikiColorReplacements: Partial<Record<ShikiTheme, string | Record<string, string>>> =
@@ -403,4 +457,6 @@ export const SHIKI_THEMES = [
403457
'vitesse-black',
404458
'vitesse-dark',
405459
'vitesse-light',
460+
461+
'css-variables', // for users who want to use custom CSS to style their code blocks
406462
] as const;

0 commit comments

Comments
 (0)