diff --git a/package-lock.json b/package-lock.json
index eb5707579..9dd2c072d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -39,11 +39,13 @@
"@nextcloud/vite-config": "^2.5.2",
"@playwright/test": "^1.61.1",
"@types/node": "^26.1.1",
+ "@types/qrcode": "^1.5.6",
"@vue/tsconfig": "^0.9.1",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-prettier": "^5.5.6",
"prettier": "^3.9.5",
- "vite": "^7.3.6"
+ "vite": "^7.3.6",
+ "vue-tsc": "^3.3.7"
},
"engines": {
"node": "^24.0.0",
@@ -3194,6 +3196,16 @@
"undici-types": "~8.3.0"
}
},
+ "node_modules/@types/qrcode": {
+ "version": "1.5.6",
+ "resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.5.6.tgz",
+ "integrity": "sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@types/semver": {
"version": "7.7.1",
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz",
@@ -13106,6 +13118,46 @@
}
}
},
+ "node_modules/vue-tsc": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.3.7.tgz",
+ "integrity": "sha512-+C+rgD49wAQ5bUTl2sp5a8Bzg4YoldMNXM+g7CFe604MYcQ8PrZPMQhIjJSzKXtPBCa+C5ayMipqjbA7splekQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/typescript": "2.4.28",
+ "@vue/language-core": "3.3.7"
+ },
+ "bin": {
+ "vue-tsc": "bin/vue-tsc.js"
+ },
+ "peerDependencies": {
+ "typescript": ">=5.0.0"
+ }
+ },
+ "node_modules/vue-tsc/node_modules/@vue/language-core": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.3.7.tgz",
+ "integrity": "sha512-LzmkKinXAMMoh8Jfi/jMUSDUjuPdv8mynH5WJGKfXyZtDw3hQ6GBaoI6Bcnl/Xqlu32q/0Z6i/trp4VXykzyLw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/language-core": "2.4.28",
+ "@vue/compiler-dom": "^3.5.0",
+ "@vue/shared": "^3.5.0",
+ "alien-signals": "^3.2.1",
+ "muggle-string": "^0.4.1",
+ "path-browserify": "^1.0.1",
+ "picomatch": "^4.0.4"
+ }
+ },
+ "node_modules/vue-tsc/node_modules/alien-signals": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.2.1.tgz",
+ "integrity": "sha512-I8FjmltrfnDFoZedi5CG8DghVYNhzb/Ijluz7tCSJH0xpd0484Kowhbb1XDYOxfJpU1p5wnM2X54dA+IfGyD1g==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/wait-on": {
"version": "9.0.10",
"resolved": "https://registry.npmjs.org/wait-on/-/wait-on-9.0.10.tgz",
diff --git a/package.json b/package.json
index 599b85c95..d4e846e12 100644
--- a/package.json
+++ b/package.json
@@ -23,7 +23,8 @@
"lint:fix": "eslint --ext .js,.ts,.vue src --fix",
"start:nextcloud": "node playwright/start-nextcloud-server.mjs",
"stylelint": "stylelint \"src/**/*.scss\" \"src/**/*.vue\"",
- "stylelint:fix": "stylelint \"src/**/*.scss\" \"src/**/*.vue\" --fix"
+ "stylelint:fix": "stylelint \"src/**/*.scss\" \"src/**/*.vue\" --fix",
+ "typecheck": "vue-tsc --noEmit -p tsconfig.json"
},
"browserslist": [
"extends @nextcloud/browserslist-config"
@@ -59,11 +60,13 @@
"@nextcloud/vite-config": "^2.5.2",
"@playwright/test": "^1.61.1",
"@types/node": "^26.1.1",
+ "@types/qrcode": "^1.5.6",
"@vue/tsconfig": "^0.9.1",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-prettier": "^5.5.6",
"prettier": "^3.9.5",
- "vite": "^7.3.6"
+ "vite": "^7.3.6",
+ "vue-tsc": "^3.3.7"
},
"engines": {
"node": "^24.0.0",
diff --git a/src/components/AppNavigationForm.vue b/src/components/AppNavigationForm.vue
index 232bea551..21dcfb774 100644
--- a/src/components/AppNavigationForm.vue
+++ b/src/components/AppNavigationForm.vue
@@ -97,7 +97,10 @@
-
diff --git a/src/components/PaginationToolbar.vue b/src/components/PaginationToolbar.vue
index f84d0b848..741321fb2 100644
--- a/src/components/PaginationToolbar.vue
+++ b/src/components/PaginationToolbar.vue
@@ -63,16 +63,18 @@
-