From 3ff8539fec89508acc19e936142859049a5b58d5 Mon Sep 17 00:00:00 2001 From: "homarr-renovate[bot]" <158783068+homarr-renovate[bot]@users.noreply.github.com> Date: Fri, 1 Nov 2024 19:24:24 +0000 Subject: [PATCH 01/21] chore(deps): update dependency eslint to ^9.14.0 (#1396) Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com> --- apps/nextjs/package.json | 2 +- apps/tasks/package.json | 2 +- apps/websocket/package.json | 2 +- packages/analytics/package.json | 2 +- packages/api/package.json | 2 +- packages/auth/package.json | 2 +- packages/cli/package.json | 2 +- packages/common/package.json | 2 +- packages/cron-job-runner/package.json | 2 +- packages/cron-job-status/package.json | 2 +- packages/cron-jobs-core/package.json | 2 +- packages/cron-jobs/package.json | 2 +- packages/db/package.json | 2 +- packages/definitions/package.json | 2 +- packages/form/package.json | 2 +- packages/icons/package.json | 2 +- packages/integrations/package.json | 2 +- packages/log/package.json | 2 +- packages/modals-collection/package.json | 2 +- packages/modals/package.json | 2 +- packages/notifications/package.json | 2 +- packages/old-import/package.json | 2 +- packages/old-schema/package.json | 2 +- packages/ping/package.json | 2 +- packages/redis/package.json | 2 +- packages/server-settings/package.json | 2 +- packages/spotlight/package.json | 2 +- packages/translation/package.json | 2 +- packages/ui/package.json | 2 +- packages/validation/package.json | 2 +- packages/widgets/package.json | 2 +- pnpm-lock.yaml | 309 +++++++++++++----------- tooling/eslint/package.json | 2 +- 33 files changed, 196 insertions(+), 177 deletions(-) diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index 69e896d1f..4c676413d 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -86,7 +86,7 @@ "@types/react-dom": "^18.3.1", "@types/swagger-ui-react": "^4.18.3", "concurrently": "^9.0.1", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "node-loader": "^2.0.0", "prettier": "^3.3.3", "typescript": "^5.6.3" diff --git a/apps/tasks/package.json b/apps/tasks/package.json index 19c30327f..ebe73f255 100644 --- a/apps/tasks/package.json +++ b/apps/tasks/package.json @@ -46,7 +46,7 @@ "@homarr/tsconfig": "workspace:^0.1.0", "@types/node": "^22.8.6", "dotenv-cli": "^7.4.2", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "prettier": "^3.3.3", "tsx": "4.19.2", "typescript": "^5.6.3" diff --git a/apps/websocket/package.json b/apps/websocket/package.json index 826e1267e..e9cb79471 100644 --- a/apps/websocket/package.json +++ b/apps/websocket/package.json @@ -34,7 +34,7 @@ "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", "@types/ws": "^8.5.12", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "prettier": "^3.3.3", "typescript": "^5.6.3" } diff --git a/packages/analytics/package.json b/packages/analytics/package.json index 0e8523d9b..1913ea60c 100644 --- a/packages/analytics/package.json +++ b/packages/analytics/package.json @@ -32,7 +32,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" } } diff --git a/packages/api/package.json b/packages/api/package.json index 578a1314d..e387239e7 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -49,7 +49,7 @@ "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", "@types/dockerode": "^3.3.31", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "prettier": "^3.3.3", "typescript": "^5.6.3" } diff --git a/packages/auth/package.json b/packages/auth/package.json index 71d51e18f..d2a23d521 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -45,7 +45,7 @@ "@homarr/tsconfig": "workspace:^0.1.0", "@types/bcrypt": "5.0.2", "@types/cookies": "0.9.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "prettier": "^3.3.3", "typescript": "^5.6.3" } diff --git a/packages/cli/package.json b/packages/cli/package.json index c4188f83b..169f0c1fc 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -33,7 +33,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" } } diff --git a/packages/common/package.json b/packages/common/package.json index b8958f043..981fa87df 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -35,7 +35,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" } } diff --git a/packages/cron-job-runner/package.json b/packages/cron-job-runner/package.json index 47ee1632f..99e91bf1e 100644 --- a/packages/cron-job-runner/package.json +++ b/packages/cron-job-runner/package.json @@ -30,7 +30,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" } } diff --git a/packages/cron-job-status/package.json b/packages/cron-job-status/package.json index 3ecf3fdd4..a3357a408 100644 --- a/packages/cron-job-status/package.json +++ b/packages/cron-job-status/package.json @@ -29,7 +29,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" } } diff --git a/packages/cron-jobs-core/package.json b/packages/cron-jobs-core/package.json index 2fee72109..4d794bae0 100644 --- a/packages/cron-jobs-core/package.json +++ b/packages/cron-jobs-core/package.json @@ -32,7 +32,7 @@ "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", "@types/node-cron": "^3.0.11", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" } } diff --git a/packages/cron-jobs/package.json b/packages/cron-jobs/package.json index 404d7c40d..eefd24d79 100644 --- a/packages/cron-jobs/package.json +++ b/packages/cron-jobs/package.json @@ -41,7 +41,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" } } diff --git a/packages/db/package.json b/packages/db/package.json index d586d18c3..34421ac65 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -54,7 +54,7 @@ "@homarr/tsconfig": "workspace:^0.1.0", "@types/better-sqlite3": "7.6.11", "dotenv-cli": "^7.4.2", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "prettier": "^3.3.3", "tsx": "4.19.2", "typescript": "^5.6.3" diff --git a/packages/definitions/package.json b/packages/definitions/package.json index e58e30125..92f3c647a 100644 --- a/packages/definitions/package.json +++ b/packages/definitions/package.json @@ -29,7 +29,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" } } diff --git a/packages/form/package.json b/packages/form/package.json index 6ef96da0c..0c4b34e7b 100644 --- a/packages/form/package.json +++ b/packages/form/package.json @@ -30,7 +30,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" } } diff --git a/packages/icons/package.json b/packages/icons/package.json index b219f01d0..c0a85a18a 100644 --- a/packages/icons/package.json +++ b/packages/icons/package.json @@ -29,7 +29,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" } } diff --git a/packages/integrations/package.json b/packages/integrations/package.json index 9025fd682..13fedb353 100644 --- a/packages/integrations/package.json +++ b/packages/integrations/package.json @@ -41,7 +41,7 @@ "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", "@types/xml2js": "^0.4.14", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" } } diff --git a/packages/log/package.json b/packages/log/package.json index 3ad22495d..57454364d 100644 --- a/packages/log/package.json +++ b/packages/log/package.json @@ -34,7 +34,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" } } diff --git a/packages/modals-collection/package.json b/packages/modals-collection/package.json index e2a30ce32..7bdab6661 100644 --- a/packages/modals-collection/package.json +++ b/packages/modals-collection/package.json @@ -40,7 +40,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" }, "prettier": "@homarr/prettier-config" diff --git a/packages/modals/package.json b/packages/modals/package.json index 9a7aff6f7..0cd52bd60 100644 --- a/packages/modals/package.json +++ b/packages/modals/package.json @@ -32,7 +32,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" } } diff --git a/packages/notifications/package.json b/packages/notifications/package.json index eb9eaf1f3..776f0d2fc 100644 --- a/packages/notifications/package.json +++ b/packages/notifications/package.json @@ -31,7 +31,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" } } diff --git a/packages/old-import/package.json b/packages/old-import/package.json index 2684dab49..f583585d5 100644 --- a/packages/old-import/package.json +++ b/packages/old-import/package.json @@ -33,7 +33,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" }, "prettier": "@homarr/prettier-config" diff --git a/packages/old-schema/package.json b/packages/old-schema/package.json index a69c5f546..fe72d60a2 100644 --- a/packages/old-schema/package.json +++ b/packages/old-schema/package.json @@ -27,7 +27,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" }, "prettier": "@homarr/prettier-config" diff --git a/packages/ping/package.json b/packages/ping/package.json index 2a0c18258..0556df082 100644 --- a/packages/ping/package.json +++ b/packages/ping/package.json @@ -29,7 +29,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" } } diff --git a/packages/redis/package.json b/packages/redis/package.json index 1c56d6c79..b628dd3c8 100644 --- a/packages/redis/package.json +++ b/packages/redis/package.json @@ -33,7 +33,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" } } diff --git a/packages/server-settings/package.json b/packages/server-settings/package.json index d2dab7755..95875459b 100644 --- a/packages/server-settings/package.json +++ b/packages/server-settings/package.json @@ -25,7 +25,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" } } diff --git a/packages/spotlight/package.json b/packages/spotlight/package.json index 22f2f8df8..9bca91125 100644 --- a/packages/spotlight/package.json +++ b/packages/spotlight/package.json @@ -43,7 +43,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" }, "prettier": "@homarr/prettier-config" diff --git a/packages/translation/package.json b/packages/translation/package.json index cb0478444..a0dd0ca27 100644 --- a/packages/translation/package.json +++ b/packages/translation/package.json @@ -37,7 +37,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" } } diff --git a/packages/ui/package.json b/packages/ui/package.json index 5399b0f18..3ba424c80 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -41,7 +41,7 @@ "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", "@types/css-modules": "^1.0.5", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" }, "prettier": "@homarr/prettier-config" diff --git a/packages/validation/package.json b/packages/validation/package.json index 9a9b6cb7c..951af609a 100644 --- a/packages/validation/package.json +++ b/packages/validation/package.json @@ -33,7 +33,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" } } diff --git a/packages/widgets/package.json b/packages/widgets/package.json index 76cabdb3a..d87eb102a 100644 --- a/packages/widgets/package.json +++ b/packages/widgets/package.json @@ -68,7 +68,7 @@ "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", "@types/video.js": "^7.3.58", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 58225a680..625e1d3f0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -264,8 +264,8 @@ importers: specifier: ^9.0.1 version: 9.0.1 eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 node-loader: specifier: ^2.0.0 version: 2.0.0(webpack@5.94.0) @@ -352,8 +352,8 @@ importers: specifier: ^7.4.2 version: 7.4.2 eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 prettier: specifier: ^3.3.3 version: 3.3.3 @@ -413,8 +413,8 @@ importers: specifier: ^8.5.12 version: 8.5.12 eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 prettier: specifier: ^3.3.3 version: 3.3.3 @@ -450,8 +450,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -541,8 +541,8 @@ importers: specifier: ^3.3.31 version: 3.3.31 eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 prettier: specifier: ^3.3.3 version: 3.3.3 @@ -614,8 +614,8 @@ importers: specifier: 0.9.0 version: 0.9.0 eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 prettier: specifier: ^3.3.3 version: 3.3.3 @@ -651,8 +651,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -685,8 +685,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -713,8 +713,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -735,8 +735,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -796,8 +796,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -824,8 +824,8 @@ importers: specifier: ^3.0.11 version: 3.0.11 eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -885,8 +885,8 @@ importers: specifier: ^7.4.2 version: 7.4.2 eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 prettier: specifier: ^3.3.3 version: 3.3.3 @@ -913,8 +913,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -941,8 +941,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -966,8 +966,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -1021,8 +1021,8 @@ importers: specifier: ^0.4.14 version: 0.4.14 eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -1049,8 +1049,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -1083,8 +1083,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -1144,8 +1144,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -1172,8 +1172,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -1212,8 +1212,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -1234,8 +1234,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -1259,8 +1259,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -1296,8 +1296,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -1314,8 +1314,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -1381,8 +1381,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -1418,8 +1418,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -1476,8 +1476,8 @@ importers: specifier: ^1.0.5 version: 1.0.5 eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -1510,8 +1510,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -1649,8 +1649,8 @@ importers: specifier: ^7.3.58 version: 7.3.58 eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -1662,25 +1662,25 @@ importers: version: 14.2.16 eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@9.13.0) + version: 9.1.0(eslint@9.14.0) eslint-config-turbo: specifier: ^2.2.3 - version: 2.2.3(eslint@9.13.0) + version: 2.2.3(eslint@9.14.0) eslint-plugin-import: specifier: ^2.31.0 - version: 2.31.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0) + version: 2.31.0(@typescript-eslint/parser@8.12.2(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0) eslint-plugin-jsx-a11y: specifier: ^6.10.2 - version: 6.10.2(eslint@9.13.0) + version: 6.10.2(eslint@9.14.0) eslint-plugin-react: specifier: ^7.37.2 - version: 7.37.2(eslint@9.13.0) + version: 7.37.2(eslint@9.14.0) eslint-plugin-react-hooks: specifier: ^5.0.0 - version: 5.0.0(eslint@9.13.0) + version: 5.0.0(eslint@9.14.0) typescript-eslint: specifier: ^8.12.2 - version: 8.12.2(eslint@9.13.0)(typescript@5.6.3) + version: 8.12.2(eslint@9.14.0)(typescript@5.6.3) devDependencies: '@homarr/prettier-config': specifier: workspace:^0.1.0 @@ -1689,8 +1689,8 @@ importers: specifier: workspace:^0.1.0 version: link:../typescript eslint: - specifier: ^9.13.0 - version: 9.13.0 + specifier: ^9.14.0 + version: 9.14.0 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -2610,6 +2610,10 @@ packages: resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@eslint/config-array@0.18.0': resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2622,8 +2626,8 @@ packages: resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.13.0': - resolution: {integrity: sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==} + '@eslint/js@9.14.0': + resolution: {integrity: sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.4': @@ -2690,12 +2694,12 @@ packages: peerDependencies: hono: ^4 - '@humanfs/core@0.19.0': - resolution: {integrity: sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==} + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.5': - resolution: {integrity: sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==} + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': @@ -2706,6 +2710,10 @@ packages: resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} + '@humanwhocodes/retry@0.4.0': + resolution: {integrity: sha512-xnRgu9DxZbkWak/te3fcytNyp8MTbuiZIaueg2rgEvBuN55n04nwLYLU9TX/VVlusc9L2ZNXi99nUFNkHXtr5g==} + engines: {node: '>=18.18'} + '@ianvs/prettier-plugin-sort-imports@4.3.1': resolution: {integrity: sha512-ZHwbyjkANZOjaBm3ZosADD2OUYGFzQGxfy67HmGZU94mHqe7g1LCMA7YYKB1Cq+UTPCBqlAYapY0KXAjKEw8Sg==} peerDependencies: @@ -3936,6 +3944,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + aes-decrypter@4.0.2: resolution: {integrity: sha512-lc+/9s6iJvuaRe5qDlMTpCFjnwpkeOXp8qP3oiZ5jsj1MRg+SBVUmmICrhxHvc8OELSmc+fEyyxAuppY6hrWzw==} @@ -4990,20 +5003,20 @@ packages: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - eslint-scope@8.1.0: - resolution: {integrity: sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==} + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.1.0: - resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.13.0: - resolution: {integrity: sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==} + eslint@9.14.0: + resolution: {integrity: sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -5012,8 +5025,8 @@ packages: jiti: optional: true - espree@10.2.0: - resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==} + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esprima@4.0.1: @@ -8733,13 +8746,15 @@ snapshots: '@esbuild/win32-x64@0.23.1': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@9.13.0)': + '@eslint-community/eslint-utils@4.4.0(eslint@9.14.0)': dependencies: - eslint: 9.13.0 + eslint: 9.14.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.11.1': {} + '@eslint-community/regexpp@4.12.1': {} + '@eslint/config-array@0.18.0': dependencies: '@eslint/object-schema': 2.1.4 @@ -8754,7 +8769,7 @@ snapshots: dependencies: ajv: 6.12.6 debug: 4.3.7 - espree: 10.2.0 + espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.0 @@ -8764,7 +8779,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.13.0': {} + '@eslint/js@9.14.0': {} '@eslint/object-schema@2.1.4': {} @@ -8841,17 +8856,19 @@ snapshots: dependencies: hono: 4.6.1 - '@humanfs/core@0.19.0': {} + '@humanfs/core@0.19.1': {} - '@humanfs/node@0.16.5': + '@humanfs/node@0.16.6': dependencies: - '@humanfs/core': 0.19.0 + '@humanfs/core': 0.19.1 '@humanwhocodes/retry': 0.3.1 '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/retry@0.3.1': {} + '@humanwhocodes/retry@0.4.0': {} + '@ianvs/prettier-plugin-sort-imports@4.3.1(prettier@3.3.3)': dependencies: '@babel/core': 7.25.2 @@ -10132,15 +10149,15 @@ snapshots: dependencies: '@types/node': 22.8.6 - '@typescript-eslint/eslint-plugin@8.12.2(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0)(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@8.12.2(@typescript-eslint/parser@8.12.2(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 8.12.2(eslint@9.13.0)(typescript@5.6.3) + '@typescript-eslint/parser': 8.12.2(eslint@9.14.0)(typescript@5.6.3) '@typescript-eslint/scope-manager': 8.12.2 - '@typescript-eslint/type-utils': 8.12.2(eslint@9.13.0)(typescript@5.6.3) - '@typescript-eslint/utils': 8.12.2(eslint@9.13.0)(typescript@5.6.3) + '@typescript-eslint/type-utils': 8.12.2(eslint@9.14.0)(typescript@5.6.3) + '@typescript-eslint/utils': 8.12.2(eslint@9.14.0)(typescript@5.6.3) '@typescript-eslint/visitor-keys': 8.12.2 - eslint: 9.13.0 + eslint: 9.14.0 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -10150,14 +10167,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3)': + '@typescript-eslint/parser@8.12.2(eslint@9.14.0)(typescript@5.6.3)': dependencies: '@typescript-eslint/scope-manager': 8.12.2 '@typescript-eslint/types': 8.12.2 '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.6.3) '@typescript-eslint/visitor-keys': 8.12.2 debug: 4.3.7 - eslint: 9.13.0 + eslint: 9.14.0 optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -10168,10 +10185,10 @@ snapshots: '@typescript-eslint/types': 8.12.2 '@typescript-eslint/visitor-keys': 8.12.2 - '@typescript-eslint/type-utils@8.12.2(eslint@9.13.0)(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.12.2(eslint@9.14.0)(typescript@5.6.3)': dependencies: '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.6.3) - '@typescript-eslint/utils': 8.12.2(eslint@9.13.0)(typescript@5.6.3) + '@typescript-eslint/utils': 8.12.2(eslint@9.14.0)(typescript@5.6.3) debug: 4.3.7 ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: @@ -10197,13 +10214,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.12.2(eslint@9.13.0)(typescript@5.6.3)': + '@typescript-eslint/utils@8.12.2(eslint@9.14.0)(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.13.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0) '@typescript-eslint/scope-manager': 8.12.2 '@typescript-eslint/types': 8.12.2 '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.6.3) - eslint: 9.13.0 + eslint: 9.14.0 transitivePeerDependencies: - supports-color - typescript @@ -10432,9 +10449,9 @@ snapshots: dependencies: acorn: 8.12.1 - acorn-jsx@5.3.2(acorn@8.12.1): + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: - acorn: 8.12.1 + acorn: 8.14.0 acorn-walk@8.3.4: dependencies: @@ -10442,6 +10459,8 @@ snapshots: acorn@8.12.1: {} + acorn@8.14.0: {} + aes-decrypter@4.0.2: dependencies: '@babel/runtime': 7.25.6 @@ -11565,14 +11584,14 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@9.1.0(eslint@9.13.0): + eslint-config-prettier@9.1.0(eslint@9.14.0): dependencies: - eslint: 9.13.0 + eslint: 9.14.0 - eslint-config-turbo@2.2.3(eslint@9.13.0): + eslint-config-turbo@2.2.3(eslint@9.14.0): dependencies: - eslint: 9.13.0 - eslint-plugin-turbo: 2.2.3(eslint@9.13.0) + eslint: 9.14.0 + eslint-plugin-turbo: 2.2.3(eslint@9.14.0) eslint-import-resolver-node@0.3.9: dependencies: @@ -11582,17 +11601,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.13.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.12.2(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.14.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.12.2(eslint@9.13.0)(typescript@5.6.3) - eslint: 9.13.0 + '@typescript-eslint/parser': 8.12.2(eslint@9.14.0)(typescript@5.6.3) + eslint: 9.14.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.12.2(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -11601,9 +11620,9 @@ snapshots: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.13.0 + eslint: 9.14.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.13.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.12.2(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.14.0) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -11615,13 +11634,13 @@ snapshots: string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.12.2(eslint@9.13.0)(typescript@5.6.3) + '@typescript-eslint/parser': 8.12.2(eslint@9.14.0)(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsx-a11y@6.10.2(eslint@9.13.0): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.14.0): dependencies: aria-query: 5.3.2 array-includes: 3.1.8 @@ -11631,7 +11650,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.13.0 + eslint: 9.14.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -11640,11 +11659,11 @@ snapshots: safe-regex-test: 1.0.3 string.prototype.includes: 2.0.1 - eslint-plugin-react-hooks@5.0.0(eslint@9.13.0): + eslint-plugin-react-hooks@5.0.0(eslint@9.14.0): dependencies: - eslint: 9.13.0 + eslint: 9.14.0 - eslint-plugin-react@7.37.2(eslint@9.13.0): + eslint-plugin-react@7.37.2(eslint@9.14.0): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -11652,7 +11671,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.1.0 - eslint: 9.13.0 + eslint: 9.14.0 estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -11666,37 +11685,37 @@ snapshots: string.prototype.matchall: 4.0.11 string.prototype.repeat: 1.0.0 - eslint-plugin-turbo@2.2.3(eslint@9.13.0): + eslint-plugin-turbo@2.2.3(eslint@9.14.0): dependencies: dotenv: 16.0.3 - eslint: 9.13.0 + eslint: 9.14.0 eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - eslint-scope@8.1.0: + eslint-scope@8.2.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.1.0: {} + eslint-visitor-keys@4.2.0: {} - eslint@9.13.0: + eslint@9.14.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.13.0) - '@eslint-community/regexpp': 4.11.1 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0) + '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.18.0 '@eslint/core': 0.7.0 '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.13.0 + '@eslint/js': 9.14.0 '@eslint/plugin-kit': 0.2.0 - '@humanfs/node': 0.16.5 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/retry': 0.4.0 '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 ajv: 6.12.6 @@ -11704,9 +11723,9 @@ snapshots: cross-spawn: 7.0.3 debug: 4.3.7 escape-string-regexp: 4.0.0 - eslint-scope: 8.1.0 - eslint-visitor-keys: 4.1.0 - espree: 10.2.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -11725,11 +11744,11 @@ snapshots: transitivePeerDependencies: - supports-color - espree@10.2.0: + espree@10.3.0: dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) - eslint-visitor-keys: 4.1.0 + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 esprima@4.0.1: {} @@ -14586,11 +14605,11 @@ snapshots: dependencies: ts-toolbelt: 9.6.0 - typescript-eslint@8.12.2(eslint@9.13.0)(typescript@5.6.3): + typescript-eslint@8.12.2(eslint@9.14.0)(typescript@5.6.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.12.2(@typescript-eslint/parser@8.12.2(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0)(typescript@5.6.3) - '@typescript-eslint/parser': 8.12.2(eslint@9.13.0)(typescript@5.6.3) - '@typescript-eslint/utils': 8.12.2(eslint@9.13.0)(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 8.12.2(@typescript-eslint/parser@8.12.2(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3) + '@typescript-eslint/parser': 8.12.2(eslint@9.14.0)(typescript@5.6.3) + '@typescript-eslint/utils': 8.12.2(eslint@9.14.0)(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: diff --git a/tooling/eslint/package.json b/tooling/eslint/package.json index b9d146c5a..8a9ba092b 100644 --- a/tooling/eslint/package.json +++ b/tooling/eslint/package.json @@ -28,7 +28,7 @@ "devDependencies": { "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "typescript": "^5.6.3" }, "prettier": "@homarr/prettier-config" From 02ddb1c9c6d15e4965c93935ff7887f90bff05a4 Mon Sep 17 00:00:00 2001 From: "homarr-renovate[bot]" <158783068+homarr-renovate[bot]@users.noreply.github.com> Date: Fri, 1 Nov 2024 21:34:11 +0000 Subject: [PATCH 02/21] fix(deps): update dependency winston to v3.16.0 (#1398) Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com> --- packages/log/package.json | 2 +- pnpm-lock.yaml | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/log/package.json b/packages/log/package.json index 57454364d..a404dc6da 100644 --- a/packages/log/package.json +++ b/packages/log/package.json @@ -28,7 +28,7 @@ "dependencies": { "ioredis": "5.4.1", "superjson": "2.2.1", - "winston": "3.15.0" + "winston": "3.16.0" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 625e1d3f0..aae979fc0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1036,8 +1036,8 @@ importers: specifier: 2.2.1 version: 2.2.1 winston: - specifier: 3.15.0 - version: 3.15.0 + specifier: 3.16.0 + version: 3.16.0 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -8009,8 +8009,8 @@ packages: resolution: {integrity: sha512-wQCXXVgfv/wUPOfb2x0ruxzwkcZfxcktz6JIMUaPLmcNhO4bZTwA/WtDWK74xV3F2dKu8YadrFv0qhwYjVEwhA==} engines: {node: '>= 12.0.0'} - winston@3.15.0: - resolution: {integrity: sha512-RhruH2Cj0bV0WgNL+lOfoUBI4DVfdUNjVnJGVovWZmrcKtrFTTRzgXYK2O9cymSGjrERCtaAeHwMNnUWXlwZow==} + winston@3.16.0: + resolution: {integrity: sha512-xz7+cyGN5M+4CmmD4Npq1/4T+UZaz7HaeTlAruFUTjk79CNMq+P6H30vlE4z0qfqJ01VHYQwd7OZo03nYm/+lg==} engines: {node: '>= 12.0.0'} word-wrap@1.2.5: @@ -10445,9 +10445,9 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-import-attributes@1.9.5(acorn@8.12.1): + acorn-import-attributes@1.9.5(acorn@8.14.0): dependencies: - acorn: 8.12.1 + acorn: 8.14.0 acorn-jsx@5.3.2(acorn@8.14.0): dependencies: @@ -14321,7 +14321,7 @@ snapshots: terser@5.32.0: dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.12.1 + acorn: 8.14.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -14909,8 +14909,8 @@ snapshots: '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/wasm-edit': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.12.1 - acorn-import-attributes: 1.9.5(acorn@8.12.1) + acorn: 8.14.0 + acorn-import-attributes: 1.9.5(acorn@8.14.0) browserslist: 4.23.3 chrome-trace-event: 1.0.4 enhanced-resolve: 5.17.1 @@ -15012,7 +15012,7 @@ snapshots: readable-stream: 3.6.2 triple-beam: 1.4.1 - winston@3.15.0: + winston@3.16.0: dependencies: '@colors/colors': 1.6.0 '@dabh/diagnostics': 2.0.3 From baabf717078caba315f39a1d429fc0ba92f3d167 Mon Sep 17 00:00:00 2001 From: "homarr-renovate[bot]" <158783068+homarr-renovate[bot]@users.noreply.github.com> Date: Sat, 2 Nov 2024 08:14:10 +0000 Subject: [PATCH 03/21] fix(deps): update dependency tldts to ^6.1.58 (#1400) Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com> --- packages/common/package.json | 2 +- pnpm-lock.yaml | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/common/package.json b/packages/common/package.json index 981fa87df..69c91ff7b 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -29,7 +29,7 @@ "dayjs": "^1.11.13", "next": "^14.2.16", "react": "^18.3.1", - "tldts": "^6.1.57" + "tldts": "^6.1.58" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aae979fc0..65cf44dfa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -672,8 +672,8 @@ importers: specifier: ^18.3.1 version: 18.3.1 tldts: - specifier: ^6.1.57 - version: 6.1.57 + specifier: ^6.1.58 + version: 6.1.58 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -7434,11 +7434,11 @@ packages: title-case@2.1.1: resolution: {integrity: sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==} - tldts-core@6.1.57: - resolution: {integrity: sha512-lXnRhuQpx3zU9EONF9F7HfcRLvN1uRYUBIiKL+C/gehC/77XTU+Jye6ui86GA3rU6FjlJ0triD1Tkjt2F/2lEg==} + tldts-core@6.1.58: + resolution: {integrity: sha512-dR936xmhBm7AeqHIhCWwK765gZ7dFyL+IqLSFAjJbFlUXGMLCb8i2PzlzaOuWBuplBTaBYseSb565nk/ZEM0Bg==} - tldts@6.1.57: - resolution: {integrity: sha512-Oy7yDXK8meJl8vPMOldzA+MtueAJ5BrH4l4HXwZuj2AtfoQbLjmTJmjNWPUcAo+E/ibHn7QlqMS0BOcXJFJyHQ==} + tldts@6.1.58: + resolution: {integrity: sha512-MQJrJhjHOYGYb8DobR6Y4AdDbd4TYkyQ+KBDVc5ODzs1cbrvPpfN1IemYi9jfipJ/vR1YWvrDli0hg1y19VRoA==} hasBin: true tmp@0.0.33: @@ -14394,11 +14394,11 @@ snapshots: no-case: 2.3.2 upper-case: 1.1.3 - tldts-core@6.1.57: {} + tldts-core@6.1.58: {} - tldts@6.1.57: + tldts@6.1.58: dependencies: - tldts-core: 6.1.57 + tldts-core: 6.1.58 tmp@0.0.33: dependencies: @@ -14427,7 +14427,7 @@ snapshots: tough-cookie@5.0.0: dependencies: - tldts: 6.1.57 + tldts: 6.1.58 tr46@0.0.3: {} From d908b3f6769fe5add91e605f16dc6c5f89d96373 Mon Sep 17 00:00:00 2001 From: "homarr-renovate[bot]" <158783068+homarr-renovate[bot]@users.noreply.github.com> Date: Sat, 2 Nov 2024 08:32:26 +0000 Subject: [PATCH 04/21] fix(deps): update dependency sass to ^1.80.6 (#1399) Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com> --- apps/nextjs/package.json | 2 +- pnpm-lock.yaml | 104 ++++++++++++++++++++------------------- 2 files changed, 55 insertions(+), 51 deletions(-) diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index 4c676413d..deaf1dd34 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -70,7 +70,7 @@ "react-dom": "^18.3.1", "react-error-boundary": "^4.1.2", "react-simple-code-editor": "^0.14.1", - "sass": "^1.80.5", + "sass": "^1.80.6", "superjson": "2.2.1", "swagger-ui-react": "^5.17.14", "use-deep-compare-effect": "^1.8.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 65cf44dfa..051809cfb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,7 +21,7 @@ importers: version: 2.2.3(@types/node@22.8.6)(typescript@5.6.3) '@vitejs/plugin-react': specifier: ^4.3.3 - version: 4.3.3(vite@5.4.5(@types/node@22.8.6)(sass@1.80.5)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)) + version: 4.3.3(vite@5.4.5(@types/node@22.8.6)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)) '@vitest/coverage-v8': specifier: ^2.1.4 version: 2.1.4(vitest@2.1.4) @@ -48,10 +48,10 @@ importers: version: 5.6.3 vite-tsconfig-paths: specifier: ^5.0.1 - version: 5.0.1(typescript@5.6.3)(vite@5.4.5(@types/node@22.8.6)(sass@1.80.5)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)) + version: 5.0.1(typescript@5.6.3)(vite@5.4.5(@types/node@22.8.6)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)) vitest: specifier: ^2.1.4 - version: 2.1.4(@types/node@22.8.6)(@vitest/ui@2.1.4)(jsdom@25.0.1)(sass@1.80.5)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0) + version: 2.1.4(@types/node@22.8.6)(@vitest/ui@2.1.4)(jsdom@25.0.1)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0) apps/nextjs: dependencies: @@ -153,13 +153,13 @@ importers: version: 5.59.16(@tanstack/react-query@5.59.16(react@18.3.1))(react@18.3.1) '@tanstack/react-query-next-experimental': specifier: 5.59.16 - version: 5.59.16(@tanstack/react-query@5.59.16(react@18.3.1))(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5))(react@18.3.1) + version: 5.59.16(@tanstack/react-query@5.59.16(react@18.3.1))(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react@18.3.1) '@trpc/client': specifier: next version: 11.0.0-rc.608(@trpc/server@11.0.0-rc.608) '@trpc/next': specifier: next - version: 11.0.0-rc.608(@tanstack/react-query@5.59.16(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/react-query@11.0.0-rc.608(@tanstack/react-query@5.59.16(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/server@11.0.0-rc.608)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.608)(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 11.0.0-rc.608(@tanstack/react-query@5.59.16(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/react-query@11.0.0-rc.608(@tanstack/react-query@5.59.16(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/server@11.0.0-rc.608)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.608)(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@trpc/react-query': specifier: next version: 11.0.0-rc.608(@tanstack/react-query@5.59.16(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/server@11.0.0-rc.608)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -201,7 +201,7 @@ importers: version: 2.0.0-beta.7(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.13.4(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(@tabler/icons-react@3.21.0(react@18.3.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next: specifier: ^14.2.16 - version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5) + version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6) postcss-preset-mantine: specifier: ^1.17.0 version: 1.17.0(postcss@8.4.47) @@ -221,8 +221,8 @@ importers: specifier: ^0.14.1 version: 0.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) sass: - specifier: ^1.80.5 - version: 1.80.5 + specifier: ^1.80.6 + version: 1.80.6 superjson: specifier: 2.2.1 version: 2.2.1 @@ -517,7 +517,7 @@ importers: version: 4.0.2 next: specifier: ^14.2.16 - version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5) + version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6) react: specifier: ^18.3.1 version: 18.3.1 @@ -587,10 +587,10 @@ importers: version: 7.2.1 next: specifier: ^14.2.16 - version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5) + version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6) next-auth: specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5))(react@18.3.1) + version: 5.0.0-beta.25(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react@18.3.1) react: specifier: ^18.3.1 version: 18.3.1 @@ -667,7 +667,7 @@ importers: version: 1.11.13 next: specifier: ^14.2.16 - version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5) + version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6) react: specifier: ^18.3.1 version: 18.3.1 @@ -1129,7 +1129,7 @@ importers: version: 1.11.13 next: specifier: ^14.2.16 - version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5) + version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6) react: specifier: ^18.3.1 version: 18.3.1 @@ -1363,7 +1363,7 @@ importers: version: 2.10.1(@types/react@18.3.12)(react@18.3.1) next: specifier: ^14.2.16 - version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5) + version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6) react: specifier: ^18.3.1 version: 18.3.1 @@ -1400,10 +1400,10 @@ importers: version: 2.0.0-beta.7(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.13.4(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(@tabler/icons-react@3.21.0(react@18.3.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next: specifier: ^14.2.16 - version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5) + version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6) next-intl: specifier: 3.24.0 - version: 3.24.0(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5))(react@18.3.1) + version: 3.24.0(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react@18.3.1) react: specifier: ^18.3.1 version: 18.3.1 @@ -1458,7 +1458,7 @@ importers: version: 2.0.0-beta.7(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.13.4(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(@tabler/icons-react@3.21.0(react@18.3.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next: specifier: ^14.2.16 - version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5) + version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6) react: specifier: ^18.3.1 version: 18.3.1 @@ -1628,7 +1628,7 @@ importers: version: 2.0.0-beta.7(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.13.4(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(@tabler/icons-react@3.21.0(react@18.3.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next: specifier: ^14.2.16 - version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5) + version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6) react: specifier: ^18.3.1 version: 18.3.1 @@ -7015,8 +7015,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass@1.80.5: - resolution: {integrity: sha512-TQd2aoQl/+zsxRMEDSxVdpPIqeq9UFc6pr7PzkugiTx3VYCFPUaa3P4RrBQsqok4PO200Vkz0vXQBNlg7W907g==} + sass@1.80.6: + resolution: {integrity: sha512-ccZgdHNiBF1NHBsWvacvT5rju3y1d/Eu+8Ex6c21nHp2lZGLBEtuwc415QfiI1PJa1TpCo3iXwwSRjRpn2Ckjg==} engines: {node: '>=14.0.0'} hasBin: true @@ -9183,6 +9183,7 @@ snapshots: '@parcel/watcher-win32-arm64': 2.4.1 '@parcel/watcher-win32-ia32': 2.4.1 '@parcel/watcher-win32-x64': 2.4.1 + optional: true '@pkgjs/parseargs@0.11.0': optional: true @@ -9642,10 +9643,10 @@ snapshots: '@tanstack/react-query': 5.59.16(react@18.3.1) react: 18.3.1 - '@tanstack/react-query-next-experimental@5.59.16(@tanstack/react-query@5.59.16(react@18.3.1))(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5))(react@18.3.1)': + '@tanstack/react-query-next-experimental@5.59.16(@tanstack/react-query@5.59.16(react@18.3.1))(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react@18.3.1)': dependencies: '@tanstack/react-query': 5.59.16(react@18.3.1) - next: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5) + next: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6) react: 18.3.1 '@tanstack/react-query@5.59.16(react@18.3.1)': @@ -9888,11 +9889,11 @@ snapshots: dependencies: '@trpc/server': 11.0.0-rc.608 - '@trpc/next@11.0.0-rc.608(@tanstack/react-query@5.59.16(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/react-query@11.0.0-rc.608(@tanstack/react-query@5.59.16(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/server@11.0.0-rc.608)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.608)(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@trpc/next@11.0.0-rc.608(@tanstack/react-query@5.59.16(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/react-query@11.0.0-rc.608(@tanstack/react-query@5.59.16(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/server@11.0.0-rc.608)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.608)(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@trpc/client': 11.0.0-rc.608(@trpc/server@11.0.0-rc.608) '@trpc/server': 11.0.0-rc.608 - next: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5) + next: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: @@ -10260,14 +10261,14 @@ snapshots: global: 4.4.0 is-function: 1.0.2 - '@vitejs/plugin-react@4.3.3(vite@5.4.5(@types/node@22.8.6)(sass@1.80.5)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))': + '@vitejs/plugin-react@4.3.3(vite@5.4.5(@types/node@22.8.6)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))': dependencies: '@babel/core': 7.25.2 '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.5(@types/node@22.8.6)(sass@1.80.5)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0) + vite: 5.4.5(@types/node@22.8.6)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0) transitivePeerDependencies: - supports-color @@ -10285,7 +10286,7 @@ snapshots: std-env: 3.7.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.1.4(@types/node@22.8.6)(@vitest/ui@2.1.4)(jsdom@25.0.1)(sass@1.80.5)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0) + vitest: 2.1.4(@types/node@22.8.6)(@vitest/ui@2.1.4)(jsdom@25.0.1)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0) transitivePeerDependencies: - supports-color @@ -10296,13 +10297,13 @@ snapshots: chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.4(vite@5.4.5(@types/node@22.8.6)(sass@1.80.5)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))': + '@vitest/mocker@2.1.4(vite@5.4.5(@types/node@22.8.6)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))': dependencies: '@vitest/spy': 2.1.4 estree-walker: 3.0.3 magic-string: 0.30.12 optionalDependencies: - vite: 5.4.5(@types/node@22.8.6)(sass@1.80.5)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0) + vite: 5.4.5(@types/node@22.8.6)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0) '@vitest/pretty-format@2.1.4': dependencies: @@ -10332,7 +10333,7 @@ snapshots: sirv: 3.0.0 tinyglobby: 0.2.10 tinyrainbow: 1.2.0 - vitest: 2.1.4(@types/node@22.8.6)(@vitest/ui@2.1.4)(jsdom@25.0.1)(sass@1.80.5)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0) + vitest: 2.1.4(@types/node@22.8.6)(@vitest/ui@2.1.4)(jsdom@25.0.1)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0) '@vitest/utils@2.1.4': dependencies: @@ -11192,7 +11193,8 @@ snapshots: destr@2.0.3: {} - detect-libc@1.0.3: {} + detect-libc@1.0.3: + optional: true detect-libc@2.0.3: {} @@ -12888,21 +12890,21 @@ snapshots: netmask@2.0.2: {} - next-auth@5.0.0-beta.25(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5))(react@18.3.1): + next-auth@5.0.0-beta.25(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react@18.3.1): dependencies: '@auth/core': 0.37.2 - next: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5) + next: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6) react: 18.3.1 - next-intl@3.24.0(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5))(react@18.3.1): + next-intl@3.24.0(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react@18.3.1): dependencies: '@formatjs/intl-localematcher': 0.5.5 negotiator: 1.0.0 - next: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5) + next: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6) react: 18.3.1 use-intl: 3.24.0(react@18.3.1) - next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.5): + next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6): dependencies: '@next/env': 14.2.16 '@swc/helpers': 0.5.5 @@ -12923,7 +12925,7 @@ snapshots: '@next/swc-win32-arm64-msvc': 14.2.16 '@next/swc-win32-ia32-msvc': 14.2.16 '@next/swc-win32-x64-msvc': 14.2.16 - sass: 1.80.5 + sass: 1.80.6 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -12949,7 +12951,8 @@ snapshots: node-addon-api@5.1.0: {} - node-addon-api@7.1.1: {} + node-addon-api@7.1.1: + optional: true node-cron@3.0.3: dependencies: @@ -13869,12 +13872,13 @@ snapshots: safer-buffer@2.1.2: {} - sass@1.80.5: + sass@1.80.6: dependencies: - '@parcel/watcher': 2.4.1 chokidar: 4.0.0 immutable: 4.3.7 source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.4.1 sax@1.4.1: {} @@ -14798,12 +14802,12 @@ snapshots: dependencies: global: 4.4.0 - vite-node@2.1.4(@types/node@22.8.6)(sass@1.80.5)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0): + vite-node@2.1.4(@types/node@22.8.6)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0): dependencies: cac: 6.7.14 debug: 4.3.7 pathe: 1.1.2 - vite: 5.4.5(@types/node@22.8.6)(sass@1.80.5)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0) + vite: 5.4.5(@types/node@22.8.6)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0) transitivePeerDependencies: - '@types/node' - less @@ -14815,18 +14819,18 @@ snapshots: - supports-color - terser - vite-tsconfig-paths@5.0.1(typescript@5.6.3)(vite@5.4.5(@types/node@22.8.6)(sass@1.80.5)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)): + vite-tsconfig-paths@5.0.1(typescript@5.6.3)(vite@5.4.5(@types/node@22.8.6)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)): dependencies: debug: 4.3.7 globrex: 0.1.2 tsconfck: 3.1.3(typescript@5.6.3) optionalDependencies: - vite: 5.4.5(@types/node@22.8.6)(sass@1.80.5)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0) + vite: 5.4.5(@types/node@22.8.6)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0) transitivePeerDependencies: - supports-color - typescript - vite@5.4.5(@types/node@22.8.6)(sass@1.80.5)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0): + vite@5.4.5(@types/node@22.8.6)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 @@ -14834,14 +14838,14 @@ snapshots: optionalDependencies: '@types/node': 22.8.6 fsevents: 2.3.3 - sass: 1.80.5 + sass: 1.80.6 sugarss: 4.0.1(postcss@8.4.47) terser: 5.32.0 - vitest@2.1.4(@types/node@22.8.6)(@vitest/ui@2.1.4)(jsdom@25.0.1)(sass@1.80.5)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0): + vitest@2.1.4(@types/node@22.8.6)(@vitest/ui@2.1.4)(jsdom@25.0.1)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0): dependencies: '@vitest/expect': 2.1.4 - '@vitest/mocker': 2.1.4(vite@5.4.5(@types/node@22.8.6)(sass@1.80.5)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)) + '@vitest/mocker': 2.1.4(vite@5.4.5(@types/node@22.8.6)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)) '@vitest/pretty-format': 2.1.4 '@vitest/runner': 2.1.4 '@vitest/snapshot': 2.1.4 @@ -14857,8 +14861,8 @@ snapshots: tinyexec: 0.3.1 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.5(@types/node@22.8.6)(sass@1.80.5)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0) - vite-node: 2.1.4(@types/node@22.8.6)(sass@1.80.5)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0) + vite: 5.4.5(@types/node@22.8.6)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0) + vite-node: 2.1.4(@types/node@22.8.6)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.8.6 From f8bdd9c5c7f2edd919eaff6b558db8f89b7671e7 Mon Sep 17 00:00:00 2001 From: "homarr-renovate[bot]" <158783068+homarr-renovate[bot]@users.noreply.github.com> Date: Sat, 2 Nov 2024 09:27:16 +0000 Subject: [PATCH 05/21] chore(deps): update dependency @types/ws to ^8.5.13 (#1401) Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com> --- apps/websocket/package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/websocket/package.json b/apps/websocket/package.json index e9cb79471..8de047bad 100644 --- a/apps/websocket/package.json +++ b/apps/websocket/package.json @@ -33,7 +33,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "@types/ws": "^8.5.12", + "@types/ws": "^8.5.13", "eslint": "^9.14.0", "prettier": "^3.3.3", "typescript": "^5.6.3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 051809cfb..500739d11 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -410,8 +410,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript '@types/ws': - specifier: ^8.5.12 - version: 8.5.12 + specifier: ^8.5.13 + version: 8.5.13 eslint: specifier: ^9.14.0 version: 9.14.0 @@ -3711,8 +3711,8 @@ packages: '@types/video.js@7.3.58': resolution: {integrity: sha512-1CQjuSrgbv1/dhmcfQ83eVyYbvGyqhTvb2Opxr0QCV+iJ4J6/J+XWQ3Om59WiwCd1MN3rDUHasx5XRrpUtewYQ==} - '@types/ws@8.5.12': - resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} + '@types/ws@8.5.13': + resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} '@types/xml2js@0.4.14': resolution: {integrity: sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==} @@ -10142,7 +10142,7 @@ snapshots: '@types/video.js@7.3.58': {} - '@types/ws@8.5.12': + '@types/ws@8.5.13': dependencies: '@types/node': 22.8.6 From 49c0ebea6dad6f586fc61073f815a928db4b435b Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Sat, 2 Nov 2024 18:44:36 +0100 Subject: [PATCH 06/21] feat: add bookmark widget (#964) * feat: add bookmark widget * fix: item component type issue, widget-ordered-object-list-input item component issue * feat: add button in items list * wip * wip: bookmark options dnd * wip: improve widget sortable item list * feat: add sortable item list input to widget edit modal * feat: implement bookmark widget * chore: address pull request feedback * fix: format issues * fix: lockfile not up to date * fix: import configuration missing and apps not imported * fix: bookmark items not sorted * feat: add flex layouts to bookmark widget * fix: deepsource issue * fix: add missing layout bookmarks old-import options mapping --------- Co-authored-by: Meier Lukas --- packages/api/src/router/app.ts | 11 +- packages/definitions/src/widget.ts | 1 + packages/old-import/src/import-apps.ts | 138 +++++++++-- packages/old-import/src/import-items.ts | 13 +- packages/old-import/src/index.ts | 19 +- .../src/widgets/definitions/bookmark.ts | 2 + .../src/widgets/definitions/index.ts | 1 + packages/old-import/src/widgets/options.ts | 21 +- packages/translation/src/lang/en.ts | 33 +++ packages/widgets/package.json | 2 + packages/widgets/src/_inputs/common.tsx | 1 + packages/widgets/src/_inputs/index.ts | 2 + .../widget-sortable-item-list-input.tsx | 233 ++++++++++++++++++ .../src/bookmarks/app-select-modal.tsx | 114 +++++++++ .../widgets/src/bookmarks/bookmark.module.css | 3 + packages/widgets/src/bookmarks/component.tsx | 160 ++++++++++++ packages/widgets/src/bookmarks/index.tsx | 67 +++++ packages/widgets/src/index.tsx | 2 + .../widgets/src/modals/widget-edit-modal.tsx | 10 +- packages/widgets/src/options.ts | 35 ++- pnpm-lock.yaml | 53 ++++ 21 files changed, 889 insertions(+), 32 deletions(-) create mode 100644 packages/widgets/src/_inputs/widget-sortable-item-list-input.tsx create mode 100644 packages/widgets/src/bookmarks/app-select-modal.tsx create mode 100644 packages/widgets/src/bookmarks/bookmark.module.css create mode 100644 packages/widgets/src/bookmarks/component.tsx create mode 100644 packages/widgets/src/bookmarks/index.tsx diff --git a/packages/api/src/router/app.ts b/packages/api/src/router/app.ts index 1987671fd..1ce137b72 100644 --- a/packages/api/src/router/app.ts +++ b/packages/api/src/router/app.ts @@ -1,6 +1,6 @@ import { TRPCError } from "@trpc/server"; -import { asc, createId, eq, like } from "@homarr/db"; +import { asc, createId, eq, inArray, like } from "@homarr/db"; import { apps } from "@homarr/db/schema/sqlite"; import { validation, z } from "@homarr/validation"; @@ -55,6 +55,8 @@ export const appRouter = createTRPCRouter({ name: z.string(), id: z.string(), iconUrl: z.string(), + description: z.string().nullable(), + href: z.string().nullable(), }), ), ) @@ -72,6 +74,8 @@ export const appRouter = createTRPCRouter({ id: true, name: true, iconUrl: true, + description: true, + href: true, }, orderBy: asc(apps.name), }); @@ -102,6 +106,11 @@ export const appRouter = createTRPCRouter({ return app; }), + byIds: publicProcedure.input(z.array(z.string())).query(async ({ ctx, input }) => { + return await ctx.db.query.apps.findMany({ + where: inArray(apps.id, input), + }); + }), create: protectedProcedure .input(validation.app.manage) .output(z.void()) diff --git a/packages/definitions/src/widget.ts b/packages/definitions/src/widget.ts index 637f20e3f..0f68c6577 100644 --- a/packages/definitions/src/widget.ts +++ b/packages/definitions/src/widget.ts @@ -15,6 +15,7 @@ export const widgetKinds = [ "mediaRequests-requestList", "mediaRequests-requestStats", "rssFeed", + "bookmarks", "indexerManager", "healthMonitoring", ] as const; diff --git a/packages/old-import/src/import-apps.ts b/packages/old-import/src/import-apps.ts index 4ef2b2771..342ba682f 100644 --- a/packages/old-import/src/import-apps.ts +++ b/packages/old-import/src/import-apps.ts @@ -1,49 +1,57 @@ import { createId, inArray } from "@homarr/db"; -import type { Database, InferInsertModel } from "@homarr/db"; +import type { Database, InferInsertModel, InferSelectModel } from "@homarr/db"; import { apps as appsTable } from "@homarr/db/schema/sqlite"; import { logger } from "@homarr/log"; import type { OldmarrApp } from "@homarr/old-schema"; +import type { BookmarkApp } from "./widgets/definitions/bookmark"; + +type DbAppWithoutId = Omit, "id">; + +interface AppMapping extends DbAppWithoutId { + ids: string[]; + newId: string; + exists: boolean; +} + export const insertAppsAsync = async ( db: Database, apps: OldmarrApp[], + bookmarkApps: BookmarkApp[], distinctAppsByHref: boolean, configName: string, ) => { logger.info( `Importing old homarr apps configuration=${configName} distinctAppsByHref=${distinctAppsByHref} apps=${apps.length}`, ); + const existingAppsWithHref = distinctAppsByHref ? await db.query.apps.findMany({ - where: inArray(appsTable.href, [...new Set(apps.map((app) => app.url))]), + where: inArray(appsTable.href, [ + ...new Set(apps.map((app) => app.url).concat(bookmarkApps.map((app) => app.href))), + ]), }) : []; logger.debug(`Found existing apps with href count=${existingAppsWithHref.length}`); - const mappedApps = apps.map((app) => ({ - // Use id of existing app when it has the same href and distinctAppsByHref is true - newId: distinctAppsByHref - ? (existingAppsWithHref.find( - (existingApp) => - existingApp.href === (app.behaviour.externalUrl === "" ? app.url : app.behaviour.externalUrl) && - existingApp.name === app.name && - existingApp.iconUrl === app.appearance.iconUrl, - )?.id ?? createId()) - : createId(), - ...app, - })); + // Generate mappings for all apps from old to new ids + const appMappings: AppMapping[] = []; + addMappingFor(apps, appMappings, existingAppsWithHref, convertApp); + addMappingFor(bookmarkApps, appMappings, existingAppsWithHref, convertBookmarkApp); - const appsToCreate = mappedApps - .filter((app) => !existingAppsWithHref.some((existingApp) => existingApp.id === app.newId)) + logger.debug(`Mapping apps count=${appMappings.length}`); + + const appsToCreate = appMappings + .filter((app) => !app.exists) .map( (app) => ({ id: app.newId, name: app.name, - iconUrl: app.appearance.iconUrl, - href: app.behaviour.externalUrl === "" ? app.url : app.behaviour.externalUrl, - description: app.behaviour.tooltipDescription, + iconUrl: app.iconUrl, + href: app.href, + description: app.description, }) satisfies InferInsertModel, ); @@ -55,5 +63,95 @@ export const insertAppsAsync = async ( logger.info(`Imported apps count=${appsToCreate.length}`); - return mappedApps; + // Generates a map from old key to new key for all apps + return new Map( + appMappings + .map((app) => app.ids.map((id) => ({ id, newId: app.newId }))) + .flat() + .map(({ id, newId }) => [id, newId]), + ); }; + +/** + * Creates a callback to be used in a find method that compares the old app with the new app + * @param app either an oldmarr app or a bookmark app + * @param convertApp a function that converts the app to a new app + * @returns a callback that compares the old app with the new app and returns true if they are the same + */ +const createFindCallback = ( + app: TApp, + convertApp: (app: TApp) => DbAppWithoutId, +) => { + const oldApp = convertApp(app); + + return (dbApp: DbAppWithoutId) => + oldApp.href === dbApp.href && + oldApp.name === dbApp.name && + oldApp.iconUrl === dbApp.iconUrl && + oldApp.description === dbApp.description; +}; + +/** + * Adds mappings for the given apps to the appMappings array + * @param apps apps to add mappings for + * @param appMappings existing app mappings + * @param existingAppsWithHref existing apps with href + * @param convertApp a function that converts the app to a new app + */ +const addMappingFor = ( + apps: TApp[], + appMappings: AppMapping[], + existingAppsWithHref: InferSelectModel[], + convertApp: (app: TApp) => DbAppWithoutId, +) => { + for (const app of apps) { + const previous = appMappings.find(createFindCallback(app, convertApp)); + if (previous) { + previous.ids.push(app.id); + continue; + } + + const existing = existingAppsWithHref.find(createFindCallback(app, convertApp)); + if (existing) { + appMappings.push({ + ids: [app.id], + newId: existing.id, + name: existing.name, + href: existing.href, + iconUrl: existing.iconUrl, + description: existing.description, + exists: true, + }); + continue; + } + + appMappings.push({ + ids: [app.id], + newId: createId(), + ...convertApp(app), + exists: false, + }); + } +}; + +/** + * Converts an oldmarr app to a new app + * @param app oldmarr app + * @returns new app + */ +const convertApp = (app: OldmarrApp): DbAppWithoutId => ({ + name: app.name, + href: app.behaviour.externalUrl === "" ? app.url : app.behaviour.externalUrl, + iconUrl: app.appearance.iconUrl, + description: app.behaviour.tooltipDescription ?? null, +}); + +/** + * Converts a bookmark app to a new app + * @param app bookmark app + * @returns new app + */ +const convertBookmarkApp = (app: BookmarkApp): DbAppWithoutId => ({ + ...app, + description: null, +}); diff --git a/packages/old-import/src/import-items.ts b/packages/old-import/src/import-items.ts index 69a98a2c5..fab64c88e 100644 --- a/packages/old-import/src/import-items.ts +++ b/packages/old-import/src/import-items.ts @@ -15,11 +15,12 @@ import { mapOptions } from "./widgets/options"; export const insertItemsAsync = async ( db: Database, widgets: OldmarrWidget[], - mappedApps: (OldmarrApp & { newId: string })[], + apps: OldmarrApp[], + appsMap: Map, sectionIdMaps: Map, configuration: OldmarrImportConfiguration, ) => { - logger.info(`Importing old homarr items widgets=${widgets.length} apps=${mappedApps.length}`); + logger.info(`Importing old homarr items widgets=${widgets.length} apps=${apps.length}`); for (const widget of widgets) { // All items should have been moved to the last wrapper @@ -54,13 +55,13 @@ export const insertItemsAsync = async ( xOffset: screenSizeShape.location.x, yOffset: screenSizeShape.location.y, kind, - options: SuperJSON.stringify(mapOptions(kind, widget.properties)), + options: SuperJSON.stringify(mapOptions(kind, widget.properties, appsMap)), }); logger.debug(`Inserted widget id=${widget.id} sectionId=${sectionId}`); } - for (const app of mappedApps) { + for (const app of apps) { // All items should have been moved to the last wrapper if (app.area.type === "sidebar") { continue; @@ -85,7 +86,9 @@ export const insertItemsAsync = async ( yOffset: screenSizeShape.location.y, kind: "app", options: SuperJSON.stringify({ - appId: app.newId, + // it's safe to assume that the app exists in the map + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + appId: appsMap.get(app.id)!, openInNewTab: app.behaviour.isOpeningNewTab, pingEnabled: app.network.enabledStatusChecker, showDescriptionTooltip: app.behaviour.tooltipDescription !== "", diff --git a/packages/old-import/src/index.ts b/packages/old-import/src/index.ts index b1ed0caaa..aa5ad882a 100644 --- a/packages/old-import/src/index.ts +++ b/packages/old-import/src/index.ts @@ -9,12 +9,24 @@ import { OldHomarrImportError, OldHomarrScreenSizeError } from "./import-error"; import { insertItemsAsync } from "./import-items"; import { insertSectionsAsync } from "./import-sections"; import { moveWidgetsAndAppsIfMerge } from "./move-widgets-and-apps-merge"; +import type { BookmarkApp } from "./widgets/definitions/bookmark"; export const importAsync = async (db: Database, old: OldmarrConfig, configuration: OldmarrImportConfiguration) => { + const bookmarkApps = old.widgets + .filter((widget) => widget.type === "bookmark") + .map((widget) => widget.properties.items) + .flat() as BookmarkApp[]; + if (configuration.onlyImportApps) { await db .transaction(async (trasaction) => { - await insertAppsAsync(trasaction, old.apps, configuration.distinctAppsByHref, old.configProperties.name); + await insertAppsAsync( + trasaction, + old.apps, + bookmarkApps, + configuration.distinctAppsByHref, + old.configProperties.name, + ); }) .catch((error) => { throw new OldHomarrImportError(old, error); @@ -29,13 +41,14 @@ export const importAsync = async (db: Database, old: OldmarrConfig, configuratio const boardId = await insertBoardAsync(trasaction, old, configuration); const sectionIdMaps = await insertSectionsAsync(trasaction, categories, wrappers, boardId); - const mappedApps = await insertAppsAsync( + const appsMap = await insertAppsAsync( trasaction, apps, + bookmarkApps, configuration.distinctAppsByHref, old.configProperties.name, ); - await insertItemsAsync(trasaction, widgets, mappedApps, sectionIdMaps, configuration); + await insertItemsAsync(trasaction, widgets, apps, appsMap, sectionIdMaps, configuration); }) .catch((error) => { if (error instanceof OldHomarrScreenSizeError) { diff --git a/packages/old-import/src/widgets/definitions/bookmark.ts b/packages/old-import/src/widgets/definitions/bookmark.ts index 178185777..f97d2ba3b 100644 --- a/packages/old-import/src/widgets/definitions/bookmark.ts +++ b/packages/old-import/src/widgets/definitions/bookmark.ts @@ -16,3 +16,5 @@ export type OldmarrBookmarkDefinition = CommonOldmarrWidgetDefinition< layout: "autoGrid" | "horizontal" | "vertical"; } >; + +export type BookmarkApp = OldmarrBookmarkDefinition["options"]["items"][number]; diff --git a/packages/old-import/src/widgets/definitions/index.ts b/packages/old-import/src/widgets/definitions/index.ts index e74c5c98c..d574e0a37 100644 --- a/packages/old-import/src/widgets/definitions/index.ts +++ b/packages/old-import/src/widgets/definitions/index.ts @@ -66,6 +66,7 @@ export const widgetKindMapping = { "mediaRequests-requestList": "media-requests-list", "mediaRequests-requestStats": "media-requests-stats", indexerManager: "indexer-manager", + bookmarks: "bookmark", healthMonitoring: "health-monitoring", } satisfies Record; // Use null for widgets that did not exist in oldmarr diff --git a/packages/old-import/src/widgets/options.ts b/packages/old-import/src/widgets/options.ts index badf31981..2b688aadf 100644 --- a/packages/old-import/src/widgets/options.ts +++ b/packages/old-import/src/widgets/options.ts @@ -13,6 +13,7 @@ type OptionMapping = { : { [OptionsKey in keyof WidgetComponentProps["options"]]: ( oldOptions: Extract["options"], + appsMap: Map, ) => WidgetComponentProps["options"][OptionsKey] | undefined; }; }; @@ -22,6 +23,22 @@ const optionMapping: OptionMapping = { linksTargetNewTab: (oldOptions) => oldOptions.openInNewTab, }, "mediaRequests-requestStats": {}, + bookmarks: { + title: (oldOptions) => oldOptions.name, + // It's safe to assume that the app exists, because the app is always created before the widget + // And the mapping is created in insertAppsAsync + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + items: (oldOptions, appsMap) => oldOptions.items.map((item) => appsMap.get(item.id)!), + layout: (oldOptions) => { + const mappedLayouts: Record["options"]["layout"]> = { + autoGrid: "grid", + horizontal: "row", + vertical: "column", + }; + + return mappedLayouts[oldOptions.layout]; + }, + }, calendar: { releaseType: (oldOptions) => [oldOptions.radarrReleaseType], filterFutureMonths: () => undefined, @@ -118,11 +135,13 @@ const optionMapping: OptionMapping = { * Maps the oldmarr options to the newmarr options * @param kind item kind to map * @param oldOptions oldmarr options for this item + * @param appsMap map of old app ids to new app ids * @returns newmarr options for this item or null if the item did not exist in oldmarr */ export const mapOptions = ( kind: K, oldOptions: Extract["options"], + appsMap: Map, ) => { logger.debug(`Mapping old homarr options for widget kind=${kind} options=${JSON.stringify(oldOptions)}`); if (optionMapping[kind] === null) { @@ -132,7 +151,7 @@ export const mapOptions = ( const mapping = optionMapping[kind]; return objectEntries(mapping).reduce( (acc, [key, value]) => { - const newValue = value(oldOptions as never); + const newValue = value(oldOptions as never, appsMap); logger.debug(`Mapping old homarr option kind=${kind} key=${key as string} newValue=${newValue as string}`); if (newValue !== undefined) { acc[key as string] = newValue; diff --git a/packages/translation/src/lang/en.ts b/packages/translation/src/lang/en.ts index 0a87bbb6b..a697fd8c6 100644 --- a/packages/translation/src/lang/en.ts +++ b/packages/translation/src/lang/en.ts @@ -386,6 +386,12 @@ export default { label: "Url", }, }, + action: { + select: { + label: "Select app", + notFound: "No app found", + }, + }, }, integration: { page: { @@ -838,6 +844,33 @@ export default { }, }, }, + bookmarks: { + name: "Bookmarks", + description: "Displays multiple app links", + option: { + title: { + label: "Title", + }, + layout: { + label: "Layout", + option: { + row: { + label: "Horizontal", + }, + column: { + label: "Vertical", + }, + grid: { + label: "Grid", + }, + }, + }, + items: { + label: "Bookmarks", + add: "Add bookmark", + }, + }, + }, dnsHoleSummary: { name: "DNS Hole Summary", description: "Displays the summary of your DNS Hole", diff --git a/packages/widgets/package.json b/packages/widgets/package.json index d87eb102a..c02d61d27 100644 --- a/packages/widgets/package.json +++ b/packages/widgets/package.json @@ -23,6 +23,8 @@ }, "prettier": "@homarr/prettier-config", "dependencies": { + "@dnd-kit/core": "^6.1.0", + "@dnd-kit/sortable": "^8.0.0", "@extractus/feed-extractor": "^7.1.3", "@homarr/api": "workspace:^0.1.0", "@homarr/auth": "workspace:^0.1.0", diff --git a/packages/widgets/src/_inputs/common.tsx b/packages/widgets/src/_inputs/common.tsx index 17d03aecf..5c7769eb1 100644 --- a/packages/widgets/src/_inputs/common.tsx +++ b/packages/widgets/src/_inputs/common.tsx @@ -7,6 +7,7 @@ export interface CommonWidgetInputProps { kind: WidgetKind; property: string; options: Omit, "defaultValue" | "type">; + initialOptions: Record; } type UseWidgetInputTranslationReturnType = (key: "label" | "description") => string; diff --git a/packages/widgets/src/_inputs/index.ts b/packages/widgets/src/_inputs/index.ts index 09303c8b7..d675e5c1c 100644 --- a/packages/widgets/src/_inputs/index.ts +++ b/packages/widgets/src/_inputs/index.ts @@ -6,6 +6,7 @@ import { WidgetMultiSelectInput } from "./widget-multiselect-input"; import { WidgetNumberInput } from "./widget-number-input"; import { WidgetSelectInput } from "./widget-select-input"; import { WidgetSliderInput } from "./widget-slider-input"; +import { WidgetSortedItemListInput } from "./widget-sortable-item-list-input"; import { WidgetSwitchInput } from "./widget-switch-input"; import { WidgetTextInput } from "./widget-text-input"; @@ -19,6 +20,7 @@ const mapping = { slider: WidgetSliderInput, switch: WidgetSwitchInput, app: WidgetAppInput, + sortableItemList: WidgetSortedItemListInput, } satisfies Record; export const getInputForType = (type: TType) => { diff --git a/packages/widgets/src/_inputs/widget-sortable-item-list-input.tsx b/packages/widgets/src/_inputs/widget-sortable-item-list-input.tsx new file mode 100644 index 000000000..9f6c36b78 --- /dev/null +++ b/packages/widgets/src/_inputs/widget-sortable-item-list-input.tsx @@ -0,0 +1,233 @@ +import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from "react"; +import type { UniqueIdentifier } from "@dnd-kit/core"; +import { + closestCenter, + DndContext, + KeyboardSensor, + MouseSensor, + TouchSensor, + useSensor, + useSensors, +} from "@dnd-kit/core"; +import { + arrayMove, + SortableContext, + sortableKeyboardCoordinates, + useSortable, + verticalListSortingStrategy, +} from "@dnd-kit/sortable"; +import type { ActionIconProps } from "@mantine/core"; +import { ActionIcon, Card, Center, Fieldset, Loader, Stack } from "@mantine/core"; +import { IconGripHorizontal } from "@tabler/icons-react"; + +import { useWidgetInputTranslation } from "./common"; +import type { CommonWidgetInputProps } from "./common"; +import { useFormContext } from "./form"; + +export const WidgetSortedItemListInput = ({ + property, + options, + initialOptions, + kind, +}: CommonWidgetInputProps<"sortableItemList">) => { + const t = useWidgetInputTranslation(kind, property); + const form = useFormContext(); + const initialValues = useMemo(() => initialOptions[property] as TOptionValue[], [initialOptions, property]); + const values = form.values.options[property] as TOptionValue[]; + const { data, isLoading, error } = options.useData(initialValues); + const dataMap = useMemo( + () => new Map(data?.map((item) => [options.uniqueIdentifier(item), item as TItem])), + [data, options], + ); + const [tempMap, setTempMap] = useState>(new Map()); + + const [activeId, setActiveId] = useState(null); + const sensors = useSensors( + useSensor(MouseSensor), + useSensor(TouchSensor), + useSensor(KeyboardSensor, { + coordinateGetter: sortableKeyboardCoordinates, + }), + ); + const isFirstAnnouncement = useRef(true); + const getIndex = (id: TOptionValue) => values.indexOf(id); + const activeIndex = activeId ? getIndex(activeId) : -1; + + useEffect(() => { + if (!activeId) { + isFirstAnnouncement.current = true; + } + }, [activeId]); + + const getItem = useCallback( + (id: TOptionValue) => { + if (!tempMap.has(id)) { + return dataMap.get(id); + } + + return tempMap.get(id); + }, + [tempMap, dataMap], + ); + + const updateItems = (callback: (prev: TOptionValue[]) => TOptionValue[]) => { + form.setFieldValue(`options.${property}`, callback); + }; + + const addItem = (item: TItem) => { + setTempMap((prev) => { + prev.set(options.uniqueIdentifier(item) as TOptionValue, item); + return prev; + }); + updateItems((values) => [...values, options.uniqueIdentifier(item) as TOptionValue]); + }; + + return ( +
+ + + + { + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (!active) { + return; + } + + setActiveId(active.id as TOptionValue); + }} + onDragEnd={({ over }) => { + setActiveId(null); + + if (over) { + const overIndex = getIndex(over.id as TOptionValue); + if (activeIndex !== overIndex) { + updateItems((items) => arrayMove(items, activeIndex, overIndex)); + } + } + }} + onDragCancel={() => setActiveId(null)} + > + + + <> + {values.map((value, index) => { + const item = getItem(value); + const removeItem = () => { + form.setValues((previous) => { + const previousValues = previous.options?.[property] as TOptionValue[]; + return { + ...previous, + options: { + ...previous.options, + [property]: previousValues.filter((id) => id !== value), + }, + }; + }); + }; + + if (!item) { + return null; + } + + return ( + + ); + })} + {isLoading && ( +
+ +
+ )} + {error &&
{JSON.stringify(error)}
} + +
+
+
+
+
+ ); +}; + +interface ItemProps { + id: TOptionValue; + item: TItem; + index: number; + removeItem: () => void; + options: CommonWidgetInputProps<"sortableItemList">["options"]; +} + +const Item = ({ + id, + index, + item, + removeItem, + options, +}: ItemProps) => { + const { attributes, isDragging, listeners, setNodeRef, setActivatorNodeRef, transform, transition } = useSortable({ + id, + }); + + const Handle = (props: Partial) => { + return ( + + + + ); + }; + + return ( + + + + ); +}; + +const MemoizedItem = memo(Item); diff --git a/packages/widgets/src/bookmarks/app-select-modal.tsx b/packages/widgets/src/bookmarks/app-select-modal.tsx new file mode 100644 index 000000000..b99751751 --- /dev/null +++ b/packages/widgets/src/bookmarks/app-select-modal.tsx @@ -0,0 +1,114 @@ +"use client"; + +import { memo, useState } from "react"; +import type { SelectProps } from "@mantine/core"; +import { Button, Group, Loader, Select, Stack } from "@mantine/core"; +import { IconCheck } from "@tabler/icons-react"; + +import type { RouterOutputs } from "@homarr/api"; +import { clientApi } from "@homarr/api/client"; +import { useForm } from "@homarr/form"; +import { createModal } from "@homarr/modals"; +import { useI18n } from "@homarr/translation/client"; + +interface InnerProps { + presentAppIds: string[]; + onSelect: (props: RouterOutputs["app"]["selectable"][number]) => void | Promise; + confirmLabel?: string; +} + +interface AppSelectFormType { + id: string; +} + +export const AppSelectModal = createModal(({ actions, innerProps }) => { + const t = useI18n(); + const { data: apps, isPending } = clientApi.app.selectable.useQuery(); + const [loading, setLoading] = useState(false); + const form = useForm(); + const handleSubmitAsync = async (values: AppSelectFormType) => { + const currentApp = apps?.find((app) => app.id === values.id); + if (!currentApp) return; + setLoading(true); + await innerProps.onSelect(currentApp); + + setLoading(false); + actions.closeModal(); + }; + + const confirmLabel = innerProps.confirmLabel ?? t("common.action.add"); + const currentApp = apps?.find((app) => app.id === form.values.id); + + return ( +
void handleSubmitAsync(values))}> + + ; + return ( + + ); })} + + +
+ ); +}; diff --git a/apps/nextjs/src/app/[locale]/manage/settings/_components/culture-settings-form.tsx b/apps/nextjs/src/app/[locale]/manage/settings/_components/culture-settings-form.tsx new file mode 100644 index 000000000..7d9dff99e --- /dev/null +++ b/apps/nextjs/src/app/[locale]/manage/settings/_components/culture-settings-form.tsx @@ -0,0 +1,26 @@ +"use client"; + +import type { ServerSettings } from "@homarr/server-settings"; +import type { SupportedLanguage } from "@homarr/translation"; +import { useScopedI18n } from "@homarr/translation/client"; + +import { LanguageCombobox } from "~/components/language/language-combobox"; +import { CommonSettingsForm } from "./common-form"; + +export const CultureSettingsForm = ({ defaultValues }: { defaultValues: ServerSettings["culture"] }) => { + const tCulture = useScopedI18n("management.page.settings.section.culture"); + + return ( + + {(form) => ( + <> + + + )} + + ); +}; diff --git a/apps/nextjs/src/app/[locale]/manage/settings/page.tsx b/apps/nextjs/src/app/[locale]/manage/settings/page.tsx index 26ef0b3c1..a651682e9 100644 --- a/apps/nextjs/src/app/[locale]/manage/settings/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/settings/page.tsx @@ -6,6 +6,9 @@ import { getScopedI18n } from "@homarr/translation/server"; import { CrawlingAndIndexingSettings } from "~/app/[locale]/manage/settings/_components/crawling-and-indexing.settings"; import { DynamicBreadcrumb } from "~/components/navigation/dynamic-breadcrumb"; import { AnalyticsSettings } from "./_components/analytics.settings"; +import { AppearanceSettingsForm } from "./_components/appearance-settings-form"; +import { BoardSettingsForm } from "./_components/board-settings-form"; +import { CultureSettingsForm } from "./_components/culture-settings-form"; export async function generateMetadata() { const t = await getScopedI18n("management"); @@ -18,14 +21,26 @@ export async function generateMetadata() { export default async function SettingsPage() { const serverSettings = await api.serverSettings.getAll(); - const t = await getScopedI18n("management.page.settings"); + const tSettings = await getScopedI18n("management.page.settings"); return ( <> - {t("title")} + {tSettings("title")} + + {tSettings("section.board.title")} + + + + {tSettings("section.appearance.title")} + + + + {tSettings("section.culture.title")} + + ); diff --git a/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/page.tsx b/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/page.tsx index fa26d7bd1..ede4d8df9 100644 --- a/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/page.tsx @@ -6,7 +6,7 @@ import { api } from "@homarr/api/server"; import { auth } from "@homarr/auth/next"; import { getI18n, getScopedI18n } from "@homarr/translation/server"; -import { LanguageCombobox } from "~/components/language/language-combobox"; +import { CurrentLanguageCombobox } from "~/components/language/current-language-combobox"; import { DangerZoneItem, DangerZoneRoot } from "~/components/manage/danger-zone"; import { catchTrpcNotFound } from "~/errors/trpc-not-found"; import { createMetaTitle } from "~/metadata"; @@ -81,7 +81,7 @@ export default async function EditUserPage({ params }: Props) { {tGeneral("item.language")} - + diff --git a/apps/nextjs/src/components/language/current-language-combobox.tsx b/apps/nextjs/src/components/language/current-language-combobox.tsx new file mode 100644 index 000000000..cdb4709d6 --- /dev/null +++ b/apps/nextjs/src/components/language/current-language-combobox.tsx @@ -0,0 +1,12 @@ +"use client"; + +import { useChangeLocale, useCurrentLocale } from "@homarr/translation/client"; + +import { LanguageCombobox } from "./language-combobox"; + +export const CurrentLanguageCombobox = () => { + const currentLocale = useCurrentLocale(); + const { changeLocale, isPending } = useChangeLocale(); + + return ; +}; diff --git a/apps/nextjs/src/components/language/language-combobox.tsx b/apps/nextjs/src/components/language/language-combobox.tsx index b60e3a4fe..5723e3fde 100644 --- a/apps/nextjs/src/components/language/language-combobox.tsx +++ b/apps/nextjs/src/components/language/language-combobox.tsx @@ -6,26 +6,30 @@ import { IconCheck } from "@tabler/icons-react"; import type { SupportedLanguage } from "@homarr/translation"; import { localeConfigurations, supportedLanguages } from "@homarr/translation"; -import { useChangeLocale, useCurrentLocale } from "@homarr/translation/client"; import classes from "./language-combobox.module.css"; -export const LanguageCombobox = () => { +interface LanguageComboboxProps { + label?: string; + value: SupportedLanguage; + onChange: (value: SupportedLanguage) => void; + isPending?: boolean; +} + +export const LanguageCombobox = ({ label, value, onChange, isPending }: LanguageComboboxProps) => { const combobox = useCombobox({ onDropdownClose: () => combobox.resetSelectedOption(), }); - const currentLocale = useCurrentLocale(); - const { changeLocale, isPending } = useChangeLocale(); const handleOnOptionSubmit = React.useCallback( (value: string) => { if (!value) { return; } - changeLocale(value as SupportedLanguage); + onChange(value as SupportedLanguage); combobox.closeDropdown(); }, - [changeLocale, combobox], + [onChange, combobox], ); const handleOnClick = React.useCallback(() => { @@ -39,20 +43,21 @@ export const LanguageCombobox = () => { component="button" type="button" pointer + label={label} leftSection={isPending ? : null} rightSection={} rightSectionPointerEvents="none" onClick={handleOnClick} variant="filled" > - + {supportedLanguages.map((languageKey) => ( - + ))} diff --git a/apps/nextjs/src/components/layout/analytics.tsx b/apps/nextjs/src/components/layout/analytics.tsx index 322d7a0a6..8d81fa13c 100644 --- a/apps/nextjs/src/components/layout/analytics.tsx +++ b/apps/nextjs/src/components/layout/analytics.tsx @@ -1,11 +1,12 @@ import Script from "next/script"; import { UMAMI_WEBSITE_ID } from "@homarr/analytics"; -import { api } from "@homarr/api/server"; +import { db } from "@homarr/db"; +import { getServerSettingByKeyAsync } from "@homarr/db/queries"; export const Analytics = async () => { // For static pages it will not find any analytics data so we do not include the script on them - const analytics = await api.serverSettings.getAnalytics().catch(() => null); + const analytics = await getServerSettingByKeyAsync(db, "analytics").catch(() => null); if (analytics?.enableGeneral) { return