135 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			135 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								import { EditorView } from '@codemirror/view';
							 | 
						||
| 
								 | 
							
								import { HighlightStyle, syntaxHighlighting } from '@codemirror/language';
							 | 
						||
| 
								 | 
							
								import { tags } from '@lezer/highlight';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Using https://github.com/one-dark/vscode-one-dark-theme/ as reference for the colors
							 | 
						||
| 
								 | 
							
								const chalky = "#e5c07b", coral = "#e06c75", cyan = "#56b6c2", invalid = "#ffffff", ivory = "#abb2bf", stone = "#7d8799", // Brightened compared to original to increase contrast
							 | 
						||
| 
								 | 
							
								malibu = "#61afef", sage = "#98c379", whiskey = "#d19a66", violet = "#c678dd", darkBackground = "#21252b", highlightBackground = "#2c313a", background = "#14161a", tooltipBackground = "#353a42", selection = "#3E4451", cursor = "#528bff";
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								The colors used in the theme, as CSS color strings.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								const color = {
							 | 
						||
| 
								 | 
							
								    chalky,
							 | 
						||
| 
								 | 
							
								    coral,
							 | 
						||
| 
								 | 
							
								    cyan,
							 | 
						||
| 
								 | 
							
								    invalid,
							 | 
						||
| 
								 | 
							
								    ivory,
							 | 
						||
| 
								 | 
							
								    stone,
							 | 
						||
| 
								 | 
							
								    malibu,
							 | 
						||
| 
								 | 
							
								    sage,
							 | 
						||
| 
								 | 
							
								    whiskey,
							 | 
						||
| 
								 | 
							
								    violet,
							 | 
						||
| 
								 | 
							
								    darkBackground,
							 | 
						||
| 
								 | 
							
								    highlightBackground,
							 | 
						||
| 
								 | 
							
								    background,
							 | 
						||
| 
								 | 
							
								    tooltipBackground,
							 | 
						||
| 
								 | 
							
								    selection,
							 | 
						||
| 
								 | 
							
								    cursor
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								The editor theme styles for One Dark.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								const oneDarkTheme = /*@__PURE__*/EditorView.theme({
							 | 
						||
| 
								 | 
							
								    "&": {
							 | 
						||
| 
								 | 
							
								        color: ivory,
							 | 
						||
| 
								 | 
							
								        backgroundColor: background
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    ".cm-content": {
							 | 
						||
| 
								 | 
							
								        caretColor: cursor
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    ".cm-cursor, .cm-dropCursor": { borderLeftColor: cursor },
							 | 
						||
| 
								 | 
							
								    "&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection": { backgroundColor: selection },
							 | 
						||
| 
								 | 
							
								    ".cm-panels": { backgroundColor: darkBackground, color: ivory },
							 | 
						||
| 
								 | 
							
								    ".cm-panels.cm-panels-top": { borderBottom: "2px solid black" },
							 | 
						||
| 
								 | 
							
								    ".cm-panels.cm-panels-bottom": { borderTop: "2px solid black" },
							 | 
						||
| 
								 | 
							
								    ".cm-searchMatch": {
							 | 
						||
| 
								 | 
							
								        backgroundColor: "#72a1ff59",
							 | 
						||
| 
								 | 
							
								        outline: "1px solid #457dff"
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    ".cm-searchMatch.cm-searchMatch-selected": {
							 | 
						||
| 
								 | 
							
								        backgroundColor: "#6199ff2f"
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    ".cm-activeLine": { backgroundColor: "#6699ff0b" },
							 | 
						||
| 
								 | 
							
								    ".cm-selectionMatch": { backgroundColor: "#aafe661a" },
							 | 
						||
| 
								 | 
							
								    "&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket": {
							 | 
						||
| 
								 | 
							
								        backgroundColor: "#bad0f847"
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    ".cm-gutters": {
							 | 
						||
| 
								 | 
							
								        backgroundColor: background,
							 | 
						||
| 
								 | 
							
								        color: stone,
							 | 
						||
| 
								 | 
							
								        border: "none"
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    ".cm-activeLineGutter": {
							 | 
						||
| 
								 | 
							
								        backgroundColor: highlightBackground
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    ".cm-foldPlaceholder": {
							 | 
						||
| 
								 | 
							
								        backgroundColor: "transparent",
							 | 
						||
| 
								 | 
							
								        border: "none",
							 | 
						||
| 
								 | 
							
								        color: "#ddd"
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    ".cm-tooltip": {
							 | 
						||
| 
								 | 
							
								        border: "none",
							 | 
						||
| 
								 | 
							
								        backgroundColor: tooltipBackground
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    ".cm-tooltip .cm-tooltip-arrow:before": {
							 | 
						||
| 
								 | 
							
								        borderTopColor: "transparent",
							 | 
						||
| 
								 | 
							
								        borderBottomColor: "transparent"
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    ".cm-tooltip .cm-tooltip-arrow:after": {
							 | 
						||
| 
								 | 
							
								        borderTopColor: tooltipBackground,
							 | 
						||
| 
								 | 
							
								        borderBottomColor: tooltipBackground
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    ".cm-tooltip-autocomplete": {
							 | 
						||
| 
								 | 
							
								        "& > ul > li[aria-selected]": {
							 | 
						||
| 
								 | 
							
								            backgroundColor: highlightBackground,
							 | 
						||
| 
								 | 
							
								            color: ivory
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}, { dark: true });
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								The highlighting style for code in the One Dark theme.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								const oneDarkHighlightStyle = /*@__PURE__*/HighlightStyle.define([
							 | 
						||
| 
								 | 
							
								    { tag: tags.keyword,
							 | 
						||
| 
								 | 
							
								        color: violet },
							 | 
						||
| 
								 | 
							
								    { tag: [tags.name, tags.deleted, tags.character, tags.propertyName, tags.macroName],
							 | 
						||
| 
								 | 
							
								        color: coral },
							 | 
						||
| 
								 | 
							
								    { tag: [/*@__PURE__*/tags.function(tags.variableName), tags.labelName],
							 | 
						||
| 
								 | 
							
								        color: malibu },
							 | 
						||
| 
								 | 
							
								    { tag: [tags.color, /*@__PURE__*/tags.constant(tags.name), /*@__PURE__*/tags.standard(tags.name)],
							 | 
						||
| 
								 | 
							
								        color: whiskey },
							 | 
						||
| 
								 | 
							
								    { tag: [/*@__PURE__*/tags.definition(tags.name), tags.separator],
							 | 
						||
| 
								 | 
							
								        color: ivory },
							 | 
						||
| 
								 | 
							
								    { tag: [tags.typeName, tags.className, tags.number, tags.changed, tags.annotation, tags.modifier, tags.self, tags.namespace],
							 | 
						||
| 
								 | 
							
								        color: chalky },
							 | 
						||
| 
								 | 
							
								    { tag: [tags.operator, tags.operatorKeyword, tags.url, tags.escape, tags.regexp, tags.link, /*@__PURE__*/tags.special(tags.string)],
							 | 
						||
| 
								 | 
							
								        color: cyan },
							 | 
						||
| 
								 | 
							
								    { tag: [tags.meta, tags.comment],
							 | 
						||
| 
								 | 
							
								        color: stone },
							 | 
						||
| 
								 | 
							
								    { tag: tags.strong,
							 | 
						||
| 
								 | 
							
								        fontWeight: "bold" },
							 | 
						||
| 
								 | 
							
								    { tag: tags.emphasis,
							 | 
						||
| 
								 | 
							
								        fontStyle: "italic" },
							 | 
						||
| 
								 | 
							
								    { tag: tags.strikethrough,
							 | 
						||
| 
								 | 
							
								        textDecoration: "line-through" },
							 | 
						||
| 
								 | 
							
								    { tag: tags.link,
							 | 
						||
| 
								 | 
							
								        color: stone,
							 | 
						||
| 
								 | 
							
								        textDecoration: "underline" },
							 | 
						||
| 
								 | 
							
								    { tag: tags.heading,
							 | 
						||
| 
								 | 
							
								        fontWeight: "bold",
							 | 
						||
| 
								 | 
							
								        color: coral },
							 | 
						||
| 
								 | 
							
								    { tag: [tags.atom, tags.bool, /*@__PURE__*/tags.special(tags.variableName)],
							 | 
						||
| 
								 | 
							
								        color: whiskey },
							 | 
						||
| 
								 | 
							
								    { tag: [tags.processingInstruction, tags.string, tags.inserted],
							 | 
						||
| 
								 | 
							
								        color: sage },
							 | 
						||
| 
								 | 
							
								    { tag: tags.invalid,
							 | 
						||
| 
								 | 
							
								        color: invalid },
							 | 
						||
| 
								 | 
							
								]);
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								Extension to enable the One Dark theme (both the editor theme and
							 | 
						||
| 
								 | 
							
								the highlight style).
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								const oneDark = [oneDarkTheme, /*@__PURE__*/syntaxHighlighting(oneDarkHighlightStyle)];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export { color, oneDark, oneDarkHighlightStyle, oneDarkTheme };
							 |