From 8e14be77258ab8a09c83f505d0052b2c8535f41e Mon Sep 17 00:00:00 2001 From: Anton Reshetov Date: Wed, 29 Oct 2025 17:24:57 +0300 Subject: [PATCH 1/6] chore: update CHANGELOG --- CHANGELOG.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 69af02bc..ed7924d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,17 @@ +## [4.2.2](https://github.com/massCodeIO/massCode/compare/v4.2.1...v4.2.2) (2025-10-29) + + +### Bug Fixes + +* **db:** ensure directory exists before accessing the db ([#628](https://github.com/massCodeIO/massCode/issues/628)) ([d20bd9a](https://github.com/massCodeIO/massCode/commit/d20bd9a2aa44e58d36abd019936761afeb439766)) +* **editor:** jumping scroll when editing ([#629](https://github.com/massCodeIO/massCode/issues/629)) ([ee7e384](https://github.com/massCodeIO/massCode/commit/ee7e38458c541c455b74203ec6a59749090bd758)) + + + +## [4.2.1](https://github.com/massCodeIO/massCode/compare/v4.2.0...v4.2.1) (2025-10-28) + + + # [4.2.0](https://github.com/massCodeIO/massCode/compare/v4.1.0...v4.2.0) (2025-10-08) From d542824361becdcfcd7bd980adff8a7f8f0354ce Mon Sep 17 00:00:00 2001 From: Chris Ondrovic Date: Sat, 1 Nov 2025 00:58:49 -0400 Subject: [PATCH 2/6] feat(preferences): add api port to preference option (#631) * feat(preferences): add api port to preference option * revert(non rleated files): workflow and contributing * fix(localizations): properly setup and use localizations --- scripts/api-generate.js | 5 ++- src/main/i18n/locales/cs_CZ/preferences.json | 7 ++++ src/main/i18n/locales/de_DE/preferences.json | 7 ++++ src/main/i18n/locales/el_GR/preferences.json | 7 ++++ src/main/i18n/locales/en_US/preferences.json | 7 ++++ src/main/i18n/locales/es_ES/preferences.json | 7 ++++ src/main/i18n/locales/fa_IR/preferences.json | 7 ++++ src/main/i18n/locales/fr_FR/preferences.json | 7 ++++ src/main/i18n/locales/ja_JP/preferences.json | 7 ++++ src/main/i18n/locales/pl_PL/preferences.json | 7 ++++ src/main/i18n/locales/pt_BR/preferences.json | 7 ++++ src/main/i18n/locales/ro_RO/preferences.json | 7 ++++ src/main/i18n/locales/ru_RU/preferences.json | 7 ++++ src/main/i18n/locales/tr_TR/preferences.json | 7 ++++ src/main/i18n/locales/uk_UA/preferences.json | 7 ++++ src/main/i18n/locales/zh_CN/preferences.json | 7 ++++ src/main/i18n/locales/zh_HK/preferences.json | 7 ++++ src/main/i18n/locales/zh_TW/preferences.json | 7 ++++ src/renderer/components/preferences/API.vue | 38 ++++++++++++++++++++ src/renderer/router/index.ts | 6 ++++ src/renderer/services/api/index.ts | 5 ++- src/renderer/views/Preferences.vue | 4 +++ 22 files changed, 175 insertions(+), 2 deletions(-) create mode 100644 src/renderer/components/preferences/API.vue diff --git a/scripts/api-generate.js b/scripts/api-generate.js index 5f19cd0f..9b429634 100644 --- a/scripts/api-generate.js +++ b/scripts/api-generate.js @@ -1,7 +1,10 @@ const child_process = require('node:child_process') const { styleText } = require('node:util') +const Store = require('electron-store') -const url = `http://localhost:4321/swagger/json` +const store = new Store({ name: 'preferences', cwd: 'v2' }) +const apiPort = store.get('apiPort', 4321) +const url = `http://localhost:${apiPort}/swagger/json` async function generateApi() { try { diff --git a/src/main/i18n/locales/cs_CZ/preferences.json b/src/main/i18n/locales/cs_CZ/preferences.json index 51d96100..5dc8fe9b 100644 --- a/src/main/i18n/locales/cs_CZ/preferences.json +++ b/src/main/i18n/locales/cs_CZ/preferences.json @@ -46,5 +46,12 @@ "markdown": { "label": "Markdown", "codeRenderer": "Renderer kódových bloků" + }, + "api": { + "label": "API Port", + "port": { + "label": "API Port", + "description": "Číslo portu pro API server (vyžaduje restart aplikace). Platný rozsah: 1024-65535." + } } } diff --git a/src/main/i18n/locales/de_DE/preferences.json b/src/main/i18n/locales/de_DE/preferences.json index 16ac0c56..733ffbb3 100644 --- a/src/main/i18n/locales/de_DE/preferences.json +++ b/src/main/i18n/locales/de_DE/preferences.json @@ -46,5 +46,12 @@ "markdown": { "label": "Markdown", "codeRenderer": "Code-Block Renderer" + }, + "api": { + "label": "API-Port", + "port": { + "label": "API-Port", + "description": "Portnummer für den API-Server (erfordert Neustart der App). Gültiger Bereich: 1024-65535." + } } } diff --git a/src/main/i18n/locales/el_GR/preferences.json b/src/main/i18n/locales/el_GR/preferences.json index a43a047f..af3c1851 100644 --- a/src/main/i18n/locales/el_GR/preferences.json +++ b/src/main/i18n/locales/el_GR/preferences.json @@ -46,5 +46,12 @@ "markdown": { "label": "Markdown", "codeRenderer": "Code block Renderer" + }, + "api": { + "label": "Θύρα API", + "port": { + "label": "Θύρα API", + "description": "Αριθμός θύρας για τον διακομιστή API (απαιτείται επανεκκίνηση της εφαρμογής). Έγκυρο εύρος: 1024-65535." + } } } diff --git a/src/main/i18n/locales/en_US/preferences.json b/src/main/i18n/locales/en_US/preferences.json index ebc93ebb..6218c98d 100644 --- a/src/main/i18n/locales/en_US/preferences.json +++ b/src/main/i18n/locales/en_US/preferences.json @@ -68,5 +68,12 @@ "markdown": { "label": "Markdown", "codeRenderer": "Code block Renderer" + }, + "api": { + "label": "API Port", + "port": { + "label": "API Port", + "description": "Port number for the API server (requires app restart to take effect). Valid range: 1024-65535." + } } } diff --git a/src/main/i18n/locales/es_ES/preferences.json b/src/main/i18n/locales/es_ES/preferences.json index 798dc065..f29b4fed 100644 --- a/src/main/i18n/locales/es_ES/preferences.json +++ b/src/main/i18n/locales/es_ES/preferences.json @@ -46,5 +46,12 @@ "markdown": { "label": "Markdown", "codeRenderer": "Renderizador de Bloques de Código" + }, + "api": { + "label": "Puerto API", + "port": { + "label": "Puerto API", + "description": "Número de puerto para el servidor API (requiere reiniciar la aplicación). Rango válido: 1024-65535." + } } } diff --git a/src/main/i18n/locales/fa_IR/preferences.json b/src/main/i18n/locales/fa_IR/preferences.json index 83a97da8..38a99fbf 100644 --- a/src/main/i18n/locales/fa_IR/preferences.json +++ b/src/main/i18n/locales/fa_IR/preferences.json @@ -46,5 +46,12 @@ "markdown": { "label": "Markdown", "codeRenderer": "رندرکننده بلوک کد" + }, + "api": { + "label": "پورت API", + "port": { + "label": "پورت API", + "description": "شماره پورت برای سرور API (نیاز به راه‌اندازی مجدد برنامه دارد). محدوده معتبر: 1024-65535." + } } } diff --git a/src/main/i18n/locales/fr_FR/preferences.json b/src/main/i18n/locales/fr_FR/preferences.json index 3b10d4cd..4ec2bdde 100644 --- a/src/main/i18n/locales/fr_FR/preferences.json +++ b/src/main/i18n/locales/fr_FR/preferences.json @@ -46,5 +46,12 @@ "markdown": { "label": "Markdown", "codeRenderer": "Rendu des blocs de code" + }, + "api": { + "label": "Port API", + "port": { + "label": "Port API", + "description": "Numéro de port pour le serveur API (nécessite un redémarrage de l'application). Plage valide: 1024-65535." + } } } diff --git a/src/main/i18n/locales/ja_JP/preferences.json b/src/main/i18n/locales/ja_JP/preferences.json index ea397cac..cde89163 100644 --- a/src/main/i18n/locales/ja_JP/preferences.json +++ b/src/main/i18n/locales/ja_JP/preferences.json @@ -46,5 +46,12 @@ "markdown": { "label": "Markdown", "codeRenderer": "コードブロックレンダラー" + }, + "api": { + "label": "APIポート", + "port": { + "label": "APIポート", + "description": "APIサーバーのポート番号(アプリの再起動が必要です)。有効範囲:1024-65535。" + } } } diff --git a/src/main/i18n/locales/pl_PL/preferences.json b/src/main/i18n/locales/pl_PL/preferences.json index 5e3b6a42..ae0eb32b 100644 --- a/src/main/i18n/locales/pl_PL/preferences.json +++ b/src/main/i18n/locales/pl_PL/preferences.json @@ -46,5 +46,12 @@ "markdown": { "label": "Markdown", "codeRenderer": "Renderer bloków kodu" + }, + "api": { + "label": "Port API", + "port": { + "label": "Port API", + "description": "Numer portu dla serwera API (wymaga ponownego uruchomienia aplikacji). Prawidłowy zakres: 1024-65535." + } } } diff --git a/src/main/i18n/locales/pt_BR/preferences.json b/src/main/i18n/locales/pt_BR/preferences.json index 50ad615b..38b98290 100644 --- a/src/main/i18n/locales/pt_BR/preferences.json +++ b/src/main/i18n/locales/pt_BR/preferences.json @@ -46,5 +46,12 @@ "markdown": { "label": "Markdown", "codeRenderer": "Renderizador de Bloco de Código" + }, + "api": { + "label": "Porta API", + "port": { + "label": "Porta API", + "description": "Número da porta para o servidor API (requer reinicialização do aplicativo). Faixa válida: 1024-65535." + } } } diff --git a/src/main/i18n/locales/ro_RO/preferences.json b/src/main/i18n/locales/ro_RO/preferences.json index 785d53e4..36b0ea0c 100644 --- a/src/main/i18n/locales/ro_RO/preferences.json +++ b/src/main/i18n/locales/ro_RO/preferences.json @@ -46,5 +46,12 @@ "markdown": { "label": "Markdown", "codeRenderer": "Renderer Bloc de Cod" + }, + "api": { + "label": "Port API", + "port": { + "label": "Port API", + "description": "Numărul portului pentru serverul API (necesită repornirea aplicației). Interval valid: 1024-65535." + } } } diff --git a/src/main/i18n/locales/ru_RU/preferences.json b/src/main/i18n/locales/ru_RU/preferences.json index a40be6a3..0b457dc7 100644 --- a/src/main/i18n/locales/ru_RU/preferences.json +++ b/src/main/i18n/locales/ru_RU/preferences.json @@ -46,5 +46,12 @@ "markdown": { "label": "Markdown", "codeRenderer": "Рендер блоков кода" + }, + "api": { + "label": "Порт API", + "port": { + "label": "Порт API", + "description": "Номер порта для API-сервера (требуется перезапуск приложения). Допустимый диапазон: 1024-65535." + } } } diff --git a/src/main/i18n/locales/tr_TR/preferences.json b/src/main/i18n/locales/tr_TR/preferences.json index c65dd6ed..143fb6bd 100644 --- a/src/main/i18n/locales/tr_TR/preferences.json +++ b/src/main/i18n/locales/tr_TR/preferences.json @@ -46,5 +46,12 @@ "markdown": { "label": "Markdown", "codeRenderer": "Kod Bloğu Görüntüleyici" + }, + "api": { + "label": "API Portu", + "port": { + "label": "API Portu", + "description": "API sunucusu için port numarası (uygulamayı yeniden başlatmak gerekir). Geçerli aralık: 1024-65535." + } } } diff --git a/src/main/i18n/locales/uk_UA/preferences.json b/src/main/i18n/locales/uk_UA/preferences.json index cb226bba..298ded43 100644 --- a/src/main/i18n/locales/uk_UA/preferences.json +++ b/src/main/i18n/locales/uk_UA/preferences.json @@ -46,5 +46,12 @@ "markdown": { "label": "Markdown", "codeRenderer": "Відображення блоків коду" + }, + "api": { + "label": "Порт API", + "port": { + "label": "Порт API", + "description": "Номер порту для API-сервера (потребує перезапуску додатку). Допустимий діапазон: 1024-65535." + } } } diff --git a/src/main/i18n/locales/zh_CN/preferences.json b/src/main/i18n/locales/zh_CN/preferences.json index 5d121521..c85e6834 100644 --- a/src/main/i18n/locales/zh_CN/preferences.json +++ b/src/main/i18n/locales/zh_CN/preferences.json @@ -46,5 +46,12 @@ "markdown": { "label": "Markdown", "codeRenderer": "代码块渲染器" + }, + "api": { + "label": "API 端口", + "port": { + "label": "API 端口", + "description": "API 服务器的端口号(需要重启应用程序才能生效)。有效范围:1024-65535。" + } } } diff --git a/src/main/i18n/locales/zh_HK/preferences.json b/src/main/i18n/locales/zh_HK/preferences.json index fe22f8ad..122740f6 100644 --- a/src/main/i18n/locales/zh_HK/preferences.json +++ b/src/main/i18n/locales/zh_HK/preferences.json @@ -46,5 +46,12 @@ "markdown": { "label": "Markdown", "codeRenderer": "程式碼區塊渲染器" + }, + "api": { + "label": "API 端口", + "port": { + "label": "API 端口", + "description": "API 伺服器的端口號(需要重新啟動應用程式)。有效範圍:1024-65535。" + } } } diff --git a/src/main/i18n/locales/zh_TW/preferences.json b/src/main/i18n/locales/zh_TW/preferences.json index bbdf04d6..0465d77e 100644 --- a/src/main/i18n/locales/zh_TW/preferences.json +++ b/src/main/i18n/locales/zh_TW/preferences.json @@ -46,5 +46,12 @@ "markdown": { "label": "Markdown", "codeRenderer": "代碼塊渲染器" + }, + "api": { + "label": "API 連接埠", + "port": { + "label": "API 連接埠", + "description": "API 伺服器的連接埠號碼(需要重新啟動應用程式)。有效範圍:1024-65535。" + } } } diff --git a/src/renderer/components/preferences/API.vue b/src/renderer/components/preferences/API.vue new file mode 100644 index 00000000..e50b101c --- /dev/null +++ b/src/renderer/components/preferences/API.vue @@ -0,0 +1,38 @@ + + + diff --git a/src/renderer/router/index.ts b/src/renderer/router/index.ts index 6e4683d5..e79d32c1 100644 --- a/src/renderer/router/index.ts +++ b/src/renderer/router/index.ts @@ -7,6 +7,7 @@ export const RouterName = { preferencesLanguage: 'preferences/language', preferencesAppearance: 'preferences/appearance', preferencesEditor: 'preferences/editor', + preferencesAPI: 'preferences/api', markdownPresentation: 'markdown-presentation', devtools: 'devtools', devtoolsCaseConverter: 'devtools/case-converter', @@ -57,6 +58,11 @@ const routes = [ name: RouterName.preferencesEditor, component: () => import('@/components/preferences/Editor.vue'), }, + { + path: 'api', + name: RouterName.preferencesAPI, + component: () => import('@/components/preferences/API.vue'), + }, ], }, { diff --git a/src/renderer/services/api/index.ts b/src/renderer/services/api/index.ts index 4d28210b..38a5c0bc 100644 --- a/src/renderer/services/api/index.ts +++ b/src/renderer/services/api/index.ts @@ -1,7 +1,10 @@ +import { store } from '@/electron' import ky from 'ky' import { Api } from './generated' +const apiPort = store.preferences.get('apiPort') + export const api = new Api({ - baseUrl: 'http://localhost:4321', + baseUrl: `http://localhost:${apiPort}`, customFetch: ky, }) diff --git a/src/renderer/views/Preferences.vue b/src/renderer/views/Preferences.vue index 8c289fc9..81cf6422 100644 --- a/src/renderer/views/Preferences.vue +++ b/src/renderer/views/Preferences.vue @@ -30,6 +30,10 @@ const nav = [ label: i18n.t('preferences:appearance.label'), name: RouterName.preferencesAppearance, }, + { + label: i18n.t('preferences:api.label'), + name: RouterName.preferencesAPI, + }, ] provide(preferencesKeys, { From a49b5d04ab28cd1bc163a24f8b8c431c72baa6f5 Mon Sep 17 00:00:00 2001 From: BasicNullification <36026282+BasicNullification@users.noreply.github.com> Date: Fri, 14 Nov 2025 23:43:15 -0600 Subject: [PATCH 3/6] feat(editor): add Power Query (M) language support (#639) - Add powerquery.tmLanguage.json grammar file - Register Power Query in languages array with proper scope - Add 'powerquery' to Language type definition --- .../components/editor/grammars/languages.ts | 7 +- .../textmate/powerquery.tmLanguage.json | 346 ++++++++++++++++++ src/renderer/components/editor/types/index.ts | 1 + 3 files changed, 353 insertions(+), 1 deletion(-) create mode 100644 src/renderer/components/editor/grammars/textmate/powerquery.tmLanguage.json diff --git a/src/renderer/components/editor/grammars/languages.ts b/src/renderer/components/editor/grammars/languages.ts index 5845496c..8df46c6b 100644 --- a/src/renderer/components/editor/grammars/languages.ts +++ b/src/renderer/components/editor/grammars/languages.ts @@ -640,6 +640,12 @@ export const languages: LanguageOption[] = [ grammar: () => import('./textmate/powershell.tmLanguage.json'), scopeName: 'source.powershell', }, + { + name: 'Power Query', + value: 'powerquery', + grammar: () => import('./textmate/powerquery.tmLanguage.json'), + scopeName: 'source.powerquery', + }, { name: 'Praat', value: 'praat', @@ -992,7 +998,6 @@ export const oldLanguageMap: Record = { 'objective-c': 'objectivec', 'pascaligo': 'plain_text', 'postiats': 'plain_text', - 'powerquery': 'plain_text', 'pug': 'jade', 'redis': 'plain_text', 'sb': 'plain_text', diff --git a/src/renderer/components/editor/grammars/textmate/powerquery.tmLanguage.json b/src/renderer/components/editor/grammars/textmate/powerquery.tmLanguage.json new file mode 100644 index 00000000..f79f6095 --- /dev/null +++ b/src/renderer/components/editor/grammars/textmate/powerquery.tmLanguage.json @@ -0,0 +1,346 @@ +{ + "name": "powerquery", + "scopeName": "source.powerquery", + "fileTypes": ["pq", "pqm"], + "uuid": "41968B57-12E6-4AC5-92A4-A837010E8B0A", + "patterns": [ + { + "include": "#Noise" + }, + { + "include": "#LiteralExpression" + }, + { + "include": "#Keywords" + }, + { + "include": "#ImplicitVariable" + }, + { + "include": "#IntrinsicVariable" + }, + { + "include": "#Operators" + }, + { + "include": "#DotOperators" + }, + { + "include": "#TypeName" + }, + { + "include": "#RecordExpression" + }, + { + "include": "#Punctuation" + }, + { + "include": "#QuotedIdentifier" + }, + { + "include": "#Identifier" + } + ], + "repository": { + "Keywords": { + "match": "\\b(?:(and|or|not)|(if|then|else)|(try|catch|otherwise)|(as|each|in|is|let|meta|type|error)|(section|shared))\\b", + "captures": { + "1": { + "name": "keyword.operator.word.logical.powerquery" + }, + "2": { + "name": "keyword.control.conditional.powerquery" + }, + "3": { + "name": "keyword.control.exception.powerquery" + }, + "4": { + "name": "keyword.other.powerquery" + }, + "5": { + "name": "keyword.powerquery" + } + } + }, + "TypeName": { + "match": "\\b(?:(optional|nullable)|(action|any|anynonnull|binary|date|datetime|datetimezone|duration|function|list|logical|none|null|number|record|table|text|time|type))\\b", + "captures": { + "1": { + "name": "storage.modifier.powerquery" + }, + "2": { + "name": "storage.type.powerquery" + } + } + }, + "LiteralExpression": { + "patterns": [ + { + "include": "#String" + }, + { + "include": "#NumericConstant" + }, + { + "include": "#LogicalConstant" + }, + { + "include": "#NullConstant" + }, + { + "include": "#FloatNumber" + }, + { + "include": "#DecimalNumber" + }, + { + "include": "#HexNumber" + }, + { + "include": "#IntNumber" + } + ] + }, + "Noise": { + "patterns": [ + { + "include": "#BlockComment" + }, + { + "include": "#LineComment" + }, + { + "include": "#Whitespace" + } + ] + }, + "Whitespace": { + "match": "\\s+" + }, + "BlockComment": { + "begin": "/\\*", + "end": "\\*/", + "name": "comment.block.powerquery" + }, + "LineComment": { + "match": "//.*", + "name": "comment.line.double-slash.powerquery" + }, + "String": { + "begin": "\"", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.powerquery" + } + }, + "end": "\"(?!\")", + "endCaptures": { + "0": { + "name": "punctuation.definition.string.end.powerquery" + } + }, + "patterns": [ + { + "match": "\"\"", + "name": "constant.character.escape.quote.powerquery" + }, + { + "include": "#EscapeSequence" + } + ], + "name": "string.quoted.double.powerquery" + }, + "QuotedIdentifier": { + "begin": "#\"", + "beginCaptures": { + "0": { + "name": "punctuation.definition.quotedidentifier.begin.powerquery" + } + }, + "end": "\"(?!\")", + "endCaptures": { + "0": { + "name": "punctuation.definition.quotedidentifier.end.powerquery" + } + }, + "patterns": [ + { + "match": "\"\"", + "name": "constant.character.escape.quote.powerquery" + }, + { + "include": "#EscapeSequence" + } + ], + "name": "entity.name.powerquery" + }, + "EscapeSequence": { + "begin": "#\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.escapesequence.begin.powerquery" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.escapesequence.end.powerquery" + } + }, + "patterns": [ + { + "match": "(#|\\h{4}|\\h{8}|cr|lf|tab)(?:,(#|\\h{4}|\\h{8}|cr|lf|tab))*" + }, + { + "match": "[^\\)]", + "name": "invalid.illegal.escapesequence.powerquery" + } + ], + "name": "constant.character.escapesequence.powerquery" + }, + "LogicalConstant": { + "match": "\\b(true|false)\\b", + "name": "constant.language.logical.powerquery" + }, + "NullConstant": { + "match": "\\b(null)\\b", + "name": "constant.language.null.powerquery" + }, + "NumericConstant": { + "match": "(?)|(=)|(<>|<|>|<=|>=)|(&)|(\\+|-|\\*|\\/)|(!)|(\\?)", + "captures": { + "1": { + "name": "keyword.operator.function.powerquery" + }, + "2": { + "name": "keyword.operator.assignment-or-comparison.powerquery" + }, + "3": { + "name": "keyword.operator.comparison.powerquery" + }, + "4": { + "name": "keyword.operator.combination.powerquery" + }, + "5": { + "name": "keyword.operator.arithmetic.powerquery" + }, + "6": { + "name": "keyword.operator.sectionaccess.powerquery" + }, + "7": { + "name": "keyword.operator.optional.powerquery" + } + } + }, + "DotOperators": { + "match": "(? Date: Fri, 21 Nov 2025 16:53:26 +0300 Subject: [PATCH 4/6] feat(folders): add multi-selection (#641) --- src/renderer/components/editor/Tab.vue | 4 +- .../components/sidebar/folders/Tree.vue | 159 +++++++----- .../components/sidebar/folders/TreeNode.vue | 134 ++++++++-- .../sidebar/folders/composables/index.ts | 27 +- .../components/sidebar/folders/keys.ts | 6 +- .../components/sidebar/folders/types/index.ts | 1 + .../components/sidebar/library/Item.vue | 5 +- .../components/sidebar/library/Library.vue | 73 ++++-- src/renderer/components/sidebar/tags/Tags.vue | 11 +- src/renderer/components/snippet/Item.vue | 4 +- src/renderer/composables/useApp.ts | 4 +- src/renderer/composables/useFolders.ts | 232 ++++++++++++++++-- src/renderer/composables/useSnippets.ts | 23 +- src/renderer/ipc/listeners/system.ts | 4 +- src/renderer/utils/index.ts | 27 ++ 15 files changed, 553 insertions(+), 161 deletions(-) diff --git a/src/renderer/components/editor/Tab.vue b/src/renderer/components/editor/Tab.vue index 1264849d..5d2a132c 100644 --- a/src/renderer/components/editor/Tab.vue +++ b/src/renderer/components/editor/Tab.vue @@ -14,7 +14,7 @@ const props = defineProps() const { selectedSnippetContent, selectedSnippet, deleteSnippetContent } = useSnippets() const { addToUpdateContentQueue } = useSnippetUpdate() -const { highlightedSnippetIds, highlightedFolderId, state } = useApp() +const { highlightedSnippetIds, highlightedFolderIds, state } = useApp() const tabRef = ref() const isEdit = ref(false) @@ -38,7 +38,7 @@ const name = computed({ function onClickContextMenu() { highlightedSnippetIds.value.clear() - highlightedFolderId.value = undefined + highlightedFolderIds.value.clear() } async function onDelete() { diff --git a/src/renderer/components/sidebar/folders/Tree.vue b/src/renderer/components/sidebar/folders/Tree.vue index 9f9ba8c6..2bf874f0 100644 --- a/src/renderer/components/sidebar/folders/Tree.vue +++ b/src/renderer/components/sidebar/folders/Tree.vue @@ -1,7 +1,7 @@