aboutsummaryrefslogtreecommitdiff
path: root/src-vue
diff options
context:
space:
mode:
Diffstat (limited to 'src-vue')
-rw-r--r--src-vue/README.md18
-rw-r--r--src-vue/index.html5
-rw-r--r--src-vue/package-lock.json1531
-rw-r--r--src-vue/package.json14
-rw-r--r--src-vue/src/App.vue250
-rw-r--r--src-vue/src/assets/mp_colony020033.jpgbin0 -> 261643 bytes
-rw-r--r--src-vue/src/assets/thunderstore-icon.pngbin0 -> 7091 bytes
-rw-r--r--src-vue/src/assets/vue.svg1
-rw-r--r--src-vue/src/assets/wallpaperflare.com_wallpaper.jpgbin0 -> 586994 bytes
-rw-r--r--src-vue/src/components/NotificationButton.vue81
-rw-r--r--src-vue/src/i18n/lang/da.json166
-rw-r--r--src-vue/src/i18n/lang/de.json177
-rw-r--r--src-vue/src/i18n/lang/en.json200
-rw-r--r--src-vue/src/i18n/lang/es.json175
-rw-r--r--src-vue/src/i18n/lang/fr.json177
-rw-r--r--src-vue/src/i18n/lang/it.json175
-rw-r--r--src-vue/src/i18n/lang/pl.json177
-rw-r--r--src-vue/src/i18n/lang/ru.json178
-rw-r--r--src-vue/src/i18n/lang/zh_Hans.json169
-rw-r--r--src-vue/src/main.ts69
-rw-r--r--src-vue/src/plugins/modules/notifications.ts31
-rw-r--r--src-vue/src/plugins/store.ts9
-rw-r--r--src-vue/src/style.css56
-rw-r--r--src-vue/src/utils/GameInstall.ts5
-rw-r--r--src-vue/src/utils/NorthstarState.ts8
-rw-r--r--src-vue/src/utils/ReleaseCanal.ts4
-rw-r--r--src-vue/src/utils/SortOptions.d.ts8
-rw-r--r--src-vue/src/utils/Tabs.ts8
-rw-r--r--src-vue/src/utils/filter.ts26
-rw-r--r--src-vue/src/utils/thunderstore/ThunderstoreModStatus.ts7
-rw-r--r--src-vue/src/utils/thunderstore/version.ts33
-rw-r--r--src-vue/src/views/ChangelogView.vue10
-rw-r--r--src-vue/src/views/DeveloperView.vue10
-rw-r--r--src-vue/src/views/ModsView.vue13
-rw-r--r--src-vue/src/views/PlayView.vue10
-rw-r--r--src-vue/src/views/RepairView.vue10
-rw-r--r--src-vue/src/views/SettingsView.vue8
-rw-r--r--src-vue/src/views/mods/LocalModsView.vue8
-rw-r--r--src-vue/src/views/mods/ThunderstoreModsView.vue10
-rw-r--r--src-vue/tsconfig.json12
40 files changed, 3012 insertions, 837 deletions
diff --git a/src-vue/README.md b/src-vue/README.md
new file mode 100644
index 00000000..e6d7ea6e
--- /dev/null
+++ b/src-vue/README.md
@@ -0,0 +1,18 @@
+# FlightCore UI
+
+This folder holds FlightCore's interface repository.
+
+This is a [Vue (v4)](https://vuejs.org/) project, using [Element Plus](https://element-plus.org/en-US/) component library.
+
+## Development
+
+```shell
+# Install dependencies
+npm install
+
+# Run in development mode
+npm run dev
+
+# Build for production
+npm run build
+```
diff --git a/src-vue/index.html b/src-vue/index.html
index 99f203f5..143557b5 100644
--- a/src-vue/index.html
+++ b/src-vue/index.html
@@ -1,12 +1,11 @@
-<!doctype html>
+<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Tauri + Vue + Typescript App</title>
+ <title>Vite + Vue + TS</title>
</head>
-
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
diff --git a/src-vue/package-lock.json b/src-vue/package-lock.json
index cc182b19..3692b99e 100644
--- a/src-vue/package-lock.json
+++ b/src-vue/package-lock.json
@@ -1,19 +1,25 @@
{
- "name": "flightcore",
- "version": "0.1.0",
+ "name": "src-vue",
+ "version": "0.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
- "name": "flightcore",
- "version": "0.1.0",
+ "name": "src-vue",
+ "version": "0.0.0",
"dependencies": {
- "vue": "^3.5.13"
+ "@element-plus/icons-vue": "^2.0.9",
+ "element-plus": "^2.7.8",
+ "marked": "^14.1.3",
+ "vue": "^3.4.35",
+ "vue-i18n": "^9.13.1",
+ "vue-router": "^4.4.3",
+ "vuex": "^4.0.2"
},
"devDependencies": {
- "@vitejs/plugin-vue": "^5.2.1",
- "typescript": "~5.6.2",
- "vite": "^6.0.3",
+ "@vitejs/plugin-vue": "^3.1.0",
+ "typescript": "^5.6.3",
+ "vite": "^3.1.0",
"vue-tsc": "^2.1.10"
}
},
@@ -63,146 +69,28 @@
"node": ">=6.9.0"
}
},
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz",
- "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz",
- "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz",
- "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz",
- "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz",
- "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
+ "node_modules/@ctrl/tinycolor": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
+ "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==",
"license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz",
- "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz",
- "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
"engines": {
- "node": ">=18"
+ "node": ">=10"
}
},
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz",
- "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
+ "node_modules/@element-plus/icons-vue": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz",
+ "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==",
"license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
+ "peerDependencies": {
+ "vue": "^3.2.0"
}
},
- "node_modules/@esbuild/linux-arm": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz",
- "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==",
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz",
+ "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==",
"cpu": [
"arm"
],
@@ -210,50 +98,16 @@
"license": "MIT",
"optional": true,
"os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz",
- "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz",
- "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
+ "android"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz",
- "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==",
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz",
+ "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==",
"cpu": [
"loong64"
],
@@ -264,211 +118,76 @@
"linux"
],
"engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz",
- "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz",
- "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz",
- "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
+ "node_modules/@floating-ui/core": {
+ "version": "1.6.8",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz",
+ "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==",
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz",
- "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz",
- "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz",
- "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-arm64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz",
- "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
+ "dependencies": {
+ "@floating-ui/utils": "^0.2.8"
}
},
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz",
- "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==",
- "cpu": [
- "x64"
- ],
- "dev": true,
+ "node_modules/@floating-ui/dom": {
+ "version": "1.6.12",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz",
+ "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==",
"license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
+ "dependencies": {
+ "@floating-ui/core": "^1.6.0",
+ "@floating-ui/utils": "^0.2.8"
}
},
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz",
- "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=18"
- }
+ "node_modules/@floating-ui/utils": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz",
+ "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==",
+ "license": "MIT"
},
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz",
- "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
+ "node_modules/@intlify/core-base": {
+ "version": "9.14.2",
+ "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.2.tgz",
+ "integrity": "sha512-DZyQ4Hk22sC81MP4qiCDuU+LdaYW91A6lCjq8AWPvY3+mGMzhGDfOCzvyR6YBQxtlPjFqMoFk9ylnNYRAQwXtQ==",
"license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
+ "dependencies": {
+ "@intlify/message-compiler": "9.14.2",
+ "@intlify/shared": "9.14.2"
+ },
"engines": {
- "node": ">=18"
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
}
},
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz",
- "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
+ "node_modules/@intlify/message-compiler": {
+ "version": "9.14.2",
+ "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.2.tgz",
+ "integrity": "sha512-YsKKuV4Qv4wrLNsvgWbTf0E40uRv+Qiw1BeLQ0LAxifQuhiMe+hfTIzOMdWj/ZpnTDj4RSZtkXjJM7JDiiB5LQ==",
"license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
+ "dependencies": {
+ "@intlify/shared": "9.14.2",
+ "source-map-js": "^1.0.2"
+ },
"engines": {
- "node": ">=18"
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
}
},
- "node_modules/@esbuild/win32-x64": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz",
- "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
+ "node_modules/@intlify/shared": {
+ "version": "9.14.2",
+ "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.2.tgz",
+ "integrity": "sha512-uRAHAxYPeF+G5DBIboKpPgC/Waecd4Jz8ihtkpJQD5ycb5PwXp0k/+hBGl5dAjwF7w+l74kz/PKA8r8OK//RUw==",
"license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
"engines": {
- "node": ">=18"
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
@@ -477,290 +196,49 @@
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
"license": "MIT"
},
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.29.1.tgz",
- "integrity": "sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.29.1.tgz",
- "integrity": "sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.29.1.tgz",
- "integrity": "sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.29.1.tgz",
- "integrity": "sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.29.1.tgz",
- "integrity": "sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.29.1.tgz",
- "integrity": "sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==",
- "cpu": [
- "x64"
- ],
- "dev": true,
+ "node_modules/@popperjs/core": {
+ "name": "@sxzz/popperjs-es",
+ "version": "2.11.7",
+ "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
+ "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==",
"license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.29.1.tgz",
- "integrity": "sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.29.1.tgz",
- "integrity": "sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.29.1.tgz",
- "integrity": "sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.29.1.tgz",
- "integrity": "sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.29.1.tgz",
- "integrity": "sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.29.1.tgz",
- "integrity": "sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.29.1.tgz",
- "integrity": "sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.29.1.tgz",
- "integrity": "sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.29.1.tgz",
- "integrity": "sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.29.1.tgz",
- "integrity": "sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.29.1.tgz",
- "integrity": "sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/popperjs"
+ }
},
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.29.1.tgz",
- "integrity": "sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
+ "node_modules/@types/lodash": {
+ "version": "4.17.13",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz",
+ "integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==",
+ "license": "MIT"
},
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.29.1.tgz",
- "integrity": "sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
+ "node_modules/@types/lodash-es": {
+ "version": "4.17.12",
+ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+ "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
"license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
+ "dependencies": {
+ "@types/lodash": "*"
+ }
},
- "node_modules/@types/estree": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
- "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
- "dev": true,
+ "node_modules/@types/web-bluetooth": {
+ "version": "0.0.16",
+ "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
+ "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==",
"license": "MIT"
},
"node_modules/@vitejs/plugin-vue": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz",
- "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz",
+ "integrity": "sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "^18.0.0 || >=20.0.0"
+ "node": "^14.18.0 || >=16.0.0"
},
"peerDependencies": {
- "vite": "^5.0.0 || ^6.0.0",
+ "vite": "^3.0.0",
"vue": "^3.2.25"
}
},
@@ -854,6 +332,12 @@
"he": "^1.2.0"
}
},
+ "node_modules/@vue/devtools-api": {
+ "version": "6.6.4",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
+ "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
+ "license": "MIT"
+ },
"node_modules/@vue/language-core": {
"version": "2.1.10",
"resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.1.10.tgz",
@@ -929,6 +413,94 @@
"integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==",
"license": "MIT"
},
+ "node_modules/@vueuse/core": {
+ "version": "9.13.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz",
+ "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/web-bluetooth": "^0.0.16",
+ "@vueuse/metadata": "9.13.0",
+ "@vueuse/shared": "9.13.0",
+ "vue-demi": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/core/node_modules/vue-demi": {
+ "version": "0.14.10",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
+ "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vueuse/metadata": {
+ "version": "9.13.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz",
+ "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/shared": {
+ "version": "9.13.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz",
+ "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
+ "license": "MIT",
+ "dependencies": {
+ "vue-demi": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/shared/node_modules/vue-demi": {
+ "version": "0.14.10",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
+ "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
"node_modules/alien-signals": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.2.2.tgz",
@@ -936,6 +508,12 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/async-validator": {
+ "version": "4.2.5",
+ "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz",
+ "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==",
+ "license": "MIT"
+ },
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -959,6 +537,12 @@
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
"license": "MIT"
},
+ "node_modules/dayjs": {
+ "version": "1.11.13",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
+ "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
+ "license": "MIT"
+ },
"node_modules/de-indent": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
@@ -966,6 +550,32 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/element-plus": {
+ "version": "2.9.1",
+ "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.9.1.tgz",
+ "integrity": "sha512-9Agqf/jt4Ugk7EZ6C5LME71sgkvauPCsnvJN12Xid2XVobjufxMGpRE4L7pS4luJMOmFAH3J0NgYEGZT5r+NDg==",
+ "license": "MIT",
+ "dependencies": {
+ "@ctrl/tinycolor": "^3.4.1",
+ "@element-plus/icons-vue": "^2.3.1",
+ "@floating-ui/dom": "^1.0.1",
+ "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7",
+ "@types/lodash": "^4.14.182",
+ "@types/lodash-es": "^4.17.6",
+ "@vueuse/core": "^9.1.0",
+ "async-validator": "^4.2.5",
+ "dayjs": "^1.11.13",
+ "escape-html": "^1.0.3",
+ "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
+ "lodash-unified": "^1.0.2",
+ "memoize-one": "^6.0.0",
+ "normalize-wheel-es": "^1.2.0"
+ },
+ "peerDependencies": {
+ "vue": "^3.2.0"
+ }
+ },
"node_modules/entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
@@ -979,9 +589,9 @@
}
},
"node_modules/esbuild": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz",
- "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==",
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz",
+ "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -989,35 +599,379 @@
"esbuild": "bin/esbuild"
},
"engines": {
- "node": ">=18"
+ "node": ">=12"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.24.0",
- "@esbuild/android-arm": "0.24.0",
- "@esbuild/android-arm64": "0.24.0",
- "@esbuild/android-x64": "0.24.0",
- "@esbuild/darwin-arm64": "0.24.0",
- "@esbuild/darwin-x64": "0.24.0",
- "@esbuild/freebsd-arm64": "0.24.0",
- "@esbuild/freebsd-x64": "0.24.0",
- "@esbuild/linux-arm": "0.24.0",
- "@esbuild/linux-arm64": "0.24.0",
- "@esbuild/linux-ia32": "0.24.0",
- "@esbuild/linux-loong64": "0.24.0",
- "@esbuild/linux-mips64el": "0.24.0",
- "@esbuild/linux-ppc64": "0.24.0",
- "@esbuild/linux-riscv64": "0.24.0",
- "@esbuild/linux-s390x": "0.24.0",
- "@esbuild/linux-x64": "0.24.0",
- "@esbuild/netbsd-x64": "0.24.0",
- "@esbuild/openbsd-arm64": "0.24.0",
- "@esbuild/openbsd-x64": "0.24.0",
- "@esbuild/sunos-x64": "0.24.0",
- "@esbuild/win32-arm64": "0.24.0",
- "@esbuild/win32-ia32": "0.24.0",
- "@esbuild/win32-x64": "0.24.0"
+ "@esbuild/android-arm": "0.15.18",
+ "@esbuild/linux-loong64": "0.15.18",
+ "esbuild-android-64": "0.15.18",
+ "esbuild-android-arm64": "0.15.18",
+ "esbuild-darwin-64": "0.15.18",
+ "esbuild-darwin-arm64": "0.15.18",
+ "esbuild-freebsd-64": "0.15.18",
+ "esbuild-freebsd-arm64": "0.15.18",
+ "esbuild-linux-32": "0.15.18",
+ "esbuild-linux-64": "0.15.18",
+ "esbuild-linux-arm": "0.15.18",
+ "esbuild-linux-arm64": "0.15.18",
+ "esbuild-linux-mips64le": "0.15.18",
+ "esbuild-linux-ppc64le": "0.15.18",
+ "esbuild-linux-riscv64": "0.15.18",
+ "esbuild-linux-s390x": "0.15.18",
+ "esbuild-netbsd-64": "0.15.18",
+ "esbuild-openbsd-64": "0.15.18",
+ "esbuild-sunos-64": "0.15.18",
+ "esbuild-windows-32": "0.15.18",
+ "esbuild-windows-64": "0.15.18",
+ "esbuild-windows-arm64": "0.15.18"
+ }
+ },
+ "node_modules/esbuild-android-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz",
+ "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-android-arm64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz",
+ "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
}
},
+ "node_modules/esbuild-darwin-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz",
+ "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-darwin-arm64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz",
+ "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-freebsd-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz",
+ "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-freebsd-arm64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz",
+ "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-32": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz",
+ "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz",
+ "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-arm": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz",
+ "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-arm64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz",
+ "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-mips64le": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz",
+ "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-ppc64le": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz",
+ "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-riscv64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz",
+ "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-s390x": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz",
+ "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-netbsd-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz",
+ "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-openbsd-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz",
+ "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-sunos-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz",
+ "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-windows-32": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz",
+ "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-windows-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz",
+ "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-windows-arm64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz",
+ "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+ "license": "MIT"
+ },
"node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
@@ -1039,6 +993,29 @@
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/he": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -1049,6 +1026,45 @@
"he": "bin/he"
}
},
+ "node_modules/is-core-module": {
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "license": "MIT"
+ },
+ "node_modules/lodash-es": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+ "license": "MIT"
+ },
+ "node_modules/lodash-unified": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz",
+ "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/lodash-es": "*",
+ "lodash": "*",
+ "lodash-es": "*"
+ }
+ },
"node_modules/magic-string": {
"version": "0.30.17",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
@@ -1058,6 +1074,24 @@
"@jridgewell/sourcemap-codec": "^1.5.0"
}
},
+ "node_modules/marked": {
+ "version": "14.1.4",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-14.1.4.tgz",
+ "integrity": "sha512-vkVZ8ONmUdPnjCKc5uTRvmkRbx4EAi2OkTOXmfTDhZz3OFqMNBM1oTTWwTr4HY4uAEojhzPf+Fy8F1DWa3Sndg==",
+ "license": "MIT",
+ "bin": {
+ "marked": "bin/marked.js"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/memoize-one": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
+ "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==",
+ "license": "MIT"
+ },
"node_modules/minimatch": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
@@ -1099,6 +1133,12 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
+ "node_modules/normalize-wheel-es": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
+ "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==",
+ "license": "BSD-3-Clause"
+ },
"node_modules/path-browserify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
@@ -1106,6 +1146,13 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -1140,42 +1187,40 @@
"node": "^10 || ^12 || >=14"
}
},
- "node_modules/rollup": {
- "version": "4.29.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.29.1.tgz",
- "integrity": "sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==",
+ "node_modules/resolve": {
+ "version": "1.22.10",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
+ "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/estree": "1.0.6"
+ "is-core-module": "^2.16.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
},
"bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "2.79.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz",
+ "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
"rollup": "dist/bin/rollup"
},
"engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
+ "node": ">=10.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.29.1",
- "@rollup/rollup-android-arm64": "4.29.1",
- "@rollup/rollup-darwin-arm64": "4.29.1",
- "@rollup/rollup-darwin-x64": "4.29.1",
- "@rollup/rollup-freebsd-arm64": "4.29.1",
- "@rollup/rollup-freebsd-x64": "4.29.1",
- "@rollup/rollup-linux-arm-gnueabihf": "4.29.1",
- "@rollup/rollup-linux-arm-musleabihf": "4.29.1",
- "@rollup/rollup-linux-arm64-gnu": "4.29.1",
- "@rollup/rollup-linux-arm64-musl": "4.29.1",
- "@rollup/rollup-linux-loongarch64-gnu": "4.29.1",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.29.1",
- "@rollup/rollup-linux-riscv64-gnu": "4.29.1",
- "@rollup/rollup-linux-s390x-gnu": "4.29.1",
- "@rollup/rollup-linux-x64-gnu": "4.29.1",
- "@rollup/rollup-linux-x64-musl": "4.29.1",
- "@rollup/rollup-win32-arm64-msvc": "4.29.1",
- "@rollup/rollup-win32-ia32-msvc": "4.29.1",
- "@rollup/rollup-win32-x64-msvc": "4.29.1",
"fsevents": "~2.3.2"
}
},
@@ -1201,6 +1246,19 @@
"node": ">=0.10.0"
}
},
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/typescript": {
"version": "5.6.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
@@ -1216,60 +1274,44 @@
}
},
"node_modules/vite": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.5.tgz",
- "integrity": "sha512-akD5IAH/ID5imgue2DYhzsEwCi0/4VKY31uhMLEYJwPP4TiUp8pL5PIK+Wo7H8qT8JY9i+pVfPydcFPYD1EL7g==",
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.11.tgz",
+ "integrity": "sha512-K/jGKL/PgbIgKCiJo5QbASQhFiV02X9Jh+Qq0AKCRCRKZtOTVi4t6wh75FDpGf2N9rYOnzH87OEFQNaFy6pdxQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "esbuild": "0.24.0",
- "postcss": "^8.4.49",
- "rollup": "^4.23.0"
+ "esbuild": "^0.15.9",
+ "postcss": "^8.4.18",
+ "resolve": "^1.22.1",
+ "rollup": "^2.79.1"
},
"bin": {
"vite": "bin/vite.js"
},
"engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
- },
- "funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
+ "node": "^14.18.0 || >=16.0.0"
},
"optionalDependencies": {
- "fsevents": "~2.3.3"
+ "fsevents": "~2.3.2"
},
"peerDependencies": {
- "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "jiti": ">=1.21.0",
+ "@types/node": ">= 14",
"less": "*",
- "lightningcss": "^1.21.0",
"sass": "*",
- "sass-embedded": "*",
"stylus": "*",
"sugarss": "*",
- "terser": "^5.16.0",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
+ "terser": "^5.4.0"
},
"peerDependenciesMeta": {
"@types/node": {
"optional": true
},
- "jiti": {
- "optional": true
- },
"less": {
"optional": true
},
- "lightningcss": {
- "optional": true
- },
"sass": {
"optional": true
},
- "sass-embedded": {
- "optional": true
- },
"stylus": {
"optional": true
},
@@ -1278,12 +1320,6 @@
},
"terser": {
"optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
- "optional": true
}
}
},
@@ -1315,6 +1351,41 @@
}
}
},
+ "node_modules/vue-i18n": {
+ "version": "9.14.2",
+ "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.14.2.tgz",
+ "integrity": "sha512-JK9Pm80OqssGJU2Y6F7DcM8RFHqVG4WkuCqOZTVsXkEzZME7ABejAUqUdA931zEBedc4thBgSUWxeQh4uocJAQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@intlify/core-base": "9.14.2",
+ "@intlify/shared": "9.14.2",
+ "@vue/devtools-api": "^6.5.0"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
+ },
+ "peerDependencies": {
+ "vue": "^3.0.0"
+ }
+ },
+ "node_modules/vue-router": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.0.tgz",
+ "integrity": "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-api": "^6.6.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/posva"
+ },
+ "peerDependencies": {
+ "vue": "^3.2.0"
+ }
+ },
"node_modules/vue-tsc": {
"version": "2.1.10",
"resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.1.10.tgz",
@@ -1332,6 +1403,18 @@
"peerDependencies": {
"typescript": ">=5.0.0"
}
+ },
+ "node_modules/vuex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz",
+ "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-api": "^6.0.0-beta.11"
+ },
+ "peerDependencies": {
+ "vue": "^3.2.0"
+ }
}
}
}
diff --git a/src-vue/package.json b/src-vue/package.json
index 0cab58b3..7f98856a 100644
--- a/src-vue/package.json
+++ b/src-vue/package.json
@@ -9,12 +9,18 @@
"preview": "vite preview"
},
"dependencies": {
- "vue": "^3.5.13"
+ "@element-plus/icons-vue": "^2.0.9",
+ "element-plus": "^2.7.8",
+ "marked": "^14.1.3",
+ "vue": "^3.4.35",
+ "vue-i18n": "^9.13.1",
+ "vue-router": "^4.4.3",
+ "vuex": "^4.0.2"
},
"devDependencies": {
- "@vitejs/plugin-vue": "^5.2.1",
- "typescript": "~5.6.2",
- "vite": "^6.0.3",
+ "@vitejs/plugin-vue": "^3.1.0",
+ "typescript": "^5.6.3",
+ "vite": "^3.1.0",
"vue-tsc": "^2.1.10"
}
}
diff --git a/src-vue/src/App.vue b/src-vue/src/App.vue
index 0426defe..97b20562 100644
--- a/src-vue/src/App.vue
+++ b/src-vue/src/App.vue
@@ -1,6 +1,13 @@
-<script setup lang="ts">
+<script lang="ts">
+import ChangelogView from './views/ChangelogView.vue';
+import DeveloperView from './views/DeveloperView.vue';
+import PlayView from './views/PlayView.vue';
+import ModsView from './views/ModsView.vue';
+import SettingsView from './views/SettingsView.vue';
import { ref } from "vue";
+import { store } from './plugins/store';
import { invoke } from "@tauri-apps/api/core";
+import NotificationButton from "./components/NotificationButton.vue";
const greetMsg = ref("");
const name = ref("");
@@ -9,14 +16,65 @@ async function greet() {
// Learn more about Tauri commands at https://tauri.app/develop/calling-rust/
greetMsg.value = await invoke("greet", { name: name.value });
}
+
+export default {
+ components: {
+ ChangelogView,
+ DeveloperView,
+ PlayView,
+ SettingsView,
+ ModsView
+ },
+ data() {
+ return {}
+ },
+ mounted: async function() {
+
+ // Initialize interface language
+ let lang = "en"
+ this.$root!.$i18n.locale = lang;
+ },
+ methods: {
+ close() {
+ invoke("close_application");
+ }
+ },
+ computed: {
+ bgStyle(): string {
+ // @ts-ignore
+ const shouldBlur = this.$route.path !== "/";
+ return `filter: brightness(0.8) ${shouldBlur ? 'blur(5px)' : ''};`;
+ }
+ }
+}
</script>
<template>
- <main class="container">
- <h1>Welcome to Tauri + Vue</h1>
-
- <div class="row">
- </div>
+ <div class="app-inner">
+ <div id="fc_bg__container" :style="bgStyle"/>
+
+ <nav id="fc_menu-bar"><!-- Hide menu bar in repair view -->
+ <!-- Navigation items -->
+ <el-menu
+ :default-active="$route.path"
+ router
+ mode="horizontal"
+ id="fc__menu_items"
+ data-tauri-drag-region
+ >
+ <el-menu-item index="/">{{ $t('menu.play') }}</el-menu-item>
+ <el-menu-item index="/mods">{{ $t('menu.mods') }}</el-menu-item>
+ <el-menu-item index="/changelog">{{ $t('menu.changelog') }}</el-menu-item>
+ <el-menu-item index="/settings">{{ $t('menu.settings') }}</el-menu-item>
+ </el-menu>
+
+ <!-- Window controls -->
+ <div id="fc_window__controls">
+ <NotificationButton />
+ <el-button color="white" icon="SemiSelect" @click="minimize" circle />
+ <el-button color="white" icon="CloseBold" @click="close" circle />
+ </div>
+ </nav>
<p>Click on the Tauri, Vite, and Vue logos to learn more.</p>
<form class="row" @submit.prevent="greet">
@@ -24,128 +82,132 @@ async function greet() {
<button type="submit">Greet</button>
</form>
<p>{{ greetMsg }}</p>
- </main>
+ </div>
</template>
-<style scoped>
-.logo.vite:hover {
- filter: drop-shadow(0 0 2em #747bff);
+<style>
+#fc_menu-bar {
+ position: fixed;
+ z-index: 1;
+ top: 0;
+ width: 100%;
+ height: var(--fc-menu_height);
}
-.logo.vue:hover {
- filter: drop-shadow(0 0 2em #249b73);
+#fc__menu_bar::before {
+ position: absolute;
+ content: "";
+ inset: 0; /* same as { top: 0; right: 0; bottom: 0; left: 0; } */
+ background-image: linear-gradient(to bottom, red, orange);
+ z-index: 1;
+ opacity: 0;
+ transition: opacity 1s linear;
}
-</style>
-<style>
-:root {
- font-family: Inter, Avenir, Helvetica, Arial, sans-serif;
- font-size: 16px;
- line-height: 24px;
- font-weight: 400;
-
- color: #0f0f0f;
- background-color: #f6f6f6;
-
- font-synthesis: none;
- text-rendering: optimizeLegibility;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- -webkit-text-size-adjust: 100%;
+#fc__menu_bar:hover::before {
+ opacity: 1;
}
-.container {
- margin: 0;
- padding-top: 10vh;
- display: flex;
- flex-direction: column;
- justify-content: center;
- text-align: center;
+/* Borders reset */
+#fc__menu_bar, #fc__menu_items {
+ border: none !important;
}
-
-.logo {
- height: 6em;
- padding: 1.5em;
- will-change: filter;
- transition: 0.75s;
+.app-inner {
+ height: 100%;
+ width: 100%;
}
-.logo.tauri:hover {
- filter: drop-shadow(0 0 2em #24c8db);
+/* Header item */
+#fc__menu_items {
+ height: 100%;
+ background-color: transparent;
+ float: left;
+ width: calc(100% - 168px); /* window controls container width */
}
-.row {
- display: flex;
- justify-content: center;
+#fc__menu_items .el-menu-item, #fc__menu_items .el-sub-menu__title {
+ color: #b4b6b9;
+ border-color: white;
}
-a {
- font-weight: 500;
- color: #646cff;
- text-decoration: inherit;
+#fc__menu_items > .el-menu-item {
+ text-transform: uppercase;
+ border: none !important;
+ font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', '微软雅黑', Arial, sans-serif;
+ font-weight: bold;
+ font-size: large;
+ background-color: transparent !important;
+
+ border-width: 2px !important;
+ border-style: solid !important;
+ border-color: transparent !important;
+ border-radius: 10px !important;
+ transition: none;
}
-a:hover {
- color: #535bf2;
+#fc__menu_items .el-menu-item:hover, #fc__menu_items .el-sub-menu__title {
+ color: #c6c9ce;
+ background-color: transparent;
}
-h1 {
- text-align: center;
+#fc__menu_items .el-menu-item:focus-visible {
+ border-color: rgb(160, 207, 255) !important;
}
-input,
-button {
- border-radius: 8px;
- border: 1px solid transparent;
- padding: 0.6em 1.2em;
- font-size: 1em;
- font-weight: 500;
- font-family: inherit;
- color: #0f0f0f;
- background-color: #ffffff;
- transition: border-color 0.25s;
- box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2);
+#fc__menu_items .el-menu-item.is-active, #fc__menu_items .el-sub-menu.is-active > .el-sub-menu__title {
+ color: white !important;
}
-button {
- cursor: pointer;
+.app-inner > .fc__mods__container {
+ overflow-y: auto;
+ height: calc(100% - var(--fc-menu_height));
}
-button:hover {
- border-color: #396cd8;
+/* Header menu */
+.developer_build {
+ background: repeating-linear-gradient(
+ 45deg,
+ rgba(0, 0, 0, 0.2),
+ rgba(0, 0, 0, 0.2) 20px,
+ rgba(0, 0, 0, 0.3) 20px,
+ rgba(0, 0, 0, 0.3) 40px
+ );
}
-button:active {
- border-color: #396cd8;
- background-color: #e8e8e8;
+
+/* Window controls */
+#fc_window__controls {
+ float: right;
+ height: 100%;
}
-input,
-button {
- outline: none;
+#fc_window__controls > button,
+#fc_window__controls > .el-dropdown > button,
+#fc_window__controls > .el-dropdown > .el-badge > button {
+ color: white;
+ font-size: 20px;
+ margin: auto 5px;
+ background: none;
+ border: none;
+ height: 100%;
}
-#greet-input {
- margin-right: 5px;
+#fc_window__controls > button:hover,
+#fc_window__controls > .el-dropdown > button:hover,
+#fc_window__controls > .el-dropdown > .el-badge > button:hover {
+ color: #c6c9ce;
}
-@media (prefers-color-scheme: dark) {
- :root {
- color: #f6f6f6;
- background-color: #2f2f2f;
- }
+#fc_window__controls > button:active,
+#fc_window__controls > .el-dropdown > button:active {
+ color: #56585a;
+}
- a:hover {
- color: #24c8db;
- }
+#fc_window__controls > button:last-of-type {
+ margin-right: 15px;
+}
- input,
- button {
- color: #ffffff;
- background-color: #0f0f0f98;
- }
- button:active {
- background-color: #0f0f0f69;
- }
+sup {
+ border: none !important;
}
</style>
diff --git a/src-vue/src/assets/mp_colony020033.jpg b/src-vue/src/assets/mp_colony020033.jpg
new file mode 100644
index 00000000..ed44eca9
--- /dev/null
+++ b/src-vue/src/assets/mp_colony020033.jpg
Binary files differ
diff --git a/src-vue/src/assets/thunderstore-icon.png b/src-vue/src/assets/thunderstore-icon.png
new file mode 100644
index 00000000..c286ab11
--- /dev/null
+++ b/src-vue/src/assets/thunderstore-icon.png
Binary files differ
diff --git a/src-vue/src/assets/vue.svg b/src-vue/src/assets/vue.svg
deleted file mode 100644
index 770e9d33..00000000
--- a/src-vue/src/assets/vue.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg> \ No newline at end of file
diff --git a/src-vue/src/assets/wallpaperflare.com_wallpaper.jpg b/src-vue/src/assets/wallpaperflare.com_wallpaper.jpg
new file mode 100644
index 00000000..74a840cd
--- /dev/null
+++ b/src-vue/src/assets/wallpaperflare.com_wallpaper.jpg
Binary files differ
diff --git a/src-vue/src/components/NotificationButton.vue b/src-vue/src/components/NotificationButton.vue
new file mode 100644
index 00000000..3835032d
--- /dev/null
+++ b/src-vue/src/components/NotificationButton.vue
@@ -0,0 +1,81 @@
+<template>
+ <el-dropdown trigger="click" placement="bottom-end" max-height="280" popper-class="fc_popper">
+ <el-badge v-if="notifications.length != 0" :value="notifications.length" :max="9" class="item" type="primary">
+ <el-button color="white" icon="BellFilled" circle />
+ </el-badge>
+ <el-button v-else color="white" icon="BellFilled" circle />
+ <template #dropdown>
+ <el-dropdown-menu :key="counter">
+ <el-alert
+ v-if="notifications.length != 0"
+ v-for="(notification, i) in notifications"
+ :key="i"
+ :title="notification.title"
+ :description="notification.text"
+ :type="notification.type"
+ show-icon
+ style="width: 300px"
+ @close.stop="removeNotification(i)"
+ />
+ <el-result
+ v-else
+ icon="success"
+ :title="i18n.global.tc('notification.no_new.title')"
+ :sub-title="i18n.global.tc('notification.no_new.text')"
+ >
+ <template #icon>
+ </template>
+ </el-result>
+ </el-dropdown-menu>
+ </template>
+ </el-dropdown>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import {Notification} from '../plugins/modules/notifications';
+import {i18n} from "../main";
+
+export default defineComponent({
+ name: 'NotificationButton',
+ data: () => ({
+ // This variable is used as a key for the dropdown menu, so we can force it to refresh when a item is deleted.
+ counter: 0
+ }),
+ computed: {
+ i18n() {
+ return i18n
+ },
+ notifications(): Notification[] {
+ return this.$store.state.notifications.notifications;
+ }
+ },
+ methods: {
+ removeNotification(index: number) {
+ this.$store.commit('removeNotification', index);
+ // By refreshing the notifications list, we ensure the first notification get the index 0, ensuring this list
+ // is synchronized with the store list.
+ this.counter += 1;
+ }
+ }
+})
+</script>
+
+<style scoped>
+.el-dropdown {
+ height: 100%;
+ max-height: 300px;
+}
+
+.el-button {
+ margin: auto 25px auto 0 !important;
+}
+
+.el-alert {
+ margin: 5px 10px 5px 5px;
+}
+
+.el-badge:deep(sup) {
+ transform: translate(-10px, 5px) !important;
+}
+</style>
diff --git a/src-vue/src/i18n/lang/da.json b/src-vue/src/i18n/lang/da.json
new file mode 100644
index 00000000..33486bce
--- /dev/null
+++ b/src-vue/src/i18n/lang/da.json
@@ -0,0 +1,166 @@
+{
+ "menu": {
+ "changelog": "Ændringslog",
+ "mods": "Mods",
+ "settings": "Indstillinger",
+ "dev": "Dev",
+ "play": "Spil"
+ },
+ "generic": {
+ "yes": "Ja",
+ "no": "Nej",
+ "error": "Fejl",
+ "cancel": "afbryd",
+ "informationShort": "Info",
+ "downloading": "Henter",
+ "success": "Succes",
+ "extracting": "Udpakker",
+ "done": "Færdig"
+ },
+ "play": {
+ "button": {
+ "select_game_dir": "Vælg Titanfall2 spil mappe",
+ "install": "Installere",
+ "installing": "Installer...",
+ "update": "Opdater",
+ "updating": "Opdatere...",
+ "ready_to_play": "Start spil",
+ "northstar_is_running": "Spillet køre"
+ },
+ "unknown_version": "Ukendt version",
+ "see_patch_notes": "Se patch noter",
+ "players": "Spillere",
+ "servers": "Servere",
+ "northstar_running": "Northstar køre",
+ "ea_app_running": "EA appen køre",
+ "unable_to_load_playercount": "Kan ikke hente antallet af spillere"
+ },
+ "mods": {
+ "local": {
+ "no_mods": "Ingen mods blev fundet.",
+ "delete_confirm": "Er du sikker på at du vil slette dette mod?",
+ "delete": "Slet",
+ "success_deleting": "Sletningen af {modName} lykkedes",
+ "part_of_ts_mod": "Dette Northstar mod er en del af et Thunderstore mod"
+ },
+ "online": {
+ "no_match": "Der er ikke fundet nogen matchende mod.",
+ "try_another_search": "Prøv en anden søgning!"
+ },
+ "menu": {
+ "local": "Lokal",
+ "online": "Online",
+ "filter": "Filter",
+ "search": "Søg",
+ "sort_mods": "Sorter mods",
+ "select_categories": "Vælg kategorier",
+ "sort": {
+ "name_asc": "navn (A til Z)",
+ "name_desc": "navn (Z til A)",
+ "date_asc": "Dato (fra ældste)",
+ "most_downloaded": "Mest hentet",
+ "top_rated": "bedst bedømt",
+ "date_desc": "Dato (fra nyeste)"
+ }
+ },
+ "card": {
+ "button": {
+ "being_installed": "Installerer...",
+ "being_updated": "Opdaterer...",
+ "installed": "Installeret",
+ "install": "Installere",
+ "outdated": "Opdater"
+ },
+ "by": "af",
+ "more_info": "Mere info",
+ "remove": "Fjern mod",
+ "remove_dialog_title": "Advarsel",
+ "remove_success": "Fjernet {modName}",
+ "install_success": "Installeret {modName}",
+ "remove_dialog_text": "Fjern Thunderstore mod?"
+ }
+ },
+ "settings": {
+ "manage_install": "Administrer installation",
+ "choose_folder": "Vælg installationsmappe",
+ "open_game_folder": "Åben mappe",
+ "nb_ts_mods_per_page": "Antal Thunderstore-mods pr. side",
+ "nb_ts_mods_reset": "Nulstil til standard",
+ "language": "Sprog",
+ "language_select": "Vælg dit yndlingssprog",
+ "about": "Om:",
+ "flightcore_version": "FlightCore version:",
+ "testing": "Tester:",
+ "enable_test_channels": "Aktiver testudgivelseskanaler",
+ "dev_mode_enabled_title": "Pas på!",
+ "dev_mode_enabled_text": "Udviklertilstand aktiveret.",
+ "show_deprecated_mods": "Vis forældede Thunderstore-mods",
+ "show_deprecated_mods_desc2": "Pas på, sådanne mods er normalt forældet af en god grund.",
+ "profile": {
+ "active": "Aktiv profil",
+ "edit": "Rediger profiler",
+ "dialog": {
+ "title": "Profiler"
+ }
+ },
+ "repair": {
+ "title": "Reparere",
+ "open_window": "Åbn reparationsvinduet",
+ "window": {
+ "title": "FlightCore reparationsvinduet",
+ "disable_all_but_core": "Deaktiver alle undtagen kernemods",
+ "disable_all_but_core_success": "Deaktiverede alle mods undtagen kernemods",
+ "disable_modsettings": "Deaktiver ModSettings mod",
+ "disable_modsettings_success": "Deaktiver ModSettings mod",
+ "force_reinstall_ns": "Tving geninstallation Northstar",
+ "force_delete_temp_dl": "Tving sletning af midlertidig download-mappe",
+ "delete_persistent_store": "Slet FlightCore persistent indhold",
+ "reinstall_title": "Tving geninstallation af Northstar",
+ "reinstall_text": "Vent lidt",
+ "reinstall_success": "Northstar blev geninstalleret",
+ "warning": "Dette vindue indeholder forskellige funktioner til at reparere almindelige problemer med Northstar og FlightCore.",
+ "kill_northstar_process": "Dræb, der kører Northstar/Titanfall2-processen"
+ }
+ },
+ "nb_ts_mods_per_page_desc1": "Dette har en indvirkning på skærmydelsen, når du gennemser Thunderstore-mods.",
+ "nb_ts_mods_per_page_desc2": "Indstil denne værdi til 0 for at deaktivere paginering.",
+ "show_deprecated_mods_desc1": "Dette giver dig mulighed for at se forældede mods i online-mods-samlingen."
+ },
+ "notification": {
+ "game_folder": {
+ "new": {
+ "title": "Ny spil mappe",
+ "text": "Spilmappen blev opdateret."
+ },
+ "wrong": {
+ "title": "Forkert mappe",
+ "text": "Den valgte mappe er ikke en gyldig Titanfall2 Installation."
+ },
+ "not_found": {
+ "title": "Titanfall2 ikke fundet!",
+ "text": "Vælg venligst installationsstedet manuelt"
+ }
+ },
+ "profile": {
+ "invalid": {
+ "title": "Ugyldig profil",
+ "text": "Den profil, du forsøgte at skifte til, er ikke længere gyldig."
+ }
+ },
+ "flightcore_outdated": {
+ "title": "FlightCore forældet!",
+ "text": "Opdater venligst FlightCore.\nKører forældet version {oldVersion}.\nNyeste er {newVersion}!"
+ }
+ },
+ "channels": {
+ "release": {
+ "switch": {
+ "text": "Skiftet udgivelseskanal til \"{canal}\"."
+ }
+ },
+ "names": {
+ "Northstar": "Northstar",
+ "NorthstarReleaseCandidate": "Northstar udgivelseskandidat"
+ }
+ }
+}
diff --git a/src-vue/src/i18n/lang/de.json b/src-vue/src/i18n/lang/de.json
new file mode 100644
index 00000000..a360c124
--- /dev/null
+++ b/src-vue/src/i18n/lang/de.json
@@ -0,0 +1,177 @@
+{
+ "menu": {
+ "play": "Spielen",
+ "changelog": "Versionhistorie",
+ "mods": "Mods",
+ "settings": "Einstellungen",
+ "dev": "Dev"
+ },
+ "generic": {
+ "yes": "Ja",
+ "no": "Nein",
+ "error": "Fehler",
+ "cancel": "Abbrechen",
+ "informationShort": "Info",
+ "downloading": "Herunterladen",
+ "extracting": "Extrahieren",
+ "done": "Fertig",
+ "success": "Erfolg",
+ "confirm": "Bestätigen"
+ },
+ "play": {
+ "button": {
+ "northstar_is_running": "Spiel läuft",
+ "select_game_dir": "Titanfall2 ordner wählen",
+ "install": "Installieren",
+ "installing": "Installiert...",
+ "update": "Aktualisieren",
+ "updating": "Aktualisiert...",
+ "ready_to_play": "Spiel starten"
+ },
+ "unknown_version": "Unbekannte Version",
+ "see_patch_notes": "Siehe Patch-Notizen",
+ "players": "Spieler",
+ "servers": "Server",
+ "unable_to_load_playercount": "Spielerzahl konnte nicht geladen werden",
+ "northstar_running": "Northstar läuft:",
+ "ea_app_running": "EA App läuft:"
+ },
+ "mods": {
+ "local": {
+ "no_mods": "Keine Mods gefunden.",
+ "delete_confirm": "Bist du dir sicher, dass du diesen Mod löschen möchtest?",
+ "delete": "Löschen",
+ "part_of_ts_mod": "Dieser Northstar Mod ist teil eines Thunderstore Mods",
+ "success_deleting": "{modName} erfolgreich gelöscht"
+ },
+ "online": {
+ "no_match": "Keine passenden Mods gefunden.",
+ "try_another_search": "Versuche eine andere Suchanfrage!"
+ },
+ "menu": {
+ "local": "Lokal",
+ "online": "Online",
+ "filter": "Filter",
+ "search": "Suche",
+ "sort_mods": "Mods sortieren",
+ "select_categories": "Kategorien wählen",
+ "sort": {
+ "name_asc": "Nach Name (A to Z)",
+ "name_desc": "Nach Name (Z to A)",
+ "date_asc": "Nach Datum (älteste zuerst)",
+ "date_desc": "Nach Datum (neuste zuerst)",
+ "most_downloaded": "Am meisten heruntergeladen",
+ "top_rated": "Am besten bewerted"
+ }
+ },
+ "card": {
+ "button": {
+ "being_installed": "Installiert...",
+ "being_updated": "Aktualisiert...",
+ "installed": "Installiert",
+ "install": "Installieren",
+ "outdated": "Aktualisieren"
+ },
+ "by": "von",
+ "more_info": "Mehr Info",
+ "remove": "Mod entfernen",
+ "remove_dialog_title": "Warnung",
+ "remove_dialog_text": "Thunderstore Mod entfernen?",
+ "remove_success": "{modName} entfernt",
+ "install_success": "{modName} installiert"
+ }
+ },
+ "settings": {
+ "manage_install": "Installation verwalten",
+ "choose_folder": "Installationsordner wählen",
+ "open_game_folder": "Ordner öffnen",
+ "nb_ts_mods_per_page": "Anzahl an Thunderstore Mods pro Seite",
+ "nb_ts_mods_per_page_desc1": "Ändern dieser Einstellung kann die Leistung beim Suchen von Thunderstore Mods beeinflussen.",
+ "nb_ts_mods_per_page_desc2": "Setze diesen Wert auf 0 um alle Mods auf einer einzelnen Seite anzuzeigen.",
+ "nb_ts_mods_reset": "Standard wiederherstellen",
+ "language": "Sprache",
+ "language_select": "Bevorzugte Sprache wählen",
+ "about": "Über:",
+ "flightcore_version": "FlightCore Version:",
+ "testing": "Testen:",
+ "enable_test_channels": "Testversionen aktivieren",
+ "dev_mode_enabled_title": "Vorsicht!",
+ "dev_mode_enabled_text": "Entwicklermodus aktiviert.",
+ "repair": {
+ "title": "Reparieren",
+ "open_window": "Reparierfenster öffnen",
+ "window": {
+ "title": "FlightCore Reparierfenster",
+ "warning": "Dieses Fenster enthält verschiedene Funktionen um gängige Probleme mit Northstar und FlightCore zu beheben.",
+ "disable_all_but_core": "Alle außer notwendige Mods deaktivieren",
+ "disable_all_but_core_success": "Alle außer notwendige Mods wurden deaktiviert",
+ "force_reinstall_ns": "Northstar reinstallieren",
+ "force_delete_temp_dl": "Temporären FlightCore Downloadordner löschen",
+ "delete_persistent_store": "FlightCore Einstellungen zurücksetzen",
+ "kill_northstar_process": "Laufenden Northstar/Titanfall2 Prozess beenden",
+ "reinstall_title": "Northstar wird neu installiert",
+ "reinstall_text": "Bitte warten",
+ "reinstall_success": "Northstar erfolgreich neu installiert",
+ "disable_modsettings_success": "Der Mod ModSettings wurde deaktiviert",
+ "disable_modsettings": "Deaktiviere den ModSettings Mod"
+ }
+ },
+ "show_deprecated_mods_desc1": "Damit werden veraltete Mods in der Online-Mods-Ansicht sichtbar.",
+ "show_deprecated_mods_desc2": "Aber Vorsicht, solche Mods sind normalerweise aus gutem Grund als veraltet markiert.",
+ "show_deprecated_mods": "Veraltete Thunderstore mods anzeigen",
+ "profile": {
+ "dialog": {
+ "title": "Profile",
+ "delete_confirm": "Sind Sie sich sicher, dass Sie dieses Profil löschen möchten?",
+ "delete": "Löschen",
+ "clone": "Duplizieren",
+ "create_empty": "Neues Profil",
+ "new_profile_name": "Neuen Profilnamen eingeben"
+ },
+ "active": "Aktives Profil",
+ "edit": "Profile bearbeiten"
+ }
+ },
+ "notification": {
+ "game_folder": {
+ "new": {
+ "title": "Neuer Spielordner",
+ "text": "Spielordner erfolgreich aktualisiert."
+ },
+ "wrong": {
+ "title": "Falscher Ordner",
+ "text": "Der gewählte Ordner enthält keine valide Titanfall2 Installation."
+ },
+ "not_found": {
+ "title": "Titanfall2 nicht gefunden!",
+ "text": "Bitte wähle den Installationsordner manuell aus"
+ }
+ },
+ "flightcore_outdated": {
+ "title": "FlightCore veraltet!",
+ "text": "Bitte aktualisiere FlightCore.\nDu hast die veraltetet Version {oldVersion}.\nNeuste Version ist {newVersion}!"
+ },
+ "profile": {
+ "invalid": {
+ "text": "Das Profil auf das Sie wechseln möchten ist nicht länger gültig.",
+ "title": "Ungültiges Profil"
+ }
+ },
+ "no_new": {
+ "title": "Aktuell",
+ "text": "Hier gibt es nichts zu sehen!"
+ },
+ "date_prefix": "auf"
+ },
+ "channels": {
+ "release": {
+ "switch": {
+ "text": "Releasekanal zu \"{canal}\" gewechselt."
+ }
+ },
+ "names": {
+ "Northstar": "Northstar",
+ "NorthstarReleaseCandidate": "Northstar Release Candidate"
+ }
+ }
+}
diff --git a/src-vue/src/i18n/lang/en.json b/src-vue/src/i18n/lang/en.json
new file mode 100644
index 00000000..4c3da49f
--- /dev/null
+++ b/src-vue/src/i18n/lang/en.json
@@ -0,0 +1,200 @@
+{
+ "menu": {
+ "play": "Play",
+ "changelog": "Changelog",
+ "mods": "Mods",
+ "settings": "Settings",
+ "dev": "Dev"
+ },
+
+ "generic": {
+ "yes": "Yes",
+ "no": "No",
+ "error": "Error",
+ "confirm": "Confirm",
+ "cancel": "Cancel",
+ "informationShort": "Info",
+ "downloading": "Downloading",
+ "extracting": "Extracting",
+ "done": "Done",
+ "success": "Success"
+ },
+
+ "play": {
+ "button": {
+ "northstar_is_running": "Game is running",
+ "select_game_dir": "Select Titanfall2 game folder",
+ "install": "Install",
+ "installing": "Installing...",
+ "update": "Update",
+ "updating": "Updating...",
+ "ready_to_play": "Launch game"
+ },
+
+ "unknown_version": "Unknown version",
+ "see_patch_notes": "see patch notes",
+ "players": "players",
+ "servers": "servers",
+ "unable_to_load_playercount": "Unable to load playercount",
+ "northstar_running": "Northstar is running:",
+ "ea_app_running": "EA App is running:"
+ },
+
+ "mods": {
+ "local": {
+ "no_mods": "No mods were found.",
+ "delete_confirm": "Are you sure to delete this mod?",
+ "delete": "Delete",
+ "part_of_ts_mod": "This Northstar mod is part of a Thunderstore mod",
+ "success_deleting": "Success deleting {modName}"
+ },
+
+ "online": {
+ "no_match": "No matching mod has been found.",
+ "try_another_search": "Try another search!"
+ },
+
+ "menu": {
+ "local": "Local",
+ "online": "Online",
+ "filter": "Filter",
+ "search": "Search",
+ "sort_mods": "Sort mods",
+ "select_categories": "Select categories",
+
+ "sort": {
+ "name_asc": "By name (A to Z)",
+ "name_desc": "By name (Z to A)",
+ "date_asc": "By date (from oldest)",
+ "date_desc": "By date (from newest)",
+ "most_downloaded": "Most downloaded",
+ "top_rated": "Top rated"
+ }
+ },
+
+ "card": {
+ "button": {
+ "being_installed": "Installing...",
+ "being_updated": "Updating...",
+ "installed": "Installed",
+ "install": "Install",
+ "outdated": "Update"
+ },
+
+ "by": "by",
+ "more_info": "More info",
+ "remove": "Remove mod",
+ "remove_dialog_title": "Warning",
+ "remove_dialog_text": "Delete Thunderstore mod?",
+ "remove_success": "Removed {modName}",
+ "install_success": "Installed {modName}"
+ }
+ },
+
+ "settings": {
+ "manage_install": "Manage installation",
+ "choose_folder": "Choose installation folder",
+ "open_game_folder": "Open Folder",
+ "nb_ts_mods_per_page": "Number of Thunderstore mods per page",
+ "nb_ts_mods_per_page_desc1": "This has an impact on display performances when browsing Thunderstore mods.",
+ "nb_ts_mods_per_page_desc2": "Set this value to 0 to disable pagination.",
+ "nb_ts_mods_reset": "Reset to default",
+ "language": "Language",
+ "language_select": "Select your favorite language",
+ "about": "About:",
+ "flightcore_version": "FlightCore version:",
+ "testing": "Testing:",
+ "enable_test_channels": "Enable testing release channels",
+ "dev_mode_enabled_title": "Watch out!",
+ "dev_mode_enabled_text": "Developer mode enabled.",
+ "show_deprecated_mods": "Show deprecated Thunderstore mods",
+ "show_deprecated_mods_desc1": "This allows you to see deprecated mods in the online mods collection.",
+ "show_deprecated_mods_desc2": "Watch out, such mods are usually deprecated for a good reason.",
+ "show_nsfw_mods": "Show NSFW Thunderstore mods",
+
+ "profile": {
+ "active": "Active Profile",
+ "edit": "Edit Profiles",
+
+ "dialog": {
+ "title": "Profiles",
+ "delete_confirm": "Are you sure to delete this profile?",
+ "delete": "Delete",
+ "clone": "Clone",
+ "new_profile_name": "Enter the new Profile name",
+ "create_empty": "New Profile"
+ }
+ },
+
+ "repair": {
+ "title": "Repair",
+ "open_window": "Open repair window",
+
+ "window": {
+ "title": "FlightCore repair window",
+ "warning": "This window contains various functionality to repair common issues with Northstar and FlightCore.",
+ "disable_all_but_core": "Disable all but core mods",
+ "disable_all_but_core_success": "Disabled all mods but core",
+ "disable_modsettings": "Disable ModSettings mod",
+ "disable_modsettings_success": "Disabled ModSettings mod",
+ "force_reinstall_ns": "Force reinstall Northstar",
+ "force_delete_temp_dl": "Force delete temp download folder",
+ "delete_persistent_store": "Delete FlightCore persistent store",
+ "kill_northstar_process": "Kill running Northstar/Titanfall2 process",
+ "reinstall_title": "Force reinstalling Northstar",
+ "reinstall_text": "Please wait",
+ "reinstall_success": "Successfully reinstalled Northstar"
+ }
+ }
+ },
+
+ "notification": {
+ "date_prefix": "at",
+ "no_new": {
+ "title": "Up-to-date",
+ "text": "Nothing to see here!"
+ },
+
+ "game_folder": {
+ "new": {
+ "title": "New game folder",
+ "text": "Game folder was successfully updated."
+ },
+
+ "wrong": {
+ "title": "Wrong folder",
+ "text": "Selected folder is not a valid Titanfall2 install."
+ },
+
+ "not_found": {
+ "title": "Titanfall2 not found!",
+ "text": "Please manually select install location"
+ }
+ },
+
+ "profile": {
+ "invalid": {
+ "title": "Invalid Profile",
+ "text": "The profile you tried to switch to is no longer valid."
+ }
+ },
+
+ "flightcore_outdated": {
+ "title": "FlightCore outdated!",
+ "text": "Please update FlightCore.\nRunning outdated version {oldVersion}.\nNewest is {newVersion}!"
+ }
+ },
+
+ "channels": {
+ "release": {
+ "switch": {
+ "text": "Switched release channel to \"{canal}\"."
+ }
+ },
+
+ "names": {
+ "Northstar": "Northstar",
+ "NorthstarReleaseCandidate": "Northstar release candidate"
+ }
+ }
+}
diff --git a/src-vue/src/i18n/lang/es.json b/src-vue/src/i18n/lang/es.json
new file mode 100644
index 00000000..2b4d255c
--- /dev/null
+++ b/src-vue/src/i18n/lang/es.json
@@ -0,0 +1,175 @@
+{
+ "menu": {
+ "mods": "Modificaciones",
+ "settings": "Opciones",
+ "dev": "Desarrollador",
+ "play": "Jugar",
+ "changelog": "Cambios"
+ },
+ "generic": {
+ "yes": "Sí",
+ "no": "No",
+ "error": "Error",
+ "cancel": "Cancelar",
+ "informationShort": "Información",
+ "extracting": "Extrayendo",
+ "done": "Listo",
+ "success": "Éxito",
+ "downloading": "Descargando",
+ "confirm": "Confirmar"
+ },
+ "play": {
+ "button": {
+ "northstar_is_running": "El juego ya se está ejecutando",
+ "install": "Instalar",
+ "update": "Actualizar",
+ "select_game_dir": "Seleccione carpeta base de Titanfall 2",
+ "ready_to_play": "Jugar ahora",
+ "installing": "Instalando...",
+ "updating": "Actualizando..."
+ },
+ "ea_app_running": "La aplicación de EA ya se está ejecutando:",
+ "unknown_version": "Versión Desconocida",
+ "see_patch_notes": "Ver las notas del parche",
+ "players": "jugadores",
+ "servers": "servidores",
+ "northstar_running": "Northstar ya se está ejecutando:",
+ "unable_to_load_playercount": "Cantidad de jugadores no disponible"
+ },
+ "mods": {
+ "local": {
+ "no_mods": "No hay mods encontrados.",
+ "delete_confirm": "¿Estás segur@ que quieres eliminar este mod?",
+ "delete": "Eliminar",
+ "success_deleting": "{modName} Ha sido eliminado correctamente",
+ "part_of_ts_mod": "Este mod de Northstar es parte de un mod de la ThunderStore"
+ },
+ "online": {
+ "no_match": "No hay mods coincidentes.",
+ "try_another_search": "Intente otra busqueda!"
+ },
+ "menu": {
+ "local": "Local",
+ "online": "En línea",
+ "filter": "FIltro",
+ "search": "Búsqueda",
+ "sort_mods": "Ordenar mods",
+ "select_categories": "Seleccionar categorías",
+ "sort": {
+ "name_asc": "Por nombre (de la A a la Z)",
+ "date_asc": "Por fecha (desde la más antigua)",
+ "date_desc": "Por fecha (desde la más reciente)",
+ "most_downloaded": "Los más descargados",
+ "top_rated": "Mejor valorados",
+ "name_desc": "Por nombre (de la Z a la A)"
+ }
+ },
+ "card": {
+ "button": {
+ "being_installed": "Instalando...",
+ "being_updated": "Actualizando...",
+ "installed": "Instalado",
+ "outdated": "Actualizar",
+ "install": "Instalar"
+ },
+ "by": "por",
+ "remove": "Quitar mod",
+ "remove_dialog_title": "Advertencia",
+ "remove_dialog_text": "Eliminar mod de la ThunderStore?",
+ "install_success": "{modName} Instalado",
+ "more_info": "Mas información",
+ "remove_success": "{modName} Ha sido eliminado"
+ }
+ },
+ "settings": {
+ "manage_install": "Administrar instalación",
+ "choose_folder": "Elegir carpeta de instalación",
+ "open_game_folder": "Abrir carpeta",
+ "nb_ts_mods_per_page": "Numero de mods por página de ThunderStore",
+ "nb_ts_mods_per_page_desc2": "Poner valor en 0 para desactivar la paginación.",
+ "nb_ts_mods_reset": "Reestablecer por defecto",
+ "language": "Idioma",
+ "language_select": "Seleccionar idioma favorito",
+ "about": "Acerca de:",
+ "flightcore_version": "Versión de FlightCore:",
+ "testing": "Probando:",
+ "enable_test_channels": "Activar liberación de canales",
+ "dev_mode_enabled_title": "¡Cuidado!",
+ "dev_mode_enabled_text": "Modo de desarrollador activado.",
+ "show_deprecated_mods_desc1": "Esto permite ver mods obsoletos de la colección online de ThunderStore.",
+ "show_deprecated_mods_desc2": "Cuidado, estos mods suelen estar obsoletos por una buena razón.",
+ "profile": {
+ "active": "Perfil activo",
+ "edit": "Editar perfiles",
+ "dialog": {
+ "title": "Perfiles",
+ "delete_confirm": "Eliminar Perfil?",
+ "delete": "Eliminar",
+ "clone": "Duplicar"
+ }
+ },
+ "repair": {
+ "title": "Reparar",
+ "window": {
+ "title": "Ventana de reparación de FlightCore",
+ "disable_all_but_core": "Desactivar todos los mods excepto los principales",
+ "disable_all_but_core_success": "Desactivados todos los mods excepto el núcleo",
+ "disable_modsettings": "Desactivar ModSettings",
+ "disable_modsettings_success": "ModSettings desactivado",
+ "force_reinstall_ns": "Forzar reinstalación de Northstar",
+ "force_delete_temp_dl": "Forzar la eliminación de la carpeta temporal de descargas",
+ "delete_persistent_store": "Borrar el almacén persistente de FlightCore",
+ "reinstall_title": "Forzar la reinstalación de Northstar",
+ "reinstall_text": "Espere, por favor",
+ "reinstall_success": "Northstar reinstalado con éxito",
+ "warning": "Esta ventana tiene varias funciones para reparar problemas comunes con Northstar y FlightCore.",
+ "kill_northstar_process": "Finalizar proceso de Northstar/Titanfall 2"
+ },
+ "open_window": "Abrir la ventana de reparación"
+ },
+ "nb_ts_mods_per_page_desc1": "Esto puede tener impactos en fluidez al buscar mods en la ThunderStore.",
+ "show_deprecated_mods": "Mostrar mods the ThunderStore obsoletos"
+ },
+ "notification": {
+ "game_folder": {
+ "new": {
+ "title": "Nueva carpeta de juego",
+ "text": "La carpeta de juego fue actualizada exitosamente."
+ },
+ "wrong": {
+ "title": "Carpeta equivocada",
+ "text": "La carpeta seleccionada no es una carpeta de Titanfall2 válida."
+ },
+ "not_found": {
+ "title": "Titanfall 2 no encontrado!",
+ "text": "Por favor seleccione manualmente el lugar de instalación"
+ }
+ },
+ "profile": {
+ "invalid": {
+ "title": "Perfil inválido",
+ "text": "El perfil de cambio anterior ya no es válido."
+ }
+ },
+ "flightcore_outdated": {
+ "title": "FlightCore desactualizado!",
+ "text": "Por favor actualize FlightCore.\nEsta versión esta desactualizada {oldVersion}\nLa versión mas nueva es {newVersion}!"
+ },
+ "no_new": {
+ "title": "Al día",
+ "text": "Nada que ver aquí!"
+ },
+ "date_prefix": "en"
+ },
+ "channels": {
+ "release": {
+ "switch": {
+ "text": "El canal seleccionado se cambió a \"{canal}\"."
+ }
+ },
+ "names": {
+ "Northstar": "Northstar",
+ "NorthstarReleaseCandidate": "Candidato de nueva versión de Northstar"
+ }
+ }
+}
diff --git a/src-vue/src/i18n/lang/fr.json b/src-vue/src/i18n/lang/fr.json
new file mode 100644
index 00000000..efc0815b
--- /dev/null
+++ b/src-vue/src/i18n/lang/fr.json
@@ -0,0 +1,177 @@
+{
+ "menu": {
+ "play": "Jouer",
+ "changelog": "Notes",
+ "mods": "Mods",
+ "settings": "Paramètres",
+ "dev": "Dev"
+ },
+ "generic": {
+ "yes": "Oui",
+ "no": "Non",
+ "error": "Erreur",
+ "cancel": "Annuler",
+ "informationShort": "Info",
+ "downloading": "Téléchargement",
+ "extracting": "Extraction",
+ "done": "Fait",
+ "success": "Succès",
+ "confirm": "Confirmed"
+ },
+ "play": {
+ "button": {
+ "northstar_is_running": "En cours d'utilisation",
+ "select_game_dir": "Sélectionner le dossier du jeu",
+ "install": "Installer",
+ "installing": "Installation...",
+ "update": "Mettre à jour",
+ "updating": "Mise à jour...",
+ "ready_to_play": "Jouer"
+ },
+ "unknown_version": "Version inconnue",
+ "see_patch_notes": "voir les notes de version",
+ "players": "joueurs",
+ "servers": "serveurs",
+ "unable_to_load_playercount": "Impossible de charger les statistiques",
+ "northstar_running": "Northstar est en cours d'exécution :",
+ "ea_app_running": "EA App est en cours d'exécution :"
+ },
+ "mods": {
+ "local": {
+ "no_mods": "Aucun mod trouvé.",
+ "delete_confirm": "Êtes-vous certain de vouloir supprimer ce mod ?",
+ "delete": "Supprimer",
+ "part_of_ts_mod": "Ce mod Northstar fait partie d'un mod Thunderstore",
+ "success_deleting": "Succès de la suppression de {modName}"
+ },
+ "online": {
+ "no_match": "Aucun mod correspondant n'a été trouvé.",
+ "try_another_search": "Essayez une autre recherche !"
+ },
+ "menu": {
+ "local": "Local",
+ "online": "En ligne",
+ "filter": "Filtrer",
+ "search": "Chercher",
+ "sort_mods": "Trier les mods",
+ "select_categories": "Choisir les catégories",
+ "sort": {
+ "name_asc": "Par nom (de A à Z)",
+ "name_desc": "Par nom (de Z à A)",
+ "date_asc": "Par date (du plus vieux)",
+ "date_desc": "Par date (du plus récent)",
+ "most_downloaded": "Plus téléchargés",
+ "top_rated": "Mieux notés"
+ }
+ },
+ "card": {
+ "button": {
+ "being_installed": "Installation...",
+ "being_updated": "Mise à jour...",
+ "installed": "Installé",
+ "install": "Installer",
+ "outdated": "Mettre à jour"
+ },
+ "by": "par",
+ "more_info": "Plus d'informations",
+ "remove": "Supprimer le mod",
+ "remove_dialog_title": "Attention",
+ "remove_dialog_text": "Voulez-vous vraiment supprimer ce mod Thunderstore ?",
+ "remove_success": "{modName} supprimé",
+ "install_success": "{modName} installé"
+ }
+ },
+ "settings": {
+ "manage_install": "Gérer l'installation",
+ "choose_folder": "Choisir le dossier d'installation du jeu",
+ "open_game_folder": "Ouvrir le dossier du jeu",
+ "nb_ts_mods_per_page": "Nombre de mods Thunderstore par page",
+ "nb_ts_mods_per_page_desc1": "Ce paramètre a un impact sur les performances d'affichage des mods Thunderstore.",
+ "nb_ts_mods_per_page_desc2": "Réglez-le sur 0 pour désactiver la pagination.",
+ "nb_ts_mods_reset": "Valeur par défaut",
+ "language": "Langue",
+ "language_select": "Sélectionnez votre langue",
+ "about": "À propos",
+ "flightcore_version": "Version de FlightCore :",
+ "testing": "Tests :",
+ "enable_test_channels": "Activer le test de versions de pré-production",
+ "dev_mode_enabled_title": "Attention !",
+ "dev_mode_enabled_text": "Mode développeur activé.",
+ "repair": {
+ "title": "Dépannage",
+ "open_window": "Ouvrir la fenêtre de dépannage",
+ "window": {
+ "title": "Fenêtre de dépannage FlightCore",
+ "warning": "Cette fenêtre contient plusieurs fonctionnalité de résolution de problèmes courants avec Northstar et FlightCore.",
+ "disable_all_but_core": "Désactiver tous les mods (sauf ceux de Northstar)",
+ "disable_all_but_core_success": "Tous les mods sauf ceux de Northstar ont été désactivés",
+ "force_reinstall_ns": "Forcer la réinstallation de Northstar",
+ "force_delete_temp_dl": "Supprimer le dossier de téléchargement temporaire",
+ "delete_persistent_store": "Supprimer l'espace de stockage local de FlightCore",
+ "reinstall_title": "Forcer la réinstallation de Northstar",
+ "reinstall_text": "Veuillez patienter",
+ "reinstall_success": "Northstar réinstallé avec succès",
+ "disable_modsettings": "Désactiver le mod ModSettings",
+ "disable_modsettings_success": "Mod ModSettings désactivé",
+ "kill_northstar_process": "Arrêter le processus en cous de Northstar/Titanfall2"
+ }
+ },
+ "show_deprecated_mods": "Montrer les mods Thunderstore dépréciés",
+ "show_deprecated_mods_desc1": "Ce paramètre vous permet d'afficher les mods Thunderstore dépréciés dans la collection de mods.",
+ "show_deprecated_mods_desc2": "Attention, les mods dépréciés le sont généralement pour une bonne raison.",
+ "profile": {
+ "active": "Profile actif",
+ "edit": "Éditer les profiles",
+ "dialog": {
+ "title": "Profiles",
+ "clone": "Cloner",
+ "delete": "Supprimer",
+ "delete_confirm": "Voulez-vous vraiment supprimer ce profil ?",
+ "create_empty": "nouveau profil",
+ "new_profile_name": "Entrez le nouveau nom du profil"
+ }
+ }
+ },
+ "notification": {
+ "date_prefix": "à",
+ "no_new": {
+ "title": "Vous êtes à jour",
+ "text": "Rien à voir par ici !"
+ },
+ "game_folder": {
+ "new": {
+ "title": "Nouveau dossier",
+ "text": "Le dossier du jeu a bien été mis à jour."
+ },
+ "wrong": {
+ "title": "Mauvais dossier",
+ "text": "Le dossier sélectionné ne contient pas d'installation de Titanfall2."
+ },
+ "not_found": {
+ "title": "Titanfall2 non trouvé !",
+ "text": "Veuillez sélectionner manuellement le dossier du jeu."
+ }
+ },
+ "flightcore_outdated": {
+ "title": "Mise à jour disponible !",
+ "text": "Veuillez mettre à jour FlightCore.\nVersion actuelle : {oldVersion}.\nNouvelle version : {newVersion} !"
+ },
+ "profile": {
+ "invalid": {
+ "text": "Le profile sur lequel vous essayez de basculer n'est plus valide.",
+ "title": "Profile invalide"
+ }
+ }
+ },
+ "channels": {
+ "release": {
+ "switch": {
+ "text": "Le canal de téléchargement a été réglé sur \"{canal}\"."
+ }
+ },
+ "names": {
+ "Northstar": "Northstar",
+ "NorthstarReleaseCandidate": "Version de pré-release"
+ }
+ }
+}
diff --git a/src-vue/src/i18n/lang/it.json b/src-vue/src/i18n/lang/it.json
new file mode 100644
index 00000000..9da8ce8d
--- /dev/null
+++ b/src-vue/src/i18n/lang/it.json
@@ -0,0 +1,175 @@
+{
+ "generic": {
+ "yes": "Si",
+ "no": "No",
+ "error": "Errore",
+ "cancel": "Cancella",
+ "downloading": "Scaricando",
+ "extracting": "Estraendo",
+ "done": "Fatto",
+ "success": "Successo",
+ "informationShort": "Info",
+ "confirm": "Conferma"
+ },
+ "play": {
+ "unknown_version": "Versione sconosciuta",
+ "unable_to_load_playercount": "Impossibile caricare numero giocatori",
+ "northstar_running": "Northstar sta andando:",
+ "origin_running": "Origin sta andando:",
+ "see_patch_notes": "guarda le note della patch",
+ "players": "Giocatori",
+ "servers": "Server",
+ "button": {
+ "northstar_is_running": "Il Gioco sta andando",
+ "install": "Installa",
+ "installing": "Installazione...",
+ "update": "Aggiorna",
+ "updating": "Aggiornamento...",
+ "ready_to_play": "Gioca",
+ "select_game_dir": "Seleziona la cartella di Titanfall 2"
+ },
+ "ea_app_running": "EA App sta andando:"
+ },
+ "mods": {
+ "local": {
+ "no_mods": "Nessuna mod è stata trovata.",
+ "delete_confirm": "Sei sicuro di voler eliminare questa mod?",
+ "part_of_ts_mod": "Questa Northstar mod è parte di una Thunderstore mod",
+ "success_deleting": "{modName} Eliminata con successo",
+ "delete": "Elimina"
+ },
+ "online": {
+ "no_match": "Nessuna mod corrispondente trovata.",
+ "try_another_search": "Prova un'altra ricerca!"
+ },
+ "menu": {
+ "local": "Locale",
+ "filter": "Filtra",
+ "online": "Online",
+ "search": "Cerca",
+ "sort_mods": "Sorteggia mods",
+ "select_categories": "Seleziona categorie",
+ "sort": {
+ "name_asc": "Per nome (da A alla Z)",
+ "name_desc": "Per nome (da Z alla A)",
+ "date_asc": "Per data (dal più vecchio)",
+ "date_desc": "Per data (dal più recente)",
+ "most_downloaded": "Più scaricate",
+ "top_rated": "Più votate"
+ }
+ },
+ "card": {
+ "button": {
+ "being_updated": "Aggiornando...",
+ "installed": "Installato",
+ "being_installed": "Installando...",
+ "install": "Installa",
+ "outdated": "Aggiorna"
+ },
+ "by": "per",
+ "more_info": "Più informazioni",
+ "remove": "Rimuovi mod",
+ "remove_dialog_title": "Attenzione",
+ "remove_dialog_text": "Eliminare Thunderstore mod?",
+ "remove_success": "{modName} Rimossa",
+ "install_success": "{modName} Installata"
+ }
+ },
+ "menu": {
+ "mods": "Mods",
+ "settings": "Impostazioni",
+ "dev": "Dev",
+ "play": "Gioca",
+ "changelog": "Note"
+ },
+ "notification": {
+ "game_folder": {
+ "wrong": {
+ "title": "Cartella errata",
+ "text": "La cartella selezionata non ha un'installazione di Titanfall2 valida."
+ },
+ "new": {
+ "title": "Nuova cartella di gioco",
+ "text": "Cartella di gioco aggiornata con successo."
+ },
+ "not_found": {
+ "title": "Titanfall2 non trovato!",
+ "text": "Per favore selezionare manualmente la posizione dell'installazione"
+ }
+ },
+ "flightcore_outdated": {
+ "title": "FlightCore fuori data!",
+ "text": "Per favore aggiorna FlightCore.\nVersione in uso {oldVersion} fuori data.\nLa più recente è {newVersion}!"
+ },
+ "no_new": {
+ "text": "Niente da vedere qui!",
+ "title": "Aggiornato"
+ },
+ "profile": {
+ "invalid": {
+ "text": "Il profilo a cui hai provato ad accedere non è più valido.",
+ "title": "Profilo non valido"
+ }
+ }
+ },
+ "settings": {
+ "manage_install": "Gestisci l'installazione",
+ "choose_folder": "Scegli la cartella dell'installazione",
+ "open_game_folder": "Apri Cartella",
+ "nb_ts_mods_per_page": "Numero di Thunderstore mods per pagina",
+ "nb_ts_mods_per_page_desc1": "Questo ha un impatto sulle performazioni schermo mentre si navigano le Thunderstore mods.",
+ "nb_ts_mods_per_page_desc2": "Cambiare questo valore a 0 per disattivare la paginazione.",
+ "nb_ts_mods_reset": "Resetta a default",
+ "language": "Lingua",
+ "language_select": "Seleziona la tua lingua preferito",
+ "about": "Al riguardo:",
+ "flightcore_version": "Versione FlighCore:",
+ "testing": "Testando:",
+ "enable_test_channels": "Abilita i canali del test di rilascio",
+ "dev_mode_enabled_title": "Attenzione!",
+ "dev_mode_enabled_text": "Modalità Sviluppatore attivata.",
+ "repair": {
+ "title": "Ripara",
+ "open_window": "Apri finestra di riparazione",
+ "window": {
+ "title": "Finestra riparazione di FlightCore",
+ "warning": "Questa finestra contiene varie funzionalità per riparare problemi comuni con Northstar e FlightCore.",
+ "disable_all_but_core": "Disattiva tutte le mods (eccetto quelle di Northstar)",
+ "disable_all_but_core_success": "Disattivate tutte le mods (eccetto quelle di Northstar)",
+ "force_reinstall_ns": "Forza reinstallazione di Northstar",
+ "force_delete_temp_dl": "Forza l'eliminazione della cartella dei download temporanei",
+ "delete_persistent_store": "Elimina lo spazio d'archiviazione persistente di FlightCore",
+ "reinstall_title": "Reinstallando Northstar forzatamente",
+ "reinstall_text": "Attendere per favore",
+ "reinstall_success": "Northstar reinstallato con successo",
+ "kill_northstar_process": "Ferma il processo Northstar/Titanfall2 in esecuzione",
+ "disable_modsettings_success": "ModSettings disabilitata",
+ "disable_modsettings": "Disabilita la mod ModSettings"
+ }
+ },
+ "profile": {
+ "active": "Profilo attivo",
+ "dialog": {
+ "clone": "Clona",
+ "delete": "Elimina",
+ "delete_confirm": "Sei sicuro di voler eliminare questo profilo?",
+ "title": "Profili"
+ },
+ "edit": "Modifica profilo"
+ },
+ "show_deprecated_mods": "Mostra mod di Thunderstore deprecate",
+ "show_deprecated_mods_desc2": "Fai attenzione, alcune mod di solito sono deprecate per un buon motivo.",
+ "show_deprecated_mods_desc1": "Permette di vedere le mod deprecate nella collezione online."
+ },
+ "channels": {
+ "release": {
+ "switch": {
+ "text": "Cambiato il canale di rilascio a \"{canal}\"."
+ }
+ },
+ "names": {
+ "Northstar": "Northstar",
+ "NorthstarReleaseCandidate": "Northstar versione pre-rilascio"
+ }
+ }
+}
diff --git a/src-vue/src/i18n/lang/pl.json b/src-vue/src/i18n/lang/pl.json
new file mode 100644
index 00000000..175d6eb3
--- /dev/null
+++ b/src-vue/src/i18n/lang/pl.json
@@ -0,0 +1,177 @@
+{
+ "menu": {
+ "changelog": "Dziennik zmian",
+ "mods": "Mody",
+ "settings": "Ustawienia",
+ "dev": "Dev",
+ "play": "Graj"
+ },
+ "generic": {
+ "yes": "Tak",
+ "no": "Nie",
+ "error": "Błąd",
+ "cancel": "Anuluj",
+ "downloading": "Pobieranie",
+ "extracting": "Wypakowywanie",
+ "done": "Gotowe",
+ "success": "Sukces",
+ "informationShort": "Informacja",
+ "confirm": "Potwierdź"
+ },
+ "play": {
+ "button": {
+ "northstar_is_running": "Gra jest uruchomiona",
+ "select_game_dir": "Wybierz folder gry Titanfall2",
+ "install": "Zainstaluj",
+ "update": "Aktualizuj",
+ "updating": "Aktualizowanie...",
+ "ready_to_play": "Uruchom grę",
+ "installing": "Instalowanie..."
+ },
+ "unknown_version": "Nieznana wersja",
+ "see_patch_notes": "zobacz listę zmian",
+ "players": "gracze",
+ "servers": "serwery",
+ "northstar_running": "Northstar jest uruchomiony:",
+ "ea_app_running": "EA App jest uruchomiony:",
+ "unable_to_load_playercount": "Nie można załadować liczby graczy"
+ },
+ "mods": {
+ "local": {
+ "no_mods": "Nie znaleziono żadnych modów.",
+ "delete_confirm": "Czy na pewno chcesz usunąć ten mod?",
+ "delete": "Usuń",
+ "success_deleting": "Sukces usuwania {modName}",
+ "part_of_ts_mod": "Ten mod Northstar jest częścią moda Thunderstore"
+ },
+ "online": {
+ "no_match": "Nie znaleziono pasującego moda.",
+ "try_another_search": "Spróbuj innego wyszukiwania!"
+ },
+ "menu": {
+ "local": "Lokalne",
+ "online": "Online",
+ "filter": "Filtry",
+ "search": "Szukaj",
+ "sort_mods": "Sortowanie modów",
+ "select_categories": "Wybierz kategorie",
+ "sort": {
+ "name_asc": "Według nazwy (od A do Z)",
+ "name_desc": "Według nazwy (od Z do A)",
+ "date_desc": "Według daty (od najnowszej)",
+ "most_downloaded": "Najczęściej pobierane",
+ "top_rated": "Najwyżej ocenione",
+ "date_asc": "Według daty (od najstarszej)"
+ }
+ },
+ "card": {
+ "button": {
+ "being_installed": "Instalowanie...",
+ "being_updated": "Aktualizowanie...",
+ "installed": "Zainstalowano",
+ "install": "Zainstaluj",
+ "outdated": "Aktualizuj"
+ },
+ "by": "od",
+ "more_info": "Więcej informacji",
+ "remove": "Usuń moda",
+ "remove_dialog_title": "Ostrzeżenie",
+ "remove_dialog_text": "Usunąć mod Thunderstore?",
+ "remove_success": "Usunięto {modName}",
+ "install_success": "Zainstalowano {modName}"
+ }
+ },
+ "settings": {
+ "manage_install": "Zarządzaj instalacją",
+ "choose_folder": "Wybierz folder instalacyjny",
+ "nb_ts_mods_per_page": "Liczba modów Thunderstore na stronie",
+ "nb_ts_mods_per_page_desc2": "Ustaw tę wartość na 0, aby wyłączyć paginację.",
+ "nb_ts_mods_reset": "Przywrócenie ustawień domyślnych",
+ "language": "Język",
+ "language_select": "Wybierz swój ulubiony język",
+ "about": "O:",
+ "flightcore_version": "Wersja FlightCore:",
+ "testing": "Testy:",
+ "enable_test_channels": "Włączenie kanałów wydań testowych",
+ "dev_mode_enabled_title": "Uważaj!",
+ "dev_mode_enabled_text": "Tryb deweloperski włączony.",
+ "repair": {
+ "title": "Naprawa",
+ "open_window": "Otwórz okno naprawy",
+ "window": {
+ "disable_all_but_core": "Wyłączenie wszystkich modów poza podstawowymi",
+ "disable_all_but_core_success": "Wyłączone wszystkie mody oprócz podstawowych",
+ "force_reinstall_ns": "Wymuś reinstalację Northstara",
+ "force_delete_temp_dl": "Wymuś usunięcie folderu tymczasowego pobierania",
+ "delete_persistent_store": "Usuń stały magazyn FlightCore",
+ "reinstall_title": "Wymuszona reinstalacja Northstara",
+ "reinstall_text": "Proszę czekać",
+ "reinstall_success": "Pomyślnie przeinstalowano Northstar",
+ "title": "Okno naprawy FlightCore",
+ "warning": "To okno zawiera różne funkcje do naprawy typowych problemów z Northstar i FlightCore.",
+ "disable_modsettings": "Wyłącz moda ModSettings",
+ "disable_modsettings_success": "Wyłączono moda ModSettings",
+ "kill_northstar_process": "Zamknij uruchomiony proces Northstar/Titanfall2"
+ }
+ },
+ "nb_ts_mods_per_page_desc1": "Ma to wpływ na wydajność wyświetlania podczas przeglądania modów Thunderstore.",
+ "open_game_folder": "Otwórz folder",
+ "show_deprecated_mods_desc2": "Ostrożnie, mody są zazwyczaj oznaczone jako przestarzałe nie bez powodu.",
+ "show_deprecated_mods": "Pokaż przestarzałe mody Thunderstore",
+ "show_deprecated_mods_desc1": "Pozwala to zobaczyć przestarzałe mody w kolekcji modów online.",
+ "profile": {
+ "active": "Aktywny profil",
+ "dialog": {
+ "title": "Profile",
+ "delete": "Usuń",
+ "clone": "Klonuj",
+ "new_profile_name": "Wprowadź nową nazwę profilu",
+ "create_empty": "Nowy profil",
+ "delete_confirm": "Czy na pewno chcesz usunąć ten profil?"
+ },
+ "edit": "Edytuj profile"
+ }
+ },
+ "notification": {
+ "game_folder": {
+ "new": {
+ "title": "Nowy folder z grą",
+ "text": "Folder gry został pomyślnie zaktualizowany."
+ },
+ "wrong": {
+ "title": "Niewłaściwy folder",
+ "text": "Wybrany folder nie jest poprawną instalacją Titanfall2."
+ },
+ "not_found": {
+ "title": "Nie znaleziono Titanfall2!",
+ "text": "Proszę ręcznie wybrać lokalizację instalacji"
+ }
+ },
+ "flightcore_outdated": {
+ "title": "FlightCore nieaktualny!",
+ "text": "Proszę zaktualizować FlightCore.\nUruchomiono przestarzałą wersję {oldVersion}.\nNajnowsza to {newVersion}!"
+ },
+ "profile": {
+ "invalid": {
+ "title": "Nieprawidłowy profil",
+ "text": "Profil, na który próbowano się przełączyć, nie jest już prawidłowy."
+ }
+ },
+ "no_new": {
+ "title": "Aktualny",
+ "text": "Nie ma tu nic do obejrzenia!"
+ },
+ "date_prefix": "na"
+ },
+ "channels": {
+ "release": {
+ "switch": {
+ "text": "Przełączono kanał wydań na \"{canal}\"."
+ }
+ },
+ "names": {
+ "Northstar": "Northstar",
+ "NorthstarReleaseCandidate": "Kandydat do wydania Northstar"
+ }
+ }
+}
diff --git a/src-vue/src/i18n/lang/ru.json b/src-vue/src/i18n/lang/ru.json
new file mode 100644
index 00000000..b0261299
--- /dev/null
+++ b/src-vue/src/i18n/lang/ru.json
@@ -0,0 +1,178 @@
+{
+ "generic": {
+ "yes": "Да",
+ "no": "Нет",
+ "extracting": "Распаковывание",
+ "done": "Готово",
+ "success": "Успешно",
+ "error": "Ошибка",
+ "cancel": "Отмена",
+ "informationShort": "Информация",
+ "downloading": "Скачивание",
+ "confirm": "Подтвердить"
+ },
+ "menu": {
+ "mods": "Моды",
+ "play": "Играть",
+ "settings": "Настройки",
+ "dev": "Разработчик",
+ "changelog": "Обновления"
+ },
+ "play": {
+ "button": {
+ "northstar_is_running": "Игра запущена",
+ "install": "Установить",
+ "installing": "Установка...",
+ "updating": "Обновление...",
+ "ready_to_play": "Запустить игру",
+ "update": "Обновить",
+ "select_game_dir": "Выберите папку с Titanfall 2"
+ },
+ "unknown_version": "Неизвестная версия",
+ "players": "игроков",
+ "servers": "серверов",
+ "unable_to_load_playercount": "Не можем загрузить количество игроков",
+ "northstar_running": "Northstar запущен:",
+ "ea_app_running": "EA App запущен:",
+ "see_patch_notes": "просмотреть список изменений"
+ },
+ "mods": {
+ "local": {
+ "delete_confirm": "Вы уверены, что хотите удалить этот мод?",
+ "delete": "Удалить",
+ "success_deleting": "{modName} Успешно удален",
+ "no_mods": "Моды не найдены.",
+ "part_of_ts_mod": "Этот мод Northstar является частью мода на Thunderstore"
+ },
+ "online": {
+ "no_match": "Не найдено совпадающих модов.",
+ "try_another_search": "Попробуйте другой запрос!"
+ },
+ "menu": {
+ "online": "Онлайн",
+ "filter": "Фильтр",
+ "search": "Поиск",
+ "sort_mods": "Сортировать моды",
+ "sort": {
+ "name_asc": "По имени (от A до Z)",
+ "name_desc": "По имени (от Z до A)",
+ "date_asc": "По дате (со старейшего)",
+ "date_desc": "По дате (с новейшего)",
+ "top_rated": "Самый популярный",
+ "most_downloaded": "Самый загружаемый"
+ },
+ "local": "Установленные",
+ "select_categories": "Выбрать категории"
+ },
+ "card": {
+ "button": {
+ "being_installed": "Установка...",
+ "being_updated": "Обновление...",
+ "installed": "Установлен",
+ "install": "Установить",
+ "outdated": "Обновить"
+ },
+ "by": "от",
+ "remove": "Удалить мод",
+ "remove_dialog_title": "Внимание",
+ "remove_dialog_text": "Удалить мод Thunderstore?",
+ "remove_success": "{modName} Удален",
+ "more_info": "Подробнее",
+ "install_success": "{modName} Установлен"
+ }
+ },
+ "settings": {
+ "manage_install": "Управлять установкой",
+ "choose_folder": "Выберите папку установки",
+ "open_game_folder": "Открыть папку",
+ "nb_ts_mods_reset": "Вернуть по умолчанию",
+ "language": "Язык",
+ "language_select": "Выберите свой любимый язык",
+ "testing": "Тестирование:",
+ "enable_test_channels": "Включить каналы с тестовыми релизами",
+ "dev_mode_enabled_title": "Осторожно!",
+ "repair": {
+ "open_window": "Открыть окно фиксов",
+ "window": {
+ "title": "Окно фиксов FlightCore",
+ "force_reinstall_ns": "Принудительно переустановить Northstar",
+ "delete_persistent_store": "Удалить постоянное хранилище FlightCore",
+ "reinstall_title": "Принудительно переустанавливаем Northstar",
+ "reinstall_text": "Пожалуйста, подождите",
+ "disable_all_but_core_success": "Выключены все моды кроме главных",
+ "disable_all_but_core": "Выключить все моды, кроме главных",
+ "warning": "Это окно содержит различные функции для устранения часто возникающих проблем с Northstar и FlightCore.",
+ "force_delete_temp_dl": "Принудительно удалить папку с временными загрузками",
+ "reinstall_success": "Northstar успешно переустановлен",
+ "disable_modsettings": "Выключить мод ModSettings",
+ "disable_modsettings_success": "Выключен мод ModSettings",
+ "kill_northstar_process": "Закрыть запущенный Northstar/Titanfall 2"
+ },
+ "title": "Фиксы"
+ },
+ "nb_ts_mods_per_page_desc1": "Это влияет на производительность при просмотре модов с Thunderstore.",
+ "about": "Информация:",
+ "nb_ts_mods_per_page": "Количество модов Thunderstore на каждую страницу",
+ "nb_ts_mods_per_page_desc2": "Установите это значение на 0, чтобы отключить страницы.",
+ "flightcore_version": "Версия FlightCore:",
+ "dev_mode_enabled_text": "Включен режим разработчика.",
+ "show_deprecated_mods": "Показать устаревшие моды Thunderstore",
+ "show_deprecated_mods_desc1": "Это позволяет вам видеть устаревшие моды в меню онлайн модов.",
+ "show_deprecated_mods_desc2": "Внимание, такие моды обычно устаревшие по хорошей причине.",
+ "profile": {
+ "active": "Активный Профиль",
+ "edit": "Редактировать Профили",
+ "dialog": {
+ "title": "Профили",
+ "clone": "Копировать",
+ "delete": "Удалить",
+ "delete_confirm": "Вы уверены, что хотите удалить этот профиль?",
+ "new_profile_name": "Введите новое имя профиля",
+ "create_empty": "Новый профиль"
+ }
+ },
+ "show_nsfw_mods": "Показывать NSFW-моды с Thunderstore"
+ },
+ "notification": {
+ "game_folder": {
+ "new": {
+ "title": "Новая папка игры",
+ "text": "Папка игры успешно обновлена."
+ },
+ "wrong": {
+ "title": "Неправильная папка",
+ "text": "Выбранная папка не является папкой с Titanfall 2."
+ },
+ "not_found": {
+ "title": "Titanfall 2 не найден!",
+ "text": "Пожалуйста, вручную выберите место установки"
+ }
+ },
+ "flightcore_outdated": {
+ "title": "FlightCore устарел!",
+ "text": "Пожалуйста, обновите FlightCore\nСейчас запущена старая версия - {oldVersion}.\nНовейшая версия - {newVersion}!"
+ },
+ "profile": {
+ "invalid": {
+ "title": "Некорректный Профиль",
+ "text": "Профиль, на который вы пытаетесь переключиться, больше не является корректным."
+ }
+ },
+ "no_new": {
+ "text": "Смотреть здесь нечего!",
+ "title": "Нет уведомлений"
+ },
+ "date_prefix": "в"
+ },
+ "channels": {
+ "release": {
+ "switch": {
+ "text": "Релизный канал переключен на \"{canal}\"."
+ }
+ },
+ "names": {
+ "Northstar": "Northstar",
+ "NorthstarReleaseCandidate": "Пре-релизная версия Northstar"
+ }
+ }
+}
diff --git a/src-vue/src/i18n/lang/zh_Hans.json b/src-vue/src/i18n/lang/zh_Hans.json
new file mode 100644
index 00000000..dca36f98
--- /dev/null
+++ b/src-vue/src/i18n/lang/zh_Hans.json
@@ -0,0 +1,169 @@
+{
+ "menu": {
+ "mods": "模组",
+ "settings": "设置",
+ "dev": "开发者模式",
+ "play": "开始游玩",
+ "changelog": "更新日志"
+ },
+ "generic": {
+ "error": "错误",
+ "cancel": "取消",
+ "yes": "是",
+ "no": "否",
+ "informationShort": "信息",
+ "downloading": "下载中",
+ "extracting": "解压中",
+ "done": "完成",
+ "success": "成功",
+ "confirm": "确认"
+ },
+ "play": {
+ "button": {
+ "northstar_is_running": "游戏正在运行",
+ "select_game_dir": "选择Titanfall 2游戏目录",
+ "install": "安装",
+ "installing": "安装中...",
+ "update": "升级",
+ "ready_to_play": "启动游戏",
+ "updating": "升级中..."
+ },
+ "unknown_version": "未知版本",
+ "see_patch_notes": "参阅相关补丁说明",
+ "servers": "服务器",
+ "players": "玩家",
+ "unable_to_load_playercount": "加载玩家数量失败",
+ "ea_app_running": "EA App运行状态:",
+ "northstar_running": "Northstar运行状态:"
+ },
+ "mods": {
+ "local": {
+ "no_mods": "未找到模组。",
+ "delete_confirm": "你确定要删除该模组吗?",
+ "delete": "删除",
+ "part_of_ts_mod": "该Northstar模组来源于Thunderstore",
+ "success_deleting": "成功删除 {modName}"
+ },
+ "online": {
+ "try_another_search": "尝试其他搜索方式!",
+ "no_match": "未找到相匹配的模组。"
+ },
+ "menu": {
+ "local": "本地",
+ "search": "搜索",
+ "sort_mods": "模组排序",
+ "select_categories": "标签选择",
+ "sort": {
+ "date_desc": "日期降序",
+ "date_asc": "日期升序",
+ "name_desc": "按名称(Z到A)",
+ "most_downloaded": "最多下载",
+ "top_rated": "最高评分",
+ "name_asc": "按名称(A到Z)"
+ },
+ "online": "线上",
+ "filter": "筛选"
+ },
+ "card": {
+ "button": {
+ "being_installed": "安装中...",
+ "being_updated": "升级中...",
+ "installed": "已安装",
+ "install": "安装",
+ "outdated": "升级"
+ },
+ "by": "作者:",
+ "remove": "移除模组",
+ "remove_dialog_title": "警告",
+ "remove_success": "已移除{modName}",
+ "install_success": "已安装 {modName}",
+ "more_info": "更多信息",
+ "remove_dialog_text": "删除该来自Thunderstore的模组?"
+ }
+ },
+ "settings": {
+ "manage_install": "安装管理",
+ "choose_folder": "选择安装目录",
+ "open_game_folder": "打开文件夹",
+ "nb_ts_mods_per_page": "Thunderstore每页显示多少个模组",
+ "nb_ts_mods_per_page_desc2": "该值设为0时将不再显示页码。",
+ "nb_ts_mods_reset": "重置为默认值",
+ "language": "语言",
+ "language_select": "请选择你需要的语言",
+ "about": "关于:",
+ "flightcore_version": "FlightCore 版本:",
+ "testing": "测试选项:",
+ "enable_test_channels": "开启测试版本选项",
+ "nb_ts_mods_per_page_desc1": "该数值对加载Thunderstore页面时的速度有影响。",
+ "dev_mode_enabled_title": "看上面!",
+ "dev_mode_enabled_text": "开发者模式已启用。",
+ "show_deprecated_mods": "显示已弃用的Thunderstore模组",
+ "show_deprecated_mods_desc1": "该选项会使您可以在线上模组合集中看到已弃用的模组。",
+ "show_deprecated_mods_desc2": "请注意,这类模组被弃用一般是有原因的。",
+ "repair": {
+ "title": "修复",
+ "window": {
+ "title": "FlightCore 修复工具",
+ "warning": "此工具包含修复Northstar和FlightCore各种常见问题的功能。",
+ "disable_all_but_core": "除了核心模组以外禁用其他模组",
+ "disable_all_but_core_success": "已禁用除核心模组以外的所有模组",
+ "disable_modsettings": "禁用ModSettings模组",
+ "disable_modsettings_success": "已禁用ModSettings模组",
+ "force_delete_temp_dl": "强制删除临时下载目录",
+ "delete_persistent_store": "删除FlightCore永久存储文件",
+ "reinstall_text": "请耐心等待",
+ "reinstall_success": "成功重装Northstar",
+ "force_reinstall_ns": "强制重装Northstar",
+ "reinstall_title": "正在强制重装Northstar",
+ "kill_northstar_process": "终止正在运行的 Northstar/Titanfall2 进程"
+ },
+ "open_window": "打开修复工具"
+ },
+ "profile": {
+ "active": "当前用户配置",
+ "edit": "编辑用户配置",
+ "dialog": {
+ "title": "用户配置",
+ "delete_confirm": "你确定要删除此配置文件吗?",
+ "delete": "删除"
+ }
+ }
+ },
+ "notification": {
+ "game_folder": {
+ "new": {
+ "title": "新的游戏目录",
+ "text": "已成功更新游戏目录。"
+ },
+ "wrong": {
+ "title": "错误的文件夹",
+ "text": "所选文件夹不是有效的Titanfall2安装目录。"
+ },
+ "not_found": {
+ "title": "未找到Titanfall2!",
+ "text": "请手动选择安装目录"
+ }
+ },
+ "flightcore_outdated": {
+ "title": "FlightCore需要更新!",
+ "text": "请更新FlightCore.\n正在运行旧版本 {oldVersion}.\n最新版本为 {newVersion}!"
+ },
+ "profile": {
+ "invalid": {
+ "title": "无效用户配置",
+ "text": "您尝试切换到的用户配置已失效。"
+ }
+ }
+ },
+ "channels": {
+ "release": {
+ "switch": {
+ "text": "将资源版本切换至 \"{canal}\"."
+ }
+ },
+ "names": {
+ "NorthstarReleaseCandidate": "Northstar测试版本",
+ "Northstar": "Northstar"
+ }
+ }
+}
diff --git a/src-vue/src/main.ts b/src-vue/src/main.ts
index b670de8b..9d8fee83 100644
--- a/src-vue/src/main.ts
+++ b/src-vue/src/main.ts
@@ -1,4 +1,67 @@
-import { createApp } from "vue";
-import App from "./App.vue";
+import { createApp } from 'vue'
+import { createI18n } from "vue-i18n";
+import App from './App.vue'
+import ElementPlus from "element-plus";
+import * as ElementPlusIconsVue from '@element-plus/icons-vue'
+import { store } from './plugins/store';
+import PlayView from "./views/PlayView.vue";
+import ChangelogView from "./views/ChangelogView.vue";
+import ModsView from "./views/ModsView.vue";
+import SettingsView from "./views/SettingsView.vue";
+import DeveloperView from "./views/DeveloperView.vue";
+import RepairView from "./views/RepairView.vue";
+import {createRouter, createWebHashHistory} from "vue-router";
+import en from "./i18n/lang/en.json";
+import fr from "./i18n/lang/fr.json";
+import da from "./i18n/lang/da.json";
+import de from "./i18n/lang/de.json";
+import es from "./i18n/lang/es.json";
+import pl from "./i18n/lang/pl.json";
+import ru from "./i18n/lang/ru.json";
+import it from "./i18n/lang/it.json";
+import zh_Hans from "./i18n/lang/zh_Hans.json";
-createApp(App).mount("#app");
+
+const app = createApp(App);
+
+// internationalization
+export const i18n = createI18n({
+ locale: 'en',
+ fallbackLocale: 'en',
+ messages: {
+ en, fr, da, de, es, pl, ru, it, zh_Hans
+ }
+});
+app.use(i18n);
+
+// styles
+import 'element-plus/theme-chalk/index.css';
+import './style.css'
+
+app.use(ElementPlus);
+
+// icons
+for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
+ app.component(key, component);
+}
+
+// style
+
+
+// routes
+const routes = [
+ { path: '/', name: 'Main', component: async () => PlayView},
+ { path: '/changelog', name: 'Changelog', component: async () => ChangelogView},
+ { path: '/mods', name: 'Mods', component: async () => ModsView},
+ { path: '/settings', name: 'Settings', component: async () => SettingsView},
+ { path: '/dev', name: 'Dev', component: async () => DeveloperView},
+ { path: '/repair', name: 'Repair', component: async () => RepairView},
+];
+export const router = createRouter({
+ history: createWebHashHistory(),
+ routes, // short for `routes: routes`
+});
+app.use(router);
+
+
+app.mount('#app')
diff --git a/src-vue/src/plugins/modules/notifications.ts b/src-vue/src/plugins/modules/notifications.ts
new file mode 100644
index 00000000..ed57f8af
--- /dev/null
+++ b/src-vue/src/plugins/modules/notifications.ts
@@ -0,0 +1,31 @@
+type NotificationType = 'success' | 'warning' | 'info' | 'error';
+
+export interface Notification {
+ title: string;
+ text: string;
+ type: NotificationType;
+}
+
+interface NotificationsStoreState {
+ notifications: Notification[];
+}
+
+
+/**
+ * This notification module is meant to host the list of notifications that have been fired while the application was
+ * not focused.
+ * This list is then used by the [NotificationButton] component to display notifications to user.
+ **/
+export const notificationsModule = {
+ state: () => ({
+ notifications: []
+ }) as NotificationsStoreState,
+ mutations: {
+ addNotification(state: NotificationsStoreState, payload: Notification) {
+ state.notifications.push(payload);
+ },
+ removeNotification(state: NotificationsStoreState, index: number): void {
+ state.notifications.splice(index, 1);
+ }
+ }
+ }
diff --git a/src-vue/src/plugins/store.ts b/src-vue/src/plugins/store.ts
new file mode 100644
index 00000000..d77fbc42
--- /dev/null
+++ b/src-vue/src/plugins/store.ts
@@ -0,0 +1,9 @@
+import { createStore } from 'vuex';
+
+
+/**
+ * This is called when application root component has been mounted.
+ * It invokes all Rust methods that are needed to initialize UI.
+ */
+async function _initializeApp(state: any) {
+}
diff --git a/src-vue/src/style.css b/src-vue/src/style.css
new file mode 100644
index 00000000..d322a0dd
--- /dev/null
+++ b/src-vue/src/style.css
@@ -0,0 +1,56 @@
+* {
+ box-sizing: border-box;
+}
+
+html, body {
+ height: 100%;
+ width: 100%;
+}
+
+body {
+ margin: 0;
+ font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', '微软雅黑', Arial, sans-serif;
+ --fc-menu_height: 50px;
+ user-select: none;
+}
+
+#app {
+ position: relative;
+ height: 100%;
+ width: 100%;
+}
+
+#fc_bg__container {
+ background: url(/src/assets/mp_colony020033.jpg) center no-repeat;
+ background-size: cover;
+ height: 100%;
+ width: 100%;
+ position: fixed;
+ filter: brightness(0.8);
+ scale: 1.03;
+}
+
+.el-scrollbar {
+ --el-scrollbar-opacity: 0.5;
+ --el-scrollbar-hover-opacity: 0.7;
+}
+
+.fc-container {
+ position: relative;
+ padding-top: var(--fc-menu_height);
+ height: 100%;
+ color: white;
+}
+
+.noModMessage {
+ color: white;
+ margin: 30px 15px;
+}
+
+.fc_popper {
+ width: auto !important;
+}
+
+.el-popconfirm {
+ word-break: break-word;
+}
diff --git a/src-vue/src/utils/GameInstall.ts b/src-vue/src/utils/GameInstall.ts
new file mode 100644
index 00000000..162d2860
--- /dev/null
+++ b/src-vue/src/utils/GameInstall.ts
@@ -0,0 +1,5 @@
+export interface GameInstall {
+ game_path: string;
+ profile: string,
+ install_type: string;
+}
diff --git a/src-vue/src/utils/NorthstarState.ts b/src-vue/src/utils/NorthstarState.ts
new file mode 100644
index 00000000..2c8756b1
--- /dev/null
+++ b/src-vue/src/utils/NorthstarState.ts
@@ -0,0 +1,8 @@
+export enum NorthstarState {
+ GAME_NOT_FOUND = "GAME_NOT_FOUND",
+ INSTALL = "INSTALL",
+ INSTALLING = "INSTALLING",
+ MUST_UPDATE = "MUST_UPDATE",
+ UPDATING = "UPDATING",
+ READY_TO_PLAY = "READY_TO_PLAY"
+} \ No newline at end of file
diff --git a/src-vue/src/utils/ReleaseCanal.ts b/src-vue/src/utils/ReleaseCanal.ts
new file mode 100644
index 00000000..9363aa25
--- /dev/null
+++ b/src-vue/src/utils/ReleaseCanal.ts
@@ -0,0 +1,4 @@
+export enum ReleaseCanal {
+ RELEASE = <any>'Northstar',
+ RELEASE_CANDIDATE = <any>'NorthstarReleaseCandidate'
+}
diff --git a/src-vue/src/utils/SortOptions.d.ts b/src-vue/src/utils/SortOptions.d.ts
new file mode 100644
index 00000000..b6f180d2
--- /dev/null
+++ b/src-vue/src/utils/SortOptions.d.ts
@@ -0,0 +1,8 @@
+export enum SortOptions {
+ NAME_ASC = 'name_asc',
+ NAME_DESC = 'name_desc',
+ DATE_ASC = 'date_asc',
+ DATE_DESC = 'date_desc',
+ MOST_DOWNLOADED = 'most_downloaded',
+ TOP_RATED = 'top_rated'
+}
diff --git a/src-vue/src/utils/Tabs.ts b/src-vue/src/utils/Tabs.ts
new file mode 100644
index 00000000..5d31379c
--- /dev/null
+++ b/src-vue/src/utils/Tabs.ts
@@ -0,0 +1,8 @@
+export enum Tabs {
+ PLAY = '/',
+ CHANGELOG = '/changelog',
+ SETTINGS = '/settings',
+ DEV = '/dev',
+ MODS = '/mods',
+ REPAIR = '/repair',
+}
diff --git a/src-vue/src/utils/filter.ts b/src-vue/src/utils/filter.ts
new file mode 100644
index 00000000..b85b9623
--- /dev/null
+++ b/src-vue/src/utils/filter.ts
@@ -0,0 +1,26 @@
+/**
+ * Implements a fuzzy filter
+ * Iterates through chars of `search_term` and checks if each char exists in consecutive order in `text`.
+ * For example, this means that `text="Gecko"` and `search_term="geo"` will return `true`
+ * but using `text="Gecko"` and `search_term="goe"` will return `false`
+ *
+ * Implements a subset of "fuzzy string searching"
+ * https://en.wikipedia.org/wiki/Approximate_string_matching
+ */
+function fuzzy_filter(text: string, search_term: string): boolean {
+ const lowercase_text = text.toLowerCase();
+ const lowercase_search_term = search_term.toLowerCase();
+
+ let previousIndex = -1;
+ for (let i = 0; i < lowercase_search_term.length; i++) {
+ const char = lowercase_search_term[i];
+ const currentIndex = lowercase_text.indexOf(char, previousIndex + 1);
+ if (currentIndex === -1) {
+ return false;
+ }
+ previousIndex = currentIndex;
+ }
+
+ return true;
+}
+export { fuzzy_filter };
diff --git a/src-vue/src/utils/thunderstore/ThunderstoreModStatus.ts b/src-vue/src/utils/thunderstore/ThunderstoreModStatus.ts
new file mode 100644
index 00000000..f2351226
--- /dev/null
+++ b/src-vue/src/utils/thunderstore/ThunderstoreModStatus.ts
@@ -0,0 +1,7 @@
+export enum ThunderstoreModStatus {
+ INSTALLED,
+ BEING_INSTALLED,
+ BEING_UPDATED,
+ NOT_INSTALLED,
+ OUTDATED
+}
diff --git a/src-vue/src/utils/thunderstore/version.ts b/src-vue/src/utils/thunderstore/version.ts
new file mode 100644
index 00000000..a111e08c
--- /dev/null
+++ b/src-vue/src/utils/thunderstore/version.ts
@@ -0,0 +1,33 @@
+import {ThunderstoreMod} from "../../../../src-tauri/bindings/ThunderstoreMod";
+import {NorthstarMod} from "../../../../src-tauri/bindings/NorthstarMod";
+import {store} from "../../plugins/store";
+
+/**
+ * Strips off a Thunderstore dependency string from its version
+ * (e.g. "taskinoz-WallrunningTitans-1.0.0" to
+ * "taskinoz-WallrunningTitans").
+ **/
+function getThunderstoreDependencyStringPrefix(dependency: string): string {
+ const dependencyStringMembers = dependency.split('-');
+ return `${dependencyStringMembers[0]}-${dependencyStringMembers[1]}`;
+}
+
+function isThunderstoreModOutdated(mod: ThunderstoreMod): boolean {
+ // Ensure mod is up-to-date.
+ const tsModPrefix = getThunderstoreDependencyStringPrefix(mod.versions[0].full_name);
+ const matchingMods: NorthstarMod[] = store.state.installed_mods.filter((mod: NorthstarMod) => {
+ if (!mod.thunderstore_mod_string) return false;
+ return getThunderstoreDependencyStringPrefix(mod.thunderstore_mod_string!) === tsModPrefix;
+ });
+ if (matchingMods.length !== 0) {
+ // There shouldn't be several mods with same dependency string, but we never know...
+ const matchingMod = matchingMods[0];
+ // A mod is outdated if its dependency strings differs from Thunderstore dependency string
+ // (no need for semver check here).
+ // This assumes mod versions list is sorted from newest to oldest version.
+ return matchingMod.thunderstore_mod_string !== mod.versions[0].full_name;
+ }
+ return false;
+}
+
+export { isThunderstoreModOutdated };
diff --git a/src-vue/src/views/ChangelogView.vue b/src-vue/src/views/ChangelogView.vue
new file mode 100644
index 00000000..1c525a32
--- /dev/null
+++ b/src-vue/src/views/ChangelogView.vue
@@ -0,0 +1,10 @@
+<template>
+ <div class="fc-container">
+ </div>
+</template>
+
+<script lang="ts">
+</script>
+
+<style>
+</style>
diff --git a/src-vue/src/views/DeveloperView.vue b/src-vue/src/views/DeveloperView.vue
new file mode 100644
index 00000000..3a187b18
--- /dev/null
+++ b/src-vue/src/views/DeveloperView.vue
@@ -0,0 +1,10 @@
+<template>
+ <div class="fc-container">
+ </div>
+</template>
+
+<script lang="ts">
+</script>
+
+<style scoped>
+</style>
diff --git a/src-vue/src/views/ModsView.vue b/src-vue/src/views/ModsView.vue
new file mode 100644
index 00000000..2c55e401
--- /dev/null
+++ b/src-vue/src/views/ModsView.vue
@@ -0,0 +1,13 @@
+<template>
+ <div class="fc-container" style="display: flex">
+ </div>
+</template>
+
+<script lang="ts">
+import LocalModsView from "./mods/LocalModsView.vue";
+import ModsMenu from "../components/ModsMenu.vue";
+
+</script>
+
+<style scoped>
+</style>
diff --git a/src-vue/src/views/PlayView.vue b/src-vue/src/views/PlayView.vue
new file mode 100644
index 00000000..1f58c803
--- /dev/null
+++ b/src-vue/src/views/PlayView.vue
@@ -0,0 +1,10 @@
+<script lang="ts">
+</script>
+
+<template>
+ <div class="fc_launch__container">
+ </div>
+</template>
+
+<style scoped>
+</style>
diff --git a/src-vue/src/views/RepairView.vue b/src-vue/src/views/RepairView.vue
new file mode 100644
index 00000000..3a187b18
--- /dev/null
+++ b/src-vue/src/views/RepairView.vue
@@ -0,0 +1,10 @@
+<template>
+ <div class="fc-container">
+ </div>
+</template>
+
+<script lang="ts">
+</script>
+
+<style scoped>
+</style>
diff --git a/src-vue/src/views/SettingsView.vue b/src-vue/src/views/SettingsView.vue
new file mode 100644
index 00000000..3b0879d3
--- /dev/null
+++ b/src-vue/src/views/SettingsView.vue
@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script lang="ts">
+</script>
+
+<style scoped>
+</style>
diff --git a/src-vue/src/views/mods/LocalModsView.vue b/src-vue/src/views/mods/LocalModsView.vue
new file mode 100644
index 00000000..3b0879d3
--- /dev/null
+++ b/src-vue/src/views/mods/LocalModsView.vue
@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script lang="ts">
+</script>
+
+<style scoped>
+</style>
diff --git a/src-vue/src/views/mods/ThunderstoreModsView.vue b/src-vue/src/views/mods/ThunderstoreModsView.vue
new file mode 100644
index 00000000..b100b118
--- /dev/null
+++ b/src-vue/src/views/mods/ThunderstoreModsView.vue
@@ -0,0 +1,10 @@
+<template>
+ <div class="fc-container" style="padding: 0">
+ </div>
+</template>
+
+<script lang="ts">
+</script>
+
+<style scoped>
+</style>
diff --git a/src-vue/tsconfig.json b/src-vue/tsconfig.json
index f82888f3..e149a27f 100644
--- a/src-vue/tsconfig.json
+++ b/src-vue/tsconfig.json
@@ -3,22 +3,18 @@
"target": "ES2020",
"useDefineForClassFields": true,
"module": "ESNext",
- "lib": ["ES2020", "DOM", "DOM.Iterable"],
- "skipLibCheck": true,
-
- /* Bundler mode */
"moduleResolution": "bundler",
+ "strict": true,
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "preserve",
-
- /* Linting */
- "strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
- "noFallthroughCasesInSwitch": true
+ "noFallthroughCasesInSwitch": true,
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "skipLibCheck": true
},
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
"references": [{ "path": "./tsconfig.node.json" }]