@import '../constants/colors'; @import '../constants/animations'; @import '../constants/dimensions'; @import '../constants/fonts'; .editor { box-sizing: border-box; height: 100% !important; width: 100%; display: grid; grid-template-rows: minmax(0, 1fr) auto; grid-template-columns: 100%; &.editor--single-line { &, * { font-family: @font-default !important; text-decoration: inherit; color: inherit; } .CodeMirror > div > textarea { // This is the hidden div CodeMirror uses for stuff. By, default it's // a 1000px absolutely positioned thing for doing work inside of. However, this // means that the drag-n-drop shadow image is wider than it should be. So, we're // constraining it here, which may break CM in weird ways, but doesn't seem to // at first glance. max-width: 5em !important; } .CodeMirror, .CodeMirror-lines { padding: 0 !important; margin: 0 !important; } .CodeMirror-scroll { padding-bottom: 1em; height: 100%; display: flex; flex-direction: row; align-items: center; } .CodeMirror-dialog { opacity: 1; border: 0; height: 100%; animation: fadeIn 500ms; flex-wrap: nowrap; padding: 0; margin: 0; & { font-size: 0.95em; } } .nunjucks-widget { padding-top: 0.2em; padding-bottom: 0.2em; } } .editor__container { height: 100%; width: 100%; position: relative; } .CodeMirror { position: absolute; left: 0; right: 0; top: 0; bottom: 0; } .editor__toolbar { display: flex; flex-direction: row; align-items: center; border-top: 1px solid @hl-md; height: @line-height-xs; font-size: @font-size-sm; input { font-family: @font-monospace; margin-right: 0; width: 100%; margin-left: @padding-md; } button { color: @hl; padding: @padding-xs @padding-md; height: 100%; } } .CodeMirror { height: 100% !important; width: 100%; box-sizing: border-box; font-family: @font-monospace; } .CodeMirror, .cm-s-seti.CodeMirror, // Hack because seti theme is dumb .CodeMirror-gutters, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { // Let the background behind show through background-color: transparent !important; border: 0; } .CodeMirror-linenumber, .CodeMirror-guttermarker-subtle { color: @hl-xl !important; } .CodeMirror-gutter { background-color: var(--color-bg); } .CodeMirror-scroll { cursor: text; // Show text cursor everywhere (not just in .Codemirror-lines) } .CodeMirror-lines { // Scroll past the end padding-bottom: 30px; } .CodeMirror-placeholder { color: @hl-lg; } .CodeMirror-lint-marker-error { width: 100%; height: 1em; display: flex; background: none; text-align: center; &::after { color: var(--color-danger); text-align: center; width: 100%; font-size: 0.7em; // because the circle is so large content: '⬤'; } } .CodeMirror-activeline-gutter, .CodeMirror-activeline-background { background-color: transparent; } &:not(.editor--readonly) .CodeMirror-focused .CodeMirror-activeline-gutter, &:not(.editor--readonly) .CodeMirror-focused .CodeMirror-activeline-background { background-color: var(--hl-xs); } &.editor--readonly .CodeMirror-cursors { visibility: hidden; } } // Search dialog (and others) .CodeMirror-dialog { background: var(--color-bg); opacity: 0.95; color: var(--hl); border-color: var(--hl-md); box-sizing: border-box; width: 100%; padding: @padding-sm @padding-xs @padding-xs @padding-xs; box-shadow: 0 0 1em rgba(0, 0, 0, 0.1); display: flex; flex-direction: row; align-items: center; white-space: nowrap; input { font-family: @font-monospace !important; border: 0 !important; height: 1em !important; padding: 0 !important; display: block; width: 100% !important; color: var(--color-font); min-height: 1.5em; } * { margin-left: 0.25em; margin-right: 0.25em; } button { color: var(--hl); &:hover { color: var(--color-font); } } } // Tooltip for errors .CodeMirror-lint-tooltip { background-color: var(--color-bg); color: var(--color-font); border-color: @hl-md; border-radius: 0; font-size: @font-size-md; padding: @padding-xs @padding-sm; z-index: 99999; .CodeMirror-lint-message-error { background-image: none; padding-left: 0; } &::after { display: none; } } /* Based on Sublime Text's Monokai theme */ .CodeMirror { color: var(--color-font); line-height: 1.4em; .CodeMirror-selected { background: var(--color-font); opacity: 0.2; } .CodeMirror-gutters { border-right: 0; } .CodeMirror-guttermarker { color: var(--color-font); } .CodeMirror-guttermarker-subtle { color: @hl-lg; } .CodeMirror-linenumber { color: @hl; } .CodeMirror-cursor { border-left: 1px solid var(--color-font); } .cm-animate-fat-cursor, &.cm-fat-cursor .CodeMirror-cursor { background-color: rgba(255, 139, 147, 0.5) !important; border-bottom: 2px solid #d60000 !important; box-sizing: border-box; } span.cm-meta, span.cm-qualifier { color: var(--color-font); } span.cm-atom { color: var(--color-surprise); } span.cm-number { color: var(--color-surprise); } span.cm-keyword { color: var(--color-danger); } span.cm-builtin { color: var(--color-info); } span.cm-string { color: var(--color-notice); } span.cm-property, span.cm-attribute { color: var(--color-success); } span.cm-variable { color: var(--color-font); } span.cm-variable-2 { color: var(--color-info); } span.cm-variable-3 { color: var(--color-surprise); } span.cm-def { color: var(--color-warning); } span.cm-bracket { color: var(--color-font); } span.cm-tag { color: var(--color-danger); } span.cm-header { color: var(--color-surprise); } span.cm-link { color: var(--color-surprise); } span.cm-comment { color: var(--hl); } span.cm-error { background: var(--color-danger); color: var(--color-font-danger); } span.cm-clickable { text-decoration: underline; cursor: pointer; } span.cm-clickable:hover { text-decoration: underline; } .CodeMirror-matchingbracket { color: inherit !important; text-decoration: underline; text-decoration-color: var(--color-notice); box-sizing: border-box; } span.cm-nunjucks-variable { color: var(--color-surprise); } span.cm-nunjucks-tag { color: var(--color-info); } span.cm-nunjucks-comment { color: var(--hl); } .nunjucks-widget { font-family: @font-monospace !important; padding: 0.13em 0.5em; box-sizing: border-box; margin: 0 0.1em; position: relative; font-size: 0.9em; cursor: default; white-space: nowrap; text-shadow: 0 0 0.1em rgba(0, 0, 0, 0.4); &::after { position: absolute; top: 0; left: 0; height: 100%; width: 100%; opacity: 0.7; // not so bright! content: " "; z-index: -1; border-radius: 0.2em; box-sizing: border-box; box-shadow: inset 0 0 0.1em rgba(0, 0, 0, 0.4); } label { padding: 0; margin: 0; display: inline; font-style: italic; font-size: 0.9em; } &.nunjucks-tag { color: var(--color-font-info); &::after { background: var(--color-info); } } &.nunjucks-variable { color: var(--color-font-surprise); &::after { background: var(--color-surprise); } } &[data-active="on"], &:hover { background: rgba(255, 255, 255, 0.1); } &[data-error="on"] { color: var(--color-font-danger); &::after { background: var(--color-danger); } } &[data-ignore="on"]::after { background: var(--hl-xl); color: bar(--color-font); } } }