mirror of
https://github.com/zed-industries/zed.git
synced 2025-02-11 04:36:24 +00:00
164 lines
4.6 KiB
TypeScript
164 lines
4.6 KiB
TypeScript
import Theme from "../themes/common/theme";
|
|
import {
|
|
backgroundColor,
|
|
border,
|
|
iconColor,
|
|
player,
|
|
popoverShadow,
|
|
text,
|
|
TextColor,
|
|
} from "./components";
|
|
import hoverPopover from "./hoverPopover";
|
|
|
|
export default function editor(theme: Theme) {
|
|
const autocompleteItem = {
|
|
cornerRadius: 6,
|
|
padding: {
|
|
bottom: 2,
|
|
left: 6,
|
|
right: 6,
|
|
top: 2,
|
|
},
|
|
};
|
|
|
|
function diagnostic(theme: Theme, color: TextColor) {
|
|
return {
|
|
textScaleFactor: 0.857,
|
|
header: {
|
|
border: border(theme, "primary", {
|
|
top: true,
|
|
}),
|
|
},
|
|
message: {
|
|
text: text(theme, "sans", color, { size: "sm" }),
|
|
highlightText: text(theme, "sans", color, {
|
|
size: "sm",
|
|
weight: "bold",
|
|
}),
|
|
},
|
|
};
|
|
}
|
|
|
|
const syntax: any = {};
|
|
for (const syntaxKey in theme.syntax) {
|
|
const style = theme.syntax[syntaxKey];
|
|
syntax[syntaxKey] = {
|
|
color: style.color,
|
|
weight: style.weight,
|
|
underline: style.underline,
|
|
italic: style.italic,
|
|
};
|
|
}
|
|
|
|
return {
|
|
textColor: theme.syntax.primary.color,
|
|
background: backgroundColor(theme, 500),
|
|
activeLineBackground: theme.editor.line.active,
|
|
codeActionsIndicator: iconColor(theme, "muted"),
|
|
diffBackgroundDeleted: backgroundColor(theme, "error"),
|
|
diffBackgroundInserted: backgroundColor(theme, "ok"),
|
|
documentHighlightReadBackground: theme.editor.highlight.occurrence,
|
|
documentHighlightWriteBackground: theme.editor.highlight.activeOccurrence,
|
|
errorColor: theme.textColor.error,
|
|
gutterBackground: backgroundColor(theme, 500),
|
|
gutterPaddingFactor: 3.5,
|
|
highlightedLineBackground: theme.editor.line.highlighted,
|
|
lineNumber: theme.editor.gutter.primary,
|
|
lineNumberActive: theme.editor.gutter.active,
|
|
renameFade: 0.6,
|
|
unnecessaryCodeFade: 0.5,
|
|
selection: player(theme, 1).selection,
|
|
guestSelections: [
|
|
player(theme, 2).selection,
|
|
player(theme, 3).selection,
|
|
player(theme, 4).selection,
|
|
player(theme, 5).selection,
|
|
player(theme, 6).selection,
|
|
player(theme, 7).selection,
|
|
player(theme, 8).selection,
|
|
],
|
|
autocomplete: {
|
|
background: backgroundColor(theme, 500),
|
|
cornerRadius: 8,
|
|
padding: 4,
|
|
border: border(theme, "secondary"),
|
|
shadow: popoverShadow(theme),
|
|
item: autocompleteItem,
|
|
hoveredItem: {
|
|
...autocompleteItem,
|
|
background: backgroundColor(theme, 500, "hovered"),
|
|
},
|
|
margin: {
|
|
left: -14,
|
|
},
|
|
matchHighlight: text(theme, "mono", "feature"),
|
|
selectedItem: {
|
|
...autocompleteItem,
|
|
background: backgroundColor(theme, 500, "active"),
|
|
},
|
|
},
|
|
diagnosticHeader: {
|
|
background: backgroundColor(theme, 300),
|
|
iconWidthFactor: 1.5,
|
|
textScaleFactor: 0.857, // NateQ: Will we need dynamic sizing for text? If so let's create tokens for these.
|
|
border: border(theme, "secondary", {
|
|
bottom: true,
|
|
top: true,
|
|
}),
|
|
code: {
|
|
...text(theme, "mono", "muted", { size: "sm" }),
|
|
margin: {
|
|
left: 10,
|
|
},
|
|
},
|
|
message: {
|
|
highlightText: text(theme, "sans", "primary", {
|
|
size: "sm",
|
|
weight: "bold",
|
|
}),
|
|
text: text(theme, "sans", "secondary", { size: "sm" }),
|
|
},
|
|
},
|
|
diagnosticPathHeader: {
|
|
background: theme.editor.line.active,
|
|
textScaleFactor: 0.857,
|
|
filename: text(theme, "mono", "primary", { size: "sm" }),
|
|
path: {
|
|
...text(theme, "mono", "muted", { size: "sm" }),
|
|
margin: {
|
|
left: 12,
|
|
},
|
|
},
|
|
},
|
|
errorDiagnostic: diagnostic(theme, "error"),
|
|
warningDiagnostic: diagnostic(theme, "warning"),
|
|
informationDiagnostic: diagnostic(theme, "info"),
|
|
hintDiagnostic: diagnostic(theme, "info"),
|
|
invalidErrorDiagnostic: diagnostic(theme, "muted"),
|
|
invalidHintDiagnostic: diagnostic(theme, "muted"),
|
|
invalidInformationDiagnostic: diagnostic(theme, "muted"),
|
|
invalidWarningDiagnostic: diagnostic(theme, "muted"),
|
|
hover_popover: hoverPopover(theme),
|
|
link_definition: {
|
|
color: theme.syntax.linkUri.color,
|
|
underline: theme.syntax.linkUri.underline,
|
|
},
|
|
jumpIcon: {
|
|
color: iconColor(theme, "muted"),
|
|
iconWidth: 20,
|
|
buttonWidth: 20,
|
|
cornerRadius: 6,
|
|
padding: {
|
|
top: 6,
|
|
bottom: 6,
|
|
left: 6,
|
|
right: 6,
|
|
},
|
|
hover: {
|
|
color: iconColor(theme, "active"),
|
|
background: backgroundColor(theme, "on500", "base"),
|
|
},
|
|
},
|
|
syntax,
|
|
};
|
|
}
|