@uiw/codemirror-theme-duotone
Version:
Theme duotone for CodeMirror.
80 lines (71 loc) • 2.75 kB
text/typescript
/**
* @name duotone
* @author Bram de Haan
* by Bram de Haan, adapted from DuoTone themes by Simurai (http://simurai.com/projects/2016/01/01/duotone-themes)
*/
import { tags as t } from '@lezer/highlight';
import { createTheme, type CreateThemeOptions } from '@uiw/codemirror-themes';
export const defaultSettingsDuotoneLight: CreateThemeOptions['settings'] = {
background: '#faf8f5',
foreground: '#b29762',
caret: '#93abdc',
selection: '#e3dcce',
selectionMatch: '#e3dcce',
gutterBackground: '#faf8f5',
gutterForeground: '#cdc4b1',
gutterBorder: 'transparent',
lineHighlight: '#ddceb154',
};
export const douToneLightStyle: CreateThemeOptions['styles'] = [
{ tag: [t.comment, t.bracket], color: '#b6ad9a' },
{ tag: [t.atom, t.number, t.keyword, t.link, t.attributeName, t.quote], color: '#063289' },
{ tag: [t.emphasis, t.heading, t.tagName, t.propertyName, t.variableName], color: '#2d2006' },
{ tag: [t.typeName, t.url, t.string], color: '#896724' },
{ tag: [t.operator, t.string], color: '#1659df' },
{ tag: [t.propertyName], color: '#b29762' },
{ tag: [t.unit, t.punctuation], color: '#063289' },
];
export const duotoneLightInit = (options?: Partial<CreateThemeOptions>) => {
const { theme = 'light', settings = {}, styles = [] } = options || {};
return createTheme({
theme: theme,
settings: {
...defaultSettingsDuotoneLight,
...settings,
},
styles: [...douToneLightStyle, ...styles],
});
};
export const duotoneLight = duotoneLightInit();
export const defaultSettingsDuotoneDark: CreateThemeOptions['settings'] = {
background: '#2a2734',
foreground: '#6c6783',
caret: '#ffad5c',
selection: '#91ff6c26',
selectionMatch: '#91ff6c26',
gutterBackground: '#2a2734',
gutterForeground: '#545167',
lineHighlight: '#36334280',
};
export const duotoneDarkStyle: CreateThemeOptions['styles'] = [
{ tag: [t.comment, t.bracket], color: '#6c6783' },
{ tag: [t.atom, t.number, t.keyword, t.link, t.attributeName, t.quote], color: '#ffcc99' },
{ tag: [t.emphasis, t.heading, t.tagName, t.propertyName, t.className, t.variableName], color: '#eeebff' },
{ tag: [t.typeName, t.url], color: '#7a63ee' },
{ tag: t.operator, color: '#ffad5c' },
{ tag: t.string, color: '#ffb870' },
{ tag: [t.propertyName], color: '#9a86fd' },
{ tag: [t.unit, t.punctuation], color: '#e09142' },
];
export const duotoneDarkInit = (options?: Partial<CreateThemeOptions>) => {
const { theme = 'dark', settings = {}, styles = [] } = options || {};
return createTheme({
theme: theme,
settings: {
...defaultSettingsDuotoneDark,
...settings,
},
styles: [...duotoneDarkStyle, ...styles],
});
};
export const duotoneDark = duotoneDarkInit();