159 lines
3.4 KiB
TypeScript
159 lines
3.4 KiB
TypeScript
import { FontWeight } from "../../common";
|
|
import { withOpacity } from "../../utils/color";
|
|
|
|
export interface SyntaxHighlightStyle {
|
|
color: string;
|
|
weight?: FontWeight;
|
|
underline?: boolean;
|
|
italic?: boolean;
|
|
}
|
|
|
|
export interface Player {
|
|
baseColor: string;
|
|
cursorColor: string;
|
|
selectionColor: string;
|
|
borderColor: string;
|
|
}
|
|
export function buildPlayer(
|
|
color: string,
|
|
cursorOpacity?: number,
|
|
selectionOpacity?: number,
|
|
borderOpacity?: number
|
|
) {
|
|
return {
|
|
baseColor: color,
|
|
cursorColor: withOpacity(color, cursorOpacity || 1.0),
|
|
selectionColor: withOpacity(color, selectionOpacity || 0.24),
|
|
borderColor: withOpacity(color, borderOpacity || 0.8),
|
|
};
|
|
}
|
|
|
|
export interface BackgroundColorSet {
|
|
base: string;
|
|
hovered: string;
|
|
active: string;
|
|
}
|
|
|
|
export interface Syntax {
|
|
primary: SyntaxHighlightStyle;
|
|
comment: SyntaxHighlightStyle;
|
|
punctuation: SyntaxHighlightStyle;
|
|
constant: SyntaxHighlightStyle;
|
|
keyword: SyntaxHighlightStyle;
|
|
function: SyntaxHighlightStyle;
|
|
type: SyntaxHighlightStyle;
|
|
variant: SyntaxHighlightStyle;
|
|
property: SyntaxHighlightStyle;
|
|
enum: SyntaxHighlightStyle;
|
|
operator: SyntaxHighlightStyle;
|
|
string: SyntaxHighlightStyle;
|
|
number: SyntaxHighlightStyle;
|
|
boolean: SyntaxHighlightStyle;
|
|
predictive: SyntaxHighlightStyle;
|
|
title: SyntaxHighlightStyle;
|
|
emphasis: SyntaxHighlightStyle;
|
|
linkUri: SyntaxHighlightStyle;
|
|
linkText: SyntaxHighlightStyle;
|
|
|
|
[key: string]: SyntaxHighlightStyle;
|
|
}
|
|
|
|
export default interface Theme {
|
|
name: string;
|
|
backgroundColor: {
|
|
// Basically just Title Bar
|
|
// Lowest background level
|
|
100: BackgroundColorSet;
|
|
// Tab bars, panels, popovers
|
|
// Mid-ground
|
|
300: BackgroundColorSet;
|
|
// The editor
|
|
// Foreground
|
|
500: BackgroundColorSet;
|
|
// Hacks for elements on top of the midground
|
|
// Buttons in a panel, tab bar, or panel
|
|
on300: BackgroundColorSet;
|
|
// Hacks for elements on top of the editor
|
|
on500: BackgroundColorSet;
|
|
ok: BackgroundColorSet;
|
|
error: BackgroundColorSet;
|
|
warning: BackgroundColorSet;
|
|
info: BackgroundColorSet;
|
|
};
|
|
borderColor: {
|
|
primary: string;
|
|
secondary: string;
|
|
muted: string;
|
|
active: string;
|
|
/**
|
|
* Used for rendering borders on top of media like avatars, images, video, etc.
|
|
*/
|
|
onMedia: string;
|
|
ok: string;
|
|
error: string;
|
|
warning: string;
|
|
info: string;
|
|
};
|
|
textColor: {
|
|
primary: string;
|
|
secondary: string;
|
|
muted: string;
|
|
placeholder: string;
|
|
active: string;
|
|
feature: string;
|
|
ok: string;
|
|
error: string;
|
|
warning: string;
|
|
info: string;
|
|
onMedia: string;
|
|
};
|
|
iconColor: {
|
|
primary: string;
|
|
secondary: string;
|
|
muted: string;
|
|
placeholder: string;
|
|
active: string;
|
|
feature: string;
|
|
ok: string;
|
|
error: string;
|
|
warning: string;
|
|
info: string;
|
|
};
|
|
editor: {
|
|
background: string;
|
|
indent_guide: string;
|
|
indent_guide_active: string;
|
|
line: {
|
|
active: string;
|
|
highlighted: string;
|
|
};
|
|
highlight: {
|
|
selection: string;
|
|
occurrence: string;
|
|
activeOccurrence: string;
|
|
matchingBracket: string;
|
|
match: string;
|
|
activeMatch: string;
|
|
related: string;
|
|
};
|
|
gutter: {
|
|
primary: string;
|
|
active: string;
|
|
};
|
|
};
|
|
|
|
syntax: Syntax;
|
|
|
|
player: {
|
|
1: Player;
|
|
2: Player;
|
|
3: Player;
|
|
4: Player;
|
|
5: Player;
|
|
6: Player;
|
|
7: Player;
|
|
8: Player;
|
|
},
|
|
shadow: string;
|
|
}
|