diff --git a/CHANGELOG.md b/CHANGELOG.md index e7396f5e..b54247cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,13 @@ -# [3.0.0-beta.1](https://github.com/massCodeIO/massCode/compare/v2.10.0...v3.0.0-beta.1) (2022-08-04) +# [3.0.0](https://github.com/massCodeIO/massCode/compare/v2.11.0...v3.0.0) (2022-08-05) -### Breaking Changes -- Drop Ace editor -- Does not support syntax highlighting for AQL, C9 Search Results, FSL, Gobstones, Jack, JSSM, LogiQL, LuaPage, Lucene, Maze, MIXAL, MUSHCode, RDoc, Redshift, RHTML, RST, Space -- Remove Light: Crome, Light: Textmate, Light: Xcode themes + +### Features + +* add codemirror & use `.tmLanguage` directly as grammar ([#190](https://github.com/massCodeIO/massCode/issues/190)) ([a36bcf0](https://github.com/massCodeIO/massCode/commit/a36bcf005f4210a372b424ccc7e7c3fb84f7d634)) + + + +# [2.11.0](https://github.com/massCodeIO/massCode/compare/v2.10.0...v2.11.0) (2022-08-04) ### Bug Fixes @@ -13,7 +17,6 @@ ### Features -* add codemirror & use `.tmLanguage` directly as grammar ([#186](https://github.com/massCodeIO/massCode/issues/186)) ([d81536c](https://github.com/massCodeIO/massCode/commit/d81536ca362c4905bab807d4cb5c7397ef85c681)) * **i18n:** add Chinese traditional locale ([#161](https://github.com/massCodeIO/massCode/issues/161)) ([8b00fcd](https://github.com/massCodeIO/massCode/commit/8b00fcd58eca6c42402a747f23ac57ee8be28927)) * **i18n:** add Spanish locale ([bd68311](https://github.com/massCodeIO/massCode/commit/bd6831123158a38166025a3683412a290ca74114)) diff --git a/package.json b/package.json index 4d2ea442..71a7a9d8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "masscode", "productName": "massCode", - "version": "3.0.0", + "version": "3.1.0", "description": "A free and open source code snippets manager for developers", "license": "AGPL-3.0", "main": "build/src/main/index.js", @@ -68,6 +68,7 @@ "prettier-plugin-sh": "0.8.2", "prettier-plugin-toml": "^0.3.1", "sanitize-html": "^2.7.0", + "slash": "^3.0.0", "universal-analytics": "^0.5.3", "vercel-toast": "^1.5.5", "vue": "^3.2.33", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 005fc447..aa1fbbe5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -70,6 +70,7 @@ specifiers: prettier-plugin-toml: ^0.3.1 sanitize-html: ^2.7.0 sass: ^1.45.1 + slash: ^3.0.0 tsc-watch: ^4.6.0 typescript: ^4.5.4 universal-analytics: ^0.5.3 @@ -117,6 +118,7 @@ dependencies: prettier-plugin-sh: 0.8.2_prettier@2.6.2 prettier-plugin-toml: 0.3.1 sanitize-html: 2.7.0 + slash: 3.0.0 universal-analytics: 0.5.3 vercel-toast: 1.5.5 vue: 3.2.33 @@ -8661,7 +8663,7 @@ packages: /jsonfile/4.0.0: resolution: {integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=} optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.9 dev: true /jsonfile/6.1.0: @@ -8669,7 +8671,7 @@ packages: dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.9 /jsonparse/1.3.1: resolution: {integrity: sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=} diff --git a/src/main/menu/main.ts b/src/main/menu/main.ts index c322d042..a1513c5f 100644 --- a/src/main/menu/main.ts +++ b/src/main/menu/main.ts @@ -198,6 +198,15 @@ const helpMenu: MenuItemConstructorOptions[] = [ { type: 'separator' }, + { + label: i18n.t('menu:help.links.snippets'), + click: () => { + shell.openExternal('https://masscode.io/snippets') + } + }, + { + type: 'separator' + }, { label: i18n.t('menu:help.donate.openCollective'), click: () => { diff --git a/src/main/preload.ts b/src/main/preload.ts index 4fa05101..450127cf 100644 --- a/src/main/preload.ts +++ b/src/main/preload.ts @@ -1,5 +1,11 @@ import { contextBridge, ipcRenderer } from 'electron' -import { isDbExist, migrate, migrateFromSnippetsLab, move } from './services/db' +import { + isDbExist, + migrate, + migrateFromSnippetsLab, + move, + createDb +} from './services/db' import { store } from './store' import type { ElectronBridge } from '@shared/types/main' import { track } from './services/analytics' @@ -25,6 +31,7 @@ contextBridge.exposeInMainWorld('electron', { } }, db: { + create: () => createDb(), migrate: path => migrate(path), migrateFromSnippetsLab: path => migrateFromSnippetsLab(path), move: (from, to) => move(from, to), diff --git a/src/main/services/i18n/index.ts b/src/main/services/i18n/index.ts index 317ff69b..2e1f340d 100644 --- a/src/main/services/i18n/index.ts +++ b/src/main/services/i18n/index.ts @@ -3,6 +3,7 @@ import { join } from 'path' import i18next from 'i18next' import Backend from 'i18next-fs-backend' import { store } from '../../store' +import { language } from './language' const lng = store.preferences.get('language') @@ -23,13 +24,6 @@ i18next.use(Backend).init({ } }) -i18next.addResourceBundle(lng, 'language', { - en: 'English', - es_ES: 'Español', - ru: 'Русский', - zh_CN: '中文 (简体)', - zh_TW: '中文 (繁體)', - zh_HK: '中文 (繁體 香港特別行政區)' -}) +i18next.addResourceBundle(lng, 'language', language) export default i18next diff --git a/src/main/services/i18n/language.ts b/src/main/services/i18n/language.ts new file mode 100644 index 00000000..cd6f4a63 --- /dev/null +++ b/src/main/services/i18n/language.ts @@ -0,0 +1,9 @@ +export const language = { + en: 'English', + es_ES: 'Español', + pt_BR: 'Português (Brasil)', + ru: 'Русский', + zh_CN: '中文 (简体)', + zh_TW: '中文 (繁體)', + zh_HK: '中文 (繁體 香港特別行政區)' +} diff --git a/src/main/services/i18n/locales/README.md b/src/main/services/i18n/locales/README.md index f9fd851b..9cd64844 100644 --- a/src/main/services/i18n/locales/README.md +++ b/src/main/services/i18n/locales/README.md @@ -3,27 +3,15 @@ ## Add new Locales - Make a duplicate of the `en` folder, then rename it to the necessary [two-letter locale code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes). - Translate each value in each of the files. - - Add new [prop](https://github.com/massCodeIO/massCode/blob/master/src/main/services/i18n/index.ts#L26) to i18n where the prop name corresponds to the name of the folder + - Add new [prop](https://github.com/massCodeIO/massCode/blob/master/src/main/services/i18n/language.ts#L1) to i18n where the prop name corresponds to the name of the folder ```js ... // 'en' for prop & 'English' for value - i18next.addResourceBundle(lng, 'language', { + export const language = { ... en: 'English', ... - }) -... -``` - - Add new [option](https://github.com/massCodeIO/massCode/blob/master/src/renderer/components/preferences/LanguagePreferences.vue#L42) for language selector where the name of the language corresponds to the name of the folder - -```js -... - // 'en' for label & value - { - label: i18n.t('preferences:language.en'), - value: 'en' } ... ``` - - Make PR. diff --git a/src/main/services/i18n/locales/en/common.json b/src/main/services/i18n/locales/en/common.json index 0bac4536..a3481ad7 100644 --- a/src/main/services/i18n/locales/en/common.json +++ b/src/main/services/i18n/locales/en/common.json @@ -2,11 +2,13 @@ "button": { "moveStorage": "Move Storage", "openStorage": "Open Storage", + "newStorage": "New Storage", "fromMassCodeV1": "From massCode v1.0", "fromSnippetsLab": "From SnippetsLab", "confirm": "Confirm", "cancel": "Cancel", - "update": ["Go to GitHub", "OK"] + "update": ["Go to GitHub", "OK"], + "ok": "OK" }, "newFolder": "New Folder", "newSnippet": "New Snippet", @@ -54,5 +56,7 @@ "restartApp": "Restart massCode", "updateAvailable": "Update Available", "hide": "Hide", - "show": "Show" -} \ No newline at end of file + "show": "Show", + "collapse-all": "Collapse All", + "expand-all": "Expand All" +} diff --git a/src/main/services/i18n/locales/en/dialog.json b/src/main/services/i18n/locales/en/dialog.json index 24d6d510..e5087f0f 100644 --- a/src/main/services/i18n/locales/en/dialog.json +++ b/src/main/services/i18n/locales/en/dialog.json @@ -8,5 +8,6 @@ "migrateConfirm": [ "Are you sure you want to migrate from {{name}}?", "During migrate, the current library will be overwritten." - ] -} \ No newline at end of file + ], + "createDb": "Please select another folder" +} diff --git a/src/main/services/i18n/locales/en/menu.json b/src/main/services/i18n/locales/en/menu.json index b7a6daa4..a8228960 100644 --- a/src/main/services/i18n/locales/en/menu.json +++ b/src/main/services/i18n/locales/en/menu.json @@ -32,7 +32,10 @@ "payPal": "Donate via PayPal" }, "twitter": "Twitter", - "devTools": "Toggle Developer Tools" + "devTools": "Toggle Developer Tools", + "links": { + "snippets": "Snippet Collection" + } }, "file": { "label": "File", @@ -65,4 +68,4 @@ "previewCode": "Preview Code", "previewScreenshot": "Preview Screenshot" } -} \ No newline at end of file +} diff --git a/src/main/services/i18n/locales/en/special.json b/src/main/services/i18n/locales/en/special.json index d0fe06c3..d183cfee 100644 --- a/src/main/services/i18n/locales/en/special.json +++ b/src/main/services/i18n/locales/en/special.json @@ -16,9 +16,10 @@ "migrate": "DB successfully migrated." }, "error": { + "folderContainDb": "Folder already contain \"db.json\".", "folderNotContainDb": "Folder not contain \"db.json\"." }, "unsponsored": "Unsponsored", "supportMessage": "Hi, Anton here 👋

\nThanks for using massCode. If you find this app useful, please {{-tagStart}} donate {{-tagEnd}}. It will inspire me to continue development on the project.", "snippetsShowcase": "Snippets Showcase" -} \ No newline at end of file +} diff --git a/src/main/services/i18n/locales/es_ES/common.json b/src/main/services/i18n/locales/es_ES/common.json index cc6fb828..50389d22 100644 --- a/src/main/services/i18n/locales/es_ES/common.json +++ b/src/main/services/i18n/locales/es_ES/common.json @@ -10,7 +10,7 @@ }, "newFolder": "Nueva Carpeta", "newSnippet": "Nuevo Snippet", - "newFragment": "Nuevo Fragment", + "newFragment": "Nuevo Fragmento", "addDescription": "Agregar Descripción", "addToFavorites": "Agregar a Favoritos", "addTag": "Agregar Etiqueta", diff --git a/src/main/services/i18n/locales/es_ES/menu.json b/src/main/services/i18n/locales/es_ES/menu.json index 4b5a0221..1edf232f 100644 --- a/src/main/services/i18n/locales/es_ES/menu.json +++ b/src/main/services/i18n/locales/es_ES/menu.json @@ -61,8 +61,8 @@ "label": "Editor", "copy": "Copiar Snippet al Portapapeles", "format": "Formato", - "previewMarkdown": "Pré-visualizar en Markdown", - "previewCode": "Pré-visualizar Codigo", - "previewScreenshot": "Pré-visualizar Captura de Pantalla" + "previewMarkdown": "Previsualizar en Markdown", + "previewCode": "Previsualizar Código", + "previewScreenshot": "Previsualizar Captura de Pantalla" } } diff --git a/src/main/services/i18n/locales/es_ES/special.json b/src/main/services/i18n/locales/es_ES/special.json index b9901a43..98340b2b 100644 --- a/src/main/services/i18n/locales/es_ES/special.json +++ b/src/main/services/i18n/locales/es_ES/special.json @@ -18,7 +18,7 @@ "error": { "folderNotContainDb": "La carpeta no contiene \"db.json\"." }, - "unsponsored": "Sin Patrocinio", + "unsponsored": "Sin Patrocinar", "supportMessage": "Hola, soy Anton 👋

\nGracias por usar massCode. Si encuentras útil esta aplicación, por favor {{-tagStart}} dona {{-tagEnd}}. Me inspirará a continuar desarrollando este proyecto.", "snippetsShowcase": "Muestra de Snippets" } diff --git a/src/main/services/i18n/locales/pt_BR/common.json b/src/main/services/i18n/locales/pt_BR/common.json new file mode 100644 index 00000000..df32bdc6 --- /dev/null +++ b/src/main/services/i18n/locales/pt_BR/common.json @@ -0,0 +1,58 @@ +{ + "button": { + "moveStorage": "Mover itens armazenados", + "openStorage": "Abrir armazenamento ", + "fromMassCodeV1": "Vindo do Masscode v1.0", + "fromSnippetsLab": "Vindo do SnippetsLab", + "confirm": "Confirmar", + "cancel": "Cancelar", + "update": ["Ir para o GitHub", "OK"] + }, + "newFolder": "Nova pasta", + "newSnippet": "Novo Snippet", + "newFragment": "Novo Fragmento", + "addDescription": "Adicionar descrição", + "addToFavorites": "Adicionar aos favoritos", + "addTag": "Adicionar etiqueta", + "exportToHtml": "Exportar para HTML", + "saveScreenshot": "Salvar captura de tela", + "rename": "Renomear", + "duplicate": "Duplicar", + "delete": "Apagar", + "deleteNow": "Apagar agora", + "defaultLanguage": "Linguagem padrão", + "removeFromFavorites": "Remover dos favoritos", + "emptyTrash": "Esvaziar lixeira", + "close": "Fechar", + "folder": { + "untitled": "Pasta sem título", + "plural": "Pastas" + }, + "snippet": { + "untitled": "snippet sem título", + "plural": "Snippets", + "emptyName": "Digite o nome do snippet", + "selectedMultiple": "{{count}} Snippets selecionados", + "noSelected": "Nenhum snippet selecionado" + }, + "fragment": "Fragmento", + "search": "Procurar", + "line": "Linha", + "column": "Coluna", + "sidebar": { + "inbox": "Caixa de entrada", + "favorites": "Favoritos", + "allSnippets": "Todos os snippets", + "trash": "Lixeira", + "untitled": "Pasta sem título", + "folders": "Pastas", + "library": "Biblioteca", + "tags": "Etiquetas" + }, + "darkMode": "Modo escuro", + "background": "Fundo", + "restartApp": "Reiniciar massCode", + "updateAvailable": "Atualização disponível", + "hide": "Ocultar", + "show": "Mostrar" +} \ No newline at end of file diff --git a/src/main/services/i18n/locales/pt_BR/dialog.json b/src/main/services/i18n/locales/pt_BR/dialog.json new file mode 100644 index 00000000..0831289c --- /dev/null +++ b/src/main/services/i18n/locales/pt_BR/dialog.json @@ -0,0 +1,12 @@ +{ + "deleteConfirm": "Tem certeza de que deseja excluir permanentemente {{name}}?", + "deleteConfirmMultipleSnippets": "Tem certeza de que deseja excluir permanentemente {{count}} snippets?", + "noUndo": "Você não pode desfazer esta ação.", + "allSnippetsMoveToTrash": "Todos os snippets nesta pasta serão movidos para a lixeira.", + "deleteTag": "Isso também fará com que todos os snippets tenham essa etiqueta removida.", + "emptyTrash": "Tem certeza de que deseja excluir permanentemente todos os snippets da Lixeira?", + "migrateConfirm": [ + "Tem certeza de que deseja migrar de {{name}}?", + "Durante a migração, a biblioteca atual será substituída." + ] +} \ No newline at end of file diff --git a/src/main/services/i18n/locales/pt_BR/menu.json b/src/main/services/i18n/locales/pt_BR/menu.json new file mode 100644 index 00000000..517a08d2 --- /dev/null +++ b/src/main/services/i18n/locales/pt_BR/menu.json @@ -0,0 +1,68 @@ +{ + "app": { + "label": "massCode", + "preferences": "Preferências", + "update": { + "label": "Verificar atualizações....", + "message": "Versão {{newVersion}} já está disponível para download.\nSua versão é {{oldVersion}}.", + "button": ["Ir até o Github", "OK"], + "noUpdate": "No momento, não há atualizações disponíveis." + }, + "quit": "Sair do massCode", + "about": "Sobre o massCode", + "hide": "Ocultar o massCode", + "hideOther": "Ocultar outros", + "showAll": "Mostrar tudo" + }, + "help": { + "label": "Ajuda", + "website": "Site", + "documentation": "Documentação", + "viewInGitHub": "Ver no GitHub", + "changeLog": "Registro de mudanças", + "reportIssue": "Reportar um problema", + "giveStar": "Dar uma estrela", + "extension": { + "vscode": "Extensão do VS code", + "raycast": "Extensão do Raycast", + "alfred": "Extensão do Alfred" + }, + "donate": { + "openCollective": "Doação coletiva", + "payPal": "Doação via PayPal" + }, + "twitter": "Twitter", + "devTools": "Alternar ferramentas do desenvolvedor" + }, + "file": { + "label": "Arquivo", + "find": "Procurar" + }, + "view": { + "label": "Visualizar", + "sortBy": { + "label": "Classificar snippes por", + "dateModified": "Data da modificação", + "dateCreated": "Data da criação", + "name": "Name" + } + }, + "edit": { + "label": "Editar", + "undo": "Desfazer", + "redo": "Refazer", + "cut": "Cortar", + "copy": "Copiar", + "paste": "Colar", + "delete": "Apagar", + "selectAll": "Selecionar tudo" + }, + "editor": { + "label": "Editor", + "copy": "Copiar para área de transferencia", + "format": "Formatar", + "previewMarkdown": "Pré-visualizar marcador", + "previewCode": "Pré-visualizar código", + "previewScreenshot": "Pré-visualizar captura de tela" + } +} \ No newline at end of file diff --git a/src/main/services/i18n/locales/pt_BR/preferences.json b/src/main/services/i18n/locales/pt_BR/preferences.json new file mode 100644 index 00000000..e6d47da3 --- /dev/null +++ b/src/main/services/i18n/locales/pt_BR/preferences.json @@ -0,0 +1,44 @@ +{ + "title": "Preferências", + "storage": { + "label": "Armazenar", + "migrate": "Migrar", + "count": "Total" + }, + "editor": { + "label": "Editor", + "fontSize": "Tamanho da fonte", + "fontFamily": "Nome da fonte", + "wrap": { + "label": "Quebra", + "wordWrap": "Quebra de linha", + "off": "Desligado" + }, + "tabSize": "Tamanho da guia", + "showInvisibles": "Mostrar itens ocultos", + "highlightLine": "Destacar linha", + "highlightGutter": "Destacar área em branco", + "prettier": { + "label": "Embelezar", + "trailingComma": { + "label": "Vírgula à direita", + "none": "Nenhum", + "all": "Tudo", + "es6": "ES6" + }, + "semi": "Semi", + "singleQuote": "Citação única" + } + }, + "appearance": { + "label": "Aparência", + "theme": { + "label": "Tema", + "light": "Claro", + "dark": "Escuro" + } + }, + "language": { + "label": "Idioma" + } +} \ No newline at end of file diff --git a/src/main/services/i18n/locales/pt_BR/special.json b/src/main/services/i18n/locales/pt_BR/special.json new file mode 100644 index 00000000..90458caf --- /dev/null +++ b/src/main/services/i18n/locales/pt_BR/special.json @@ -0,0 +1,24 @@ +{ + "description": { + "storage": "Para usar serviços de sincronização como iCloud Drive, Google Drive ou Dropbox, basta mover o armazenamento para as pastas sincronizadas correspondentes", + "migrate": { + "1": "Para migrar do massCode versão 1.0 selecione a pasta que contém os arquivos do banco de dados.", + "2": "Para migrar do SnippetsLab selecione o arquivo JSON.", + "3": [ + "Algumas Limitações. Durante a migração do SnippetsLab:", + "Todas as pastas serão de primeiro nível, pois o arquivo JSON (abaixo da v2.1) não representa pastas aninhadas.", + "Trechos com idiomas não suportados serão definidos como texto simples padrão." + ] + }, + "htmlCssPreview": "Adicione fragmentos com linguagens HTML e CSS para visualizar o resultado." + }, + "success": { + "migrate": "Banco de dados migrado com sucesso." + }, + "error": { + "folderNotContainDb": "Pasta não contém \"db.json\"." + }, + "unsponsored": "Não patrocinado", + "supportMessage": "Oi, Anton aqui 👋

\nObrigado por usar o massCode. Se você achar este aplicativo útil, por favor {{-tagStart}} doe {{-tagEnd}}. Isso me inspirará a continuar o desenvolvimento do projeto.", + "snippetsShowcase": "Exibir Snippets" +} \ No newline at end of file diff --git a/src/main/services/i18n/locales/ru/common.json b/src/main/services/i18n/locales/ru/common.json index 6360297d..cc7eb5ed 100644 --- a/src/main/services/i18n/locales/ru/common.json +++ b/src/main/services/i18n/locales/ru/common.json @@ -2,10 +2,12 @@ "button": { "moveStorage": "Переместить", "openStorage": "Открыть", + "newStorage": "Создать новое", "fromMassCodeV1": "Из massCode v1.0", "fromSnippetsLab": "Из SnippetsLab", "confirm": "Подтвердить", - "cancel": "Отмена" + "cancel": "Отмена", + "ok": "Хорошо" }, "newFolder": "Новая папка", "newSnippet": "Новый сниппет", @@ -53,5 +55,7 @@ "restartApp": "Перезагрузить massCode", "updateAvailable": "Доступно обновление", "hide": "Hide", - "show": "Show" -} \ No newline at end of file + "show": "Show", + "collapse-all": "Закрыть все", + "expand-all": "Открыть все" +} diff --git a/src/main/services/i18n/locales/ru/dialog.json b/src/main/services/i18n/locales/ru/dialog.json index 473bfbe0..d5ffe907 100644 --- a/src/main/services/i18n/locales/ru/dialog.json +++ b/src/main/services/i18n/locales/ru/dialog.json @@ -8,5 +8,6 @@ "migrateConfirm": [ "Вы уверены что хотите мигрировать {{name}}?", "Во время миграции, текущая библиотека буде перезаписана." - ] -} \ No newline at end of file + ], + "createDb": "Пожалуйста выберите другую папку" +} diff --git a/src/main/services/i18n/locales/ru/menu.json b/src/main/services/i18n/locales/ru/menu.json index e3464b31..86acdd1c 100644 --- a/src/main/services/i18n/locales/ru/menu.json +++ b/src/main/services/i18n/locales/ru/menu.json @@ -32,7 +32,10 @@ "payPal": "Пожертвовать через PayPal" }, "twitter": "Twitter", - "devTools": "Открыть инструменты разработчика" + "devTools": "Открыть инструменты разработчика", + "links": { + "snippets": "Коллекция сниппетов" + } }, "file": { "label": "Файл", @@ -65,4 +68,4 @@ "previewCode": "Просмотр результата HTML/CSS", "previewScreenshot": "Просмотр скриншота" } -} \ No newline at end of file +} diff --git a/src/main/services/i18n/locales/ru/special.json b/src/main/services/i18n/locales/ru/special.json index 1338cc6c..17065a98 100644 --- a/src/main/services/i18n/locales/ru/special.json +++ b/src/main/services/i18n/locales/ru/special.json @@ -16,9 +16,10 @@ "migrate": "БД успешно перенесена." }, "error": { + "folderContainDb": "Папка уже содержит \"db.json\".", "folderNotContainDb": "Папка не содержит \"db.json\"." }, "unsponsored": "Неспонсируемое", "supportMessage": "Привет, это Антон 👋

\nСпасибо что используете massCode. Если приложение оказалось для вас полезным, пожалуйста {{-tagStart}} поддержите проект {{-tagEnd}}. Это вдохновит меня для продолжение работы над проектом.", "snippetsShowcase": "Коллекция сниппетов" -} \ No newline at end of file +} diff --git a/src/main/services/ipc/context-menu.ts b/src/main/services/ipc/context-menu.ts index 205d0726..1a4be84f 100644 --- a/src/main/services/ipc/context-menu.ts +++ b/src/main/services/ipc/context-menu.ts @@ -266,6 +266,27 @@ export const subscribeToContextMenu = () => { } }, { type: 'separator' }, + { + label: i18n.t('collapse-all'), + click: () => { + resolve({ + action: 'collapse-all', + type, + data: undefined + }) + } + }, + { + label: i18n.t('expand-all'), + click: () => { + resolve({ + action: 'expand-all', + type, + data: undefined + }) + } + }, + { type: 'separator' }, { label: i18n.t('defaultLanguage'), submenu: createLanguageMenu() diff --git a/src/main/services/ipc/fs.ts b/src/main/services/ipc/fs.ts index 0caf1d3e..6c5e584b 100644 --- a/src/main/services/ipc/fs.ts +++ b/src/main/services/ipc/fs.ts @@ -1,23 +1,27 @@ +import { store } from '../../store' import { ipcMain } from 'electron' -import { readFileSync } from 'fs-extra' -import { join } from 'path' +import { ensureDirSync, copySync } from 'fs-extra' +import { join, parse } from 'path' +import { nanoid } from 'nanoid' +import slash from 'slash' -const STATIC_PATH = '../../../static' +const ASSETS_DIR = 'assets' export const subscribeToFs = () => { - interface Payload { - path: string - encoding?: BufferEncoding - } - ipcMain.handle('main:fs-read', (event, payload: Payload) => { - const { path, encoding } = payload + ipcMain.handle('main:copy-to-assets', (event, payload) => { return new Promise(resolve => { - const file = readFileSync( - join(__dirname, STATIC_PATH) + path, - encoding || null - ) + const storagePath = store.preferences.get('storagePath') + const payloadPath = payload + const assetsPath = join(storagePath, ASSETS_DIR) + const { ext } = parse(payloadPath) - resolve(file) + const name = `${nanoid()}${ext}` + const dest = join(assetsPath, name) + + ensureDirSync(assetsPath) + copySync(payloadPath, dest) + + resolve(slash(join(ASSETS_DIR, name))) }) }) } diff --git a/src/main/services/ipc/index.ts b/src/main/services/ipc/index.ts index dffade0c..fe1cbbc0 100644 --- a/src/main/services/ipc/index.ts +++ b/src/main/services/ipc/index.ts @@ -1,7 +1,7 @@ import { subscribeToContextMenu } from './context-menu' +import { subscribeToFs } from './fs' import { subscribeToNotification } from './notifications' import { subscribeToPrettier } from './prettier' -import { subscribeToFs } from './fs' export const subscribeToChannels = () => { subscribeToContextMenu() diff --git a/src/renderer/App.vue b/src/renderer/App.vue index 1320b001..2b2e68c9 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -43,6 +43,7 @@ import { useRoute } from 'vue-router' import type { Snippet } from '@shared/types/main/db' import { addDays, isSameDay, isYesterday } from 'date-fns' import { loadWASM } from 'onigasm' +import onigasmFile from 'onigasm/lib/onigasm.wasm?url' import { loadGrammars } from '@/components/editor/grammars' // По какой то причине необходимо явно установить роут в '/' @@ -58,7 +59,7 @@ const isUpdateAvailable = ref(false) const isSupportToastShow = ref(false) const init = async () => { - await loadOnigasm() + loadWASM(onigasmFile) await loadGrammars() const theme = store.preferences.get('theme') @@ -89,14 +90,6 @@ const init = async () => { checkForRemoteNotification() } -const loadOnigasm = async () => { - const file = await ipc.invoke('main:fs-read', { - path: '/onigasm/onigasm.wasm' - }) - - loadWASM(new Uint8Array(file).buffer) -} - const setTheme = (theme: string) => { document.body.dataset.theme = theme } diff --git a/src/renderer/assets/scss/themes.scss b/src/renderer/assets/scss/themes.scss index b6118694..98871901 100644 --- a/src/renderer/assets/scss/themes.scss +++ b/src/renderer/assets/scss/themes.scss @@ -1,3 +1,7 @@ +//TODO: оптимизировать + +// LIGHT + [data-theme='light:solarized'] { --color-primary: hsl(44, 84%, 54%); @@ -36,6 +40,12 @@ --color-tag-delete: var(--color-contrast-lower-alt4); } +[data-theme='light:material'] { + --color-bg: hsl(0, 0%, 98%); +} + +// DARK + [data-theme='dark:one'] { --color-primary: hsl(215, 69%, 45%); @@ -186,7 +196,7 @@ --color-contrast-lower: hsl(200, 19%, 22%); --color-contrast-lower-alt: hsl(200, 19%, 25%); - --color-contrast-lower-alt2: hsl(200, 19%, 25%); + --color-contrast-lower-alt2: hsl(200, 19%, 27%); --color-contrast-lower-alt3: hsl(200, 19%, 30%); --color-contrast-lower-low: hsl(200, 19%, 40%); --color-contrast-lower-medium: hsl(200, 19%, 50%); @@ -214,6 +224,77 @@ --color-tag-delete: var(--color-contrast-lower-alt3); } -[data-theme='light:material'] { - --color-bg: hsl(0, 0%, 98%); -} \ No newline at end of file + +[data-theme='dark:material-palenight'] { + --color-primary: hsl(215, 69%, 45%); + + // при конвертации в hsl цвет отличается, поэтому оставляем в hex + --color-bg: #292D3F; + + + --color-contrast-lower: hsl(229, 21%, 22%); + --color-contrast-lower-alt: hsl(229, 21%, 25%); + --color-contrast-lower-alt2: hsl(229, 21%, 27%); + --color-contrast-lower-alt3: hsl(229, 21%, 30%); + --color-contrast-lower-low: hsl(229, 21%, 40%); + --color-contrast-lower-medium: hsl(229, 21%, 50%); + + --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(0, 0%, 70%); + + --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); + + --color-menu-selected: var(--color-contrast-lower-alt); + + --color-tag-delete: var(--color-contrast-lower-alt3); +} + +[data-theme='dark:tokyo-night'] { + --color-primary: hsl(215, 69%, 45%); + + // при конвертации в hsl цвет отличается, поэтому оставляем в hex + --color-bg: #1C2029; + + + --color-contrast-lower: hsl(229, 21%, 20%); + --color-contrast-lower-alt: hsl(229, 21%, 22%); + --color-contrast-lower-alt2: hsl(229, 21%, 25%); + --color-contrast-lower-alt3: hsl(229, 21%, 30%); + --color-contrast-lower-low: hsl(229, 21%, 40%); + --color-contrast-lower-medium: hsl(229, 21%, 50%); + + --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(0, 0%, 70%); + + --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); + + --color-menu-selected: var(--color-contrast-lower-alt); + + --color-tag-delete: var(--color-contrast-lower-alt3); +} diff --git a/src/renderer/components/editor/EditorCodemirror.vue b/src/renderer/components/editor/EditorCodemirror.vue index 148fb027..e1e1f224 100644 --- a/src/renderer/components/editor/EditorCodemirror.vue +++ b/src/renderer/components/editor/EditorCodemirror.vue @@ -159,6 +159,21 @@ const init = async () => { }) editor.on('scroll', hideScrollbar) + editor.on('paste', async (cm, e) => { + if (props.lang === 'markdown') { + const item = e.clipboardData?.items[0] + + if (item?.type.startsWith('image')) { + e.preventDefault() + + const blob = item.getAsFile() + const path = await ipc.invoke('main:copy-to-assets', blob?.path) + + cm.replaceSelection(`![](./${path})`) + } + } + }) + editor.setOption('extraKeys', { 'Cmd-F': () => { emitter.emit('search:focus', true) @@ -208,6 +223,8 @@ const findAll = (query: string) => { } const clearAllMarks = () => { + if (!editor) return + const marks = editor.getAllMarks() if (marks) { diff --git a/src/renderer/components/editor/themes.ts b/src/renderer/components/editor/themes.ts index 5bc3b75d..9c81bbff 100644 --- a/src/renderer/components/editor/themes.ts +++ b/src/renderer/components/editor/themes.ts @@ -4,6 +4,7 @@ import type { Theme } from '@shared/types/renderer/store/app' interface ThemeConfig { name: string // Имя темы из файла .tmTheme.json + label: string value: Theme loader: () => Promise gutterSettings: { @@ -15,6 +16,7 @@ interface ThemeConfig { export const themes: ThemeConfig[] = [ { name: 'Dracula', + label: 'Dracula', value: 'dark:dracula', loader: () => import('./themes/dracula.tmTheme.json'), gutterSettings: { @@ -24,6 +26,7 @@ export const themes: ThemeConfig[] = [ }, { name: 'Material-Theme', + label: 'Material', value: 'dark:material', loader: () => import('./themes/material-theme.tmTheme.json'), gutterSettings: { @@ -31,8 +34,19 @@ export const themes: ThemeConfig[] = [ divider: '#263238' } }, + { + name: 'Material-Theme-Palenight', + label: 'Material Palenight', + value: 'dark:material-palenight', + loader: () => import('./themes/material-theme-palenight.tmTheme.json'), + gutterSettings: { + background: '#292D3F', + divider: '#292D3F' + } + }, { name: 'Merbivore-Soft', + label: 'Merbivore Soft', value: 'dark:merbivore', loader: () => import('./themes/merbivore-soft.tmTheme.json'), gutterSettings: { @@ -42,6 +56,7 @@ export const themes: ThemeConfig[] = [ }, { name: 'Monokai', + label: 'Monokai', value: 'dark:monokai', loader: () => import('./themes/monokai.tmTheme.json'), gutterSettings: { @@ -51,6 +66,7 @@ export const themes: ThemeConfig[] = [ }, { name: 'One-Dark', + label: 'One', value: 'dark:one', loader: () => import('./themes/one-dark.tmTheme.json'), gutterSettings: { @@ -58,8 +74,19 @@ export const themes: ThemeConfig[] = [ divider: '#282C34' } }, + { + name: 'Tokyo-Night', + label: 'Tokyo Night', + value: 'dark:tokyo-night', + loader: () => import('./themes/tokyo-night.tmTheme.json'), + gutterSettings: { + background: '#1C2029', + divider: '#1C2029' + } + }, { name: 'GitHub', + label: 'GitHub', value: 'light:github', loader: () => import('./themes/github.tmTheme.json'), gutterSettings: { @@ -69,6 +96,7 @@ export const themes: ThemeConfig[] = [ }, { name: 'Solarized-Light', + label: 'Solarized', value: 'light:solarized', loader: () => import('./themes/solarized-light.tmTheme.json'), gutterSettings: { @@ -78,6 +106,7 @@ export const themes: ThemeConfig[] = [ }, { name: 'Material-Theme-Lighter', + label: 'Material', value: 'light:material', loader: () => import('./themes/material-theme-lighter.tmTheme.json'), gutterSettings: { diff --git a/src/renderer/components/editor/themes/material-theme-palenight.tmTheme.json b/src/renderer/components/editor/themes/material-theme-palenight.tmTheme.json new file mode 100644 index 00000000..1a0329aa --- /dev/null +++ b/src/renderer/components/editor/themes/material-theme-palenight.tmTheme.json @@ -0,0 +1,2119 @@ +{ + "author": "Mattia Astorino", + "semanticClass": "material.theme.palenight", + "settings": [ + { + "name": "mon_color", + "scope": "mcol_3B8070FF", + "settings": { + "foreground": "#7FC3B3FF", + "caret": "#7FC3B3FF", + "background": "#3B8070FF" + } + }, + { + "name": "mon_text_color", + "scope": "mcol_text_3B8070FF", + "settings": { + "foreground": "#3B8070FF", + "caret": "#7FC3B3FF", + "background": "#3B8071FF" + } + }, + { + "name": "mon_color", + "scope": "mcol_3B8070FF", + "settings": { + "foreground": "#7FC3B3FF", + "caret": "#7FC3B3FF", + "background": "#3B8070FF" + } + }, + { + "name": "mon_text_color", + "scope": "mcol_text_3B8070FF", + "settings": { + "foreground": "#3B8070FF", + "caret": "#7FC3B3FF", + "background": "#3B8071FF" + } + }, + { + "name": "mon_color", + "scope": "mcol_3B8070FF", + "settings": { + "foreground": "#7FC3B3FF", + "caret": "#7FC3B3FF", + "background": "#3B8070FF" + } + }, + { + "name": "mon_text_color", + "scope": "mcol_text_3B8070FF", + "settings": { + "foreground": "#3B8070FF", + "caret": "#7FC3B3FF", + "background": "#3B8071FF" + } + }, + { + "name": "mon_color", + "scope": "mcol_3B8070FF", + "settings": { + "foreground": "#7FC3B3FF", + "caret": "#7FC3B3FF", + "background": "#3B8070FF" + } + }, + { + "name": "mon_text_color", + "scope": "mcol_text_3B8070FF", + "settings": { + "foreground": "#3B8070FF", + "caret": "#7FC3B3FF", + "background": "#fbfbfcFF" + } + }, + { + "name": "mon_color", + "scope": "mcol_fbfbfbFF", + "settings": { + "foreground": "#040404FF", + "caret": "#040404FF", + "background": "#fbfbfbFF" + } + }, + { + "name": "mon_text_color", + "scope": "mcol_text_fbfbfbFF", + "settings": { + "foreground": "#fbfbfbFF", + "caret": "#040404FF", + "background": "#292D3fFF" + } + }, + { + "name": "mon_color", + "scope": "mcol_e8ecedFF", + "settings": { + "foreground": "#111516FF", + "caret": "#111516FF", + "background": "#e8ecedFF" + } + }, + { + "name": "mon_text_color", + "scope": "mcol_text_e8ecedFF", + "settings": { + "foreground": "#e8ecedFF", + "caret": "#111516FF", + "background": "#292D3fFF" + } + }, + { + "name": "mon_color", + "scope": "mcol_3B8070FF", + "settings": { + "foreground": "#7FC3B3FF", + "caret": "#7FC3B3FF", + "background": "#3B8070FF" + } + }, + { + "name": "mon_text_color", + "scope": "mcol_text_3B8070FF", + "settings": { + "foreground": "#3B8070FF", + "caret": "#7FC3B3FF", + "background": "#292D3fFF" + } + }, + { + "name": "mon_color", + "scope": "mcol_0000000D", + "settings": { + "foreground": "#FFFFFFFF", + "caret": "#FFFFFFFF", + "background": "#0000000D" + } + }, + { + "name": "mon_text_color", + "scope": "mcol_text_0000000D", + "settings": { + "foreground": "#0000000D", + "caret": "#FFFFFFFF", + "background": "#292D3fFF" + } + }, + { + "name": "mon_color", + "scope": "mcol_f7f9fbFF", + "settings": { + "foreground": "#040608FF", + "caret": "#040608FF", + "background": "#f7f9fbFF" + } + }, + { + "name": "mon_text_color", + "scope": "mcol_text_f7f9fbFF", + "settings": { + "foreground": "#f7f9fbFF", + "caret": "#040608FF", + "background": "#292D3fFF" + } + }, + { + "settings": { + "guide": "#4E557980", + "caret": "#FFCC00", + "findHighlight": "#F8E71C", + "phantomCss": " html { background-color: #292D3E; color: #959DCB; padding: 16px; } a { color: #B2CCD6; line-height: 16px; } .error, .deleted { color: #FF5370; } .success, .inserted { color: #C3E88D; } .warning, .modified { color: #FFCB6B; } .type { color: #89DDFF; font-style: italic; } .param { color: #F78C6C; } .current { text-decoration: underline; } ", + "shadow": "#00000010", + "stackGuide": "#4E5579", + "lineHighlight": "#00000030", + "gutterForeground": "#3A3F58", + "foreground": "#959DCB", + "background": "#292D3E", + "selectionBorder": "#717CB440", + "activeGuide": "#828ED5", + "invisibles": "#4E5579", + "selection": "#717CB440" + } + }, + { + "name": "Comments", + "scope": "comment, punctuation.definition.comment", + "settings": { + "fontStyle": "italic", + "foreground": "#676E95" + } + }, + { + "name": "Variable", + "scope": "variable, string constant.other.placeholder", + "settings": { + "foreground": "#959DCB" + } + }, + { + "name": "Colors", + "scope": "constant.other.color", + "settings": { + "foreground": "#ffffff" + } + }, + { + "name": "Invalid", + "scope": "invalid, invalid.illegal, invalid.broken", + "settings": { + "foreground": "#ffffff", + "background": "#FF5370" + } + }, + { + "name": "Unimplemented", + "scope": "invalid.unimplemented", + "settings": { + "foreground": "#ffffff", + "background": "#C3E88D" + } + }, + { + "name": "Invalid deprecated", + "scope": "invalid.deprecated", + "settings": { + "foreground": "#ffffff", + "background": "#C792EA" + } + }, + { + "name": "Keyword, Storage", + "scope": "keyword, storage.type, storage.modifier", + "settings": { + "foreground": "#C792EA" + } + }, + { + "name": "Keyword, Storage", + "scope": "storage.type, keyword.control", + "settings": { + "fontStyle": "italic" + } + }, + { + "name": "Operator, Misc", + "scope": "keyword.operator, constant.other.color, punctuation, meta.tag, punctuation.definition.tag, punctuation.separator.inheritance.php, punctuation.definition.tag.html, punctuation.definition.tag.begin.html, punctuation.definition.tag.end.html, punctuation.section.embedded, keyword.other.template, keyword.other.substitution", + "settings": { + "foreground": "#89DDFF" + } + }, + { + "name": "Tag", + "scope": "entity.name.tag, meta.tag.sgml, markup.deleted.git_gutter", + "settings": { + "foreground": "#f07178" + } + }, + { + "name": "Function, Special Method, Block Level", + "scope": "entity.name.function, meta.function-call, variable.function, support.function, keyword.other.special-method, meta.block-level", + "settings": { + "foreground": "#82AAFF" + } + }, + { + "name": "Other Variable, String Link", + "scope": "support.other.variable, string.other.link", + "settings": { + "foreground": "#f07178" + } + }, + { + "name": "Number, Constant, Function Argument, Tag Attribute, Embedded", + "scope": "constant.numeric, constant.language, support.constant, constant.character, variable.parameter, keyword.other.unit", + "settings": { + "foreground": "#F78C6C" + } + }, + { + "name": "String, Symbols, Inherited Class, Markup Heading", + "scope": "string, constant.other.symbol, constant.other.key, entity.other.inherited-class, markup.heading, markup.inserted.git_gutter, meta.group.braces.curly constant.other.object.key.js string.unquoted.label.js", + "settings": { + "fontStyle": "normal", + "foreground": "#C3E88D" + } + }, + { + "name": "Class, Support", + "scope": "entity.name.class, entity.name.type.class, support.type, support.class, support.orther.namespace.use.php, meta.use.php, support.other.namespace.php, markup.changed.git_gutter, support.type.sys-types", + "settings": { + "foreground": "#FFCB6B" + } + }, + { + "name": "CSS Class and Support", + "scope": "source.css support.type, source.sass support.type, source.scss support.type, source.less support.type, source.stylus support.type", + "settings": { + "foreground": "#B2CCD6" + } + }, + { + "name": "Sub-methods", + "scope": "entity.name.module.js, variable.import.parameter.js, variable.other.class.js", + "settings": { + "foreground": "#FF5370" + } + }, + { + "name": "Language methods", + "scope": "variable.language", + "settings": { + "fontStyle": "italic", + "foreground": "#FF5370" + } + }, + { + "name": "entity.name.method.js", + "scope": "entity.name.method.js", + "settings": { + "foreground": "#82AAFF" + } + }, + { + "name": "meta.method.js", + "scope": "meta.class-method.js entity.name.function.js, variable.function.constructor", + "settings": { + "foreground": "#82AAFF" + } + }, + { + "name": "Attributes", + "scope": "entity.other.attribute-name", + "settings": { + "foreground": "#C792EA" + } + }, + { + "name": "HTML Attributes", + "scope": "text.html.basic entity.other.attribute-name.html, text.html.basic entity.other.attribute-name", + "settings": { + "fontStyle": "italic", + "foreground": "#FFCB6B" + } + }, + { + "name": "CSS Classes", + "scope": "entity.other.attribute-name.class", + "settings": { + "foreground": "#FFCB6B" + } + }, + { + "name": "CSS Id", + "scope": "source.sass keyword.control", + "settings": { + "foreground": "#82AAFF" + } + }, + { + "name": "Inserted", + "scope": "markup.inserted", + "settings": { + "foreground": "#C3E88D" + } + }, + { + "name": "Deleted", + "scope": "markup.deleted", + "settings": { + "foreground": "#FF5370" + } + }, + { + "name": "Changed", + "scope": "markup.changed", + "settings": { + "foreground": "#C792EA" + } + }, + { + "name": "Regular Expressions", + "scope": "string.regexp", + "settings": { + "foreground": "#89DDFF" + } + }, + { + "name": "Escape Characters", + "scope": "constant.character.escape", + "settings": { + "foreground": "#89DDFF" + } + }, + { + "name": "URL", + "scope": "*url*, *link*, *uri*", + "settings": { + "fontStyle": "underline" + } + }, + { + "name": "Search Results Nums", + "scope": "constant.numeric.line-number.find-in-files - match", + "settings": { + "foreground": "#C17E70" + } + }, + { + "name": "Search Results Lines", + "scope": "entity.name.filename.find-in-files", + "settings": { + "foreground": "#C3E88D" + } + }, + { + "name": "Decorators", + "scope": "tag.decorator.js entity.name.tag.js, tag.decorator.js punctuation.definition.tag.js", + "settings": { + "fontStyle": "italic", + "foreground": "#82AAFF" + } + }, + { + "name": "ES7 Bind Operator", + "scope": "source.js constant.other.object.key.js string.unquoted.label.js", + "settings": { + "fontStyle": "italic", + "foreground": "#FF5370" + } + }, + { + "name": "JSON Key - Level 8", + "scope": "source.json meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", + "settings": { + "foreground": "#C3E88D" + } + }, + { + "name": "JSON Key - Level 7", + "scope": "source.json meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", + "settings": { + "foreground": "#C792EA" + } + }, + { + "name": "JSON Key - Level 6", + "scope": "source.json meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", + "settings": { + "foreground": "#f07178" + } + }, + { + "name": "JSON Key - Level 5", + "scope": "source.json meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", + "settings": { + "foreground": "#82AAFF" + } + }, + { + "name": "JSON Key - Level 4", + "scope": "source.json meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", + "settings": { + "foreground": "#C17E70" + } + }, + { + "name": "JSON Key - Level 3", + "scope": "source.json meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", + "settings": { + "foreground": "#FF5370" + } + }, + { + "name": "JSON Key - Level 2", + "scope": "source.json meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", + "settings": { + "foreground": "#F78C6C" + } + }, + { + "name": "JSON Key - Level 1", + "scope": "source.json meta meta.structure.dictionary.json string.quoted.double.json - meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta.structure.dictionary.json punctuation.definition.string - meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", + "settings": { + "foreground": "#FFCB6B" + } + }, + { + "name": "JSON Key - Level 0", + "scope": "source.json meta.structure.dictionary.json string.quoted.double.json - meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json punctuation.definition.string - meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string", + "settings": { + "foreground": "#C792EA" + } + }, + { + "name": "Markdown - Plain", + "scope": "text.html.markdown, punctuation.definition.list_item.markdown", + "settings": { + "foreground": "#959DCB" + } + }, + { + "name": "Markdown - Markup Raw Inline", + "scope": "text.html.markdown markup.raw.inline", + "settings": { + "foreground": "#C792EA" + } + }, + { + "name": "Markdown - Markup Raw Inline Punctuation", + "scope": "text.html.markdown punctuation.definition.raw.markdown", + "settings": { + "foreground": "#4E5579" + } + }, + { + "name": "Markdown - Line Break", + "scope": "text.html.markdown meta.dummy.line-break", + "settings": { + "foreground": "" + } + }, + { + "name": "Markdown - Heading", + "scope": "markdown.heading, markup.heading | markup.heading entity.name, markup.heading.markdown punctuation.definition.heading.markdown", + "settings": { + "foreground": "#C3E88D" + } + }, + { + "name": "Markup - Italic", + "scope": "markup.italic", + "settings": { + "fontStyle": "italic", + "foreground": "#f07178" + } + }, + { + "name": "Markup - Bold", + "scope": "markup.bold, markup.bold string", + "settings": { + "fontStyle": "bold", + "foreground": "#f07178" + } + }, + { + "name": "Markup - Bold & Italic", + "scope": "markup.bold markup.italic, markup.italic markup.bold, markup.quote markup.bold, markup.bold markup.italic string, markup.italic markup.bold string, markup.quote markup.bold string", + "settings": { + "fontStyle": "bold italic" + } + }, + { + "name": "Markup - Underline", + "scope": "markup.underline", + "settings": { + "fontStyle": "underline", + "foreground": "#F78C6C" + } + }, + { + "name": "Markup - Strike", + "scope": "markup.strike", + "settings": { + "fontStyle": "strike", + "foreground": "" + } + }, + { + "name": "Markdown - Blockquote", + "scope": "markup.quote punctuation.definition.blockquote.markdown", + "settings": { + "foreground": "#4E5579", + "background": "#4E5579" + } + }, + { + "name": "Markup - Quote", + "scope": "markup.quote", + "settings": { + "fontStyle": "italic", + "foreground": "" + } + }, + { + "name": "Markdown - Link", + "scope": "string.other.link.title.markdown", + "settings": { + "foreground": "#82AAFF" + } + }, + { + "name": "Markdown - Link Description", + "scope": "string.other.link.description.title.markdown", + "settings": { + "foreground": "#C792EA" + } + }, + { + "name": "Markdown - Link Anchor", + "scope": "constant.other.reference.link.markdown", + "settings": { + "foreground": "#FFCB6B" + } + }, + { + "name": "Markup - Raw Block", + "scope": "markup.raw.block", + "settings": { + "foreground": "#C792EA" + } + }, + { + "name": "Markdown - Raw Block Fenced", + "scope": "markup.raw.block.fenced.markdown", + "settings": { + "background": "#00000030" + } + }, + { + "name": "Markdown - Fenced Bode Block", + "scope": "punctuation.definition.fenced.markdown", + "settings": { + "background": "#00000030" + } + }, + { + "name": "Markdown - Fenced Bode Block Variable", + "scope": "markup.raw.block.fenced.markdown, variable.language.fenced.markdown, punctuation.section.class.end", + "settings": { + "foreground": "#959DCB" + } + }, + { + "name": "Markdown - Fenced Language", + "scope": "variable.language.fenced.markdown", + "settings": { + "fontStyle": "", + "foreground": "#4E5579" + } + }, + { + "name": "Markdown - Punctuation Definition", + "scope": "text.html.markdown punctuation.definition", + "settings": { + "foreground": "#676E95" + } + }, + { + "name": "Markdown HTML - Punctuation Definition", + "scope": "text.html.markdown meta.disable-markdown punctuation.definition", + "settings": { + "foreground": "#89DDFF" + } + }, + { + "name": "Markdown - Separator", + "scope": "meta.separator", + "settings": { + "fontStyle": "bold", + "foreground": "#4E5579", + "background": "#00000030" + } + }, + { + "name": "Markup - Table", + "scope": "markup.table", + "settings": { + "foreground": "#959DCB", + "background": "" + } + }, + { + "name": "AceJump Label - Blue", + "scope": "acejump.label.blue", + "settings": { + "foreground": "#ffffff", + "background": "#82AAFF" + } + }, + { + "name": "AceJump Label - Green", + "scope": "acejump.label.green", + "settings": { + "foreground": "#ffffff", + "background": "#C3E88D" + } + }, + { + "name": "AceJump Label - Orange", + "scope": "acejump.label.orange", + "settings": { + "foreground": "#ffffff", + "background": "#F78C6C" + } + }, + { + "name": "AceJump Label - Purple", + "scope": "acejump.label.purple", + "settings": { + "foreground": "#ffffff", + "background": "#C792EA" + } + }, + { + "name": "SublimeLinter Warning", + "scope": "sublimelinter.mark.warning", + "settings": { + "foreground": "#FFCB6B" + } + }, + { + "name": "SublimeLinter Gutter Mark", + "scope": "sublimelinter.gutter-mark", + "settings": { + "foreground": "#ffffff" + } + }, + { + "name": "SublimeLinter Error", + "scope": "sublimelinter.mark.error", + "settings": { + "foreground": "#FF5370" + } + }, + { + "name": "SublimeLinter Annotation", + "scope": "sublimelinter.annotations", + "settings": { + "background": "#C17E70" + } + }, + { + "name": "GitGutter Ignored", + "scope": "markup.ignored.git_gutter", + "settings": { + "foreground": "#4E5579" + } + }, + { + "name": "GitGutter Untracked", + "scope": "markup.untracked.git_gutter", + "settings": { + "foreground": "#4E5579" + } + }, + { + "name": "GitGutter Inserted", + "scope": "markup.inserted.git_gutter", + "settings": { + "foreground": "#C3E88D" + } + }, + { + "name": "GitGutter Changed", + "scope": "markup.changed.git_gutter", + "settings": { + "foreground": "#FFCB6B" + } + }, + { + "name": "GitGutter Deleted", + "scope": "markup.deleted.git_gutter", + "settings": { + "foreground": "#FF5370" + } + }, + { + "name": "Bracket Curly", + "scope": "brackethighlighter.default", + "settings": { + "foreground": "#B2CCD6" + } + }, + { + "name": "Bracket Quote", + "scope": "brackethighlighter.quote", + "settings": { + "foreground": "#C3E88D" + } + }, + { + "name": "Bracket Unmatched", + "scope": "brackethighlighter.unmatched", + "settings": { + "foreground": "#FF5370" + } + }, + { + "name": "CH_color", + "scope": "CH_color_04b3baff", + "settings": { + "foreground": "#45F3FBFF", + "caret": "#45F3FBFF", + "background": "#04b3baff" + } + }, + { + "scope": "CH_text_color_04b3baff", + "settings": { + "foreground": "#04b3baff", + "caret": "#45F3FBFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_0abea2ff", + "settings": { + "foreground": "#41F4D9FF", + "caret": "#41F4D9FF", + "background": "#0abea2ff" + } + }, + { + "scope": "CH_text_color_0abea2ff", + "settings": { + "foreground": "#0abea2ff", + "caret": "#41F4D9FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_f1f1f1ff", + "settings": { + "foreground": "#0E0E0EFF", + "caret": "#0E0E0EFF", + "background": "#f1f1f1ff" + } + }, + { + "scope": "CH_text_color_f1f1f1ff", + "settings": { + "foreground": "#f1f1f1ff", + "caret": "#0E0E0EFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_04b3b9ff", + "settings": { + "foreground": "#45F4FBFF", + "caret": "#45F4FBFF", + "background": "#04b3b9ff" + } + }, + { + "scope": "CH_text_color_04b3b9ff", + "settings": { + "foreground": "#04b3b9ff", + "caret": "#45F4FBFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_f7f7f7ff", + "settings": { + "foreground": "#080808FF", + "caret": "#080808FF", + "background": "#f7f7f7ff" + } + }, + { + "scope": "CH_text_color_f7f7f7ff", + "settings": { + "foreground": "#f7f7f7ff", + "caret": "#080808FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_003366ff", + "settings": { + "foreground": "#99CBFFFF", + "caret": "#99CBFFFF", + "background": "#003366ff" + } + }, + { + "scope": "CH_text_color_003366ff", + "settings": { + "foreground": "#003366ff", + "caret": "#99CBFFFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_f8f9faff", + "settings": { + "foreground": "#050607FF", + "caret": "#050607FF", + "background": "#f8f9faff" + } + }, + { + "scope": "CH_text_color_f8f9faff", + "settings": { + "foreground": "#f8f9faff", + "caret": "#050607FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_868e96ff", + "settings": { + "foreground": "#232628FF", + "caret": "#232628FF", + "background": "#868e96ff" + } + }, + { + "scope": "CH_text_color_868e96ff", + "settings": { + "foreground": "#868e96ff", + "caret": "#232628FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_343a40ff", + "settings": { + "foreground": "#BFC5CBFF", + "caret": "#BFC5CBFF", + "background": "#343a40ff" + } + }, + { + "scope": "CH_text_color_343a40ff", + "settings": { + "foreground": "#343a40ff", + "caret": "#BFC5CBFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_23d160ff", + "settings": { + "foreground": "#0A411EFF", + "caret": "#0A411EFF", + "background": "#23d160ff" + } + }, + { + "scope": "CH_text_color_23d160ff", + "settings": { + "foreground": "#23d160ff", + "caret": "#0A411EFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_17a2b8ff", + "settings": { + "foreground": "#47D2E8FF", + "caret": "#47D2E8FF", + "background": "#17a2b8ff" + } + }, + { + "scope": "CH_text_color_17a2b8ff", + "settings": { + "foreground": "#17a2b8ff", + "caret": "#47D2E8FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_ffdd57ff", + "settings": { + "foreground": "#A78500FF", + "caret": "#A78500FF", + "background": "#ffdd57ff" + } + }, + { + "scope": "CH_text_color_ffdd57ff", + "settings": { + "foreground": "#ffdd57ff", + "caret": "#A78500FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_ff3860ff", + "settings": { + "foreground": "#C60027FF", + "caret": "#C60027FF", + "background": "#ff3860ff" + } + }, + { + "scope": "CH_text_color_ff3860ff", + "settings": { + "foreground": "#ff3860ff", + "caret": "#C60027FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_ff11ff11", + "settings": { + "foreground": "#4C004CFF", + "caret": "#4C004CFF", + "background": "#ff11ff11" + } + }, + { + "scope": "CH_text_color_ff11ff11", + "settings": { + "foreground": "#ff11ff11", + "caret": "#4C004CFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_ff11ffff", + "settings": { + "foreground": "#4C004CFF", + "caret": "#4C004CFF", + "background": "#ff11ffff" + } + }, + { + "scope": "CH_text_color_ff11ffff", + "settings": { + "foreground": "#ff11ffff", + "caret": "#4C004CFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_f3f7faff", + "settings": { + "foreground": "#05090CFF", + "caret": "#05090CFF", + "background": "#f3f7faff" + } + }, + { + "scope": "CH_text_color_f3f7faff", + "settings": { + "foreground": "#f3f7faff", + "caret": "#05090CFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_002663ff", + "settings": { + "foreground": "#9CC2FFFF", + "caret": "#9CC2FFFF", + "background": "#002663ff" + } + }, + { + "scope": "CH_text_color_002663ff", + "settings": { + "foreground": "#002663ff", + "caret": "#9CC2FFFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_2366d1ff", + "settings": { + "foreground": "#0A1F41FF", + "caret": "#0A1F41FF", + "background": "#2366d1ff" + } + }, + { + "scope": "CH_text_color_2366d1ff", + "settings": { + "foreground": "#2366d1ff", + "caret": "#0A1F41FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_007bffff", + "settings": { + "foreground": "#00244CFF", + "caret": "#00244CFF", + "background": "#007bffff" + } + }, + { + "scope": "CH_text_color_007bffff", + "settings": { + "foreground": "#007bffff", + "caret": "#00244CFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_00b89cff", + "settings": { + "foreground": "#46FFE3FF", + "caret": "#46FFE3FF", + "background": "#00b89cff" + } + }, + { + "scope": "CH_text_color_00b89cff", + "settings": { + "foreground": "#00b89cff", + "caret": "#46FFE3FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_00d1b2ff", + "settings": { + "foreground": "#2EFFDFFF", + "caret": "#2EFFDFFF", + "background": "#00d1b2ff" + } + }, + { + "scope": "CH_text_color_00d1b2ff", + "settings": { + "foreground": "#00d1b2ff", + "caret": "#2EFFDFFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_f9f9fbff", + "settings": { + "foreground": "#040406FF", + "caret": "#040406FF", + "background": "#f9f9fbff" + } + }, + { + "scope": "CH_text_color_f9f9fbff", + "settings": { + "foreground": "#f9f9fbff", + "caret": "#040406FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_5f697aff", + "settings": { + "foreground": "#21252BFF", + "caret": "#21252BFF", + "background": "#5f697aff" + } + }, + { + "scope": "CH_text_color_5f697aff", + "settings": { + "foreground": "#5f697aff", + "caret": "#21252BFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_212529ff", + "settings": { + "foreground": "#D5DADEFF", + "caret": "#D5DADEFF", + "background": "#212529ff" + } + }, + { + "scope": "CH_text_color_212529ff", + "settings": { + "foreground": "#212529ff", + "caret": "#D5DADEFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_00000013", + "settings": { + "foreground": "#FFFFFFFF", + "caret": "#FFFFFFFF", + "background": "#00000013" + } + }, + { + "scope": "CH_text_color_00000013", + "settings": { + "foreground": "#00000013", + "caret": "#FFFFFFFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_444444ff", + "settings": { + "foreground": "#BBBBBBFF", + "caret": "#BBBBBBFF", + "background": "#444444ff" + } + }, + { + "scope": "CH_text_color_444444ff", + "settings": { + "foreground": "#444444ff", + "caret": "#BBBBBBFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_e3342fff", + "settings": { + "foreground": "#430A09FF", + "caret": "#430A09FF", + "background": "#e3342fff" + } + }, + { + "scope": "CH_text_color_e3342fff", + "settings": { + "foreground": "#e3342fff", + "caret": "#430A09FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_f2f2f2ff", + "settings": { + "foreground": "#0D0D0DFF", + "caret": "#0D0D0DFF", + "background": "#f2f2f2ff" + } + }, + { + "scope": "CH_text_color_f2f2f2ff", + "settings": { + "foreground": "#f2f2f2ff", + "caret": "#0D0D0DFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_ffffffff", + "settings": { + "foreground": "#000000FF", + "caret": "#000000FF", + "background": "#ffffffff" + } + }, + { + "scope": "CH_text_color_ffffffff", + "settings": { + "foreground": "#ffffffff", + "caret": "#000000FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_fafafaff", + "settings": { + "foreground": "#050505FF", + "caret": "#050505FF", + "background": "#fafafaff" + } + }, + { + "scope": "CH_text_color_fafafaff", + "settings": { + "foreground": "#fafafaff", + "caret": "#050505FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_f5f7faff", + "settings": { + "foreground": "#050709FF", + "caret": "#050709FF", + "background": "#f5f7faff" + } + }, + { + "scope": "CH_text_color_f5f7faff", + "settings": { + "foreground": "#f5f7faff", + "caret": "#050709FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_0000000d", + "settings": { + "foreground": "#FFFFFFFF", + "caret": "#FFFFFFFF", + "background": "#0000000d" + } + }, + { + "scope": "CH_text_color_0000000d", + "settings": { + "foreground": "#0000000d", + "caret": "#FFFFFFFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_f7f9fbff", + "settings": { + "foreground": "#040608FF", + "caret": "#040608FF", + "background": "#f7f9fbff" + } + }, + { + "scope": "CH_text_color_f7f9fbff", + "settings": { + "foreground": "#f7f9fbff", + "caret": "#040608FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_fbfbfbff", + "settings": { + "foreground": "#040404FF", + "caret": "#040404FF", + "background": "#fbfbfbff" + } + }, + { + "scope": "CH_text_color_fbfbfbff", + "settings": { + "foreground": "#fbfbfbff", + "caret": "#040404FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_e8ecedff", + "settings": { + "foreground": "#111516FF", + "caret": "#111516FF", + "background": "#e8ecedff" + } + }, + { + "scope": "CH_text_color_e8ecedff", + "settings": { + "foreground": "#e8ecedff", + "caret": "#111516FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_f5f8faff", + "settings": { + "foreground": "#050709FF", + "caret": "#050709FF", + "background": "#f5f8faff" + } + }, + { + "scope": "CH_text_color_f5f8faff", + "settings": { + "foreground": "#f5f8faff", + "caret": "#050709FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_3097d1ff", + "settings": { + "foreground": "#0D2D3EFF", + "caret": "#0D2D3EFF", + "background": "#3097d1ff" + } + }, + { + "scope": "CH_text_color_3097d1ff", + "settings": { + "foreground": "#3097d1ff", + "caret": "#0D2D3EFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_8eb4cbff", + "settings": { + "foreground": "#345970FF", + "caret": "#345970FF", + "background": "#8eb4cbff" + } + }, + { + "scope": "CH_text_color_8eb4cbff", + "settings": { + "foreground": "#8eb4cbff", + "caret": "#345970FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_2ab27bff", + "settings": { + "foreground": "#0E3D2AFF", + "caret": "#0E3D2AFF", + "background": "#2ab27bff" + } + }, + { + "scope": "CH_text_color_2ab27bff", + "settings": { + "foreground": "#2ab27bff", + "caret": "#0E3D2AFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_cbb956ff", + "settings": { + "foreground": "#3A3412FF", + "caret": "#3A3412FF", + "background": "#cbb956ff" + } + }, + { + "scope": "CH_text_color_cbb956ff", + "settings": { + "foreground": "#cbb956ff", + "caret": "#3A3412FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_bf5329ff", + "settings": { + "foreground": "#3E1B0DFF", + "caret": "#3E1B0DFF", + "background": "#bf5329ff" + } + }, + { + "scope": "CH_text_color_bf5329ff", + "settings": { + "foreground": "#bf5329ff", + "caret": "#3E1B0DFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_636b6fff", + "settings": { + "foreground": "#90989CFF", + "caret": "#90989CFF", + "background": "#636b6fff" + } + }, + { + "scope": "CH_text_color_636b6fff", + "settings": { + "foreground": "#636b6fff", + "caret": "#90989CFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_ccccccff", + "settings": { + "foreground": "#323232FF", + "caret": "#323232FF", + "background": "#ccccccff" + } + }, + { + "scope": "CH_text_color_ccccccff", + "settings": { + "foreground": "#ccccccff", + "caret": "#323232FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_00000026", + "settings": { + "foreground": "#FFFFFFFF", + "caret": "#FFFFFFFF", + "background": "#00000026" + } + }, + { + "scope": "CH_text_color_00000026", + "settings": { + "foreground": "#00000026", + "caret": "#FFFFFFFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_0000002d", + "settings": { + "foreground": "#FFFFFFFF", + "caret": "#FFFFFFFF", + "background": "#0000002d" + } + }, + { + "scope": "CH_text_color_0000002d", + "settings": { + "foreground": "#0000002d", + "caret": "#FFFFFFFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_777777ff", + "settings": { + "foreground": "#262626FF", + "caret": "#262626FF", + "background": "#777777ff" + } + }, + { + "scope": "CH_text_color_777777ff", + "settings": { + "foreground": "#777777ff", + "caret": "#262626FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_000000cc", + "settings": { + "foreground": "#FFFFFFFF", + "caret": "#FFFFFFFF", + "background": "#000000cc" + } + }, + { + "scope": "CH_text_color_000000cc", + "settings": { + "foreground": "#000000cc", + "caret": "#FFFFFFFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_000000e6", + "settings": { + "foreground": "#FFFFFFFF", + "caret": "#FFFFFFFF", + "background": "#000000e6" + } + }, + { + "scope": "CH_text_color_000000e6", + "settings": { + "foreground": "#000000e6", + "caret": "#FFFFFFFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_2b2b2bff", + "settings": { + "foreground": "#D3D3D3FF", + "caret": "#D3D3D3FF", + "background": "#2b2b2bff" + } + }, + { + "scope": "CH_text_color_2b2b2bff", + "settings": { + "foreground": "#2b2b2bff", + "caret": "#D3D3D3FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_262626ff", + "settings": { + "foreground": "#D9D9D9FF", + "caret": "#D9D9D9FF", + "background": "#262626ff" + } + }, + { + "scope": "CH_text_color_262626ff", + "settings": { + "foreground": "#262626ff", + "caret": "#D9D9D9FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_337ab7ff", + "settings": { + "foreground": "#10273BFF", + "caret": "#10273BFF", + "background": "#337ab7ff" + } + }, + { + "scope": "CH_text_color_337ab7ff", + "settings": { + "foreground": "#337ab7ff", + "caret": "#10273BFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_eeeeeeff", + "settings": { + "foreground": "#101010FF", + "caret": "#101010FF", + "background": "#eeeeeeff" + } + }, + { + "scope": "CH_text_color_eeeeeeff", + "settings": { + "foreground": "#eeeeeeff", + "caret": "#101010FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_333333ff", + "settings": { + "foreground": "#CCCCCCFF", + "caret": "#CCCCCCFF", + "background": "#333333ff" + } + }, + { + "scope": "CH_text_color_333333ff", + "settings": { + "foreground": "#333333ff", + "caret": "#CCCCCCFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_f9f9f9ff", + "settings": { + "foreground": "#060606FF", + "caret": "#060606FF", + "background": "#f9f9f9ff" + } + }, + { + "scope": "CH_text_color_f9f9f9ff", + "settings": { + "foreground": "#f9f9f9ff", + "caret": "#060606FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_f4f4f4ff", + "settings": { + "foreground": "#0A0A0AFF", + "caret": "#0A0A0AFF", + "background": "#f4f4f4ff" + } + }, + { + "scope": "CH_text_color_f4f4f4ff", + "settings": { + "foreground": "#f4f4f4ff", + "caret": "#0A0A0AFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_3b5998ff", + "settings": { + "foreground": "#6784C3FF", + "caret": "#6784C3FF", + "background": "#3b5998ff" + } + }, + { + "scope": "CH_text_color_3b5998ff", + "settings": { + "foreground": "#3b5998ff", + "caret": "#6784C3FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_ea4634ff", + "settings": { + "foreground": "#450D07FF", + "caret": "#450D07FF", + "background": "#ea4634ff" + } + }, + { + "scope": "CH_text_color_ea4634ff", + "settings": { + "foreground": "#ea4634ff", + "caret": "#450D07FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_33ccffff", + "settings": { + "foreground": "#0099CCFF", + "caret": "#0099CCFF", + "background": "#33ccffff" + } + }, + { + "scope": "CH_text_color_33ccffff", + "settings": { + "foreground": "#33ccffff", + "caret": "#0099CCFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_4875b4ff", + "settings": { + "foreground": "#152336FF", + "caret": "#152336FF", + "background": "#4875b4ff" + } + }, + { + "scope": "CH_text_color_4875b4ff", + "settings": { + "foreground": "#4875b4ff", + "caret": "#152336FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_8a3ab9ff", + "settings": { + "foreground": "#2B123AFF", + "caret": "#2B123AFF", + "background": "#8a3ab9ff" + } + }, + { + "scope": "CH_text_color_8a3ab9ff", + "settings": { + "foreground": "#8a3ab9ff", + "caret": "#2B123AFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_7cbb00ff", + "settings": { + "foreground": "#BFFF43FF", + "caret": "#BFFF43FF", + "background": "#7cbb00ff" + } + }, + { + "scope": "CH_text_color_7cbb00ff", + "settings": { + "foreground": "#7cbb00ff", + "caret": "#BFFF43FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_45668eff", + "settings": { + "foreground": "#7191BAFF", + "caret": "#7191BAFF", + "background": "#45668eff" + } + }, + { + "scope": "CH_text_color_45668eff", + "settings": { + "foreground": "#45668eff", + "caret": "#7191BAFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_7b0099ff", + "settings": { + "foreground": "#E065FFFF", + "caret": "#E065FFFF", + "background": "#7b0099ff" + } + }, + { + "scope": "CH_text_color_7b0099ff", + "settings": { + "foreground": "#7b0099ff", + "caret": "#E065FFFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_6441a5ff", + "settings": { + "foreground": "#211536FF", + "caret": "#211536FF", + "background": "#6441a5ff" + } + }, + { + "scope": "CH_text_color_6441a5ff", + "settings": { + "foreground": "#6441a5ff", + "caret": "#211536FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_007ee5ff", + "settings": { + "foreground": "#002A4CFF", + "caret": "#002A4CFF", + "background": "#007ee5ff" + } + }, + { + "scope": "CH_text_color_007ee5ff", + "settings": { + "foreground": "#007ee5ff", + "caret": "#002A4CFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_2d333aff", + "settings": { + "foreground": "#C5CBD2FF", + "caret": "#C5CBD2FF", + "background": "#2d333aff" + } + }, + { + "scope": "CH_text_color_2d333aff", + "settings": { + "foreground": "#2d333aff", + "caret": "#C5CBD2FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_84bd00ff", + "settings": { + "foreground": "#C5FF41FF", + "caret": "#C5FF41FF", + "background": "#84bd00ff" + } + }, + { + "scope": "CH_text_color_84bd00ff", + "settings": { + "foreground": "#84bd00ff", + "caret": "#C5FF41FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_1ab7eaff", + "settings": { + "foreground": "#063646FF", + "caret": "#063646FF", + "background": "#1ab7eaff" + } + }, + { + "scope": "CH_text_color_1ab7eaff", + "settings": { + "foreground": "#1ab7eaff", + "caret": "#063646FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_c92228ff", + "settings": { + "foreground": "#410B0DFF", + "caret": "#410B0DFF", + "background": "#c92228ff" + } + }, + { + "scope": "CH_text_color_c92228ff", + "settings": { + "foreground": "#c92228ff", + "caret": "#410B0DFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_000000ff", + "settings": { + "foreground": "#FFFFFFFF", + "caret": "#FFFFFFFF", + "background": "#000000ff" + } + }, + { + "scope": "CH_text_color_000000ff", + "settings": { + "foreground": "#000000ff", + "caret": "#FFFFFFFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_2698f0ff", + "settings": { + "foreground": "#042A47FF", + "caret": "#042A47FF", + "background": "#2698f0ff" + } + }, + { + "scope": "CH_text_color_2698f0ff", + "settings": { + "foreground": "#2698f0ff", + "caret": "#042A47FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_ffd83dff", + "settings": { + "foreground": "#C29B00FF", + "caret": "#C29B00FF", + "background": "#ffd83dff" + } + }, + { + "scope": "CH_text_color_ffd83dff", + "settings": { + "foreground": "#ffd83dff", + "caret": "#C29B00FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_20bc56ff", + "settings": { + "foreground": "#0B411DFF", + "caret": "#0B411DFF", + "background": "#20bc56ff" + } + }, + { + "scope": "CH_text_color_20bc56ff", + "settings": { + "foreground": "#20bc56ff", + "caret": "#0B411DFF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_15cd72ff", + "settings": { + "foreground": "#074526FF", + "caret": "#074526FF", + "background": "#15cd72ff" + } + }, + { + "scope": "CH_text_color_15cd72ff", + "settings": { + "foreground": "#15cd72ff", + "caret": "#074526FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_118fe4ff", + "settings": { + "foreground": "#052C47FF", + "caret": "#052C47FF", + "background": "#118fe4ff" + } + }, + { + "scope": "CH_text_color_118fe4ff", + "settings": { + "foreground": "#118fe4ff", + "caret": "#052C47FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_e9ecefff", + "settings": { + "foreground": "#0F1315FF", + "caret": "#0F1315FF", + "background": "#e9ecefff" + } + }, + { + "scope": "CH_text_color_e9ecefff", + "settings": { + "foreground": "#e9ecefff", + "caret": "#0F1315FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_dee2e6ff", + "settings": { + "foreground": "#191C21FF", + "caret": "#191C21FF", + "background": "#dee2e6ff" + } + }, + { + "scope": "CH_text_color_dee2e6ff", + "settings": { + "foreground": "#dee2e6ff", + "caret": "#191C21FF", + "background": "#3B8071FF" + } + }, + { + "name": "CH_color", + "scope": "CH_color_00acedff", + "settings": { + "foreground": "#00374CFF", + "caret": "#00374CFF", + "background": "#00acedff" + } + }, + { + "scope": "CH_text_color_00acedff", + "settings": { + "foreground": "#00acedff", + "caret": "#00374CFF", + "background": "#3B8071FF" + } + } + ], + "name": "Material-Theme-Palenight", + "colorSpaceName": "sRGB", + "uuid": "133d1250-19c6-4565-bc93-b37fd36f7fc9" +} diff --git a/src/renderer/components/editor/themes/oceanic.tmTheme.json b/src/renderer/components/editor/themes/oceanic.tmTheme.json new file mode 100644 index 00000000..0ef72829 --- /dev/null +++ b/src/renderer/components/editor/themes/oceanic.tmTheme.json @@ -0,0 +1,318 @@ +{ + "author": "memco", + "colorSpaceName": "sRGB", + "semanticClass": "theme.dark.oceanic", + "uuid": "D127D730-9145-4CAE-AFDB-2DA82DD5297F", + "settings": [ + { + "settings": { + "selection": "#95A3A63D", + "lineHighlight": "#3D2E2E77", + "foreground": "#F8F8F2", + "invisibles": "#546A68", + "caret": "#F8F8F0", + "background": "#1B2630" + } + }, + { + "name": "Comment", + "scope": "comment", + "settings": { + "foreground": "#6D6D6D" + } + }, + { + "name": "String", + "scope": "string", + "settings": { + "foreground": "#8AD6F2" + } + }, + { + "name": "Number", + "scope": "constant.numeric", + "settings": { + "foreground": "#78BDD6" + } + }, + { + "name": "Built-in constant", + "scope": "constant.language", + "settings": { + "foreground": "#78BDD6" + } + }, + { + "name": "User-defined constant", + "scope": "constant.character, constant.other", + "settings": { + "foreground": "#78BDD6" + } + }, + { + "name": "Variable", + "scope": "variable", + "settings": { + "fontStyle": "", + "foreground": "#FCB666" + } + }, + { + "name": "Keyword", + "scope": "keyword", + "settings": { + "foreground": "#E47D80" + } + }, + { + "name": "Storage", + "scope": "storage", + "settings": { + "fontStyle": "", + "foreground": "#D95757" + } + }, + { + "name": "Storage type", + "scope": "storage.type", + "settings": { + "fontStyle": "italic", + "foreground": "#FFB266" + } + }, + { + "name": "Class name", + "scope": "entity.name.class", + "settings": { + "fontStyle": "underline", + "foreground": "#F2AAEC" + } + }, + { + "name": "Inherited class", + "scope": "entity.other.inherited-class", + "settings": { + "fontStyle": "italic underline", + "foreground": "#F2AAEC" + } + }, + { + "name": "Function name", + "scope": "entity.name.function", + "settings": { + "fontStyle": "", + "foreground": "#F2AAEC" + } + }, + { + "name": "Function argument", + "scope": "variable.parameter", + "settings": { + "fontStyle": "italic", + "foreground": "#FFD2A6" + } + }, + { + "name": "Tag name", + "scope": "entity.name.tag", + "settings": { + "fontStyle": "", + "foreground": "#BAE682" + } + }, + { + "name": "Tag attribute", + "scope": "entity.other.attribute-name", + "settings": { + "fontStyle": "", + "foreground": "#93E690" + } + }, + { + "name": "ASP punctuation", + "scope": "punctuation.section.embedded.begin.asp, punctuation.section.embedded.end.asp", + "settings": { + "foreground": "#CFAFCF" + } + }, + { + "name": "Library function", + "scope": "support.function", + "settings": { + "fontStyle": "", + "foreground": "#FFB266" + } + }, + { + "name": "Library constant", + "scope": "support.constant", + "settings": { + "fontStyle": "", + "foreground": "#FFB266" + } + }, + { + "name": "Library class/type", + "scope": "support.type, support.class", + "settings": { + "fontStyle": "bold", + "foreground": "#F7FCA2" + } + }, + { + "name": "Library variable", + "scope": "support.other.variable", + "settings": { + "fontStyle": "" + } + }, + { + "name": "HTML tag", + "scope": "punctuation.definition.tag.html, punctuation.definition.tag.begin.html, punctuation.definition.tag.end.html", + "settings": { + "fontStyle": "", + "foreground": "#F7FCA2" + } + }, + { + "name": "PHP Namespaces", + "scope": "support.other.namespace, entity.name.type.namespace", + "settings": { + "foreground": "#FFD2A6" + } + }, + { + "name": "PHP Namespace Alias", + "scope": "support.other.namespace.use-as.php", + "settings": { + "foreground": "#FFB266" + } + }, + { + "name": "PHP Namespace Keyword", + "scope": "variable.language.namespace.php", + "settings": { + "foreground": "#D17B7B" + } + }, + { + "name": "PHP Namespace Separator", + "scope": "punctuation.separator.inheritance.php", + "settings": { + "foreground": "#E57EDD" + } + }, + { + "name": "CSS ID / Class", + "scope": "entity.other.attribute-name.id.css, entity.other.attribute-name.class.css", + "settings": { + "fontStyle": "bold", + "foreground": "#BAE682" + } + }, + { + "name": "CSS Pseudo Class", + "scope": "entity.other.attribute-name.pseudo-class.css", + "settings": { + "fontStyle": "italic", + "foreground": "#93E690" + } + }, + { + "name": "CSS Functions / Property Values", + "scope": "support.function.misc.css, support.constant.property-value.css, support.constant.font-name.css", + "settings": { + "foreground": "#FFD2A6" + } + }, + { + "name": "CSS property", + "scope": "support.type.proerty", + "settings": { + "foreground": "#242424" + } + }, + { + "name": "CSS Numeric Constant", + "scope": "constant.numeric.css", + "settings": { + "foreground": "#8AD6F2" + } + }, + { + "name": "CSS Function Parameters", + "scope": "variable.parameter.misc.css", + "settings": { + "foreground": "#78BDD6" + } + }, + { + "name": "Twig Tagbraces", + "scope": "entity.other.tagbraces.twig", + "settings": { + "foreground": "#E57EDD" + } + }, + { + "name": "Twig Tag", + "scope": "keyword.control.twig", + "settings": { + "foreground": "#FFB266" + } + }, + { + "name": "Twig Variable", + "scope": "variable.other.twig", + "settings": { + "foreground": "#FFCCFB" + } + }, + { + "name": "Twig Filter", + "scope": "support.function.filter.twig", + "settings": { + "foreground": "#D95757" + } + }, + { + "name": "Twig Variable Filter", + "scope": "support.function.filter.variable.twig", + "settings": { + "foreground": "#E57EDD" + } + }, + { + "name": "Twig Function", + "scope": "entity.name.function.twig", + "settings": { + "foreground": "#D95757" + } + }, + { + "name": "Twig Function Argument", + "scope": "entity.other.argument.twig", + "settings": { + "foreground": "#FFB2B2" + } + }, + { + "name": "Invalid", + "scope": "invalid", + "settings": { + "fontStyle": "", + "foreground": "#F8F8F0", + "background": "#D95757" + } + }, + { + "name": "Invalid deprecated", + "scope": "invalid.deprecated", + "settings": { + "foreground": "#F8F8F0", + "background": "#E57EDD" + } + } + ], + "name": "Oceanic", + "comment": "Oceanic theme features light-on-dark ocean-inspired colors. Based on Erebus." +} diff --git a/src/renderer/components/editor/themes/tokyo-night.tmTheme.json b/src/renderer/components/editor/themes/tokyo-night.tmTheme.json new file mode 100644 index 00000000..6f0a8f22 --- /dev/null +++ b/src/renderer/components/editor/themes/tokyo-night.tmTheme.json @@ -0,0 +1,835 @@ +{ + "author": "Kristi Russell (http://github.com/enkia)", + "semanticClass": "enki.theme.tokyo", + "settings": [ + { + "settings": { + "guide": "#4f4f5e40", + "caret": "#DBC08A", + "findHighlight": "#ffa300", + "phantomCss": "", + "shadow": "#00000010", + "stackGuide": "#4f4f5e60", + "lineHighlight": "#00000030", + "gutterForeground": "#3b415caa", + "findHighlightForeground": "#000000", + "foreground": "#AFBAD4ff", + "activeGuide": "#363b54", + "background": "#1d1f29", + "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": "#444b6a" + } + }, + { + "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": "#7982a9" + } + }, + { + "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": "#9aa5ce" + } + }, + { + "name": "Markdown - Markup Raw Inline", + "scope": "text.html.markdown markup.inline.raw.markdown", + "settings": { + "foreground": "#bb9af7" + } + }, + { + "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": "#89ddff" + } + }, + { + "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": "Tokyo-Night", + "colorSpaceName": "sRGB", + "uuid": "06f855e3-9fb7-4fb1-b790-aef06065f34e" +} diff --git a/src/renderer/components/markdown/TheMarkdown.vue b/src/renderer/components/markdown/TheMarkdown.vue index 558958dd..ebfe9310 100644 --- a/src/renderer/components/markdown/TheMarkdown.vue +++ b/src/renderer/components/markdown/TheMarkdown.vue @@ -12,11 +12,13 @@ import { useSnippetStore } from '@/store/snippets' import sanitizeHtml from 'sanitize-html' import hljs from 'highlight.js' import { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue' -import { ipc } from '@/electron' +import { ipc, store } from '@/electron' import { marked } from 'marked' import mermaid from 'mermaid' import { useHljsTheme } from '@/composable' +const isDev = import.meta.env.DEV + interface Props { value: string } @@ -68,7 +70,7 @@ onMounted(() => { const getRenderer = () => { const raw = marked.parse(props.value) - const html = sanitizeHtml(raw, { + let html = sanitizeHtml(raw, { allowedTags: [ 'h1', 'h2', @@ -151,6 +153,14 @@ const getRenderer = () => { ] } }) + + const re = /src="\.\//g + const path = store.preferences.get('storagePath') + + html = isDev + ? html.replace(re, `src="file://${path}/`) + : html.replace(re, `src="${path}/`) + return html } diff --git a/src/renderer/components/preferences/AppearancePreferences.vue b/src/renderer/components/preferences/AppearancePreferences.vue index 62a817ba..70581dab 100644 --- a/src/renderer/components/preferences/AppearancePreferences.vue +++ b/src/renderer/components/preferences/AppearancePreferences.vue @@ -14,6 +14,7 @@ import { track, i18n } from '@/electron' import { useAppStore } from '@/store/app' import type { Theme } from '@shared/types/renderer/store/app' import { computed } from 'vue' +import { themes } from '@/components/editor/themes' interface Options { label: string @@ -30,40 +31,18 @@ const localValue = computed({ } }) -const options: Options[] = [ - { - label: `${i18n.t('preferences:appearance.theme.light')}: GitHub`, - value: 'light:github' - }, - { - label: `${i18n.t('preferences:appearance.theme.light')}: Material`, - value: 'light:material' - }, - { - label: `${i18n.t('preferences:appearance.theme.light')}: Solarized`, - value: 'light:solarized' - }, - { - label: `${i18n.t('preferences:appearance.theme.dark')}: Dracula`, - value: 'dark:dracula' - }, - { - label: `${i18n.t('preferences:appearance.theme.dark')}: Material`, - value: 'dark:material' - }, - { - label: `${i18n.t('preferences:appearance.theme.dark')}: Merbivore`, - value: 'dark:merbivore' - }, - { - label: `${i18n.t('preferences:appearance.theme.dark')}: Monokai`, - value: 'dark:monokai' - }, - { - label: `${i18n.t('preferences:appearance.theme.dark')}: One Dark`, - value: 'dark:one' - } -] +const options: Options[] = themes + .map(i => { + const label = i.value.startsWith('light') + ? `${i18n.t('preferences:appearance.theme.light')}: ${i.label}` + : `${i18n.t('preferences:appearance.theme.dark')}: ${i.label}` + + return { + label, + value: i.value + } + }) + .sort((a, b) => (a.label > b.label ? 1 : -1)) diff --git a/src/renderer/components/preferences/LanguagePreferences.vue b/src/renderer/components/preferences/LanguagePreferences.vue index 359e6d00..c4e3ddb4 100644 --- a/src/renderer/components/preferences/LanguagePreferences.vue +++ b/src/renderer/components/preferences/LanguagePreferences.vue @@ -20,6 +20,7 @@ import { useAppStore } from '@/store/app' import { computed, ref } from 'vue' import { i18n, ipc, track } from '@/electron' +import { language } from '../../../main/services/i18n/language' const appStore = useAppStore() @@ -39,32 +40,14 @@ const localValue = computed({ } }) -const options = [ - { - label: i18n.t('language:en'), - value: 'en' - }, - { - label: i18n.t('language:es_ES'), - value: 'es_ES' - }, - { - label: i18n.t('language:ru'), - value: 'ru' - }, - { - label: i18n.t('language:zh_CN'), - value: 'zh_CN' - }, - { - label: i18n.t('language:zh_TW'), - value: 'zh_TW' - }, - { - label: i18n.t('language:zh_HK'), - value: 'zh_HK' - } -] +const options: { label: string; value: string }[] = [] + +Object.entries(language).forEach(([k, v]) => { + options.push({ + label: v, + value: k + }) +}) const onReload = () => { ipc.invoke('main:restart', {}) diff --git a/src/renderer/components/preferences/StoragePreferences.vue b/src/renderer/components/preferences/StoragePreferences.vue index 08f876c7..b8489ea3 100644 --- a/src/renderer/components/preferences/StoragePreferences.vue +++ b/src/renderer/components/preferences/StoragePreferences.vue @@ -4,14 +4,20 @@ - - {{ i18n.t('button.moveStorage') }} - - - {{ i18n.t('button.openStorage') }} - + @@ -88,6 +94,25 @@ const onClickOpen = async () => { } } +const onClickNew = async () => { + const path = await ipc.invoke('main:open-dialog', {}) + + const isExist = db.isExist(path) + + if (!isExist) { + store.preferences.set('storagePath', path) + setStorageAndRestartApi(path, true) + db.create() + track('app/new-storage') + } else { + await ipc.invoke('main:open-message-box', { + message: i18n.t('special:error.folderContainDb'), + detail: i18n.t('dialog:createDb'), + buttons: [i18n.t('button.ok')] + }) + } +} + const onClickMigrate = async () => { const state = await ipc.invoke( 'main:open-message-box', diff --git a/src/renderer/components/sidebar/SidebarListItem.vue b/src/renderer/components/sidebar/SidebarListItem.vue index db9a512e..4133287f 100644 --- a/src/renderer/components/sidebar/SidebarListItem.vue +++ b/src/renderer/components/sidebar/SidebarListItem.vue @@ -97,6 +97,14 @@ const onClickContextMenu = async () => { await folderStore.patchFoldersById(props.id!, { defaultLanguage: data }) track('folders/set-language', data) } + + if (action === 'collapse-all') { + folderStore.openFolders('close') + } + + if (action === 'expand-all') { + folderStore.openFolders('open') + } } if (props.alias) { diff --git a/src/renderer/components/ui/form/AppFormItem.vue b/src/renderer/components/ui/form/AppFormItem.vue index bfe516a2..598721d7 100644 --- a/src/renderer/components/ui/form/AppFormItem.vue +++ b/src/renderer/components/ui/form/AppFormItem.vue @@ -7,6 +7,12 @@
+
+ +
() align-items: center; gap: var(--spacing-sm); } + .actions { + margin-top: var(--spacing-sm); + display: flex; + gap: var(--spacing-sm); + } } diff --git a/src/renderer/store/folders.ts b/src/renderer/store/folders.ts index 8f23314b..0605dbee 100644 --- a/src/renderer/store/folders.ts +++ b/src/renderer/store/folders.ts @@ -149,6 +149,21 @@ export const useFolderStore = defineStore('folders', { await this.getFolders() await snippetStore.getSnippets() snippetStore.setSnippetsByAlias('trash') + }, + openFolders (action: 'open' | 'close') { + if (action === 'open') { + this.folders.forEach(async i => { + this.patchFoldersById(i.id, { + isOpen: true + }) + }) + } else { + this.folders.forEach(i => { + this.patchFoldersById(i.id, { + isOpen: false + }) + }) + } } } }) diff --git a/src/shared/types/main/analytics.d.ts b/src/shared/types/main/analytics.d.ts index 7aa198f5..12e1d855 100644 --- a/src/shared/types/main/analytics.d.ts +++ b/src/shared/types/main/analytics.d.ts @@ -17,11 +17,14 @@ type SnippetEvents = | 'set-language' | 'create-screenshot' | 'code-preview' + type FolderEvents = 'add-new' | 'delete' | 'set-language' type TagEvents = 'add-new' | 'delete' + type AppEvents = | 'move-storage' | 'open-storage' + | 'new-storage' | 'open-url' | 'migrate' | 'update' @@ -30,6 +33,7 @@ type AppEvents = | 'set-theme' | 'notify' | 'set-language' + type ApiEvents = 'snippet-create' type TrackSnippetEvents = CombineWith diff --git a/src/shared/types/main/index.d.ts b/src/shared/types/main/index.d.ts index e3e0d3fb..c1edcec3 100644 --- a/src/shared/types/main/index.d.ts +++ b/src/shared/types/main/index.d.ts @@ -19,6 +19,8 @@ type ContextMenuAction = | 'favorites' | 'new' | 'update:language' + | 'collapse-all' + | 'expand-all' | 'none' export type ContextMenuType = @@ -52,7 +54,7 @@ type MainAction = | 'open-url' | 'prettier' | 'focus' - | 'fs-read' + | 'copy-to-assets' type ApiAction = 'snippet-create' @@ -129,6 +131,7 @@ export interface ElectronBridge { preferences: StoreProperties } db: { + create: () => void migrate: (path: string) => Promise migrateFromSnippetsLab: (path: string) => void move: (from: string, to: string) => Promise diff --git a/src/shared/types/renderer/store/app.d.ts b/src/shared/types/renderer/store/app.d.ts index c680d273..e88b126b 100644 --- a/src/shared/types/renderer/store/app.d.ts +++ b/src/shared/types/renderer/store/app.d.ts @@ -1,9 +1,11 @@ export type Theme = | 'dark:dracula' + | 'dark:material-palenight' | 'dark:material' | 'dark:merbivore' | 'dark:monokai' | 'dark:one' + | 'dark:tokyo-night' | 'light:github' | 'light:material' | 'light:solarized'