diff --git a/dashboard/package.json b/dashboard/package.json index 709e381ccf..e8910d57a8 100644 --- a/dashboard/package.json +++ b/dashboard/package.json @@ -28,6 +28,7 @@ "highlight.js": "11.11.1", "katex": "^0.16.27", "lodash": "4.17.23", + "lz-string": "^1.5.0", "markdown-it": "^14.1.1", "markstream-vue": "^0.0.6", "mermaid": "^11.12.2", diff --git a/dashboard/pnpm-lock.yaml b/dashboard/pnpm-lock.yaml index df5c50503a..8fb3adb0f4 100644 --- a/dashboard/pnpm-lock.yaml +++ b/dashboard/pnpm-lock.yaml @@ -51,6 +51,9 @@ importers: lodash: specifier: 4.17.23 version: 4.17.23 + lz-string: + specifier: ^1.5.0 + version: 1.5.0 markdown-it: specifier: ^14.1.1 version: 14.1.1 @@ -2081,6 +2084,10 @@ packages: lodash@4.17.23: resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} @@ -5064,6 +5071,8 @@ snapshots: lodash@4.17.23: {} + lz-string@1.5.0: {} + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 diff --git a/dashboard/src/assets/mdi-subset/materialdesignicons-subset.css b/dashboard/src/assets/mdi-subset/materialdesignicons-subset.css index a3507d2ab7..c199cd4076 100644 --- a/dashboard/src/assets/mdi-subset/materialdesignicons-subset.css +++ b/dashboard/src/assets/mdi-subset/materialdesignicons-subset.css @@ -1,4 +1,8 @@ +<<<<<<< HEAD +/* Auto-generated MDI subset – 264 icons */ +======= /* Auto-generated MDI subset – 263 icons */ +>>>>>>> upstream/master /* Do not edit manually. Run: pnpm run subset-icons */ @font-face { @@ -312,6 +316,10 @@ content: "\F0CFD"; } +.mdi-cursor-default-click-outline::before { + content: "\F0CFE"; +} + .mdi-cursor-move::before { content: "\F01BE"; } @@ -384,6 +392,10 @@ content: "\F0207"; } +.mdi-export-variant::before { + content: "\F0B93"; +} + .mdi-eye::before { content: "\F0208"; } @@ -472,6 +484,10 @@ content: "\F0234"; } +.mdi-filter-variant::before { + content: "\F0236"; +} + .mdi-folder::before { content: "\F024B"; } @@ -896,6 +912,10 @@ content: "\F0832"; } +.mdi-shield-alert-outline::before { + content: "\F0ECD"; +} + .mdi-shield-check::before { content: "\F0565"; } diff --git a/dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff b/dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff index 7549c05d40..2def58c470 100644 Binary files a/dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff and b/dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff differ diff --git a/dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff2 b/dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff2 index a749e1d378..74b71d5483 100644 Binary files a/dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff2 and b/dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff2 differ diff --git a/dashboard/src/components/extension/PluginImportDialog.vue b/dashboard/src/components/extension/PluginImportDialog.vue new file mode 100644 index 0000000000..4eef633c2e --- /dev/null +++ b/dashboard/src/components/extension/PluginImportDialog.vue @@ -0,0 +1,357 @@ + + + + + diff --git a/dashboard/src/i18n/locales/en-US/features/extension.json b/dashboard/src/i18n/locales/en-US/features/extension.json index ae29f22357..3944444a4a 100644 --- a/dashboard/src/i18n/locales/en-US/features/extension.json +++ b/dashboard/src/i18n/locales/en-US/features/extension.json @@ -426,5 +426,37 @@ }, "pluginChangelog": { "menuTitle": "View Changelog" + }, + "exportImport": { + "exportPlugin": "Export Plugins", + "exportFiltered": "Export All Filtered Plugins", + "exportPinned": "Export Pinned Plugins", + "exportSelected": "Pick Plugins to Export", + "importPlugin": "Import Plugins", + "pluginCode": "Plugin Code", + "pasteCode": "Paste Plugin Code", + "securityHint": "Imported plugins are downloaded from GitHub repositories. Please verify their security yourself.", + "parse": "Parse", + "cancel": "Cancel", + "export": "Export", + "unnamed": "(Unnamed)", + "importSelected": "Import Selected", + "importAll": "Import All", + "importing": "Importing", + "completed": "Completed", + "exportSummary": "{total} plugins, {selected} selected", + "importSummary": "Parsed {total} plugins, {selected} selected", + "errors": { + "nothingToExport": "Nothing to export", + "needOneSelection": "Please select at least one plugin", + "copySuccess": "Copied to clipboard", + "copyFailed": "Copy failed", + "needCode": "Please paste the plugin code first", + "parseFailedFormat": "Failed to parse plugin code, please check the format", + "parseFailedContent": "Invalid plugin code content format", + "parseFailed": "Failed to parse plugin code: {msg}", + "missingRepo": "Missing repository URL", + "unknownError": "Unknown error" + } } } diff --git a/dashboard/src/i18n/locales/zh-CN/features/extension.json b/dashboard/src/i18n/locales/zh-CN/features/extension.json index bd88ba25a9..27825969b3 100644 --- a/dashboard/src/i18n/locales/zh-CN/features/extension.json +++ b/dashboard/src/i18n/locales/zh-CN/features/extension.json @@ -426,5 +426,37 @@ }, "pluginChangelog": { "menuTitle": "查看更新日志" + }, + "exportImport": { + "exportPlugin": "导出插件", + "exportFiltered": "导出全部筛选出的插件", + "exportPinned": "导出置顶的插件", + "exportSelected": "挑选插件导出", + "importPlugin": "导入插件", + "pluginCode": "插件码", + "pasteCode": "粘贴插件码", + "securityHint": "导入下载的插件均来自 GitHub 仓库,请自行检查插件的安全性", + "parse": "解析", + "cancel": "取消", + "export": "导出", + "unnamed": "(未命名)", + "importSelected": "导入选中", + "importAll": "全部导入", + "importing": "导入中", + "completed": "完成", + "exportSummary": "共 {total} 个插件,已选 {selected} 个", + "importSummary": "共解析到 {total} 个插件,已选 {selected} 个", + "errors": { + "nothingToExport": "没有可导出的插件", + "needOneSelection": "请至少选择一个插件", + "copySuccess": "已复制到剪贴板", + "copyFailed": "复制失败", + "needCode": "请先粘贴插件码", + "parseFailedFormat": "插件码解析失败,请检查格式", + "parseFailedContent": "插件码内容格式错误", + "parseFailed": "插件码解析失败:{msg}", + "missingRepo": "缺少仓库地址", + "unknownError": "未知错误" + } } } diff --git a/dashboard/src/views/extension/InstalledPluginsTab.vue b/dashboard/src/views/extension/InstalledPluginsTab.vue index cbea3281c7..f7dfa3dad6 100644 --- a/dashboard/src/views/extension/InstalledPluginsTab.vue +++ b/dashboard/src/views/extension/InstalledPluginsTab.vue @@ -1,6 +1,9 @@