Compare commits

...
Author SHA1 Message Date
Manuel 5501757bd5 Merge remote-tracking branch 'origin/renovate/node-ical-0-x' into renovate/node-ical-0-x 2026-03-31 22:22:57 +02:00
homarr-renovate[bot] beb2572cad fix(deps): update dependency node-ical to ^0.25.6 2026-03-31 19:56:46 +00:00
homarr-renovate[bot] 2dd3c906c4 fix(deps): update dependency @immich/sdk to ^2.6.3 (#5380)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-31 19:30:29 +00:00
homarr-renovate[bot] fd79fb2b3a fix(deps): update dependency node-ical to ^0.25.6 2026-03-31 18:04:25 +00:00
Meier Lukas 6a200c39af fix(boards): unable to click on links at settings page (#5230) 2026-03-31 19:08:02 +02:00
homarr-renovate[bot] e88e3d17c0 fix(deps): update dependency @ctrl/deluge to v8 (#5367)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-31 18:52:38 +02:00
homarr-renovate[bot]andMeier Lukas 46db8b6ab3 fix(deps): update dependency better-sqlite3 to ^12.8.0 (#5266)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com>
2026-03-31 18:43:59 +02:00
homarr-renovate[bot] 545dba0c8f chore(deps): update dependency vite@&gt;&#x3d;5.0.0 &lt;&#x3d;5.4.18 to >=8.0.3 (#5377)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-31 16:07:34 +00:00
homarr-renovate[bot] cbb85159d6 chore(deps): update vitest monorepo to ^4.1.2 (#5378)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-31 16:06:32 +00:00
homarr-renovate[bot] ff07658212 chore(deps): update node.js (#5364)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-31 11:57:00 +00:00
homarr-renovate[bot] a9582f04ed fix(deps): update dependency zod to ^4.3.6 (#5376)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-30 21:50:50 +00:00
homarr-renovate[bot]andMeier Lukas 2b4c83dcca fix(deps): update dependency zod to ^4.3.5 - abandoned (#4803)
* fix(deps): update dependency zod to ^4.3.5

* fix: omit can not be used with refine

* fix: convert intersection to object due to trpc-openapi issue

* fix: remove omit after refine

---------

Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com>
2026-03-30 23:11:14 +02:00
homarr-renovate[bot] 336c55b3e9 chore(deps): update docker/setup-buildx-action action to v4 (#5200)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-30 22:58:47 +02:00
homarr-renovate[bot] eb5dd3628a chore(deps): update docker/metadata-action action to v6 (#5207)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-30 22:58:37 +02:00
homarr-renovate[bot] c19766e53f chore(deps): update docker/build-push-action action to v7 (#5208)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-30 22:58:28 +02:00
homarr-renovate[bot] cc153fff10 chore(deps): update dependency jsdom to v29 (#5274)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-30 22:53:20 +02:00
homarr-renovate[bot] b71718be09 chore(deps): update dependency proxmox-api&gt;undici to v7.24.6 (#5373)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-30 20:52:12 +00:00
homarr-renovate[bot]andMeier Lukas b07c545f17 fix(deps): update dependency node-ical to ^0.23.1 - abandoned (#4856)
* fix(deps): update dependency node-ical to ^0.23.1

* fix: date from node-ical represents utc value

---------

Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com>
2026-03-30 22:43:58 +02:00
homarr-renovate[bot] 4aff9819e5 chore(deps): update actions/create-github-app-token action to v3 (#5267)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-30 22:24:09 +02:00
homarr-renovate[bot] 9e0c3c0117 chore(deps): update pnpm to v10.33.0 (#5372)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-30 22:23:46 +02:00
homarr-crowdin[bot] 107ec7737a chore(lang): update translations from crowdin (#5350)
Co-authored-by: Crowdin Homarr <190541745+homarr-crowdin[bot]@users.noreply.github.com>
2026-03-30 22:23:03 +02:00
homarr-renovate[bot] d4177afc18 chore(deps): update pnpm/action-setup action to v5 (#5294)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-30 22:22:44 +02:00
Sascha BuehrleandMeier Lukas 7679553f16 fix: honor trusted certificates in Immich integration requests (#5275)
* fix: use trusted-cert fetch for immich sdk requests (fixes #5242)

* fix: use testing fetch for Immich connection check

* fix: typecheck issues

---------

Co-authored-by: Meier Lukas <meierschlumpf@gmail.com>
2026-03-30 22:21:11 +02:00
homarr-renovate[bot] 4f2cc9af2a fix(deps): update dependency undici to v7.24.6 (#5374)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-30 17:06:11 +00:00
homarr-renovate[bot] 6820f8afea fix(deps): update tiptap monorepo to v3.20.5 (#5371)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-29 16:43:28 +00:00
homarr-renovate[bot] 4a5bafa790 fix(deps): update dependency @immich/sdk to ^2.6.2 (#5370)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-29 14:44:39 +00:00
homarr-renovate[bot] 8d1ff4065d fix(deps): update dependency isomorphic-dompurify to ^3.7.1 (#5369)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-29 10:41:25 +00:00
homarr-renovate[bot] 14d87178b5 fix(deps): update dependency jotai to ^2.19.0 (#5368)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-29 09:45:23 +00:00
homarr-renovate[bot] c2b54ddfaa fix(deps): update dependency isomorphic-dompurify to ^3.7.0 (#5366)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-29 09:40:05 +00:00
homarr-renovate[bot] cefbf0e271 fix(deps): update dependency typescript-eslint to ^8.57.2 (#5360)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-29 07:13:39 +00:00
homarr-renovate[bot] 189806b5a2 fix(deps): update dependency fast-xml-parser to ^5.5.9 (#5359)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-29 07:12:11 +00:00
homarr-renovate[bot] 9c134c5ceb fix(deps): update dependency @ctrl/deluge to ^7.5.3 (#5365)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-29 05:17:45 +00:00
homarr-renovate[bot] 682099189b fix(deps): update tanstack-query monorepo to ^5.95.2 (#5357)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-28 16:41:43 +00:00
homarr-renovate[bot] 32218beb7e chore(deps): update vitest monorepo to ^4.1.1 (#5356)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-28 15:40:16 +00:00
homarr-renovate[bot] 332b6b4f42 fix(deps): update tanstack-query monorepo to ^5.95.1 (#5355)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-28 14:39:28 +00:00
homarr-renovate[bot] aca893254c chore(deps): update dependency brace-expansion@&gt;&#x3d;2.0.0 &lt;&#x3d;2.0.1 to >=5.0.5 [security] (#5341)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-28 14:34:27 +00:00
homarr-renovate[bot] 2fb2981d2f fix(deps): update trpc monorepo to ^11.15.0 (#5354)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-28 13:06:24 +00:00
homarr-renovate[bot] 5d84888a33 chore(deps): update dependency vite@&gt;&#x3d;5.0.0 &lt;&#x3d;5.4.18 to >=8.0.2 (#5353)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-28 13:04:53 +00:00
homarr-renovate[bot] 728f7e489a fix(deps): update dependency fastify to ^5.8.4 (#5351)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-28 13:04:35 +00:00
homarr-renovate[bot] 0e3ac069d9 chore(deps): update dependency hono@&lt;4.6.5 to >=4.12.9 (#5352)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-28 11:35:24 +00:00
homarr-renovate[bot] 505a6b3a89 chore(deps): update dependency brace-expansion@&gt;&#x3d;1.0.0 &lt;&#x3d;1.1.11 to >=5.0.5 [security] (#5340)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-27 23:35:56 +00:00
homarr-releases[bot] 7c8adab061 chore: update bug report template (#5349)
Co-authored-by: Releases Homarr <175486441+homarr-releases[bot]@users.noreply.github.com>
2026-03-27 23:06:11 +01:00
homarr-renovate[bot] b11bf367d0 fix(deps): update tanstack-query monorepo to ^5.95.0 (#5325)
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-27 21:43:25 +00:00
Releases Homarr 15c2037230 chore(release): 1.57.1 [skip ci] 2026-03-27 21:34:11 +00:00
homarr-releases[bot] 3735c998e4 chore(release): automatic release v1.57.1 2026-03-27 21:32:58 +00:00
Manuel 192a43a031 fix: dashdot gpu (#5347) 2026-03-27 22:32:13 +01:00
homarr-releases[bot] e9c908b317 chore: update bug report template (#5346)
Co-authored-by: Releases Homarr <175486441+homarr-releases[bot]@users.noreply.github.com>
2026-03-27 21:45:48 +01:00
78 changed files with 1284 additions and 1111 deletions

No files matched your search

+2
View File
@@ -33,6 +33,8 @@ body:
options: options:
# The below comment is used to insert a new version with on-release.yml # The below comment is used to insert a new version with on-release.yml
#NEXT_VERSION# #NEXT_VERSION#
- 1.57.1
- 1.57.0
- 1.56.1 - 1.56.1
- 1.56.0 - 1.56.0
- 1.55.0 - 1.55.0
+2 -2
View File
@@ -15,11 +15,11 @@ runs:
with: with:
persist-credentials: false persist-credentials: false
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3 uses: docker/setup-buildx-action@v4
- name: Build docker image for ${{ inputs.architecture }} - name: Build docker image for ${{ inputs.architecture }}
id: build id: build
uses: docker/build-push-action@v6 uses: docker/build-push-action@v7
with: with:
push: false push: false
load: true load: true
+1 -1
View File
@@ -15,7 +15,7 @@ jobs:
uses: actions/checkout@v6 uses: actions/checkout@v6
- name: Obtain token - name: Obtain token
id: obtainToken id: obtainToken
uses: actions/create-github-app-token@v2 uses: actions/create-github-app-token@v3
with: with:
private-key: ${{ secrets.RENOVATE_APPROVE_PRIVATE_KEY }} private-key: ${{ secrets.RENOVATE_APPROVE_PRIVATE_KEY }}
app-id: ${{ secrets.RENOVATE_APPROVE_APP_ID }} app-id: ${{ secrets.RENOVATE_APPROVE_APP_ID }}
+1 -1
View File
@@ -89,7 +89,7 @@ jobs:
uses: ./tooling/github/setup uses: ./tooling/github/setup
- name: Build docker image - name: Build docker image
id: build-docker-image id: build-docker-image
uses: docker/build-push-action@v6 uses: docker/build-push-action@v7
with: with:
platforms: linux/amd64 platforms: linux/amd64
context: . context: .
@@ -19,7 +19,7 @@ jobs:
- name: Obtain token - name: Obtain token
id: obtainToken id: obtainToken
uses: actions/create-github-app-token@v2 uses: actions/create-github-app-token@v3
with: with:
private-key: ${{ secrets.CROWDIN_APP_PRIVATE_KEY }} private-key: ${{ secrets.CROWDIN_APP_PRIVATE_KEY }}
app-id: ${{ secrets.CROWDIN_APP_ID }} app-id: ${{ secrets.CROWDIN_APP_ID }}
+10 -10
View File
@@ -50,7 +50,7 @@ jobs:
- name: Obtain token - name: Obtain token
if: env.SKIP_RELEASE == 'false' if: env.SKIP_RELEASE == 'false'
id: obtainToken id: obtainToken
uses: actions/create-github-app-token@v2 uses: actions/create-github-app-token@v3
with: with:
private-key: ${{ secrets.RENOVATE_MERGE_PRIVATE_KEY }} private-key: ${{ secrets.RENOVATE_MERGE_PRIVATE_KEY }}
app-id: ${{ secrets.RENOVATE_MERGE_APP_ID }} app-id: ${{ secrets.RENOVATE_MERGE_APP_ID }}
@@ -60,12 +60,12 @@ jobs:
if: env.SKIP_RELEASE == 'false' if: env.SKIP_RELEASE == 'false'
with: with:
persist-credentials: false persist-credentials: false
- uses: pnpm/action-setup@v4 - uses: pnpm/action-setup@v5
if: env.SKIP_RELEASE == 'false' if: env.SKIP_RELEASE == 'false'
- uses: actions/setup-node@v6 - uses: actions/setup-node@v6
if: env.SKIP_RELEASE == 'false' if: env.SKIP_RELEASE == 'false'
with: with:
node-version: 24.14.0 node-version: 24.14.1
cache: "pnpm" cache: "pnpm"
- run: npm i -g pnpm - run: npm i -g pnpm
if: env.SKIP_RELEASE == 'false' if: env.SKIP_RELEASE == 'false'
@@ -123,7 +123,7 @@ jobs:
- name: Docker meta - name: Docker meta
id: meta id: meta
uses: docker/metadata-action@v5 uses: docker/metadata-action@v6
with: with:
images: "${{ env.GHCR_REPO }}" images: "${{ env.GHCR_REPO }}"
@@ -135,11 +135,11 @@ jobs:
password: ${{ secrets.GITHUB_TOKEN }} password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3 uses: docker/setup-buildx-action@v4
- name: Build and push by digest - name: Build and push by digest
id: build id: build
uses: docker/build-push-action@v6 uses: docker/build-push-action@v7
with: with:
context: . context: .
network: host network: host
@@ -162,7 +162,7 @@ jobs:
- name: Docker meta - name: Docker meta
id: meta id: meta
uses: docker/metadata-action@v5 uses: docker/metadata-action@v6
with: with:
images: "${{ env.GHCR_REPO }}" images: "${{ env.GHCR_REPO }}"
@@ -174,11 +174,11 @@ jobs:
password: ${{ secrets.GITHUB_TOKEN }} password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3 uses: docker/setup-buildx-action@v4
- name: Build and push by digest - name: Build and push by digest
id: build id: build
uses: docker/build-push-action@v6 uses: docker/build-push-action@v7
with: with:
context: . context: .
network: host network: host
@@ -231,7 +231,7 @@ jobs:
- name: Obtain token - name: Obtain token
if: needs.release.outputs.skipped == 'false' if: needs.release.outputs.skipped == 'false'
id: obtainToken id: obtainToken
uses: actions/create-github-app-token@v2 uses: actions/create-github-app-token@v3
with: with:
private-key: ${{ secrets.RENOVATE_MERGE_PRIVATE_KEY }} private-key: ${{ secrets.RENOVATE_MERGE_PRIVATE_KEY }}
app-id: ${{ secrets.RENOVATE_MERGE_APP_ID }} app-id: ${{ secrets.RENOVATE_MERGE_APP_ID }}
@@ -50,7 +50,7 @@ jobs:
args: "Created a release PR ${{ steps.create-pull-request.outputs.url }} for version ${{ steps.semver.outputs.next }} (new behaviour: ${{ steps.semver.outputs.bump }})" args: "Created a release PR ${{ steps.create-pull-request.outputs.url }} for version ${{ steps.semver.outputs.next }} (new behaviour: ${{ steps.semver.outputs.bump }})"
- name: Obtain token - name: Obtain token
id: obtainApprovalToken id: obtainApprovalToken
uses: actions/create-github-app-token@v2 uses: actions/create-github-app-token@v3
with: with:
private-key: ${{ secrets.RENOVATE_APPROVE_PRIVATE_KEY }} private-key: ${{ secrets.RENOVATE_APPROVE_PRIVATE_KEY }}
app-id: ${{ secrets.RENOVATE_APPROVE_APP_ID }} app-id: ${{ secrets.RENOVATE_APPROVE_APP_ID }}
@@ -62,7 +62,7 @@ jobs:
gh pr review --approve --body "Automatically approved by GitHub Action" gh pr review --approve --body "Automatically approved by GitHub Action"
- name: Obtain token - name: Obtain token
id: obtainMergeToken id: obtainMergeToken
uses: actions/create-github-app-token@v2 uses: actions/create-github-app-token@v3
with: with:
private-key: ${{ secrets.RENOVATE_MERGE_PRIVATE_KEY }} private-key: ${{ secrets.RENOVATE_MERGE_PRIVATE_KEY }}
app-id: ${{ secrets.RENOVATE_MERGE_APP_ID }} app-id: ${{ secrets.RENOVATE_MERGE_APP_ID }}
+2 -2
View File
@@ -12,7 +12,7 @@ jobs:
steps: steps:
- name: Obtain token - name: Obtain token
id: obtainToken id: obtainToken
uses: actions/create-github-app-token@v2 uses: actions/create-github-app-token@v3
with: with:
private-key: ${{ secrets.HOMARR_DOCS_RELEASE_APP_PRIVATE_KEY }} private-key: ${{ secrets.HOMARR_DOCS_RELEASE_APP_PRIVATE_KEY }}
app-id: ${{ vars.HOMARR_DOCS_RELEASE_APP_ID }} app-id: ${{ vars.HOMARR_DOCS_RELEASE_APP_ID }}
@@ -45,7 +45,7 @@ jobs:
steps: steps:
- name: Obtain token - name: Obtain token
id: obtainToken id: obtainToken
uses: actions/create-github-app-token@v2 uses: actions/create-github-app-token@v3
with: with:
private-key: ${{ secrets.RENOVATE_MERGE_PRIVATE_KEY }} private-key: ${{ secrets.RENOVATE_MERGE_PRIVATE_KEY }}
app-id: ${{ secrets.RENOVATE_MERGE_APP_ID }} app-id: ${{ secrets.RENOVATE_MERGE_APP_ID }}
+2 -2
View File
@@ -21,7 +21,7 @@ jobs:
steps: steps:
- name: Obtain token - name: Obtain token
id: obtainToken id: obtainToken
uses: actions/create-github-app-token@v2 uses: actions/create-github-app-token@v3
with: with:
private-key: ${{ secrets.HOMARR_UPDATE_CONTRIBUTORS_PRIVATE_KEY }} private-key: ${{ secrets.HOMARR_UPDATE_CONTRIBUTORS_PRIVATE_KEY }}
app-id: ${{ vars.HOMARR_UPDATE_CONTRIBUTORS_APP_ID }} app-id: ${{ vars.HOMARR_UPDATE_CONTRIBUTORS_APP_ID }}
@@ -33,7 +33,7 @@ jobs:
env: env:
GITHUB_TOKEN: ${{ steps.obtainToken.outputs.token }} GITHUB_TOKEN: ${{ steps.obtainToken.outputs.token }}
- uses: pnpm/action-setup@v4 - uses: pnpm/action-setup@v5
- name: Use Node.js ${{ matrix.node-version }} - name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
@@ -21,7 +21,7 @@ jobs:
steps: steps:
- name: Obtain token - name: Obtain token
id: obtainToken id: obtainToken
uses: actions/create-github-app-token@v2 uses: actions/create-github-app-token@v3
with: with:
private-key: ${{ secrets.HOMARR_UPDATE_CONTRIBUTORS_PRIVATE_KEY }} private-key: ${{ secrets.HOMARR_UPDATE_CONTRIBUTORS_PRIVATE_KEY }}
app-id: ${{ vars.HOMARR_UPDATE_CONTRIBUTORS_APP_ID }} app-id: ${{ vars.HOMARR_UPDATE_CONTRIBUTORS_APP_ID }}
+1 -1
View File
@@ -1 +1 @@
24.14.0 24.14.1
+9
View File
@@ -1,3 +1,12 @@
## [1.57.1](https://github.com/homarr-labs/homarr/compare/v1.57.0...v1.57.1) (2026-03-27)
### Bug Fixes
* dashdot gpu ([#5347](https://github.com/homarr-labs/homarr/issues/5347)) ([192a43a](https://github.com/homarr-labs/homarr/commit/192a43a031eb9431da2c11395eda69a6c7236b9b))
* **deps:** update dependency @t3-oss/env-nextjs to ^0.13.11 ([#5345](https://github.com/homarr-labs/homarr/issues/5345)) ([49d9394](https://github.com/homarr-labs/homarr/commit/49d9394cd78b2a1146c8dc00dd982215a2f9a580))
* **deps:** update dependency dockerode to ^4.0.10 ([#5327](https://github.com/homarr-labs/homarr/issues/5327)) ([42a3791](https://github.com/homarr-labs/homarr/commit/42a3791e6b5664a0f28d3ee4d29d5257ef3765f6))
* **deps:** update dependency fast-xml-parser to ^5.5.8 ([#5324](https://github.com/homarr-labs/homarr/issues/5324)) ([7982938](https://github.com/homarr-labs/homarr/commit/798293813cf82e38d7059069823f927b7cdfb3b8))
## [1.57.0](https://github.com/homarr-labs/homarr/compare/v1.56.1...v1.57.0) (2026-03-27) ## [1.57.0](https://github.com/homarr-labs/homarr/compare/v1.56.1...v1.57.0) (2026-03-27)
### Features ### Features
+1 -1
View File
@@ -1,4 +1,4 @@
FROM node:24.14.0-alpine AS base FROM node:24.14.1-alpine AS base
FROM base AS builder FROM base AS builder
RUN apk add --no-cache libc6-compat RUN apk add --no-cache libc6-compat
+10 -10
View File
@@ -56,13 +56,13 @@
"@mantine/tiptap": "^8.3.18", "@mantine/tiptap": "^8.3.18",
"@million/lint": "1.0.14", "@million/lint": "1.0.14",
"@tabler/icons-react": "^3.40.0", "@tabler/icons-react": "^3.40.0",
"@tanstack/react-query": "^5.91.2", "@tanstack/react-query": "^5.95.2",
"@tanstack/react-query-devtools": "^5.91.3", "@tanstack/react-query-devtools": "^5.95.2",
"@tanstack/react-query-next-experimental": "^5.91.0", "@tanstack/react-query-next-experimental": "^5.95.2",
"@trpc/client": "^11.14.1", "@trpc/client": "^11.15.0",
"@trpc/next": "^11.14.1", "@trpc/next": "^11.15.0",
"@trpc/react-query": "^11.14.1", "@trpc/react-query": "^11.15.0",
"@trpc/server": "^11.14.1", "@trpc/server": "^11.15.0",
"@xterm/addon-canvas": "^0.7.0", "@xterm/addon-canvas": "^0.7.0",
"@xterm/addon-fit": "0.11.0", "@xterm/addon-fit": "0.11.0",
"@xterm/xterm": "^6.0.0", "@xterm/xterm": "^6.0.0",
@@ -73,8 +73,8 @@
"dotenv": "^17.3.1", "dotenv": "^17.3.1",
"flag-icons": "^7.5.0", "flag-icons": "^7.5.0",
"glob": "^13.0.6", "glob": "^13.0.6",
"isomorphic-dompurify": "^3.6.0", "isomorphic-dompurify": "^3.7.1",
"jotai": "^2.18.1", "jotai": "^2.19.0",
"mantine-react-table": "2.0.0-beta.9", "mantine-react-table": "2.0.0-beta.9",
"next": "16.2.1", "next": "16.2.1",
"postcss-preset-mantine": "^1.18.0", "postcss-preset-mantine": "^1.18.0",
@@ -87,7 +87,7 @@
"superjson": "2.2.6", "superjson": "2.2.6",
"swagger-ui-react": "^5.32.1", "swagger-ui-react": "^5.32.1",
"use-deep-compare-effect": "^1.8.1", "use-deep-compare-effect": "^1.8.1",
"zod": "^4.2.1" "zod": "^4.3.6"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
@@ -2,7 +2,7 @@
import { useEffect, useRef } from "react"; import { useEffect, useRef } from "react";
import { Button, Grid, Group, Loader, Stack, TextInput } from "@mantine/core"; import { Button, Grid, Group, Loader, Stack, TextInput } from "@mantine/core";
import { useDebouncedValue, useDocumentTitle, useFavicon } from "@mantine/hooks"; import { useDebouncedValue, useDocumentTitle } from "@mantine/hooks";
import { useUpdateBoard } from "@homarr/boards/updater"; import { useUpdateBoard } from "@homarr/boards/updater";
import { useZodForm } from "@homarr/form"; import { useZodForm } from "@homarr/form";
@@ -10,6 +10,7 @@ import { IconPicker } from "@homarr/forms-collection";
import { useI18n } from "@homarr/translation/client"; import { useI18n } from "@homarr/translation/client";
import { boardSavePartialSettingsSchema } from "@homarr/validation/board"; import { boardSavePartialSettingsSchema } from "@homarr/validation/board";
import { homarrLogoPath } from "~/components/layout/logo/homarr-logo";
import { createMetaTitle } from "~/metadata"; import { createMetaTitle } from "~/metadata";
import type { Board } from "../../_types"; import type { Board } from "../../_types";
import { useSavePartialSettingsMutation } from "./_shared"; import { useSavePartialSettingsMutation } from "./_shared";
@@ -53,7 +54,6 @@ export const GeneralSettingsContent = ({ board }: Props) => {
); );
useLogoPreview(form.values.logoImageUrl); useLogoPreview(form.values.logoImageUrl);
useFaviconPreview(form.values.faviconImageUrl);
const metaTitleStatus = useMetaTitlePreview(form.values.metaTitle); const metaTitleStatus = useMetaTitlePreview(form.values.metaTitle);
// Cleanup for not applied changes of the page title and logo image URL // Cleanup for not applied changes of the page title and logo image URL
@@ -75,6 +75,7 @@ export const GeneralSettingsContent = ({ board }: Props) => {
pageTitle: values.pageTitle, pageTitle: values.pageTitle,
logoImageUrl: values.logoImageUrl, logoImageUrl: values.logoImageUrl,
}; };
updateFavicon(values.faviconImageUrl ?? homarrLogoPath);
savePartialSettings({ savePartialSettings({
id: board.id, id: board.id,
...values, ...values,
@@ -146,7 +147,13 @@ const useMetaTitlePreview = (title: string | null) => {
}; };
}; };
const useFaviconPreview = (url: string | null) => { // Previously we used the useFavicon hook from Mantine
const [faviconDebounced] = useDebouncedValue(url ?? "", 500); // However if the user tried to click on a link to a different page
useFavicon(faviconDebounced); // it caused an error "Cannot read properties of null (reading 'removeChild')"
// Probably because the head element was null (https://github.com/mantinedev/mantine/blob/b90d9b81031f45f5d15e75f25138ed6477f65bce/packages/%40mantine/hooks/src/use-favicon/use-favicon.ts#L21)
// See https://github.com/homarr-labs/homarr/issues/4905
const updateFavicon = (url: string) => {
const link: HTMLLinkElement | null = document.querySelector('link[rel="icon"]');
if (!link) return;
link.href = url;
}; };
+2 -2
View File
@@ -39,9 +39,9 @@
"@homarr/widgets": "workspace:^0.1.0", "@homarr/widgets": "workspace:^0.1.0",
"dayjs": "^1.11.20", "dayjs": "^1.11.20",
"dotenv": "^17.3.1", "dotenv": "^17.3.1",
"fastify": "^5.8.2", "fastify": "^5.8.4",
"superjson": "2.2.6", "superjson": "2.2.6",
"undici": "7.24.5" "undici": "7.24.6"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+1 -1
View File
@@ -1,4 +1,4 @@
FROM node:24.14.0-trixie AS base FROM node:24.14.1-trixie AS base
WORKDIR /app WORKDIR /app
COPY package.json . COPY package.json .
COPY pnpm-lock.yaml . COPY pnpm-lock.yaml .
+4 -4
View File
@@ -2,12 +2,12 @@
"name": "homarr-prebuilt-debian", "name": "homarr-prebuilt-debian",
"private": true, "private": true,
"dependencies": { "dependencies": {
"better-sqlite3": "^12.6.2" "better-sqlite3": "^12.8.0"
}, },
"packageManager": "pnpm@10.32.1", "packageManager": "pnpm@10.33.0",
"engines": { "engines": {
"node": ">=24.14.0", "node": ">=24.14.1",
"pnpm": ">=10.32.1" "pnpm": ">=10.33.0"
}, },
"pnpm": { "pnpm": {
"onlyBuiltDependencies": [ "onlyBuiltDependencies": [
+6 -5
View File
@@ -9,16 +9,16 @@ importers:
.: .:
dependencies: dependencies:
better-sqlite3: better-sqlite3:
specifier: ^12.6.2 specifier: ^12.8.0
version: 12.6.2 version: 12.8.0
packages: packages:
base64-js@1.5.1: base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
better-sqlite3@12.6.2: better-sqlite3@12.8.0:
resolution: {integrity: sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA==} resolution: {integrity: sha512-RxD2Vd96sQDjQr20kdP+F+dK/1OUNiVOl200vKBZY8u0vTwysfolF6Hq+3ZK2+h8My9YvZhHsF+RSGZW2VYrPQ==}
engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x} engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x}
bindings@1.5.0: bindings@1.5.0:
@@ -93,6 +93,7 @@ packages:
prebuild-install@7.1.3: prebuild-install@7.1.3:
resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==}
engines: {node: '>=10'} engines: {node: '>=10'}
deprecated: No longer maintained. Please contact the author of the relevant native addon; alternatives are available.
hasBin: true hasBin: true
pump@3.0.3: pump@3.0.3:
@@ -147,7 +148,7 @@ snapshots:
base64-js@1.5.1: {} base64-js@1.5.1: {}
better-sqlite3@12.6.2: better-sqlite3@12.8.0:
dependencies: dependencies:
bindings: 1.5.0 bindings: 1.5.0
prebuild-install: 7.1.3 prebuild-install: 7.1.3
+13 -13
View File
@@ -1,6 +1,6 @@
{ {
"name": "homarr", "name": "homarr",
"version": "1.57.0", "version": "1.57.1",
"private": true, "private": true,
"scripts": { "scripts": {
"build": "cross-env CI=true turbo build", "build": "cross-env CI=true turbo build",
@@ -45,11 +45,11 @@
"@testcontainers/redis": "^11.13.0", "@testcontainers/redis": "^11.13.0",
"@turbo/gen": "^2.8.20", "@turbo/gen": "^2.8.20",
"@vitejs/plugin-react": "^5.2.0", "@vitejs/plugin-react": "^5.2.0",
"@vitest/coverage-v8": "^4.1.0", "@vitest/coverage-v8": "^4.1.2",
"@vitest/ui": "^4.1.0", "@vitest/ui": "^4.1.2",
"conventional-changelog-conventionalcommits": "^9.3.0", "conventional-changelog-conventionalcommits": "^9.3.0",
"cross-env": "^10.1.0", "cross-env": "^10.1.0",
"jsdom": "^28.1.0", "jsdom": "^29.0.1",
"json5": "^2.2.3", "json5": "^2.2.3",
"prettier": "^3.8.1", "prettier": "^3.8.1",
"semantic-release": "^25.0.3", "semantic-release": "^25.0.3",
@@ -57,12 +57,12 @@
"turbo": "^2.8.20", "turbo": "^2.8.20",
"typescript": "^5.9.3", "typescript": "^5.9.3",
"vite-tsconfig-paths": "^6.1.1", "vite-tsconfig-paths": "^6.1.1",
"vitest": "^4.1.0" "vitest": "^4.1.2"
}, },
"packageManager": "pnpm@10.32.1", "packageManager": "pnpm@10.33.0",
"engines": { "engines": {
"node": ">=24.14.0", "node": ">=24.14.1",
"pnpm": ">=10.32.1" "pnpm": ">=10.33.0"
}, },
"pnpm": { "pnpm": {
"onlyBuiltDependencies": [ "onlyBuiltDependencies": [
@@ -80,22 +80,22 @@
"@babel/helpers@<7.26.10": ">=7.29.2", "@babel/helpers@<7.26.10": ">=7.29.2",
"@babel/runtime@<7.26.10": ">=7.29.2", "@babel/runtime@<7.26.10": ">=7.29.2",
"axios@>=1.0.0 <1.8.2": ">=1.13.6", "axios@>=1.0.0 <1.8.2": ">=1.13.6",
"brace-expansion@>=2.0.0 <=2.0.1": ">=5.0.4", "brace-expansion@>=2.0.0 <=2.0.1": ">=5.0.5",
"brace-expansion@>=1.0.0 <=1.1.11": ">=5.0.4", "brace-expansion@>=1.0.0 <=1.1.11": ">=5.0.5",
"esbuild@<=0.24.2": ">=0.27.4", "esbuild@<=0.24.2": ">=0.27.4",
"form-data@>=4.0.0 <4.0.4": ">=4.0.5", "form-data@>=4.0.0 <4.0.4": ">=4.0.5",
"hono@<4.6.5": ">=4.12.8", "hono@<4.6.5": ">=4.12.9",
"linkifyjs@<4.3.2": ">=4.3.2", "linkifyjs@<4.3.2": ">=4.3.2",
"nanoid@>=4.0.0 <5.0.9": ">=5.1.7", "nanoid@>=4.0.0 <5.0.9": ">=5.1.7",
"prismjs@<1.30.0": ">=1.30.0", "prismjs@<1.30.0": ">=1.30.0",
"proxmox-api>undici": "7.24.5", "proxmox-api>undici": "7.24.6",
"react-is": "^19.2.4", "react-is": "^19.2.4",
"rollup@>=4.0.0 <4.22.4": ">=4.60.0", "rollup@>=4.0.0 <4.22.4": ">=4.60.0",
"sha.js@<=2.4.11": ">=2.4.12", "sha.js@<=2.4.11": ">=2.4.12",
"tar-fs@>=3.0.0 <3.0.9": ">=3.1.2", "tar-fs@>=3.0.0 <3.0.9": ">=3.1.2",
"tar-fs@>=2.0.0 <2.1.3": ">=3.1.2", "tar-fs@>=2.0.0 <2.1.3": ">=3.1.2",
"tmp@<=0.2.3": ">=0.2.5", "tmp@<=0.2.3": ">=0.2.5",
"vite@>=5.0.0 <=5.4.18": ">=8.0.1" "vite@>=5.0.0 <=5.4.18": ">=8.0.3"
}, },
"patchedDependencies": { "patchedDependencies": {
"@types/node-unifi": "patches/@types__node-unifi.patch", "@types/node-unifi": "patches/@types__node-unifi.patch",
+6 -6
View File
@@ -41,18 +41,18 @@
"@homarr/translation": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0",
"@kubernetes/client-node": "^1.4.0", "@kubernetes/client-node": "^1.4.0",
"@tanstack/react-query": "^5.91.2", "@tanstack/react-query": "^5.95.2",
"@trpc/client": "^11.14.1", "@trpc/client": "^11.15.0",
"@trpc/react-query": "^11.14.1", "@trpc/react-query": "^11.15.0",
"@trpc/server": "^11.14.1", "@trpc/server": "^11.15.0",
"@trpc/tanstack-react-query": "^11.14.1", "@trpc/tanstack-react-query": "^11.15.0",
"lodash.clonedeep": "^4.5.0", "lodash.clonedeep": "^4.5.0",
"next": "16.2.1", "next": "16.2.1",
"react": "19.2.4", "react": "19.2.4",
"react-dom": "19.2.4", "react-dom": "19.2.4",
"superjson": "2.2.6", "superjson": "2.2.6",
"trpc-to-openapi": "^3.2.0", "trpc-to-openapi": "^3.2.0",
"zod": "^4.2.1" "zod": "^4.3.6"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+2 -2
View File
@@ -145,7 +145,7 @@ export const userRouter = createTRPCRouter({
create: permissionRequiredProcedure create: permissionRequiredProcedure
.requiresPermission("admin") .requiresPermission("admin")
.meta({ openapi: { method: "POST", path: "/api/users", tags: ["users"], protect: true } }) .meta({ openapi: { method: "POST", path: "/api/users", tags: ["users"], protect: true } })
.input(userCreateSchema) .input(convertIntersectionToZodObject(userCreateSchema))
.output(z.void()) .output(z.void())
.mutation(async ({ ctx, input }) => { .mutation(async ({ ctx, input }) => {
throwIfCredentialsDisabled(); throwIfCredentialsDisabled();
@@ -376,7 +376,7 @@ export const userRouter = createTRPCRouter({
await ctx.db.delete(users).where(eq(users.id, input.userId)); await ctx.db.delete(users).where(eq(users.id, input.userId));
}), }),
changePassword: protectedProcedure changePassword: protectedProcedure
.input(userChangePasswordApiSchema) .input(convertIntersectionToZodObject(userChangePasswordApiSchema))
.output(z.void()) .output(z.void())
.meta({ openapi: { method: "PATCH", path: "/api/users/{userId}/changePassword", tags: ["users"], protect: true } }) .meta({ openapi: { method: "PATCH", path: "/api/users/{userId}/changePassword", tags: ["users"], protect: true } })
.mutation(async ({ ctx, input }) => { .mutation(async ({ ctx, input }) => {
+1 -1
View File
@@ -38,7 +38,7 @@
"next-auth": "5.0.0-beta.30", "next-auth": "5.0.0-beta.30",
"react": "19.2.4", "react": "19.2.4",
"react-dom": "19.2.4", "react-dom": "19.2.4",
"zod": "^4.2.1" "zod": "^4.3.6"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+2 -2
View File
@@ -34,8 +34,8 @@
"octokit": "^5.0.5", "octokit": "^5.0.5",
"react": "19.2.4", "react": "19.2.4",
"react-dom": "19.2.4", "react-dom": "19.2.4",
"undici": "7.24.5", "undici": "7.24.6",
"zod": "^4.2.1", "zod": "^4.3.6",
"zod-validation-error": "^5.0.0" "zod-validation-error": "^5.0.0"
}, },
"devDependencies": { "devDependencies": {
+2 -2
View File
@@ -38,7 +38,7 @@
"prettier": "@homarr/prettier-config", "prettier": "@homarr/prettier-config",
"dependencies": { "dependencies": {
"@t3-oss/env-nextjs": "^0.13.11", "@t3-oss/env-nextjs": "^0.13.11",
"better-sqlite3": "^12.6.2", "better-sqlite3": "^12.8.0",
"dns-caching": "^0.2.9", "dns-caching": "^0.2.9",
"drizzle-orm": "^0.45.1", "drizzle-orm": "^0.45.1",
"ioredis": "5.10.1", "ioredis": "5.10.1",
@@ -46,7 +46,7 @@
"pg": "^8.20.0", "pg": "^8.20.0",
"superjson": "2.2.6", "superjson": "2.2.6",
"winston": "3.19.0", "winston": "3.19.0",
"zod": "^4.2.1" "zod": "^4.3.6"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+5 -5
View File
@@ -28,13 +28,13 @@
"@homarr/common": "workspace:^0.1.0", "@homarr/common": "workspace:^0.1.0",
"@homarr/core": "workspace:^0.1.0", "@homarr/core": "workspace:^0.1.0",
"@homarr/cron-jobs": "workspace:^0.1.0", "@homarr/cron-jobs": "workspace:^0.1.0",
"@tanstack/react-query": "^5.91.2", "@tanstack/react-query": "^5.95.2",
"@trpc/client": "^11.14.1", "@trpc/client": "^11.15.0",
"@trpc/server": "^11.14.1", "@trpc/server": "^11.15.0",
"@trpc/tanstack-react-query": "^11.14.1", "@trpc/tanstack-react-query": "^11.15.0",
"node-cron": "^4.2.1", "node-cron": "^4.2.1",
"react": "19.2.4", "react": "19.2.4",
"zod": "^4.2.1" "zod": "^4.3.6"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+1 -1
View File
@@ -51,7 +51,7 @@
"@paralleldrive/cuid2": "^3.3.0", "@paralleldrive/cuid2": "^3.3.0",
"@testcontainers/mysql": "^11.13.0", "@testcontainers/mysql": "^11.13.0",
"@testcontainers/postgresql": "^11.13.0", "@testcontainers/postgresql": "^11.13.0",
"better-sqlite3": "^12.6.2", "better-sqlite3": "^12.8.0",
"dotenv": "^17.3.1", "dotenv": "^17.3.1",
"drizzle-kit": "^0.31.10", "drizzle-kit": "^0.31.10",
"drizzle-orm": "^0.45.1", "drizzle-orm": "^0.45.1",
+2 -2
View File
@@ -24,8 +24,8 @@
"prettier": "@homarr/prettier-config", "prettier": "@homarr/prettier-config",
"dependencies": { "dependencies": {
"@homarr/common": "workspace:^0.1.0", "@homarr/common": "workspace:^0.1.0",
"fast-xml-parser": "^5.5.8", "fast-xml-parser": "^5.5.9",
"zod": "^4.2.1" "zod": "^4.3.6"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+1 -1
View File
@@ -28,7 +28,7 @@
"@homarr/validation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0",
"@mantine/form": "^8.3.18", "@mantine/form": "^8.3.18",
"mantine-form-zod-resolver": "^1.3.0", "mantine-form-zod-resolver": "^1.3.0",
"zod": "^4.2.1" "zod": "^4.3.6"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+1 -1
View File
@@ -32,7 +32,7 @@
"@homarr/validation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^8.3.18", "@mantine/core": "^8.3.18",
"react": "19.2.4", "react": "19.2.4",
"zod": "^4.2.1" "zod": "^4.3.6"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+5 -5
View File
@@ -25,7 +25,7 @@
}, },
"prettier": "@homarr/prettier-config", "prettier": "@homarr/prettier-config",
"dependencies": { "dependencies": {
"@ctrl/deluge": "^7.5.2", "@ctrl/deluge": "^8.0.0",
"@ctrl/qbittorrent": "^9.11.2", "@ctrl/qbittorrent": "^9.11.2",
"@ctrl/transmission": "^7.4.0", "@ctrl/transmission": "^7.4.0",
"@gitbeaker/rest": "^43.8.0", "@gitbeaker/rest": "^43.8.0",
@@ -38,18 +38,18 @@
"@homarr/redis": "workspace:^0.1.0", "@homarr/redis": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0",
"@immich/sdk": "^2.6.1", "@immich/sdk": "^2.6.3",
"@jellyfin/sdk": "^0.13.0", "@jellyfin/sdk": "^0.13.0",
"@octokit/auth-app": "^8.2.0", "@octokit/auth-app": "^8.2.0",
"ical.js": "^2.2.1", "ical.js": "^2.2.1",
"maria2": "^0.4.1", "maria2": "^0.4.1",
"node-ical": "^0.22.1", "node-ical": "^0.25.6",
"octokit": "^5.0.5", "octokit": "^5.0.5",
"proxmox-api": "1.1.1", "proxmox-api": "1.1.1",
"tsdav": "^2.1.8", "tsdav": "^2.1.8",
"undici": "7.24.5", "undici": "7.24.6",
"xml2js": "^0.6.2", "xml2js": "^0.6.2",
"zod": "^4.2.1" "zod": "^4.3.6"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
@@ -85,7 +85,7 @@ export class DashDotIntegration extends Integration implements ISystemHealthMoni
cpuModel: serverInfo.cpu.model, cpuModel: serverInfo.cpu.model,
operatingSystemVersion: `${serverInfo.os.distro} ${serverInfo.os.release} (${serverInfo.os.kernel})`, operatingSystemVersion: `${serverInfo.os.distro} ${serverInfo.os.release} (${serverInfo.os.kernel})`,
uptime: serverInfo.os.uptime, uptime: serverInfo.os.uptime,
gpuNames: serverInfo.gpu.map((gpu) => gpu.brand), gpuNames: serverInfo.gpu.layout.map((gpu) => gpu.brand),
}; };
} }
@@ -161,14 +161,14 @@ export class DashDotIntegration extends Integration implements ISystemHealthMoni
} }
private async getCurrentGpuLoadAsync() { private async getCurrentGpuLoadAsync() {
const response = await fetchWithTrustedCertificatesAsync(this.url("/load/gpu")); try {
const result = await response.text(); const response = await fetchWithTrustedCertificatesAsync(this.url("/load/gpu"));
const result = await response.json();
// response is either valid json or empty if gpu widget is disabled. const data = await gpuLoadApi.parseAsync(result);
if (result.length === 0) return []; return data.layout;
} catch {
const data = await gpuLoadApi.parseAsync(JSON.parse(result)); return [];
return data.layout; }
} }
private getChannel() { private getChannel() {
@@ -219,14 +219,16 @@ const internalServerInfoApi = z.object({
), ),
}), }),
), ),
gpu: z gpu: z.object({
.array( layout: z
z.object({ .array(
brand: z.string(), z.object({
model: z.string().optional(), brand: z.string(),
}), model: z.string().optional(),
) }),
.default([]), )
.default([]),
}),
}); });
const cpuLoadPerCoreApiList = z.array(cpuLoadPerCoreApi); const cpuLoadPerCoreApiList = z.array(cpuLoadPerCoreApi);
@@ -1,5 +1,6 @@
import { getAlbumInfo, getAllAlbums, getMyUser, getServerStatistics, init, searchUsers } from "@immich/sdk"; import { getAlbumInfo, getAllAlbums, getMyUser, getServerStatistics, init, searchUsers } from "@immich/sdk";
import { fetchWithTrustedCertificatesAsync } from "@homarr/core/infrastructure/http";
import { createLogger } from "@homarr/core/infrastructure/logs"; import { createLogger } from "@homarr/core/infrastructure/logs";
import { ImageProxy } from "@homarr/image-proxy"; import { ImageProxy } from "@homarr/image-proxy";
@@ -41,7 +42,10 @@ export class ImmichIntegration extends Integration {
public async getServerStatsAsync(): Promise<ImmichServerStats> { public async getServerStatsAsync(): Promise<ImmichServerStats> {
this.initClient(); this.initClient();
const [statistics, users] = await Promise.all([getServerStatistics(), searchUsers()]); const [statistics, users] = await Promise.all([
getServerStatistics(this.getRequestOptions()),
searchUsers(this.getRequestOptions()),
]);
return { return {
photoCount: statistics.photos, photoCount: statistics.photos,
userCount: users.length, userCount: users.length,
@@ -52,7 +56,7 @@ export class ImmichIntegration extends Integration {
public async getAlbumAsync(albumId: string): Promise<ImmichAlbum> { public async getAlbumAsync(albumId: string): Promise<ImmichAlbum> {
this.initClient(); this.initClient();
const album = await getAlbumInfo({ id: albumId }); const album = await getAlbumInfo({ id: albumId }, this.getRequestOptions());
const imageProxy = new ImageProxy(); const imageProxy = new ImageProxy();
return { return {
albumName: album.albumName, albumName: album.albumName,
@@ -89,17 +93,24 @@ export class ImmichIntegration extends Integration {
}[] }[]
> { > {
this.initClient(); this.initClient();
const albums = await getAllAlbums({}); const albums = await getAllAlbums({}, this.getRequestOptions());
return albums.map((album) => ({ id: album.id, albumName: album.albumName, assetCount: album.assetCount })); return albums.map((album) => ({ id: album.id, albumName: album.albumName, assetCount: album.assetCount }));
} }
protected async testingAsync(_: IntegrationTestingInput): Promise<TestingResult> { protected async testingAsync(input: IntegrationTestingInput): Promise<TestingResult> {
this.initClient(); this.initClient();
const user = await getMyUser(); const user = await getMyUser(this.getRequestOptions(input.fetchAsync));
logger.debug(`Logged in as ${user.name} (${user.id})`); logger.debug(`Logged in as ${user.name} (${user.id})`);
return { success: true }; return { success: true };
} }
private getRequestOptions(fetchAsync = fetchWithTrustedCertificatesAsync) {
return {
// Undici and node types are not the same
fetch: fetchAsync as unknown as typeof fetch,
};
}
/** /**
* Sets the credentials and prepares the client for calls. * Sets the credentials and prepares the client for calls.
* Must be called before any other functions. * Must be called before any other functions.
@@ -68,15 +68,19 @@ export class NextcloudIntegration extends Integration implements ICalendarIntegr
return calendarEvents return calendarEvents
.map((event) => { .map((event) => {
// @ts-expect-error the typescript definitions for this package are wrong // @ts-expect-error the TypeScript definitions for this package are wrong
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
const icalData = ical.default.parseICS(event.data) as ical.CalendarResponse; const icalData = ical.default.parseICS(event.data) as ical.CalendarResponse;
const veventObject = Object.values(icalData).find((data) => data.type === "VEVENT"); const veventObject = Object.values(icalData).find((data) => data?.type === "VEVENT");
if (!veventObject) { if (!veventObject) {
throw new Error(`Invalid event data object: ${JSON.stringify(event.data)}. Unable to process the calendar.`); throw new Error(`Invalid event data object: ${JSON.stringify(event.data)}. Unable to process the calendar.`);
} }
if (!veventObject.end) {
throw new Error(`Event had no end date: ${JSON.stringify(event.data)}. Unable to process the calendar.`);
}
logger.debug(`Converting VEVENT event to ${event.etag} from Nextcloud: ${JSON.stringify(veventObject)}`); logger.debug(`Converting VEVENT event to ${event.etag} from Nextcloud: ${JSON.stringify(veventObject)}`);
const eventUrlWithoutHost = new URL(event.url).pathname; const eventUrlWithoutHost = new URL(event.url).pathname;
@@ -87,21 +91,18 @@ export class NextcloudIntegration extends Integration implements ICalendarIntegr
const durationMs = veventObject.end.getTime() - veventObject.start.getTime(); const durationMs = veventObject.end.getTime() - veventObject.start.getTime();
return startDates.map((startDate) => { return startDates.map((startDate) => {
const timezoneOffsetMinutes = veventObject.rrule?.origOptions.tzid const utcStartDate = dayjs(startDate).tz("UTC").toDate();
? dayjs(startDate).tz(veventObject.rrule.origOptions.tzid).utcOffset()
: 0;
const utcStartDate = new Date(startDate.getTime() - timezoneOffsetMinutes * 60 * 1000);
const endDate = new Date(utcStartDate.getTime() + durationMs); const endDate = new Date(utcStartDate.getTime() + durationMs);
const dateInMillis = utcStartDate.valueOf(); const dateInMillis = utcStartDate.valueOf();
return { return {
title: veventObject.summary, title: veventObject.summary as string,
subTitle: null, subTitle: null,
description: veventObject.description, description: veventObject.description as string,
startDate: utcStartDate, startDate: utcStartDate,
endDate, endDate,
image: null, image: null,
location: veventObject.location || null, location: (veventObject.location as string | undefined) ?? null,
indicatorColor: indicatorColor:
"color" in veventObject && typeof veventObject.color === "string" ? veventObject.color : "#ff8600", "color" in veventObject && typeof veventObject.color === "string" ? veventObject.color : "#ff8600",
links: [ links: [
+1 -1
View File
@@ -39,7 +39,7 @@
"next": "16.2.1", "next": "16.2.1",
"react": "19.2.4", "react": "19.2.4",
"react-dom": "19.2.4", "react-dom": "19.2.4",
"zod": "^4.2.1" "zod": "^4.3.6"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+1 -1
View File
@@ -44,7 +44,7 @@
"react": "19.2.4", "react": "19.2.4",
"react-dom": "19.2.4", "react-dom": "19.2.4",
"superjson": "2.2.6", "superjson": "2.2.6",
"zod": "^4.2.1", "zod": "^4.3.6",
"zod-form-data": "^3.0.1" "zod-form-data": "^3.0.1"
}, },
"devDependencies": { "devDependencies": {
+1 -1
View File
@@ -23,7 +23,7 @@
"prettier": "@homarr/prettier-config", "prettier": "@homarr/prettier-config",
"dependencies": { "dependencies": {
"@homarr/common": "workspace:^0.1.0", "@homarr/common": "workspace:^0.1.0",
"zod": "^4.2.1" "zod": "^4.3.6"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+2 -2
View File
@@ -33,8 +33,8 @@
"dayjs": "^1.11.20", "dayjs": "^1.11.20",
"octokit": "^5.0.5", "octokit": "^5.0.5",
"superjson": "2.2.6", "superjson": "2.2.6",
"undici": "7.24.5", "undici": "7.24.6",
"zod": "^4.2.1" "zod": "^4.3.6"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+1 -1
View File
@@ -37,7 +37,7 @@
"@mantine/hooks": "^8.3.18", "@mantine/hooks": "^8.3.18",
"@mantine/spotlight": "^8.3.18", "@mantine/spotlight": "^8.3.18",
"@tabler/icons-react": "^3.40.0", "@tabler/icons-react": "^3.40.0",
"jotai": "^2.18.1", "jotai": "^2.19.0",
"next": "16.2.1", "next": "16.2.1",
"react": "19.2.4", "react": "19.2.4",
"react-dom": "19.2.4", "react-dom": "19.2.4",
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "" "label": ""
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "" "label": ""
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "" "label": ""
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "" "network": ""
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "", "network": "",
"up": "", "up": "",
"down": "" "down": ""
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "允许地理位置" "label": "允许地理位置"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "显示内存信息" "label": "显示内存信息"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "显示运行时间" "label": "显示运行时间"
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "CPU", "cpu": "CPU",
"memory": "内存", "memory": "内存",
"gpu": "",
"network": "网络" "network": "网络"
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "CPU", "cpu": "CPU",
"memory": "内存", "memory": "内存",
"gpu": "",
"network": "网络", "network": "网络",
"up": "上传", "up": "上传",
"down": "下载" "down": "下载"
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "crwdns970:0crwdne970:0" "label": "crwdns970:0crwdne970:0"
},
"allowModals": {
"label": "crwdns3992:0crwdne3992:0"
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "crwdns1080:0crwdne1080:0" "label": "crwdns1080:0crwdne1080:0"
}, },
"gpu": {
"label": "crwdns3994:0crwdne3994:0"
},
"showUptime": { "showUptime": {
"label": "crwdns3446:0crwdne3446:0" "label": "crwdns3446:0crwdne3446:0"
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "crwdns3700:0crwdne3700:0", "cpu": "crwdns3700:0crwdne3700:0",
"memory": "crwdns3702:0crwdne3702:0", "memory": "crwdns3702:0crwdne3702:0",
"gpu": "crwdns3996:0crwdne3996:0",
"network": "crwdns3704:0crwdne3704:0" "network": "crwdns3704:0crwdne3704:0"
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "crwdns3604:0crwdne3604:0", "cpu": "crwdns3604:0crwdne3604:0",
"memory": "crwdns3606:0crwdne3606:0", "memory": "crwdns3606:0crwdne3606:0",
"gpu": "crwdns3998:0crwdne3998:0",
"network": "crwdns3608:0crwdne3608:0", "network": "crwdns3608:0crwdne3608:0",
"up": "crwdns3610:0crwdne3610:0", "up": "crwdns3610:0crwdne3610:0",
"down": "crwdns3612:0crwdne3612:0" "down": "crwdns3612:0crwdne3612:0"
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Povolit polohu" "label": "Povolit polohu"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "Zobrazit informace o paměti" "label": "Zobrazit informace o paměti"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "" "label": ""
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "" "network": ""
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "", "network": "",
"up": "", "up": "",
"down": "" "down": ""
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Tillad geolokalisering" "label": "Tillad geolokalisering"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "Vis hukommelsesoplysninger" "label": "Vis hukommelsesoplysninger"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "Vis Oppetid" "label": "Vis Oppetid"
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "CPU", "cpu": "CPU",
"memory": "Hukommelse", "memory": "Hukommelse",
"gpu": "",
"network": "Netværk" "network": "Netværk"
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "CPU", "cpu": "CPU",
"memory": "MEM", "memory": "MEM",
"gpu": "",
"network": "NET", "network": "NET",
"up": "OP", "up": "OP",
"down": "NED" "down": "NED"
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Geolokalisierung zulassen" "label": "Geolokalisierung zulassen"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "Speicher-Info anzeigen" "label": "Speicher-Info anzeigen"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "" "label": ""
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "" "network": ""
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "", "network": "",
"up": "", "up": "",
"down": "" "down": ""
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Geolokalisierung zulassen" "label": "Geolokalisierung zulassen"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "Speicher-Info anzeigen" "label": "Speicher-Info anzeigen"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "Laufzeit anzeigen" "label": "Laufzeit anzeigen"
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "CPU", "cpu": "CPU",
"memory": "Speicher", "memory": "Speicher",
"gpu": "",
"network": "Netzwerk" "network": "Netzwerk"
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "CPU", "cpu": "CPU",
"memory": "Arbeitsspeicher", "memory": "Arbeitsspeicher",
"gpu": "",
"network": "Netzwerk", "network": "Netzwerk",
"up": "OBEN", "up": "OBEN",
"down": "UNTEN" "down": "UNTEN"
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Επιτρέπεται ο γεωεντοπισμός" "label": "Επιτρέπεται ο γεωεντοπισμός"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "Εμφάνιση Πληροφοριών Μνήμης" "label": "Εμφάνιση Πληροφοριών Μνήμης"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "" "label": ""
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "" "network": ""
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "", "network": "",
"up": "", "up": "",
"down": "" "down": ""
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Allow geolocation" "label": "Allow geolocation"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "" "label": ""
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "" "label": ""
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "" "network": ""
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "", "network": "",
"up": "", "up": "",
"down": "" "down": ""
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Permitir geolocalización" "label": "Permitir geolocalización"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "Mostrar información de la memoria" "label": "Mostrar información de la memoria"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "Mostrar tiempo de actividad" "label": "Mostrar tiempo de actividad"
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "CPU", "cpu": "CPU",
"memory": "Memoria", "memory": "Memoria",
"gpu": "",
"network": "Red" "network": "Red"
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "CPU", "cpu": "CPU",
"memory": "MEM", "memory": "MEM",
"gpu": "",
"network": "RED", "network": "RED",
"up": "ENCENDIDO", "up": "ENCENDIDO",
"down": "APAGADO" "down": "APAGADO"
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "" "label": ""
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "" "label": ""
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "" "label": ""
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "" "network": ""
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "", "network": "",
"up": "", "up": "",
"down": "" "down": ""
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Autoriser la géolocalisation" "label": "Autoriser la géolocalisation"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "Afficher les infos de la mémoire" "label": "Afficher les infos de la mémoire"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "Afficher le temps de disponibilité" "label": "Afficher le temps de disponibilité"
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "CPU", "cpu": "CPU",
"memory": "Mémoire", "memory": "Mémoire",
"gpu": "",
"network": "Réseau" "network": "Réseau"
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "CPU", "cpu": "CPU",
"memory": "RAM", "memory": "RAM",
"gpu": "",
"network": "NET", "network": "NET",
"up": "UP", "up": "UP",
"down": "HORS SERVICE" "down": "HORS SERVICE"
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "אפשר מיקום גיאוגרפי" "label": "אפשר מיקום גיאוגרפי"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "הצג מידע זיכרון" "label": "הצג מידע זיכרון"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "הצג זמן פעולה" "label": "הצג זמן פעולה"
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "מעבד", "cpu": "מעבד",
"memory": "זיכרון", "memory": "זיכרון",
"gpu": "",
"network": "רשת" "network": "רשת"
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "מעבד", "cpu": "מעבד",
"memory": "זיכרון", "memory": "זיכרון",
"gpu": "",
"network": "רשת", "network": "רשת",
"up": "העלאה", "up": "העלאה",
"down": "הורדה" "down": "הורדה"
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Dopusti geolociranje" "label": "Dopusti geolociranje"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "" "label": ""
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "" "label": ""
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "" "network": ""
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "", "network": "",
"up": "", "up": "",
"down": "" "down": ""
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Geolokáció engedélyezése" "label": "Geolokáció engedélyezése"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "Memóriainformációk megjelenítése" "label": "Memóriainformációk megjelenítése"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "" "label": ""
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "" "network": ""
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "", "network": "",
"up": "", "up": "",
"down": "" "down": ""
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Consenti geo-localizzazione" "label": "Consenti geo-localizzazione"
},
"allowModals": {
"label": "Consenti modali"
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "Mostra Informazioni Memoria" "label": "Mostra Informazioni Memoria"
}, },
"gpu": {
"label": "Mostra informazioni sulla GPU"
},
"showUptime": { "showUptime": {
"label": "Mostra Uptime" "label": "Mostra Uptime"
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "CPU", "cpu": "CPU",
"memory": "Memoria", "memory": "Memoria",
"gpu": "GPU",
"network": "Rete" "network": "Rete"
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "CPU", "cpu": "CPU",
"memory": "MEM", "memory": "MEM",
"gpu": "GPU",
"network": "NET", "network": "NET",
"up": "SU", "up": "SU",
"down": "DOWN" "down": "DOWN"
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "位置情報を許可する" "label": "位置情報を許可する"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "メモリー情報を表示" "label": "メモリー情報を表示"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "稼働時間を表示" "label": "稼働時間を表示"
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "CPU", "cpu": "CPU",
"memory": "メモリ", "memory": "メモリ",
"gpu": "",
"network": "ネットワーク" "network": "ネットワーク"
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "CPU", "cpu": "CPU",
"memory": "MEM", "memory": "MEM",
"gpu": "",
"network": "NET", "network": "NET",
"up": "UP", "up": "UP",
"down": "DOWN" "down": "DOWN"
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "지리적 위치 허용" "label": "지리적 위치 허용"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "" "label": ""
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "" "label": ""
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "" "network": ""
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "", "network": "",
"up": "", "up": "",
"down": "" "down": ""
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Leisti nustatyti geografinę buvimo vietą" "label": "Leisti nustatyti geografinę buvimo vietą"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "" "label": ""
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "" "label": ""
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "" "network": ""
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "", "network": "",
"up": "", "up": "",
"down": "" "down": ""
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Atļaut ģeogrāfiskās atrašanās vietas noteikšanu" "label": "Atļaut ģeogrāfiskās atrašanās vietas noteikšanu"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "Rādīt atmiņas informāciju" "label": "Rādīt atmiņas informāciju"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "" "label": ""
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "" "network": ""
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "", "network": "",
"up": "", "up": "",
"down": "" "down": ""
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Geolocatie toestaan" "label": "Geolocatie toestaan"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "Werkgeheugen info weergeven" "label": "Werkgeheugen info weergeven"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "Uptime weergeven" "label": "Uptime weergeven"
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "Processor", "cpu": "Processor",
"memory": "Geheugen", "memory": "Geheugen",
"gpu": "",
"network": "Netwerk" "network": "Netwerk"
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "CPU", "cpu": "CPU",
"memory": "MEM", "memory": "MEM",
"gpu": "",
"network": "NET", "network": "NET",
"up": "OMHOOG", "up": "OMHOOG",
"down": "OMLAAG" "down": "OMLAAG"
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Tillat geolokalisering" "label": "Tillat geolokalisering"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "Vis minneinfo" "label": "Vis minneinfo"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "Vis oppetid" "label": "Vis oppetid"
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "CPU", "cpu": "CPU",
"memory": "Minne", "memory": "Minne",
"gpu": "",
"network": "Nettverk" "network": "Nettverk"
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "CPU", "cpu": "CPU",
"memory": "Minne", "memory": "Minne",
"gpu": "",
"network": "NETT", "network": "NETT",
"up": "OPP", "up": "OPP",
"down": "NED" "down": "NED"
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Zezwalaj na geolokalizację" "label": "Zezwalaj na geolokalizację"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "Pokaż informacje o pamięci" "label": "Pokaż informacje o pamięci"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "Pokaż czas pracy" "label": "Pokaż czas pracy"
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "Procesor", "cpu": "Procesor",
"memory": "Pamięć", "memory": "Pamięć",
"gpu": "",
"network": "Sieć" "network": "Sieć"
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "Procesor", "cpu": "Procesor",
"memory": "Pamięć", "memory": "Pamięć",
"gpu": "",
"network": "Sieć", "network": "Sieć",
"up": "Aktywny", "up": "Aktywny",
"down": "Nieaktywny" "down": "Nieaktywny"
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Permitir geolocalização" "label": "Permitir geolocalização"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "Mostrar informações da memória" "label": "Mostrar informações da memória"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "Exibir tempo de atividade" "label": "Exibir tempo de atividade"
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "CPU", "cpu": "CPU",
"memory": "Memória", "memory": "Memória",
"gpu": "",
"network": "Rede" "network": "Rede"
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "CPU", "cpu": "CPU",
"memory": "MEM", "memory": "MEM",
"gpu": "",
"network": "REDE", "network": "REDE",
"up": "ENVIO", "up": "ENVIO",
"down": "RECEBIDO" "down": "RECEBIDO"
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Permiteți geolocalizarea" "label": "Permiteți geolocalizarea"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "Afișare informații memorie" "label": "Afișare informații memorie"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "" "label": ""
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "" "network": ""
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "", "network": "",
"up": "", "up": "",
"down": "" "down": ""
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Разрешить геолокацию" "label": "Разрешить геолокацию"
},
"allowModals": {
"label": "Разрешить модальные окна"
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "Показать информацию о памяти" "label": "Показать информацию о памяти"
}, },
"gpu": {
"label": "Показать информацию о GPU"
},
"showUptime": { "showUptime": {
"label": "Показывать время работы" "label": "Показывать время работы"
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "ЦП", "cpu": "ЦП",
"memory": "Память", "memory": "Память",
"gpu": "GPU",
"network": "Сеть" "network": "Сеть"
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "ЦП", "cpu": "ЦП",
"memory": "ОЗУ", "memory": "ОЗУ",
"gpu": "GPU",
"network": "Сеть", "network": "Сеть",
"up": "Исх.", "up": "Исх.",
"down": "Вх." "down": "Вх."
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Povolenie geografickej lokalizácie" "label": "Povolenie geografickej lokalizácie"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "Zobraziť informácie o pamäti" "label": "Zobraziť informácie o pamäti"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "Zobraziť Uptime" "label": "Zobraziť Uptime"
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "" "network": ""
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "", "network": "",
"up": "", "up": "",
"down": "" "down": ""
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Omogočanje zemljepisne lokacije" "label": "Omogočanje zemljepisne lokacije"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "" "label": ""
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "" "label": ""
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "" "network": ""
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "", "network": "",
"up": "", "up": "",
"down": "" "down": ""
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Tillåt geografisk lokalisering" "label": "Tillåt geografisk lokalisering"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "Visa minnesinformation" "label": "Visa minnesinformation"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "" "label": ""
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "" "network": ""
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "", "network": "",
"up": "", "up": "",
"down": "" "down": ""
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Coğrafi konuma izin ver (geolocation)" "label": "Coğrafi konuma izin ver (geolocation)"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "Bellek Bilgilerini Göster" "label": "Bellek Bilgilerini Göster"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "Çalışma Süresini Göster" "label": "Çalışma Süresini Göster"
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "İşlemci", "cpu": "İşlemci",
"memory": "Bellek", "memory": "Bellek",
"gpu": "",
"network": "Ağ" "network": "Ağ"
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "İşlemci", "cpu": "İşlemci",
"memory": "BELLEK", "memory": "BELLEK",
"gpu": "",
"network": "AĞ", "network": "AĞ",
"up": "YÜKLEME", "up": "YÜKLEME",
"down": "İNDİRME" "down": "İNDİRME"
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Дозволити геолокацію" "label": "Дозволити геолокацію"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "Показати інформацію про пам'ять" "label": "Показати інформацію про пам'ять"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "" "label": ""
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "" "network": ""
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "", "network": "",
"up": "", "up": "",
"down": "" "down": ""
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "Cho phép định vị" "label": "Cho phép định vị"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "" "label": ""
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "" "label": ""
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "" "network": ""
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "", "network": "",
"up": "", "up": "",
"down": "" "down": ""
+8
View File
@@ -1625,6 +1625,9 @@
}, },
"allowGeolocation": { "allowGeolocation": {
"label": "允許地址位置" "label": "允許地址位置"
},
"allowModals": {
"label": ""
} }
}, },
"error": { "error": {
@@ -1858,6 +1861,9 @@
"memory": { "memory": {
"label": "顯示記憶體訊息" "label": "顯示記憶體訊息"
}, },
"gpu": {
"label": ""
},
"showUptime": { "showUptime": {
"label": "" "label": ""
}, },
@@ -2725,6 +2731,7 @@
"option": { "option": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "" "network": ""
} }
}, },
@@ -2741,6 +2748,7 @@
"card": { "card": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
"gpu": "",
"network": "", "network": "",
"up": "", "up": "",
"down": "" "down": ""
+1 -1
View File
@@ -24,7 +24,7 @@
"dependencies": { "dependencies": {
"@homarr/definitions": "workspace:^0.1.0", "@homarr/definitions": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0",
"zod": "^4.2.1", "zod": "^4.3.6",
"zod-form-data": "^3.0.1" "zod-form-data": "^3.0.1"
}, },
"devDependencies": { "devDependencies": {
+10 -6
View File
@@ -57,12 +57,13 @@ export const userBaseCreateSchema = z.object({
password: userPasswordSchema, password: userPasswordSchema,
confirmPassword: z.string(), confirmPassword: z.string(),
email: z.string().email().or(z.string().length(0)).optional(), email: z.string().email().or(z.string().length(0)).optional(),
groupIds: z.array(z.string()),
}); });
export const userCreateSchema = addConfirmPasswordRefinement(userBaseCreateSchema); export const userCreateSchema = addConfirmPasswordRefinement(userBaseCreateSchema).and(
z.object({ groupIds: z.array(z.string()) }),
);
export const userInitSchema = addConfirmPasswordRefinement(userBaseCreateSchema.omit({ groupIds: true })); export const userInitSchema = addConfirmPasswordRefinement(userBaseCreateSchema);
export const userSignInSchema = z.object({ export const userSignInSchema = z.object({
name: z.string().min(1), name: z.string().min(1),
@@ -111,12 +112,15 @@ const baseChangePasswordSchema = z.object({
previousPassword: z.string().min(1), previousPassword: z.string().min(1),
password: userPasswordSchema, password: userPasswordSchema,
confirmPassword: z.string(), confirmPassword: z.string(),
userId: z.string(),
}); });
export const userChangePasswordSchema = addConfirmPasswordRefinement(baseChangePasswordSchema.omit({ userId: true })); export const userChangePasswordSchema = addConfirmPasswordRefinement(baseChangePasswordSchema);
export const userChangePasswordApiSchema = addConfirmPasswordRefinement(baseChangePasswordSchema); export const userChangePasswordApiSchema = addConfirmPasswordRefinement(baseChangePasswordSchema).and(
z.object({
userId: z.string(),
}),
);
export const userChangeHomeBoardsSchema = z.object({ export const userChangeHomeBoardsSchema = z.object({
homeBoardId: z.string().nullable(), homeBoardId: z.string().nullable(),
+17 -17
View File
@@ -52,22 +52,22 @@
"@mantine/core": "^8.3.18", "@mantine/core": "^8.3.18",
"@mantine/hooks": "^8.3.18", "@mantine/hooks": "^8.3.18",
"@tabler/icons-react": "^3.40.0", "@tabler/icons-react": "^3.40.0",
"@tiptap/extension-color": "3.20.4", "@tiptap/extension-color": "3.20.5",
"@tiptap/extension-highlight": "3.20.4", "@tiptap/extension-highlight": "3.20.5",
"@tiptap/extension-image": "3.20.4", "@tiptap/extension-image": "3.20.5",
"@tiptap/extension-link": "^3.20.4", "@tiptap/extension-link": "^3.20.5",
"@tiptap/extension-placeholder": "^3.20.4", "@tiptap/extension-placeholder": "^3.20.5",
"@tiptap/extension-table": "3.20.4", "@tiptap/extension-table": "3.20.5",
"@tiptap/extension-table-cell": "3.20.4", "@tiptap/extension-table-cell": "3.20.5",
"@tiptap/extension-table-header": "3.20.4", "@tiptap/extension-table-header": "3.20.5",
"@tiptap/extension-table-row": "3.20.4", "@tiptap/extension-table-row": "3.20.5",
"@tiptap/extension-task-item": "3.20.4", "@tiptap/extension-task-item": "3.20.5",
"@tiptap/extension-task-list": "3.20.4", "@tiptap/extension-task-list": "3.20.5",
"@tiptap/extension-text-align": "3.20.4", "@tiptap/extension-text-align": "3.20.5",
"@tiptap/extension-text-style": "3.20.4", "@tiptap/extension-text-style": "3.20.5",
"@tiptap/extension-underline": "3.20.4", "@tiptap/extension-underline": "3.20.5",
"@tiptap/react": "^3.20.4", "@tiptap/react": "^3.20.5",
"@tiptap/starter-kit": "^3.20.4", "@tiptap/starter-kit": "^3.20.5",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"dayjs": "^1.11.20", "dayjs": "^1.11.20",
"mantine-form-zod-resolver": "^1.3.0", "mantine-form-zod-resolver": "^1.3.0",
@@ -78,7 +78,7 @@
"react-markdown": "^10.1.0", "react-markdown": "^10.1.0",
"recharts": "^2.15.4", "recharts": "^2.15.4",
"video.js": "^8.23.7", "video.js": "^8.23.7",
"zod": "^4.2.1" "zod": "^4.3.6"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+827 -955
View File
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -24,7 +24,7 @@
"eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-react": "^7.37.5", "eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^6.1.1", "eslint-plugin-react-hooks": "^6.1.1",
"typescript-eslint": "^8.57.1" "typescript-eslint": "^8.57.2"
}, },
"devDependencies": { "devDependencies": {
"@homarr/prettier-config": "workspace:^0.1.0", "@homarr/prettier-config": "workspace:^0.1.0",
+2 -2
View File
@@ -4,10 +4,10 @@ description: "Common setup steps for Actions"
runs: runs:
using: composite using: composite
steps: steps:
- uses: pnpm/action-setup@v4 - uses: pnpm/action-setup@v5
- uses: actions/setup-node@v6 - uses: actions/setup-node@v6
with: with:
node-version: 24.14.0 node-version: 24.14.1
cache: "pnpm" cache: "pnpm"
- shell: bash - shell: bash