From 62d21f43f893fbbf4b32e70eb42919d1cb013f1b Mon Sep 17 00:00:00 2001 From: Kamil Date: Thu, 4 Sep 2025 14:01:53 +0200 Subject: [PATCH 1/5] feat: add dark:matrix theme --- src/renderer/assets/scss/themes.scss | 69 +- src/renderer/components/editor/themes.ts | 10 + .../editor/themes/matrix.tmTheme.json | 843 ++++++++++++++++++ src/shared/types/renderer/store/app.d.ts | 1 + 4 files changed, 907 insertions(+), 16 deletions(-) create mode 100644 src/renderer/components/editor/themes/matrix.tmTheme.json diff --git a/src/renderer/assets/scss/themes.scss b/src/renderer/assets/scss/themes.scss index 8a360d50..c3d7dc05 100644 --- a/src/renderer/assets/scss/themes.scss +++ b/src/renderer/assets/scss/themes.scss @@ -27,8 +27,8 @@ --color-button: hsl(44, 60%, 85%); --color-button-hover: var(--color-contrast-low-alt); - --color-button-action-hover: var(--color-contrast-lower-alt3); - + --color-button-action-hover: var(--color-contrast-lower-alt3); + --color-checkbox: var(--color-contrast-lower-alt); --color-input: var(--color-contrast-lower-alt); @@ -48,7 +48,7 @@ [data-theme='dark:one'] { --color-primary: hsl(215, 69%, 45%); - + --color-bg: hsl(220, 13%, 18%); --color-contrast-lower: hsl(220, 13%, 20%); @@ -57,12 +57,12 @@ --color-contrast-lower-alt3: hsl(220, 13%, 30%); --color-contrast-lower-low: hsl(220, 13%, 40%); --color-contrast-medium: hsl(220, 13%, 50%); - + --color-border: var(--color-contrast-lower-alt2); - + --color-snippet-list: var(--color-bg); --color-snippet-selected: var(--color-contrast-lower-alt); - + --color-sidebar: var(--color-bg); --color-sidebar-item-selected: var(--color-contrast-lower-alt); --color-sidebar-icon: var(--color-text); @@ -71,8 +71,8 @@ --color-button: var(--color-contrast-lower-alt); --color-button-hover: var(--color-contrast-lower-alt2); - --color-button-action: var(--color-contrast-low); - --color-button-action-hover: var(--color-contrast-lower-alt2); + --color-button-action: var(--color-contrast-low); + --color-button-action-hover: var(--color-contrast-lower-alt2); --color-input: var(--color-bg); @@ -85,7 +85,7 @@ --color-primary: hsl(215, 69%, 45%); // при конвертации в hsl цвет отличается, поэтому оставляем в hex - --color-bg: #282A36; + --color-bg: #282A36; --color-contrast-lower: hsl(231, 15%, 20%); --color-contrast-lower-alt: hsl(231, 15%, 22%); @@ -107,7 +107,7 @@ --color-button: var(--color-contrast-lower-alt); --color-button-hover: var(--color-contrast-lower-alt2); - --color-button-action: var(--color-contrast-low); + --color-button-action: var(--color-contrast-low); --color-button-action-hover: var(--color-contrast-lower-alt2); --color-input: var(--color-bg); @@ -143,7 +143,7 @@ --color-button: var(--color-contrast-lower-alt); --color-button-hover: var(--color-contrast-lower-alt2); - --color-button-action: var(--color-contrast-low); + --color-button-action: var(--color-contrast-low); --color-button-action-hover: var(--color-contrast-lower-alt2); --color-input: var(--color-bg); @@ -178,7 +178,7 @@ --color-button: var(--color-contrast-lower-alt); --color-button-hover: var(--color-contrast-lower-alt2); - --color-button-action: var(--color-contrast-low); + --color-button-action: var(--color-contrast-low); --color-button-action-hover: var(--color-contrast-lower-alt2); --color-input: var(--color-bg); @@ -214,7 +214,7 @@ --color-button: var(--color-contrast-lower-alt); --color-button-hover: var(--color-contrast-lower-alt2); - --color-button-action: var(--color-contrast-low); + --color-button-action: var(--color-contrast-low); --color-button-action-hover: var(--color-contrast-lower-alt2); --color-input: var(--color-bg); @@ -252,7 +252,7 @@ --color-button: var(--color-contrast-lower-alt); --color-button-hover: var(--color-contrast-lower-alt2); - --color-button-action: var(--color-contrast-low); + --color-button-action: var(--color-contrast-low); --color-button-action-hover: var(--color-contrast-lower-alt2); --color-input: var(--color-bg); @@ -289,7 +289,44 @@ --color-button: var(--color-contrast-lower-alt); --color-button-hover: var(--color-contrast-lower-alt2); - --color-button-action: var(--color-contrast-low); + --color-button-action: var(--color-contrast-low); + --color-button-action-hover: var(--color-contrast-lower-alt2); + + --color-input: var(--color-bg); + + --color-menu-selected: var(--color-contrast-lower-alt); + + --color-tag-delete: var(--color-contrast-lower-alt3); +} + +[data-theme='dark:matrix'] { + --color-primary: hsla(140, 100%, 50%, 0.514); + + // при конвертации в hsl цвет отличается, поэтому оставляем в hex + --color-bg: #000000; + + + --color-contrast-lower: hsla(140, 100%, 50%, 0.250); + --color-contrast-lower-alt: hsla(140, 100%, 50%, 0.250); + --color-contrast-lower-alt2: hsla(140, 100%, 50%, 0.250); + --color-contrast-lower-alt3: #000000; + --color-contrast-lower-low: #000000; + --color-contrast-medium: #000000; + + --color-snippet-list: var(--color-bg); + --color-snippet-selected: var(--color-contrast-lower-alt); + + --color-sidebar: var(--color-bg); + --color-sidebar-item-selected: var(--color-contrast-lower-alt); + --color-sidebar-icon: var(--color-text); + + --color-border: var(--color-contrast-lower-alt2); + + --color-text: hsl(140, 100%, 50%); + + --color-button: var(--color-contrast-lower-alt); + --color-button-hover: var(--color-contrast-lower-alt2); + --color-button-action: var(--color-contrast-low); --color-button-action-hover: var(--color-contrast-lower-alt2); --color-input: var(--color-bg); @@ -306,4 +343,4 @@ color: var(--color-text); } } -} \ No newline at end of file +} diff --git a/src/renderer/components/editor/themes.ts b/src/renderer/components/editor/themes.ts index 9c81bbff..c53efc31 100644 --- a/src/renderer/components/editor/themes.ts +++ b/src/renderer/components/editor/themes.ts @@ -84,6 +84,16 @@ export const themes: ThemeConfig[] = [ divider: '#1C2029' } }, + { + name: 'Matrix', + label: 'Matrix', + value: 'dark:matrix', + loader: () => import('./themes/matrix.tmTheme.json'), + gutterSettings: { + background: '#1C2029', + divider: '#1C2029' + } + }, { name: 'GitHub', label: 'GitHub', diff --git a/src/renderer/components/editor/themes/matrix.tmTheme.json b/src/renderer/components/editor/themes/matrix.tmTheme.json new file mode 100644 index 00000000..2dea03e1 --- /dev/null +++ b/src/renderer/components/editor/themes/matrix.tmTheme.json @@ -0,0 +1,843 @@ +{ + "author": "Kamil Mirończuk (https://github.com/Kamwebdev)", + "_note": "Based on https://github.com/enkia/enki-theme", + "semanticClass": "kamwebdev.theme.matrix", + "settings": [ + { + "settings": { + "guide": "#4f4f5e40", + "caret": "#DBC08A", + "findHighlight": "#ffa300", + "phantomCss": "", + "shadow": "#00000010", + "stackGuide": "#4f4f5e60", + "lineHighlight": "#00000030", + "gutterForeground": "#3b415caa", + "findHighlightForeground": "#000000", + "foreground": "#00FD61", + "activeGuide": "#363b54", + "background": "#00000000", + "popupCss": "", + "invisibles": "#4f4f5e", + "selection": "#9D599D40", + "selectionBorder": "#9D599D", + "inactiveSelection": "#282833", + "tagsOptions": "underline" + } + }, + { + "name": "Italics - Comments, Storage, Keyword Flow, Vue attributes, Decorators", + "scope": "comment, meta.var.expr storage.type, keyword.control.flow, meta.directive.vue punctuation.separator.key-value.html, meta.directive.vue entity.other.attribute-name.html, tag.decorator.js entity.name.tag.js, tag.decorator.js punctuation.definition.tag.js, storage.modifier", + "settings": { + "fontStyle": "italic" + } + }, + { + "name": "Comment", + "scope": "comment, comment.block.documentation, punctuation.definition.comment", + "settings": { + "foreground": "#66b3d6" + } + }, + { + "name": "Comment Doc", + "scope": "comment.block.documentation variable, comment.block.documentation storage, comment.block.documentation punctuation, comment.block.documentation keyword, comment.block.documentation support, comment.block.documentation markup, comment.block.documentation markup.inline.raw.string.markdown, keyword.other.phpdoc.php", + "settings": { + "foreground": "#66b3d6" + } + }, + { + "name": "Number, Boolean, Undefined, Null", + "scope": "variable.other.constant, punctuation.definition.constant, constant.language, constant.numeric, support.constant", + "settings": { + "foreground": "#ff9e64" + } + }, + { + "name": "String, Symbols, Markup Heading", + "scope": "string, constant.other.symbol, constant.other.key, markup.heading, meta.attribute-selector", + "settings": { + "fontStyle": "", + "foreground": "#9ece6a" + } + }, + { + "name": "Colors", + "scope": "constant.other.color, constant.other.color.rgb-value.hex punctuation.definition.constant", + "settings": { + "foreground": "#9aa5ce" + } + }, + { + "name": "Invalid", + "scope": "invalid, invalid.illegal", + "settings": { + "foreground": "#ff5370" + } + }, + { + "name": "Invalid deprecated", + "scope": "invalid.deprecated", + "settings": { + "foreground": "#bb9af7" + } + }, + { + "name": "Storage Type", + "scope": "storage.type", + "settings": { + "foreground": "#bb9af7" + } + }, + { + "name": "Storage - modifier, var, const, let", + "scope": "meta.var.expr storage.type, storage.modifier", + "settings": { + "foreground": "#9d7cd8" + } + }, + { + "name": "Interpolation", + "scope": "punctuation.definition.template-expression, punctuation.section.embedded", + "settings": { + "foreground": "#7dcfff" + } + }, + { + "name": "Spread", + "scope": "keyword.operator.spread, keyword.operator.rest", + "settings": { + "fontStyle": "bold", + "foreground": "#f7768e" + } + }, + { + "name": "Operator, Misc", + "scope": "keyword.operator, keyword.control.as, keyword.other, keyword.operator.bitwise.shift, punctuation, punctuation.definition.constant.markdown, punctuation.definition.string, punctuation.support.type.property-name, text.html.vue-html meta.tag, punctuation.definition.keyword, punctuation.terminator.rule, punctuation.definition.entity, punctuation.definition.tag, punctuation.separator.inheritance.php, punctuation.definition.tag.html, keyword.other.template, keyword.other.substitution, entity.name.operator, text.html.vue meta.tag.block.any.html, text.html.vue meta.tag.inline.any.html, text.html.vue meta.tag.other.html, text.html.twig meta.tag.inline.any.html, text.html.twig meta.tag.block.any.html, text.html.twig meta.tag.structure.any.html, text.html.twig meta.tag.any.html", + "settings": { + "foreground": "#89ddff" + } + }, + { + "name": "Import, Export, From, Default", + "scope": "keyword.control.import, keyword.control.export, keyword.control.from, keyword.control.default, meta.import keyword.other", + "settings": { + "foreground": "#7dcfff" + } + }, + { + "name": "Keyword", + "scope": "keyword, keyword.control, keyword.other.important", + "settings": { + "foreground": "#bb9af7" + } + }, + { + "name": "Keyword SQL", + "scope": "keyword.other.DML", + "settings": { + "foreground": "#7dcfff" + } + }, + { + "name": "Keyword Operator Logical, Arrow, Ternary, Comparison", + "scope": "keyword.operator.logical, storage.type.function, keyword.operator.bitwise, keyword.operator.ternary, keyword.operator.comparison, keyword.operator.relational, keyword.operator.or.regexp", + "settings": { + "foreground": "#bb9af7" + } + }, + { + "name": "Tag", + "scope": "entity.name.tag, entity.name.tag support.class.component, meta.tag", + "settings": { + "foreground": "#f7768e" + } + }, + { + "name": "Tag Punctuation", + "scope": "punctuation.definition.tag, punctuation.definition.tag.html, punctuation.definition.tag.begin.html, punctuation.definition.tag.end.html", + "settings": { + "foreground": "#ba3c97" + } + }, + { + "name": "Blade", + "scope": "keyword.blade, entity.name.function.blade", + "settings": { + "foreground": "#7aa2f7" + } + }, + { + "name": "PHP - Embedded Tag", + "scope": "punctuation.section.embedded.begin.php, punctuation.section.embedded.end.php", + "settings": { + "foreground": "#0db9d7" + } + }, + { + "name": "Smarty - Twig tag - Blade", + "scope": "punctuation.definition.variable.smarty, punctuation.section.embedded.begin.smarty, punctuation.section.embedded.end.smarty, meta.tag.template.value.twig, punctuation.section.tag.twig, meta.tag.expression.twig, punctuation.definition.tag.expression.twig, punctuation.definition.tag.output.twig, variable.parameter.smarty", + "settings": { + "foreground": "#7DCFFF" + } + }, + { + "name": "Smarty - Twig variable - function", + "scope": "variable.other.property.twig, support.function.twig, meta.function-call.twig, keyword.control.twig, keyword.control.smarty, keyword.operator.other.twig, keyword.operator.comparison.twig, support.function.functions.twig, support.function.functions.twig, keyword.operator.assignment.twig, support.function.filters.twig, support.function.built-in.smarty, keyword.operator.smarty, text.blade text.html.blade custom.compiler.blade.php punctuation.section.embedded.php entity.name.tag.block.any.html, text.blade text.html.blade custom.compiler.blade.php punctuation.section.embedded.php constant.other.inline-data.html, text.blade text.html.blade custom.compiler.blade.php support.function constant.other.inline-data.html", + "settings": { + "foreground": "#0db9d7" + } + }, + { + "name": "Globals - PHP Constants etc", + "scope": "constant.other.php, variable.other.global.safer, variable.other.global.safer punctuation.definition.variable, variable.other.global, variable.other.global punctuation.definition.variable, constant.other", + "settings": { + "foreground": "#e0af68" + } + }, + { + "name": "Variables", + "scope": "variable, support.variable, string constant.other.placeholder", + "settings": { + "foreground": "#c0caf5" + } + }, + { + "name": "Object Variable", + "scope": "variable.other.object, support.module.node", + "settings": { + "foreground": "#c0caf5" + } + }, + { + "name": "Object Key", + "scope": "meta.object-literal.key, meta.group.braces.curly constant.other.object.key.js string.unquoted.label.js, string.alias.graphql, string.unquoted.graphql, string.unquoted.alias.graphql, meta.field.declaration.ts variable.object.property", + "settings": { + "foreground": "#73daca" + } + }, + { + "name": "Object Property", + "scope": "variable.other.property, support.variable.property, support.variable.property.dom, meta.function-call variable.other.object.property, variable.language.prototype, meta.property.object, variable.other.member", + "settings": { + "foreground": "#7dcfff" + } + }, + { + "name": "Object Property", + "scope": "variable.other.object.property", + "settings": { + "foreground": "#c0caf5" + } + }, + { + "name": "Object Literal Member lvl 3 (Vue Prop Validation)", + "scope": "meta.objectliteral meta.object.member meta.objectliteral meta.object.member meta.objectliteral meta.object.member meta.object-literal.key", + "settings": { + "foreground": "#41a6b5" + } + }, + { + "name": "C-related Block Level Variables", + "scope": "source.cpp meta.block variable.other", + "settings": { + "foreground": "#f7768e" + } + }, + { + "name": "Other Variable", + "scope": "support.other.variable", + "settings": { + "foreground": "#f7768e" + } + }, + { + "name": "Methods", + "scope": "meta.class-method.js entity.name.function.js, entity.name.method.js, variable.function.constructor, keyword.other.special-method, storage.type.cs", + "settings": { + "foreground": "#7aa2f7" + } + }, + { + "name": "Function Definition", + "scope": "entity.name.function, meta.function-call, meta.function-call entity.name.function, variable.function, meta.definition.method entity.name.function, meta.object-literal entity.name.function", + "settings": { + "foreground": "#7aa2f7" + } + }, + { + "name": "Function Argument", + "scope": "variable.parameter.function.language.special, variable.parameter, meta.function.parameters punctuation.definition.variable, meta.function.parameter variable", + "settings": { + "foreground": "#e0af68" + } + }, + { + "name": "Constant, Tag Attribute", + "scope": "keyword.other.type.php, storage.type.php, constant.character, constant.escape, keyword.other.unit", + "settings": { + "foreground": "#bb9af7" + } + }, + { + "name": "Variable Definition", + "scope": "meta.definition.variable variable.other.constant, meta.definition.variable variable.other.readwrite, variable.other.declaration", + "settings": { + "foreground": "#bb9af7" + } + }, + { + "name": "Inherited Class", + "scope": "entity.other.inherited-class", + "settings": { + "fontStyle": "", + "foreground": "#bb9af7" + } + }, + { + "name": "Class, Support, DOM, etc", + "scope": "support.class, support.type, variable.other.readwrite.alias, support.orther.namespace.use.php, meta.use.php, support.other.namespace.php, support.type.sys-types, support.variable.dom, support.constant.math, support.type.object.module, support.constant.json, entity.name.namespace, meta.import.qualifier, entity.name.class", + "settings": { + "foreground": "#0db9d7" + } + }, + { + "name": "Class Name", + "scope": "entity.name", + "settings": { + "foreground": "#c0caf5" + } + }, + { + "name": "Support Function", + "scope": "support.function", + "settings": { + "foreground": "#0db9d7" + } + }, + { + "name": "CSS Class and Support", + "scope": "source.css support.type.property-name, source.sass support.type.property-name, source.scss support.type.property-name, source.less support.type.property-name, source.stylus support.type.property-name, source.postcss support.type.property-name, support.type.property-name.css, support.type.vendored.property-name, support.type.map.key", + "settings": { + "foreground": "#7aa2f7" + } + }, + { + "name": "CSS Font", + "scope": "support.constant.font-name, meta.definition.variable", + "settings": { + "foreground": "#9ece6a" + } + }, + { + "name": "CSS Class", + "scope": "entity.other.attribute-name.class, meta.at-rule.mixin.scss entity.name.function.scss", + "settings": { + "foreground": "#9ece6a" + } + }, + { + "name": "CSS ID", + "scope": "entity.other.attribute-name.id", + "settings": { + "foreground": "#fc7b7b" + } + }, + { + "name": "CSS Tag", + "scope": "entity.name.tag.css, entity.name.tag.reference, entity.name.tag.scss", + "settings": { + "foreground": "#0db9d7" + } + }, + { + "name": "CSS Tag Reference", + "scope": "entity.name.tag.reference", + "settings": { + "foreground": "#e0af68" + } + }, + { + "name": "CSS Property Separator", + "scope": "meta.property-list punctuation.separator.key-value", + "settings": { + "foreground": "#9abdf5" + } + }, + { + "name": "CSS Punctuation", + "scope": "meta.property-list, punctuation.definition.entity.css", + "settings": { + "foreground": "#e0af68" + } + }, + { + "name": "SCSS @", + "scope": "meta.at-rule.mixin keyword.control.at-rule.mixin, meta.at-rule.include entity.name.function.scss, meta.at-rule.include keyword.control.at-rule.include", + "settings": { + "foreground": "#bb9af7" + } + }, + { + "name": "SCSS Mixins, Extends, Include Keyword", + "scope": "keyword.control.at-rule.include punctuation.definition.keyword, keyword.control.at-rule.mixin punctuation.definition.keyword, meta.at-rule.include keyword.control.at-rule.include, keyword.control.at-rule.extend punctuation.definition.keyword, meta.at-rule.extend keyword.control.at-rule.extend, entity.other.attribute-name.placeholder.css punctuation.definition.entity.css, meta.at-rule.media keyword.control.at-rule.media, meta.at-rule.mixin keyword.control.at-rule.mixin, meta.at-rule.function keyword.control.at-rule.function, keyword.control punctuation.definition.keyword, meta.at-rule.import.scss entity.other.attribute-name.placeholder.scss punctuation.definition.entity.scss, meta.at-rule.import.scss keyword.control.at-rule.import.scss", + "settings": { + "foreground": "#9d7cd8" + } + }, + { + "name": "SCSS Include Mixin Argument", + "scope": "meta.property-list meta.at-rule.include", + "settings": { + "foreground": "#c0caf5" + } + }, + { + "name": "CSS value", + "scope": "support.constant.property-value", + "settings": { + "foreground": "#ff9e64" + } + }, + { + "name": "Sub-methods", + "scope": "entity.name.module.js, variable.import.parameter.js, variable.other.class.js", + "settings": { + "foreground": "#c0caf5" + } + }, + { + "name": "Language methods", + "scope": "variable.language", + "settings": { + "foreground": "#f7768e" + } + }, + { + "name": "Variable punctuation", + "scope": "variable.other punctuation.definition.variable", + "settings": { + "foreground": "#c0caf5" + } + }, + { + "name": "Keyword this with Punctuation, ES7 Bind Operator", + "scope": "source.js constant.other.object.key.js string.unquoted.label.js, variable.language.this punctuation.definition.variable, keyword.other.this", + "settings": { + "foreground": "#f7768e" + } + }, + { + "name": "HTML Attributes", + "scope": "entity.other.attribute-name, text.html.basic entity.other.attribute-name.html, text.html.basic entity.other.attribute-name, text.blade entity.other.attribute-name.class, text.html.smarty entity.other.attribute-name.class", + "settings": { + "foreground": "#bb9af7" + } + }, + { + "name": "Vue Template attributes", + "scope": "meta.directive.vue punctuation.separator.key-value.html, meta.directive.vue entity.other.attribute-name.html", + "settings": { + "foreground": "#bb9af7" + } + }, + { + "name": "Vue Template attribute separator", + "scope": "meta.directive.vue punctuation.separator.key-value.html", + "settings": { + "foreground": "#89ddff" + } + }, + { + "name": "CSS IDs", + "scope": "source.sass keyword.control", + "settings": { + "foreground": "#7aa2f7" + } + }, + { + "name": "CSS psuedo selectors", + "scope": "entity.other.attribute-name.pseudo-class, entity.other.attribute-name.pseudo-element, entity.other.attribute-name.placeholder, meta.property-list meta.property-value", + "settings": { + "foreground": "#bb9af7" + } + }, + { + "name": "Inserted", + "scope": "markup.inserted", + "settings": { + "foreground": "#449dab" + } + }, + { + "name": "Deleted", + "scope": "markup.deleted", + "settings": { + "foreground": "#914c54" + } + }, + { + "name": "Changed", + "scope": "markup.changed", + "settings": { + "foreground": "#6183bb" + } + }, + { + "name": "Regular Expressions", + "scope": "string.regexp", + "settings": { + "foreground": "#b4f9f8" + } + }, + { + "name": "Regular Expressions - Punctuation", + "scope": "punctuation.definition.group", + "settings": { + "foreground": "#f7768e" + } + }, + { + "name": "Regular Expressions - Character Class", + "scope": "constant.other.character-class.regexp", + "settings": { + "foreground": "#bb9af7" + } + }, + { + "name": "Regular Expressions - Character Class Set", + "scope": "constant.other.character-class.set.regexp, punctuation.definition.character-class.regexp", + "settings": { + "foreground": "#e0af68" + } + }, + { + "name": "Regular Expressions - Quantifier", + "scope": "keyword.operator.quantifier.regexp", + "settings": { + "foreground": "#89ddff" + } + }, + { + "name": "Regular Expressions - Backslash", + "scope": "constant.character.escape.backslash", + "settings": { + "foreground": "#c0caf5" + } + }, + { + "name": "Escape Characters", + "scope": "constant.character.escape", + "settings": { + "foreground": "#89ddff" + } + }, + { + "name": "Decorators", + "scope": "tag.decorator.js entity.name.tag.js, tag.decorator.js punctuation.definition.tag.js", + "settings": { + "foreground": "#7aa2f7" + } + }, + { + "name": "CSS Units", + "scope": "keyword.other.unit", + "settings": { + "foreground": "#f7768e" + } + }, + { + "name": "JSON Key - Level 0", + "scope": "source.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json string.quoted.double.json", + "settings": { + "foreground": "#7aa2f7" + } + }, + { + "name": "JSON Key - Level 1", + "scope": "source.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json string.quoted.double.json", + "settings": { + "foreground": "#0db9d7" + } + }, + { + "name": "JSON Key - Level 2", + "scope": "source.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json string.quoted.double.json", + "settings": { + "foreground": "#7dcfff" + } + }, + { + "name": "JSON Key - Level 3", + "scope": "source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json string.quoted.double.json", + "settings": { + "foreground": "#bb9af7" + } + }, + { + "name": "JSON Key - Level 4", + "scope": "source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json string.quoted.double.json", + "settings": { + "foreground": "#e0af68" + } + }, + { + "name": "JSON Key - Level 5", + "scope": "source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json string.quoted.double.json", + "settings": { + "foreground": "#0db9d7" + } + }, + { + "name": "JSON Key - Level 6", + "scope": "source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json string.quoted.double.json", + "settings": { + "foreground": "#73daca" + } + }, + { + "name": "JSON Key - Level 7", + "scope": "source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json", + "settings": { + "foreground": "#f7768e" + } + }, + { + "name": "JSON Key - Level 8", + "scope": "source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json punctuation.definition.string.end.json", + "settings": { + "foreground": "#9ece6a" + } + }, + { + "name": "JSON Key - value", + "scope": "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json", + "settings": { + "foreground": "#9ece6a" + } + }, + { + "name": "Plain Punctuation", + "scope": "punctuation.definition.list_item.markdown", + "settings": { + "foreground": "#9abdf5" + } + }, + { + "name": "Block Punctuation", + "scope": "meta.block, meta.brace, punctuation.definition.block, punctuation.definition.use, punctuation.definition.group.shell, punctuation.definition.class, punctuation.definition.begin.bracket, punctuation.definition.end.bracket, punctuation.definition.parameters, punctuation.definition.arguments, punctuation.definition.dictionary, punctuation.definition.array, punctuation.section", + "settings": { + "foreground": "#9abdf5" + } + }, + { + "name": "Markdown - Plain", + "scope": "meta.jsx.children, meta.embedded.block", + "settings": { + "foreground": "#c0caf5" + } + }, + { + "name": "HTML text", + "scope": "text.html", + "settings": { + "foreground": "#00FD61" + } + }, + { + "name": "Markdown - Markup Raw Inline", + "scope": "text.html.markdown markup.inline.raw.markdown", + "settings": { + "foreground": "#00FD61" + } + }, + { + "name": "Markdown - Markup Raw Inline Punctuation", + "scope": "text.html.markdown markup.inline.raw.markdown punctuation.definition.raw.markdown", + "settings": { + "foreground": "#4E5579" + } + }, + { + "name": "Markdown - Heading 1", + "scope": "heading.1.markdown entity.name, heading.1.markdown punctuation.definition.heading.markdown", + "settings": { + "fontStyle": "bold", + "foreground": "#89ddff" + } + }, + { + "name": "Markdown - Heading 2", + "scope": "heading.2.markdown entity.name, heading.2.markdown punctuation.definition.heading.markdown", + "settings": { + "fontStyle": "bold", + "foreground": "#61bdf2" + } + }, + { + "name": "Markdown - Heading 3", + "scope": "heading.3.markdown entity.name, heading.3.markdown punctuation.definition.heading.markdown", + "settings": { + "fontStyle": "bold", + "foreground": "#7aa2f7" + } + }, + { + "name": "Markdown - Heading 4", + "scope": "heading.4.markdown entity.name, heading.4.markdown punctuation.definition.heading.markdown", + "settings": { + "fontStyle": "bold", + "foreground": "#6d91de" + } + }, + { + "name": "Markdown - Heading 5", + "scope": "heading.5.markdown entity.name, heading.5.markdown punctuation.definition.heading.markdown", + "settings": { + "fontStyle": "bold", + "foreground": "#9aa5ce" + } + }, + { + "name": "Markdown - Heading 6", + "scope": "heading.6.markdown entity.name, heading.6.markdown punctuation.definition.heading.markdown", + "settings": { + "fontStyle": "bold", + "foreground": "#747ca1" + } + }, + { + "name": "Markup - Italic", + "scope": "markup.italic, markup.italic punctuation", + "settings": { + "fontStyle": "italic", + "foreground": "#c0caf5" + } + }, + { + "name": "Markup - Bold", + "scope": "markup.bold, markup.bold punctuation", + "settings": { + "fontStyle": "bold", + "foreground": "#c0caf5" + } + }, + { + "name": "Markup - Bold-Italic", + "scope": "markup.bold markup.italic, markup.bold markup.italic punctuation", + "settings": { + "fontStyle": "bold italic", + "foreground": "#c0caf5" + } + }, + { + "name": "Markup - Underline", + "scope": "markup.underline, markup.underline punctuation", + "settings": { + "fontStyle": "underline" + } + }, + { + "name": "Markdown - Blockquote", + "scope": "markup.quote punctuation.definition.blockquote.markdown", + "settings": { + "foreground": "#4e5579" + } + }, + { + "name": "Markup - Quote", + "scope": "markup.quote", + "settings": { + "fontStyle": "italic" + } + }, + { + "name": "Markdown - Link", + "scope": "string.other.link, markup.underline.link, constant.other.reference.link.markdown, string.other.link.description.title.markdown", + "settings": { + "foreground": "#73daca" + } + }, + { + "name": "Markdown - Fenced Code Block", + "scope": "markup.fenced_code.block.markdown, markup.inline.raw.string.markdown, variable.language.fenced.markdown", + "settings": { + "foreground": "#00FD61" + } + }, + { + "name": "Markdown - Code Block Indented", + "scope": "markup.raw.block.markdown", + "settings": { + "foreground": "#00FD61" + } + }, + { + "name": "Markdown - Separator", + "scope": "meta.separator", + "settings": { + "fontStyle": "bold", + "foreground": "#444b6a" + } + }, + { + "name": "Markup - Table", + "scope": "markup.table", + "settings": { + "foreground": "#c0cefc" + } + }, + { + "name": "Token - Info", + "scope": "token.info-token", + "settings": { + "foreground": "#0db9d7" + } + }, + { + "name": "Token - Warn", + "scope": "token.warn-token", + "settings": { + "foreground": "#ffdb69" + } + }, + { + "name": "Token - Error", + "scope": "token.error-token", + "settings": { + "foreground": "#db4b4b" + } + }, + { + "name": "Token - Debug", + "scope": "token.debug-token", + "settings": { + "foreground": "#b267e6" + } + }, + { + "name": "Apache Tag", + "scope": "entity.tag.apacheconf", + "settings": { + "foreground": "#f7768e" + } + }, + { + "name": "Preprocessor", + "scope": "meta.preprocessor", + "settings": { + "foreground": "#73daca" + } + }, + { + "name": "ENV value", + "scope": "source.env", + "settings": { + "foreground": "#7aa2f7" + } + } + ], + "name": "Matrix", + "colorSpaceName": "sRGB", + "uuid": "06f855e3-9fb7-4fb1-b790-aef06065f341" +} diff --git a/src/shared/types/renderer/store/app.d.ts b/src/shared/types/renderer/store/app.d.ts index c7d7c963..2fffbfd1 100644 --- a/src/shared/types/renderer/store/app.d.ts +++ b/src/shared/types/renderer/store/app.d.ts @@ -8,6 +8,7 @@ export type Theme = | 'dark:monokai' | 'dark:one' | 'dark:tokyo-night' + | 'dark:matrix' | 'light:github' | 'light:material' | 'light:solarized' From edb7cb0e2d7228fe5ce356b7d8e80bd4a4c85a1e Mon Sep 17 00:00:00 2001 From: Kamil Date: Thu, 4 Sep 2025 14:22:53 +0200 Subject: [PATCH 2/5] chore: fix color-primary for dark:matrix theme --- src/renderer/assets/scss/themes.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/assets/scss/themes.scss b/src/renderer/assets/scss/themes.scss index c3d7dc05..93a71963 100644 --- a/src/renderer/assets/scss/themes.scss +++ b/src/renderer/assets/scss/themes.scss @@ -300,7 +300,7 @@ } [data-theme='dark:matrix'] { - --color-primary: hsla(140, 100%, 50%, 0.514); + --color-primary: hsla(140, 100%, 50%, 0.414); // при конвертации в hsl цвет отличается, поэтому оставляем в hex --color-bg: #000000; From b616783f19b8d713734adf7bc904d3046efc7900 Mon Sep 17 00:00:00 2001 From: Kamil Date: Mon, 29 Sep 2025 11:18:13 +0200 Subject: [PATCH 3/5] chore: add preview to README.md --- README.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f61e34b9..b38b4e67 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,15 @@ +

Matrix Inspired Theme

+ +I’ve added a custom theme inspired by **The Matrix**. +You can preview it below: + +

+ Matrix theme preview +

+ +
+ +

Original README

@@ -64,7 +76,7 @@ However, the amount of effort needed to maintain and develop new features for th massCode allows you to organize snippets using multi-level folders as well as tags. Each snippet has fragments - tabs, which gives even greater level of organization. ### Editor -massCode uses [Codemirror](https://github.com/codemirror/codemirror5) as the basis for the editor and `.tmLanguage` as the grammar for syntax highlighting. This tandem opens the door to over [600](https://github.com/github/linguist/blob/master/vendor/README.md) existing grammars. The application currently supports more than [160](https://github.com/massCodeIO/massCode/tree/master/src/renderer/components/editor) grammars. In addition to `.tmLanguage`, the application supports `.tmTheme` for themes. There is also support for [Prettier](https://prettier.io) for code formatting. +massCode uses [Codemirror](https://github.com/codemirror/codemirror5) as the basis for the editor and `.tmLanguage` as the grammar for syntax highlighting. This tandem opens the door to over [600](https://github.com/github/linguist/blob/master/vendor/README.md) existing grammars. The application currently supports more than [160](https://github.com/massCodeIO/massCode/tree/master/src/renderer/components/editor) grammars. In addition to `.tmLanguage`, the application supports `.tmTheme` for themes. There is also support for [Prettier](https://prettier.io) for code formatting. ### Real-time Render for HTML & CSS You can not only collect snippets, but also see the rendering result for HTML and CSS in real time. Test the idea or just view the result. @@ -122,4 +134,4 @@ You can also [download](https://github.com/antonreshetov/massCode) massCode v1. [AGPL-3.0](https://github.com/massCodeIO/massCode/blob/master/LICENSE) -Copyright (c) 2019-present, [Anton Reshetov](https://github.com/antonreshetov). \ No newline at end of file +Copyright (c) 2019-present, [Anton Reshetov](https://github.com/antonreshetov). From 5cd27d89218c03fb3c8e6ddc39d5ff473f201726 Mon Sep 17 00:00:00 2001 From: Kamil Date: Mon, 29 Sep 2025 11:19:30 +0200 Subject: [PATCH 4/5] docs: new preview for masscode --- preview-matrix.png | Bin 0 -> 39817 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 preview-matrix.png diff --git a/preview-matrix.png b/preview-matrix.png new file mode 100644 index 0000000000000000000000000000000000000000..3857f2a6f2591cca2e48b514c5c107767e50d916 GIT binary patch literal 39817 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 literal 0 HcmV?d00001 From b0d6b76d456e8749385fc9103f1269258357a0d4 Mon Sep 17 00:00:00 2001 From: Kamil Date: Mon, 29 Sep 2025 11:24:11 +0200 Subject: [PATCH 5/5] docs: add disclaimer --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index b38b4e67..266d9412 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,10 @@ You can preview it below: Matrix theme preview

+Disclaimer + +This theme is inspired by the visual style of *The Matrix* movie. It is not affiliated with, endorsed by, or associated with Warner Bros. or any official Matrix franchise rights holders. All trademarks and copyrights belong to their respective owners. +

Original README