From 9639f445608fd1ca333cd99c799fe107768f8780 Mon Sep 17 00:00:00 2001
From: "homarr-crowdin[bot]"
<190541745+homarr-crowdin[bot]@users.noreply.github.com>
Date: Sun, 7 Dec 2025 00:59:37 +0000
Subject: [PATCH 01/11] chore(lang): updated translations from crowdin
Co-authored-by: Crowdin Homarr <190541745+homarr-crowdin[bot]@users.noreply.github.com>
---
packages/translation/src/lang/da.json | 2 +-
packages/translation/src/lang/nl.json | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/packages/translation/src/lang/da.json b/packages/translation/src/lang/da.json
index 7821d59bd..dc7da9370 100644
--- a/packages/translation/src/lang/da.json
+++ b/packages/translation/src/lang/da.json
@@ -2232,7 +2232,7 @@
"unknown": "Ukendt",
"pending": "Afventende",
"processing": "Behandler",
- "requested": "",
+ "requested": "Anmodet",
"partiallyAvailable": "Delvis",
"available": "Tilgængelig",
"blacklisted": "Blacklistet",
diff --git a/packages/translation/src/lang/nl.json b/packages/translation/src/lang/nl.json
index 53586967e..da8036109 100644
--- a/packages/translation/src/lang/nl.json
+++ b/packages/translation/src/lang/nl.json
@@ -747,7 +747,7 @@
},
"statusCode": {
"title": "Antwoord fout",
- "description": "",
+ "description": "Onverwachte {statusCode} ({reason}) reactie van . Controleer of de URL wijst naar de basis-URL van de integratie.",
"otherDescription": "",
"reason": {
"badRequest": "Onjuist verzoek",
@@ -2232,7 +2232,7 @@
"unknown": "Onbekend",
"pending": "In afwachting",
"processing": "Verwerken",
- "requested": "",
+ "requested": "Aangevraagd",
"partiallyAvailable": "Gedeeltelijk",
"available": "Beschikbaar",
"blacklisted": "Geblacklist",
From a2f7d63d2a924b68aacf5127d98d54d6b32afed0 Mon Sep 17 00:00:00 2001
From: "homarr-renovate[bot]"
<158783068+homarr-renovate[bot]@users.noreply.github.com>
Date: Sun, 7 Dec 2025 01:58:21 +0000
Subject: [PATCH 02/11] chore(deps): update dependency vite@>=5.0.0
<=5.4.18 to >=7.2.6 (#4595)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
pnpm-lock.yaml | 45 ++++++++++++++++++++++++++++++++++++++++++---
2 files changed, 43 insertions(+), 4 deletions(-)
diff --git a/package.json b/package.json
index afabec73c..00c3ce139 100644
--- a/package.json
+++ b/package.json
@@ -95,7 +95,7 @@
"tar-fs@>=3.0.0 <3.0.9": ">=3.1.1",
"tar-fs@>=2.0.0 <2.1.3": ">=3.1.1",
"tmp@<=0.2.3": ">=0.2.5",
- "vite@>=5.0.0 <=5.4.18": ">=7.2.4"
+ "vite@>=5.0.0 <=5.4.18": ">=7.2.6"
},
"patchedDependencies": {
"@types/node-unifi": "patches/@types__node-unifi.patch",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 232fbc460..3b1c936fa 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -23,7 +23,7 @@ overrides:
tar-fs@>=3.0.0 <3.0.9: '>=3.1.1'
tar-fs@>=2.0.0 <2.1.3: '>=3.1.1'
tmp@<=0.2.3: '>=0.2.5'
- vite@>=5.0.0 <=5.4.18: '>=7.2.4'
+ vite@>=5.0.0 <=5.4.18: '>=7.2.6'
patchedDependencies:
'@types/node-unifi':
@@ -3402,78 +3402,92 @@ packages:
resolution: {integrity: sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
'@img/sharp-libvips-linux-arm@1.2.3':
resolution: {integrity: sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==}
cpu: [arm]
os: [linux]
+ libc: [glibc]
'@img/sharp-libvips-linux-ppc64@1.2.3':
resolution: {integrity: sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==}
cpu: [ppc64]
os: [linux]
+ libc: [glibc]
'@img/sharp-libvips-linux-s390x@1.2.3':
resolution: {integrity: sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==}
cpu: [s390x]
os: [linux]
+ libc: [glibc]
'@img/sharp-libvips-linux-x64@1.2.3':
resolution: {integrity: sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==}
cpu: [x64]
os: [linux]
+ libc: [glibc]
'@img/sharp-libvips-linuxmusl-arm64@1.2.3':
resolution: {integrity: sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==}
cpu: [arm64]
os: [linux]
+ libc: [musl]
'@img/sharp-libvips-linuxmusl-x64@1.2.3':
resolution: {integrity: sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==}
cpu: [x64]
os: [linux]
+ libc: [musl]
'@img/sharp-linux-arm64@0.34.4':
resolution: {integrity: sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
'@img/sharp-linux-arm@0.34.4':
resolution: {integrity: sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm]
os: [linux]
+ libc: [glibc]
'@img/sharp-linux-ppc64@0.34.4':
resolution: {integrity: sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [ppc64]
os: [linux]
+ libc: [glibc]
'@img/sharp-linux-s390x@0.34.4':
resolution: {integrity: sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [s390x]
os: [linux]
+ libc: [glibc]
'@img/sharp-linux-x64@0.34.4':
resolution: {integrity: sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
+ libc: [glibc]
'@img/sharp-linuxmusl-arm64@0.34.4':
resolution: {integrity: sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
+ libc: [musl]
'@img/sharp-linuxmusl-x64@0.34.4':
resolution: {integrity: sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
+ libc: [musl]
'@img/sharp-wasm32@0.34.4':
resolution: {integrity: sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==}
@@ -3711,24 +3725,28 @@ packages:
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
'@next/swc-linux-arm64-musl@16.0.7':
resolution: {integrity: sha512-+ksWNrZrthisXuo9gd1XnjHRowCbMtl/YgMpbRvFeDEqEBd523YHPWpBuDjomod88U8Xliw5DHhekBC3EOOd9g==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
+ libc: [musl]
'@next/swc-linux-x64-gnu@16.0.7':
resolution: {integrity: sha512-4WtJU5cRDxpEE44Ana2Xro1284hnyVpBb62lIpU5k85D8xXxatT+rXxBgPkc7C1XwkZMWpK5rXLXTh9PFipWsA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
+ libc: [glibc]
'@next/swc-linux-x64-musl@16.0.7':
resolution: {integrity: sha512-HYlhqIP6kBPXalW2dbMTSuB4+8fe+j9juyxwfMwCe9kQPPeiyFn7NMjNfoFOfJ2eXkeQsoUGXg+O2SE3m4Qg2w==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
+ libc: [musl]
'@next/swc-win32-arm64-msvc@16.0.7':
resolution: {integrity: sha512-EviG+43iOoBRZg9deGauXExjRphhuYmIOJ12b9sAPy0eQ6iwcPxfED2asb/s2/yiLYOdm37kPaiZu8uXSYPs0Q==}
@@ -3911,30 +3929,35 @@ packages:
engines: {node: '>= 10.0.0'}
cpu: [arm]
os: [linux]
+ libc: [glibc]
'@parcel/watcher-linux-arm64-glibc@2.4.1':
resolution: {integrity: sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
'@parcel/watcher-linux-arm64-musl@2.4.1':
resolution: {integrity: sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [linux]
+ libc: [musl]
'@parcel/watcher-linux-x64-glibc@2.4.1':
resolution: {integrity: sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [linux]
+ libc: [glibc]
'@parcel/watcher-linux-x64-musl@2.4.1':
resolution: {integrity: sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [linux]
+ libc: [musl]
'@parcel/watcher-win32-arm64@2.4.1':
resolution: {integrity: sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==}
@@ -4069,61 +4092,73 @@ packages:
resolution: {integrity: sha512-3zEuZsXfKaw8n/yF7t8N6NNdhyFw3s8xJTqjbTDXlipwrEHo4GtIKcMJr5Ed29leLpB9AugtAQpAHW0jvtKKaQ==}
cpu: [arm]
os: [linux]
+ libc: [glibc]
'@rollup/rollup-linux-arm-musleabihf@4.48.1':
resolution: {integrity: sha512-leo9tOIlKrcBmmEypzunV/2w946JeLbTdDlwEZ7OnnsUyelZ72NMnT4B2vsikSgwQifjnJUbdXzuW4ToN1wV+Q==}
cpu: [arm]
os: [linux]
+ libc: [musl]
'@rollup/rollup-linux-arm64-gnu@4.48.1':
resolution: {integrity: sha512-Vy/WS4z4jEyvnJm+CnPfExIv5sSKqZrUr98h03hpAMbE2aI0aD2wvK6GiSe8Gx2wGp3eD81cYDpLLBqNb2ydwQ==}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
'@rollup/rollup-linux-arm64-musl@4.48.1':
resolution: {integrity: sha512-x5Kzn7XTwIssU9UYqWDB9VpLpfHYuXw5c6bJr4Mzv9kIv242vmJHbI5PJJEnmBYitUIfoMCODDhR7KoZLot2VQ==}
cpu: [arm64]
os: [linux]
+ libc: [musl]
'@rollup/rollup-linux-loongarch64-gnu@4.48.1':
resolution: {integrity: sha512-yzCaBbwkkWt/EcgJOKDUdUpMHjhiZT/eDktOPWvSRpqrVE04p0Nd6EGV4/g7MARXXeOqstflqsKuXVM3H9wOIQ==}
cpu: [loong64]
os: [linux]
+ libc: [glibc]
'@rollup/rollup-linux-ppc64-gnu@4.48.1':
resolution: {integrity: sha512-UK0WzWUjMAJccHIeOpPhPcKBqax7QFg47hwZTp6kiMhQHeOYJeaMwzeRZe1q5IiTKsaLnHu9s6toSYVUlZ2QtQ==}
cpu: [ppc64]
os: [linux]
+ libc: [glibc]
'@rollup/rollup-linux-riscv64-gnu@4.48.1':
resolution: {integrity: sha512-3NADEIlt+aCdCbWVZ7D3tBjBX1lHpXxcvrLt/kdXTiBrOds8APTdtk2yRL2GgmnSVeX4YS1JIf0imFujg78vpw==}
cpu: [riscv64]
os: [linux]
+ libc: [glibc]
'@rollup/rollup-linux-riscv64-musl@4.48.1':
resolution: {integrity: sha512-euuwm/QTXAMOcyiFCcrx0/S2jGvFlKJ2Iro8rsmYL53dlblp3LkUQVFzEidHhvIPPvcIsxDhl2wkBE+I6YVGzA==}
cpu: [riscv64]
os: [linux]
+ libc: [musl]
'@rollup/rollup-linux-s390x-gnu@4.48.1':
resolution: {integrity: sha512-w8mULUjmPdWLJgmTYJx/W6Qhln1a+yqvgwmGXcQl2vFBkWsKGUBRbtLRuKJUln8Uaimf07zgJNxOhHOvjSQmBQ==}
cpu: [s390x]
os: [linux]
+ libc: [glibc]
'@rollup/rollup-linux-x64-gnu@4.48.1':
resolution: {integrity: sha512-90taWXCWxTbClWuMZD0DKYohY1EovA+W5iytpE89oUPmT5O1HFdf8cuuVIylE6vCbrGdIGv85lVRzTcpTRZ+kA==}
cpu: [x64]
os: [linux]
+ libc: [glibc]
'@rollup/rollup-linux-x64-gnu@4.6.1':
resolution: {integrity: sha512-DNGZvZDO5YF7jN5fX8ZqmGLjZEXIJRdJEdTFMhiyXqyXubBa0WVLDWSNlQ5JR2PNgDbEV1VQowhVRUh+74D+RA==}
cpu: [x64]
os: [linux]
+ libc: [glibc]
'@rollup/rollup-linux-x64-musl@4.48.1':
resolution: {integrity: sha512-2Gu29SkFh1FfTRuN1GR1afMuND2GKzlORQUP3mNMJbqdndOg7gNsa81JnORctazHRokiDzQ5+MLE5XYmZW5VWg==}
cpu: [x64]
os: [linux]
+ libc: [musl]
'@rollup/rollup-win32-arm64-msvc@4.48.1':
resolution: {integrity: sha512-6kQFR1WuAO50bxkIlAVeIYsz3RUx+xymwhTo9j94dJ+kmHe9ly7muH23sdfWduD0BA8pD9/yhonUvAjxGh34jQ==}
@@ -4340,24 +4375,28 @@ packages:
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
'@swc/core-linux-arm64-musl@1.15.3':
resolution: {integrity: sha512-j4SJniZ/qaZ5g8op+p1G9K1z22s/EYGg1UXIb3+Cg4nsxEpF5uSIGEE4mHUfA70L0BR9wKT2QF/zv3vkhfpX4g==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
+ libc: [musl]
'@swc/core-linux-x64-gnu@1.15.3':
resolution: {integrity: sha512-aKttAZnz8YB1VJwPQZtyU8Uk0BfMP63iDMkvjhJzRZVgySmqt/apWSdnoIcZlUoGheBrcqbMC17GGUmur7OT5A==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
+ libc: [glibc]
'@swc/core-linux-x64-musl@1.15.3':
resolution: {integrity: sha512-oe8FctPu1gnUsdtGJRO2rvOUIkkIIaHqsO9xxN0bTR7dFTlPTGi2Fhk1tnvXeyAvCPxLIcwD8phzKg6wLv9yug==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
+ libc: [musl]
'@swc/core-win32-arm64-msvc@1.15.3':
resolution: {integrity: sha512-L9AjzP2ZQ/Xh58e0lTRMLvEDrcJpR7GwZqAtIeNLcTK7JVE+QineSyHp0kLkO1rttCHyCy0U74kDTj0dRz6raA==}
@@ -5108,7 +5147,7 @@ packages:
resolution: {integrity: sha512-WQfkSw0QbQ5aJ2CHYw23ZGkqnRwqKHD/KYsMeTkZzPT4Jcf0DcBxBtwMJxnu6E7oxw5+JC6ZAiePgh28uJ1HBA==}
engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
- vite: '>=7.2.4'
+ vite: '>=7.2.6'
'@vitest/coverage-v8@4.0.14':
resolution: {integrity: sha512-EYHLqN/BY6b47qHH7gtMxAg++saoGmsjWmAq9MlXxAz4M0NcHh9iOyKhBZyU4yxZqOd8Xnqp80/5saeitz4Cng==}
@@ -10804,7 +10843,7 @@ packages:
vite-tsconfig-paths@5.1.4:
resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==}
peerDependencies:
- vite: '>=7.2.4'
+ vite: '>=7.2.6'
peerDependenciesMeta:
vite:
optional: true
From ed638d47679594eab3cc19a12473722644ebf694 Mon Sep 17 00:00:00 2001
From: "homarr-renovate[bot]"
<158783068+homarr-renovate[bot]@users.noreply.github.com>
Date: Sun, 7 Dec 2025 01:59:14 +0000
Subject: [PATCH 03/11] fix(deps): update dependency jotai to ^2.15.2 (#4597)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
---
apps/nextjs/package.json | 2 +-
packages/spotlight/package.json | 2 +-
pnpm-lock.yaml | 16 ++++++++--------
3 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json
index 60f9800e6..cf858ca61 100644
--- a/apps/nextjs/package.json
+++ b/apps/nextjs/package.json
@@ -76,7 +76,7 @@
"flag-icons": "^7.5.0",
"glob": "^12.0.0",
"isomorphic-dompurify": "^2.33.0",
- "jotai": "^2.15.1",
+ "jotai": "^2.15.2",
"mantine-react-table": "2.0.0-beta.9",
"next": "16.0.7",
"postcss-preset-mantine": "^1.18.0",
diff --git a/packages/spotlight/package.json b/packages/spotlight/package.json
index 4d71626a5..b161a72c9 100644
--- a/packages/spotlight/package.json
+++ b/packages/spotlight/package.json
@@ -37,7 +37,7 @@
"@mantine/hooks": "^8.3.9",
"@mantine/spotlight": "^8.3.9",
"@tabler/icons-react": "^3.35.0",
- "jotai": "^2.15.1",
+ "jotai": "^2.15.2",
"next": "16.0.7",
"react": "19.2.0",
"react-dom": "19.2.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 3b1c936fa..6d809d686 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -293,8 +293,8 @@ importers:
specifier: ^2.33.0
version: 2.33.0(postcss@8.5.6)
jotai:
- specifier: ^2.15.1
- version: 2.15.1(@babel/core@7.26.0)(@babel/template@7.27.2)(@types/react@19.2.7)(react@19.2.0)
+ specifier: ^2.15.2
+ version: 2.15.2(@babel/core@7.26.0)(@babel/template@7.27.2)(@types/react@19.2.7)(react@19.2.0)
mantine-react-table:
specifier: 2.0.0-beta.9
version: 2.0.0-beta.9(@mantine/core@8.3.9(@mantine/hooks@8.3.9(react@19.2.0))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mantine/dates@8.3.9(@mantine/core@8.3.9(@mantine/hooks@8.3.9(react@19.2.0))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mantine/hooks@8.3.9(react@19.2.0))(dayjs@1.11.19)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mantine/hooks@8.3.9(react@19.2.0))(@tabler/icons-react@3.35.0(react@19.2.0))(clsx@2.1.1)(dayjs@1.11.19)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
@@ -2052,8 +2052,8 @@ importers:
specifier: ^3.35.0
version: 3.35.0(react@19.2.0)
jotai:
- specifier: ^2.15.1
- version: 2.15.1(@babel/core@7.28.5)(@babel/template@7.27.2)(@types/react@19.2.7)(react@19.2.0)
+ specifier: ^2.15.2
+ version: 2.15.2(@babel/core@7.28.5)(@babel/template@7.27.2)(@types/react@19.2.7)(react@19.2.0)
next:
specifier: 16.0.7
version: 16.0.7(@babel/core@7.28.5)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.2)
@@ -7832,8 +7832,8 @@ packages:
jose@6.0.8:
resolution: {integrity: sha512-EyUPtOKyTYq+iMOszO42eobQllaIjJnwkZ2U93aJzNyPibCy7CEvT9UQnaCVB51IAd49gbNdCew1c0LcLTCB2g==}
- jotai@2.15.1:
- resolution: {integrity: sha512-yHT1HAZ3ba2Q8wgaUQ+xfBzEtcS8ie687I8XVCBinfg4bNniyqLIN+utPXWKQE93LMF5fPbQSVRZqgpcN5yd6Q==}
+ jotai@2.15.2:
+ resolution: {integrity: sha512-El86CCfXNMEOytp20NPfppqGGmcp6H6kIA+tJHdmASEUURJCYW4fh8nTHEnB8rUXEFAY1pm8PdHPwnrcPGwdEg==}
engines: {node: '>=12.20.0'}
peerDependencies:
'@babel/core': '>=7.0.0'
@@ -17303,14 +17303,14 @@ snapshots:
jose@6.0.8: {}
- jotai@2.15.1(@babel/core@7.26.0)(@babel/template@7.27.2)(@types/react@19.2.7)(react@19.2.0):
+ jotai@2.15.2(@babel/core@7.26.0)(@babel/template@7.27.2)(@types/react@19.2.7)(react@19.2.0):
optionalDependencies:
'@babel/core': 7.26.0
'@babel/template': 7.27.2
'@types/react': 19.2.7
react: 19.2.0
- jotai@2.15.1(@babel/core@7.28.5)(@babel/template@7.27.2)(@types/react@19.2.7)(react@19.2.0):
+ jotai@2.15.2(@babel/core@7.28.5)(@babel/template@7.27.2)(@types/react@19.2.7)(react@19.2.0):
optionalDependencies:
'@babel/core': 7.28.5
'@babel/template': 7.27.2
From 6b28aa86d0bad29e4806592079a7f5d2e22b5ade Mon Sep 17 00:00:00 2001
From: "homarr-renovate[bot]"
<158783068+homarr-renovate[bot]@users.noreply.github.com>
Date: Sun, 7 Dec 2025 01:59:48 +0000
Subject: [PATCH 04/11] fix(deps): update dependency next-intl to v4.5.7
(#4598)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
---
packages/translation/package.json | 2 +-
pnpm-lock.yaml | 26 +++++++++++++-------------
2 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/packages/translation/package.json b/packages/translation/package.json
index 26011518e..a08ef3b30 100644
--- a/packages/translation/package.json
+++ b/packages/translation/package.json
@@ -33,7 +33,7 @@
"deepmerge": "4.3.1",
"mantine-react-table": "2.0.0-beta.9",
"next": "16.0.7",
- "next-intl": "4.5.6",
+ "next-intl": "4.5.7",
"react": "19.2.0",
"react-dom": "19.2.0"
},
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 6d809d686..00415588d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -2104,8 +2104,8 @@ importers:
specifier: 16.0.7
version: 16.0.7(@babel/core@7.28.5)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.2)
next-intl:
- specifier: 4.5.6
- version: 4.5.6(next@16.0.7(@babel/core@7.28.5)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.2))(react@19.2.0)(typescript@5.9.3)
+ specifier: 4.5.7
+ version: 4.5.7(next@16.0.7(@babel/core@7.28.5)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.2))(react@19.2.0)(typescript@5.9.3)
react:
specifier: 19.2.0
version: 19.2.0
@@ -8442,11 +8442,11 @@ packages:
nodemailer:
optional: true
- next-intl-swc-plugin-extractor@4.5.6:
- resolution: {integrity: sha512-ApB3wGYqni8lks90UuaslnCK4a+q8I6ajEafSpknN6RDrs2hUwNuWVrjKhOuhLqNLn4kBKl+Zi5c0WKpL968ag==}
+ next-intl-swc-plugin-extractor@4.5.8:
+ resolution: {integrity: sha512-hscCKUv+5GQ0CCNbvqZ8gaxnAGToCgDTbL++jgCq8SCk/ljtZDEeQZcMk46Nm6Ynn49Q/JKF4Npo/Sq1mpbusA==}
- next-intl@4.5.6:
- resolution: {integrity: sha512-LD1mM9HL44NGqDus3cpIE8wqRU87GWf7rdy1g7UHceT9KJvvjER/jlmIRt3GHaoOiln16K4IbHpO2ZI6jiqiDQ==}
+ next-intl@4.5.7:
+ resolution: {integrity: sha512-7iT9rBEFZvsJI5uLoOLgI1kAieg1k7zCwbuby6ylKRbpvt08I1vkZ5FJnIBey1M+r1jam/wANlnqRYeJagjL2Q==}
peerDependencies:
next: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0
@@ -10749,8 +10749,8 @@ packages:
peerDependencies:
react: '>=16.13'
- use-intl@4.5.6:
- resolution: {integrity: sha512-SzxrUH/X3LatVcgWVqz8ifoBK01LC3fzc8Y29Vj0QfrjLIXfGwxvJ3aapyWumBIIHsZmCR0Rx5FpKDWCc9JiOg==}
+ use-intl@4.5.8:
+ resolution: {integrity: sha512-rWPV2Sirw55BQbA/7ndUBtsikh8WXwBrUkZJ1mD35+emj/ogPPqgCZdv1DdrEFK42AjF1g5w8d3x8govhqPH6Q==}
peerDependencies:
react: ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0
@@ -18007,18 +18007,18 @@ snapshots:
next: 16.0.7(@babel/core@7.28.5)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.2)
react: 19.2.0
- next-intl-swc-plugin-extractor@4.5.6: {}
+ next-intl-swc-plugin-extractor@4.5.8: {}
- next-intl@4.5.6(next@16.0.7(@babel/core@7.28.5)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.2))(react@19.2.0)(typescript@5.9.3):
+ next-intl@4.5.7(next@16.0.7(@babel/core@7.28.5)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.2))(react@19.2.0)(typescript@5.9.3):
dependencies:
'@formatjs/intl-localematcher': 0.5.5
'@swc/core': 1.15.3
negotiator: 1.0.0
next: 16.0.7(@babel/core@7.28.5)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.2)
- next-intl-swc-plugin-extractor: 4.5.6
+ next-intl-swc-plugin-extractor: 4.5.8
po-parser: 1.0.2
react: 19.2.0
- use-intl: 4.5.6(react@19.2.0)
+ use-intl: 4.5.8(react@19.2.0)
optionalDependencies:
typescript: 5.9.3
transitivePeerDependencies:
@@ -20711,7 +20711,7 @@ snapshots:
dequal: 2.0.3
react: 19.2.0
- use-intl@4.5.6(react@19.2.0):
+ use-intl@4.5.8(react@19.2.0):
dependencies:
'@formatjs/fast-memoize': 2.2.1
'@schummar/icu-type-parser': 1.21.5
From 234266ebd975e68c0fff91b4a6f42d496fedd3c4 Mon Sep 17 00:00:00 2001
From: "homarr-renovate[bot]"
<158783068+homarr-renovate[bot]@users.noreply.github.com>
Date: Sun, 7 Dec 2025 17:36:30 +0100
Subject: [PATCH 05/11] chore(deps): update actions/checkout action to v6
(#4601)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
---
.github/workflows/automatic-approval.yml | 2 +-
.github/workflows/code-quality.yml | 12 ++++++------
.github/workflows/crowdin-schedule-download.yml | 2 +-
.github/workflows/crowdin-upload.yml | 2 +-
.github/workflows/deployment-docker-image.yml | 6 +++---
.github/workflows/deployment-weekly-release.yml | 2 +-
.github/workflows/on-pr-renovate-validate.yml | 2 +-
.github/workflows/on-release.yml | 2 +-
.github/workflows/update-contributors.yml | 2 +-
.github/workflows/update-integration-list.yml | 2 +-
10 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/.github/workflows/automatic-approval.yml b/.github/workflows/automatic-approval.yml
index 7a38b6e02..7f212e23b 100644
--- a/.github/workflows/automatic-approval.yml
+++ b/.github/workflows/automatic-approval.yml
@@ -11,7 +11,7 @@ jobs:
if: github.actor_id == 158783068 || github.actor_id == 190541745 || github.actor_id == 210161987 # Id of renovate bot and crowdin bot see https://api.github.com/users/homarr-renovate%5Bbot%5D and https://api.github.com/users/homarr-crowdin%5Bbot%5D and https://api.github.com/users/homarr-update-contributors%5Bbot%5D
steps:
- name: Checkout code
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Obtain token
id: obtainToken
uses: actions/create-github-app-token@v2
diff --git a/.github/workflows/code-quality.yml b/.github/workflows/code-quality.yml
index 4159cdb6b..2b5e8a3d7 100644
--- a/.github/workflows/code-quality.yml
+++ b/.github/workflows/code-quality.yml
@@ -24,7 +24,7 @@ jobs:
lint:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- name: Setup
uses: ./tooling/github/setup
@@ -39,7 +39,7 @@ jobs:
format:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- name: Setup
uses: ./tooling/github/setup
@@ -50,7 +50,7 @@ jobs:
typecheck:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- name: Setup
uses: ./tooling/github/setup
@@ -61,7 +61,7 @@ jobs:
test:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- name: Setup
uses: ./tooling/github/setup
@@ -79,7 +79,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- name: Setup
uses: ./tooling/github/setup
- name: Build docker image
@@ -102,7 +102,7 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- name: Setup
uses: ./tooling/github/setup
- name: Copy env
diff --git a/.github/workflows/crowdin-schedule-download.yml b/.github/workflows/crowdin-schedule-download.yml
index c4fead5ad..a62f9e31d 100644
--- a/.github/workflows/crowdin-schedule-download.yml
+++ b/.github/workflows/crowdin-schedule-download.yml
@@ -14,7 +14,7 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Obtain token
id: obtainToken
diff --git a/.github/workflows/crowdin-upload.yml b/.github/workflows/crowdin-upload.yml
index 5b46a7bf9..4cdf60b66 100644
--- a/.github/workflows/crowdin-upload.yml
+++ b/.github/workflows/crowdin-upload.yml
@@ -17,7 +17,7 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Upload Crowdin translations
uses: crowdin/github-action@v2
diff --git a/.github/workflows/deployment-docker-image.yml b/.github/workflows/deployment-docker-image.yml
index 3b608f8df..d0479ae21 100644
--- a/.github/workflows/deployment-docker-image.yml
+++ b/.github/workflows/deployment-docker-image.yml
@@ -55,7 +55,7 @@ jobs:
app-id: ${{ secrets.RENOVATE_MERGE_APP_ID }}
permission-contents: write # required to commit package.json & changelog changes, merge them to dev and publish the release
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
if: env.SKIP_RELEASE == 'false'
with:
persist-credentials: false
@@ -115,7 +115,7 @@ jobs:
outputs:
digest: ${{ steps.build.outputs.digest }}
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
ref: ${{ needs.release.outputs.git_ref }}
@@ -154,7 +154,7 @@ jobs:
outputs:
digest: ${{ steps.build.outputs.digest }}
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
ref: ${{ needs.release.outputs.git_ref }}
diff --git a/.github/workflows/deployment-weekly-release.yml b/.github/workflows/deployment-weekly-release.yml
index e96cf4eec..8eae236c4 100644
--- a/.github/workflows/deployment-weekly-release.yml
+++ b/.github/workflows/deployment-weekly-release.yml
@@ -27,7 +27,7 @@ jobs:
with:
args: "Automatic release has been triggered: [run ${{ github.run_number }}](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})"
- name: Checkout repository
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Get Next Version
diff --git a/.github/workflows/on-pr-renovate-validate.yml b/.github/workflows/on-pr-renovate-validate.yml
index a6096c033..ebfb57ed2 100644
--- a/.github/workflows/on-pr-renovate-validate.yml
+++ b/.github/workflows/on-pr-renovate-validate.yml
@@ -12,7 +12,7 @@ jobs:
renovate-validate:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- run: |
npx --yes --package renovate -- \
renovate-config-validator --strict .github/renovate.json5
diff --git a/.github/workflows/on-release.yml b/.github/workflows/on-release.yml
index 9aac94c45..ac4277cde 100644
--- a/.github/workflows/on-release.yml
+++ b/.github/workflows/on-release.yml
@@ -49,7 +49,7 @@ jobs:
permission-contents: write # required to commit to branch
permission-pull-requests: write # required to create pr & enable automerge
- name: Checkout code
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
token: ${{ steps.obtainToken.outputs.token }}
- name: Setup
diff --git a/.github/workflows/update-contributors.yml b/.github/workflows/update-contributors.yml
index df879b334..91f087d9c 100644
--- a/.github/workflows/update-contributors.yml
+++ b/.github/workflows/update-contributors.yml
@@ -28,7 +28,7 @@ jobs:
permission-pull-requests: write # required to create pr & enable automerge
- name: Checkout repository
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
env:
GITHUB_TOKEN: ${{ steps.obtainToken.outputs.token }}
diff --git a/.github/workflows/update-integration-list.yml b/.github/workflows/update-integration-list.yml
index ff7ad9ae8..5be197084 100644
--- a/.github/workflows/update-integration-list.yml
+++ b/.github/workflows/update-integration-list.yml
@@ -27,7 +27,7 @@ jobs:
permission-contents: write # required to commit to branch
permission-pull-requests: write # required to create pr & enable automerge
- name: Checkout code
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
env:
GITHUB_TOKEN: ${{ steps.obtainToken.outputs.token }}
- name: Setup
From 4f92e5265a40c636f303406e728e88cc056da23c Mon Sep 17 00:00:00 2001
From: "homarr-renovate[bot]"
<158783068+homarr-renovate[bot]@users.noreply.github.com>
Date: Mon, 8 Dec 2025 11:38:56 +0000
Subject: [PATCH 06/11] fix(deps): update dependency next-intl to v4.5.8
(#4606)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
---
packages/translation/package.json | 2 +-
pnpm-lock.yaml | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/packages/translation/package.json b/packages/translation/package.json
index a08ef3b30..d6fb022ce 100644
--- a/packages/translation/package.json
+++ b/packages/translation/package.json
@@ -33,7 +33,7 @@
"deepmerge": "4.3.1",
"mantine-react-table": "2.0.0-beta.9",
"next": "16.0.7",
- "next-intl": "4.5.7",
+ "next-intl": "4.5.8",
"react": "19.2.0",
"react-dom": "19.2.0"
},
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 00415588d..ac8205604 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -2104,8 +2104,8 @@ importers:
specifier: 16.0.7
version: 16.0.7(@babel/core@7.28.5)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.2)
next-intl:
- specifier: 4.5.7
- version: 4.5.7(next@16.0.7(@babel/core@7.28.5)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.2))(react@19.2.0)(typescript@5.9.3)
+ specifier: 4.5.8
+ version: 4.5.8(next@16.0.7(@babel/core@7.28.5)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.2))(react@19.2.0)(typescript@5.9.3)
react:
specifier: 19.2.0
version: 19.2.0
@@ -8445,8 +8445,8 @@ packages:
next-intl-swc-plugin-extractor@4.5.8:
resolution: {integrity: sha512-hscCKUv+5GQ0CCNbvqZ8gaxnAGToCgDTbL++jgCq8SCk/ljtZDEeQZcMk46Nm6Ynn49Q/JKF4Npo/Sq1mpbusA==}
- next-intl@4.5.7:
- resolution: {integrity: sha512-7iT9rBEFZvsJI5uLoOLgI1kAieg1k7zCwbuby6ylKRbpvt08I1vkZ5FJnIBey1M+r1jam/wANlnqRYeJagjL2Q==}
+ next-intl@4.5.8:
+ resolution: {integrity: sha512-BdN6494nvt09WtmW5gbWdwRhDDHC/Sg7tBMhN7xfYds3vcRCngSDXat81gmJkblw9jYOv8zXzzFJyu5VYXnJzg==}
peerDependencies:
next: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0
@@ -18009,7 +18009,7 @@ snapshots:
next-intl-swc-plugin-extractor@4.5.8: {}
- next-intl@4.5.7(next@16.0.7(@babel/core@7.28.5)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.2))(react@19.2.0)(typescript@5.9.3):
+ next-intl@4.5.8(next@16.0.7(@babel/core@7.28.5)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass@1.94.2))(react@19.2.0)(typescript@5.9.3):
dependencies:
'@formatjs/intl-localematcher': 0.5.5
'@swc/core': 1.15.3
From 54809823e9edeacc245b560747b622aba683b3bf Mon Sep 17 00:00:00 2001
From: "homarr-renovate[bot]"
<158783068+homarr-renovate[bot]@users.noreply.github.com>
Date: Mon, 8 Dec 2025 14:19:46 +0100
Subject: [PATCH 07/11] fix(deps): update dependency prettier to ^3.7.4 (#4582)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
Co-authored-by: Meier Lukas
---
apps/nextjs/package.json | 2 +-
apps/tasks/package.json | 2 +-
apps/websocket/package.json | 2 +-
package.json | 2 +-
packages/api/package.json | 2 +-
packages/auth/package.json | 2 +-
packages/db/package.json | 2 +-
packages/form/src/types.ts | 6 ++-
.../components/select-with-custom-items.tsx | 6 ++-
packages/widgets/src/options.ts | 16 +++---
pnpm-lock.yaml | 50 +++++++++----------
tooling/prettier/package.json | 2 +-
12 files changed, 51 insertions(+), 43 deletions(-)
diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json
index cf858ca61..6778b7be4 100644
--- a/apps/nextjs/package.json
+++ b/apps/nextjs/package.json
@@ -104,7 +104,7 @@
"concurrently": "^9.2.1",
"eslint": "^9.39.1",
"node-loader": "^2.1.0",
- "prettier": "^3.6.2",
+ "prettier": "^3.7.4",
"typescript": "^5.9.3"
}
}
diff --git a/apps/tasks/package.json b/apps/tasks/package.json
index 1fac1e9b6..2cc5f798d 100644
--- a/apps/tasks/package.json
+++ b/apps/tasks/package.json
@@ -51,7 +51,7 @@
"dotenv-cli": "^11.0.0",
"esbuild": "^0.27.0",
"eslint": "^9.39.1",
- "prettier": "^3.6.2",
+ "prettier": "^3.7.4",
"tsx": "4.20.4",
"typescript": "^5.9.3"
}
diff --git a/apps/websocket/package.json b/apps/websocket/package.json
index e4a29aa47..c54e63e75 100644
--- a/apps/websocket/package.json
+++ b/apps/websocket/package.json
@@ -36,7 +36,7 @@
"@types/ws": "^8.18.1",
"esbuild": "^0.27.0",
"eslint": "^9.39.1",
- "prettier": "^3.6.2",
+ "prettier": "^3.7.4",
"typescript": "^5.9.3"
}
}
diff --git a/package.json b/package.json
index 00c3ce139..948b8a77d 100644
--- a/package.json
+++ b/package.json
@@ -51,7 +51,7 @@
"cross-env": "^10.1.0",
"jsdom": "^27.2.0",
"json5": "^2.2.3",
- "prettier": "^3.6.2",
+ "prettier": "^3.7.4",
"semantic-release": "^25.0.2",
"testcontainers": "^11.9.0",
"turbo": "^2.6.1",
diff --git a/packages/api/package.json b/packages/api/package.json
index d80d5b833..5cf8ea735 100644
--- a/packages/api/package.json
+++ b/packages/api/package.json
@@ -61,7 +61,7 @@
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^9.39.1",
- "prettier": "^3.6.2",
+ "prettier": "^3.7.4",
"typescript": "^5.9.3"
}
}
diff --git a/packages/auth/package.json b/packages/auth/package.json
index c0cf7b3b5..b254cd921 100644
--- a/packages/auth/package.json
+++ b/packages/auth/package.json
@@ -48,7 +48,7 @@
"@types/bcrypt": "6.0.0",
"@types/cookies": "0.9.2",
"eslint": "^9.39.1",
- "prettier": "^3.6.2",
+ "prettier": "^3.7.4",
"typescript": "^5.9.3"
}
}
diff --git a/packages/db/package.json b/packages/db/package.json
index dd5aaa6af..af2e3b69a 100644
--- a/packages/db/package.json
+++ b/packages/db/package.json
@@ -71,7 +71,7 @@
"dotenv-cli": "^11.0.0",
"esbuild": "^0.27.0",
"eslint": "^9.39.1",
- "prettier": "^3.6.2",
+ "prettier": "^3.7.4",
"tsx": "4.20.4",
"typescript": "^5.9.3"
}
diff --git a/packages/form/src/types.ts b/packages/form/src/types.ts
index 4c6c1363a..78e3cdeb4 100644
--- a/packages/form/src/types.ts
+++ b/packages/form/src/types.ts
@@ -1,7 +1,9 @@
import type { ChangeEvent, FocusEvent } from "react";
-export interface InputPropsFor
- extends BasePropsFor {
+export interface InputPropsFor extends BasePropsFor<
+ TOnChangeArg,
+ TComponent
+> {
value?: T;
defaultValue?: T;
}
diff --git a/packages/ui/src/components/select-with-custom-items.tsx b/packages/ui/src/components/select-with-custom-items.tsx
index d3ff3dff8..b1fe554e4 100644
--- a/packages/ui/src/components/select-with-custom-items.tsx
+++ b/packages/ui/src/components/select-with-custom-items.tsx
@@ -10,8 +10,10 @@ interface BaseSelectItem {
label: string;
}
-export interface SelectWithCustomItemsProps
- extends Pick {
+export interface SelectWithCustomItemsProps extends Pick<
+ SelectProps,
+ "label" | "error" | "defaultValue" | "value" | "onChange" | "placeholder" | "clearable"
+> {
data: TSelectItem[];
description?: string;
withAsterisk?: boolean;
diff --git a/packages/widgets/src/options.ts b/packages/widgets/src/options.ts
index d0fe2cdfb..2aa93b2cf 100644
--- a/packages/widgets/src/options.ts
+++ b/packages/widgets/src/options.ts
@@ -18,14 +18,17 @@ interface TextInput extends CommonInput {
validate?: z.ZodType;
}
-interface MultiSelectInput
- extends CommonInput[]> {
+interface MultiSelectInput extends CommonInput<
+ inferSelectOptionValue[]
+> {
options: TOptions;
searchable?: boolean;
}
-export interface SortableItemListInput
- extends Omit, "withDescription"> {
+export interface SortableItemListInput extends Omit<
+ CommonInput,
+ "withDescription"
+> {
AddButton: (props: { addItem: (item: TItem) => void; values: TOptionValue[] }) => React.ReactNode;
ItemComponent: (props: {
item: TItem;
@@ -37,8 +40,9 @@ export interface SortableItemListInput { data: TItem[] | undefined; isLoading: boolean; error: unknown };
}
-interface SelectInput
- extends CommonInput> {
+interface SelectInput extends CommonInput<
+ inferSelectOptionValue
+> {
options: TOptions;
searchable?: boolean;
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ac8205604..c451489db 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -86,8 +86,8 @@ importers:
specifier: ^2.2.3
version: 2.2.3
prettier:
- specifier: ^3.6.2
- version: 3.6.2
+ specifier: ^3.7.4
+ version: 3.7.4
semantic-release:
specifier: ^25.0.2
version: 25.0.2(typescript@5.9.3)
@@ -372,8 +372,8 @@ importers:
specifier: ^2.1.0
version: 2.1.0(webpack@5.94.0(@swc/core@1.15.3))
prettier:
- specifier: ^3.6.2
- version: 3.6.2
+ specifier: ^3.7.4
+ version: 3.7.4
typescript:
specifier: ^5.9.3
version: 5.9.3
@@ -469,8 +469,8 @@ importers:
specifier: ^9.39.1
version: 9.39.1
prettier:
- specifier: ^3.6.2
- version: 3.6.2
+ specifier: ^3.7.4
+ version: 3.7.4
tsx:
specifier: 4.20.4
version: 4.20.4
@@ -533,8 +533,8 @@ importers:
specifier: ^9.39.1
version: 9.39.1
prettier:
- specifier: ^3.6.2
- version: 3.6.2
+ specifier: ^3.7.4
+ version: 3.7.4
typescript:
specifier: ^5.9.3
version: 5.9.3
@@ -691,8 +691,8 @@ importers:
specifier: ^9.39.1
version: 9.39.1
prettier:
- specifier: ^3.6.2
- version: 3.6.2
+ specifier: ^3.7.4
+ version: 3.7.4
typescript:
specifier: ^5.9.3
version: 5.9.3
@@ -770,8 +770,8 @@ importers:
specifier: ^9.39.1
version: 9.39.1
prettier:
- specifier: ^3.6.2
- version: 3.6.2
+ specifier: ^3.7.4
+ version: 3.7.4
typescript:
specifier: ^5.9.3
version: 5.9.3
@@ -1218,8 +1218,8 @@ importers:
specifier: ^9.39.1
version: 9.39.1
prettier:
- specifier: ^3.6.2
- version: 3.6.2
+ specifier: ^3.7.4
+ version: 3.7.4
tsx:
specifier: 4.20.4
version: 4.20.4
@@ -2454,17 +2454,17 @@ importers:
dependencies:
'@ianvs/prettier-plugin-sort-imports':
specifier: ^4.7.0
- version: 4.7.0(prettier@3.6.2)
+ version: 4.7.0(prettier@3.7.4)
prettier:
- specifier: ^3.6.2
- version: 3.6.2
+ specifier: ^3.7.4
+ version: 3.7.4
devDependencies:
'@homarr/tsconfig':
specifier: workspace:^0.1.0
version: link:../typescript
prettier-plugin-packagejson:
specifier: ^2.5.20
- version: 2.5.20(prettier@3.6.2)
+ version: 2.5.20(prettier@3.7.4)
typescript:
specifier: ^5.9.3
version: 5.9.3
@@ -9111,8 +9111,8 @@ packages:
prettier:
optional: true
- prettier@3.6.2:
- resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==}
+ prettier@3.7.4:
+ resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==}
engines: {node: '>=14'}
hasBin: true
@@ -12124,13 +12124,13 @@ snapshots:
'@humanwhocodes/retry@0.4.2': {}
- '@ianvs/prettier-plugin-sort-imports@4.7.0(prettier@3.6.2)':
+ '@ianvs/prettier-plugin-sort-imports@4.7.0(prettier@3.7.4)':
dependencies:
'@babel/generator': 7.28.3
'@babel/parser': 7.28.3
'@babel/traverse': 7.28.3
'@babel/types': 7.28.2
- prettier: 3.6.2
+ prettier: 3.7.4
semver: 7.7.2
transitivePeerDependencies:
- supports-color
@@ -18678,14 +18678,14 @@ snapshots:
prelude-ls@1.2.1: {}
- prettier-plugin-packagejson@2.5.20(prettier@3.6.2):
+ prettier-plugin-packagejson@2.5.20(prettier@3.7.4):
dependencies:
sort-package-json: 3.5.0
synckit: 0.11.11
optionalDependencies:
- prettier: 3.6.2
+ prettier: 3.7.4
- prettier@3.6.2: {}
+ prettier@3.7.4: {}
pretty-ms@8.0.0:
dependencies:
diff --git a/tooling/prettier/package.json b/tooling/prettier/package.json
index 845b10ad8..d91d3eb62 100644
--- a/tooling/prettier/package.json
+++ b/tooling/prettier/package.json
@@ -11,7 +11,7 @@
"prettier": "@homarr/prettier-config",
"dependencies": {
"@ianvs/prettier-plugin-sort-imports": "^4.7.0",
- "prettier": "^3.6.2"
+ "prettier": "^3.7.4"
},
"devDependencies": {
"@homarr/tsconfig": "workspace:^0.1.0",
From aed2025b30f9edd3490a68b824f7c6e1f5de3eff Mon Sep 17 00:00:00 2001
From: "homarr-renovate[bot]"
<158783068+homarr-renovate[bot]@users.noreply.github.com>
Date: Mon, 8 Dec 2025 13:24:28 +0000
Subject: [PATCH 08/11] chore(deps): update vitest monorepo to ^4.0.15 (#4603)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
---
package.json | 6 +--
pnpm-lock.yaml | 131 +++++++++++++++++++++++++------------------------
2 files changed, 69 insertions(+), 68 deletions(-)
diff --git a/package.json b/package.json
index 948b8a77d..0671ea447 100644
--- a/package.json
+++ b/package.json
@@ -45,8 +45,8 @@
"@testcontainers/redis": "^11.9.0",
"@turbo/gen": "^2.6.1",
"@vitejs/plugin-react": "^5.1.1",
- "@vitest/coverage-v8": "^4.0.14",
- "@vitest/ui": "^4.0.14",
+ "@vitest/coverage-v8": "^4.0.15",
+ "@vitest/ui": "^4.0.15",
"conventional-changelog-conventionalcommits": "^9.1.0",
"cross-env": "^10.1.0",
"jsdom": "^27.2.0",
@@ -57,7 +57,7 @@
"turbo": "^2.6.1",
"typescript": "^5.9.3",
"vite-tsconfig-paths": "^5.1.4",
- "vitest": "^4.0.14"
+ "vitest": "^4.0.15"
},
"packageManager": "pnpm@10.24.0",
"engines": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c451489db..3c739134b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -68,11 +68,11 @@ importers:
specifier: ^5.1.1
version: 5.1.1(vite@7.1.12(@types/node@24.10.1)(sass@1.94.2)(sugarss@5.0.0(postcss@8.5.6))(terser@5.44.1)(tsx@4.20.5)(yaml@2.5.1))
'@vitest/coverage-v8':
- specifier: ^4.0.14
- version: 4.0.14(vitest@4.0.14)
+ specifier: ^4.0.15
+ version: 4.0.15(vitest@4.0.15)
'@vitest/ui':
- specifier: ^4.0.14
- version: 4.0.14(vitest@4.0.14)
+ specifier: ^4.0.15
+ version: 4.0.15(vitest@4.0.15)
conventional-changelog-conventionalcommits:
specifier: ^9.1.0
version: 9.1.0
@@ -104,8 +104,8 @@ importers:
specifier: ^5.1.4
version: 5.1.4(typescript@5.9.3)(vite@7.1.12(@types/node@24.10.1)(sass@1.94.2)(sugarss@5.0.0(postcss@8.5.6))(terser@5.44.1)(tsx@4.20.5)(yaml@2.5.1))
vitest:
- specifier: ^4.0.14
- version: 4.0.14(@types/node@24.10.1)(@vitest/ui@4.0.14)(jsdom@27.2.0(postcss@8.5.6))(sass@1.94.2)(sugarss@5.0.0(postcss@8.5.6))(terser@5.44.1)(tsx@4.20.5)(yaml@2.5.1)
+ specifier: ^4.0.15
+ version: 4.0.15(@types/node@24.10.1)(@vitest/ui@4.0.15)(jsdom@27.2.0(postcss@8.5.6))(sass@1.94.2)(sugarss@5.0.0(postcss@8.5.6))(terser@5.44.1)(tsx@4.20.5)(yaml@2.5.1)
apps/nextjs:
dependencies:
@@ -5149,20 +5149,20 @@ packages:
peerDependencies:
vite: '>=7.2.6'
- '@vitest/coverage-v8@4.0.14':
- resolution: {integrity: sha512-EYHLqN/BY6b47qHH7gtMxAg++saoGmsjWmAq9MlXxAz4M0NcHh9iOyKhBZyU4yxZqOd8Xnqp80/5saeitz4Cng==}
+ '@vitest/coverage-v8@4.0.15':
+ resolution: {integrity: sha512-FUJ+1RkpTFW7rQITdgTi93qOCWJobWhBirEPCeXh2SW2wsTlFxy51apDz5gzG+ZEYt/THvWeNmhdAoS9DTwpCw==}
peerDependencies:
- '@vitest/browser': 4.0.14
- vitest: 4.0.14
+ '@vitest/browser': 4.0.15
+ vitest: 4.0.15
peerDependenciesMeta:
'@vitest/browser':
optional: true
- '@vitest/expect@4.0.14':
- resolution: {integrity: sha512-RHk63V3zvRiYOWAV0rGEBRO820ce17hz7cI2kDmEdfQsBjT2luEKB5tCOc91u1oSQoUOZkSv3ZyzkdkSLD7lKw==}
+ '@vitest/expect@4.0.15':
+ resolution: {integrity: sha512-Gfyva9/GxPAWXIWjyGDli9O+waHDC0Q0jaLdFP1qPAUUfo1FEXPXUfUkp3eZA0sSq340vPycSyOlYUeM15Ft1w==}
- '@vitest/mocker@4.0.14':
- resolution: {integrity: sha512-RzS5NujlCzeRPF1MK7MXLiEFpkIXeMdQ+rN3Kk3tDI9j0mtbr7Nmuq67tpkOJQpgyClbOltCXMjLZicJHsH5Cg==}
+ '@vitest/mocker@4.0.15':
+ resolution: {integrity: sha512-CZ28GLfOEIFkvCFngN8Sfx5h+Se0zN+h4B7yOsPVCcgtiO7t5jt9xQh2E1UkFep+eb9fjyMfuC5gBypwb07fvQ==}
peerDependencies:
msw: ^2.4.9
vite: ^6.0.0 || ^7.0.0-0
@@ -5172,25 +5172,25 @@ packages:
vite:
optional: true
- '@vitest/pretty-format@4.0.14':
- resolution: {integrity: sha512-SOYPgujB6TITcJxgd3wmsLl+wZv+fy3av2PpiPpsWPZ6J1ySUYfScfpIt2Yv56ShJXR2MOA6q2KjKHN4EpdyRQ==}
+ '@vitest/pretty-format@4.0.15':
+ resolution: {integrity: sha512-SWdqR8vEv83WtZcrfLNqlqeQXlQLh2iilO1Wk1gv4eiHKjEzvgHb2OVc3mIPyhZE6F+CtfYjNlDJwP5MN6Km7A==}
- '@vitest/runner@4.0.14':
- resolution: {integrity: sha512-BsAIk3FAqxICqREbX8SetIteT8PiaUL/tgJjmhxJhCsigmzzH8xeadtp7LRnTpCVzvf0ib9BgAfKJHuhNllKLw==}
+ '@vitest/runner@4.0.15':
+ resolution: {integrity: sha512-+A+yMY8dGixUhHmNdPUxOh0la6uVzun86vAbuMT3hIDxMrAOmn5ILBHm8ajrqHE0t8R9T1dGnde1A5DTnmi3qw==}
- '@vitest/snapshot@4.0.14':
- resolution: {integrity: sha512-aQVBfT1PMzDSA16Y3Fp45a0q8nKexx6N5Amw3MX55BeTeZpoC08fGqEZqVmPcqN0ueZsuUQ9rriPMhZ3Mu19Ag==}
+ '@vitest/snapshot@4.0.15':
+ resolution: {integrity: sha512-A7Ob8EdFZJIBjLjeO0DZF4lqR6U7Ydi5/5LIZ0xcI+23lYlsYJAfGn8PrIWTYdZQRNnSRlzhg0zyGu37mVdy5g==}
- '@vitest/spy@4.0.14':
- resolution: {integrity: sha512-JmAZT1UtZooO0tpY3GRyiC/8W7dCs05UOq9rfsUUgEZEdq+DuHLmWhPsrTt0TiW7WYeL/hXpaE07AZ2RCk44hg==}
+ '@vitest/spy@4.0.15':
+ resolution: {integrity: sha512-+EIjOJmnY6mIfdXtE/bnozKEvTC4Uczg19yeZ2vtCz5Yyb0QQ31QWVQ8hswJ3Ysx/K2EqaNsVanjr//2+P3FHw==}
- '@vitest/ui@4.0.14':
- resolution: {integrity: sha512-fvDz8o7SQpFLoSBo6Cudv+fE85/fPCkwTnLAN85M+Jv7k59w2mSIjT9Q5px7XwGrmYqqKBEYxh/09IBGd1E7AQ==}
+ '@vitest/ui@4.0.15':
+ resolution: {integrity: sha512-sxSyJMaKp45zI0u+lHrPuZM1ZJQ8FaVD35k+UxVrha1yyvQ+TZuUYllUixwvQXlB7ixoDc7skf3lQPopZIvaQw==}
peerDependencies:
- vitest: 4.0.14
+ vitest: 4.0.15
- '@vitest/utils@4.0.14':
- resolution: {integrity: sha512-hLqXZKAWNg8pI+SQXyXxWCTOpA3MvsqcbVeNgSi8x/CSN2wi26dSzn1wrOhmCmFjEvN9p8/kLFRHa6PI8jHazw==}
+ '@vitest/utils@4.0.15':
+ resolution: {integrity: sha512-HXjPW2w5dxhTD0dLwtYHDnelK3j8sR8cWIaLxr22evTyY6q8pRCjZSmhRWVjBaOVXChQd6AwMzi9pucorXCPZA==}
'@webassemblyjs/ast@1.14.1':
resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==}
@@ -10265,8 +10265,9 @@ packages:
tinycolor2@1.6.0:
resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==}
- tinyexec@0.3.2:
- resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
+ tinyexec@1.0.2:
+ resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
+ engines: {node: '>=18'}
tinyglobby@0.2.14:
resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
@@ -10888,18 +10889,18 @@ packages:
yaml:
optional: true
- vitest@4.0.14:
- resolution: {integrity: sha512-d9B2J9Cm9dN9+6nxMnnNJKJCtcyKfnHj15N6YNJfaFHRLua/d3sRKU9RuKmO9mB0XdFtUizlxfz/VPbd3OxGhw==}
+ vitest@4.0.15:
+ resolution: {integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==}
engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
'@opentelemetry/api': ^1.9.0
'@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
- '@vitest/browser-playwright': 4.0.14
- '@vitest/browser-preview': 4.0.14
- '@vitest/browser-webdriverio': 4.0.14
- '@vitest/ui': 4.0.14
+ '@vitest/browser-playwright': 4.0.15
+ '@vitest/browser-preview': 4.0.15
+ '@vitest/browser-webdriverio': 4.0.15
+ '@vitest/ui': 4.0.15
happy-dom: '*'
jsdom: '*'
peerDependenciesMeta:
@@ -14231,10 +14232,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@vitest/coverage-v8@4.0.14(vitest@4.0.14)':
+ '@vitest/coverage-v8@4.0.15(vitest@4.0.15)':
dependencies:
'@bcoe/v8-coverage': 1.0.2
- '@vitest/utils': 4.0.14
+ '@vitest/utils': 4.0.15
ast-v8-to-istanbul: 0.3.8
istanbul-lib-coverage: 3.2.2
istanbul-lib-report: 3.0.1
@@ -14244,58 +14245,58 @@ snapshots:
obug: 2.1.1
std-env: 3.10.0
tinyrainbow: 3.0.3
- vitest: 4.0.14(@types/node@24.10.1)(@vitest/ui@4.0.14)(jsdom@27.2.0(postcss@8.5.6))(sass@1.94.2)(sugarss@5.0.0(postcss@8.5.6))(terser@5.44.1)(tsx@4.20.5)(yaml@2.5.1)
+ vitest: 4.0.15(@types/node@24.10.1)(@vitest/ui@4.0.15)(jsdom@27.2.0(postcss@8.5.6))(sass@1.94.2)(sugarss@5.0.0(postcss@8.5.6))(terser@5.44.1)(tsx@4.20.5)(yaml@2.5.1)
transitivePeerDependencies:
- supports-color
- '@vitest/expect@4.0.14':
+ '@vitest/expect@4.0.15':
dependencies:
'@standard-schema/spec': 1.0.0
'@types/chai': 5.2.2
- '@vitest/spy': 4.0.14
- '@vitest/utils': 4.0.14
+ '@vitest/spy': 4.0.15
+ '@vitest/utils': 4.0.15
chai: 6.2.1
tinyrainbow: 3.0.3
- '@vitest/mocker@4.0.14(vite@7.1.12(@types/node@24.10.1)(sass@1.94.2)(sugarss@5.0.0(postcss@8.5.6))(terser@5.44.1)(tsx@4.20.5)(yaml@2.5.1))':
+ '@vitest/mocker@4.0.15(vite@7.1.12(@types/node@24.10.1)(sass@1.94.2)(sugarss@5.0.0(postcss@8.5.6))(terser@5.44.1)(tsx@4.20.5)(yaml@2.5.1))':
dependencies:
- '@vitest/spy': 4.0.14
+ '@vitest/spy': 4.0.15
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
vite: 7.1.12(@types/node@24.10.1)(sass@1.94.2)(sugarss@5.0.0(postcss@8.5.6))(terser@5.44.1)(tsx@4.20.5)(yaml@2.5.1)
- '@vitest/pretty-format@4.0.14':
+ '@vitest/pretty-format@4.0.15':
dependencies:
tinyrainbow: 3.0.3
- '@vitest/runner@4.0.14':
+ '@vitest/runner@4.0.15':
dependencies:
- '@vitest/utils': 4.0.14
+ '@vitest/utils': 4.0.15
pathe: 2.0.3
- '@vitest/snapshot@4.0.14':
+ '@vitest/snapshot@4.0.15':
dependencies:
- '@vitest/pretty-format': 4.0.14
+ '@vitest/pretty-format': 4.0.15
magic-string: 0.30.21
pathe: 2.0.3
- '@vitest/spy@4.0.14': {}
+ '@vitest/spy@4.0.15': {}
- '@vitest/ui@4.0.14(vitest@4.0.14)':
+ '@vitest/ui@4.0.15(vitest@4.0.15)':
dependencies:
- '@vitest/utils': 4.0.14
+ '@vitest/utils': 4.0.15
fflate: 0.8.2
flatted: 3.3.3
pathe: 2.0.3
sirv: 3.0.2
tinyglobby: 0.2.15
tinyrainbow: 3.0.3
- vitest: 4.0.14(@types/node@24.10.1)(@vitest/ui@4.0.14)(jsdom@27.2.0(postcss@8.5.6))(sass@1.94.2)(sugarss@5.0.0(postcss@8.5.6))(terser@5.44.1)(tsx@4.20.5)(yaml@2.5.1)
+ vitest: 4.0.15(@types/node@24.10.1)(@vitest/ui@4.0.15)(jsdom@27.2.0(postcss@8.5.6))(sass@1.94.2)(sugarss@5.0.0(postcss@8.5.6))(terser@5.44.1)(tsx@4.20.5)(yaml@2.5.1)
- '@vitest/utils@4.0.14':
+ '@vitest/utils@4.0.15':
dependencies:
- '@vitest/pretty-format': 4.0.14
+ '@vitest/pretty-format': 4.0.15
tinyrainbow: 3.0.3
'@webassemblyjs/ast@1.14.1':
@@ -20195,7 +20196,7 @@ snapshots:
tinycolor2@1.6.0: {}
- tinyexec@0.3.2: {}
+ tinyexec@1.0.2: {}
tinyglobby@0.2.14:
dependencies:
@@ -20843,15 +20844,15 @@ snapshots:
tsx: 4.20.5
yaml: 2.5.1
- vitest@4.0.14(@types/node@24.10.1)(@vitest/ui@4.0.14)(jsdom@27.2.0(postcss@8.5.6))(sass@1.94.2)(sugarss@5.0.0(postcss@8.5.6))(terser@5.44.1)(tsx@4.20.5)(yaml@2.5.1):
+ vitest@4.0.15(@types/node@24.10.1)(@vitest/ui@4.0.15)(jsdom@27.2.0(postcss@8.5.6))(sass@1.94.2)(sugarss@5.0.0(postcss@8.5.6))(terser@5.44.1)(tsx@4.20.5)(yaml@2.5.1):
dependencies:
- '@vitest/expect': 4.0.14
- '@vitest/mocker': 4.0.14(vite@7.1.12(@types/node@24.10.1)(sass@1.94.2)(sugarss@5.0.0(postcss@8.5.6))(terser@5.44.1)(tsx@4.20.5)(yaml@2.5.1))
- '@vitest/pretty-format': 4.0.14
- '@vitest/runner': 4.0.14
- '@vitest/snapshot': 4.0.14
- '@vitest/spy': 4.0.14
- '@vitest/utils': 4.0.14
+ '@vitest/expect': 4.0.15
+ '@vitest/mocker': 4.0.15(vite@7.1.12(@types/node@24.10.1)(sass@1.94.2)(sugarss@5.0.0(postcss@8.5.6))(terser@5.44.1)(tsx@4.20.5)(yaml@2.5.1))
+ '@vitest/pretty-format': 4.0.15
+ '@vitest/runner': 4.0.15
+ '@vitest/snapshot': 4.0.15
+ '@vitest/spy': 4.0.15
+ '@vitest/utils': 4.0.15
es-module-lexer: 1.7.0
expect-type: 1.2.2
magic-string: 0.30.21
@@ -20860,14 +20861,14 @@ snapshots:
picomatch: 4.0.3
std-env: 3.10.0
tinybench: 2.9.0
- tinyexec: 0.3.2
+ tinyexec: 1.0.2
tinyglobby: 0.2.15
tinyrainbow: 3.0.3
vite: 7.1.12(@types/node@24.10.1)(sass@1.94.2)(sugarss@5.0.0(postcss@8.5.6))(terser@5.44.1)(tsx@4.20.5)(yaml@2.5.1)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 24.10.1
- '@vitest/ui': 4.0.14(vitest@4.0.14)
+ '@vitest/ui': 4.0.15(vitest@4.0.15)
jsdom: 27.2.0(postcss@8.5.6)
transitivePeerDependencies:
- jiti
From 020cbd72d387c9f50f4eddcbc2685829cf7787de Mon Sep 17 00:00:00 2001
From: "homarr-renovate[bot]"
<158783068+homarr-renovate[bot]@users.noreply.github.com>
Date: Mon, 8 Dec 2025 15:50:54 +0100
Subject: [PATCH 09/11] fix(deps): update dependency glob to v13 (#4584)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
---
apps/nextjs/package.json | 2 +-
pnpm-lock.yaml | 22 +++++-----------------
2 files changed, 6 insertions(+), 18 deletions(-)
diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json
index 6778b7be4..7737e7d64 100644
--- a/apps/nextjs/package.json
+++ b/apps/nextjs/package.json
@@ -74,7 +74,7 @@
"dayjs": "^1.11.19",
"dotenv": "^17.2.3",
"flag-icons": "^7.5.0",
- "glob": "^12.0.0",
+ "glob": "^13.0.0",
"isomorphic-dompurify": "^2.33.0",
"jotai": "^2.15.2",
"mantine-react-table": "2.0.0-beta.9",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 3c739134b..50951fd17 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -287,8 +287,8 @@ importers:
specifier: ^7.5.0
version: 7.5.0
glob:
- specifier: ^12.0.0
- version: 12.0.0
+ specifier: ^13.0.0
+ version: 13.0.0
isomorphic-dompurify:
specifier: ^2.33.0
version: 2.33.0(postcss@8.5.6)
@@ -7175,10 +7175,9 @@ packages:
resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
hasBin: true
- glob@12.0.0:
- resolution: {integrity: sha512-5Qcll1z7IKgHr5g485ePDdHcNQY0k2dtv/bjYy0iuyGxQw2qSOiiXUXJ+AYQpg3HNoUMHqAruX478Jeev7UULw==}
+ glob@13.0.0:
+ resolution: {integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==}
engines: {node: 20 || >=22}
- hasBin: true
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
@@ -7817,10 +7816,6 @@ packages:
jackspeak@3.4.3:
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
- jackspeak@4.1.1:
- resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==}
- engines: {node: 20 || >=22}
-
java-properties@1.0.2:
resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==}
engines: {node: '>= 0.6.0'}
@@ -16607,13 +16602,10 @@ snapshots:
package-json-from-dist: 1.0.1
path-scurry: 1.11.1
- glob@12.0.0:
+ glob@13.0.0:
dependencies:
- foreground-child: 3.3.1
- jackspeak: 4.1.1
minimatch: 10.1.1
minipass: 7.1.2
- package-json-from-dist: 1.0.1
path-scurry: 2.0.1
glob@7.2.3:
@@ -17290,10 +17282,6 @@ snapshots:
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
- jackspeak@4.1.1:
- dependencies:
- '@isaacs/cliui': 8.0.2
-
java-properties@1.0.2: {}
jest-worker@27.5.1:
From d88c6027fe3accf7a6872ada8aa2724d30bf691c Mon Sep 17 00:00:00 2001
From: "homarr-renovate[bot]"
<158783068+homarr-renovate[bot]@users.noreply.github.com>
Date: Mon, 8 Dec 2025 16:52:25 +0100
Subject: [PATCH 10/11] fix(deps): update dependency typescript-eslint to
^8.48.1 (#4438)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
Co-authored-by: Meier Lukas
---
.../[locale]/init/_steps/group/init-group.tsx | 9 +-
.../init/_steps/settings/init-settings.tsx | 12 +-
.../init/_steps/user/init-user-form.tsx | 8 +-
.../_components/board-card-menu-dropdown.tsx | 3 -
.../new/_integration-new-form.tsx | 10 +-
.../_components/remove-certificate.tsx | 9 +-
.../hostnames/_components/remove-hostname.tsx | 9 +-
.../manage/tools/docker/docker-table.tsx | 9 +-
.../_components/_profile-avatar-form.tsx | 15 +-
.../groups/[id]/_transfer-group-ownership.tsx | 9 +-
.../manage/users/groups/_groups-table.tsx | 9 +-
.../src/upload-media/upload-media.tsx | 25 +--
.../quick-add-app/quick-add-app-modal.tsx | 7 +-
.../src/boards/duplicate-board-modal.tsx | 12 +-
.../src/boards/import-board-modal.tsx | 9 +-
.../certificates/add-certificate-modal.tsx | 9 +-
.../src/components/initial/token-modal.tsx | 4 +-
.../widgets/src/_inputs/widget-app-input.tsx | 8 +-
packages/widgets/src/docker/component.tsx | 13 +-
pnpm-lock.yaml | 143 +++++++++---------
tooling/eslint/package.json | 2 +-
21 files changed, 180 insertions(+), 154 deletions(-)
diff --git a/apps/nextjs/src/app/[locale]/init/_steps/group/init-group.tsx b/apps/nextjs/src/app/[locale]/init/_steps/group/init-group.tsx
index d423c2fce..0a91d4ced 100644
--- a/apps/nextjs/src/app/[locale]/init/_steps/group/init-group.tsx
+++ b/apps/nextjs/src/app/[locale]/init/_steps/group/init-group.tsx
@@ -12,7 +12,11 @@ import { groupCreateSchema } from "@homarr/validation/group";
export const InitGroup = () => {
const t = useI18n();
- const { mutateAsync } = clientApi.group.createInitialExternalGroup.useMutation();
+ const { mutateAsync } = clientApi.group.createInitialExternalGroup.useMutation({
+ async onSuccess() {
+ await revalidatePathActionAsync("/init");
+ },
+ });
const form = useZodForm(groupCreateSchema, {
initialValues: {
name: "",
@@ -21,9 +25,6 @@ export const InitGroup = () => {
const handleSubmitAsync = async (values: z.infer) => {
await mutateAsync(values, {
- async onSuccess() {
- await revalidatePathActionAsync("/init");
- },
onError(error) {
if (error.data?.code === "CONFLICT") {
form.setErrors({ name: t("common.zod.errors.custom.groupNameTaken") });
diff --git a/apps/nextjs/src/app/[locale]/init/_steps/settings/init-settings.tsx b/apps/nextjs/src/app/[locale]/init/_steps/settings/init-settings.tsx
index b5839b743..08e3e0c2d 100644
--- a/apps/nextjs/src/app/[locale]/init/_steps/settings/init-settings.tsx
+++ b/apps/nextjs/src/app/[locale]/init/_steps/settings/init-settings.tsx
@@ -17,7 +17,11 @@ import { settingsInitSchema } from "@homarr/validation/settings";
export const InitSettings = () => {
const tSection = useScopedI18n("management.page.settings.section");
const t = useI18n();
- const { mutateAsync } = clientApi.serverSettings.initSettings.useMutation();
+ const { mutateAsync } = clientApi.serverSettings.initSettings.useMutation({
+ async onSuccess() {
+ await revalidatePathActionAsync("/init");
+ },
+ });
const form = useZodForm(settingsInitSchema, { initialValues: defaultServerSettings });
form.watch("analytics.enableGeneral", ({ value }) => {
@@ -31,11 +35,7 @@ export const InitSettings = () => {
});
const handleSubmitAsync = async (values: z.infer) => {
- await mutateAsync(values, {
- async onSuccess() {
- await revalidatePathActionAsync("/init");
- },
- });
+ await mutateAsync(values);
};
return (
diff --git a/apps/nextjs/src/app/[locale]/init/_steps/user/init-user-form.tsx b/apps/nextjs/src/app/[locale]/init/_steps/user/init-user-form.tsx
index daf73f7b3..3a659032f 100644
--- a/apps/nextjs/src/app/[locale]/init/_steps/user/init-user-form.tsx
+++ b/apps/nextjs/src/app/[locale]/init/_steps/user/init-user-form.tsx
@@ -26,19 +26,19 @@ export const InitUserForm = () => {
const handleSubmitAsync = async (values: FormType) => {
await mutateAsync(values, {
- async onSuccess() {
+ onSuccess() {
showSuccessNotification({
title: tUser("notification.success.title"),
message: tUser("notification.success.message"),
});
- await signIn("credentials", {
+ void signIn("credentials", {
name: values.username,
password: values.password,
redirect: false,
+ }).then(async () => {
+ await revalidatePathActionAsync("/init");
});
-
- await revalidatePathActionAsync("/init");
},
onError: (error) => {
showErrorNotification({
diff --git a/apps/nextjs/src/app/[locale]/manage/boards/_components/board-card-menu-dropdown.tsx b/apps/nextjs/src/app/[locale]/manage/boards/_components/board-card-menu-dropdown.tsx
index 4c918f9ef..e5ae194af 100644
--- a/apps/nextjs/src/app/[locale]/manage/boards/_components/board-card-menu-dropdown.tsx
+++ b/apps/nextjs/src/app/[locale]/manage/boards/_components/board-card-menu-dropdown.tsx
@@ -84,9 +84,6 @@ export const BoardCardMenuDropdown = ({ board }: BoardCardMenuDropdownProps) =>
id: board.id,
name: board.name,
},
- onSuccess: async () => {
- await revalidatePathActionAsync("/manage/boards");
- },
});
}, [board.id, board.name, openDuplicateModal]);
diff --git a/apps/nextjs/src/app/[locale]/manage/integrations/new/_integration-new-form.tsx b/apps/nextjs/src/app/[locale]/manage/integrations/new/_integration-new-form.tsx
index 1152174a4..016b9336c 100644
--- a/apps/nextjs/src/app/[locale]/manage/integrations/new/_integration-new-form.tsx
+++ b/apps/nextjs/src/app/[locale]/manage/integrations/new/_integration-new-form.tsx
@@ -86,7 +86,11 @@ export const NewIntegrationForm = ({ searchParams }: NewIntegrationFormProps) =>
},
});
- const { mutateAsync: createIntegrationAsync, isPending } = clientApi.integration.create.useMutation();
+ const { mutateAsync: createIntegrationAsync, isPending } = clientApi.integration.create.useMutation({
+ async onSuccess() {
+ await revalidatePathActionAsync("/manage/integrations");
+ },
+ });
const [error, setError] = useState(null);
const handleSubmitAsync = async ({ appId, appHref, hasApp, ...values }: FormType) => {
@@ -116,7 +120,7 @@ export const NewIntegrationForm = ({ searchParams }: NewIntegrationFormProps) =>
app,
},
{
- async onSuccess(data) {
+ onSuccess(data) {
// We do it this way as we are unable to send a typesafe error through onError
if (data?.error) {
setError(data.error);
@@ -132,7 +136,7 @@ export const NewIntegrationForm = ({ searchParams }: NewIntegrationFormProps) =>
message: t("integration.page.create.notification.success.message"),
});
- await revalidatePathActionAsync("/manage/integrations").then(() => router.push("/manage/integrations"));
+ router.push("/manage/integrations");
},
onError: () => {
showErrorNotification({
diff --git a/apps/nextjs/src/app/[locale]/manage/tools/certificates/_components/remove-certificate.tsx b/apps/nextjs/src/app/[locale]/manage/tools/certificates/_components/remove-certificate.tsx
index 04e1c7613..ca45aefb3 100644
--- a/apps/nextjs/src/app/[locale]/manage/tools/certificates/_components/remove-certificate.tsx
+++ b/apps/nextjs/src/app/[locale]/manage/tools/certificates/_components/remove-certificate.tsx
@@ -15,7 +15,11 @@ interface RemoveCertificateProps {
export const RemoveCertificate = ({ fileName }: RemoveCertificateProps) => {
const { openConfirmModal } = useConfirmModal();
- const { mutateAsync } = clientApi.certificates.removeCertificate.useMutation();
+ const { mutateAsync } = clientApi.certificates.removeCertificate.useMutation({
+ async onSuccess() {
+ await revalidatePathActionAsync("/manage/tools/certificates");
+ },
+ });
const t = useI18n();
const handleClick = () => {
@@ -27,12 +31,11 @@ export const RemoveCertificate = ({ fileName }: RemoveCertificateProps) => {
await mutateAsync(
{ fileName },
{
- async onSuccess() {
+ onSuccess() {
showSuccessNotification({
title: t("certificate.action.remove.notification.success.title"),
message: t("certificate.action.remove.notification.success.message"),
});
- await revalidatePathActionAsync("/manage/tools/certificates");
},
onError() {
showErrorNotification({
diff --git a/apps/nextjs/src/app/[locale]/manage/tools/certificates/hostnames/_components/remove-hostname.tsx b/apps/nextjs/src/app/[locale]/manage/tools/certificates/hostnames/_components/remove-hostname.tsx
index d0004c849..445a301b2 100644
--- a/apps/nextjs/src/app/[locale]/manage/tools/certificates/hostnames/_components/remove-hostname.tsx
+++ b/apps/nextjs/src/app/[locale]/manage/tools/certificates/hostnames/_components/remove-hostname.tsx
@@ -15,7 +15,11 @@ interface RemoveHostnameActionIconProps {
}
export const RemoveHostnameActionIcon = (input: RemoveHostnameActionIconProps) => {
- const { mutateAsync } = clientApi.certificates.removeTrustedHostname.useMutation();
+ const { mutateAsync } = clientApi.certificates.removeTrustedHostname.useMutation({
+ async onSuccess() {
+ await revalidatePathActionAsync("/manage/tools/certificates/hostnames");
+ },
+ });
const { openConfirmModal } = useConfirmModal();
const t = useI18n();
@@ -26,8 +30,7 @@ export const RemoveHostnameActionIcon = (input: RemoveHostnameActionIconProps) =
// eslint-disable-next-line no-restricted-syntax
async onConfirm() {
await mutateAsync(input, {
- async onSuccess() {
- await revalidatePathActionAsync("/manage/tools/certificates/hostnames");
+ onSuccess() {
showSuccessNotification({
title: t("certificate.action.removeHostname.notification.success.title"),
message: t("certificate.action.removeHostname.notification.success.message"),
diff --git a/apps/nextjs/src/app/[locale]/manage/tools/docker/docker-table.tsx b/apps/nextjs/src/app/[locale]/manage/tools/docker/docker-table.tsx
index 0db5d2116..ce087bf7d 100644
--- a/apps/nextjs/src/app/[locale]/manage/tools/docker/docker-table.tsx
+++ b/apps/nextjs/src/app/[locale]/manage/tools/docker/docker-table.tsx
@@ -206,15 +206,16 @@ const ContainerActionBarButton = (props: ContainerActionBarButtonProps) => {
const t = useScopedI18n("docker.action");
const utils = clientApi.useUtils();
- const { mutateAsync, isPending } = clientApi.docker[`${props.action}All`].useMutation();
+ const { mutateAsync, isPending } = clientApi.docker[`${props.action}All`].useMutation({
+ async onSettled() {
+ await utils.docker.getContainers.invalidate();
+ },
+ });
const handleClickAsync = async () => {
await mutateAsync(
{ ids: props.selectedIds },
{
- async onSettled() {
- await utils.docker.getContainers.invalidate();
- },
onSuccess() {
showSuccessNotification({
title: t(`${props.action}.notification.success.title`),
diff --git a/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/_components/_profile-avatar-form.tsx b/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/_components/_profile-avatar-form.tsx
index 485bffdf5..e4ee64583 100644
--- a/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/_components/_profile-avatar-form.tsx
+++ b/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/_components/_profile-avatar-form.tsx
@@ -18,7 +18,12 @@ interface UserProfileAvatarForm {
}
export const UserProfileAvatarForm = ({ user }: UserProfileAvatarForm) => {
- const { mutate } = clientApi.user.setProfileImage.useMutation();
+ const { mutate } = clientApi.user.setProfileImage.useMutation({
+ async onSuccess() {
+ // Revalidate all as the avatar is used in multiple places
+ await revalidatePathActionAsync("/");
+ },
+ });
const [opened, { toggle }] = useDisclosure(false);
const { openConfirmModal } = useConfirmModal();
const t = useI18n();
@@ -38,9 +43,7 @@ export const UserProfileAvatarForm = ({ user }: UserProfileAvatarForm) => {
image: base64Url,
},
{
- async onSuccess() {
- // Revalidate all as the avatar is used in multiple places
- await revalidatePathActionAsync("/");
+ onSuccess() {
showSuccessNotification({
message: tManageAvatar("changeImage.notification.success.message"),
});
@@ -74,9 +77,7 @@ export const UserProfileAvatarForm = ({ user }: UserProfileAvatarForm) => {
image: null,
},
{
- async onSuccess() {
- // Revalidate all as the avatar is used in multiple places
- await revalidatePathActionAsync("/");
+ onSuccess() {
showSuccessNotification({
message: tManageAvatar("removeImage.notification.success.message"),
});
diff --git a/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/_transfer-group-ownership.tsx b/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/_transfer-group-ownership.tsx
index 9074c9ecf..a9fd0bd4f 100644
--- a/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/_transfer-group-ownership.tsx
+++ b/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/_transfer-group-ownership.tsx
@@ -25,7 +25,11 @@ export const TransferGroupOwnership = ({ group }: TransferGroupOwnershipProps) =
const [innerOwnerId, setInnerOwnerId] = useState(group.ownerId);
const { openModal } = useModalAction(UserSelectModal);
const { openConfirmModal } = useConfirmModal();
- const { mutateAsync } = clientApi.group.transferOwnership.useMutation();
+ const { mutateAsync } = clientApi.group.transferOwnership.useMutation({
+ async onSuccess() {
+ await revalidatePathActionAsync(`/manage/users/groups/${group.id}`);
+ },
+ });
const handleTransfer = useCallback(() => {
openModal(
@@ -47,7 +51,7 @@ export const TransferGroupOwnership = ({ group }: TransferGroupOwnershipProps) =
userId: id,
},
{
- async onSuccess() {
+ onSuccess() {
setInnerOwnerId(id);
showSuccessNotification({
title: tRoot("common.notification.transfer.success"),
@@ -56,7 +60,6 @@ export const TransferGroupOwnership = ({ group }: TransferGroupOwnershipProps) =
user: name,
}),
});
- await revalidatePathActionAsync(`/manage/users/groups/${group.id}`);
},
onError() {
showErrorNotification({
diff --git a/apps/nextjs/src/app/[locale]/manage/users/groups/_groups-table.tsx b/apps/nextjs/src/app/[locale]/manage/users/groups/_groups-table.tsx
index 2dcfb21a2..c03c8cddc 100644
--- a/apps/nextjs/src/app/[locale]/manage/users/groups/_groups-table.tsx
+++ b/apps/nextjs/src/app/[locale]/manage/users/groups/_groups-table.tsx
@@ -56,16 +56,19 @@ export const GroupsTable = ({ groups, initialGroupIds, hasFilter }: GroupsTableP
() => initialGroupIds.some((groupId, index) => groupIds.indexOf(groupId) !== index),
[groupIds, initialGroupIds],
);
- const { mutateAsync, isPending } = clientApi.group.savePositions.useMutation();
+ const { mutateAsync, isPending } = clientApi.group.savePositions.useMutation({
+ async onSuccess() {
+ await revalidatePathActionAsync("/manage/users/groups");
+ },
+ });
const handleSavePositionsAsync = async () => {
await mutateAsync(
{ positions: groupIds },
{
- async onSuccess() {
+ onSuccess() {
showSuccessNotification({
message: t("group.action.changePosition.notification.success.message"),
});
- await revalidatePathActionAsync("/manage/users/groups");
},
onError() {
showSuccessNotification({
diff --git a/packages/forms-collection/src/upload-media/upload-media.tsx b/packages/forms-collection/src/upload-media/upload-media.tsx
index 1a0779259..9da7a52d1 100644
--- a/packages/forms-collection/src/upload-media/upload-media.tsx
+++ b/packages/forms-collection/src/upload-media/upload-media.tsx
@@ -16,7 +16,19 @@ interface UploadMediaProps {
export const UploadMedia = ({ children, onSettled, onSuccess, multiple = false }: UploadMediaProps) => {
const t = useI18n();
- const { mutateAsync, isPending } = clientApi.media.uploadMedia.useMutation();
+ const { mutateAsync, isPending } = clientApi.media.uploadMedia.useMutation({
+ async onSuccess(mediaIds) {
+ await onSuccess?.(
+ mediaIds.map((id) => ({
+ id,
+ url: `/api/user-medias/${id}`,
+ })),
+ );
+ },
+ async onSettled() {
+ await onSettled?.();
+ },
+ });
const handleFileUploadAsync = async (files: File[] | File | null) => {
if (!files || (Array.isArray(files) && files.length === 0)) return;
@@ -24,25 +36,16 @@ export const UploadMedia = ({ children, onSettled, onSuccess, multiple = false }
const formData = new FormData();
filesArray.forEach((file) => formData.append("files", file));
await mutateAsync(formData, {
- async onSuccess(mediaIds) {
+ onSuccess() {
showSuccessNotification({
message: t("media.action.upload.notification.success.message"),
});
- await onSuccess?.(
- mediaIds.map((id) => ({
- id,
- url: `/api/user-medias/${id}`,
- })),
- );
},
onError() {
showErrorNotification({
message: t("media.action.upload.notification.error.message"),
});
},
- async onSettled() {
- await onSettled?.();
- },
});
};
diff --git a/packages/modals-collection/src/apps/quick-add-app/quick-add-app-modal.tsx b/packages/modals-collection/src/apps/quick-add-app/quick-add-app-modal.tsx
index 500e8540b..617bf6403 100644
--- a/packages/modals-collection/src/apps/quick-add-app/quick-add-app-modal.tsx
+++ b/packages/modals-collection/src/apps/quick-add-app/quick-add-app-modal.tsx
@@ -2,7 +2,6 @@ import type { z } from "zod/v4";
import type { RouterOutputs } from "@homarr/api";
import { clientApi } from "@homarr/api/client";
-import type { MaybePromise } from "@homarr/common/types";
import { AppForm } from "@homarr/forms-collection";
import { createModal } from "@homarr/modals";
import { showErrorNotification, showSuccessNotification } from "@homarr/notifications";
@@ -10,7 +9,7 @@ import { useI18n, useScopedI18n } from "@homarr/translation/client";
import type { appManageSchema } from "@homarr/validation/app";
interface QuickAddAppModalProps {
- onClose: (createdApp: Omit) => MaybePromise;
+ onClose: (createdApp: Omit) => void;
}
export const QuickAddAppModal = createModal(({ actions, innerProps }) => {
@@ -28,13 +27,13 @@ export const QuickAddAppModal = createModal(({ actions, i
const handleSubmit = (values: z.infer) => {
mutate(values, {
- async onSuccess(app) {
+ onSuccess(app) {
showSuccessNotification({
title: tScoped("success.title"),
message: tScoped("success.message"),
});
- await innerProps.onClose(app);
+ innerProps.onClose(app);
actions.closeModal();
},
});
diff --git a/packages/modals-collection/src/boards/duplicate-board-modal.tsx b/packages/modals-collection/src/boards/duplicate-board-modal.tsx
index 441e16edf..85cfaed17 100644
--- a/packages/modals-collection/src/boards/duplicate-board-modal.tsx
+++ b/packages/modals-collection/src/boards/duplicate-board-modal.tsx
@@ -1,7 +1,7 @@
import { Button, Group, Stack, Text, TextInput } from "@mantine/core";
import { clientApi } from "@homarr/api/client";
-import type { MaybePromise } from "@homarr/common/types";
+import { revalidatePathActionAsync } from "@homarr/common/client";
import { useZodForm } from "@homarr/form";
import { showErrorNotification, showSuccessNotification } from "@homarr/notifications";
import { useI18n } from "@homarr/translation/client";
@@ -15,7 +15,6 @@ interface InnerProps {
id: string;
name: string;
};
- onSuccess: () => MaybePromise;
}
export const DuplicateBoardModal = createModal(({ actions, innerProps }) => {
@@ -27,7 +26,11 @@ export const DuplicateBoardModal = createModal(({ actions, innerProp
},
});
const boardNameStatus = useBoardNameStatus(form.values.name);
- const { mutateAsync, isPending } = clientApi.board.duplicateBoard.useMutation();
+ const { mutateAsync, isPending } = clientApi.board.duplicateBoard.useMutation({
+ async onSuccess() {
+ await revalidatePathActionAsync("/manage/boards");
+ },
+ });
return (