11import type { editor } from 'monaco-editor' ;
22
3+ import { CatppuccinFlavor , ColorFormat , flavors } from '@catppuccin/palette' ;
34import dracula from 'monaco-themes/themes/Dracula.json' ;
45import monokai from 'monaco-themes/themes/Monokai.json' ;
56import solarizedDark from 'monaco-themes/themes/Solarized-dark.json' ;
67import solarizedLight from 'monaco-themes/themes/Solarized-light.json' ;
7- import { CatppuccinFlavor , flavors , ColorFormat } from '@catppuccin/palette' ;
88
99type Color = `#${string } `;
10- type Extra = Record < string , Color > ;
10+ type ColorRecord = Record < string , Color > ;
1111
1212export interface Theme {
1313 id : string ;
@@ -50,31 +50,34 @@ const themes: Themes = {
5050 backgroundColor : '#161b22' , // canvas.overlay
5151 } ,
5252
53- editor : makeMonacoTheme ( {
54- base : 'vs-dark' ,
55- colors : {
56- primary : '#c9d1d9' , // fg.default
57- background : '#0d1117' , // canvas.default
58- comment : '#8b949e' ,
59- delimiter : '#d2a8ff' ,
60- annotation : '#a5d6ff' ,
61- constant : '#ff7b72' ,
62- number : '#f2cc60' ,
63- string : '#79c0ff' ,
64- operator : '#ff7b72' ,
65- keyword : '#ff7b72' ,
66- type : '#ffa657' ,
67- variable : '#ffa657' ,
68- logInfo : '#3fb950' , // green.3
69- logError : '#f85149' , // red.4
70- logWarning : '#d29922' , // yellow.3
71- logDate : '#33B3AE' , // teal.3
72- logException : '#f8e3a1' , // yellow.0
73- diffMeta : '#33B3AE' , // teal.3
74- diffAddition : '#3fb950' , // green.3
75- diffDeletion : '#f85149' , // red.4
53+ editor : makeMonacoTheme (
54+ {
55+ base : 'vs-dark' ,
56+ colors : {
57+ primary : '#c9d1d9' , // fg.default
58+ background : '#0d1117' , // canvas.default
59+ comment : '#8b949e' ,
60+ delimiter : '#d2a8ff' ,
61+ annotation : '#a5d6ff' ,
62+ constant : '#ff7b72' ,
63+ number : '#f2cc60' ,
64+ string : '#79c0ff' ,
65+ operator : '#ff7b72' ,
66+ keyword : '#ff7b72' ,
67+ type : '#ffa657' ,
68+ variable : '#ffa657' ,
69+ logInfo : '#3fb950' , // green.3
70+ logError : '#f85149' , // red.4
71+ logWarning : '#d29922' , // yellow.3
72+ logDate : '#33B3AE' , // teal.3
73+ logException : '#f8e3a1' , // yellow.0
74+ diffMeta : '#33B3AE' , // teal.3
75+ diffAddition : '#3fb950' , // green.3
76+ diffDeletion : '#f85149' , // red.4
77+ } ,
7678 } ,
77- } , { } ) ,
79+ { }
80+ ) ,
7881 } ,
7982 'light' : {
8083 id : 'light' ,
@@ -89,31 +92,34 @@ const themes: Themes = {
8992 backgroundColor : '#e0f6ff' ,
9093 } ,
9194
92- editor : makeMonacoTheme ( {
93- base : 'vs' ,
94- colors : {
95- primary : '#000000' ,
96- background : '#ffffff' ,
97- comment : '#708090' ,
98- delimiter : '#999999' ,
99- annotation : '#999999' ,
100- constant : '#990055' ,
101- number : '#990055' ,
102- string : '#669900' ,
103- operator : '#9a6e3a' ,
104- keyword : '#0077aa' ,
105- type : '#DD4A68' ,
106- variable : '#ee9900' ,
107- logInfo : '#2da44e' , // green.4
108- logError : '#cf222e' , // red.5
109- logWarning : '#d4a72c' , // yellow.3
110- logDate : '#136061' , // teal.6
111- logException : '#7d4e00' , // yellow.6
112- diffMeta : '#136061' , // teal.6
113- diffAddition : '#2da44e' , // green.4
114- diffDeletion : '#cf222e' , // red.5
95+ editor : makeMonacoTheme (
96+ {
97+ base : 'vs' ,
98+ colors : {
99+ primary : '#000000' ,
100+ background : '#ffffff' ,
101+ comment : '#708090' ,
102+ delimiter : '#999999' ,
103+ annotation : '#999999' ,
104+ constant : '#990055' ,
105+ number : '#990055' ,
106+ string : '#669900' ,
107+ operator : '#9a6e3a' ,
108+ keyword : '#0077aa' ,
109+ type : '#DD4A68' ,
110+ variable : '#ee9900' ,
111+ logInfo : '#2da44e' , // green.4
112+ logError : '#cf222e' , // red.5
113+ logWarning : '#d4a72c' , // yellow.3
114+ logDate : '#136061' , // teal.6
115+ logException : '#7d4e00' , // yellow.6
116+ diffMeta : '#136061' , // teal.6
117+ diffAddition : '#2da44e' , // green.4
118+ diffDeletion : '#cf222e' , // red.5
119+ } ,
115120 } ,
116- } , { } ) ,
121+ { }
122+ ) ,
117123 } ,
118124 'dracula' : {
119125 id : 'dracula' ,
@@ -242,7 +248,7 @@ interface MonacoThemeProps {
242248
243249export function makeMonacoTheme (
244250 props : MonacoThemeProps ,
245- extra : Extra
251+ extraColors : ColorRecord
246252) : editor . IStandaloneThemeData {
247253 const colors = Object . fromEntries (
248254 Object . entries ( props . colors ) . map ( ( [ key , color ] ) => [
@@ -251,13 +257,11 @@ export function makeMonacoTheme(
251257 ] )
252258 ) as Record < keyof MonacoThemeProps [ 'colors' ] , string > ;
253259
254- let editorColors : Extra = {
260+ const editorColors : ColorRecord = {
255261 'editor.background' : `#${ colors . background } ` ,
256262 'editor.foreground' : `#${ colors . primary } ` ,
257263 } ;
258264
259- editorColors = { ...editorColors , ...extra } ;
260-
261265 return {
262266 base : props . base ,
263267 inherit : true ,
@@ -292,7 +296,7 @@ export function makeMonacoTheme(
292296 { token : 'addition.diff' , foreground : colors . diffAddition } ,
293297 { token : 'deletion.diff' , foreground : colors . diffDeletion } ,
294298 ] ,
295- colors : editorColors
299+ colors : { ... editorColors , ... extraColors } ,
296300 } ;
297301}
298302
@@ -327,40 +331,43 @@ export function createCatppuccinTheme(flavor: CatppuccinFlavor): Theme {
327331 [ flavors . mocha . name ] : 'mocha' ,
328332 } ;
329333
330- const editorTheme = makeMonacoTheme ( {
331- base : flavor . dark ? 'vs-dark' : 'vs' ,
332- colors : {
333- // Monaco
334- primary : color ( flavor . colors . text ) ,
335- background : color ( flavor . colors . mantle ) ,
336- string : color ( flavor . colors . green ) ,
337- comment : color ( flavor . colors . overlay2 ) ,
338- delimiter : color ( flavor . colors . overlay2 ) ,
339- annotation : color ( flavor . colors . yellow ) ,
340- constant : color ( flavor . colors . peach ) ,
341- number : color ( flavor . colors . peach ) ,
342- operator : color ( flavor . colors . sky ) ,
343- keyword : color ( flavor . colors . mauve ) ,
344- type : color ( flavor . colors . yellow ) ,
345- variable : color ( flavor . colors . text ) ,
334+ const editorTheme = makeMonacoTheme (
335+ {
336+ base : flavor . dark ? 'vs-dark' : 'vs' ,
337+ colors : {
338+ // Monaco
339+ primary : color ( flavor . colors . text ) ,
340+ background : color ( flavor . colors . mantle ) ,
341+ string : color ( flavor . colors . green ) ,
342+ comment : color ( flavor . colors . overlay2 ) ,
343+ delimiter : color ( flavor . colors . overlay2 ) ,
344+ annotation : color ( flavor . colors . yellow ) ,
345+ constant : color ( flavor . colors . peach ) ,
346+ number : color ( flavor . colors . peach ) ,
347+ operator : color ( flavor . colors . sky ) ,
348+ keyword : color ( flavor . colors . mauve ) ,
349+ type : color ( flavor . colors . yellow ) ,
350+ variable : color ( flavor . colors . text ) ,
346351
347- // Log Files
348- logDate : color ( flavor . colors . mauve ) ,
349- logInfo : color ( flavor . colors . green ) ,
350- logWarning : color ( flavor . colors . yellow ) ,
351- logError : color ( flavor . colors . red ) ,
352- logException : color ( flavor . colors . yellow ) ,
352+ // Log Files
353+ logDate : color ( flavor . colors . mauve ) ,
354+ logInfo : color ( flavor . colors . green ) ,
355+ logWarning : color ( flavor . colors . yellow ) ,
356+ logError : color ( flavor . colors . red ) ,
357+ logException : color ( flavor . colors . yellow ) ,
353358
354- // Diff Files
355- diffMeta : color ( flavor . colors . sky ) ,
356- diffAddition : color ( flavor . colors . green ) ,
357- diffDeletion : color ( flavor . colors . red ) ,
359+ // Diff Files
360+ diffMeta : color ( flavor . colors . sky ) ,
361+ diffAddition : color ( flavor . colors . green ) ,
362+ diffDeletion : color ( flavor . colors . red ) ,
363+ } ,
364+ } ,
365+ {
366+ 'editorBracketHighlight.foreground1' : color ( flavor . colors . overlay2 ) ,
367+ 'editorBracketHighlight.foreground2' : color ( flavor . colors . overlay2 ) ,
368+ 'editorBracketHighlight.foreground3' : color ( flavor . colors . overlay2 ) ,
358369 }
359- } , {
360- "editorBracketHighlight.foreground1" : color ( flavor . colors . overlay2 ) ,
361- "editorBracketHighlight.foreground2" : color ( flavor . colors . overlay2 ) ,
362- "editorBracketHighlight.foreground3" : color ( flavor . colors . overlay2 )
363- } ) ;
370+ ) ;
364371
365372 return {
366373 id : nameToId [ flavor . name ] ,
@@ -371,8 +378,8 @@ export function createCatppuccinTheme(flavor: CatppuccinFlavor): Theme {
371378 background : color ( flavor . colors . mantle ) ,
372379 highlightedLine : {
373380 color : color ( flavor . colors . rosewater ) ,
374- backgroundColor : color ( flavor . colors . surface2 )
381+ backgroundColor : color ( flavor . colors . surface2 ) ,
375382 } ,
376- editor : editorTheme
383+ editor : editorTheme ,
377384 } ;
378- }
385+ }
0 commit comments