diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 5151fee12..fb53bd257 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -33,6 +33,10 @@ body:
options:
# The below comment is used to insert a new version with on-release.yml
#NEXT_VERSION#
+ - 1.37.0
+ - 1.36.1
+ - 1.36.0
+ - 1.35.1
- 1.35.0
- 1.34.0
- 1.33.0
diff --git a/.github/renovate.json5 b/.github/renovate.json5
index 377002605..4f136e5f6 100644
--- a/.github/renovate.json5
+++ b/.github/renovate.json5
@@ -6,6 +6,11 @@
matchPackagePatterns: ["^@homarr/"],
enabled: false,
},
+ // Reenable once https://github.com/privatenumber/tsx/issues/737 is fixed
+ {
+ matchPackagePatterns: ["tsx"],
+ enabled: false,
+ },
{
matchUpdateTypes: ["minor", "patch", "pin", "digest"],
automerge: true,
diff --git a/.github/workflows/automatic-approval.yml b/.github/workflows/automatic-approval.yml
index 72e6aaea2..7a38b6e02 100644
--- a/.github/workflows/automatic-approval.yml
+++ b/.github/workflows/automatic-approval.yml
@@ -3,6 +3,8 @@ on:
pull_request:
types: [opened, synchronize]
+permissions: {}
+
jobs:
approve-automatic-prs:
runs-on: ubuntu-latest
@@ -12,10 +14,12 @@ jobs:
uses: actions/checkout@v5
- name: Obtain token
id: obtainToken
- uses: tibdex/github-app-token@v2
+ uses: actions/create-github-app-token@v2
with:
- private_key: ${{ secrets.RENOVATE_APPROVE_PRIVATE_KEY }}
- app_id: ${{ secrets.RENOVATE_APPROVE_APP_ID }}
+ private-key: ${{ secrets.RENOVATE_APPROVE_PRIVATE_KEY }}
+ app-id: ${{ secrets.RENOVATE_APPROVE_APP_ID }}
+ permission-pull-requests: write # required to approve pull request
+
- name: Install GitHub CLI
run: sudo apt-get install -y gh
- name: Approve automatic PRs
diff --git a/.github/workflows/crowdin-schedule-download.yml b/.github/workflows/crowdin-schedule-download.yml
index f5814f120..c2f12042a 100644
--- a/.github/workflows/crowdin-schedule-download.yml
+++ b/.github/workflows/crowdin-schedule-download.yml
@@ -5,6 +5,9 @@ on:
schedule:
- cron: "0 0 * * *" # every day at midnight
+permissions:
+ contents: read # required for code checkout
+
jobs:
download-crowdin-translations:
runs-on: ubuntu-latest
@@ -15,10 +18,12 @@ jobs:
- name: Obtain token
id: obtainToken
- uses: tibdex/github-app-token@v2
+ uses: actions/create-github-app-token@v2
with:
- private_key: ${{ secrets.CROWDIN_APP_PRIVATE_KEY }}
- app_id: ${{ secrets.CROWDIN_APP_ID }}
+ private-key: ${{ secrets.CROWDIN_APP_PRIVATE_KEY }}
+ app-id: ${{ secrets.CROWDIN_APP_ID }}
+ permission-contents: write # required to commit to crowdin branch
+ permission-pull-requests: write # required to create pull request
- name: Download Crowdin translations
id: crowdin-download
diff --git a/.github/workflows/deployment-docker-image.yml b/.github/workflows/deployment-docker-image.yml
index 307930137..1223b4db1 100644
--- a/.github/workflows/deployment-docker-image.yml
+++ b/.github/workflows/deployment-docker-image.yml
@@ -49,18 +49,23 @@ jobs:
- name: Obtain token
if: env.SKIP_RELEASE == 'false'
id: obtainToken
- uses: tibdex/github-app-token@v2
+ uses: actions/create-github-app-token@v2
with:
- private_key: ${{ secrets.RENOVATE_MERGE_PRIVATE_KEY }}
- app_id: ${{ secrets.RENOVATE_MERGE_APP_ID }}
+ private-key: ${{ secrets.RENOVATE_MERGE_PRIVATE_KEY }}
+ 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
if: env.SKIP_RELEASE == 'false'
with:
persist-credentials: false
- - uses: actions/setup-node@v4
+ - uses: pnpm/action-setup@v4
+ if: env.SKIP_RELEASE == 'false'
+ - uses: actions/setup-node@v5
if: env.SKIP_RELEASE == 'false'
with:
node-version: 22.19.0
+ cache: "pnpm"
- run: npm i -g pnpm
if: env.SKIP_RELEASE == 'false'
- name: Install dependencies
diff --git a/.github/workflows/deployment-weekly-release.yml b/.github/workflows/deployment-weekly-release.yml
index a0fdcc723..e96cf4eec 100644
--- a/.github/workflows/deployment-weekly-release.yml
+++ b/.github/workflows/deployment-weekly-release.yml
@@ -49,10 +49,11 @@ jobs:
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
id: obtainApprovalToken
- uses: tibdex/github-app-token@v2
+ uses: actions/create-github-app-token@v2
with:
- private_key: ${{ secrets.RENOVATE_APPROVE_PRIVATE_KEY }}
- app_id: ${{ secrets.RENOVATE_APPROVE_APP_ID }}
+ private-key: ${{ secrets.RENOVATE_APPROVE_PRIVATE_KEY }}
+ app-id: ${{ secrets.RENOVATE_APPROVE_APP_ID }}
+ permission-pull-requests: write
- name: Approve PR
env:
GITHUB_TOKEN: ${{ steps.obtainApprovalToken.outputs.token }}
@@ -60,10 +61,12 @@ jobs:
gh pr review --approve --body "Automatically approved by GitHub Action"
- name: Obtain token
id: obtainMergeToken
- uses: tibdex/github-app-token@v2
+ uses: actions/create-github-app-token@v2
with:
- private_key: ${{ secrets.RENOVATE_MERGE_PRIVATE_KEY }}
- app_id: ${{ secrets.RENOVATE_MERGE_APP_ID }}
+ private-key: ${{ secrets.RENOVATE_MERGE_PRIVATE_KEY }}
+ app-id: ${{ secrets.RENOVATE_MERGE_APP_ID }}
+ permission-contents: write # write to main branch (due to merge)
+ permission-pull-requests: write # merge pull request
- id: automerge
if: ${{ steps.semver.outputs.bump != 'major' }}
name: automerge
diff --git a/.github/workflows/on-release.yml b/.github/workflows/on-release.yml
index 83357cafe..9aac94c45 100644
--- a/.github/workflows/on-release.yml
+++ b/.github/workflows/on-release.yml
@@ -11,12 +11,14 @@ jobs:
steps:
- name: Obtain token
id: obtainToken
- uses: tibdex/github-app-token@v2
+ uses: actions/create-github-app-token@v2
with:
- private_key: ${{ secrets.HOMARR_DOCS_RELEASE_APP_PRIVATE_KEY }}
- app_id: ${{ vars.HOMARR_DOCS_RELEASE_APP_ID }}
- installation_retrieval_mode: repository
- installation_retrieval_payload: homarr-labs/documentation
+ private-key: ${{ secrets.HOMARR_DOCS_RELEASE_APP_PRIVATE_KEY }}
+ app-id: ${{ vars.HOMARR_DOCS_RELEASE_APP_ID }}
+ owner: homarr-labs
+ repositories: |
+ documentation
+ permission-contents: write # required to dispatch repository workflow
- name: Trigger documentation release
env:
GITHUB_TOKEN: ${{ steps.obtainToken.outputs.token }}
@@ -40,10 +42,12 @@ jobs:
steps:
- name: Obtain token
id: obtainToken
- uses: tibdex/github-app-token@v2
+ uses: actions/create-github-app-token@v2
with:
- private_key: ${{ secrets.RENOVATE_MERGE_PRIVATE_KEY }}
- app_id: ${{ secrets.RENOVATE_MERGE_APP_ID }}
+ private-key: ${{ secrets.RENOVATE_MERGE_PRIVATE_KEY }}
+ app-id: ${{ secrets.RENOVATE_MERGE_APP_ID }}
+ 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
with:
@@ -57,6 +61,7 @@ jobs:
run: |
git config --global user.email "175486441+homarr-releases[bot]@users.noreply.github.com"
git config --global user.name "Releases Homarr"
+ git checkout -b update-bug-report-template
git add .
git commit -m "chore: update bug report template"
diff --git a/.github/workflows/skip-renovate-stability-days.yml b/.github/workflows/skip-renovate-stability-days.yml
new file mode 100644
index 000000000..5492103b7
--- /dev/null
+++ b/.github/workflows/skip-renovate-stability-days.yml
@@ -0,0 +1,26 @@
+permissions:
+ statuses: write
+
+on:
+ pull_request:
+ types: [opened, synchronize]
+
+jobs:
+ skip-stability-days:
+ if: ${{ !startsWith(github.head_ref, 'renovate/') }}
+ name: Skip Stability Days
+ runs-on: ubuntu-latest
+ steps:
+ - name: Add status check
+ env:
+ GH_TOKEN: ${{secrets.GITHUB_TOKEN}}
+ run: |
+ gh api \
+ --method POST \
+ -H "Accept: application/vnd.github+json" \
+ -H "X-GitHub-Api-Version: 2022-11-28" \
+ /repos/${{github.repository}}/statuses/${{github.event.pull_request.head.sha}} \
+ -f 'state=success' \
+ -f 'target_url=https://docs.renovatebot.com/configuration-options#minimumreleaseage' \
+ -f 'description=Skipped for non renovate branches' \
+ -f 'context=renovate/stability-days'
diff --git a/.github/workflows/update-contributors.yml b/.github/workflows/update-contributors.yml
index 86f7c95d5..c8cb1efde 100644
--- a/.github/workflows/update-contributors.yml
+++ b/.github/workflows/update-contributors.yml
@@ -9,9 +9,6 @@ env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
CROWDIN_TOKEN: "${{ secrets.CROWDIN_UPDATE_CONTRIBUTORS_TOKEN }}"
-permissions:
- contents: write
-
jobs:
update-contributors:
runs-on: ubuntu-latest
@@ -21,20 +18,24 @@ jobs:
steps:
- name: Obtain token
id: obtainToken
- uses: tibdex/github-app-token@v2
+ uses: actions/create-github-app-token@v2
with:
- private_key: ${{ secrets.HOMARR_UPDATE_CONTRIBUTORS_PRIVATE_KEY }}
- app_id: ${{ vars.HOMARR_UPDATE_CONTRIBUTORS_APP_ID }}
+ private-key: ${{ secrets.HOMARR_UPDATE_CONTRIBUTORS_PRIVATE_KEY }}
+ app-id: ${{ vars.HOMARR_UPDATE_CONTRIBUTORS_APP_ID }}
+ permission-contents: write # required to commit to branch
+ permission-pull-requests: write # required to create pr & enable automerge
- name: Checkout repository
uses: actions/checkout@v5
env:
GITHUB_TOKEN: ${{ steps.obtainToken.outputs.token }}
+ - uses: pnpm/action-setup@v4
- name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v5
with:
node-version: ${{ matrix.node-version }}
+ cache: "pnpm"
- name: Run update script
run: node ./scripts/update-contributors.mjs
diff --git a/.github/workflows/update-integration-list.yml b/.github/workflows/update-integration-list.yml
index dc90ce5c3..ff7ad9ae8 100644
--- a/.github/workflows/update-integration-list.yml
+++ b/.github/workflows/update-integration-list.yml
@@ -1,7 +1,7 @@
name: Update integration list
on:
- workflow_dispatch: { }
+ workflow_dispatch: {}
push:
paths:
- packages/definitions/src/integration.ts
@@ -20,10 +20,12 @@ jobs:
steps:
- name: Obtain token
id: obtainToken
- uses: tibdex/github-app-token@v2
+ uses: actions/create-github-app-token@v2
with:
- private_key: ${{ secrets.HOMARR_UPDATE_CONTRIBUTORS_PRIVATE_KEY }}
- app_id: ${{ vars.HOMARR_UPDATE_CONTRIBUTORS_APP_ID }}
+ private-key: ${{ secrets.HOMARR_UPDATE_CONTRIBUTORS_PRIVATE_KEY }}
+ app-id: ${{ vars.HOMARR_UPDATE_CONTRIBUTORS_APP_ID }}
+ 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
env:
@@ -59,4 +61,4 @@ jobs:
env:
GITHUB_TOKEN: ${{ steps.obtainToken.outputs.token }}
run: |
- gh pr merge ${{steps.create-pull-request.outputs.pull-request-number}} --auto --squash
\ No newline at end of file
+ gh pr merge ${{steps.create-pull-request.outputs.pull-request-number}} --auto --squash
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 587ee9a24..b331ae6d6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,88 @@
+## [1.37.0](https://github.com/homarr-labs/homarr/compare/v1.36.1...v1.37.0) (2025-09-12)
+
+### Features
+
+* **integration:** add github app authentication ([#3968](https://github.com/homarr-labs/homarr/issues/3968)) ([bfcbffb](https://github.com/homarr-labs/homarr/commit/bfcbffbdc6499ac5f10bfbf2f5db141eef955049))
+* **integrations:** add truenas ([#3745](https://github.com/homarr-labs/homarr/issues/3745)) ([dc08bac](https://github.com/homarr-labs/homarr/commit/dc08bacebfe22ee528565259605787720a522b6b))
+
+### Bug Fixes
+
+* **adguard-integration:** parse error with protection_disabled_duration field ([#4018](https://github.com/homarr-labs/homarr/issues/4018)) ([eb5af11](https://github.com/homarr-labs/homarr/commit/eb5af116436ddd11b7ff094e882355f951ca622a))
+* **api:** page is crashing ([#4039](https://github.com/homarr-labs/homarr/issues/4039)) ([a843f60](https://github.com/homarr-labs/homarr/commit/a843f6043b0ed90c5a205b697497490631e0dd19))
+* **boards:** issues with old-import board name containing spaces ([#4052](https://github.com/homarr-labs/homarr/issues/4052)) ([f7471b6](https://github.com/homarr-labs/homarr/commit/f7471b6c63f80618d0b91b16fb5545e0a3760cbe))
+* **deps:** update dependency @ctrl/deluge to ^7.2.0 ([#4009](https://github.com/homarr-labs/homarr/issues/4009)) ([e70074b](https://github.com/homarr-labs/homarr/commit/e70074b2191df1dac1e9aa94dbb0cec7073193c9))
+* **deps:** update dependency @ctrl/qbittorrent to ^9.7.0 ([#4010](https://github.com/homarr-labs/homarr/issues/4010)) ([32b2a09](https://github.com/homarr-labs/homarr/commit/32b2a09ab4e9826b0640d47e1d443682b5fbcff5))
+* **deps:** update dependency @ctrl/transmission to ^7.3.0 ([#4011](https://github.com/homarr-labs/homarr/issues/4011)) ([bc94e34](https://github.com/homarr-labs/homarr/commit/bc94e34ada04458901389f3d7ba18e76849fe6d4))
+* **deps:** update dependency @extractus/feed-extractor to v7.1.7 ([#4034](https://github.com/homarr-labs/homarr/issues/4034)) ([fbb86c4](https://github.com/homarr-labs/homarr/commit/fbb86c452d3b8d8cde5357e369fbc14349b71c81))
+* **deps:** update dependency @gitbeaker/rest to ^43.5.0 ([#4023](https://github.com/homarr-labs/homarr/issues/4023)) ([4fc38bc](https://github.com/homarr-labs/homarr/commit/4fc38bcd5bbed0b3ede2e742c0677bdfbab47295))
+* **deps:** update dependency dotenv to ^17.2.2 ([#4024](https://github.com/homarr-labs/homarr/issues/4024)) ([1323bb2](https://github.com/homarr-labs/homarr/commit/1323bb276fc8120dd62385b4c79cc630b2078949))
+* **deps:** update dependency fastify to ^5.6.0 ([#4042](https://github.com/homarr-labs/homarr/issues/4042)) ([a149d8c](https://github.com/homarr-labs/homarr/commit/a149d8c3c112740c9c563463ab72e89c77b9a4ec))
+* **deps:** update dependency mysql2 to v3.14.4 ([#4013](https://github.com/homarr-labs/homarr/issues/4013)) ([8bf278f](https://github.com/homarr-labs/homarr/commit/8bf278f603ff37e68d7bed41c4c5f6e6351fe94e))
+* **deps:** update dependency next-intl to v4.3.6 ([#4035](https://github.com/homarr-labs/homarr/issues/4035)) ([a1b5f5c](https://github.com/homarr-labs/homarr/commit/a1b5f5ceea96b18bda8aa7cee7002b10dc4b428c))
+* **deps:** update dependency next-intl to v4.3.7 ([#4038](https://github.com/homarr-labs/homarr/issues/4038)) ([cd90eaa](https://github.com/homarr-labs/homarr/commit/cd90eaae9da566393114a02765f57f1e6f55fe1c))
+* **deps:** update dependency sass to ^1.92.0 ([#4025](https://github.com/homarr-labs/homarr/issues/4025)) ([2eef4a8](https://github.com/homarr-labs/homarr/commit/2eef4a8304f0ab5b99313e6e8904582303dd1883))
+* **deps:** update dependency sass to ^1.92.1 ([#4031](https://github.com/homarr-labs/homarr/issues/4031)) ([8231efa](https://github.com/homarr-labs/homarr/commit/8231efa28195389f4b83a06d137ea6b4b2f49eee))
+* **deps:** update dependency swagger-ui-react to ^5.28.1 ([#4029](https://github.com/homarr-labs/homarr/issues/4029)) ([ecf1bd9](https://github.com/homarr-labs/homarr/commit/ecf1bd98b74c8e8fca03bcd210fb118382ce2d36))
+* **deps:** update dependency typescript-eslint to ^8.42.0 ([#4022](https://github.com/homarr-labs/homarr/issues/4022)) ([99179e4](https://github.com/homarr-labs/homarr/commit/99179e4e7d957f5616a24c63982af957613db427))
+* **deps:** update trpc monorepo to ^11.5.1 ([#4045](https://github.com/homarr-labs/homarr/issues/4045)) ([a7976e9](https://github.com/homarr-labs/homarr/commit/a7976e9d700793d8f48529bc5c1f11f8bca724ce))
+* **iframe:** disable scrolling not working ([#4017](https://github.com/homarr-labs/homarr/issues/4017)) ([7ac2a81](https://github.com/homarr-labs/homarr/commit/7ac2a81f945c44745917fe4eb8318fdfff3deb14))
+* **plex-integration:** unknown badge shown for added tv-shows ([#4032](https://github.com/homarr-labs/homarr/issues/4032)) ([4d57c7c](https://github.com/homarr-labs/homarr/commit/4d57c7ca13bdf78b5ac9d0710cd486ad1f41d4d4))
+* **update-checker:** cached through updates ([#4046](https://github.com/homarr-labs/homarr/issues/4046)) ([26eb2c0](https://github.com/homarr-labs/homarr/commit/26eb2c08c94bd9d440a3c9e914fc9af4ffd48301))
+* **video-widget:** hls videos not working ([#4015](https://github.com/homarr-labs/homarr/issues/4015)) ([de33439](https://github.com/homarr-labs/homarr/commit/de33439b22d3f5f2ff5856054cfa31a4f78ee088))
+
+### Reverts
+
+* **deps:** update actions/setup-node action to v5 ([#4058](https://github.com/homarr-labs/homarr/issues/4058)) ([7862612](https://github.com/homarr-labs/homarr/commit/78626121ddfa5462eaad7a6933733ec03a83c04a))
+
+## [1.36.1](https://github.com/homarr-labs/homarr/compare/v1.36.0...v1.36.1) (2025-09-05)
+
+### Bug Fixes
+
+* **dns:** disable caching by default ([#4007](https://github.com/homarr-labs/homarr/issues/4007)) ([10668ee](https://github.com/homarr-labs/homarr/commit/10668ee359940c1e24b543a7a20fe400474e12bf))
+
+## [1.36.0](https://github.com/homarr-labs/homarr/compare/v1.35.1...v1.36.0) (2025-09-05)
+
+### Features
+
+* **kubernetes:** add Talos providers ([#3979](https://github.com/homarr-labs/homarr/issues/3979)) ([3e59c20](https://github.com/homarr-labs/homarr/commit/3e59c20dba543634a6a79359f83c13fa81e7ccf3))
+* **rss-widget:** add hide description option ([#4000](https://github.com/homarr-labs/homarr/issues/4000)) ([b2eb2c3](https://github.com/homarr-labs/homarr/commit/b2eb2c32f6995563feb3c8b4a100be3bfe1d3d80))
+* **widget:** show name in edit modal ([#3970](https://github.com/homarr-labs/homarr/issues/3970)) ([d317cac](https://github.com/homarr-labs/homarr/commit/d317cacbe83394dd3f6de3e74b53f683654e91d1))
+
+### Bug Fixes
+
+* add dns caching ([#3736](https://github.com/homarr-labs/homarr/issues/3736)) ([fb6b5e8](https://github.com/homarr-labs/homarr/commit/fb6b5e88ff3a5e85d06885aed1f2a99788e04f2c))
+* **deps:** tsx breaks imports like dns-caching ([#3998](https://github.com/homarr-labs/homarr/issues/3998)) ([0476543](https://github.com/homarr-labs/homarr/commit/047654351ab50a730551e61ce98065c9bb7ca3fa))
+* **deps:** update dependency @ianvs/prettier-plugin-sort-imports to ^4.6.3 ([#3976](https://github.com/homarr-labs/homarr/issues/3976)) ([2b1a3de](https://github.com/homarr-labs/homarr/commit/2b1a3de8dffdd9f089b82e4bcfb304f156f60670))
+* **deps:** update dependency @ianvs/prettier-plugin-sort-imports to ^4.7.0 ([#3977](https://github.com/homarr-labs/homarr/issues/3977)) ([a3dde2e](https://github.com/homarr-labs/homarr/commit/a3dde2e7ee40fcfddced43f4b5c124010f0410db))
+* **deps:** update dependency @testcontainers/postgresql to ^11.5.1 ([#3948](https://github.com/homarr-labs/homarr/issues/3948)) ([9f3e68f](https://github.com/homarr-labs/homarr/commit/9f3e68fdfee5936727c97d0d99e174cd368de260))
+* **deps:** update dependency dayjs to ^1.11.15 ([#3975](https://github.com/homarr-labs/homarr/issues/3975)) ([032f7ff](https://github.com/homarr-labs/homarr/commit/032f7ffd29eddd200d5434ba1c65b8cd5800c8ff))
+* **deps:** update dependency dayjs to ^1.11.18 ([#3982](https://github.com/homarr-labs/homarr/issues/3982)) ([5e92e66](https://github.com/homarr-labs/homarr/commit/5e92e66803ddf9256fce8a92aec06dabe2491edc))
+* **deps:** update dependency drizzle-orm to ^0.44.5 ([#3962](https://github.com/homarr-labs/homarr/issues/3962)) ([ea4960e](https://github.com/homarr-labs/homarr/commit/ea4960e11332af0062df964258d9e24def0984e7))
+* **deps:** update dependency next-intl to v4.3.5 ([#3937](https://github.com/homarr-labs/homarr/issues/3937)) ([81a7f3e](https://github.com/homarr-labs/homarr/commit/81a7f3e93dfd52eea2c87cae8f2d66dd312f7055))
+* **deps:** update dependency sass to ^1.91.0 ([#3965](https://github.com/homarr-labs/homarr/issues/3965)) ([0e5f43c](https://github.com/homarr-labs/homarr/commit/0e5f43c1c38a7e0186d86c29a73477f943eeb416))
+* **deps:** update dependency swagger-ui-react to ^5.28.0 ([#3985](https://github.com/homarr-labs/homarr/issues/3985)) ([d2e9b5e](https://github.com/homarr-labs/homarr/commit/d2e9b5e983e2f277da30e98ad313e1afd35d70d3))
+* **deps:** update dependency tsx to v4.20.5 ([#3938](https://github.com/homarr-labs/homarr/issues/3938)) ([93186c3](https://github.com/homarr-labs/homarr/commit/93186c3be1fdcf6c215efcd8d7236fc44fc74d77))
+* **deps:** update dependency typescript-eslint to ^8.41.0 ([#3963](https://github.com/homarr-labs/homarr/issues/3963)) ([be0e783](https://github.com/homarr-labs/homarr/commit/be0e78371eb98740f313b1abd20413cbafa68a20))
+* **deps:** update dependency undici to v7.15.0 ([#3949](https://github.com/homarr-labs/homarr/issues/3949)) ([f166d15](https://github.com/homarr-labs/homarr/commit/f166d153fee521ef31a5328f082b4f52fbfd7239))
+* **deps:** update dependency zod to ^4.1.1 ([#3950](https://github.com/homarr-labs/homarr/issues/3950)) ([94eb677](https://github.com/homarr-labs/homarr/commit/94eb6772b9216b6377f6306b2a88c2bfe58bfb59))
+* **deps:** update dependency zod to ^4.1.5 ([#3961](https://github.com/homarr-labs/homarr/issues/3961)) ([9165422](https://github.com/homarr-labs/homarr/commit/916542210d9bfbb40abf27123f4989ec15dcd45b))
+* **deps:** update dependency zod-form-data to ^3.0.1 ([#3986](https://github.com/homarr-labs/homarr/issues/3986)) ([75683c2](https://github.com/homarr-labs/homarr/commit/75683c206d06da3b54c5ab0605b2a4b37674bbd6))
+* **deps:** update mantine monorepo to ^8.2.7 ([#3939](https://github.com/homarr-labs/homarr/issues/3939)) ([5d90809](https://github.com/homarr-labs/homarr/commit/5d908093ce3c8b395547681ae0a428afd08a255d))
+* **deps:** update mantine monorepo to ^8.2.8 ([#4004](https://github.com/homarr-labs/homarr/issues/4004)) ([eef6b86](https://github.com/homarr-labs/homarr/commit/eef6b86ad647fe955bdb125f504b4a98a79baf03))
+* **deps:** update nextjs monorepo to v15.5.1 ([#3971](https://github.com/homarr-labs/homarr/issues/3971)) ([a1def95](https://github.com/homarr-labs/homarr/commit/a1def958525816ec41198407d6d84ef9384be58f))
+* **deps:** update nextjs monorepo to v15.5.2 ([#3972](https://github.com/homarr-labs/homarr/issues/3972)) ([b0fe8a9](https://github.com/homarr-labs/homarr/commit/b0fe8a9f653e09cb3f861f39f06bb8d4e8dae006))
+* **deps:** update tanstack-query monorepo to ^5.85.6 ([#3996](https://github.com/homarr-labs/homarr/issues/3996)) ([4e4483c](https://github.com/homarr-labs/homarr/commit/4e4483c42d9edd3187981e57694721ff5337be8e))
+* **deps:** update tanstack-query monorepo to ^5.87.1 ([#3997](https://github.com/homarr-labs/homarr/issues/3997)) ([d7146d8](https://github.com/homarr-labs/homarr/commit/d7146d82d14885cffb24e14e7e5a610fdeec1b03))
+* **deps:** update trpc monorepo to ^11.5.0 ([#3951](https://github.com/homarr-labs/homarr/issues/3951)) ([88eed15](https://github.com/homarr-labs/homarr/commit/88eed15fafbc68c1c669c28ff576aca503acd585))
+* **header:** avatar menu flashes when opening on mobile ([#3999](https://github.com/homarr-labs/homarr/issues/3999)) ([9cb8261](https://github.com/homarr-labs/homarr/commit/9cb8261ddc5701ff5d5786ea1fba823e1e9317b2))
+* **widgets:** improve integration selection ([#3969](https://github.com/homarr-labs/homarr/issues/3969)) ([65b9ddd](https://github.com/homarr-labs/homarr/commit/65b9ddd771a573330b4c40966f10bd1fc36a6e1d))
+
+## [1.35.1](https://github.com/homarr-labs/homarr/compare/v1.35.0...v1.35.1) (2025-09-03)
+
+### Bug Fixes
+
+* **db:** increase integration kind limit from 16 to 64 characters ([8ff29b8](https://github.com/homarr-labs/homarr/commit/8ff29b82e5133ba0b8eaf2cf88de9bca31128a68))
+
## [1.35.0](https://github.com/homarr-labs/homarr/compare/v1.34.0...v1.35.0) (2025-08-29)
### Features
diff --git a/apps/nextjs/next.config.ts b/apps/nextjs/next.config.ts
index 5f21d74e4..be0798daa 100644
--- a/apps/nextjs/next.config.ts
+++ b/apps/nextjs/next.config.ts
@@ -42,9 +42,11 @@ const nextConfig: NextConfig = {
headers: [
{
key: "Content-Security-Policy",
+ // worker-src / media-src with blob: is necessary for video.js, see https://github.com/homarr-labs/homarr/issues/3912 and https://stackoverflow.com/questions/65792855/problem-with-video-js-and-content-security-policy-csp
value: `
default-src 'self';
script-src * 'unsafe-inline' 'unsafe-eval';
+ worker-src * blob:;
base-uri 'self';
connect-src *;
style-src * 'unsafe-inline';
@@ -53,7 +55,7 @@ const nextConfig: NextConfig = {
form-action 'self';
img-src * data:;
font-src * data:;
- media-src * data:;
+ media-src * data: blob:;
`
.replace(/\s{2,}/g, " ")
.trim(),
diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json
index bb5120cda..b1e8024e8 100644
--- a/apps/nextjs/package.json
+++ b/apps/nextjs/package.json
@@ -50,42 +50,42 @@
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@homarr/widgets": "workspace:^0.1.0",
- "@mantine/colors-generator": "^8.2.7",
- "@mantine/core": "^8.2.7",
- "@mantine/dropzone": "^8.2.7",
- "@mantine/hooks": "^8.2.7",
- "@mantine/modals": "^8.2.7",
- "@mantine/tiptap": "^8.2.7",
+ "@mantine/colors-generator": "^8.3.1",
+ "@mantine/core": "^8.3.1",
+ "@mantine/dropzone": "^8.3.1",
+ "@mantine/hooks": "^8.3.1",
+ "@mantine/modals": "^8.3.1",
+ "@mantine/tiptap": "^8.3.1",
"@million/lint": "1.0.14",
"@tabler/icons-react": "^3.34.1",
- "@tanstack/react-query": "^5.85.5",
- "@tanstack/react-query-devtools": "^5.85.5",
- "@tanstack/react-query-next-experimental": "^5.85.5",
- "@trpc/client": "^11.5.0",
- "@trpc/next": "^11.5.0",
- "@trpc/react-query": "^11.5.0",
- "@trpc/server": "^11.5.0",
+ "@tanstack/react-query": "^5.87.1",
+ "@tanstack/react-query-devtools": "^5.87.1",
+ "@tanstack/react-query-next-experimental": "^5.87.1",
+ "@trpc/client": "^11.5.1",
+ "@trpc/next": "^11.5.1",
+ "@trpc/react-query": "^11.5.1",
+ "@trpc/server": "^11.5.1",
"@xterm/addon-canvas": "^0.7.0",
"@xterm/addon-fit": "0.10.0",
"@xterm/xterm": "^5.5.0",
"chroma-js": "^3.1.2",
"clsx": "^2.1.1",
- "dayjs": "^1.11.13",
- "dotenv": "^17.2.1",
+ "dayjs": "^1.11.18",
+ "dotenv": "^17.2.2",
"flag-icons": "^7.5.0",
"glob": "^11.0.3",
- "jotai": "^2.13.1",
+ "jotai": "^2.14.0",
"mantine-react-table": "2.0.0-beta.9",
- "next": "15.5.0",
+ "next": "15.5.2",
"postcss-preset-mantine": "^1.18.0",
"prismjs": "^1.30.0",
"react": "19.1.1",
"react-dom": "19.1.1",
"react-error-boundary": "^6.0.0",
"react-simple-code-editor": "^0.14.1",
- "sass": "^1.91.0",
+ "sass": "^1.92.1",
"superjson": "2.2.2",
- "swagger-ui-react": "^5.27.1",
+ "swagger-ui-react": "^5.28.1",
"use-deep-compare-effect": "^1.8.1",
"zod": "^4.1.5"
},
@@ -94,13 +94,13 @@
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/chroma-js": "3.1.1",
- "@types/node": "^22.18.0",
+ "@types/node": "^22.18.1",
"@types/prismjs": "^1.26.5",
"@types/react": "19.1.12",
"@types/react-dom": "19.1.9",
"@types/swagger-ui-react": "^5.18.0",
"concurrently": "^9.2.1",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"node-loader": "^2.1.0",
"prettier": "^3.6.2",
"typescript": "^5.9.2"
diff --git a/apps/nextjs/src/app/[locale]/boards/[name]/settings/page.tsx b/apps/nextjs/src/app/[locale]/boards/[name]/settings/page.tsx
index 31dfd48c3..a728e8949 100644
--- a/apps/nextjs/src/app/[locale]/boards/[name]/settings/page.tsx
+++ b/apps/nextjs/src/app/[locale]/boards/[name]/settings/page.tsx
@@ -61,6 +61,10 @@ const getBoardAndPermissionsAsync = async (params: Awaited) =>
notFound();
}
+ if (error instanceof TRPCError && error.code === "BAD_REQUEST") {
+ notFound();
+ }
+
throw error;
}
};
diff --git a/apps/nextjs/src/app/[locale]/boards/_layout-creator.tsx b/apps/nextjs/src/app/[locale]/boards/_layout-creator.tsx
index c04d6fe56..da1880963 100644
--- a/apps/nextjs/src/app/[locale]/boards/_layout-creator.tsx
+++ b/apps/nextjs/src/app/[locale]/boards/_layout-creator.tsx
@@ -45,6 +45,10 @@ export const createBoardLayout = ({
notFound();
}
+ if (error instanceof TRPCError && error.code === "BAD_REQUEST") {
+ notFound();
+ }
+
throw error;
});
const colorScheme = await getCurrentColorSchemeAsync();
diff --git a/apps/nextjs/src/app/[locale]/manage/integrations/_components/secrets/integration-secret-icons.ts b/apps/nextjs/src/app/[locale]/manage/integrations/_components/secrets/integration-secret-icons.ts
index 008d8b34f..0faccc11c 100644
--- a/apps/nextjs/src/app/[locale]/manage/integrations/_components/secrets/integration-secret-icons.ts
+++ b/apps/nextjs/src/app/[locale]/manage/integrations/_components/secrets/integration-secret-icons.ts
@@ -1,9 +1,11 @@
import {
+ IconCode,
IconGrid3x3,
IconKey,
IconMessage,
IconPassword,
IconPasswordUser,
+ IconPlug,
IconServer,
IconUser,
} from "@tabler/icons-react";
@@ -21,4 +23,7 @@ export const integrationSecretIcons = {
topic: IconMessage,
opnsenseApiKey: IconKey,
opnsenseApiSecret: IconPassword,
+ githubAppId: IconCode,
+ githubInstallationId: IconPlug,
+ privateKey: IconKey,
} satisfies Record;
diff --git a/apps/nextjs/src/app/[locale]/manage/integrations/_components/secrets/integration-secret-inputs.tsx b/apps/nextjs/src/app/[locale]/manage/integrations/_components/secrets/integration-secret-inputs.tsx
index 45f5b3156..78e2d78c1 100644
--- a/apps/nextjs/src/app/[locale]/manage/integrations/_components/secrets/integration-secret-inputs.tsx
+++ b/apps/nextjs/src/app/[locale]/manage/integrations/_components/secrets/integration-secret-inputs.tsx
@@ -1,7 +1,7 @@
"use client";
import type { ChangeEventHandler, FocusEventHandler } from "react";
-import { PasswordInput, TextInput } from "@mantine/core";
+import { PasswordInput, Textarea, TextInput } from "@mantine/core";
import { integrationSecretKindObject } from "@homarr/definitions";
import type { IntegrationSecretKind } from "@homarr/definitions";
@@ -14,9 +14,9 @@ interface IntegrationSecretInputProps {
label?: string;
kind: IntegrationSecretKind;
value?: string;
- onChange: ChangeEventHandler;
- onFocus?: FocusEventHandler;
- onBlur?: FocusEventHandler;
+ onChange: ChangeEventHandler;
+ onFocus?: FocusEventHandler;
+ onBlur?: FocusEventHandler;
error?: string;
}
@@ -31,6 +31,19 @@ export const IntegrationSecretInput = (props: IntegrationSecretInputProps) => {
const PublicSecretInput = ({ kind, ...props }: IntegrationSecretInputProps) => {
const t = useI18n();
const Icon = integrationSecretIcons[kind];
+ const { multiline } = integrationSecretKindObject[kind];
+ if (multiline) {
+ return (
+ }
+ autosize
+ minRows={2}
+ />
+ );
+ }
return (
{
const PrivateSecretInput = ({ kind, ...props }: IntegrationSecretInputProps) => {
const t = useI18n();
const Icon = integrationSecretIcons[kind];
+ const { multiline } = integrationSecretKindObject[kind];
+
+ if (multiline) {
+ return (
+ }
+ autosize
+ minRows={2}
+ />
+ );
+ }
return (
t("management.page.tool.tasks.interval.seconds", { interval: 1 }),
+ },
{
value: "*/5 * * * * *",
label: (t: TranslationFunction) => t("management.page.tool.tasks.interval.seconds", { interval: 5 }),
diff --git a/apps/nextjs/src/app/[locale]/widgets/[kind]/_content.tsx b/apps/nextjs/src/app/[locale]/widgets/[kind]/_content.tsx
index 836800fa7..1dc7ac894 100644
--- a/apps/nextjs/src/app/[locale]/widgets/[kind]/_content.tsx
+++ b/apps/nextjs/src/app/[locale]/widgets/[kind]/_content.tsx
@@ -10,7 +10,7 @@ import type { IntegrationKind, WidgetKind } from "@homarr/definitions";
import { useModalAction } from "@homarr/modals";
import { showSuccessNotification } from "@homarr/notifications";
import { useSettings } from "@homarr/settings";
-import { useScopedI18n } from "@homarr/translation/client";
+import { useI18n } from "@homarr/translation/client";
import type { BoardItemAdvancedOptions } from "@homarr/validation/shared";
import { loadWidgetDynamic, reduceWidgetOptionsWithDefaultValues, widgetImports } from "@homarr/widgets";
import { WidgetError } from "@homarr/widgets/errors";
@@ -31,7 +31,7 @@ interface WidgetPreviewPageContentProps {
export const WidgetPreviewPageContent = ({ kind, integrationData }: WidgetPreviewPageContentProps) => {
const settings = useSettings();
- const t = useScopedI18n("widgetPreview");
+ const t = useI18n();
const { openModal: openWidgetEditModal } = useModalAction(WidgetEditModal);
const { openModal: openPreviewDimensionsModal } = useModalAction(PreviewDimensionsModal);
const currentDefinition = useMemo(() => widgetImports[kind].definition, [kind]);
@@ -55,20 +55,27 @@ export const WidgetPreviewPageContent = ({ kind, integrationData }: WidgetPrevie
});
const handleOpenEditWidgetModal = useCallback(() => {
- openWidgetEditModal({
- kind,
- value: state,
- onSuccessfulEdit: (value) => {
- setState(value);
+ openWidgetEditModal(
+ {
+ kind,
+ value: state,
+ onSuccessfulEdit: (value) => {
+ setState(value);
+ },
+ integrationData: integrationData.filter(
+ (integration) =>
+ "supportedIntegrations" in currentDefinition &&
+ (currentDefinition.supportedIntegrations as string[]).some((kind) => kind === integration.kind),
+ ),
+ integrationSupport: "supportedIntegrations" in currentDefinition,
+ settings,
},
- integrationData: integrationData.filter(
- (integration) =>
- "supportedIntegrations" in currentDefinition &&
- (currentDefinition.supportedIntegrations as string[]).some((kind) => kind === integration.kind),
- ),
- integrationSupport: "supportedIntegrations" in currentDefinition,
- settings,
- });
+ {
+ title(t) {
+ return `${t("item.edit.title")} - ${t(`widget.${kind}.name`)}`;
+ },
+ },
+ );
}, [currentDefinition, integrationData, kind, openWidgetEditModal, settings, state]);
const Comp = loadWidgetDynamic(kind);
@@ -76,7 +83,7 @@ export const WidgetPreviewPageContent = ({ kind, integrationData }: WidgetPrevie
const toggleEditMode = useCallback(() => {
setEditMode((editMode) => !editMode);
showSuccessNotification({
- message: editMode ? t("toggle.disabled") : t("toggle.enabled"),
+ message: editMode ? t("widgetPreview.toggle.disabled") : t("widgetPreview.toggle.enabled"),
});
}, [editMode, t]);
diff --git a/apps/nextjs/src/components/board/items/item-menu.tsx b/apps/nextjs/src/components/board/items/item-menu.tsx
index e7072fea4..2279755bf 100644
--- a/apps/nextjs/src/components/board/items/item-menu.tsx
+++ b/apps/nextjs/src/components/board/items/item-menu.tsx
@@ -49,36 +49,43 @@ export const BoardItemMenu = ({
if (!isEditMode || isPending) return null;
const openEditModal = () => {
- openModal({
- kind: item.kind,
- value: {
- advancedOptions: item.advancedOptions,
- options: item.options,
- integrationIds: item.integrationIds,
+ openModal(
+ {
+ kind: item.kind,
+ value: {
+ advancedOptions: item.advancedOptions,
+ options: item.options,
+ integrationIds: item.integrationIds,
+ },
+ onSuccessfulEdit: ({ options, integrationIds, advancedOptions }) => {
+ updateItemOptions({
+ itemId: item.id,
+ newOptions: options,
+ });
+ updateItemAdvancedOptions({
+ itemId: item.id,
+ newAdvancedOptions: advancedOptions,
+ });
+ updateItemIntegrations({
+ itemId: item.id,
+ newIntegrations: integrationIds,
+ });
+ refResetErrorBoundaryOnNextRender.current = true;
+ },
+ integrationData: (integrationData ?? []).filter(
+ (integration) =>
+ "supportedIntegrations" in currentDefinition &&
+ (currentDefinition.supportedIntegrations as string[]).some((kind) => kind === integration.kind),
+ ),
+ integrationSupport: "supportedIntegrations" in currentDefinition,
+ settings,
},
- onSuccessfulEdit: ({ options, integrationIds, advancedOptions }) => {
- updateItemOptions({
- itemId: item.id,
- newOptions: options,
- });
- updateItemAdvancedOptions({
- itemId: item.id,
- newAdvancedOptions: advancedOptions,
- });
- updateItemIntegrations({
- itemId: item.id,
- newIntegrations: integrationIds,
- });
- refResetErrorBoundaryOnNextRender.current = true;
+ {
+ title(t) {
+ return `${t("item.edit.title")} - ${t(`widget.${item.kind}.name`)}`;
+ },
},
- integrationData: (integrationData ?? []).filter(
- (integration) =>
- "supportedIntegrations" in currentDefinition &&
- (currentDefinition.supportedIntegrations as string[]).some((kind) => kind === integration.kind),
- ),
- integrationSupport: "supportedIntegrations" in currentDefinition,
- settings,
- });
+ );
};
const openRemoveModal = () => {
diff --git a/apps/nextjs/src/components/layout/header.tsx b/apps/nextjs/src/components/layout/header.tsx
index dd5d51243..e1f038343 100644
--- a/apps/nextjs/src/components/layout/header.tsx
+++ b/apps/nextjs/src/components/layout/header.tsx
@@ -17,7 +17,7 @@ interface Props {
export const MainHeader = ({ logo, actions, hasNavigation = true }: Props) => {
return (
-
+
{hasNavigation && }
diff --git a/apps/tasks/package.json b/apps/tasks/package.json
index 8edc8be55..b342cafb0 100644
--- a/apps/tasks/package.json
+++ b/apps/tasks/package.json
@@ -21,6 +21,7 @@
"prettier": "@homarr/prettier-config",
"dependencies": {
"@homarr/analytics": "workspace:^0.1.0",
+ "@homarr/auth": "workspace:^0.1.0",
"@homarr/common": "workspace:^0.1.0",
"@homarr/cron-job-api": "workspace:^0.1.0",
"@homarr/cron-jobs": "workspace:^0.1.0",
@@ -32,12 +33,13 @@
"@homarr/log": "workspace:^",
"@homarr/ping": "workspace:^0.1.0",
"@homarr/redis": "workspace:^0.1.0",
+ "@homarr/request-handler": "workspace:^0.1.0",
"@homarr/server-settings": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@homarr/widgets": "workspace:^0.1.0",
- "dayjs": "^1.11.13",
- "dotenv": "^17.2.1",
- "fastify": "^5.5.0",
+ "dayjs": "^1.11.18",
+ "dotenv": "^17.2.2",
+ "fastify": "^5.6.0",
"superjson": "2.2.2",
"undici": "7.15.0"
},
@@ -45,12 +47,12 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "@types/node": "^22.18.0",
+ "@types/node": "^22.18.1",
"dotenv-cli": "^10.0.0",
"esbuild": "^0.25.9",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"prettier": "^3.6.2",
- "tsx": "4.20.5",
+ "tsx": "4.20.4",
"typescript": "^5.9.2"
}
}
diff --git a/apps/tasks/src/job-manager.ts b/apps/tasks/src/job-manager.ts
index 475368d89..e19f2c315 100644
--- a/apps/tasks/src/job-manager.ts
+++ b/apps/tasks/src/job-manager.ts
@@ -26,7 +26,6 @@ export class JobManager implements IJobManager {
logger.info(`Updating cron job interval name="${name}" expression="${cron}"`);
const job = this.jobGroup.getJobRegistry().get(name);
if (!job) throw new Error(`Job ${name} not found`);
- if (job.cronExpression === "never") throw new Error(`Job ${name} cannot be updated as it is set to "never"`);
if (!validateCron(cron)) {
throw new Error(`Invalid cron expression: ${cron}`);
}
@@ -45,7 +44,6 @@ export class JobManager implements IJobManager {
logger.info(`Disabling cron job name="${name}"`);
const job = this.jobGroup.getJobRegistry().get(name);
if (!job) throw new Error(`Job ${name} not found`);
- if (job.cronExpression === "never") throw new Error(`Job ${name} cannot be disabled as it is set to "never"`);
await this.updateConfigurationAsync(name, { isEnabled: false });
await this.jobGroup.stopAsync(name);
diff --git a/apps/tasks/src/main.ts b/apps/tasks/src/main.ts
index 57cbd1d7b..ad6181880 100644
--- a/apps/tasks/src/main.ts
+++ b/apps/tasks/src/main.ts
@@ -1,5 +1,5 @@
// This import has to be the first import in the file so that the agent is overridden before any other modules are imported.
-import "./undici-log-agent-override";
+import "./overrides";
import type { FastifyTRPCPluginOptions } from "@trpc/server/adapters/fastify";
import { fastifyTRPCPlugin } from "@trpc/server/adapters/fastify";
@@ -13,6 +13,7 @@ import { db } from "@homarr/db";
import { logger } from "@homarr/log";
import { JobManager } from "./job-manager";
+import { onStartAsync } from "./on-start";
const server = fastify({
maxParamLength: 5000,
@@ -32,6 +33,7 @@ server.register(fastifyTRPCPlugin, {
});
void (async () => {
+ await onStartAsync();
await jobGroup.initializeAsync();
await jobGroup.startAllAsync();
diff --git a/apps/tasks/src/on-start/index.ts b/apps/tasks/src/on-start/index.ts
new file mode 100644
index 000000000..cb9564d1b
--- /dev/null
+++ b/apps/tasks/src/on-start/index.ts
@@ -0,0 +1,7 @@
+import { invalidateUpdateCheckerCacheAsync } from "./invalidate-update-checker-cache";
+import { cleanupSessionsAsync } from "./session-cleanup";
+
+export async function onStartAsync() {
+ await cleanupSessionsAsync();
+ await invalidateUpdateCheckerCacheAsync();
+}
diff --git a/apps/tasks/src/on-start/invalidate-update-checker-cache.ts b/apps/tasks/src/on-start/invalidate-update-checker-cache.ts
new file mode 100644
index 000000000..7bbda3dec
--- /dev/null
+++ b/apps/tasks/src/on-start/invalidate-update-checker-cache.ts
@@ -0,0 +1,18 @@
+import { logger } from "@homarr/log";
+import { updateCheckerRequestHandler } from "@homarr/request-handler/update-checker";
+
+const localLogger = logger.child({ module: "invalidateUpdateCheckerCache" });
+
+/**
+ * Invalidates the update checker cache on startup to ensure fresh data.
+ * It is important as we want to avoid showing pending updates after the update to latest version.
+ */
+export async function invalidateUpdateCheckerCacheAsync() {
+ try {
+ const handler = updateCheckerRequestHandler.handler({});
+ await handler.invalidateAsync();
+ localLogger.debug("Update checker cache invalidated");
+ } catch (error) {
+ localLogger.error(new Error("Failed to invalidate update checker cache", { cause: error }));
+ }
+}
diff --git a/apps/tasks/src/on-start/session-cleanup.ts b/apps/tasks/src/on-start/session-cleanup.ts
new file mode 100644
index 000000000..4dfe46341
--- /dev/null
+++ b/apps/tasks/src/on-start/session-cleanup.ts
@@ -0,0 +1,39 @@
+import { env } from "@homarr/auth/env";
+import { db, eq, inArray } from "@homarr/db";
+import { sessions, users } from "@homarr/db/schema";
+import { supportedAuthProviders } from "@homarr/definitions";
+import { logger } from "@homarr/log";
+
+const localLogger = logger.child({ module: "sessionCleanup" });
+
+/**
+ * Deletes sessions for users that have inactive auth providers.
+ * Sessions from other providers are deleted so they can no longer be used.
+ */
+export async function cleanupSessionsAsync() {
+ try {
+ const currentAuthProviders = env.AUTH_PROVIDERS;
+
+ const inactiveAuthProviders = supportedAuthProviders.filter((provider) => !currentAuthProviders.includes(provider));
+ const subQuery = db
+ .select({ id: users.id })
+ .from(users)
+ .where(inArray(users.provider, inactiveAuthProviders))
+ .as("sq");
+ const sessionsWithInactiveProviders = await db
+ .select({ userId: sessions.userId })
+ .from(sessions)
+ .rightJoin(subQuery, eq(sessions.userId, subQuery.id));
+
+ const userIds = sessionsWithInactiveProviders.map(({ userId }) => userId).filter((value) => value !== null);
+ await db.delete(sessions).where(inArray(sessions.userId, userIds));
+
+ if (sessionsWithInactiveProviders.length > 0) {
+ localLogger.info(`Deleted sessions for inactive providers count=${userIds.length}`);
+ } else {
+ localLogger.debug("No sessions to delete");
+ }
+ } catch (error) {
+ localLogger.error(new Error("Failed to clean up sessions", { cause: error }));
+ }
+}
diff --git a/apps/tasks/src/undici-log-agent-override.ts b/apps/tasks/src/overrides.ts
similarity index 100%
rename from apps/tasks/src/undici-log-agent-override.ts
rename to apps/tasks/src/overrides.ts
diff --git a/apps/websocket/package.json b/apps/websocket/package.json
index 853e1e454..872ca90f5 100644
--- a/apps/websocket/package.json
+++ b/apps/websocket/package.json
@@ -25,8 +25,8 @@
"@homarr/log": "workspace:^",
"@homarr/redis": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
- "dotenv": "^17.2.1",
- "tsx": "4.20.5",
+ "dotenv": "^17.2.2",
+ "tsx": "4.20.4",
"ws": "^8.18.3"
},
"devDependencies": {
@@ -35,7 +35,7 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/ws": "^8.18.1",
"esbuild": "^0.25.9",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"prettier": "^3.6.2",
"typescript": "^5.9.2"
}
diff --git a/docs/README.md b/docs/README.md
index 215fa5f9f..5e5596651 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -30,6 +30,8 @@
+
+

- 🖌️ Highly customizable with an extensive drag and drop grid system
@@ -293,6 +295,13 @@
+
+
+
+ TrueNAS
+
+ |
+
diff --git a/docs/img/screenshot.png b/docs/img/screenshot.png
new file mode 100644
index 000000000..963f6d8fb
Binary files /dev/null and b/docs/img/screenshot.png differ
diff --git a/package.json b/package.json
index b2068a8f3..dedf76747 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "homarr",
- "version": "1.35.0",
+ "version": "1.37.0",
"private": true,
"scripts": {
"build": "cross-env CI=true turbo build",
@@ -39,26 +39,26 @@
"@semantic-release/changelog": "^6.0.3",
"@semantic-release/commit-analyzer": "^13.0.1",
"@semantic-release/git": "^10.0.1",
- "@semantic-release/github": "^11.0.4",
+ "@semantic-release/github": "^11.0.5",
"@semantic-release/npm": "^12.0.2",
- "@semantic-release/release-notes-generator": "^14.0.3",
+ "@semantic-release/release-notes-generator": "^14.1.0",
"@testcontainers/redis": "^11.5.1",
"@turbo/gen": "^2.5.6",
- "@vitejs/plugin-react": "^5.0.1",
+ "@vitejs/plugin-react": "^5.0.2",
"@vitest/coverage-v8": "^3.2.4",
"@vitest/ui": "^3.2.4",
"conventional-changelog-conventionalcommits": "^9.1.0",
"cross-env": "^10.0.0",
"jsdom": "^26.1.0",
"prettier": "^3.6.2",
- "semantic-release": "^24.2.7",
+ "semantic-release": "^24.2.8",
"testcontainers": "^11.5.1",
"turbo": "^2.5.6",
"typescript": "^5.9.2",
"vite-tsconfig-paths": "^5.1.4",
"vitest": "^3.2.4"
},
- "packageManager": "pnpm@10.15.0",
+ "packageManager": "pnpm@10.15.1",
"engines": {
"node": ">=22.19.0"
},
@@ -75,24 +75,24 @@
"tree-sitter-json"
],
"overrides": {
- "@babel/helpers@<7.26.10": ">=7.28.3",
- "@babel/runtime@<7.26.10": ">=7.28.3",
- "axios@>=1.0.0 <1.8.2": ">=1.11.0",
+ "@babel/helpers@<7.26.10": ">=7.28.4",
+ "@babel/runtime@<7.26.10": ">=7.28.4",
+ "axios@>=1.0.0 <1.8.2": ">=1.12.1",
"brace-expansion@>=2.0.0 <=2.0.1": ">=4.0.1",
"brace-expansion@>=1.0.0 <=1.1.11": ">=4.0.1",
"esbuild@<=0.24.2": ">=0.25.9",
"form-data@>=4.0.0 <4.0.4": ">=4.0.4",
- "hono@<4.6.5": ">=4.9.5",
+ "hono@<4.6.5": ">=4.9.7",
"linkifyjs@<4.3.2": ">=4.3.2",
"nanoid@>=4.0.0 <5.0.9": ">=5.1.5",
"prismjs@<1.30.0": ">=1.30.0",
"proxmox-api>undici": "7.15.0",
- "rollup@>=4.0.0 <4.22.4": ">=4.49.0",
+ "rollup@>=4.0.0 <4.22.4": ">=4.50.1",
"sha.js@<=2.4.11": ">=2.4.12",
"tar-fs@>=3.0.0 <3.0.9": ">=3.1.0",
"tar-fs@>=2.0.0 <2.1.3": ">=3.1.0",
"tmp@<=0.2.3": ">=0.2.5",
- "vite@>=5.0.0 <=5.4.18": ">=7.1.3"
+ "vite@>=5.0.0 <=5.4.18": ">=7.1.5"
},
"patchedDependencies": {
"@types/node-unifi": "patches/@types__node-unifi.patch",
diff --git a/packages/analytics/package.json b/packages/analytics/package.json
index 0614df6b0..c0a9e1bc5 100644
--- a/packages/analytics/package.json
+++ b/packages/analytics/package.json
@@ -32,7 +32,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/api/package.json b/packages/api/package.json
index dad9bab4a..803e6ee97 100644
--- a/packages/api/package.json
+++ b/packages/api/package.json
@@ -42,13 +42,13 @@
"@homarr/server-settings": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@kubernetes/client-node": "^1.3.0",
- "@tanstack/react-query": "^5.85.5",
- "@trpc/client": "^11.5.0",
- "@trpc/react-query": "^11.5.0",
- "@trpc/server": "^11.5.0",
- "@trpc/tanstack-react-query": "^11.5.0",
+ "@tanstack/react-query": "^5.87.1",
+ "@trpc/client": "^11.5.1",
+ "@trpc/react-query": "^11.5.1",
+ "@trpc/server": "^11.5.1",
+ "@trpc/tanstack-react-query": "^11.5.1",
"lodash.clonedeep": "^4.5.0",
- "next": "15.5.0",
+ "next": "15.5.2",
"react": "19.1.1",
"react-dom": "19.1.1",
"superjson": "2.2.2",
@@ -59,7 +59,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"prettier": "^3.6.2",
"typescript": "^5.9.2"
}
diff --git a/packages/api/src/router/integration/integration-test-connection.ts b/packages/api/src/router/integration/integration-test-connection.ts
index b48cb9386..a911ead10 100644
--- a/packages/api/src/router/integration/integration-test-connection.ts
+++ b/packages/api/src/router/integration/integration-test-connection.ts
@@ -25,16 +25,6 @@ export const testConnectionAsync = async (
integrationUrl: integration.url,
});
- const formSecrets = integration.secrets
- .filter((secret) => secret.value !== null)
- .map((secret) => ({
- ...secret,
- // We ensured above that the value is not null
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- value: secret.value!,
- source: "form" as const,
- }));
-
const decryptedDbSecrets = dbSecrets
.map((secret) => {
try {
@@ -55,6 +45,15 @@ export const testConnectionAsync = async (
})
.filter((secret) => secret !== null);
+ const formSecrets = integration.secrets
+ .map((secret) => ({
+ ...secret,
+ // If the value is not defined in the form (because we only changed other values) we use the existing value from the db if it exists
+ value: secret.value ?? decryptedDbSecrets.find((dbSecret) => dbSecret.kind === secret.kind)?.value ?? null,
+ source: "form" as const,
+ }))
+ .filter((secret): secret is SourcedIntegrationSecret<"form"> => secret.value !== null);
+
const sourcedSecrets = [...formSecrets, ...decryptedDbSecrets];
const secretKinds = getSecretKindOption(integration.kind, sourcedSecrets);
@@ -89,10 +88,10 @@ export const testConnectionAsync = async (
return result;
};
-interface SourcedIntegrationSecret {
+interface SourcedIntegrationSecret {
kind: IntegrationSecretKind;
value: string;
- source: "db" | "form";
+ source: TSource;
}
const getSecretKindOption = (kind: IntegrationKind, sourcedSecrets: SourcedIntegrationSecret[]) => {
@@ -111,7 +110,9 @@ const getSecretKindOption = (kind: IntegrationKind, sourcedSecrets: SourcedInteg
}
const onlyFormSecretsKindOptions = matchingSecretKindOptions.filter((secretKinds) =>
- sourcedSecrets.filter((secret) => secretKinds.includes(secret.kind)).every((secret) => secret.source === "form"),
+ secretKinds.every((secretKind) =>
+ sourcedSecrets.find((secret) => secret.kind === secretKind && secret.source === "form"),
+ ),
);
if (onlyFormSecretsKindOptions.length >= 1) {
diff --git a/packages/api/src/router/kubernetes/router/cluster.ts b/packages/api/src/router/kubernetes/router/cluster.ts
index 0d7a77da1..e262ab8fa 100644
--- a/packages/api/src/router/kubernetes/router/cluster.ts
+++ b/packages/api/src/router/kubernetes/router/cluster.ts
@@ -184,12 +184,23 @@ function getProviders(versionInfo: VersionInfo, nodes: V1NodeList) {
if (versionInfo.gitVersion.includes("aks")) providers.add("AKS");
nodes.items.forEach((node) => {
- const nodeProviderLabel =
- node.metadata?.labels?.["node.kubernetes.io/instance-type"] ?? node.metadata?.labels?.provider ?? "";
+ const labels = node.metadata?.labels ?? {};
+ const nodeProviderLabel = labels["node.kubernetes.io/instance-type"] ?? labels.provider ?? "";
+
if (nodeProviderLabel.includes("aws")) providers.add("EKS");
if (nodeProviderLabel.includes("azure")) providers.add("AKS");
if (nodeProviderLabel.includes("gce")) providers.add("GKE");
if (nodeProviderLabel.includes("k3s")) providers.add("k3s");
+
+ const nodeInfo = node.status?.nodeInfo;
+ if (nodeInfo) {
+ const osImage = nodeInfo.osImage.toLowerCase();
+ const kernelVersion = nodeInfo.kernelVersion.toLowerCase();
+
+ if (osImage.includes("talos") || kernelVersion.includes("talos")) {
+ providers.add("Talos");
+ }
+ }
});
return Array.from(providers).join(", ");
diff --git a/packages/api/src/router/test/integration/integration-test-connection.spec.ts b/packages/api/src/router/test/integration/integration-test-connection.spec.ts
index bcd279b9a..ffc91dd0b 100644
--- a/packages/api/src/router/test/integration/integration-test-connection.spec.ts
+++ b/packages/api/src/router/test/integration/integration-test-connection.spec.ts
@@ -265,4 +265,77 @@ describe("testConnectionAsync should run test connection of integration", () =>
],
});
});
+
+ test("with input of existing github app", async () => {
+ // Arrange
+ const factorySpy = vi.spyOn(homarrIntegrations, "createIntegrationAsync");
+ const optionsSpy = vi.spyOn(homarrDefinitions, "getAllSecretKindOptions");
+ factorySpy.mockReturnValue(
+ Promise.resolve({
+ testConnectionAsync: async () => await Promise.resolve({ success: true }),
+ } as homarrIntegrations.PiHoleIntegrationV6),
+ );
+ optionsSpy.mockReturnValue([[], ["githubAppId", "githubInstallationId", "privateKey"]]);
+
+ const integration = {
+ id: "new",
+ name: "GitHub",
+ url: "https://api.github.com",
+ kind: "github" as const,
+ secrets: [
+ {
+ kind: "githubAppId" as const,
+ value: "345",
+ },
+ {
+ kind: "githubInstallationId" as const,
+ value: "456",
+ },
+ {
+ kind: "privateKey" as const,
+ value: null,
+ },
+ ],
+ };
+
+ const dbSecrets = [
+ {
+ kind: "githubAppId" as const,
+ value: "123.encrypted" as const,
+ },
+ {
+ kind: "githubInstallationId" as const,
+ value: "234.encrypted" as const,
+ },
+ {
+ kind: "privateKey" as const,
+ value: "privateKey.encrypted" as const,
+ },
+ ];
+
+ // Act
+ await testConnectionAsync(integration, dbSecrets);
+
+ // Assert
+ expect(factorySpy).toHaveBeenCalledWith({
+ id: "new",
+ name: "GitHub",
+ url: "https://api.github.com",
+ kind: "github" as const,
+ decryptedSecrets: [
+ expect.objectContaining({
+ kind: "githubAppId",
+ value: "345",
+ }),
+ expect.objectContaining({
+ kind: "githubInstallationId",
+ value: "456",
+ }),
+ expect.objectContaining({
+ kind: "privateKey",
+ value: "privateKey",
+ }),
+ ],
+ });
+ });
});
diff --git a/packages/api/src/router/widgets/health-monitoring.ts b/packages/api/src/router/widgets/health-monitoring.ts
index 49ebd294b..c16a600ed 100644
--- a/packages/api/src/router/widgets/health-monitoring.ts
+++ b/packages/api/src/router/widgets/health-monitoring.ts
@@ -9,7 +9,7 @@ import { createTRPCRouter, publicProcedure } from "../../trpc";
export const healthMonitoringRouter = createTRPCRouter({
getSystemHealthStatus: publicProcedure
- .concat(createManyIntegrationMiddleware("query", "openmediavault", "dashDot", "mock"))
+ .concat(createManyIntegrationMiddleware("query", "openmediavault", "dashDot", "truenas", "mock"))
.query(async ({ ctx }) => {
return await Promise.all(
ctx.integrations.map(async (integration) => {
@@ -26,7 +26,7 @@ export const healthMonitoringRouter = createTRPCRouter({
);
}),
subscribeSystemHealthStatus: publicProcedure
- .concat(createManyIntegrationMiddleware("query", "openmediavault", "dashDot", "mock"))
+ .concat(createManyIntegrationMiddleware("query", "openmediavault", "dashDot", "truenas", "mock"))
.subscription(({ ctx }) => {
return observable<{ integrationId: string; healthInfo: SystemHealthMonitoring; timestamp: Date }>((emit) => {
const unsubscribes: (() => void)[] = [];
diff --git a/packages/auth/package.json b/packages/auth/package.json
index 0ae05f085..b77b10524 100644
--- a/packages/auth/package.json
+++ b/packages/auth/package.json
@@ -35,7 +35,7 @@
"bcrypt": "^6.0.0",
"cookies": "^0.9.1",
"ldapts": "8.0.9",
- "next": "15.5.0",
+ "next": "15.5.2",
"next-auth": "5.0.0-beta.29",
"react": "19.1.1",
"react-dom": "19.1.1",
@@ -47,7 +47,7 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/bcrypt": "6.0.0",
"@types/cookies": "0.9.1",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"prettier": "^3.6.2",
"typescript": "^5.9.2"
}
diff --git a/packages/boards/package.json b/packages/boards/package.json
index b67076c50..4a440e06e 100644
--- a/packages/boards/package.json
+++ b/packages/boards/package.json
@@ -32,7 +32,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/certificates/package.json b/packages/certificates/package.json
index 6f77f3099..ca3fc4add 100644
--- a/packages/certificates/package.json
+++ b/packages/certificates/package.json
@@ -30,7 +30,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 978a8570b..ea894a0fc 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -28,14 +28,14 @@
"@homarr/common": "workspace:^0.1.0",
"@homarr/db": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
- "dotenv": "^17.2.1"
+ "dotenv": "^17.2.2"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"esbuild": "^0.25.9",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/common/env.ts b/packages/common/env.ts
index cbccc8b70..c52abbd25 100644
--- a/packages/common/env.ts
+++ b/packages/common/env.ts
@@ -24,10 +24,12 @@ export const env = createEnv({
message: `SECRET_ENCRYPTION_KEY must only contain hex characters${errorSuffix}`,
}),
NO_EXTERNAL_CONNECTION: createBooleanSchema(false),
+ ENABLE_DNS_CACHING: createBooleanSchema(false),
},
runtimeEnv: {
SECRET_ENCRYPTION_KEY: process.env.SECRET_ENCRYPTION_KEY,
NODE_ENV: process.env.NODE_ENV,
NO_EXTERNAL_CONNECTION: process.env.NO_EXTERNAL_CONNECTION,
+ ENABLE_DNS_CACHING: process.env.ENABLE_DNS_CACHING,
},
});
diff --git a/packages/common/package.json b/packages/common/package.json
index 33cad49e7..fca2e9586 100644
--- a/packages/common/package.json
+++ b/packages/common/package.json
@@ -8,6 +8,7 @@
".": "./index.ts",
"./types": "./src/types.ts",
"./server": "./src/server.ts",
+ "./init-dns": "./src/dns.ts",
"./client": "./src/client.ts",
"./env": "./env.ts"
},
@@ -29,8 +30,10 @@
"@homarr/core": "workspace:^0.1.0",
"@homarr/log": "workspace:^0.1.0",
"@paralleldrive/cuid2": "^2.2.2",
- "dayjs": "^1.11.13",
- "next": "15.5.0",
+ "dayjs": "^1.11.18",
+ "dns-caching": "^0.2.5",
+ "next": "15.5.2",
+ "octokit": "^5.0.3",
"react": "19.1.1",
"react-dom": "19.1.1",
"undici": "7.15.0",
@@ -41,7 +44,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/common/src/dns.ts b/packages/common/src/dns.ts
new file mode 100644
index 000000000..7a8578b2b
--- /dev/null
+++ b/packages/common/src/dns.ts
@@ -0,0 +1,26 @@
+import { DnsCacheManager } from "dns-caching";
+
+import { logger } from "@homarr/log";
+
+import { env } from "../env";
+
+// Add global type augmentation for homarr
+declare global {
+ var homarr: {
+ dnsCacheManager?: DnsCacheManager;
+ // add other properties if needed
+ };
+}
+
+// Initialize global.homarr if not present
+// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
+global.homarr ??= {};
+global.homarr.dnsCacheManager ??= new DnsCacheManager({
+ cacheMaxEntries: 1000,
+ forceMinTtl: 5 * 60 * 1000, // 5 minutes
+ logger,
+});
+
+if (env.ENABLE_DNS_CACHING) {
+ global.homarr.dnsCacheManager.initialize();
+}
diff --git a/packages/common/src/errors/http/handlers/index.ts b/packages/common/src/errors/http/handlers/index.ts
index 0288a6b6c..8c7d43944 100644
--- a/packages/common/src/errors/http/handlers/index.ts
+++ b/packages/common/src/errors/http/handlers/index.ts
@@ -3,3 +3,4 @@ export * from "./fetch-http-error-handler";
export * from "./ofetch-http-error-handler";
export * from "./axios-http-error-handler";
export * from "./tsdav-http-error-handler";
+export * from "./octokit-http-error-handler";
diff --git a/packages/common/src/errors/http/handlers/octokit-http-error-handler.ts b/packages/common/src/errors/http/handlers/octokit-http-error-handler.ts
new file mode 100644
index 000000000..3298770c2
--- /dev/null
+++ b/packages/common/src/errors/http/handlers/octokit-http-error-handler.ts
@@ -0,0 +1,24 @@
+import { RequestError as OctokitRequestError } from "octokit";
+
+import type { AnyRequestError } from "../request-error";
+import { ResponseError } from "../response-error";
+import { HttpErrorHandler } from "./http-error-handler";
+
+export class OctokitHttpErrorHandler extends HttpErrorHandler {
+ /**
+ * I wasn't able to get a request error triggered. Therefore we ignore them for now
+ * and just forward them as unknown errors
+ */
+ handleRequestError(_: unknown): AnyRequestError | undefined {
+ return undefined;
+ }
+
+ handleResponseError(error: unknown): ResponseError | undefined {
+ if (!(error instanceof OctokitRequestError)) return undefined;
+
+ return new ResponseError({
+ status: error.status,
+ url: error.response?.url,
+ });
+ }
+}
diff --git a/packages/common/src/fetch-agent.ts b/packages/common/src/fetch-agent.ts
index f09261848..b541f5301 100644
--- a/packages/common/src/fetch-agent.ts
+++ b/packages/common/src/fetch-agent.ts
@@ -3,6 +3,9 @@ import { Agent } from "undici";
import { logger } from "@homarr/log";
+// The below import statement initializes dns-caching
+import "./dns";
+
export class LoggingAgent extends Agent {
constructor(...props: ConstructorParameters) {
super(...props);
diff --git a/packages/core/package.json b/packages/core/package.json
index 9045e9ca6..83677b1af 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -32,7 +32,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/cron-job-api/package.json b/packages/cron-job-api/package.json
index dabfab347..41f2e0c08 100644
--- a/packages/cron-job-api/package.json
+++ b/packages/cron-job-api/package.json
@@ -29,10 +29,10 @@
"@homarr/core": "workspace:^0.1.0",
"@homarr/cron-jobs": "workspace:^0.1.0",
"@homarr/log": "workspace:^0.1.0",
- "@tanstack/react-query": "^5.85.5",
- "@trpc/client": "^11.5.0",
- "@trpc/server": "^11.5.0",
- "@trpc/tanstack-react-query": "^11.5.0",
+ "@tanstack/react-query": "^5.87.1",
+ "@trpc/client": "^11.5.1",
+ "@trpc/server": "^11.5.1",
+ "@trpc/tanstack-react-query": "^11.5.1",
"node-cron": "^4.2.1",
"react": "19.1.1",
"zod": "^4.1.5"
@@ -43,7 +43,7 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/node-cron": "^3.0.11",
"@types/react": "19.1.12",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/cron-job-status/package.json b/packages/cron-job-status/package.json
index e4364d577..84f23d150 100644
--- a/packages/cron-job-status/package.json
+++ b/packages/cron-job-status/package.json
@@ -29,7 +29,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/cron-jobs-core/package.json b/packages/cron-jobs-core/package.json
index d95d65210..4c8a482e6 100644
--- a/packages/cron-jobs-core/package.json
+++ b/packages/cron-jobs-core/package.json
@@ -33,7 +33,7 @@
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/node-cron": "^3.0.11",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/cron-jobs-core/src/creator.ts b/packages/cron-jobs-core/src/creator.ts
index 082f66f52..e21065d9e 100644
--- a/packages/cron-jobs-core/src/creator.ts
+++ b/packages/cron-jobs-core/src/creator.ts
@@ -72,8 +72,6 @@ const createCallback = eq(cronJobConfigurations.name, name),
});
- if (defaultCronExpression === "never") return null;
-
const scheduledTask = createTask(
configuration?.cronExpression ?? defaultCronExpression,
() => void catchingCallbackAsync(),
@@ -120,7 +118,7 @@ export const createCronJobCreator = (
options: CreateCronJobOptions = { runOnStart: false },
) => {
creatorOptions.logger.logDebug(`Validating cron expression '${defaultCronExpression}' for job: ${name}`);
- if (defaultCronExpression !== "never" && !validate(defaultCronExpression)) {
+ if (!validate(defaultCronExpression)) {
throw new Error(`Invalid cron expression '${defaultCronExpression}' for job '${name}'`);
}
creatorOptions.logger.logDebug(`Cron job expression '${defaultCronExpression}' for job ${name} is valid`);
@@ -132,8 +130,6 @@ export const createCronJobCreator = (
// This is a type guard to check if the cron expression is valid and give the user a type hint
return returnValue as unknown as ValidateCron extends true
? typeof returnValue
- : TExpression extends "never"
- ? typeof returnValue
- : "Invalid cron expression";
+ : "Invalid cron expression";
};
};
diff --git a/packages/cron-jobs-core/src/expressions.ts b/packages/cron-jobs-core/src/expressions.ts
index 59c500b67..f71d01d21 100644
--- a/packages/cron-jobs-core/src/expressions.ts
+++ b/packages/cron-jobs-core/src/expressions.ts
@@ -8,4 +8,3 @@ export const EVERY_10_MINUTES = checkCron("*/10 * * * *") satisfies string;
export const EVERY_HOUR = checkCron("0 * * * *") satisfies string;
export const EVERY_DAY = checkCron("0 0 * * */1") satisfies string;
export const EVERY_WEEK = checkCron("0 0 * * 1") satisfies string;
-export const NEVER = "never";
diff --git a/packages/cron-jobs-core/src/group.ts b/packages/cron-jobs-core/src/group.ts
index 684c50214..28ae714c8 100644
--- a/packages/cron-jobs-core/src/group.ts
+++ b/packages/cron-jobs-core/src/group.ts
@@ -45,7 +45,6 @@ export const createJobGroupCreator = (
}
const scheduledTask = await job.createTaskAsync();
- if (!scheduledTask) continue;
tasks.set(job.name, scheduledTask);
}
diff --git a/packages/cron-jobs/package.json b/packages/cron-jobs/package.json
index 7f0f9bb4b..a35185837 100644
--- a/packages/cron-jobs/package.json
+++ b/packages/cron-jobs/package.json
@@ -44,7 +44,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/cron-jobs/src/index.ts b/packages/cron-jobs/src/index.ts
index edc542db8..c087637e4 100644
--- a/packages/cron-jobs/src/index.ts
+++ b/packages/cron-jobs/src/index.ts
@@ -21,7 +21,6 @@ import { refreshNotificationsJob } from "./jobs/integrations/notifications";
import { minecraftServerStatusJob } from "./jobs/minecraft-server-status";
import { pingJob } from "./jobs/ping";
import { rssFeedsJob } from "./jobs/rss-feeds";
-import { sessionCleanupJob } from "./jobs/session-cleanup";
import { updateCheckerJob } from "./jobs/update-checker";
import { createCronJobGroup } from "./lib";
@@ -39,7 +38,6 @@ export const jobGroup = createCronJobGroup({
rssFeeds: rssFeedsJob,
indexerManager: indexerManagerJob,
healthMonitoring: healthMonitoringJob,
- sessionCleanup: sessionCleanupJob,
updateChecker: updateCheckerJob,
mediaTranscoding: mediaTranscodingJob,
minecraftServerStatus: minecraftServerStatusJob,
diff --git a/packages/cron-jobs/src/jobs/session-cleanup.ts b/packages/cron-jobs/src/jobs/session-cleanup.ts
deleted file mode 100644
index 72f6c88fe..000000000
--- a/packages/cron-jobs/src/jobs/session-cleanup.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import { env } from "@homarr/auth/env";
-import { NEVER } from "@homarr/cron-jobs-core/expressions";
-import { db, eq, inArray } from "@homarr/db";
-import { sessions, users } from "@homarr/db/schema";
-import { supportedAuthProviders } from "@homarr/definitions";
-import { logger } from "@homarr/log";
-
-import { createCronJob } from "../lib";
-
-/**
- * Deletes sessions for users that have inactive auth providers.
- * Sessions from other providers are deleted so they can no longer be used.
- */
-export const sessionCleanupJob = createCronJob("sessionCleanup", NEVER, {
- runOnStart: true,
-}).withCallback(async () => {
- const currentAuthProviders = env.AUTH_PROVIDERS;
-
- const inactiveAuthProviders = supportedAuthProviders.filter((provider) => !currentAuthProviders.includes(provider));
- const subQuery = db
- .select({ id: users.id })
- .from(users)
- .where(inArray(users.provider, inactiveAuthProviders))
- .as("sq");
- const sessionsWithInactiveProviders = await db
- .select({ userId: sessions.userId })
- .from(sessions)
- .rightJoin(subQuery, eq(sessions.userId, subQuery.id));
-
- const userIds = sessionsWithInactiveProviders.map(({ userId }) => userId).filter((value) => value !== null);
- await db.delete(sessions).where(inArray(sessions.userId, userIds));
-
- if (sessionsWithInactiveProviders.length > 0) {
- logger.info(`Deleted sessions for inactive providers count=${userIds.length}`);
- } else {
- logger.debug("No sessions to delete");
- }
-});
diff --git a/packages/db/migrations/mysql/0035_increase-secret-kind-length.sql b/packages/db/migrations/mysql/0035_increase-secret-kind-length.sql
new file mode 100644
index 000000000..805759891
--- /dev/null
+++ b/packages/db/migrations/mysql/0035_increase-secret-kind-length.sql
@@ -0,0 +1 @@
+ALTER TABLE `integrationSecret` MODIFY COLUMN `kind` varchar(64) NOT NULL;
\ No newline at end of file
diff --git a/packages/db/migrations/mysql/meta/0035_snapshot.json b/packages/db/migrations/mysql/meta/0035_snapshot.json
new file mode 100644
index 000000000..4dbb8ee79
--- /dev/null
+++ b/packages/db/migrations/mysql/meta/0035_snapshot.json
@@ -0,0 +1,2093 @@
+{
+ "version": "5",
+ "dialect": "mysql",
+ "id": "69d31448-6cb3-4000-9891-7cd2f76e7566",
+ "prevId": "c51b64c9-399a-4f5d-b4b3-728f6cb5c17f",
+ "tables": {
+ "account": {
+ "name": "account",
+ "columns": {
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "type": {
+ "name": "type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "provider": {
+ "name": "provider",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "provider_account_id": {
+ "name": "provider_account_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "refresh_token": {
+ "name": "refresh_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "access_token": {
+ "name": "access_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "token_type": {
+ "name": "token_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "scope": {
+ "name": "scope",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "id_token": {
+ "name": "id_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "session_state": {
+ "name": "session_state",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "userId_idx": {
+ "name": "userId_idx",
+ "columns": ["user_id"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "account_user_id_user_id_fk": {
+ "name": "account_user_id_user_id_fk",
+ "tableFrom": "account",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "account_provider_provider_account_id_pk": {
+ "name": "account_provider_provider_account_id_pk",
+ "columns": ["provider", "provider_account_id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "apiKey": {
+ "name": "apiKey",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "api_key": {
+ "name": "api_key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "salt": {
+ "name": "salt",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "apiKey_user_id_user_id_fk": {
+ "name": "apiKey_user_id_user_id_fk",
+ "tableFrom": "apiKey",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "apiKey_id": {
+ "name": "apiKey_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "app": {
+ "name": "app",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "icon_url": {
+ "name": "icon_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "href": {
+ "name": "href",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "ping_url": {
+ "name": "ping_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "app_id": {
+ "name": "app_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "boardGroupPermission": {
+ "name": "boardGroupPermission",
+ "columns": {
+ "board_id": {
+ "name": "board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "group_id": {
+ "name": "group_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "permission": {
+ "name": "permission",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "boardGroupPermission_board_id_board_id_fk": {
+ "name": "boardGroupPermission_board_id_board_id_fk",
+ "tableFrom": "boardGroupPermission",
+ "tableTo": "board",
+ "columnsFrom": ["board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "boardGroupPermission_group_id_group_id_fk": {
+ "name": "boardGroupPermission_group_id_group_id_fk",
+ "tableFrom": "boardGroupPermission",
+ "tableTo": "group",
+ "columnsFrom": ["group_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "boardGroupPermission_board_id_group_id_permission_pk": {
+ "name": "boardGroupPermission_board_id_group_id_permission_pk",
+ "columns": ["board_id", "group_id", "permission"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "boardUserPermission": {
+ "name": "boardUserPermission",
+ "columns": {
+ "board_id": {
+ "name": "board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "permission": {
+ "name": "permission",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "boardUserPermission_board_id_board_id_fk": {
+ "name": "boardUserPermission_board_id_board_id_fk",
+ "tableFrom": "boardUserPermission",
+ "tableTo": "board",
+ "columnsFrom": ["board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "boardUserPermission_user_id_user_id_fk": {
+ "name": "boardUserPermission_user_id_user_id_fk",
+ "tableFrom": "boardUserPermission",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "boardUserPermission_board_id_user_id_permission_pk": {
+ "name": "boardUserPermission_board_id_user_id_permission_pk",
+ "columns": ["board_id", "user_id", "permission"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "board": {
+ "name": "board",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(256)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "is_public": {
+ "name": "is_public",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": false
+ },
+ "creator_id": {
+ "name": "creator_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "page_title": {
+ "name": "page_title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "meta_title": {
+ "name": "meta_title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "logo_image_url": {
+ "name": "logo_image_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "favicon_image_url": {
+ "name": "favicon_image_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "background_image_url": {
+ "name": "background_image_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "background_image_attachment": {
+ "name": "background_image_attachment",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "('fixed')"
+ },
+ "background_image_repeat": {
+ "name": "background_image_repeat",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "('no-repeat')"
+ },
+ "background_image_size": {
+ "name": "background_image_size",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "('cover')"
+ },
+ "primary_color": {
+ "name": "primary_color",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "('#fa5252')"
+ },
+ "secondary_color": {
+ "name": "secondary_color",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "('#fd7e14')"
+ },
+ "opacity": {
+ "name": "opacity",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 100
+ },
+ "custom_css": {
+ "name": "custom_css",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "icon_color": {
+ "name": "icon_color",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "item_radius": {
+ "name": "item_radius",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "('lg')"
+ },
+ "disable_status": {
+ "name": "disable_status",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "board_creator_id_user_id_fk": {
+ "name": "board_creator_id_user_id_fk",
+ "tableFrom": "board",
+ "tableTo": "user",
+ "columnsFrom": ["creator_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "board_id": {
+ "name": "board_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "board_name_unique": {
+ "name": "board_name_unique",
+ "columns": ["name"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "cron_job_configuration": {
+ "name": "cron_job_configuration",
+ "columns": {
+ "name": {
+ "name": "name",
+ "type": "varchar(256)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "cron_expression": {
+ "name": "cron_expression",
+ "type": "varchar(32)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "is_enabled": {
+ "name": "is_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "cron_job_configuration_name": {
+ "name": "cron_job_configuration_name",
+ "columns": ["name"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "groupMember": {
+ "name": "groupMember",
+ "columns": {
+ "group_id": {
+ "name": "group_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "groupMember_group_id_group_id_fk": {
+ "name": "groupMember_group_id_group_id_fk",
+ "tableFrom": "groupMember",
+ "tableTo": "group",
+ "columnsFrom": ["group_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "groupMember_user_id_user_id_fk": {
+ "name": "groupMember_user_id_user_id_fk",
+ "tableFrom": "groupMember",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "groupMember_group_id_user_id_pk": {
+ "name": "groupMember_group_id_user_id_pk",
+ "columns": ["group_id", "user_id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "groupPermission": {
+ "name": "groupPermission",
+ "columns": {
+ "group_id": {
+ "name": "group_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "permission": {
+ "name": "permission",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "groupPermission_group_id_group_id_fk": {
+ "name": "groupPermission_group_id_group_id_fk",
+ "tableFrom": "groupPermission",
+ "tableTo": "group",
+ "columnsFrom": ["group_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "group": {
+ "name": "group",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "owner_id": {
+ "name": "owner_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "home_board_id": {
+ "name": "home_board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "mobile_home_board_id": {
+ "name": "mobile_home_board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "position": {
+ "name": "position",
+ "type": "smallint",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "group_owner_id_user_id_fk": {
+ "name": "group_owner_id_user_id_fk",
+ "tableFrom": "group",
+ "tableTo": "user",
+ "columnsFrom": ["owner_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ },
+ "group_home_board_id_board_id_fk": {
+ "name": "group_home_board_id_board_id_fk",
+ "tableFrom": "group",
+ "tableTo": "board",
+ "columnsFrom": ["home_board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ },
+ "group_mobile_home_board_id_board_id_fk": {
+ "name": "group_mobile_home_board_id_board_id_fk",
+ "tableFrom": "group",
+ "tableTo": "board",
+ "columnsFrom": ["mobile_home_board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "group_id": {
+ "name": "group_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "group_name_unique": {
+ "name": "group_name_unique",
+ "columns": ["name"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "iconRepository": {
+ "name": "iconRepository",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "slug": {
+ "name": "slug",
+ "type": "varchar(150)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "iconRepository_id": {
+ "name": "iconRepository_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "icon": {
+ "name": "icon",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(250)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "url": {
+ "name": "url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "checksum": {
+ "name": "checksum",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "icon_repository_id": {
+ "name": "icon_repository_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "icon_icon_repository_id_iconRepository_id_fk": {
+ "name": "icon_icon_repository_id_iconRepository_id_fk",
+ "tableFrom": "icon",
+ "tableTo": "iconRepository",
+ "columnsFrom": ["icon_repository_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "icon_id": {
+ "name": "icon_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "integrationGroupPermissions": {
+ "name": "integrationGroupPermissions",
+ "columns": {
+ "integration_id": {
+ "name": "integration_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "group_id": {
+ "name": "group_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "permission": {
+ "name": "permission",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "integrationGroupPermissions_integration_id_integration_id_fk": {
+ "name": "integrationGroupPermissions_integration_id_integration_id_fk",
+ "tableFrom": "integrationGroupPermissions",
+ "tableTo": "integration",
+ "columnsFrom": ["integration_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "integrationGroupPermissions_group_id_group_id_fk": {
+ "name": "integrationGroupPermissions_group_id_group_id_fk",
+ "tableFrom": "integrationGroupPermissions",
+ "tableTo": "group",
+ "columnsFrom": ["group_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "integration_group_permission__pk": {
+ "name": "integration_group_permission__pk",
+ "columns": ["integration_id", "group_id", "permission"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "integration_item": {
+ "name": "integration_item",
+ "columns": {
+ "item_id": {
+ "name": "item_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "integration_id": {
+ "name": "integration_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "integration_item_item_id_item_id_fk": {
+ "name": "integration_item_item_id_item_id_fk",
+ "tableFrom": "integration_item",
+ "tableTo": "item",
+ "columnsFrom": ["item_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "integration_item_integration_id_integration_id_fk": {
+ "name": "integration_item_integration_id_integration_id_fk",
+ "tableFrom": "integration_item",
+ "tableTo": "integration",
+ "columnsFrom": ["integration_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "integration_item_item_id_integration_id_pk": {
+ "name": "integration_item_item_id_integration_id_pk",
+ "columns": ["item_id", "integration_id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "integrationSecret": {
+ "name": "integrationSecret",
+ "columns": {
+ "kind": {
+ "name": "kind",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "value": {
+ "name": "value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "integration_id": {
+ "name": "integration_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "integration_secret__kind_idx": {
+ "name": "integration_secret__kind_idx",
+ "columns": ["kind"],
+ "isUnique": false
+ },
+ "integration_secret__updated_at_idx": {
+ "name": "integration_secret__updated_at_idx",
+ "columns": ["updated_at"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "integrationSecret_integration_id_integration_id_fk": {
+ "name": "integrationSecret_integration_id_integration_id_fk",
+ "tableFrom": "integrationSecret",
+ "tableTo": "integration",
+ "columnsFrom": ["integration_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "integrationSecret_integration_id_kind_pk": {
+ "name": "integrationSecret_integration_id_kind_pk",
+ "columns": ["integration_id", "kind"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "integrationUserPermission": {
+ "name": "integrationUserPermission",
+ "columns": {
+ "integration_id": {
+ "name": "integration_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "permission": {
+ "name": "permission",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "integrationUserPermission_integration_id_integration_id_fk": {
+ "name": "integrationUserPermission_integration_id_integration_id_fk",
+ "tableFrom": "integrationUserPermission",
+ "tableTo": "integration",
+ "columnsFrom": ["integration_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "integrationUserPermission_user_id_user_id_fk": {
+ "name": "integrationUserPermission_user_id_user_id_fk",
+ "tableFrom": "integrationUserPermission",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "integrationUserPermission_integration_id_user_id_permission_pk": {
+ "name": "integrationUserPermission_integration_id_user_id_permission_pk",
+ "columns": ["integration_id", "user_id", "permission"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "integration": {
+ "name": "integration",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "url": {
+ "name": "url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "kind": {
+ "name": "kind",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "integration__kind_idx": {
+ "name": "integration__kind_idx",
+ "columns": ["kind"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "integration_id": {
+ "name": "integration_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "invite": {
+ "name": "invite",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "token": {
+ "name": "token",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "expiration_date": {
+ "name": "expiration_date",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "creator_id": {
+ "name": "creator_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "invite_creator_id_user_id_fk": {
+ "name": "invite_creator_id_user_id_fk",
+ "tableFrom": "invite",
+ "tableTo": "user",
+ "columnsFrom": ["creator_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "invite_id": {
+ "name": "invite_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "invite_token_unique": {
+ "name": "invite_token_unique",
+ "columns": ["token"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "item_layout": {
+ "name": "item_layout",
+ "columns": {
+ "item_id": {
+ "name": "item_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "section_id": {
+ "name": "section_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "layout_id": {
+ "name": "layout_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "x_offset": {
+ "name": "x_offset",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "y_offset": {
+ "name": "y_offset",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "width": {
+ "name": "width",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "height": {
+ "name": "height",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "item_layout_item_id_item_id_fk": {
+ "name": "item_layout_item_id_item_id_fk",
+ "tableFrom": "item_layout",
+ "tableTo": "item",
+ "columnsFrom": ["item_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "item_layout_section_id_section_id_fk": {
+ "name": "item_layout_section_id_section_id_fk",
+ "tableFrom": "item_layout",
+ "tableTo": "section",
+ "columnsFrom": ["section_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "item_layout_layout_id_layout_id_fk": {
+ "name": "item_layout_layout_id_layout_id_fk",
+ "tableFrom": "item_layout",
+ "tableTo": "layout",
+ "columnsFrom": ["layout_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "item_layout_item_id_section_id_layout_id_pk": {
+ "name": "item_layout_item_id_section_id_layout_id_pk",
+ "columns": ["item_id", "section_id", "layout_id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "item": {
+ "name": "item",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "board_id": {
+ "name": "board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "kind": {
+ "name": "kind",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "options": {
+ "name": "options",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "('{\"json\": {}}')"
+ },
+ "advanced_options": {
+ "name": "advanced_options",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "('{\"json\": {}}')"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "item_board_id_board_id_fk": {
+ "name": "item_board_id_board_id_fk",
+ "tableFrom": "item",
+ "tableTo": "board",
+ "columnsFrom": ["board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "item_id": {
+ "name": "item_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "layout": {
+ "name": "layout",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(32)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "board_id": {
+ "name": "board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "column_count": {
+ "name": "column_count",
+ "type": "tinyint",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "breakpoint": {
+ "name": "breakpoint",
+ "type": "smallint",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 0
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "layout_board_id_board_id_fk": {
+ "name": "layout_board_id_board_id_fk",
+ "tableFrom": "layout",
+ "tableTo": "board",
+ "columnsFrom": ["board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "layout_id": {
+ "name": "layout_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "media": {
+ "name": "media",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "content": {
+ "name": "content",
+ "type": "LONGBLOB",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "content_type": {
+ "name": "content_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "size": {
+ "name": "size",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "creator_id": {
+ "name": "creator_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "media_creator_id_user_id_fk": {
+ "name": "media_creator_id_user_id_fk",
+ "tableFrom": "media",
+ "tableTo": "user",
+ "columnsFrom": ["creator_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "media_id": {
+ "name": "media_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "onboarding": {
+ "name": "onboarding",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "step": {
+ "name": "step",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "previous_step": {
+ "name": "previous_step",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "onboarding_id": {
+ "name": "onboarding_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "search_engine": {
+ "name": "search_engine",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "icon_url": {
+ "name": "icon_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "short": {
+ "name": "short",
+ "type": "varchar(8)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "url_template": {
+ "name": "url_template",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "type": {
+ "name": "type",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'generic'"
+ },
+ "integration_id": {
+ "name": "integration_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "search_engine_integration_id_integration_id_fk": {
+ "name": "search_engine_integration_id_integration_id_fk",
+ "tableFrom": "search_engine",
+ "tableTo": "integration",
+ "columnsFrom": ["integration_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "search_engine_id": {
+ "name": "search_engine_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "search_engine_short_unique": {
+ "name": "search_engine_short_unique",
+ "columns": ["short"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "section_collapse_state": {
+ "name": "section_collapse_state",
+ "columns": {
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "section_id": {
+ "name": "section_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "collapsed": {
+ "name": "collapsed",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "section_collapse_state_user_id_user_id_fk": {
+ "name": "section_collapse_state_user_id_user_id_fk",
+ "tableFrom": "section_collapse_state",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "section_collapse_state_section_id_section_id_fk": {
+ "name": "section_collapse_state_section_id_section_id_fk",
+ "tableFrom": "section_collapse_state",
+ "tableTo": "section",
+ "columnsFrom": ["section_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "section_collapse_state_user_id_section_id_pk": {
+ "name": "section_collapse_state_user_id_section_id_pk",
+ "columns": ["user_id", "section_id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "section_layout": {
+ "name": "section_layout",
+ "columns": {
+ "section_id": {
+ "name": "section_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "layout_id": {
+ "name": "layout_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "parent_section_id": {
+ "name": "parent_section_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "x_offset": {
+ "name": "x_offset",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "y_offset": {
+ "name": "y_offset",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "width": {
+ "name": "width",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "height": {
+ "name": "height",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "section_layout_section_id_section_id_fk": {
+ "name": "section_layout_section_id_section_id_fk",
+ "tableFrom": "section_layout",
+ "tableTo": "section",
+ "columnsFrom": ["section_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "section_layout_layout_id_layout_id_fk": {
+ "name": "section_layout_layout_id_layout_id_fk",
+ "tableFrom": "section_layout",
+ "tableTo": "layout",
+ "columnsFrom": ["layout_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "section_layout_parent_section_id_section_id_fk": {
+ "name": "section_layout_parent_section_id_section_id_fk",
+ "tableFrom": "section_layout",
+ "tableTo": "section",
+ "columnsFrom": ["parent_section_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "section_layout_section_id_layout_id_pk": {
+ "name": "section_layout_section_id_layout_id_pk",
+ "columns": ["section_id", "layout_id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "section": {
+ "name": "section",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "board_id": {
+ "name": "board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "kind": {
+ "name": "kind",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "x_offset": {
+ "name": "x_offset",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "y_offset": {
+ "name": "y_offset",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "options": {
+ "name": "options",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false,
+ "default": "('{\"json\": {}}')"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "section_board_id_board_id_fk": {
+ "name": "section_board_id_board_id_fk",
+ "tableFrom": "section",
+ "tableTo": "board",
+ "columnsFrom": ["board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "section_id": {
+ "name": "section_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "serverSetting": {
+ "name": "serverSetting",
+ "columns": {
+ "setting_key": {
+ "name": "setting_key",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "value": {
+ "name": "value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "('{\"json\": {}}')"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "serverSetting_setting_key": {
+ "name": "serverSetting_setting_key",
+ "columns": ["setting_key"]
+ }
+ },
+ "uniqueConstraints": {
+ "serverSetting_settingKey_unique": {
+ "name": "serverSetting_settingKey_unique",
+ "columns": ["setting_key"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "session": {
+ "name": "session",
+ "columns": {
+ "session_token": {
+ "name": "session_token",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "expires": {
+ "name": "expires",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "user_id_idx": {
+ "name": "user_id_idx",
+ "columns": ["user_id"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "session_user_id_user_id_fk": {
+ "name": "session_user_id_user_id_fk",
+ "tableFrom": "session",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "session_session_token": {
+ "name": "session_session_token",
+ "columns": ["session_token"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "trusted_certificate_hostname": {
+ "name": "trusted_certificate_hostname",
+ "columns": {
+ "hostname": {
+ "name": "hostname",
+ "type": "varchar(256)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "thumbprint": {
+ "name": "thumbprint",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "certificate": {
+ "name": "certificate",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "trusted_certificate_hostname_hostname_thumbprint_pk": {
+ "name": "trusted_certificate_hostname_hostname_thumbprint_pk",
+ "columns": ["hostname", "thumbprint"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "user": {
+ "name": "user",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "email_verified": {
+ "name": "email_verified",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "image": {
+ "name": "image",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "password": {
+ "name": "password",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "salt": {
+ "name": "salt",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "provider": {
+ "name": "provider",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'credentials'"
+ },
+ "home_board_id": {
+ "name": "home_board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "mobile_home_board_id": {
+ "name": "mobile_home_board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "default_search_engine_id": {
+ "name": "default_search_engine_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "open_search_in_new_tab": {
+ "name": "open_search_in_new_tab",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": false
+ },
+ "color_scheme": {
+ "name": "color_scheme",
+ "type": "varchar(5)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'dark'"
+ },
+ "first_day_of_week": {
+ "name": "first_day_of_week",
+ "type": "tinyint",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 1
+ },
+ "ping_icons_enabled": {
+ "name": "ping_icons_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "user_home_board_id_board_id_fk": {
+ "name": "user_home_board_id_board_id_fk",
+ "tableFrom": "user",
+ "tableTo": "board",
+ "columnsFrom": ["home_board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ },
+ "user_mobile_home_board_id_board_id_fk": {
+ "name": "user_mobile_home_board_id_board_id_fk",
+ "tableFrom": "user",
+ "tableTo": "board",
+ "columnsFrom": ["mobile_home_board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ },
+ "user_default_search_engine_id_search_engine_id_fk": {
+ "name": "user_default_search_engine_id_search_engine_id_fk",
+ "tableFrom": "user",
+ "tableTo": "search_engine",
+ "columnsFrom": ["default_search_engine_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "user_id": {
+ "name": "user_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "verificationToken": {
+ "name": "verificationToken",
+ "columns": {
+ "identifier": {
+ "name": "identifier",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "token": {
+ "name": "token",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "expires": {
+ "name": "expires",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "verificationToken_identifier_token_pk": {
+ "name": "verificationToken_identifier_token_pk",
+ "columns": ["identifier", "token"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ }
+ },
+ "views": {},
+ "_meta": {
+ "schemas": {},
+ "tables": {},
+ "columns": {}
+ },
+ "internal": {
+ "tables": {},
+ "indexes": {}
+ }
+}
diff --git a/packages/db/migrations/mysql/meta/_journal.json b/packages/db/migrations/mysql/meta/_journal.json
index 02ac58ea2..1795c2385 100644
--- a/packages/db/migrations/mysql/meta/_journal.json
+++ b/packages/db/migrations/mysql/meta/_journal.json
@@ -246,6 +246,13 @@
"when": 1754929897145,
"tag": "0034_increase-blob-size",
"breakpoints": true
+ },
+ {
+ "idx": 35,
+ "version": "5",
+ "when": 1756701556908,
+ "tag": "0035_increase-secret-kind-length",
+ "breakpoints": true
}
]
}
diff --git a/packages/db/migrations/postgresql/0001_increase-secret-kind-length.sql b/packages/db/migrations/postgresql/0001_increase-secret-kind-length.sql
new file mode 100644
index 000000000..9e391a1c8
--- /dev/null
+++ b/packages/db/migrations/postgresql/0001_increase-secret-kind-length.sql
@@ -0,0 +1 @@
+ALTER TABLE "integrationSecret" ALTER COLUMN "kind" SET DATA TYPE varchar(64);
\ No newline at end of file
diff --git a/packages/db/migrations/postgresql/meta/0001_snapshot.json b/packages/db/migrations/postgresql/meta/0001_snapshot.json
new file mode 100644
index 000000000..b15e0b883
--- /dev/null
+++ b/packages/db/migrations/postgresql/meta/0001_snapshot.json
@@ -0,0 +1,1991 @@
+{
+ "id": "20d7111f-5639-464d-bca8-e38d670e4500",
+ "prevId": "7ee22b38-c9db-4844-a3ff-bf8e1f4c71e8",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.account": {
+ "name": "account",
+ "schema": "",
+ "columns": {
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "type": {
+ "name": "type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "provider": {
+ "name": "provider",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "provider_account_id": {
+ "name": "provider_account_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "refresh_token": {
+ "name": "refresh_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "access_token": {
+ "name": "access_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "token_type": {
+ "name": "token_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "scope": {
+ "name": "scope",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "id_token": {
+ "name": "id_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "session_state": {
+ "name": "session_state",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "userId_idx": {
+ "name": "userId_idx",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "account_user_id_user_id_fk": {
+ "name": "account_user_id_user_id_fk",
+ "tableFrom": "account",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "account_provider_provider_account_id_pk": {
+ "name": "account_provider_provider_account_id_pk",
+ "columns": ["provider", "provider_account_id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.apiKey": {
+ "name": "apiKey",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "api_key": {
+ "name": "api_key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "salt": {
+ "name": "salt",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "apiKey_user_id_user_id_fk": {
+ "name": "apiKey_user_id_user_id_fk",
+ "tableFrom": "apiKey",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.app": {
+ "name": "app",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "icon_url": {
+ "name": "icon_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "href": {
+ "name": "href",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "ping_url": {
+ "name": "ping_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.boardGroupPermission": {
+ "name": "boardGroupPermission",
+ "schema": "",
+ "columns": {
+ "board_id": {
+ "name": "board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "group_id": {
+ "name": "group_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "permission": {
+ "name": "permission",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "boardGroupPermission_board_id_board_id_fk": {
+ "name": "boardGroupPermission_board_id_board_id_fk",
+ "tableFrom": "boardGroupPermission",
+ "tableTo": "board",
+ "columnsFrom": ["board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "boardGroupPermission_group_id_group_id_fk": {
+ "name": "boardGroupPermission_group_id_group_id_fk",
+ "tableFrom": "boardGroupPermission",
+ "tableTo": "group",
+ "columnsFrom": ["group_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "boardGroupPermission_board_id_group_id_permission_pk": {
+ "name": "boardGroupPermission_board_id_group_id_permission_pk",
+ "columns": ["board_id", "group_id", "permission"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.boardUserPermission": {
+ "name": "boardUserPermission",
+ "schema": "",
+ "columns": {
+ "board_id": {
+ "name": "board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "permission": {
+ "name": "permission",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "boardUserPermission_board_id_board_id_fk": {
+ "name": "boardUserPermission_board_id_board_id_fk",
+ "tableFrom": "boardUserPermission",
+ "tableTo": "board",
+ "columnsFrom": ["board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "boardUserPermission_user_id_user_id_fk": {
+ "name": "boardUserPermission_user_id_user_id_fk",
+ "tableFrom": "boardUserPermission",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "boardUserPermission_board_id_user_id_permission_pk": {
+ "name": "boardUserPermission_board_id_user_id_permission_pk",
+ "columns": ["board_id", "user_id", "permission"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.board": {
+ "name": "board",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(256)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "is_public": {
+ "name": "is_public",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "creator_id": {
+ "name": "creator_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "page_title": {
+ "name": "page_title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "meta_title": {
+ "name": "meta_title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "logo_image_url": {
+ "name": "logo_image_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "favicon_image_url": {
+ "name": "favicon_image_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "background_image_url": {
+ "name": "background_image_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "background_image_attachment": {
+ "name": "background_image_attachment",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'fixed'"
+ },
+ "background_image_repeat": {
+ "name": "background_image_repeat",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'no-repeat'"
+ },
+ "background_image_size": {
+ "name": "background_image_size",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'cover'"
+ },
+ "primary_color": {
+ "name": "primary_color",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'#fa5252'"
+ },
+ "secondary_color": {
+ "name": "secondary_color",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'#fd7e14'"
+ },
+ "opacity": {
+ "name": "opacity",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 100
+ },
+ "custom_css": {
+ "name": "custom_css",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "icon_color": {
+ "name": "icon_color",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "item_radius": {
+ "name": "item_radius",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'lg'"
+ },
+ "disable_status": {
+ "name": "disable_status",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "board_creator_id_user_id_fk": {
+ "name": "board_creator_id_user_id_fk",
+ "tableFrom": "board",
+ "tableTo": "user",
+ "columnsFrom": ["creator_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "board_name_unique": {
+ "name": "board_name_unique",
+ "nullsNotDistinct": false,
+ "columns": ["name"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.cron_job_configuration": {
+ "name": "cron_job_configuration",
+ "schema": "",
+ "columns": {
+ "name": {
+ "name": "name",
+ "type": "varchar(256)",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "cron_expression": {
+ "name": "cron_expression",
+ "type": "varchar(32)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "is_enabled": {
+ "name": "is_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.groupMember": {
+ "name": "groupMember",
+ "schema": "",
+ "columns": {
+ "group_id": {
+ "name": "group_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "groupMember_group_id_group_id_fk": {
+ "name": "groupMember_group_id_group_id_fk",
+ "tableFrom": "groupMember",
+ "tableTo": "group",
+ "columnsFrom": ["group_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "groupMember_user_id_user_id_fk": {
+ "name": "groupMember_user_id_user_id_fk",
+ "tableFrom": "groupMember",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "groupMember_group_id_user_id_pk": {
+ "name": "groupMember_group_id_user_id_pk",
+ "columns": ["group_id", "user_id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.groupPermission": {
+ "name": "groupPermission",
+ "schema": "",
+ "columns": {
+ "group_id": {
+ "name": "group_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "permission": {
+ "name": "permission",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "groupPermission_group_id_group_id_fk": {
+ "name": "groupPermission_group_id_group_id_fk",
+ "tableFrom": "groupPermission",
+ "tableTo": "group",
+ "columnsFrom": ["group_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.group": {
+ "name": "group",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "owner_id": {
+ "name": "owner_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "home_board_id": {
+ "name": "home_board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "mobile_home_board_id": {
+ "name": "mobile_home_board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "position": {
+ "name": "position",
+ "type": "smallint",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "group_owner_id_user_id_fk": {
+ "name": "group_owner_id_user_id_fk",
+ "tableFrom": "group",
+ "tableTo": "user",
+ "columnsFrom": ["owner_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ },
+ "group_home_board_id_board_id_fk": {
+ "name": "group_home_board_id_board_id_fk",
+ "tableFrom": "group",
+ "tableTo": "board",
+ "columnsFrom": ["home_board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ },
+ "group_mobile_home_board_id_board_id_fk": {
+ "name": "group_mobile_home_board_id_board_id_fk",
+ "tableFrom": "group",
+ "tableTo": "board",
+ "columnsFrom": ["mobile_home_board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "group_name_unique": {
+ "name": "group_name_unique",
+ "nullsNotDistinct": false,
+ "columns": ["name"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.iconRepository": {
+ "name": "iconRepository",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "slug": {
+ "name": "slug",
+ "type": "varchar(150)",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.icon": {
+ "name": "icon",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(250)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "url": {
+ "name": "url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "checksum": {
+ "name": "checksum",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "icon_repository_id": {
+ "name": "icon_repository_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "icon_icon_repository_id_iconRepository_id_fk": {
+ "name": "icon_icon_repository_id_iconRepository_id_fk",
+ "tableFrom": "icon",
+ "tableTo": "iconRepository",
+ "columnsFrom": ["icon_repository_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.integrationGroupPermissions": {
+ "name": "integrationGroupPermissions",
+ "schema": "",
+ "columns": {
+ "integration_id": {
+ "name": "integration_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "group_id": {
+ "name": "group_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "permission": {
+ "name": "permission",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "integrationGroupPermissions_integration_id_integration_id_fk": {
+ "name": "integrationGroupPermissions_integration_id_integration_id_fk",
+ "tableFrom": "integrationGroupPermissions",
+ "tableTo": "integration",
+ "columnsFrom": ["integration_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "integrationGroupPermissions_group_id_group_id_fk": {
+ "name": "integrationGroupPermissions_group_id_group_id_fk",
+ "tableFrom": "integrationGroupPermissions",
+ "tableTo": "group",
+ "columnsFrom": ["group_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "integration_group_permission__pk": {
+ "name": "integration_group_permission__pk",
+ "columns": ["integration_id", "group_id", "permission"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.integration_item": {
+ "name": "integration_item",
+ "schema": "",
+ "columns": {
+ "item_id": {
+ "name": "item_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "integration_id": {
+ "name": "integration_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "integration_item_item_id_item_id_fk": {
+ "name": "integration_item_item_id_item_id_fk",
+ "tableFrom": "integration_item",
+ "tableTo": "item",
+ "columnsFrom": ["item_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "integration_item_integration_id_integration_id_fk": {
+ "name": "integration_item_integration_id_integration_id_fk",
+ "tableFrom": "integration_item",
+ "tableTo": "integration",
+ "columnsFrom": ["integration_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "integration_item_item_id_integration_id_pk": {
+ "name": "integration_item_item_id_integration_id_pk",
+ "columns": ["item_id", "integration_id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.integrationSecret": {
+ "name": "integrationSecret",
+ "schema": "",
+ "columns": {
+ "kind": {
+ "name": "kind",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "value": {
+ "name": "value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "integration_id": {
+ "name": "integration_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "integration_secret__kind_idx": {
+ "name": "integration_secret__kind_idx",
+ "columns": [
+ {
+ "expression": "kind",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "integration_secret__updated_at_idx": {
+ "name": "integration_secret__updated_at_idx",
+ "columns": [
+ {
+ "expression": "updated_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "integrationSecret_integration_id_integration_id_fk": {
+ "name": "integrationSecret_integration_id_integration_id_fk",
+ "tableFrom": "integrationSecret",
+ "tableTo": "integration",
+ "columnsFrom": ["integration_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "integrationSecret_integration_id_kind_pk": {
+ "name": "integrationSecret_integration_id_kind_pk",
+ "columns": ["integration_id", "kind"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.integrationUserPermission": {
+ "name": "integrationUserPermission",
+ "schema": "",
+ "columns": {
+ "integration_id": {
+ "name": "integration_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "permission": {
+ "name": "permission",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "integrationUserPermission_integration_id_integration_id_fk": {
+ "name": "integrationUserPermission_integration_id_integration_id_fk",
+ "tableFrom": "integrationUserPermission",
+ "tableTo": "integration",
+ "columnsFrom": ["integration_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "integrationUserPermission_user_id_user_id_fk": {
+ "name": "integrationUserPermission_user_id_user_id_fk",
+ "tableFrom": "integrationUserPermission",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "integrationUserPermission_integration_id_user_id_permission_pk": {
+ "name": "integrationUserPermission_integration_id_user_id_permission_pk",
+ "columns": ["integration_id", "user_id", "permission"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.integration": {
+ "name": "integration",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "url": {
+ "name": "url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "kind": {
+ "name": "kind",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "integration__kind_idx": {
+ "name": "integration__kind_idx",
+ "columns": [
+ {
+ "expression": "kind",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.invite": {
+ "name": "invite",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "token": {
+ "name": "token",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expiration_date": {
+ "name": "expiration_date",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "creator_id": {
+ "name": "creator_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "invite_creator_id_user_id_fk": {
+ "name": "invite_creator_id_user_id_fk",
+ "tableFrom": "invite",
+ "tableTo": "user",
+ "columnsFrom": ["creator_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "invite_token_unique": {
+ "name": "invite_token_unique",
+ "nullsNotDistinct": false,
+ "columns": ["token"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.item_layout": {
+ "name": "item_layout",
+ "schema": "",
+ "columns": {
+ "item_id": {
+ "name": "item_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "section_id": {
+ "name": "section_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "layout_id": {
+ "name": "layout_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "x_offset": {
+ "name": "x_offset",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "y_offset": {
+ "name": "y_offset",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "width": {
+ "name": "width",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "height": {
+ "name": "height",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "item_layout_item_id_item_id_fk": {
+ "name": "item_layout_item_id_item_id_fk",
+ "tableFrom": "item_layout",
+ "tableTo": "item",
+ "columnsFrom": ["item_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "item_layout_section_id_section_id_fk": {
+ "name": "item_layout_section_id_section_id_fk",
+ "tableFrom": "item_layout",
+ "tableTo": "section",
+ "columnsFrom": ["section_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "item_layout_layout_id_layout_id_fk": {
+ "name": "item_layout_layout_id_layout_id_fk",
+ "tableFrom": "item_layout",
+ "tableTo": "layout",
+ "columnsFrom": ["layout_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "item_layout_item_id_section_id_layout_id_pk": {
+ "name": "item_layout_item_id_section_id_layout_id_pk",
+ "columns": ["item_id", "section_id", "layout_id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.item": {
+ "name": "item",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "board_id": {
+ "name": "board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "kind": {
+ "name": "kind",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "options": {
+ "name": "options",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{\"json\": {}}'"
+ },
+ "advanced_options": {
+ "name": "advanced_options",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{\"json\": {}}'"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "item_board_id_board_id_fk": {
+ "name": "item_board_id_board_id_fk",
+ "tableFrom": "item",
+ "tableTo": "board",
+ "columnsFrom": ["board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.layout": {
+ "name": "layout",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(32)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "board_id": {
+ "name": "board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "column_count": {
+ "name": "column_count",
+ "type": "smallint",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "breakpoint": {
+ "name": "breakpoint",
+ "type": "smallint",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "layout_board_id_board_id_fk": {
+ "name": "layout_board_id_board_id_fk",
+ "tableFrom": "layout",
+ "tableTo": "board",
+ "columnsFrom": ["board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.media": {
+ "name": "media",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "content": {
+ "name": "content",
+ "type": "bytea",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "content_type": {
+ "name": "content_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "size": {
+ "name": "size",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "creator_id": {
+ "name": "creator_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "media_creator_id_user_id_fk": {
+ "name": "media_creator_id_user_id_fk",
+ "tableFrom": "media",
+ "tableTo": "user",
+ "columnsFrom": ["creator_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.onboarding": {
+ "name": "onboarding",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "step": {
+ "name": "step",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "previous_step": {
+ "name": "previous_step",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.search_engine": {
+ "name": "search_engine",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "icon_url": {
+ "name": "icon_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "short": {
+ "name": "short",
+ "type": "varchar(8)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "url_template": {
+ "name": "url_template",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "type": {
+ "name": "type",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'generic'"
+ },
+ "integration_id": {
+ "name": "integration_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "search_engine_integration_id_integration_id_fk": {
+ "name": "search_engine_integration_id_integration_id_fk",
+ "tableFrom": "search_engine",
+ "tableTo": "integration",
+ "columnsFrom": ["integration_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "search_engine_short_unique": {
+ "name": "search_engine_short_unique",
+ "nullsNotDistinct": false,
+ "columns": ["short"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.section_collapse_state": {
+ "name": "section_collapse_state",
+ "schema": "",
+ "columns": {
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "section_id": {
+ "name": "section_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "collapsed": {
+ "name": "collapsed",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "section_collapse_state_user_id_user_id_fk": {
+ "name": "section_collapse_state_user_id_user_id_fk",
+ "tableFrom": "section_collapse_state",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "section_collapse_state_section_id_section_id_fk": {
+ "name": "section_collapse_state_section_id_section_id_fk",
+ "tableFrom": "section_collapse_state",
+ "tableTo": "section",
+ "columnsFrom": ["section_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "section_collapse_state_user_id_section_id_pk": {
+ "name": "section_collapse_state_user_id_section_id_pk",
+ "columns": ["user_id", "section_id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.section_layout": {
+ "name": "section_layout",
+ "schema": "",
+ "columns": {
+ "section_id": {
+ "name": "section_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "layout_id": {
+ "name": "layout_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "parent_section_id": {
+ "name": "parent_section_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "x_offset": {
+ "name": "x_offset",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "y_offset": {
+ "name": "y_offset",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "width": {
+ "name": "width",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "height": {
+ "name": "height",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "section_layout_section_id_section_id_fk": {
+ "name": "section_layout_section_id_section_id_fk",
+ "tableFrom": "section_layout",
+ "tableTo": "section",
+ "columnsFrom": ["section_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "section_layout_layout_id_layout_id_fk": {
+ "name": "section_layout_layout_id_layout_id_fk",
+ "tableFrom": "section_layout",
+ "tableTo": "layout",
+ "columnsFrom": ["layout_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "section_layout_parent_section_id_section_id_fk": {
+ "name": "section_layout_parent_section_id_section_id_fk",
+ "tableFrom": "section_layout",
+ "tableTo": "section",
+ "columnsFrom": ["parent_section_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "section_layout_section_id_layout_id_pk": {
+ "name": "section_layout_section_id_layout_id_pk",
+ "columns": ["section_id", "layout_id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.section": {
+ "name": "section",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "board_id": {
+ "name": "board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "kind": {
+ "name": "kind",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "x_offset": {
+ "name": "x_offset",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "y_offset": {
+ "name": "y_offset",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "options": {
+ "name": "options",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'{\"json\": {}}'"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "section_board_id_board_id_fk": {
+ "name": "section_board_id_board_id_fk",
+ "tableFrom": "section",
+ "tableTo": "board",
+ "columnsFrom": ["board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.serverSetting": {
+ "name": "serverSetting",
+ "schema": "",
+ "columns": {
+ "setting_key": {
+ "name": "setting_key",
+ "type": "varchar(64)",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "value": {
+ "name": "value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{\"json\": {}}'"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "serverSetting_settingKey_unique": {
+ "name": "serverSetting_settingKey_unique",
+ "nullsNotDistinct": false,
+ "columns": ["setting_key"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.session": {
+ "name": "session",
+ "schema": "",
+ "columns": {
+ "session_token": {
+ "name": "session_token",
+ "type": "varchar(512)",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires": {
+ "name": "expires",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "user_id_idx": {
+ "name": "user_id_idx",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "session_user_id_user_id_fk": {
+ "name": "session_user_id_user_id_fk",
+ "tableFrom": "session",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.trusted_certificate_hostname": {
+ "name": "trusted_certificate_hostname",
+ "schema": "",
+ "columns": {
+ "hostname": {
+ "name": "hostname",
+ "type": "varchar(256)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "thumbprint": {
+ "name": "thumbprint",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "certificate": {
+ "name": "certificate",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "trusted_certificate_hostname_hostname_thumbprint_pk": {
+ "name": "trusted_certificate_hostname_hostname_thumbprint_pk",
+ "columns": ["hostname", "thumbprint"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.user": {
+ "name": "user",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "email_verified": {
+ "name": "email_verified",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "image": {
+ "name": "image",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "password": {
+ "name": "password",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "salt": {
+ "name": "salt",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "provider": {
+ "name": "provider",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'credentials'"
+ },
+ "home_board_id": {
+ "name": "home_board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "mobile_home_board_id": {
+ "name": "mobile_home_board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "default_search_engine_id": {
+ "name": "default_search_engine_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "open_search_in_new_tab": {
+ "name": "open_search_in_new_tab",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "color_scheme": {
+ "name": "color_scheme",
+ "type": "varchar(5)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'dark'"
+ },
+ "first_day_of_week": {
+ "name": "first_day_of_week",
+ "type": "smallint",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 1
+ },
+ "ping_icons_enabled": {
+ "name": "ping_icons_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "user_home_board_id_board_id_fk": {
+ "name": "user_home_board_id_board_id_fk",
+ "tableFrom": "user",
+ "tableTo": "board",
+ "columnsFrom": ["home_board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ },
+ "user_mobile_home_board_id_board_id_fk": {
+ "name": "user_mobile_home_board_id_board_id_fk",
+ "tableFrom": "user",
+ "tableTo": "board",
+ "columnsFrom": ["mobile_home_board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ },
+ "user_default_search_engine_id_search_engine_id_fk": {
+ "name": "user_default_search_engine_id_search_engine_id_fk",
+ "tableFrom": "user",
+ "tableTo": "search_engine",
+ "columnsFrom": ["default_search_engine_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.verificationToken": {
+ "name": "verificationToken",
+ "schema": "",
+ "columns": {
+ "identifier": {
+ "name": "identifier",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "token": {
+ "name": "token",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires": {
+ "name": "expires",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "verificationToken_identifier_token_pk": {
+ "name": "verificationToken_identifier_token_pk",
+ "columns": ["identifier", "token"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {},
+ "schemas": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
diff --git a/packages/db/migrations/postgresql/meta/_journal.json b/packages/db/migrations/postgresql/meta/_journal.json
index 44e76ff19..7b39628ab 100644
--- a/packages/db/migrations/postgresql/meta/_journal.json
+++ b/packages/db/migrations/postgresql/meta/_journal.json
@@ -8,6 +8,13 @@
"when": 1754853510707,
"tag": "0000_initial",
"breakpoints": true
+ },
+ {
+ "idx": 1,
+ "version": "7",
+ "when": 1756701573101,
+ "tag": "0001_increase-secret-kind-length",
+ "breakpoints": true
}
]
}
diff --git a/packages/db/package.json b/packages/db/package.json
index 0b1a28f19..acadcec53 100644
--- a/packages/db/package.json
+++ b/packages/db/package.json
@@ -49,16 +49,16 @@
"@homarr/definitions": "workspace:^0.1.0",
"@homarr/log": "workspace:^0.1.0",
"@homarr/server-settings": "workspace:^0.1.0",
- "@mantine/core": "^8.2.7",
+ "@mantine/core": "^8.3.1",
"@paralleldrive/cuid2": "^2.2.2",
"@testcontainers/mysql": "^11.5.1",
"@testcontainers/postgresql": "^11.5.1",
"better-sqlite3": "^12.2.0",
- "dotenv": "^17.2.1",
+ "dotenv": "^17.2.2",
"drizzle-kit": "^0.31.4",
"drizzle-orm": "^0.44.5",
"drizzle-zod": "^0.8.3",
- "mysql2": "3.14.3",
+ "mysql2": "3.14.5",
"pg": "^8.16.3",
"superjson": "2.2.2"
},
@@ -70,9 +70,9 @@
"@types/pg": "^8.15.5",
"dotenv-cli": "^10.0.0",
"esbuild": "^0.25.9",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"prettier": "^3.6.2",
- "tsx": "4.20.5",
+ "tsx": "4.20.4",
"typescript": "^5.9.2"
}
}
diff --git a/packages/db/schema/mysql.ts b/packages/db/schema/mysql.ts
index 29ca741a8..a1a4bea86 100644
--- a/packages/db/schema/mysql.ts
+++ b/packages/db/schema/mysql.ts
@@ -208,7 +208,7 @@ export const integrations = mysqlTable(
export const integrationSecrets = mysqlTable(
"integrationSecret",
{
- kind: varchar({ length: 16 }).$type().notNull(),
+ kind: varchar({ length: 64 }).$type().notNull(),
value: text().$type<`${string}.${string}`>().notNull(),
updatedAt: timestamp()
.$onUpdateFn(() => new Date())
diff --git a/packages/db/schema/postgresql.ts b/packages/db/schema/postgresql.ts
index d84c816e9..e205e9c71 100644
--- a/packages/db/schema/postgresql.ts
+++ b/packages/db/schema/postgresql.ts
@@ -207,7 +207,7 @@ export const integrations = pgTable(
export const integrationSecrets = pgTable(
"integrationSecret",
{
- kind: varchar({ length: 16 }).$type().notNull(),
+ kind: varchar({ length: 64 }).$type().notNull(),
value: text().$type<`${string}.${string}`>().notNull(),
updatedAt: timestamp()
.$onUpdateFn(() => new Date())
diff --git a/packages/definitions/package.json b/packages/definitions/package.json
index c6c2076ca..10bc70ea5 100644
--- a/packages/definitions/package.json
+++ b/packages/definitions/package.json
@@ -31,8 +31,8 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
- "tsx": "4.20.5",
+ "eslint": "^9.35.0",
+ "tsx": "4.20.4",
"typescript": "^5.9.2"
}
}
diff --git a/packages/definitions/src/docs/homarr-docs-sitemap.ts b/packages/definitions/src/docs/homarr-docs-sitemap.ts
index 59ea973b4..6815530cc 100644
--- a/packages/definitions/src/docs/homarr-docs-sitemap.ts
+++ b/packages/definitions/src/docs/homarr-docs-sitemap.ts
@@ -183,6 +183,7 @@ export type HomarrDocumentationPath =
| "/docs/integrations/sonarr"
| "/docs/integrations/tdarr"
| "/docs/integrations/transmission"
+ | "/docs/integrations/truenas"
| "/docs/integrations/unifi-controller"
| "/docs/management/api"
| "/docs/management/apps"
diff --git a/packages/definitions/src/integration.ts b/packages/definitions/src/integration.ts
index bf01de432..54dba1d49 100644
--- a/packages/definitions/src/integration.ts
+++ b/packages/definitions/src/integration.ts
@@ -4,16 +4,19 @@ import type { AtLeastOneOf } from "@homarr/common/types";
import { createDocumentationLink } from "./docs";
export const integrationSecretKindObject = {
- apiKey: { isPublic: false },
- username: { isPublic: true },
- password: { isPublic: false },
- tokenId: { isPublic: true },
- realm: { isPublic: true },
- personalAccessToken: { isPublic: false },
- topic: { isPublic: true },
- opnsenseApiKey: { isPublic: false },
- opnsenseApiSecret: { isPublic: false },
-} satisfies Record;
+ apiKey: { isPublic: false, multiline: false },
+ username: { isPublic: true, multiline: false },
+ password: { isPublic: false, multiline: false },
+ tokenId: { isPublic: true, multiline: false },
+ realm: { isPublic: true, multiline: false },
+ personalAccessToken: { isPublic: false, multiline: false },
+ topic: { isPublic: true, multiline: false },
+ opnsenseApiKey: { isPublic: false, multiline: false },
+ opnsenseApiSecret: { isPublic: false, multiline: false },
+ privateKey: { isPublic: false, multiline: true },
+ githubAppId: { isPublic: true, multiline: false },
+ githubInstallationId: { isPublic: true, multiline: false },
+} satisfies Record;
export const integrationSecretKinds = objectKeys(integrationSecretKindObject);
@@ -211,7 +214,7 @@ export const integrationDefs = {
},
github: {
name: "Github",
- secretKinds: [[], ["personalAccessToken"]],
+ secretKinds: [[], ["personalAccessToken"], ["githubAppId", "githubInstallationId", "privateKey"]],
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/github.svg",
category: ["releasesProvider"],
defaultUrl: "https://api.github.com",
@@ -259,7 +262,7 @@ export const integrationDefs = {
},
gitHubContainerRegistry: {
name: "GitHub Container Registry",
- secretKinds: [[], ["personalAccessToken"]],
+ secretKinds: [[], ["personalAccessToken"], ["githubAppId", "githubInstallationId", "privateKey"]],
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/github.svg",
category: ["releasesProvider"],
defaultUrl: "https://api.github.com",
@@ -280,6 +283,13 @@ export const integrationDefs = {
category: ["notifications"],
documentationUrl: createDocumentationLink("/docs/integrations/ntfy"),
},
+ truenas: {
+ name: "TrueNAS",
+ secretKinds: [["username", "password"]],
+ iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/truenas.svg",
+ category: ["healthMonitoring"],
+ documentationUrl: createDocumentationLink("/docs/integrations/truenas"),
+ },
// This integration only returns mock data, it is used during development (but can also be used in production by directly going to the create page)
mock: {
name: "Mock",
diff --git a/packages/docker/package.json b/packages/docker/package.json
index 7382bade5..7349ad9ee 100644
--- a/packages/docker/package.json
+++ b/packages/docker/package.json
@@ -26,14 +26,14 @@
"dependencies": {
"@homarr/common": "workspace:^0.1.0",
"@homarr/core": "workspace:^0.1.0",
- "dockerode": "^4.0.7"
+ "dockerode": "^4.0.8"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/dockerode": "^3.3.43",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/form/package.json b/packages/form/package.json
index 423974fb8..d2d815426 100644
--- a/packages/form/package.json
+++ b/packages/form/package.json
@@ -26,7 +26,7 @@
"@homarr/common": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
- "@mantine/form": "^8.2.7",
+ "@mantine/form": "^8.3.1",
"mantine-form-zod-resolver": "^1.3.0",
"zod": "^4.1.5"
},
@@ -34,7 +34,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/forms-collection/package.json b/packages/forms-collection/package.json
index c5832707c..de7db8169 100644
--- a/packages/forms-collection/package.json
+++ b/packages/forms-collection/package.json
@@ -29,7 +29,7 @@
"@homarr/notifications": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
- "@mantine/core": "^8.2.7",
+ "@mantine/core": "^8.3.1",
"react": "19.1.1",
"zod": "^4.1.5"
},
@@ -37,7 +37,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/icons/package.json b/packages/icons/package.json
index 86d00501c..4c5a94b87 100644
--- a/packages/icons/package.json
+++ b/packages/icons/package.json
@@ -31,7 +31,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/image-proxy/package.json b/packages/image-proxy/package.json
index 4ff223f4a..e98a8e864 100644
--- a/packages/image-proxy/package.json
+++ b/packages/image-proxy/package.json
@@ -33,7 +33,7 @@
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/bcrypt": "6.0.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/integrations/package.json b/packages/integrations/package.json
index cdc2003ff..125fe2b48 100644
--- a/packages/integrations/package.json
+++ b/packages/integrations/package.json
@@ -25,10 +25,10 @@
},
"prettier": "@homarr/prettier-config",
"dependencies": {
- "@ctrl/deluge": "^7.1.1",
- "@ctrl/qbittorrent": "^9.6.0",
- "@ctrl/transmission": "^7.2.0",
- "@gitbeaker/rest": "^43.4.0",
+ "@ctrl/deluge": "^7.2.0",
+ "@ctrl/qbittorrent": "^9.7.0",
+ "@ctrl/transmission": "^7.3.0",
+ "@gitbeaker/rest": "^43.5.0",
"@homarr/certificates": "workspace:^0.1.0",
"@homarr/common": "workspace:^0.1.0",
"@homarr/db": "workspace:^0.1.0",
@@ -40,6 +40,7 @@
"@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@jellyfin/sdk": "^0.11.0",
+ "@octokit/auth-app": "^8.1.0",
"maria2": "^0.4.1",
"node-ical": "^0.20.1",
"octokit": "^5.0.3",
@@ -55,7 +56,7 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/node-unifi": "^2.5.1",
"@types/xml2js": "^0.4.14",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/integrations/src/adguard-home/adguard-home-types.ts b/packages/integrations/src/adguard-home/adguard-home-types.ts
index 493bc2099..20563dd36 100644
--- a/packages/integrations/src/adguard-home/adguard-home-types.ts
+++ b/packages/integrations/src/adguard-home/adguard-home-types.ts
@@ -23,7 +23,6 @@ export const statusResponseSchema = z.object({
dns_addresses: z.array(z.string()),
dns_port: z.number().positive(),
http_port: z.number().positive(),
- protection_disabled_duration: z.number(),
protection_enabled: z.boolean(),
dhcp_available: z.boolean(),
running: z.boolean(),
diff --git a/packages/integrations/src/base/creator.ts b/packages/integrations/src/base/creator.ts
index a5a0f5d82..1d34528b0 100644
--- a/packages/integrations/src/base/creator.ts
+++ b/packages/integrations/src/base/creator.ts
@@ -38,6 +38,7 @@ import { PlexIntegration } from "../plex/plex-integration";
import { ProwlarrIntegration } from "../prowlarr/prowlarr-integration";
import { ProxmoxIntegration } from "../proxmox/proxmox-integration";
import { QuayIntegration } from "../quay/quay-integration";
+import { TrueNasIntegration } from "../truenas/truenas-integration";
import { UnifiControllerIntegration } from "../unifi-controller/unifi-controller-integration";
import type { Integration, IntegrationInput } from "./integration";
@@ -114,6 +115,7 @@ export const integrationCreators = {
quay: QuayIntegration,
ntfy: NTFYIntegration,
mock: MockIntegration,
+ truenas: TrueNasIntegration,
} satisfies Record Promise]>;
type IntegrationInstanceOfKind = {
diff --git a/packages/integrations/src/base/errors/http/index.ts b/packages/integrations/src/base/errors/http/index.ts
index dc90256db..6a1e8926b 100644
--- a/packages/integrations/src/base/errors/http/index.ts
+++ b/packages/integrations/src/base/errors/http/index.ts
@@ -1,6 +1,7 @@
import {
AxiosHttpErrorHandler,
FetchHttpErrorHandler,
+ OctokitHttpErrorHandler,
OFetchHttpErrorHandler,
TsdavHttpErrorHandler,
} from "@homarr/common/server";
@@ -11,3 +12,4 @@ export const integrationFetchHttpErrorHandler = new IntegrationHttpErrorHandler(
export const integrationOFetchHttpErrorHandler = new IntegrationHttpErrorHandler(new OFetchHttpErrorHandler());
export const integrationAxiosHttpErrorHandler = new IntegrationHttpErrorHandler(new AxiosHttpErrorHandler());
export const integrationTsdavHttpErrorHandler = new IntegrationHttpErrorHandler(new TsdavHttpErrorHandler());
+export const integrationOctokitHttpErrorHandler = new IntegrationHttpErrorHandler(new OctokitHttpErrorHandler());
diff --git a/packages/integrations/src/github-container-registry/github-container-registry-integration.ts b/packages/integrations/src/github-container-registry/github-container-registry-integration.ts
index 826de6a2f..bcb496acd 100644
--- a/packages/integrations/src/github-container-registry/github-container-registry-integration.ts
+++ b/packages/integrations/src/github-container-registry/github-container-registry-integration.ts
@@ -1,11 +1,14 @@
+import { createAppAuth } from "@octokit/auth-app";
import { Octokit, RequestError } from "octokit";
+import type { fetch } from "undici";
import { fetchWithTrustedCertificatesAsync } from "@homarr/certificates/server";
import { logger } from "@homarr/log";
+import { HandleIntegrationErrors } from "../base/errors/decorator";
+import { integrationOctokitHttpErrorHandler } from "../base/errors/http";
import type { IntegrationTestingInput } from "../base/integration";
import { Integration } from "../base/integration";
-import { TestConnectionError } from "../base/test-connection/test-connection-error";
import type { TestingResult } from "../base/test-connection/test-connection-service";
import type { ReleasesProviderIntegration } from "../interfaces/releases-providers/releases-providers-integration";
import { getLatestRelease } from "../interfaces/releases-providers/releases-providers-integration";
@@ -18,23 +21,21 @@ import type {
const localLogger = logger.child({ module: "GitHubContainerRegistryIntegration" });
+@HandleIntegrationErrors([integrationOctokitHttpErrorHandler])
export class GitHubContainerRegistryIntegration extends Integration implements ReleasesProviderIntegration {
private static readonly userAgent = "Homarr-Lab/Homarr:GitHubContainerRegistryIntegration";
protected async testingAsync(input: IntegrationTestingInput): Promise {
- const headers: RequestInit["headers"] = {
- "User-Agent": GitHubContainerRegistryIntegration.userAgent,
- };
+ const api = this.getApi(input.fetchAsync);
- if (this.hasSecretValue("personalAccessToken"))
- headers.Authorization = `Bearer ${this.getSecretValue("personalAccessToken")}`;
-
- const response = await input.fetchAsync(this.url("/octocat"), {
- headers,
- });
-
- if (!response.ok) {
- return TestConnectionError.StatusResult(response);
+ if (this.hasSecretValue("personalAccessToken")) {
+ await api.rest.users.getAuthenticated();
+ } else if (this.hasSecretValue("githubAppId")) {
+ await api.rest.apps.getInstallation({
+ installation_id: Number(this.getSecretValue("githubInstallationId")),
+ });
+ } else {
+ await api.request("GET /octocat");
}
return {
@@ -131,15 +132,38 @@ export class GitHubContainerRegistryIntegration extends Integration implements R
}
}
- private getApi() {
+ private getAuthProperties(): Pick {
+ if (this.hasSecretValue("personalAccessToken"))
+ return {
+ auth: this.getSecretValue("personalAccessToken"),
+ };
+
+ if (this.hasSecretValue("githubAppId"))
+ return {
+ authStrategy: createAppAuth,
+ auth: {
+ appId: this.getSecretValue("githubAppId"),
+ installationId: this.getSecretValue("githubInstallationId"),
+ privateKey: this.getSecretValue("privateKey"),
+ } satisfies Parameters[0],
+ };
+
+ return {};
+ }
+
+ private getApi(customFetch?: typeof fetch) {
return new Octokit({
baseUrl: this.url("/").origin,
request: {
- fetch: fetchWithTrustedCertificatesAsync,
+ fetch: customFetch ?? fetchWithTrustedCertificatesAsync,
},
userAgent: GitHubContainerRegistryIntegration.userAgent,
- throttle: { enabled: false }, // Disable throttling for this integration, Octokit will retry by default after a set time, thus delaying the repsonse to the user in case of errors. Errors will be shown to the user, no need to retry the request.
- ...(this.hasSecretValue("personalAccessToken") ? { auth: this.getSecretValue("personalAccessToken") } : {}),
+ // Disable throttling for this integration, Octokit will retry by default after a set time,
+ // thus delaying the repsonse to the user in case of errors. Errors will be shown to the user, no need to retry the request.
+ throttle: { enabled: false },
+ ...this.getAuthProperties(),
});
}
}
+
+type OctokitOptions = Exclude[0], undefined>;
diff --git a/packages/integrations/src/github/github-integration.ts b/packages/integrations/src/github/github-integration.ts
index b97157904..92fbcd802 100644
--- a/packages/integrations/src/github/github-integration.ts
+++ b/packages/integrations/src/github/github-integration.ts
@@ -1,11 +1,14 @@
-import { Octokit, RequestError } from "octokit";
+import { createAppAuth } from "@octokit/auth-app";
+import { Octokit, RequestError as OctokitRequestError } from "octokit";
+import type { fetch } from "undici";
import { fetchWithTrustedCertificatesAsync } from "@homarr/certificates/server";
import { logger } from "@homarr/log";
+import { HandleIntegrationErrors } from "../base/errors/decorator";
+import { integrationOctokitHttpErrorHandler } from "../base/errors/http";
import type { IntegrationTestingInput } from "../base/integration";
import { Integration } from "../base/integration";
-import { TestConnectionError } from "../base/test-connection/test-connection-error";
import type { TestingResult } from "../base/test-connection/test-connection-service";
import type { ReleasesProviderIntegration } from "../interfaces/releases-providers/releases-providers-integration";
import { getLatestRelease } from "../interfaces/releases-providers/releases-providers-integration";
@@ -18,23 +21,21 @@ import type {
const localLogger = logger.child({ module: "GithubIntegration" });
+@HandleIntegrationErrors([integrationOctokitHttpErrorHandler])
export class GithubIntegration extends Integration implements ReleasesProviderIntegration {
private static readonly userAgent = "Homarr-Lab/Homarr:GithubIntegration";
protected async testingAsync(input: IntegrationTestingInput): Promise {
- const headers: RequestInit["headers"] = {
- "User-Agent": GithubIntegration.userAgent,
- };
+ const api = this.getApi(input.fetchAsync);
- if (this.hasSecretValue("personalAccessToken"))
- headers.Authorization = `Bearer ${this.getSecretValue("personalAccessToken")}`;
-
- const response = await input.fetchAsync(this.url("/octocat"), {
- headers,
- });
-
- if (!response.ok) {
- return TestConnectionError.StatusResult(response);
+ if (this.hasSecretValue("personalAccessToken")) {
+ await api.rest.users.getAuthenticated();
+ } else if (this.hasSecretValue("githubAppId")) {
+ await api.rest.apps.getInstallation({
+ installation_id: Number(this.getSecretValue("githubInstallationId")),
+ });
+ } else {
+ await api.request("GET /octocat");
}
return {
@@ -91,7 +92,7 @@ export class GithubIntegration extends Integration implements ReleasesProviderIn
return getLatestRelease(releasesProviderResponse, repository, details);
} catch (error) {
- const errorMessage = error instanceof RequestError ? error.message : String(error);
+ const errorMessage = error instanceof OctokitRequestError ? error.message : String(error);
localLogger.warn(`Failed to get releases for ${owner}\\${name} with Github integration`, {
owner,
@@ -131,21 +132,44 @@ export class GithubIntegration extends Integration implements ReleasesProviderIn
localLogger.warn(`Failed to get details for ${owner}\\${name} with Github integration`, {
owner,
name,
- error: error instanceof RequestError ? error.message : String(error),
+ error: error instanceof OctokitRequestError ? error.message : String(error),
});
return undefined;
}
}
- private getApi() {
+ private getAuthProperties(): Pick {
+ if (this.hasSecretValue("personalAccessToken"))
+ return {
+ auth: this.getSecretValue("personalAccessToken"),
+ };
+
+ if (this.hasSecretValue("githubAppId"))
+ return {
+ authStrategy: createAppAuth,
+ auth: {
+ appId: this.getSecretValue("githubAppId"),
+ installationId: this.getSecretValue("githubInstallationId"),
+ privateKey: this.getSecretValue("privateKey"),
+ } satisfies Parameters[0],
+ };
+
+ return {};
+ }
+
+ private getApi(customFetch?: typeof fetch) {
return new Octokit({
baseUrl: this.url("/").origin,
request: {
- fetch: fetchWithTrustedCertificatesAsync,
+ fetch: customFetch ?? fetchWithTrustedCertificatesAsync,
},
userAgent: GithubIntegration.userAgent,
- throttle: { enabled: false }, // Disable throttling for this integration, Octokit will retry by default after a set time, thus delaying the repsonse to the user in case of errors. Errors will be shown to the user, no need to retry the request.
- ...(this.hasSecretValue("personalAccessToken") ? { auth: this.getSecretValue("personalAccessToken") } : {}),
+ // Disable throttling for this integration, Octokit will retry by default after a set time,
+ // thus delaying the repsonse to the user in case of errors. Errors will be shown to the user, no need to retry the request.
+ throttle: { enabled: false },
+ ...this.getAuthProperties(),
});
}
}
+
+type OctokitOptions = Exclude[0], undefined>;
diff --git a/packages/integrations/src/index.ts b/packages/integrations/src/index.ts
index 713777607..ac21e3080 100644
--- a/packages/integrations/src/index.ts
+++ b/packages/integrations/src/index.ts
@@ -21,6 +21,7 @@ export { PiHoleIntegrationV5 } from "./pi-hole/v5/pi-hole-integration-v5";
export { PiHoleIntegrationV6 } from "./pi-hole/v6/pi-hole-integration-v6";
export { PlexIntegration } from "./plex/plex-integration";
export { ProwlarrIntegration } from "./prowlarr/prowlarr-integration";
+export { TrueNasIntegration } from "./truenas/truenas-integration";
export { OPNsenseIntegration } from "./opnsense/opnsense-integration";
// Types
diff --git a/packages/integrations/src/interfaces/health-monitoring/health-monitoring-types.ts b/packages/integrations/src/interfaces/health-monitoring/health-monitoring-types.ts
index b427baab9..49d659fe1 100644
--- a/packages/integrations/src/interfaces/health-monitoring/health-monitoring-types.ts
+++ b/packages/integrations/src/interfaces/health-monitoring/health-monitoring-types.ts
@@ -15,7 +15,7 @@ export interface SystemHealthMonitoring {
"1min": number;
"5min": number;
"15min": number;
- };
+ } | null;
rebootRequired: boolean;
availablePkgUpdates: number;
cpuTemp: number | undefined;
diff --git a/packages/integrations/src/plex/plex-integration.ts b/packages/integrations/src/plex/plex-integration.ts
index 1c842c02b..30e289ee8 100644
--- a/packages/integrations/src/plex/plex-integration.ts
+++ b/packages/integrations/src/plex/plex-integration.ts
@@ -265,7 +265,9 @@ const mapType = (type: string): "movie" | "tv" | "unknown" => {
switch (type) {
case "movie":
return "movie";
- case "tv":
+ case "show":
+ case "season":
+ case "episode":
return "tv";
default:
return "unknown";
diff --git a/packages/integrations/src/truenas/truenas-integration.ts b/packages/integrations/src/truenas/truenas-integration.ts
new file mode 100644
index 000000000..c31b873ba
--- /dev/null
+++ b/packages/integrations/src/truenas/truenas-integration.ts
@@ -0,0 +1,375 @@
+import dayjs from "dayjs";
+import z from "zod";
+
+import { createId } from "@homarr/common";
+import { RequestError, ResponseError } from "@homarr/common/server";
+import { logger } from "@homarr/log";
+
+import type { IntegrationTestingInput } from "../base/integration";
+import { Integration } from "../base/integration";
+import type { TestingResult } from "../base/test-connection/test-connection-service";
+import type { ISystemHealthMonitoringIntegration } from "../interfaces/health-monitoring/health-monitoring-integration";
+import type { SystemHealthMonitoring } from "../interfaces/health-monitoring/health-monitoring-types";
+
+const localLogger = logger.child({ module: "TrueNasIntegration" });
+
+const NETWORK_MULTIPLIER = 100;
+
+export class TrueNasIntegration extends Integration implements ISystemHealthMonitoringIntegration {
+ private static webSocketMap = new Map();
+
+ private wsUrl() {
+ const url = super.url("/websocket");
+ url.protocol = url.protocol.replace("http", "ws");
+ return url;
+ }
+
+ private get webSocket() {
+ return TrueNasIntegration.webSocketMap.get(this.integration.id) ?? null;
+ }
+
+ protected async testingAsync(_input: IntegrationTestingInput): Promise {
+ const webSocket = await this.connectWebSocketAsync();
+ await this.registerSessionAsync(webSocket);
+ await this.authenticateWebSocketAsync(webSocket);
+
+ // Remove current socket connection so we can authenticate with updated credentials
+ TrueNasIntegration.webSocketMap.delete(this.integration.id);
+
+ return { success: true };
+ }
+
+ /**
+ * TrueNAS API uses WebSocket. This function connects to the socket
+ * and resolves the promise if the connection was successful.
+ * @see https://www.truenas.com/docs/api/scale_websocket_api.html
+ */
+ private async connectWebSocketAsync(): Promise {
+ localLogger.debug("Connecting to websocket server", {
+ url: this.wsUrl(),
+ });
+ const webSocket = new WebSocket(this.wsUrl());
+
+ return new Promise((resolve, reject) => {
+ webSocket.onopen = () => {
+ localLogger.debug("Connected to websocket server", {
+ url: this.wsUrl(),
+ });
+ resolve(webSocket);
+ };
+
+ webSocket.onerror = () => {
+ reject(new Error("Failed to connect"));
+ };
+ });
+ }
+
+ /**
+ * Before authentication, a session must be obtained from the server using the "connect" event.
+ * @see https://www.truenas.com/docs/api/scale_websocket_api.html#websocket_protocol
+ */
+ private async registerSessionAsync(webSocket: WebSocket): Promise {
+ return new Promise((resolve, reject) => {
+ const subscribe = (event: MessageEvent) => {
+ const data = JSON.parse(event.data) as { msg: string };
+ if (data.msg === "connected") {
+ webSocket.removeEventListener("message", subscribe);
+ resolve();
+ } else if (data.msg === "failed") {
+ webSocket.removeEventListener("message", subscribe);
+ reject(new Error("Unable to establish connection"));
+ }
+ };
+
+ webSocket.addEventListener("message", subscribe);
+ webSocket.send(
+ JSON.stringify({
+ msg: "connect",
+ version: "1", // this must be number, not string
+ support: ["1"], // this must be number, not string
+ }),
+ );
+ });
+ }
+
+ /**
+ * After a session was obtained, the session can be authenticated.
+ * @see https://www.truenas.com/docs/api/scale_websocket_api.html#websocket_protocol
+ */
+ private async authenticateWebSocketAsync(webSocket?: WebSocket): Promise {
+ localLogger.debug("Authenticating with username and password", {
+ url: this.wsUrl(),
+ });
+ const response = await this.requestAsync(
+ "auth.login",
+ [this.getSecretValue("username"), this.getSecretValue("password")],
+ webSocket,
+ );
+ const result = await z.boolean().parseAsync(response);
+ if (!result) throw new ResponseError({ status: 401 });
+ localLogger.debug("Authenticated successfully with username and password", {
+ url: this.wsUrl(),
+ });
+ }
+
+ /**
+ * Retrieves data using the reporting method
+ * @see https://www.truenas.com/docs/api/scale_websocket_api.html#reporting
+ */
+ private async getReportingAsync(): Promise {
+ localLogger.debug("Retrieving reporting data", {
+ url: this.wsUrl(),
+ });
+
+ const response = await this.requestAsync("reporting.get_data", [
+ [
+ {
+ name: "cpu",
+ },
+ {
+ name: "memory",
+ },
+ {
+ name: "cputemp",
+ },
+ ],
+ {
+ aggregate: true,
+ start: dayjs().add(-5, "minutes").unix(),
+ end: dayjs().unix(),
+ },
+ ]);
+ const result = await z.array(reportingItemSchema).parseAsync(response);
+
+ localLogger.debug("Retrieved reporting data", {
+ url: this.wsUrl(),
+ count: result.length,
+ });
+ return result;
+ }
+
+ /**
+ * Retrieves a list of all available network interfaces
+ * @see https://www.truenas.com/docs/core/13.0/api/core_websocket_api.html#interface
+ */
+ private async getNetworkInterfacesAsync(): Promise> {
+ localLogger.debug("Retrieving available network-interfaces", {
+ url: this.wsUrl(),
+ });
+
+ const response = await this.requestAsync("interface.query", [
+ [], // no filters
+ {},
+ ]);
+ const result = await networkInterfaceSchema.parseAsync(response);
+
+ localLogger.debug("Retrieved available network-interfaces", {
+ url: this.wsUrl(),
+ count: result.length,
+ });
+ return result;
+ }
+
+ /**
+ * Retrieves reporting network data of the last 5 minutes
+ * @see https://www.truenas.com/docs/api/scale_websocket_api.html#reporting
+ */
+ private async getReportingNetdataAsync(): Promise> {
+ const networkInterfaces = await this.getNetworkInterfacesAsync();
+
+ localLogger.debug("Retrieving reporting network data", {
+ url: this.wsUrl(),
+ });
+
+ const response = await this.requestAsync("reporting.netdata_get_data", [
+ networkInterfaces.map((networkInterface) => ({
+ name: "interface",
+ identifier: networkInterface.id,
+ })),
+ {
+ start: dayjs().add(-5, "minutes").unix(),
+ end: dayjs().unix(),
+ },
+ ]);
+ const result = await reportingNetDataSchema.parseAsync(response);
+
+ localLogger.debug("Retrieved reporting-network-data", {
+ url: this.wsUrl(),
+ count: result.length,
+ });
+ return result;
+ }
+
+ /**
+ * Retrieves information about the system
+ * @see https://www.truenas.com/docs/api/scale_websocket_api.html#system
+ */
+ private async getSystemInformationAsync(): Promise> {
+ localLogger.debug("Retrieving system-information", {
+ url: this.wsUrl(),
+ });
+
+ const response = await this.requestAsync("system.info");
+ const result = await systemInfoSchema.parseAsync(response);
+
+ localLogger.debug("Retrieved system-information", {
+ url: this.wsUrl(),
+ });
+ return result;
+ }
+
+ public async getSystemInfoAsync(): Promise {
+ const systemInformation = await this.getSystemInformationAsync();
+ const reporting = await this.getReportingAsync();
+
+ const cpuData = this.extractLatestReportingData(reporting, "cpu");
+ const cpuTempData = this.extractLatestReportingData(reporting, "cputemp");
+ const memoryData = this.extractLatestReportingData(reporting, "memory");
+
+ const netdata = await this.getReportingNetdataAsync();
+
+ const upload = this.extractNetworkTrafficData(netdata, 2); // Index 2 is "sent"
+ const download = this.extractNetworkTrafficData(netdata, 1); // Index 1 is "received"
+
+ return {
+ cpuUtilization: cpuData.reduce((acc, item) => acc + (item > 100 ? 0 : item), 0) / cpuData.length,
+ cpuTemp: Math.max(...cpuTempData.filter((_item, i) => i > 0)),
+ memAvailableInBytes: systemInformation.physmem,
+ memUsedInBytes: memoryData[1] ?? 0, // Index 0 is UNIX timestamp, Index 1 is free space in bytes
+ fileSystem: [],
+ availablePkgUpdates: 0,
+ network: {
+ up: upload * NETWORK_MULTIPLIER,
+ down: download * NETWORK_MULTIPLIER,
+ },
+ loadAverage: null,
+ smart: [],
+ uptime: systemInformation.uptime_seconds,
+ version: systemInformation.version,
+ cpuModelName: systemInformation.model,
+ rebootRequired: false,
+ };
+ }
+
+ /**
+ * Send a request through websocket and return response
+ * Times out after 5 seconds when no response was received.
+ * @param method json-rpc method to call
+ * @param params array of parameters
+ * @param webSocketOverride override of webSocket, helpful for not storing the connection
+ * @returns result of json-rpc call
+ */
+ private async requestAsync(method: string, params: unknown[] = [], webSocketOverride?: WebSocket) {
+ let webSocket = webSocketOverride ?? this.webSocket;
+ if (!webSocket || webSocket.readyState !== WebSocket.OPEN) {
+ localLogger.debug("Connecting to websocket", {
+ url: this.wsUrl(),
+ });
+ // We can only land here with static webSocket
+ webSocket = await this.connectWebSocketAsync();
+ await this.registerSessionAsync(webSocket);
+
+ TrueNasIntegration.webSocketMap.set(this.integration.id, webSocket);
+ await this.authenticateWebSocketAsync();
+ }
+
+ return await new Promise((resolve, reject) => {
+ const id = createId();
+ const handler = (event: MessageEvent) => {
+ const data = JSON.parse(event.data) as Record;
+ if (data.msg !== "result") return;
+ if (data.id !== id) return;
+
+ clearTimeout(timeoutId);
+ webSocket.removeEventListener("message", handler);
+ localLogger.debug("Received method response", {
+ id,
+ method,
+ url: this.wsUrl(),
+ });
+ resolve(data.result);
+ };
+ const timeoutId = setTimeout(() => {
+ webSocket.removeEventListener("message", handler);
+ reject(
+ new RequestError(
+ {
+ type: "timeout",
+ reason: "aborted",
+ code: "ECONNABORTED",
+ },
+ { cause: new Error("Canceled request after 5 seconds") },
+ ),
+ );
+ }, 5000);
+
+ webSocket.addEventListener("message", handler);
+
+ localLogger.debug("Sending method request", {
+ id,
+ method,
+ url: this.wsUrl(),
+ });
+
+ webSocket.send(
+ JSON.stringify({
+ id,
+ msg: "method",
+ method,
+ params,
+ }),
+ );
+ });
+ }
+
+ private extractNetworkTrafficData = (data: z.infer, index = 1 | 2) => {
+ return data.reduce((acc, current) => acc + (current.data.at(-1)?.at(index) ?? 0), 0);
+ };
+
+ private extractLatestReportingData(data: ReportingItem[], key: ReportingItem["identifier"]) {
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ const dataObject = data.find((item) => item.identifier === key)!;
+ // TODO: check why the below sorting is done, because right now it compares number[] with number[]?
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ return dataObject.data.sort((item1, item2) => (item1 > item2 ? -1 : 1))[0]!;
+ }
+}
+
+const reportingItemSchema = z.object({
+ name: z.enum(["cpu", "memory", "cputemp"]),
+ identifier: z.enum(["cpu", "memory", "cputemp"]),
+ aggregations: z.object({
+ min: z.record(z.string(), z.unknown()),
+ mean: z.record(z.string(), z.unknown()),
+ max: z.record(z.string(), z.unknown()),
+ }),
+ start: z.number().min(0),
+ end: z.number().min(0),
+ legend: z.array(z.string()),
+ data: z.array(z.array(z.number())),
+});
+
+type ReportingItem = z.infer;
+
+const reportingNetDataSchema = z.array(
+ z.object({
+ name: z.string(),
+ identifier: z.string(),
+ data: z.array(z.array(z.number())),
+ }),
+);
+
+const systemInfoSchema = z.object({
+ version: z.string(),
+ hostname: z.string(),
+ physmem: z.number().min(0), // pysical memory
+ model: z.string(), // cpu model
+ uptime_seconds: z.number().min(0),
+});
+
+const networkInterfaceSchema = z.array(
+ z.object({
+ id: z.string(),
+ name: z.string(),
+ }),
+);
diff --git a/packages/log/package.json b/packages/log/package.json
index 82a9e1a04..92e397e67 100644
--- a/packages/log/package.json
+++ b/packages/log/package.json
@@ -33,7 +33,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/modals-collection/package.json b/packages/modals-collection/package.json
index 83ae7ca50..f53844155 100644
--- a/packages/modals-collection/package.json
+++ b/packages/modals-collection/package.json
@@ -33,10 +33,10 @@
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
- "@mantine/core": "^8.2.7",
+ "@mantine/core": "^8.3.1",
"@tabler/icons-react": "^3.34.1",
- "dayjs": "^1.11.13",
- "next": "15.5.0",
+ "dayjs": "^1.11.18",
+ "next": "15.5.2",
"react": "19.1.1",
"react-dom": "19.1.1",
"zod": "^4.1.5"
@@ -45,7 +45,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/modals-collection/src/boards/import-board-modal.tsx b/packages/modals-collection/src/boards/import-board-modal.tsx
index 2e8af5c84..1fd5cbfdf 100644
--- a/packages/modals-collection/src/boards/import-board-modal.tsx
+++ b/packages/modals-collection/src/boards/import-board-modal.tsx
@@ -59,7 +59,7 @@ export const ImportBoardModal = createModal(({ actions }) => {
}
setFileValid(true);
- form.setFieldValue("configuration.name", result.data.configProperties.name);
+ form.setFieldValue("configuration.name", result.data.configProperties.name.replaceAll(" ", "-"));
})();
},
},
diff --git a/packages/modals/package.json b/packages/modals/package.json
index 32fa1d153..a889423ec 100644
--- a/packages/modals/package.json
+++ b/packages/modals/package.json
@@ -24,15 +24,15 @@
"dependencies": {
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
- "@mantine/core": "^8.2.7",
- "@mantine/hooks": "^8.2.7",
+ "@mantine/core": "^8.3.1",
+ "@mantine/hooks": "^8.3.1",
"react": "19.1.1"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/notifications/package.json b/packages/notifications/package.json
index 8ce7ca59e..abdfb39e9 100644
--- a/packages/notifications/package.json
+++ b/packages/notifications/package.json
@@ -24,14 +24,14 @@
"prettier": "@homarr/prettier-config",
"dependencies": {
"@homarr/ui": "workspace:^0.1.0",
- "@mantine/notifications": "^8.2.7",
+ "@mantine/notifications": "^8.3.1",
"@tabler/icons-react": "^3.34.1"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/old-import/package.json b/packages/old-import/package.json
index 1334bd579..833ebabe5 100644
--- a/packages/old-import/package.json
+++ b/packages/old-import/package.json
@@ -37,22 +37,22 @@
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
- "@mantine/core": "^8.2.7",
- "@mantine/hooks": "^8.2.7",
+ "@mantine/core": "^8.3.1",
+ "@mantine/hooks": "^8.3.1",
"adm-zip": "0.5.16",
- "next": "15.5.0",
+ "next": "15.5.2",
"react": "19.1.1",
"react-dom": "19.1.1",
"superjson": "2.2.2",
"zod": "^4.1.5",
- "zod-form-data": "^3.0.0"
+ "zod-form-data": "^3.0.1"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/adm-zip": "0.5.7",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/old-import/src/analyse/analyse-oldmarr-import.ts b/packages/old-import/src/analyse/analyse-oldmarr-import.ts
index 5888d07f2..c526728af 100644
--- a/packages/old-import/src/analyse/analyse-oldmarr-import.ts
+++ b/packages/old-import/src/analyse/analyse-oldmarr-import.ts
@@ -29,7 +29,7 @@ export const analyseOldmarrImportAsync = async (file: File) => {
}
return {
- name: entry.name.replace(".json", ""),
+ name: entry.name.replaceAll(" ", "-").replace(".json", ""),
config: result.data ?? null,
isError: !result.success,
};
diff --git a/packages/old-import/src/widgets/options.ts b/packages/old-import/src/widgets/options.ts
index 24ad0e61f..fba538522 100644
--- a/packages/old-import/src/widgets/options.ts
+++ b/packages/old-import/src/widgets/options.ts
@@ -98,7 +98,6 @@ const optionMapping: OptionMapping = {
allowMicrophone: (oldOptions) => oldOptions.allowMicrophone,
allowGeolocation: (oldOptions) => oldOptions.allowGeolocation,
allowScrolling: (oldOptions) => oldOptions.allowScrolling,
- allowTransparency: (oldOptions) => oldOptions.allowTransparency,
},
video: {
feedUrl: (oldOptions) => oldOptions.FeedUrl,
@@ -118,6 +117,7 @@ const optionMapping: OptionMapping = {
enableRtl: (oldOptions) => oldOptions.enableRtl,
maximumAmountPosts: (oldOptions) => oldOptions.maximumAmountOfPosts,
textLinesClamp: (oldOptions) => oldOptions.textLinesClamp,
+ hideDescription: () => undefined,
},
notebook: {
allowReadOnlyCheck: (oldOptions) => oldOptions.allowReadOnlyCheck,
diff --git a/packages/old-schema/package.json b/packages/old-schema/package.json
index fd0a77787..ec0727bbe 100644
--- a/packages/old-schema/package.json
+++ b/packages/old-schema/package.json
@@ -29,7 +29,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/ping/package.json b/packages/ping/package.json
index 253eb80ba..96374717e 100644
--- a/packages/ping/package.json
+++ b/packages/ping/package.json
@@ -30,7 +30,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/redis/package.json b/packages/redis/package.json
index fa780aa9e..30bb440cb 100644
--- a/packages/redis/package.json
+++ b/packages/redis/package.json
@@ -34,7 +34,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/request-handler/package.json b/packages/request-handler/package.json
index 154c9df45..222132001 100644
--- a/packages/request-handler/package.json
+++ b/packages/request-handler/package.json
@@ -22,14 +22,14 @@
},
"prettier": "@homarr/prettier-config",
"dependencies": {
- "@extractus/feed-extractor": "7.1.6",
+ "@extractus/feed-extractor": "7.1.7",
"@homarr/common": "workspace:^0.1.0",
"@homarr/db": "workspace:^0.1.0",
"@homarr/definitions": "workspace:^0.1.0",
"@homarr/integrations": "workspace:^0.1.0",
"@homarr/log": "workspace:^0.1.0",
"@homarr/redis": "workspace:^0.1.0",
- "dayjs": "^1.11.13",
+ "dayjs": "^1.11.18",
"octokit": "^5.0.3",
"superjson": "2.2.2",
"undici": "7.15.0"
@@ -38,7 +38,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/server-settings/package.json b/packages/server-settings/package.json
index c3e19a286..46bf34f85 100644
--- a/packages/server-settings/package.json
+++ b/packages/server-settings/package.json
@@ -29,7 +29,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/settings/package.json b/packages/settings/package.json
index 057f7ef6d..2bf919e94 100644
--- a/packages/settings/package.json
+++ b/packages/settings/package.json
@@ -26,8 +26,8 @@
"@homarr/api": "workspace:^0.1.0",
"@homarr/db": "workspace:^0.1.0",
"@homarr/server-settings": "workspace:^0.1.0",
- "@mantine/dates": "^8.2.7",
- "next": "15.5.0",
+ "@mantine/dates": "^8.3.1",
+ "next": "15.5.2",
"react": "19.1.1",
"react-dom": "19.1.1"
},
@@ -35,7 +35,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/spotlight/package.json b/packages/spotlight/package.json
index 7303933b9..730e3f31d 100644
--- a/packages/spotlight/package.json
+++ b/packages/spotlight/package.json
@@ -33,12 +33,12 @@
"@homarr/settings": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
- "@mantine/core": "^8.2.7",
- "@mantine/hooks": "^8.2.7",
- "@mantine/spotlight": "^8.2.7",
+ "@mantine/core": "^8.3.1",
+ "@mantine/hooks": "^8.3.1",
+ "@mantine/spotlight": "^8.3.1",
"@tabler/icons-react": "^3.34.1",
- "jotai": "^2.13.1",
- "next": "15.5.0",
+ "jotai": "^2.14.0",
+ "next": "15.5.2",
"react": "19.1.1",
"react-dom": "19.1.1",
"use-deep-compare-effect": "^1.8.1"
@@ -47,7 +47,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/translation/package.json b/packages/translation/package.json
index 32ddb589c..67cc7e713 100644
--- a/packages/translation/package.json
+++ b/packages/translation/package.json
@@ -29,11 +29,11 @@
"dependencies": {
"@homarr/common": "workspace:^0.1.0",
"@homarr/definitions": "workspace:^0.1.0",
- "dayjs": "^1.11.13",
+ "dayjs": "^1.11.18",
"deepmerge": "4.3.1",
"mantine-react-table": "2.0.0-beta.9",
- "next": "15.5.0",
- "next-intl": "4.3.5",
+ "next": "15.5.2",
+ "next-intl": "4.3.7",
"react": "19.1.1",
"react-dom": "19.1.1"
},
@@ -41,7 +41,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/translation/src/lang/ca.json b/packages/translation/src/lang/ca.json
index cacb184e9..1b5e2cde4 100644
--- a/packages/translation/src/lang/ca.json
+++ b/packages/translation/src/lang/ca.json
@@ -44,7 +44,7 @@
"apps": "Aplicacions",
"boards": "Tauler",
"integrations": "Integracions",
- "credentialUsers": ""
+ "credentialUsers": "Credencials d'usuari"
}
},
"tokenModal": {
@@ -82,7 +82,7 @@
"form": {
"name": {
"label": "Nom del grup",
- "description": ""
+ "description": "El nom ha de coincidir amb el grup d'Administradors del proveïdor extern"
}
}
},
@@ -110,12 +110,12 @@
"page": {
"login": {
"title": "Entreu al vostre compte",
- "subtitle": ""
+ "subtitle": "Benvingut de nou! Si us plau, introduïu les credencials"
},
"invite": {
"title": "Uneix-te a Homarr",
- "subtitle": "",
- "description": ""
+ "subtitle": "Benvingut a Homarr! Si us plau, crea el teu compte",
+ "description": "Has sigut invitat per {username}"
},
"init": {
"title": "Nova instal·lació de Homarr",
@@ -178,7 +178,7 @@
},
"forgotPassword": {
"label": "Heu oblidat la contrasenya?",
- "description": ""
+ "description": "Un administrador pot utilitzar el següent comandament per reinicialitzar la teva contrasenya"
}
},
"register": {
@@ -239,10 +239,10 @@
"changePingIconsEnabled": {
"notification": {
"success": {
- "message": ""
+ "message": "Icones de ping alternats correctament"
},
"error": {
- "message": ""
+ "message": "Impossible d'alternar les icones de ping"
}
}
},
@@ -307,12 +307,12 @@
"name": "Nom",
"members": "Membres",
"homeBoard": {
- "label": "",
- "description": ""
+ "label": "Panell d'inici",
+ "description": "Només els panells accessibles al grup es pot seleccionar"
},
"mobileBoard": {
- "label": "",
- "description": ""
+ "label": "Panell mòbil",
+ "description": "Només els panells accessibles al grup es pot seleccionar"
}
},
"permission": {
@@ -384,29 +384,29 @@
},
"full-all": {
"label": "Accés total a les integracions",
- "description": ""
+ "description": "Permetre que els membres gestionin, utilitzin i interactuïn amb cada integració"
}
}
},
"media": {
- "title": "",
+ "title": "Medis",
"item": {
"upload": {
- "label": "",
- "description": ""
+ "label": "Pujar medis",
+ "description": "Permetre als membres puja medis"
},
"view-all": {
- "label": "",
- "description": ""
+ "label": "Veure medis",
+ "description": "Permet que els membres vegin tots els continguts multimèdia"
},
"full-all": {
- "label": "",
- "description": ""
+ "label": "Accés complet als medis",
+ "description": "Permet als membres gestionar i esborrar tots els continguts multimèdia"
}
}
},
"other": {
- "title": "",
+ "title": "Altres",
"item": {
"view-logs": {
"label": "Veure registres",
@@ -426,95 +426,95 @@
"description": "Permet que els membres modifiquin tots els motors de cerca"
},
"full-all": {
- "label": "",
- "description": ""
+ "label": "Accés complet a la cerca",
+ "description": "Permet als membres gestionar i esborrar els motors de cerca"
}
}
}
},
"memberNotice": {
- "mixed": "",
- "external": ""
+ "mixed": "Alguns membres de proveïdors externs no es poden gestionar aquí",
+ "external": "Tots els membres de proveïdors externs no es poden gestionar aquí"
},
"reservedNotice": {
- "message": ""
+ "message": "Aquest grup està reservat pel sistema i restringeix algunes accions "
},
"action": {
"create": {
- "label": "",
+ "label": "Nou grup",
"notification": {
"success": {
- "message": ""
+ "message": "El grup s'ha creat satisfactòriament"
},
"error": {
- "message": ""
+ "message": "El grup no es pot crear"
}
}
},
"transfer": {
- "label": "",
- "description": "",
- "confirm": "",
+ "label": "Transferir propietari",
+ "description": "Transferir la propietat del grup a altre usuari.",
+ "confirm": "Segur que vols transferir el propietari de {name} a {username}?",
"notification": {
"success": {
- "message": ""
+ "message": "Transferència del {group} a {user} satisfactòria"
},
"error": {
- "message": ""
+ "message": "No ha sigut possible transferir la propietat"
}
}
},
"addMember": {
- "label": ""
+ "label": "Afegir usuari"
},
"removeMember": {
- "label": "",
- "confirm": ""
+ "label": "Esborrar usuari",
+ "confirm": "Segur que vols esborrar {user} d'aquest grup?"
},
"delete": {
- "label": "",
- "description": "",
- "confirm": "",
+ "label": "Esborrar grup",
+ "description": "Un cop esborris el grup, no el podràs recuperar. ",
+ "confirm": "Segur que desitges esborrar el grup {name}?",
"notification": {
"success": {
- "message": ""
+ "message": "S'ha esborrat el grup {name}"
},
"error": {
- "message": ""
+ "message": "Impossible esborrar el grup {name}"
}
}
},
"changePermissions": {
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Privilegis guardats",
+ "message": "Els privilegis s'han guardat satisfactòriament"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Privilegis no guardats",
+ "message": "Els privilegis no s'han guardat"
}
}
},
"update": {
"notification": {
"success": {
- "message": ""
+ "message": "El grup {name} s'ha guardat satisfactòriament"
},
"error": {
- "message": ""
+ "message": "No s'ha pogut guardar el grup {name}"
}
}
},
"select": {
- "label": "",
- "notFound": ""
+ "label": "Seleccionar grup",
+ "notFound": "No s'ha trobat el grup"
},
"settings": {
"board": {
"notification": {
"success": {
- "title": "",
+ "title": "Configuració guardada",
"message": ""
},
"error": {
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": ""
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": ""
},
- "sessionCleanup": {
- "label": ""
- },
"updateChecker": {
"label": ""
},
diff --git a/packages/translation/src/lang/cn.json b/packages/translation/src/lang/cn.json
index 698e392a5..8254d6c5b 100644
--- a/packages/translation/src/lang/cn.json
+++ b/packages/translation/src/lang/cn.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": "帖子数量限制"
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": "DNS Hole 数据"
},
- "sessionCleanup": {
- "label": "会话清理"
- },
"updateChecker": {
"label": "更新检查"
},
diff --git a/packages/translation/src/lang/cs.json b/packages/translation/src/lang/cs.json
index 05c661e4d..ee130d966 100644
--- a/packages/translation/src/lang/cs.json
+++ b/packages/translation/src/lang/cs.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": ""
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": ""
},
- "sessionCleanup": {
- "label": ""
- },
"updateChecker": {
"label": ""
},
diff --git a/packages/translation/src/lang/da.json b/packages/translation/src/lang/da.json
index 1d385607d..295d1a7d7 100644
--- a/packages/translation/src/lang/da.json
+++ b/packages/translation/src/lang/da.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "API-nøgle (Secret)",
"newLabel": "Ny API-nøgle (Key)"
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": "Grænse for antal indlæg"
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": "DNS Hole Data"
},
- "sessionCleanup": {
- "label": "Sessions Oprydning"
- },
"updateChecker": {
"label": "Opdaterings checker"
},
diff --git a/packages/translation/src/lang/de-CH.json b/packages/translation/src/lang/de-CH.json
index f77192c6c..09d389274 100644
--- a/packages/translation/src/lang/de-CH.json
+++ b/packages/translation/src/lang/de-CH.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": "Limit für Beiträge"
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": "DNS Hole Daten"
},
- "sessionCleanup": {
- "label": "Sitzung bereinigen"
- },
"updateChecker": {
"label": "Updateprüfer"
},
diff --git a/packages/translation/src/lang/de.json b/packages/translation/src/lang/de.json
index 0efecd0f9..3ade9ce45 100644
--- a/packages/translation/src/lang/de.json
+++ b/packages/translation/src/lang/de.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": "Limit für Beiträge"
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": "DNS Hole Daten"
},
- "sessionCleanup": {
- "label": "Sitzung bereinigen"
- },
"updateChecker": {
"label": "Updateprüfer"
},
diff --git a/packages/translation/src/lang/el.json b/packages/translation/src/lang/el.json
index 1f59ec70a..c3d3d88a8 100644
--- a/packages/translation/src/lang/el.json
+++ b/packages/translation/src/lang/el.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": ""
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": ""
},
- "sessionCleanup": {
- "label": ""
- },
"updateChecker": {
"label": ""
},
diff --git a/packages/translation/src/lang/en-gb.json b/packages/translation/src/lang/en-gb.json
index ffa027182..61461d20c 100644
--- a/packages/translation/src/lang/en-gb.json
+++ b/packages/translation/src/lang/en-gb.json
@@ -12,7 +12,7 @@
},
"import": {
"title": "Import data",
- "subtitle": "You can import your data from an existing Homarr instance.",
+ "subtitle": "You can import data from an existing Homarr instance.",
"dropzone": {
"title": "Drag your ZIP file here or click to browse your files",
"description": "The ZIP file you uploaded will be processed and you will be able to select what you would like to import"
@@ -65,7 +65,7 @@
},
"user": {
"title": "Administrative user",
- "subtitle": "Please specify the credentials for your user.",
+ "subtitle": "Please specify the credentials for your administrator user.",
"notification": {
"success": {
"title": "User created",
@@ -186,7 +186,7 @@
"notification": {
"success": {
"title": "Account has been created",
- "message": "Please log-in to continue"
+ "message": "Please log in to continue"
},
"error": {
"title": "Account creation has failed",
@@ -337,7 +337,7 @@
"description": "Allow members to add any applications to their boards"
},
"modify-all": {
- "label": "Modify all applciations",
+ "label": "Modify all applications",
"description": "Allow members to modify applications"
},
"full-all": {
@@ -368,7 +368,7 @@
}
},
"integration": {
- "title": "Integratioons",
+ "title": "Integrations",
"item": {
"create": {
"label": "Create integrations",
@@ -457,7 +457,7 @@
"confirm": "Are you want to transfer the ownership of the group, {name} to {username}",
"notification": {
"success": {
- "message": "Successfully transfered group, {group} to {user}"
+ "message": "Successfully transferred group {group} to {user}"
},
"error": {
"message": "Unable to transfer the group's ownership"
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -1147,7 +1159,7 @@
},
"remove": {
"title": "Remove dynamic section",
- "message": "Are you certain that you want to remove this dynamic section? All items inside will be moved to the same location inside of the parent section."
+ "message": "Are you certain that you want to remove this dynamic section? All items inside will be moved to the same location within the parent section."
}
},
"category": {
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": ""
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": ""
},
- "sessionCleanup": {
- "label": ""
- },
"updateChecker": {
"label": ""
},
diff --git a/packages/translation/src/lang/en.json b/packages/translation/src/lang/en.json
index cfd2eabb3..e7c63f9f6 100644
--- a/packages/translation/src/lang/en.json
+++ b/packages/translation/src/lang/en.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "API Key (Secret)",
"newLabel": "New API Key (Secret)"
+ },
+ "githubAppId": {
+ "label": "App Id",
+ "newLabel": "New App Id"
+ },
+ "githubInstallationId": {
+ "label": "Installation Id",
+ "newLabel": "New Installation Id"
+ },
+ "privateKey": {
+ "label": "Private key",
+ "newLabel": "New private key"
}
}
},
@@ -1531,7 +1543,15 @@
"width": "Width",
"height": "Height"
},
- "placeholder": "Start writing your notes"
+ "placeholder": "Start writing your notes",
+ "dismiss": {
+ "title": "Dismiss changes?",
+ "message": "You have unsaved changes in your notebook. Are you sure you want to discard them?",
+ "action": {
+ "discard": "Discard changes",
+ "keepEditing": "Keep editing"
+ }
+ }
},
"iframe": {
"name": "iFrame",
@@ -2259,6 +2279,9 @@
},
"maximumAmountPosts": {
"label": "Amount posts limit"
+ },
+ "hideDescription": {
+ "label": "Hide description"
}
}
},
@@ -2475,7 +2498,17 @@
"systemResources": {
"name": "System resources",
"description": "CPU, Memory, Disk and other hardware usage of your system",
- "option": {},
+ "option": {
+ "visibleCharts": {
+ "label": "Visible charts",
+ "description": "Select the charts you want to be visible.",
+ "option": {
+ "cpu": "CPU",
+ "memory": "Memory",
+ "network": "Network"
+ }
+ }
+ },
"card": {
"cpu": "CPU",
"memory": "MEM",
@@ -3240,9 +3273,6 @@
"dnsHole": {
"label": "DNS Hole Data"
},
- "sessionCleanup": {
- "label": "Session Cleanup"
- },
"updateChecker": {
"label": "Update checker"
},
diff --git a/packages/translation/src/lang/es.json b/packages/translation/src/lang/es.json
index eb05bec8e..38f87ff2a 100644
--- a/packages/translation/src/lang/es.json
+++ b/packages/translation/src/lang/es.json
@@ -57,7 +57,7 @@
},
"notification": {
"error": {
- "title": "Token inválido",
+ "title": "Token no válido",
"message": "El token que has introducido no es válido"
}
}
@@ -835,7 +835,7 @@
"message": "La conexión se ha establecido con éxito"
},
"invalidUrl": {
- "title": "URL inválida",
+ "title": "URL no válida",
"message": "La URL no es válida"
},
"secretNotDefined": {
@@ -843,7 +843,7 @@
"message": "No se proporcionaron todas las credenciales"
},
"invalidCredentials": {
- "title": "Credenciales inválidas",
+ "title": "Credenciales no válidas",
"message": "Las credenciales no son válidas"
},
"commonError": {
@@ -887,7 +887,7 @@
"message": "La conexión ha sido rechazada"
},
"invalidJson": {
- "title": "JSON inválido",
+ "title": "JSON no válido",
"message": "La respuesta no fue válida JSON"
},
"wrongPath": {
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "Clave API (Credencial)",
"newLabel": "Nueva clave API (Credencial)"
+ },
+ "githubAppId": {
+ "label": "ID de aplicación",
+ "newLabel": "Nuevo ID de aplicación"
+ },
+ "githubInstallationId": {
+ "label": "ID de instalación",
+ "newLabel": "Nuevo ID de instalación"
+ },
+ "privateKey": {
+ "label": "Clave privada",
+ "newLabel": "Nueva clave privada"
}
}
},
@@ -963,7 +975,7 @@
},
"media": {
"plural": "Imágenes",
- "search": "Encuentra una imagen",
+ "search": "Buscar una imagen",
"field": {
"name": "Nombre",
"size": "Tamaño",
@@ -1279,12 +1291,12 @@
}
},
"descriptionDisplayMode": {
- "label": "",
- "description": "",
+ "label": "Modo de visualización de descripción",
+ "description": "Elige cómo mostrar la descripción de la aplicación",
"option": {
- "normal": "",
- "tooltip": "",
- "hidden": ""
+ "normal": "Dentro del widget",
+ "tooltip": "Como consejo",
+ "hidden": "Oculto"
}
}
},
@@ -1967,105 +1979,105 @@
"label": "Habilitar ordenar elementos"
},
"defaultSort": {
- "label": ""
+ "label": "Columna usada para ordenar por defecto"
},
"descendingDefaultSort": {
- "label": ""
+ "label": "Invertir orden"
},
"showCompletedUsenet": {
- "label": ""
+ "label": "Mostrar entradas de Usenet marcadas como completadas"
},
"showCompletedTorrent": {
- "label": ""
+ "label": "Mostrar entradas de Torrent marcadas como completadas"
},
"showCompletedHttp": {
- "label": ""
+ "label": "Mostrar entradas variadas marcadas como completadas"
},
"activeTorrentThreshold": {
- "label": ""
+ "label": "Ocultar Torrent completado bajo este umbral (en kiB/s)"
},
"categoryFilter": {
- "label": ""
+ "label": "Categorías/etiquetas para filtrar"
},
"filterIsWhitelist": {
- "label": ""
+ "label": "Filtrar como lista blanca"
},
"applyFilterToRatio": {
- "label": ""
+ "label": "Utilizar filtro para calcular la relación"
},
"limitPerIntegration": {
- "label": "",
- "description": ""
+ "label": "Limitar elementos por integración",
+ "description": "Esto limitará el número de elementos mostrados por integración, no globalmente"
}
},
"errors": {
- "noColumns": "",
- "noCommunications": ""
+ "noColumns": "Seleccionar Columnas en Artículos",
+ "noCommunications": "No se pueden cargar los datos desde la integración"
},
"items": {
"actions": {
- "columnTitle": ""
+ "columnTitle": "Controles"
},
"added": {
- "columnTitle": "",
+ "columnTitle": "Añadido",
"detailsTitle": "Fecha Agregada"
},
"category": {
- "columnTitle": "",
- "detailsTitle": ""
+ "columnTitle": "Extras",
+ "detailsTitle": "Categorías (O información adicional)"
},
"downSpeed": {
"columnTitle": "Descarga",
"detailsTitle": "Velocidad de Descarga"
},
"index": {
- "columnTitle": "",
- "detailsTitle": ""
+ "columnTitle": "#",
+ "detailsTitle": "Índice actual dentro del cliente"
},
"id": {
- "columnTitle": ""
+ "columnTitle": "ID"
},
"integration": {
"columnTitle": "Integración"
},
"name": {
- "columnTitle": ""
+ "columnTitle": "Nombre de la tarea"
},
"progress": {
- "columnTitle": "Completado %",
- "detailsTitle": ""
+ "columnTitle": "Progreso",
+ "detailsTitle": "Progreso de Descarga"
},
"ratio": {
- "columnTitle": "",
- "detailsTitle": ""
+ "columnTitle": "Relación",
+ "detailsTitle": "Relación de Torrent (recibido/enviado)"
},
"received": {
- "columnTitle": "",
- "detailsTitle": ""
+ "columnTitle": "Descarga total",
+ "detailsTitle": "Total descargado"
},
"sent": {
- "columnTitle": "",
- "detailsTitle": ""
+ "columnTitle": "Subida total",
+ "detailsTitle": "Total subido"
},
"size": {
- "columnTitle": "",
- "detailsTitle": ""
+ "columnTitle": "Tamaño del archivo",
+ "detailsTitle": "Tamaño total de la selección/archivos"
},
"state": {
"columnTitle": "Estado",
- "detailsTitle": ""
+ "detailsTitle": "Estado de la tarea"
},
"time": {
- "columnTitle": "",
- "detailsTitle": ""
+ "columnTitle": "Hora de finalización",
+ "detailsTitle": "Tiempo desde/hasta la finalización"
},
"type": {
- "columnTitle": "",
- "detailsTitle": ""
+ "columnTitle": "Tipo",
+ "detailsTitle": "Tipo de cliente de descarga"
},
"upSpeed": {
"columnTitle": "Subida",
- "detailsTitle": ""
+ "detailsTitle": "Velocidad de Subida"
}
},
"states": {
@@ -2073,67 +2085,67 @@
"queued": "En cola",
"paused": "Pausado",
"completed": "Completado",
- "failed": "",
- "processing": "",
- "leeching": "",
- "stalled": "",
+ "failed": "Fallido",
+ "processing": "Procesando",
+ "leeching": "Sangrando",
+ "stalled": "Estancado",
"unknown": "Desconocido",
- "seeding": ""
+ "seeding": "Sembrando"
},
"actions": {
"clients": {
- "modalTitle": "",
- "pause": "",
- "resume": ""
+ "modalTitle": "Descargar lista de clientes",
+ "pause": "Pausar todos los clientes/elementos",
+ "resume": "Reanudar todos los clientes/elementos"
},
"client": {
- "pause": "",
- "resume": ""
+ "pause": "Pausar cliente",
+ "resume": "Reanudar cliente"
},
"item": {
- "pause": "",
- "resume": "",
+ "pause": "Pausar elemento",
+ "resume": "Reanudar elemento",
"delete": {
- "title": "",
- "modalTitle": "",
- "entry": "",
- "entryAndFiles": ""
+ "title": "Eliminar elemento",
+ "modalTitle": "¿Estás seguro de que quieres eliminar este trabajo?",
+ "entry": "Eliminar entrada",
+ "entryAndFiles": "Eliminar entrada y archivo(s)"
}
}
},
- "globalRatio": ""
+ "globalRatio": "Relación global"
},
"mediaReleases": {
- "name": "",
- "description": "",
+ "name": "Lanzamientos de medios",
+ "description": "Mostrar nuevos medios añadidos o próximos lanzamientos desde diferentes integraciones",
"option": {
"layout": {
- "label": "",
+ "label": "Diseño",
"option": {
"backdrop": {
- "label": ""
+ "label": "Fondo"
},
"poster": {
- "label": ""
+ "label": "Cartel"
}
}
},
"showDescriptionTooltip": {
- "label": ""
+ "label": "Mostrar descripción"
},
"showType": {
- "label": ""
+ "label": "Mostrar insignia de tipo de medio"
},
"showSource": {
- "label": ""
+ "label": "Mostrar integración de origen"
}
},
"length": {
- "duration": ""
+ "duration": "{length}minutos"
}
},
"mediaRequests-requestList": {
- "name": "",
+ "name": "Lista de solicitudes de medios",
"description": "Mostrar una lista de todas las solicitudes multimedia de tu instancia de Overseerr o Jellyseerr",
"option": {
"linksTargetNewTab": {
@@ -2141,30 +2153,30 @@
}
},
"pending": {
- "approve": "",
- "approving": "",
- "decline": ""
+ "approve": "Aprobar solicitud",
+ "approving": "Aprobando solicitud...",
+ "decline": "Rechazar solicitud"
},
"availability": {
"unknown": "Desconocido",
- "pending": "",
- "processing": "",
+ "pending": "Pendiente",
+ "processing": "Procesando",
"partiallyAvailable": "Parcial",
"available": "Disponible",
- "blacklisted": "",
- "deleted": ""
+ "blacklisted": "Lista negra",
+ "deleted": "Eliminado"
},
"status": {
- "pending": "",
- "approved": "",
- "declined": "",
- "failed": "",
- "completed": ""
+ "pending": "Pendiente",
+ "approved": "Aprobado",
+ "declined": "Rechazado",
+ "failed": "Fallido",
+ "completed": "Completado"
},
- "toBeDetermined": ""
+ "toBeDetermined": "Por determinar"
},
"mediaRequests-requestStats": {
- "name": "",
+ "name": "Estadísticas de solicitudes de medios",
"description": "Estadísticas sobre tus solicitudes multimedia",
"option": {},
"titles": {
@@ -2172,28 +2184,28 @@
"main": "Estadísticas Multimedia",
"approved": "Ya aprobado",
"pending": "Aprobaciones pendientes",
- "processing": "",
- "declined": "",
- "available": "",
+ "processing": "Procesando",
+ "declined": "Ya rechazado",
+ "available": "Ya disponible",
"tv": "Solicitudes de TV",
"movie": "Solicitudes de películas",
- "total": ""
+ "total": "Total"
},
"users": {
"main": "Mejores usuarios",
- "requests": ""
+ "requests": "Solicitudes"
}
}
},
"mediaTranscoding": {
- "name": "",
- "description": "",
+ "name": "Transcodificación de medios",
+ "description": "Estadísticas, cola actual y estado del trabajador de la transcodificación de medios",
"option": {
"defaultView": {
"label": "Vista predeterminada"
},
"queuePageSize": {
- "label": ""
+ "label": "Tamaño de página de cola"
}
},
"tab": {
@@ -2201,9 +2213,9 @@
"queue": "Cola",
"statistics": "Estadísticas"
},
- "currentIndex": "",
+ "currentIndex": "{start}-{end} de {total}",
"healthCheck": {
- "title": "",
+ "title": "Comprobación de salud",
"queued": "En cola",
"status": {
"healthy": "Saludable",
@@ -2214,11 +2226,11 @@
"statistics": {
"empty": "Vacío",
"transcodes": "Transcodificaciones",
- "transcodesCount": "",
- "healthChecksCount": "",
- "filesCount": "",
- "savedSpace": "",
- "healthChecks": "",
+ "transcodesCount": "Transcodificaciones",
+ "healthChecksCount": "Comprobaciones de salud",
+ "filesCount": "Archivos",
+ "savedSpace": "Espacio ahorrado",
+ "healthChecks": "Comprobaciones de salud",
"videoCodecs": "Códecs",
"videoContainers": "Contenedores",
"videoResolutions": "Resoluciones"
@@ -2228,9 +2240,9 @@
"table": {
"file": "Archivo",
"eta": "Tiempo restante",
- "progress": "Completado %",
+ "progress": "Progreso",
"transcode": "Transcodificar",
- "healthCheck": ""
+ "healthCheck": "Comprobación de salud"
}
},
"queue": {
@@ -2239,145 +2251,148 @@
"file": "Archivo",
"size": "Tamaño",
"transcode": "Transcodificar",
- "healthCheck": ""
+ "healthCheck": "Comprobación de salud"
}
}
}
},
"rssFeed": {
- "name": "",
- "description": "",
+ "name": "Fuentes RSS",
+ "description": "Monitorear y mostrar una o más RSS genéricas, ATOM o JSON",
"option": {
"feedUrls": {
- "label": ""
+ "label": "URLs de la fuente"
},
"enableRtl": {
- "label": ""
+ "label": "Habilitar RTL"
},
"textLinesClamp": {
- "label": ""
+ "label": "Línea de descripción limpia"
},
"maximumAmountPosts": {
- "label": ""
+ "label": "Cantidad límite de publicaciones"
+ },
+ "hideDescription": {
+ "label": "Ocultar descripción"
}
}
},
"releases": {
- "name": "",
- "description": "",
+ "name": "Lanzamientos",
+ "description": "Muestra una lista de la versión actual de los repositorios dados con la expresión regular de la versión dada.",
"option": {
"newReleaseWithin": {
- "label": "",
- "description": ""
+ "label": "Nuevo lanzamiento dentro de",
+ "description": "Ejemplo de uso: 1w (1 semana), 10M (10 meses). Tipos de unidad aceptados h (horas), d (días), w (semanas), M (meses), y (años). Dejar vacío para no resaltar nuevos lanzamientos."
},
"staleReleaseWithin": {
- "label": "",
- "description": ""
+ "label": "Lanzamiento obsoleto dentro de",
+ "description": "Ejemplo de uso: 1w (1 semana), 10M (10 meses). Tipos de unidad aceptados h (horas), d (días), w (semanas), M (meses), y (años). Dejar vacío para no resaltar lanzamientos obsoletos."
},
"showOnlyHighlighted": {
- "label": "",
- "description": ""
+ "label": "Mostrar solo destacados",
+ "description": "Mostrar sólo lanzamientos nuevos u obsoletos. Como en el caso anterior."
},
"showDetails": {
- "label": ""
+ "label": "Mostrar detalles"
},
"showOnlyIcon": {
- "label": ""
+ "label": "Mostrar solo icono"
},
"topReleases": {
- "label": "",
- "description": ""
+ "label": "Mejores lanzamientos",
+ "description": "El número máximo de últimos lanzamientos a mostrar. Cero significa sin límite."
},
"repositories": {
- "label": "",
+ "label": "Repositorios",
"addRepository": {
- "label": ""
+ "label": "Añadir repositorio"
},
"importRepositories": {
- "label": "",
- "loading": "",
- "noImagesFound": "",
- "listFoundImages": "",
- "listAlreadyImportedImages": "",
- "allImagesAlreadyImported": "",
- "onlyAdminCanImport": "",
- "selectAll": "",
- "deselectAll": ""
+ "label": "Importar desde Docker",
+ "loading": "Cargando imágenes docker",
+ "noImagesFound": "No se encontraron imágenes docker",
+ "listFoundImages": "Lista de imágenes encontradas",
+ "listAlreadyImportedImages": "Lista de imágenes ya importadas",
+ "allImagesAlreadyImported": "Todas las imágenes ya importadas",
+ "onlyAdminCanImport": "Sólo los administradores pueden importar desde docker",
+ "selectAll": "Seleccionar todo",
+ "deselectAll": "Deshacer selección"
},
"provider": {
- "label": ""
+ "label": "Proveedor"
},
"identifier": {
- "label": "",
- "placeholder": ""
+ "label": "Identificador",
+ "placeholder": "Nombre o Propietario/Nombre"
},
"name": {
- "label": ""
+ "label": "Nombre"
},
"versionFilter": {
- "label": "",
+ "label": "Filtro de Versión",
"prefix": {
- "label": ""
+ "label": "Prefijo"
},
"precision": {
- "label": "",
+ "label": "Precisión",
"options": {
- "none": ""
+ "none": "Ninguno"
}
},
"suffix": {
- "label": ""
+ "label": "Sufijo"
},
"regex": {
- "label": ""
+ "label": "Expresión Regular"
}
},
"edit": {
- "label": ""
+ "label": "Editar"
},
"editForm": {
- "title": "",
+ "title": "Editar Repositorio",
"cancel": {
- "label": ""
+ "label": "Cancelar"
},
"confirm": {
- "label": ""
+ "label": "Confirmar"
}
},
"importForm": {
- "title": ""
+ "title": "Importar desde Docker"
},
"example": {
- "label": ""
+ "label": "Ejemplo"
},
- "invalid": "",
+ "invalid": "Definición de repositorio no válida, por favor compruebe los valores",
"noProvider": {
- "label": "",
- "tooltip": ""
+ "label": "Sin Proveedor",
+ "tooltip": "El proveedor no pudo ser analizado, por favor configurarlo manualmente después de importar las imágenes"
}
}
},
- "not-found": "",
- "pre-release": "",
- "archived": "",
- "forked": "",
- "starsCount": "",
- "forksCount": "",
- "issuesCount": "",
- "markViewed": "",
- "openProjectPage": "",
- "openReleasePage": "",
- "releaseDescription": "",
- "projectDescription": "Descripción del proyecto",
- "created": "",
+ "not-found": "No Encontrado",
+ "pre-release": "Pre-Lanzamiento",
+ "archived": "Archivado",
+ "forked": "Bifurcado",
+ "starsCount": "Estrellas",
+ "forksCount": "Bifurcaciones",
+ "issuesCount": "Incidencias Abiertas",
+ "markViewed": "Marcar como leido",
+ "openProjectPage": "Abrir Página de Proyecto",
+ "openReleasePage": "Abrir Página de Publicación",
+ "releaseDescription": "Descripción de Publicación",
+ "projectDescription": "Descripción del Proyecto",
+ "created": "Creado",
"error": {
- "label": "",
+ "label": "Error",
"messages": {
- "invalidIdentifier": "",
- "noMatchingVersion": "",
- "noReleasesFound": "",
- "noProviderSeleceted": "",
- "noProviderResponse": ""
+ "invalidIdentifier": "Identificador no válido",
+ "noMatchingVersion": "No se encontró una versión correspondiente",
+ "noReleasesFound": "No se encontraron publicaciones",
+ "noProviderSeleceted": "No se ha seleccionado ningún proveedor",
+ "noProviderResponse": "No hay respuesta del proveedor"
}
}
},
@@ -2385,181 +2400,181 @@
"option": {},
"card": {
"vpn": {
- "countConnected": ""
+ "countConnected": "{count} conectado"
}
},
"error": {
- "integrationsDisconnected": "",
- "unknownContentOption": ""
+ "integrationsDisconnected": "No hay datos disponibles, todas las integraciones desconectadas",
+ "unknownContentOption": "Opción de contenido desconocida para el widget de resumen del controlador de red: "
},
- "name": "",
- "description": ""
+ "name": "Resumen del Controlador de Red",
+ "description": "Muestra el resumen de un Controlador de Red (como un Controlador UniFi)"
},
"networkControllerStatus": {
"card": {
"variants": {
"wired": {
- "name": ""
+ "name": "Cableado"
},
"wifi": {
- "name": ""
+ "name": "Wi-Fi"
}
},
"users": {
- "label": ""
+ "label": "Usuarios"
},
"guests": {
- "label": ""
+ "label": "Invitados"
}
},
"option": {
"content": {
"option": {
"wifi": {
- "label": ""
+ "label": "Wi-Fi"
},
"wired": {
- "label": ""
+ "label": "Cableado"
}
},
- "label": ""
+ "label": "Contenido del Widget"
}
},
"error": {
- "integrationsDisconnected": "",
- "unknownContentOption": ""
+ "integrationsDisconnected": "No hay datos disponibles, todas las integraciones desconectadas",
+ "unknownContentOption": "Opción de contenido desconocida para el widget de estado de red: "
},
- "name": "",
- "description": ""
+ "name": "Estado de Red",
+ "description": "Mostrar dispositivos conectados en una red"
},
"networkController": {
"error": {
- "internalServerError": ""
+ "internalServerError": "Error al obtener el Resumen del Controlador de Red"
}
},
"firewall": {
- "name": "",
- "description": "",
+ "name": "Monitoreo de Firewall",
+ "description": "Muestra un resumen de firewalls",
"tab": {
- "system": "",
- "interfaces": ""
+ "system": "Sistema",
+ "interfaces": "Interfaces"
},
"error": {
- "internalServerError": ""
+ "internalServerError": "No se pueden obtener datos del firewall"
},
"option": {
- "interfaces": ""
+ "interfaces": "Interfaces de red a mostrar"
},
"widget": {
- "fwname": "",
- "version": "",
- "versiontitle": "",
- "cputitle": "",
- "memorytitle": "",
- "cpu": "",
- "memory": "",
+ "fwname": "Nombre",
+ "version": "Versión",
+ "versiontitle": "Versiones",
+ "cputitle": "Uso de CPU",
+ "memorytitle": "Uso de memoria",
+ "cpu": "CPU",
+ "memory": "Memoria",
"interfaces": {
- "name": "",
- "trans": "",
- "recv": "",
- "title": ""
+ "name": "nombre",
+ "trans": "Transmitido",
+ "recv": "Recibido",
+ "title": "Interfaces de red"
}
}
},
"notifications": {
- "name": "",
- "description": "",
- "noItems": "",
+ "name": "Notificaciones",
+ "description": "Mostrar el historial de notificaciones desde una integración",
+ "noItems": "Ninguna notificación para mostrar.",
"option": {}
},
"systemResources": {
- "name": "",
- "description": "",
+ "name": "Recursos del sistema",
+ "description": "CPU, Memoria, Disco y otro uso de hardware de su sistema",
"option": {},
"card": {
- "cpu": "",
- "memory": "",
- "network": "",
- "up": "",
- "down": ""
+ "cpu": "CPU",
+ "memory": "MEM",
+ "network": "RED",
+ "up": "ENCENDIDO",
+ "down": "APAGADO"
}
}
},
"widgetPreview": {
"toggle": {
- "enabled": "",
- "disabled": ""
+ "enabled": "Modo edición habilitado",
+ "disabled": "Modo edición deshabilitado"
},
"dimensions": {
- "title": ""
+ "title": "Cambiar dimensiones"
}
},
"board": {
"action": {
"duplicate": {
- "title": "",
- "message": "",
+ "title": "Duplicar tablero",
+ "message": "Esto duplicará el tablero {name} con todo su contenido. Si hay widgets que hacen referencia a integraciones, que no se te permite usar, se eliminarán.",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Tablero duplicado",
+ "message": "El tablón se ha duplicado con éxito"
},
"error": {
- "title": "",
- "message": ""
+ "title": "No se puede duplicar el tablero",
+ "message": "El tablero no pudo ser duplicado"
}
}
},
"edit": {
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Cambios aplicados con éxito",
+ "message": "El tablero se ha guardado correctamente"
},
"error": {
- "title": "",
- "message": ""
+ "title": "No se pudieron aplicar los cambios",
+ "message": "No se ha podido guardar el tablero"
}
},
"confirmLeave": {
- "title": "",
- "message": ""
+ "title": "Cambios no guardados",
+ "message": "Tienes cambios sin guardar, ¿estás seguro de que quieres salir?"
}
},
"oldImport": {
- "label": "",
+ "label": "Importar desde una versión anterior a Homarr 1.0",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Importación con éxito",
+ "message": "El tablero fue importado con éxito"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Error de importación",
+ "message": "El tablero no pudo ser importado, compruebe los registros para más detalles"
}
},
"form": {
"file": {
- "label": "",
- "invalidError": ""
+ "label": "Seleccionar archivo JSON",
+ "invalidError": "Archivo de configuración no válido"
},
"apps": {
"label": "Aplicaciones",
"avoidDuplicates": {
- "label": "",
- "description": ""
+ "label": "Evitar duplicados",
+ "description": "Ignora aplicaciones donde ya existe una aplicación con el mismo href"
},
"onlyImportApps": {
- "label": "",
- "description": ""
+ "label": "Importar solo aplicaciones",
+ "description": "Sólo añade las aplicaciones, el tablero debe ser recreado manualmente"
}
},
"name": {
- "label": ""
+ "label": "Nombre del tablero"
},
"screenSize": {
- "label": "",
- "description": "",
+ "label": "Tamaño de pantalla",
+ "description": "En versiones anteriores a la 1.0 existían tres modos diferentes, por lo que podías elegir la cantidad de columnas para cada tamaño de pantalla.",
"option": {
"sm": "Pequeño",
"md": "Mediano",
@@ -2567,16 +2582,16 @@
}
},
"sidebarBehavior": {
- "label": "",
- "description": "",
+ "label": "Comportamiento de la barra lateral",
+ "description": "Las barras laterales fueron eliminadas en la versión 1.0, puedes seleccionar lo que debería pasar con los elementos dentro de ellas.",
"option": {
"lastSection": {
- "label": "",
- "description": ""
+ "label": "Última sección",
+ "description": "La barra lateral se mostrará debajo de la última sección"
},
"removeItems": {
- "label": "",
- "description": ""
+ "label": "Eliminar los elementos",
+ "description": "Los elementos contenidos en la barra lateral serán eliminados"
}
}
}
@@ -2584,63 +2599,63 @@
},
"quickCreateApp": {
"modal": {
- "title": "",
- "createAndUse": ""
+ "title": "Crear aplicación en el momento",
+ "createAndUse": "Crear y usar"
}
}
},
"field": {
"pageTitle": {
- "label": ""
+ "label": "Título de página"
},
"metaTitle": {
- "label": ""
+ "label": "Título meta"
},
"logoImageUrl": {
- "label": ""
+ "label": "URL de la imagen del logo"
},
"faviconImageUrl": {
- "label": ""
+ "label": "URL de la imagen del Favicon"
},
"backgroundImageUrl": {
- "label": "",
- "placeholder": "",
+ "label": "URL de la imagen de fondo",
+ "placeholder": "Empezar a escribir para buscar imágenes locales",
"group": {
- "your": "",
- "other": ""
+ "your": "Tus imágenes",
+ "other": "Otras imágenes"
}
},
"backgroundImageAttachment": {
"label": "Adjuntar imagen de fondo",
"option": {
"fixed": {
- "label": "",
- "description": ""
+ "label": "Fijo",
+ "description": "El fondo permanece en la misma posición."
},
"scroll": {
- "label": "",
- "description": ""
+ "label": "Deslizar",
+ "description": "El fondo se desliza con el ratón."
}
}
},
"backgroundImageRepeat": {
- "label": "",
+ "label": "Repetir imagen de fondo",
"option": {
"repeat": {
- "label": "",
- "description": ""
+ "label": "Repetir",
+ "description": "La imagen se repite tanto como sea necesario para cubrir todo el área disponible para la imagen de fondo."
},
"no-repeat": {
- "label": "",
- "description": ""
+ "label": "No repetir",
+ "description": "La imagen no se repite y no puede ocupar todo el espacio."
},
"repeat-x": {
- "label": "",
- "description": ""
+ "label": "Repetir X",
+ "description": "Igual que \"Repetir\" pero sólo en el eje horizontal."
},
"repeat-y": {
- "label": "",
- "description": ""
+ "label": "Repetir Y",
+ "description": "Igual que 'Repetir' pero sólo en el eje vertical."
}
}
},
@@ -2648,12 +2663,12 @@
"label": "Tamaño de la imagen de fondo",
"option": {
"cover": {
- "label": "",
- "description": ""
+ "label": "Cubrir",
+ "description": "Escala la imagen lo más pequeña posible para cubrir toda la ventana recortando el espacio excesivo."
},
"contain": {
- "label": "",
- "description": ""
+ "label": "Contener",
+ "description": "Escala la imagen lo más grande posible dentro de su contenedor sin recortar ni estirar la imagen."
}
}
},
@@ -2664,38 +2679,38 @@
"label": "Color secundario"
},
"opacity": {
- "label": ""
+ "label": "Opacidad"
},
"iconColor": {
- "label": ""
+ "label": "Color del icono"
},
"clearColor": {
- "label": ""
+ "label": "Eliminar color"
},
"customCss": {
- "label": "",
- "description": "Además, personaliza tu panel usando CSS, solo recomendado para usuarios avanzados",
+ "label": "CSS personalizado para este tablero",
+ "description": "Además, personaliza tu tablero usando CSS, sólo recomendado para usuarios experimentados",
"customClassesAlert": {
- "title": "",
- "description": ""
+ "title": "Clases personalizadas",
+ "description": "Puedes añadir clases personalizadas a los elementos de tu tablero en las opciones avanzadas de cada elemento y usarlas en el CSS personalizado de arriba."
}
},
"disableStatus": {
- "label": "",
- "description": ""
+ "label": "Deshabilitar estado de la aplicación",
+ "description": "Deshabilita la comprobación de salud de todas las aplicaciones en este tablero"
},
"columnCount": {
- "label": ""
+ "label": "Recuento de columnas"
},
"itemRadius": {
- "label": "",
- "description": "",
+ "label": "Radio del elemento",
+ "description": "Cambia la curvatura de los elementos en tu tablero",
"option": {
- "xs": "",
- "sm": "",
- "md": "",
- "lg": "",
- "xl": ""
+ "xs": "Muy pequeño",
+ "sm": "Pequeño",
+ "md": "Mediano",
+ "lg": "Grande",
+ "xl": "Muy grande"
}
},
"name": {
@@ -2703,25 +2718,25 @@
},
"isPublic": {
"label": "Pública",
- "description": ""
+ "description": "Los tableros públicos son accesibles por todos, incluso sin una cuenta."
}
},
"content": {
- "metaTitle": ""
+ "metaTitle": "Tablero {boardName}"
},
"setting": {
- "title": "",
+ "title": "Ajustes del tablero {boardName}",
"section": {
"general": {
- "title": "",
- "unrecognizedLink": ""
+ "title": "General",
+ "unrecognizedLink": "El enlace proporcionado no es reconocido y no será vista previa, podría funcionar."
},
"layout": {
"title": "Diseño",
"responsive": {
- "title": "",
+ "title": "Diseños interactivo",
"action": {
- "add": ""
+ "add": "Añadir diseño"
}
}
},
@@ -2729,26 +2744,26 @@
"title": "Fondo"
},
"appearance": {
- "title": ""
+ "title": "Apariencia"
},
"customCss": {
- "title": ""
+ "title": "CSS personalizado"
},
"behavior": {
- "title": ""
+ "title": "Comportamiento"
},
"access": {
- "title": "",
+ "title": "Control de acceso",
"permission": {
"item": {
"view": {
"label": "Ver tablero"
},
"modify": {
- "label": ""
+ "label": "Modificar tablero"
},
"full": {
- "label": ""
+ "label": "Acceso completo"
}
}
}
@@ -2757,41 +2772,41 @@
"title": "Zona de riesgo",
"action": {
"rename": {
- "label": "",
- "description": "",
- "button": "",
+ "label": "Renombrar tablero",
+ "description": "Cambiar el nombre invalidará cualquier enlace a este tablero.",
+ "button": "Cambiar nombre",
"modal": {
- "title": ""
+ "title": "Renombrar tablero"
}
},
"visibility": {
- "label": "",
+ "label": "Cambiar visibilidad del tablero",
"description": {
- "public": "",
- "private": ""
+ "public": "Este tablero es público en este momento.",
+ "private": "Este tablero es privado en este momento."
},
"button": {
- "public": "",
- "private": ""
+ "public": "Hacer privado",
+ "private": "Hacer público"
},
"confirm": {
"public": {
- "title": "",
- "description": ""
+ "title": "Hacer privado el tablero",
+ "description": "¿Estás seguro de que deseas hacer privado este tablero? Esto ocultará al tablero del público. Los enlaces para usuarios invitados se romperán."
},
"private": {
- "title": "",
- "description": ""
+ "title": "Hacer público el tablero",
+ "description": "¿Estás seguro de que deseas hacer público este tablero? Esto hará que el tablero sea accesible para todo el mundo."
}
}
},
"delete": {
- "label": "",
- "description": "",
- "button": "",
+ "label": "Eliminar este tablero",
+ "description": "Una vez que elimines un tablero, no hay vuelta atrás. Por favor, asegúrate de ello.",
+ "button": "Eliminar este tablero",
"confirm": {
"title": "Eliminar tablero",
- "description": ""
+ "description": "¿Estás seguro que deseas eliminar este tablero? Esto eliminará permanentemente el tablero y todo su contenido."
}
}
}
@@ -2800,33 +2815,33 @@
},
"error": {
"noBoard": {
- "title": "",
- "description": "",
- "link": "",
- "notice": ""
+ "title": "Bienvenido a Homarr",
+ "description": "Un panel moderno y elegante que pone todas tus aplicaciones y servicios al alcance de la mano.",
+ "link": "Crea tu primer tablero",
+ "notice": "Para que esta página desaparezca, crea un tablero y establecelo como el tablero de inicio"
},
"notFound": {
- "title": "",
- "description": "",
- "link": "",
- "notice": ""
+ "title": "Tablero no encontrado",
+ "description": "El tablero especificado no fue encontrado o no tienes acceso a él.",
+ "link": "Ver todos los tableros",
+ "notice": "Comprueba el enlace o ponte en contacto con un administrador si crees que debería ser accesible"
},
"homeBoard": {
- "title": "",
+ "title": "Ningún tablero de inicio",
"admin": {
- "description": "",
- "link": "",
- "notice": ""
+ "description": "Todavía no has configurado un tablero de inicio para el servidor.",
+ "link": "Configurar tablero de inicio del servidor",
+ "notice": "Para hacer que esta página desaparezca para todos los usuarios, establece un tablero de inicio para el servidor"
},
"user": {
- "description": "",
- "link": "",
- "notice": ""
+ "description": "Aún no has configurado un tablero de inicio.",
+ "link": "Configurar tu tablero de inicio",
+ "notice": "Para hacer que esta página desaparezca, especifica el tablero de inicio en sus preferencias"
},
"anonymous": {
- "description": "",
- "link": "",
- "notice": ""
+ "description": "El administrador del servidor aún no ha establecido un tablero de inicio.",
+ "link": "Ver tableros públicos",
+ "notice": "Para hacer que esta página desaparezca, pide al administrador del servidor que establezca un tablero de inicio para el servidor"
}
}
}
@@ -2834,53 +2849,53 @@
"layout": {
"field": {
"name": {
- "label": ""
+ "label": "Nombre"
},
"columnCount": {
- "label": ""
+ "label": "Recuento de columnas"
},
"breakpoint": {
- "label": "",
- "description": ""
+ "label": "Punto de ruptura",
+ "description": "El diseño se utilizará en todas las pantallas más grandes que este punto de interrupción hasta el siguiente punto de ruptura."
}
}
},
"management": {
- "metaTitle": "",
+ "metaTitle": "Administración",
"title": {
- "morning": "",
- "afternoon": "",
- "evening": ""
+ "morning": "Buenos días, {username}",
+ "afternoon": "Buenas tardes, {username}",
+ "evening": "Buenas tardes, {username}"
},
"notFound": {
- "title": "",
- "text": ""
+ "title": "No Encontrado",
+ "text": "No se pudo encontrar el recurso solicitado"
},
"navbar": {
"items": {
"home": "Inicio",
"boards": "Tableros",
"apps": "Aplicaciones",
- "integrations": "",
- "searchEngies": "",
- "medias": "",
+ "integrations": "Integraciones",
+ "searchEngies": "Motores de búsqueda",
+ "medias": "Imágenes",
"users": {
"label": "Usuarios",
"items": {
"manage": "Administrar",
"invites": "Invitaciones",
- "groups": ""
+ "groups": "Grupos"
}
},
"tools": {
"label": "Herramientas",
"items": {
- "docker": "",
- "kubernetes": "",
- "logs": "",
- "api": "",
- "certificates": "",
- "tasks": ""
+ "docker": "Docker",
+ "kubernetes": "Kubernetes",
+ "logs": "Registros",
+ "api": "API",
+ "certificates": "Certificados",
+ "tasks": "Tareas"
}
},
"settings": "Ajustes",
@@ -2888,9 +2903,9 @@
"label": "Ayuda",
"items": {
"documentation": "Documentación",
- "submitIssue": "",
- "discord": "Comunidad Discord",
- "sourceCode": ""
+ "submitIssue": "Enviar una incidencia",
+ "discord": "Comunidad de Discord",
+ "sourceCode": "Código Fuente"
}
},
"about": "Acerca de"
@@ -2902,57 +2917,57 @@
"board": "Tableros",
"user": "Usuarios",
"invite": "Invitaciones",
- "integration": "",
+ "integration": "Integraciones",
"app": "Aplicaciones",
- "group": ""
+ "group": "Grupos"
},
"statisticLabel": {
"boards": "Tableros",
- "resources": "",
- "authentication": "",
- "authorization": ""
+ "resources": "Recursos",
+ "authentication": "Autenticación",
+ "authorization": "Autorización"
}
},
"board": {
"title": "Tus tableros",
"action": {
"new": {
- "label": ""
+ "label": "Nuevo tablero"
},
"open": {
- "label": ""
+ "label": "Abrir tablero"
},
"settings": {
"label": "Ajustes"
},
"setHomeBoard": {
- "label": "",
+ "label": "Establecer como tu tablero de inicio",
"badge": {
"label": "Inicio",
- "tooltip": ""
+ "tooltip": "Este tablero se mostrará como tu tablero de inicio"
}
},
"setMobileHomeBoard": {
- "label": "",
+ "label": "Establecer como tu tablero móvil",
"badge": {
- "label": "",
- "tooltip": ""
+ "label": "Móvil",
+ "tooltip": "Este tablero se mostrará como tu tablero móvil"
}
},
"duplicate": {
- "label": ""
+ "label": "Duplicar tablero"
},
"delete": {
"label": "Eliminar permanentemente",
"confirm": {
"title": "Eliminar tablero",
- "description": ""
+ "description": "¿Estás seguro de que deseas eliminar el tablero {name}?"
}
}
},
"visibility": {
- "public": "",
- "private": ""
+ "public": "Este tablero es público",
+ "private": "Este tablero es privado"
},
"modal": {
"createBoard": {
@@ -2965,24 +2980,24 @@
}
},
"media": {
- "includeFromAllUsers": ""
+ "includeFromAllUsers": "Incluir imágenes de todos los usuarios"
},
"user": {
- "back": "",
- "fieldsDisabledExternalProvider": "",
+ "back": "Volver a usuarios",
+ "fieldsDisabledExternalProvider": "Ciertos campos están deshabilitados porque son gestionados por un proveedor de autenticación externo.",
"setting": {
"general": {
- "title": "",
+ "title": "General",
"item": {
- "language": "",
+ "language": "Idioma y región",
"board": {
- "title": "",
+ "title": "Tablero de inicio",
"type": {
- "general": "",
- "mobile": ""
+ "general": "General",
+ "mobile": "Móvil"
}
},
- "search": "",
+ "search": "Buscar",
"firstDayOfWeek": "Primer día de la semana",
"accessibility": "Accesibilidad"
}
@@ -2999,50 +3014,50 @@
"title": "Usuarios"
},
"edit": {
- "metaTitle": ""
+ "metaTitle": "Editar usuario {username}"
},
"create": {
"metaTitle": "Crear usuario",
- "title": "",
+ "title": "Crear nuevo usuario",
"step": {
"personalInformation": {
- "label": ""
+ "label": "Información personal"
},
"security": {
"label": "Seguridad"
},
"groups": {
- "label": "",
- "title": "",
- "description": ""
+ "label": "Grupos",
+ "title": "Seleccionar todos los grupos de los que el usuario debe ser miembro",
+ "description": "El grupo {everyoneGroup} está asignado a todos los usuarios y no puede ser eliminado."
},
"review": {
- "label": ""
+ "label": "Revisión"
},
"completed": {
- "title": ""
+ "title": "Usuario creado"
},
"error": {
- "title": ""
+ "title": "Error al crear el usuario"
}
},
"action": {
- "createAnother": "",
- "back": ""
+ "createAnother": "Crear otro usuario",
+ "back": "Volver a la lista de usuarios"
}
},
"invite": {
"title": "Administrar invitaciones de usuario",
"action": {
"new": {
- "title": "",
+ "title": "Nueva invitación",
"description": "Después de la caducidad, una invitación ya no será válida y el destinatario de la invitación no podrá crear una cuenta."
},
"copy": {
- "title": "",
- "description": "",
+ "title": "Copiar invitación",
+ "description": "Tu invitación ha sido generada. Después de que se cierre esta ventana, ya no podrás copiar este enlace. Si ya no deseas invitar a dicha persona, puedes eliminar esta invitación en cualquier momento.",
"link": "Link de invitación",
- "button": ""
+ "button": "Copiar y cerrar"
},
"delete": {
"title": "Eliminar invitación",
@@ -3051,7 +3066,7 @@
},
"field": {
"id": {
- "label": ""
+ "label": "ID"
},
"creator": {
"label": "Creador"
@@ -3060,36 +3075,36 @@
"label": "Fecha de caducidad"
},
"token": {
- "label": ""
+ "label": "Token"
}
}
}
},
"group": {
- "back": "",
+ "back": "Volver a grupos",
"setting": {
"general": {
- "title": "",
+ "title": "General",
"owner": "Propietario",
- "ownerOfGroup": "",
- "ownerOfGroupDeleted": ""
+ "ownerOfGroup": "Propietario de este grupo",
+ "ownerOfGroupDeleted": "El propietario de este grupo ha sido eliminado. Actualmente no tiene propietario."
},
"setting": {
- "title": "",
- "alert": "",
+ "title": "Ajustes",
+ "alert": "Los ajustes de grupo son priorizados por el orden de los grupos en la lista. Los ajustes superiores sobrescriben los ajustes inferiores.",
"board": {
- "title": ""
+ "title": "Tableros"
}
},
"members": {
- "title": "",
- "search": "",
- "notFound": ""
+ "title": "Miembros",
+ "search": "Buscar un miembro",
+ "notFound": "No se han encontrado miembros"
},
"permissions": {
- "title": "",
+ "title": "Permisos",
"form": {
- "unsavedChanges": ""
+ "unsavedChanges": "¡Tienes cambios sin guardar!"
}
}
}
@@ -3098,258 +3113,255 @@
"title": "Ajustes",
"notification": {
"success": {
- "message": ""
+ "message": "Configuración guardada con éxito"
},
"error": {
- "message": ""
+ "message": "Error al guardar los ajustes"
}
},
"section": {
"analytics": {
- "title": "",
+ "title": "Estadísticas",
"general": {
- "title": "",
- "text": ""
+ "title": "Enviar estadísticas anónimas",
+ "text": "Homarr enviará estadísticas anónimas usando el software de código abierto Umami. Nunca recopila información personal y por lo tanto cumple plenamente con GDPR y CCPA. Te animamos a habilitar esta característica ya que ayuda a nuestro equipo de código abierto a identificar problemas y priorizar su resolución."
},
"widgetData": {
- "title": "",
- "text": ""
+ "title": "Datos del widget",
+ "text": "Enviar qué widgets (y su cantidad) has configurado. No incluye URLs, nombres ni ningún otro dato."
},
"integrationData": {
- "title": "",
- "text": ""
+ "title": "Datos de integración",
+ "text": "Enviar qué integraciones (y su cantidad) has configurado. No incluye URLs, nombres ni ningún otro dato."
},
"usersData": {
- "title": "",
- "text": ""
+ "title": "Datos de usuarios",
+ "text": "Enviar la cantidad de usuarios y si has activado SSO"
}
},
"crawlingAndIndexing": {
- "title": "",
- "warning": "",
+ "title": "Seguimiento e Indexación",
+ "warning": "Activar o desactivar cualquier configuración aquí afectará gravemente a la forma en la que los motores de búsqueda indexarán y rastrearán tu página. Cualquier ajuste es una solicitud y depende del rastreador aplicar estos ajustes. Cualquier modificación puede tardar hasta varios días o semanas en aplicarse. Algunos ajustes pueden ser específicos del motor de búsqueda.",
"noIndex": {
- "title": "",
- "text": ""
+ "title": "Sin índice",
+ "text": "No indexar el sitio web en los motores de búsqueda y no mostrarlo en ningún resultado de búsqueda"
},
"noFollow": {
- "title": "",
- "text": ""
+ "title": "Sin seguimiento",
+ "text": "No seguir ningún enlace durante la indexación. Desactivar esto hará que los rastreadores intenten seguir todos los enlaces en Homarr."
},
"noTranslate": {
- "title": "",
- "text": ""
+ "title": "Sin traducción",
+ "text": "Cuando el idioma del sitio probablemente no sea el que el usuario quiera leer, Google mostrará un vínculo de traducción en los resultados de la búsqueda"
},
"noSiteLinksSearchBox": {
- "title": "",
- "text": ""
+ "title": "Sin cuadro de búsqueda de enlaces de sitio",
+ "text": "Google construirá un cuadro de búsqueda con los enlaces cortados junto con otros enlaces directos. Habilitar esto le pedirá a Google desactivar esa caja."
}
},
"board": {
"title": "Tableros",
"homeBoard": {
- "label": "",
- "mobileLabel": "",
- "description": ""
+ "label": "Tablero de inicio global",
+ "mobileLabel": "Tablero móvil global",
+ "description": "Sólo los tableros públicos están disponibles para la selección"
},
"status": {
- "title": "",
+ "title": "Estado de la aplicación",
"enableStatusByDefault": {
- "label": "",
- "description": ""
+ "label": "Habilitar estado por defecto",
+ "description": "Al añadir un elemento de aplicación, el estado se habilitará por defecto"
},
"forceDisableStatus": {
- "label": "",
- "description": ""
+ "label": "Forzar deshabilitar estado",
+ "description": "El estado de las aplicaciones se deshabilitará para todos los usuarios y no se puede activar"
}
}
},
"search": {
- "title": "",
+ "title": "Buscar",
"defaultSearchEngine": {
- "label": "",
- "description": ""
+ "label": "Motor de búsqueda global predeterminado",
+ "description": "Los motores de búsqueda de integración no pueden ser seleccionados aquí"
}
},
"appearance": {
"title": "Apariencia",
"defaultColorScheme": {
- "label": "",
+ "label": "Esquema de color predeterminado",
"options": {
- "light": "",
- "dark": ""
+ "light": "Claro",
+ "dark": "Oscuro"
}
}
},
"culture": {
- "title": "",
+ "title": "Idioma",
"defaultLocale": {
- "label": ""
+ "label": "Idioma predeterminado"
}
}
}
},
"tool": {
"tasks": {
- "title": "",
+ "title": "Tareas",
"status": {
- "idle": "",
+ "idle": "Inactivo",
"running": "En ejecución",
- "error": "",
- "disabled": ""
+ "error": "Error",
+ "disabled": "Deshabilitado"
},
"job": {
"minecraftServerStatus": {
- "label": ""
+ "label": "Estado del Servidor de Minecraft"
},
"iconsUpdater": {
- "label": ""
+ "label": "Actualizador de iconos"
},
"analytics": {
- "label": ""
+ "label": "Estadísticas"
},
"smartHomeEntityState": {
- "label": ""
+ "label": "Estado de Entidad de Smart Home"
},
"ping": {
- "label": ""
+ "label": "Pings"
},
"mediaServer": {
"label": "Servidor Multimedia"
},
"mediaOrganizer": {
- "label": ""
+ "label": "Organizadores multimedia"
},
"downloads": {
- "label": ""
+ "label": "Descargas"
},
"mediaRequestStats": {
- "label": ""
+ "label": "Estadísticas de solicitudes de medios"
},
"mediaRequestList": {
- "label": ""
+ "label": "Lista de solicitudes de medios"
},
"rssFeeds": {
- "label": ""
+ "label": "Fuentes RSS"
},
"indexerManager": {
- "label": ""
+ "label": "Administrador de Índices"
},
"healthMonitoring": {
- "label": ""
+ "label": "Monitoreo de Salud"
},
"dnsHole": {
- "label": ""
- },
- "sessionCleanup": {
- "label": ""
+ "label": "Datos de agujero DNS"
},
"updateChecker": {
- "label": ""
+ "label": "Comprobador de actualización"
},
"mediaTranscoding": {
- "label": ""
+ "label": "Transcodificación de medios"
},
"networkController": {
- "label": ""
+ "label": "Controlador de red"
},
"refreshNotifications": {
- "label": ""
+ "label": "Actualizador de notificaciones"
},
"dockerContainers": {
- "label": ""
+ "label": "Contenedores de Docker"
},
"firewallCpu": {
- "label": ""
+ "label": "CPU del Firewall"
},
"firewallMemory": {
- "label": ""
+ "label": "Memoria del Firewall"
},
"firewallVersion": {
- "label": ""
+ "label": "Versión del Firewall"
},
"firewallInterfaces": {
- "label": ""
+ "label": "Interfaces del Firewall"
}
},
"interval": {
- "seconds": "",
- "minutes": "",
- "hours": "",
- "midnight": "",
- "weeklyMonday": "",
+ "seconds": "Cada {interval, plural, =1 {segundo} other {# segundos}}",
+ "minutes": "Cada {interval, plural, =1 {minuto} other {# minutos}}",
+ "hours": "Cada {interval, plural, =1 {hora} other {# horas}}",
+ "midnight": "Todos los días a medianoche",
+ "weeklyMonday": "Cada semana el lunes",
"update": {
"success": {
- "message": ""
+ "message": "Intervalo actualizado correctamente"
},
"error": {
- "message": ""
+ "message": "Error al actualizar el intervalo"
}
}
},
"settings": {
- "title": ""
+ "title": "Ajustes de la tarea para {jobName}"
},
"field": {
"name": {
- "label": ""
+ "label": "Nombre"
},
"interval": {
- "label": ""
+ "label": "Intervalo de planificación"
},
"lastExecution": {
- "label": ""
+ "label": "Última Ejecución"
},
"actions": {
- "label": ""
+ "label": "Acciones"
}
},
"table": {
- "search": ""
+ "search": "Buscar {count} tareas..."
},
"action": {
"refresh": {
- "label": ""
+ "label": "Actualizar"
}
},
"refresh": {
"success": {
- "message": ""
+ "message": "Tareas actualizadas con éxito"
},
"error": {
- "message": ""
+ "message": "Error al actualizar las tareas"
}
},
"trigger": {
"success": {
- "message": ""
+ "message": "Tarea ejecutada con éxito"
},
"error": {
- "message": ""
+ "message": "Error al ejecutar la tarea"
}
},
"enable": {
"success": {
- "message": ""
+ "message": "Tarea activada con éxito"
}
},
"disable": {
"success": {
- "message": ""
+ "message": "Tarea desactivada con éxito"
}
},
"toggle": {
"error": {
- "message": ""
+ "message": "Error al cambiar el estado de la tarea"
}
}
},
"api": {
- "title": "",
+ "title": "API",
"modal": {
"createApiToken": {
- "title": "",
- "description": "",
- "button": ""
+ "title": "Token de API creado",
+ "description": "El token de API fue creado. Ten cuidado, este token está cifrado en la base de datos y nunca será transferido de nuevo a ti. Si pierdes este token, ya no podrás recuperar este token específico.",
+ "button": "Copiar y cerrar"
}
},
"tab": {
@@ -3357,22 +3369,22 @@
"label": "Documentación"
},
"apiKey": {
- "label": "",
- "title": "",
+ "label": "Autenticación",
+ "title": "Claves API",
"button": {
- "createApiToken": ""
+ "createApiToken": "Crear token de API"
},
"modal": {
"delete": {
- "title": "",
- "text": ""
+ "title": "Eliminar token de API",
+ "text": "Esto eliminará permanentemente el token de la API. Los clientes de la API que utilicen este token ya no pueden autenticarse y realizar solicitudes de API. Esta acción no se puede deshacer."
}
},
"table": {
"header": {
- "id": "",
- "createdBy": "",
- "actions": ""
+ "id": "ID",
+ "createdBy": "Creado por",
+ "actions": "Acciones"
}
}
}
@@ -3380,20 +3392,20 @@
}
},
"about": {
- "version": "",
- "text": "",
+ "version": "Versión {version}",
+ "text": "Homarr es un proyecto de código abierto impulsado por la comunidad que está siendo mantenido por voluntarios. Gracias a estas personas, Homarr ha sido un proyecto creciente desde 2021. Nuestro equipo trabaja de forma remota en Homarr desde muchos países en su tiempo libre, sin compensación.",
"accordion": {
"contributors": {
- "title": "",
- "subtitle": ""
+ "title": "Colaboradores",
+ "subtitle": "{count} manteniendo el código y Homarr"
},
"translators": {
- "title": "",
- "subtitle": ""
+ "title": "Traductores",
+ "subtitle": "{count} contribuyendo con las traducciones en muchos idiomas"
},
"libraries": {
- "title": "",
- "subtitle": ""
+ "title": "Librerías",
+ "subtitle": "{count} usadas en el Código de Homarr"
}
}
}
@@ -3402,10 +3414,10 @@
"docker": {
"title": "Contenedores",
"table": {
- "updated": "",
- "search": "",
- "selected": "",
- "footer": ""
+ "updated": "Actualizado {when}",
+ "search": "Buscar {count} contenedores",
+ "selected": "{selectCount} de {totalCount} contenedores seleccionados",
+ "footer": "{count} contenedores en total"
},
"field": {
"name": {
@@ -3418,17 +3430,17 @@
"running": "En ejecución",
"paused": "Pausado",
"restarting": "Reiniciando",
- "exited": "",
+ "exited": "Finalizado",
"removing": "Eliminando",
- "dead": ""
+ "dead": "Caido"
}
},
"stats": {
"cpu": {
- "label": ""
+ "label": "CPU"
},
"memory": {
- "label": ""
+ "label": "Memoria"
}
},
"containerImage": {
@@ -3439,17 +3451,17 @@
}
},
"action": {
- "title": "",
+ "title": "Acciones",
"start": {
"label": "Iniciar",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Contenedores iniciados",
+ "message": "Los contenedores se iniciaron con éxito"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Contenedores no iniciados",
+ "message": "Los contenedores no se han podido iniciar"
}
}
},
@@ -3457,12 +3469,12 @@
"label": "Detener",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Contenedores detenidos",
+ "message": "Los contenedores se detuvieron con éxito"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Contenedores no detenidos",
+ "message": "Los contenedores no pudieron ser detenidos"
}
}
},
@@ -3470,12 +3482,12 @@
"label": "Reiniciar",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Contenedores reiniciados",
+ "message": "Los contenedores se reiniciaron con éxito"
},
"error": {
- "title": "",
- "message": ""
+ "title": "No se reiniciaron los contenedores",
+ "message": "Los contenedores no se pudieron reiniciar"
}
}
},
@@ -3483,316 +3495,316 @@
"label": "Eliminar",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Contenedores eliminados",
+ "message": "Los contenedores fueron eliminados con éxito"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Contenedores no eliminados",
+ "message": "Los contenedores no pudieron ser eliminados"
}
}
},
"refresh": {
- "label": "",
+ "label": "Actualizar",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Contenedores actualizados",
+ "message": "Ahora estás viendo los datos más recientes"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Contenedores no actualizados",
+ "message": "Algo salió mal mientras se actualizaban los contenedores"
}
}
},
"addToHomarr": {
- "label": "",
+ "label": "Añadir a Homarr",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Añadido a Homarr",
+ "message": "Las aplicaciones seleccionadas han sido añadidas a Homarr"
},
"error": {
- "title": "",
- "message": ""
+ "title": "No se pudo añadir a Homarr",
+ "message": "Las aplicaciones seleccionadas no se han podido añadir a Homarr"
}
},
"modal": {
- "title": ""
+ "title": "Añadir contenedor(es) docker a Homarr"
}
}
},
"error": {
- "internalServerError": ""
+ "internalServerError": "Fallo al obtener contenedores Docker"
}
},
"kubernetes": {
"cluster": {
- "title": "",
- "label": "",
- "providers": "",
- "version": "",
- "architecture": "",
+ "title": "Panel del Clúster",
+ "label": "Clúster",
+ "providers": "Proveedores",
+ "version": "Versión",
+ "architecture": "Arquitectura",
"capacity": {
- "title": "",
+ "title": "Capacidad",
"resource": {
- "reserved": "",
- "used": ""
+ "reserved": "Reservado",
+ "used": "Usado"
}
},
"resources": {
- "title": "",
- "nodes": "",
- "namespaces": "",
- "ingresses": "",
- "services": "",
- "pods": "",
- "configmaps": "",
- "secrets": "",
- "volumes": ""
+ "title": "Recursos",
+ "nodes": "Nodos",
+ "namespaces": "Espacios de nombres",
+ "ingresses": "Ingresos",
+ "services": "Servicios",
+ "pods": "Pods",
+ "configmaps": "ConfigMaps",
+ "secrets": "Credenciales",
+ "volumes": "Volúmenes"
}
},
"nodes": {
- "label": "",
+ "label": "Nodos",
"field": {
"name": {
- "label": ""
+ "label": "Nombre"
},
"state": {
- "label": "",
+ "label": "Estado",
"option": {
- "ready": "",
- "NotReady": ""
+ "ready": "Listo",
+ "NotReady": "No está listo"
}
},
"cpu": {
- "label": ""
+ "label": "CPU"
},
"memory": {
- "label": ""
+ "label": "RAM"
},
"pods": {
- "label": ""
+ "label": "Pods"
},
"operatingSystem": {
- "label": ""
+ "label": "Sistema Operativo"
},
"architecture": {
- "label": ""
+ "label": "Arquitectura"
},
"kubernetesVersion": {
- "label": ""
+ "label": "Versión de Kubernetes"
},
"creationTimestamp": {
- "label": ""
+ "label": "Creado"
}
},
"table": {
- "search": ""
+ "search": "Buscar {count} nodos"
}
},
"namespaces": {
- "label": "",
+ "label": "Espacios de nombres",
"field": {
"name": {
- "label": ""
+ "label": "Nombre"
},
"state": {
- "label": "",
+ "label": "Estado",
"option": {
- "active": "",
- "terminating": ""
+ "active": "Activo",
+ "terminating": "Terminando"
}
},
"creationTimestamp": {
- "label": ""
+ "label": "Creado"
}
},
"table": {
- "search": ""
+ "search": "Buscar {count} espacios de nombres"
}
},
"ingresses": {
- "label": "",
+ "label": "Ingresos",
"field": {
"name": {
- "label": ""
+ "label": "Nombre"
},
"namespace": {
- "label": ""
+ "label": "Espacio de nombre"
},
"className": {
- "label": ""
+ "label": "Nombre de la clase"
},
"rulesAndPaths": {
- "label": ""
+ "label": "Reglas y rutas"
},
"creationTimestamp": {
- "label": ""
+ "label": "Creado"
}
},
"table": {
- "search": ""
+ "search": "Buscar {count} ingresos"
}
},
"services": {
- "label": "",
+ "label": "Servicios",
"field": {
"name": {
- "label": ""
+ "label": "Nombre"
},
"namespace": {
- "label": ""
+ "label": "Espacio de nombre"
},
"type": {
- "label": ""
+ "label": "Tipo"
},
"ports": {
- "label": ""
+ "label": "Puertos"
},
"targetPorts": {
- "label": ""
+ "label": "Puertos de destino"
},
"clusterIP": {
- "label": ""
+ "label": "IP del clúster"
},
"creationTimestamp": {
- "label": ""
+ "label": "Creado"
}
},
"table": {
- "search": ""
+ "search": "Buscar {count} servicios"
}
},
"pods": {
- "label": "",
+ "label": "Pods",
"field": {
"name": {
- "label": ""
+ "label": "Nombre"
},
"namespace": {
- "label": ""
+ "label": "Espacio de nombre"
},
"image": {
- "label": ""
+ "label": "Imagen"
},
"applicationType": {
- "label": ""
+ "label": "Tipo de aplicación"
},
"status": {
- "label": ""
+ "label": "Estado"
},
"creationTimestamp": {
- "label": ""
+ "label": "Creado"
}
},
"table": {
- "search": ""
+ "search": "Buscar {count} pods"
}
},
"secrets": {
- "label": "",
+ "label": "Credenciales",
"field": {
"name": {
- "label": ""
+ "label": "Nombre"
},
"namespace": {
- "label": ""
+ "label": "Espacio de nombre"
},
"type": {
- "label": ""
+ "label": "Tipo"
},
"creationTimestamp": {
- "label": ""
+ "label": "Creado"
}
},
"table": {
- "search": ""
+ "search": "Buscar {count} credenciales"
}
},
"configmaps": {
- "label": "",
+ "label": "ConfigMaps",
"field": {
"name": {
- "label": ""
+ "label": "Nombre"
},
"namespace": {
- "label": ""
+ "label": "Espacio de nombre"
},
"creationTimestamp": {
- "label": ""
+ "label": "Creado"
}
},
"table": {
- "search": ""
+ "search": "Buscar {count} configMaps"
}
},
"volumes": {
- "label": "",
+ "label": "Volúmenes",
"field": {
"name": {
- "label": ""
+ "label": "Nombre"
},
"namespace": {
- "label": ""
+ "label": "Espacio de nombre"
},
"accessModes": {
- "label": ""
+ "label": "Modos de acceso"
},
"storage": {
- "label": ""
+ "label": "Almacenamiento"
},
"storageClassName": {
- "label": ""
+ "label": "Nombre de la clase de almacenamiento"
},
"volumeMode": {
- "label": ""
+ "label": "Modo del volumen"
},
"volumeName": {
- "label": ""
+ "label": "Nombre del volumen"
},
"status": {
- "label": ""
+ "label": "Estado"
},
"creationTimestamp": {
- "label": ""
+ "label": "Creado"
}
},
"table": {
- "search": ""
+ "search": "Buscar {count} volúmenes"
}
},
"error": {
- "internalServerError": ""
+ "internalServerError": "Error al recuperar datos de Kubernetes"
}
},
"permission": {
- "title": "",
+ "title": "Permisos",
"userSelect": {
- "title": ""
+ "title": "Añadir permisos de usuario"
},
"groupSelect": {
- "title": ""
+ "title": "Añadir permisos de grupo"
},
"tab": {
"user": "Usuarios",
- "group": "",
- "inherited": ""
+ "group": "Grupos",
+ "inherited": "Grupos heredados"
},
"field": {
"user": {
"label": "Usuario"
},
"group": {
- "label": ""
+ "label": "Grupo"
},
"permission": {
- "label": ""
+ "label": "Permisos"
}
},
"action": {
- "saveUser": "",
- "saveGroup": ""
+ "saveUser": "Guardar permisos de usuario",
+ "saveGroup": "Guardar permisos de grupo"
}
},
"navigationStructure": {
@@ -3802,30 +3814,30 @@
"label": "Tableros"
},
"integrations": {
- "label": "",
+ "label": "Integraciones",
"edit": {
"label": "Editar"
},
"new": {
- "label": ""
+ "label": "Nueva"
}
},
"search-engines": {
- "label": "",
+ "label": "Motores de búsqueda",
"new": {
- "label": ""
+ "label": "Nuevo"
},
"edit": {
"label": "Editar"
}
},
"medias": {
- "label": ""
+ "label": "Imágenes"
},
"apps": {
"label": "Aplicaciones",
"new": {
- "label": ""
+ "label": "Nueva"
},
"edit": {
"label": "Editar"
@@ -3836,11 +3848,11 @@
"create": {
"label": "Crear"
},
- "general": "",
+ "general": "General",
"security": "Seguridad",
"board": "Tableros",
"groups": {
- "label": ""
+ "label": "Grupos"
},
"invites": {
"label": "Invitaciones"
@@ -3849,45 +3861,45 @@
"tools": {
"label": "Herramientas",
"tasks": {
- "label": ""
+ "label": "Tareas"
},
"docker": {
- "label": ""
+ "label": "Docker"
},
"kubernetes": {
- "label": "",
+ "label": "Kubernetes",
"nodes": {
- "label": ""
+ "label": "Nodos"
},
"namespaces": {
- "label": ""
+ "label": "Espacios de nombres"
},
"ingresses": {
- "label": ""
+ "label": "Ingresos"
},
"services": {
- "label": ""
+ "label": "Servicios"
},
"pods": {
- "label": ""
+ "label": "Pods"
},
"configmaps": {
- "label": ""
+ "label": "ConfigMaps"
},
"secrets": {
- "label": ""
+ "label": "Credenciales"
},
"volumes": {
- "label": ""
+ "label": "Volúmenes"
}
},
"logs": {
- "label": ""
+ "label": "Registros"
},
"certificates": {
- "label": "",
+ "label": "Certificados",
"hostnames": {
- "label": ""
+ "label": "Nombres de host"
}
}
},
@@ -3900,28 +3912,28 @@
}
},
"search": {
- "placeholder": "",
- "nothingFound": "",
+ "placeholder": "Busca lo que quieras",
+ "nothingFound": "Ningún resultado encontrado",
"error": {
- "fetch": ""
+ "fetch": "Se produjo un error al recuperar los datos"
},
"mode": {
"appIntegrationBoard": {
- "help": "",
+ "help": "Buscar aplicaciones, integraciones o tableros",
"group": {
"app": {
"title": "Aplicaciones",
"children": {
"action": {
"open": {
- "label": ""
+ "label": "Abrir URL de aplicación"
},
"edit": {
- "label": ""
+ "label": "Editar aplicación"
}
},
"detail": {
- "title": ""
+ "title": "Seleccionar una acción para la aplicación"
}
}
},
@@ -3930,122 +3942,122 @@
"children": {
"action": {
"open": {
- "label": ""
+ "label": "Abrir tablero"
},
"homeBoard": {
- "label": ""
+ "label": "Establecer como tablero de inicio"
},
"mobileBoard": {
- "label": ""
+ "label": "Establecer como tablero móvil"
},
"settings": {
- "label": ""
+ "label": "Abrir ajustes"
}
},
"detail": {
- "title": ""
+ "title": "Seleccionar una acción para el tablero"
}
}
},
"integration": {
- "title": ""
+ "title": "Integraciones"
}
}
},
"command": {
- "help": "",
+ "help": "Activar modo comando",
"group": {
"localCommand": {
- "title": ""
+ "title": "Comandos locales"
},
"globalCommand": {
- "title": "",
+ "title": "Comandos globales",
"option": {
"colorScheme": {
- "light": "",
- "dark": ""
+ "light": "Cambiar a modo claro",
+ "dark": "Cambiar a modo oscuro"
},
"language": {
- "label": "",
+ "label": "Cambiar idioma",
"children": {
"detail": {
- "title": ""
+ "title": "Selecciona tu idioma preferido"
}
}
},
"newBoard": {
- "label": ""
+ "label": "Crear un nuevo tablero"
},
"importBoard": {
- "label": ""
+ "label": "Importar un tablero"
},
"newApp": {
- "label": ""
+ "label": "Crear una nueva aplicación"
},
"newIntegration": {
- "label": "",
+ "label": "Crear una nueva integración",
"children": {
"detail": {
- "title": ""
+ "title": "Selecciona el tipo de integración que deseas crear"
}
}
},
"newUser": {
- "label": ""
+ "label": "Crear un nuevo usuario"
},
"newInvite": {
- "label": ""
+ "label": "Crear una nueva invitación"
},
"newGroup": {
- "label": ""
+ "label": "Crear un nuevo grupo"
}
}
}
}
},
"media": {
- "requestMovie": "",
- "requestSeries": "",
- "openIn": ""
+ "requestMovie": "Solicitar película",
+ "requestSeries": "Solicitar serie",
+ "openIn": "Abrir en {kind}"
},
"external": {
- "help": "",
+ "help": "Usar un motor de búsqueda externo",
"group": {
"searchEngine": {
- "title": "",
+ "title": "Motores de búsqueda",
"children": {
"action": {
"search": {
- "label": ""
+ "label": "Buscar con {name}"
}
},
"detail": {
- "title": ""
+ "title": "Selecciona una acción para el motor de búsqueda"
},
"searchResults": {
- "title": ""
+ "title": "Selecciona un resultado de búsqueda para acciones"
}
},
"option": {
"google": {
- "name": "",
- "description": ""
+ "name": "Google",
+ "description": "Buscar en la web con Google"
},
"bing": {
- "name": "",
- "description": ""
+ "name": "Bing",
+ "description": "Buscar en la web con Bing"
},
"duckduckgo": {
- "name": "",
- "description": ""
+ "name": "DuckDuckGo",
+ "description": "Buscar en la web con DuckDuckGo"
},
"torrent": {
- "name": "",
- "description": ""
+ "name": "Torrents",
+ "description": "Buscar torrents en torrentdownloads.pro"
},
"youTube": {
- "name": "",
- "description": ""
+ "name": "YouTube",
+ "description": "Buscar vídeos en YouTube"
}
}
}
@@ -4054,7 +4066,7 @@
"help": {
"group": {
"mode": {
- "title": ""
+ "title": "Modos"
},
"help": {
"title": "Ayuda",
@@ -4063,10 +4075,10 @@
"label": "Documentación"
},
"submitIssue": {
- "label": ""
+ "label": "Enviar una incidencia"
},
"discord": {
- "label": "Comunidad Discord"
+ "label": "Comunidad de Discord"
}
}
}
@@ -4075,81 +4087,81 @@
"home": {
"group": {
"search": {
- "title": "",
+ "title": "Buscar",
"option": {
"other": {
- "label": ""
+ "label": "Buscar con otro motor de búsqueda"
},
"no-default": {
- "label": "",
- "description": ""
+ "label": "Ningún motor de búsqueda por defecto",
+ "description": "Establece un motor de búsqueda predeterminado en las preferencias"
},
"search": {
- "label": ""
+ "label": "Buscar \"{query}\" con {name}"
},
"from-integration": {
- "description": ""
+ "description": "Empieza a escribir para buscar"
}
}
},
"local": {
- "title": ""
+ "title": "Resultados locales"
}
}
},
"page": {
- "help": "",
+ "help": "Buscar páginas",
"group": {
"page": {
- "title": "",
+ "title": "Páginas",
"option": {
"manageHome": {
- "label": ""
+ "label": "Administrar página de inicio"
},
"manageBoard": {
- "label": ""
+ "label": "Administrar tableros"
},
"manageApp": {
- "label": ""
+ "label": "Administrar aplicaciones"
},
"manageIntegration": {
- "label": ""
+ "label": "Administrar integraciones"
},
"manageSearchEngine": {
- "label": ""
+ "label": "Administrar motores de búsqueda"
},
"manageMedia": {
- "label": ""
+ "label": "Administrar imágenes"
},
"manageUser": {
"label": "Administrar usuarios"
},
"manageInvite": {
- "label": ""
+ "label": "Administrar invitaciones"
},
"manageGroup": {
- "label": ""
+ "label": "Administrar grupos"
},
"manageDocker": {
- "label": ""
+ "label": "Administrar docker"
},
"manageApi": {
- "label": ""
+ "label": "Swagger API"
},
"manageLog": {
- "label": ""
+ "label": "Ver registros"
},
"manageTask": {
- "label": ""
+ "label": "Administrar tareas"
},
"manageSettings": {
- "label": ""
+ "label": "Ajustes globales"
},
"about": {
"label": "Acerca de"
},
"homeBoard": {
- "label": ""
+ "label": "Tablero de inicio"
},
"preferences": {
"label": "Tus preferencias"
@@ -4159,37 +4171,37 @@
}
},
"userGroup": {
- "help": "",
+ "help": "Buscar usuarios o grupos",
"group": {
"user": {
"title": "Usuarios",
"children": {
"action": {
"detail": {
- "label": ""
+ "label": "Mostrar detalles de usuario"
}
},
"detail": {
- "title": ""
+ "title": "Selecciona una acción para el usuario"
}
}
},
"group": {
- "title": "",
+ "title": "Grupos",
"children": {
"action": {
"detail": {
- "label": ""
+ "label": "Mostrar detalles del grupo"
},
"manageMember": {
- "label": ""
+ "label": "Administrar usuarios"
},
"managePermission": {
- "label": ""
+ "label": "Administrar permisos"
}
},
"detail": {
- "title": ""
+ "title": "Selecciona una acción para el grupo"
}
}
}
@@ -4197,72 +4209,72 @@
}
},
"engine": {
- "search": "",
+ "search": "Buscar un motor de búsqueda",
"field": {
"name": {
"label": "Nombre"
},
"short": {
- "label": ""
+ "label": "Abreviatura"
},
"urlTemplate": {
- "label": ""
+ "label": "Plantilla de búsqueda de URL"
},
"description": {
- "label": ""
+ "label": "Descripción"
}
},
"page": {
"list": {
- "title": "",
+ "title": "Motores de búsqueda",
"noResults": {
- "title": "",
- "action": ""
+ "title": "Todavía no hay motores de búsqueda",
+ "action": "Crea tu primer motor de búsqueda"
},
- "interactive": ""
+ "interactive": "Interactivo, utiliza una integración"
},
"create": {
- "title": "",
+ "title": "Nuevo motor de búsqueda",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Motor de búsqueda creado",
+ "message": "El motor de búsqueda fue creado con éxito"
},
"error": {
- "title": "",
- "message": ""
+ "title": "No se creó el motor de búsqueda",
+ "message": "El motor de búsqueda no pudo ser creado"
}
}
},
"edit": {
- "title": "",
+ "title": "Editar motor de búsqueda",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Cambios aplicados con éxito",
+ "message": "El motor de búsqueda se guardó con éxito"
},
"error": {
- "title": "",
- "message": ""
+ "title": "No se pudieron aplicar los cambios",
+ "message": "No se pudo guardar el motor de búsqueda"
}
},
- "configControl": "",
+ "configControl": "Configuración",
"searchEngineType": {
- "generic": "",
- "fromIntegration": ""
+ "generic": "Genérico",
+ "fromIntegration": "Desde integración"
}
},
"delete": {
- "title": "",
- "message": "",
+ "title": "Eliminar motor de búsqueda",
+ "message": "¿Estás seguro de que quieres eliminar el motor de búsqueda {name}?",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Motor de búsqueda eliminado",
+ "message": "El motor de búsqueda fue eliminado con éxito"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Motor de búsqueda no eliminado",
+ "message": "No se ha podido eliminar el motor de búsqueda"
}
}
}
@@ -4270,15 +4282,15 @@
"media": {
"request": {
"modal": {
- "title": "",
+ "title": "Solicitar \"{name}\"",
"table": {
"header": {
- "season": "",
- "episodes": ""
+ "season": "Temporada",
+ "episodes": "Episodios"
}
},
"button": {
- "send": ""
+ "send": "Enviar solicitud"
}
}
}
@@ -4288,89 +4300,89 @@
"certificate": {
"field": {
"hostname": {
- "label": ""
+ "label": "Nombre de host"
},
"subject": {
- "label": ""
+ "label": "Sujeto"
},
"issuer": {
- "label": ""
+ "label": "Emisor"
},
"validFrom": {
- "label": ""
+ "label": "Válido desde"
},
"validTo": {
- "label": ""
+ "label": "Válido hasta"
},
"serialNumber": {
- "label": ""
+ "label": "Número de serie"
},
"fingerprint": {
- "label": ""
+ "label": "Huella digital"
}
},
"page": {
"list": {
- "title": "",
- "description": "",
+ "title": "Certificados de confianza",
+ "description": "Utilizado por Homarr para solicitar datos de las integraciones.",
"noResults": {
- "title": ""
+ "title": "Aún no hay certificados"
},
"invalid": {
- "title": "",
- "description": ""
+ "title": "Certificado no válido",
+ "description": "Error al analizar el certificado"
},
- "expires": "",
- "toHostnames": ""
+ "expires": "Expira {when}",
+ "toHostnames": "Nombres de host de confianza"
},
"hostnames": {
- "title": "",
- "description": "",
+ "title": "Nombres de host de certificado de confianza",
+ "description": "Algunos certificados no permiten que el dominio específico que utiliza Homarr los solicite, debido a esto todos los nombres de host de confianza con sus huellas digitales de certificado se utilizan para eludir estas restricciones.",
"noResults": {
- "title": ""
+ "title": "Aún no hay nombres de host"
},
- "toCertificates": ""
+ "toCertificates": "Certificados"
}
},
"action": {
"create": {
- "label": "",
+ "label": "Añadir certificado",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Certificado añadido",
+ "message": "El certificado fue añadido con éxito"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Error al añadir el certificado",
+ "message": "No se ha podido añadir el certificado"
}
}
},
"remove": {
- "label": "",
- "confirm": "",
+ "label": "Eliminar certificado",
+ "confirm": "¿Estás seguro de que deseas eliminar el certificado?",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Certificado eliminado",
+ "message": "El certificado fue eliminado con éxito"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Certificado no eliminado",
+ "message": "No se ha podido eliminar el certificado"
}
}
},
"removeHostname": {
- "label": "",
- "confirm": "",
+ "label": "Eliminar nombre de host de confianza",
+ "confirm": "¿Estás seguro de que quieres eliminar este nombre de host de confianza? Esto puede causar que algunas integraciones dejen de funcionar.",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Nombre de host eliminado",
+ "message": "El nombre de host fue eliminado con éxito"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Nombre de host no eliminado",
+ "message": "El nombre de host no pudo ser eliminado"
}
}
}
@@ -4379,10 +4391,10 @@
"log": {
"level": {
"option": {
- "debug": "",
- "info": "",
- "warn": "",
- "error": ""
+ "debug": "Depuración",
+ "info": "Información",
+ "warn": "Advertencia",
+ "error": "Error"
}
}
}
diff --git a/packages/translation/src/lang/et.json b/packages/translation/src/lang/et.json
index 65753d58c..84b767c28 100644
--- a/packages/translation/src/lang/et.json
+++ b/packages/translation/src/lang/et.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": ""
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": ""
},
- "sessionCleanup": {
- "label": ""
- },
"updateChecker": {
"label": ""
},
diff --git a/packages/translation/src/lang/fr.json b/packages/translation/src/lang/fr.json
index 78c938989..d38cc1d31 100644
--- a/packages/translation/src/lang/fr.json
+++ b/packages/translation/src/lang/fr.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": "Nombre maximum de publications"
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": "Données du puit DNS"
},
- "sessionCleanup": {
- "label": "Nettoyage de session"
- },
"updateChecker": {
"label": "Vérificateur de mise à jour"
},
diff --git a/packages/translation/src/lang/he.json b/packages/translation/src/lang/he.json
index 984f476cf..bbbc44c3f 100644
--- a/packages/translation/src/lang/he.json
+++ b/packages/translation/src/lang/he.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": "הגבלת כמות הודעות"
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": "נתוני חור DNS"
},
- "sessionCleanup": {
- "label": "ניקוי סשן"
- },
"updateChecker": {
"label": "בודק עדכונים"
},
diff --git a/packages/translation/src/lang/hr.json b/packages/translation/src/lang/hr.json
index cb522f249..e9a4049df 100644
--- a/packages/translation/src/lang/hr.json
+++ b/packages/translation/src/lang/hr.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": ""
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": ""
},
- "sessionCleanup": {
- "label": ""
- },
"updateChecker": {
"label": ""
},
diff --git a/packages/translation/src/lang/hu.json b/packages/translation/src/lang/hu.json
index 04223ecee..c20a19906 100644
--- a/packages/translation/src/lang/hu.json
+++ b/packages/translation/src/lang/hu.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": ""
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": ""
},
- "sessionCleanup": {
- "label": ""
- },
"updateChecker": {
"label": ""
},
diff --git a/packages/translation/src/lang/it.json b/packages/translation/src/lang/it.json
index 8461edf86..d9405bcd8 100644
--- a/packages/translation/src/lang/it.json
+++ b/packages/translation/src/lang/it.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": ""
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": ""
},
- "sessionCleanup": {
- "label": ""
- },
"updateChecker": {
"label": ""
},
diff --git a/packages/translation/src/lang/ja.json b/packages/translation/src/lang/ja.json
index ad15151fc..6ab6f650c 100644
--- a/packages/translation/src/lang/ja.json
+++ b/packages/translation/src/lang/ja.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "API キー (シークレット)",
"newLabel": "新しい API キー (シークレット)"
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -1279,12 +1291,12 @@
}
},
"descriptionDisplayMode": {
- "label": "",
- "description": "",
+ "label": "説明の表示モード",
+ "description": "アプリの説明を表示する方法を選択します",
"option": {
- "normal": "",
- "tooltip": "",
- "hidden": ""
+ "normal": "ウィジェット内",
+ "tooltip": "ツールチップ",
+ "hidden": "非表示"
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": "投稿数の上限"
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": "DNS Holeデータ"
},
- "sessionCleanup": {
- "label": "セッションのクリーンアップ"
- },
"updateChecker": {
"label": "アップデートチェッカー"
},
diff --git a/packages/translation/src/lang/ko.json b/packages/translation/src/lang/ko.json
index 340f01e4f..55011bace 100644
--- a/packages/translation/src/lang/ko.json
+++ b/packages/translation/src/lang/ko.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": ""
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": ""
},
- "sessionCleanup": {
- "label": ""
- },
"updateChecker": {
"label": ""
},
diff --git a/packages/translation/src/lang/lt.json b/packages/translation/src/lang/lt.json
index 60019b164..a28c9cca4 100644
--- a/packages/translation/src/lang/lt.json
+++ b/packages/translation/src/lang/lt.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": ""
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": ""
},
- "sessionCleanup": {
- "label": ""
- },
"updateChecker": {
"label": ""
},
diff --git a/packages/translation/src/lang/lv.json b/packages/translation/src/lang/lv.json
index 7787051db..e8f722beb 100644
--- a/packages/translation/src/lang/lv.json
+++ b/packages/translation/src/lang/lv.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": ""
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": ""
},
- "sessionCleanup": {
- "label": ""
- },
"updateChecker": {
"label": ""
},
diff --git a/packages/translation/src/lang/nl.json b/packages/translation/src/lang/nl.json
index 6666c51e4..648cca6dc 100644
--- a/packages/translation/src/lang/nl.json
+++ b/packages/translation/src/lang/nl.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": "Aantal berichtenlimiet"
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": "DNS-hole gegevens"
},
- "sessionCleanup": {
- "label": "Sessie opruimen"
- },
"updateChecker": {
"label": "Update checker"
},
diff --git a/packages/translation/src/lang/no.json b/packages/translation/src/lang/no.json
index 4675055bb..92ab8b8a0 100644
--- a/packages/translation/src/lang/no.json
+++ b/packages/translation/src/lang/no.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": "Antall poster grense"
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": "DNS Hole Data"
},
- "sessionCleanup": {
- "label": "Økt opprydding"
- },
"updateChecker": {
"label": "Oppdateringssjekk"
},
diff --git a/packages/translation/src/lang/pl.json b/packages/translation/src/lang/pl.json
index 4de8d7480..c2e4860c7 100644
--- a/packages/translation/src/lang/pl.json
+++ b/packages/translation/src/lang/pl.json
@@ -4,9 +4,9 @@
"start": {
"title": "Witaj w Homarrze",
"subtitle": "Zacznijmy od konfiguracji twojego Homarra.",
- "description": "Aby rozpocząć, wybierz jak chcesz skonfigurować Homarra.",
+ "description": "Aby rozpocząć, wybierz jak chcesz skonfigurować instancję Homarr.",
"action": {
- "scratch": "Zacznij od zera",
+ "scratch": "Zacznij od nowa",
"importOldmarr": "Importuj z Homarr przed 1.0"
}
},
@@ -789,7 +789,7 @@
},
"notification": {
"success": {
- "title": "Zaufane certyfikaty",
+ "title": "Zaufany certyfikat",
"message": "Dodano nazwę hosta do listy zaufanych certyfikatów"
},
"error": {
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "Klucz API (Secret)",
"newLabel": "Nowy klucz API (Secret)"
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": "Limit liczby postów"
+ },
+ "hideDescription": {
+ "label": "Ukryj opis"
}
}
},
@@ -2365,19 +2380,19 @@
"forksCount": "Forki",
"issuesCount": "Otwarte zgłoszenia",
"markViewed": "Oznacz jako przeczytane",
- "openProjectPage": "",
- "openReleasePage": "",
- "releaseDescription": "",
- "projectDescription": "",
- "created": "",
+ "openProjectPage": "Otwórz stronę projektu",
+ "openReleasePage": "Otwórz stronę wydania",
+ "releaseDescription": "Opis wydania",
+ "projectDescription": "Opis projektu",
+ "created": "Utworzony",
"error": {
- "label": "",
+ "label": "Błąd",
"messages": {
- "invalidIdentifier": "",
- "noMatchingVersion": "",
- "noReleasesFound": "",
- "noProviderSeleceted": "",
- "noProviderResponse": ""
+ "invalidIdentifier": "Nieprawidłowy identyfikator",
+ "noMatchingVersion": "Nie znaleziono pasującej wersji",
+ "noReleasesFound": "Nie znaleziono wydań!",
+ "noProviderSeleceted": "Nie wybrano dostawcy",
+ "noProviderResponse": "Brak odpowiedzi od dostawcy"
}
}
},
@@ -2385,181 +2400,181 @@
"option": {},
"card": {
"vpn": {
- "countConnected": ""
+ "countConnected": "{count} połączonych"
}
},
"error": {
- "integrationsDisconnected": "",
- "unknownContentOption": ""
+ "integrationsDisconnected": "Brak dostępnych danych, wszystkie integracje rozłączone",
+ "unknownContentOption": "Nieznana opcja zawartości dla widżetu podsumowania kontrolera sieci:"
},
- "name": "",
- "description": ""
+ "name": "Podsumowanie kontrolera sieci",
+ "description": "Wyświetla podsumowanie kontrolera sieci (np. UniFi Controller)."
},
"networkControllerStatus": {
"card": {
"variants": {
"wired": {
- "name": ""
+ "name": "Przewodowe"
},
"wifi": {
- "name": ""
+ "name": "Wi-Fi"
}
},
"users": {
- "label": ""
+ "label": "Użytkownicy"
},
"guests": {
- "label": ""
+ "label": "Goście"
}
},
"option": {
"content": {
"option": {
"wifi": {
- "label": ""
+ "label": "Wi-Fi"
},
"wired": {
- "label": ""
+ "label": "Przewodowe"
}
},
- "label": ""
+ "label": "Zawartość widżetu"
}
},
"error": {
- "integrationsDisconnected": "",
- "unknownContentOption": ""
+ "integrationsDisconnected": "Brak dostępnych danych, wszystkie integracje są rozłączone",
+ "unknownContentOption": "Nieznana opcja zawartości dla widżetu statusu sieci:"
},
- "name": "",
- "description": ""
+ "name": "Stan sieci",
+ "description": "Wyświetl podłączone urządzenia w sieci"
},
"networkController": {
"error": {
- "internalServerError": ""
+ "internalServerError": "Nie udało się pobrać podsumowania kontrolera sieci"
}
},
"firewall": {
- "name": "",
- "description": "",
+ "name": "Monitorowanie zapory",
+ "description": "Wyświetla podsumowanie zapór sieciowych",
"tab": {
- "system": "",
- "interfaces": ""
+ "system": "System",
+ "interfaces": "Interfejs"
},
"error": {
- "internalServerError": ""
+ "internalServerError": "Nie można pobrać danych z zapory"
},
"option": {
- "interfaces": ""
+ "interfaces": "Interfejsy sieciowe do wyświetlenia"
},
"widget": {
- "fwname": "",
- "version": "",
- "versiontitle": "",
- "cputitle": "",
- "memorytitle": "",
- "cpu": "",
- "memory": "",
+ "fwname": "Nazwa",
+ "version": "Wersja",
+ "versiontitle": "Wersje",
+ "cputitle": "Użycie procesora",
+ "memorytitle": "Użycie pamięci",
+ "cpu": "CPU",
+ "memory": "Pamięć",
"interfaces": {
- "name": "",
- "trans": "",
- "recv": "",
- "title": ""
+ "name": "nazwa",
+ "trans": "Przesłano",
+ "recv": "Otrzymano",
+ "title": "Interfejsy sieciowe"
}
}
},
"notifications": {
- "name": "",
- "description": "",
- "noItems": "",
+ "name": "Powiadomienia",
+ "description": "Wyświetl historię powiadomień z integracji",
+ "noItems": "Brak powiadomień do wyświetlenia.",
"option": {}
},
"systemResources": {
- "name": "",
- "description": "",
+ "name": "Zasoby systemowe",
+ "description": "Wykorzystanie CPU, pamięci, dysku i innych zasobów sprzętowych system",
"option": {},
"card": {
- "cpu": "",
- "memory": "",
- "network": "",
- "up": "",
- "down": ""
+ "cpu": "Procesor",
+ "memory": "Pamięć",
+ "network": "Sieć",
+ "up": "Aktywny",
+ "down": "Nieaktywny"
}
}
},
"widgetPreview": {
"toggle": {
- "enabled": "",
- "disabled": ""
+ "enabled": "Tryb edycji włączony",
+ "disabled": "Tryb edycji wyłączony"
},
"dimensions": {
- "title": ""
+ "title": "Zmień wymiary"
}
},
"board": {
"action": {
"duplicate": {
- "title": "",
- "message": "",
+ "title": "Duplikuj tablicę",
+ "message": "Spowoduje to zduplikowanie tablicy {name} wraz ze wszystkimi jej treściami. Jeśli widżety odwołują się do integracji, których nie możesz używać, zostaną usunięte",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Tablica została zduplikowana",
+ "message": "Tablica została pomyślnie zduplikowana"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Nie można zduplikować tablicy",
+ "message": "Nie udało się zduplikować tablicy"
}
}
},
"edit": {
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Zmiany zostały pomyślnie zastosowane",
+ "message": "Tablica została pomyślnie zapisana"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Nie można zastosować zmian",
+ "message": "Nie udało się zapisać tablicy"
}
},
"confirmLeave": {
- "title": "",
- "message": ""
+ "title": "Niezapisane zmiany",
+ "message": "Masz niezapisane zmiany, czy na pewno chcesz wyjść?"
}
},
"oldImport": {
- "label": "",
+ "label": "Import z Homarr sprzed wersji 1.0.0",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Import zakończony pomyślnie",
+ "message": "Tablica została pomyślnie zaimportowana"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Import nie powiódł się",
+ "message": "Nie udało się zaimportować tablicy. Sprawdź logi, aby uzyskać więcej informacji."
}
},
"form": {
"file": {
- "label": "",
- "invalidError": ""
+ "label": "Wybierz plik JSON",
+ "invalidError": "Nieprawidłowy plik konfiguracji"
},
"apps": {
"label": "Aplikacje",
"avoidDuplicates": {
- "label": "",
- "description": ""
+ "label": "Unikaj duplikatów",
+ "description": "Ignoruje aplikacje, dla których już istnieje aplikacja z tym samym adresem href."
},
"onlyImportApps": {
"label": "Import tylko aplikacje",
- "description": ""
+ "description": "Dodaje tylko aplikacje, tablica musi zostać odtworzona ręcznie."
}
},
"name": {
- "label": ""
+ "label": "Nazwa tablicy"
},
"screenSize": {
- "label": "",
- "description": "",
+ "label": "Rozmiar ekranu",
+ "description": "W wersjach przed 1.0 istniały trzy różne tryby, dzięki czemu można było wybrać liczbę kolumn dla każdego rozmiaru ekranu.",
"option": {
"sm": "Mały",
"md": "Średni",
@@ -2567,16 +2582,16 @@
}
},
"sidebarBehavior": {
- "label": "",
- "description": "",
+ "label": "Zachowanie paska bocznego",
+ "description": "Paski boczne zostały usunięte w wersji 1.0, możesz wybrać, co ma się stać z elementami, które się w nich znajdowały.",
"option": {
"lastSection": {
- "label": "",
- "description": ""
+ "label": "Ostatnia sekcja",
+ "description": "Pasek boczny będzie wyświetlany poniżej ostatniej sekcji"
},
"removeItems": {
- "label": "",
- "description": ""
+ "label": "Usuń elementy",
+ "description": "Elementy znajdujące się w pasku bocznym zostaną usunięte"
}
}
}
@@ -2584,63 +2599,63 @@
},
"quickCreateApp": {
"modal": {
- "title": "",
- "createAndUse": ""
+ "title": "Utwórz aplikację w locie",
+ "createAndUse": "Utwórz i użyj"
}
}
},
"field": {
"pageTitle": {
- "label": ""
+ "label": "Tytuł strony"
},
"metaTitle": {
- "label": ""
+ "label": "Tytuł meta"
},
"logoImageUrl": {
- "label": ""
+ "label": "Adres URL obrazu logo"
},
"faviconImageUrl": {
- "label": ""
+ "label": "Adres URL ikony favicon"
},
"backgroundImageUrl": {
- "label": "",
- "placeholder": "",
+ "label": "Adres URL obrazu tła",
+ "placeholder": "Zacznij pisać, aby wyszukać lokalne obrazy",
"group": {
- "your": "",
- "other": ""
+ "your": "Twoje obrazy",
+ "other": "Inne obrazy"
}
},
"backgroundImageAttachment": {
"label": "Ustawienie obrazu tła",
"option": {
"fixed": {
- "label": "",
- "description": ""
+ "label": "Naprawione",
+ "description": "Tło pozostaje w tej samej pozycji."
},
"scroll": {
- "label": "",
- "description": ""
+ "label": "Przewijanie",
+ "description": "Tło przewija się wraz z ruchem myszy."
}
}
},
"backgroundImageRepeat": {
- "label": "",
+ "label": "Powtarzanie obrazu tła",
"option": {
"repeat": {
- "label": "",
- "description": ""
+ "label": "Powtórz",
+ "description": "Obraz jest powtarzany tyle razy, ile potrzeba, aby wypełnić całą powierzchnię tła."
},
"no-repeat": {
- "label": "",
- "description": ""
+ "label": "Brak powtarzania",
+ "description": "Obraz nie jest powtarzany i może nie wypełniać całej dostępnej powierzchni."
},
"repeat-x": {
- "label": "",
- "description": ""
+ "label": "Powtarzaj w poziomie",
+ "description": "Tak jak 'Powtórz', ale tylko w osi poziomej."
},
"repeat-y": {
- "label": "",
- "description": ""
+ "label": "Powtarzaj w pionie",
+ "description": "Tak jak 'Powtórz', ale tylko w osi pionowej."
}
}
},
@@ -2648,12 +2663,12 @@
"label": "Rozmiar obrazu tła",
"option": {
"cover": {
- "label": "",
- "description": ""
+ "label": "Dopasuj do całej powierzchni",
+ "description": "Skaluje obraz tak, aby wypełnić całe okno, przycinając nadmiarową część."
},
"contain": {
- "label": "",
- "description": ""
+ "label": "Dopasuj do zawartości",
+ "description": "Skaluje obraz maksymalnie w kontenerze, zachowując proporcje i bez przycinania."
}
}
},
@@ -2664,38 +2679,38 @@
"label": "Kolor akcentowy"
},
"opacity": {
- "label": ""
+ "label": "Przezroczystość"
},
"iconColor": {
- "label": ""
+ "label": "Kolor ikony"
},
"clearColor": {
- "label": ""
+ "label": "Usuń kolor"
},
"customCss": {
- "label": "",
+ "label": "Niestandardowy CSS dla tej tablicy”",
"description": "Jeszcze bardziej dostosuj swój pulpit za pomocą CSS, zalecane tylko dla doświadczonych użytkowników",
"customClassesAlert": {
- "title": "",
- "description": ""
+ "title": "Niestandardowe klasy",
+ "description": "Możesz dodać własne klasy do elementów tablicy w zaawansowanych opcjach każdego elementu i użyć ich w powyższym niestandardowym CSS."
}
},
"disableStatus": {
- "label": "",
- "description": ""
+ "label": "Wyłącz status aplikacji",
+ "description": "Wyłącza sprawdzanie statusu wszystkich aplikacji na tej tablicy."
},
"columnCount": {
- "label": ""
+ "label": "Liczba kolumn"
},
"itemRadius": {
- "label": "",
- "description": "",
+ "label": "Promień elementu",
+ "description": "Zmienia zaokrąglenie kafelków na Twojej tablicy.",
"option": {
- "xs": "",
- "sm": "",
- "md": "",
- "lg": "",
- "xl": ""
+ "xs": "Bardzo mały",
+ "sm": "Mały",
+ "md": "Średni",
+ "lg": "Duży",
+ "xl": "Bardzo duży"
}
},
"name": {
@@ -2703,25 +2718,25 @@
},
"isPublic": {
"label": "Publiczna",
- "description": ""
+ "description": "Tablice publiczne są dostępne dla wszystkich, nawet bez konta."
}
},
"content": {
- "metaTitle": ""
+ "metaTitle": "{boardName} tablica"
},
"setting": {
"title": "Ustawienia tablicy {boardName}",
"section": {
"general": {
"title": "Ogólne",
- "unrecognizedLink": ""
+ "unrecognizedLink": "Podany link nie został rozpoznany i nie zostanie wyświetlony w podglądzie, może jednak działać."
},
"layout": {
"title": "Układ",
"responsive": {
- "title": "",
+ "title": "Responsywne układy",
"action": {
- "add": ""
+ "add": "Dodaj układ"
}
}
},
@@ -2729,26 +2744,26 @@
"title": "Tło"
},
"appearance": {
- "title": ""
+ "title": "Wygląd"
},
"customCss": {
- "title": ""
+ "title": "Niestandardowy CSS"
},
"behavior": {
- "title": ""
+ "title": "Zachowanie"
},
"access": {
- "title": "",
+ "title": "Kontrola dostępu",
"permission": {
"item": {
"view": {
"label": "Zobacz tablicę"
},
"modify": {
- "label": ""
+ "label": "Edytuj tablicę"
},
"full": {
- "label": ""
+ "label": "Pełny dostęp"
}
}
}
@@ -2757,41 +2772,41 @@
"title": "Strefa zagrożenia",
"action": {
"rename": {
- "label": "",
- "description": "",
- "button": "",
+ "label": "Zmień nazwę tablicy",
+ "description": "Zmiana nazwy spowoduje, że wszystkie linki do tej tablicy przestaną działać.",
+ "button": "Zmień nazwę",
"modal": {
- "title": ""
+ "title": "Zmień nazwę tablicy"
}
},
"visibility": {
- "label": "",
+ "label": "Zmień widoczność tablicy",
"description": {
- "public": "",
- "private": ""
+ "public": "Ta tablica jest obecnie publiczna.",
+ "private": "Ta tablica jest obecnie prywatna."
},
"button": {
- "public": "",
- "private": ""
+ "public": "Ustaw jako prywatna",
+ "private": "Ustaw jako publiczna"
},
"confirm": {
"public": {
- "title": "",
+ "title": "Ustaw tablicę jako prywatną",
"description": "Czy na pewno chcesz sprawić, by ta tablica była prywatna? Tablica nie będzie publiczna. Linki dla gości nie będą działać."
},
"private": {
- "title": "",
- "description": ""
+ "title": "Ustaw tablicę jako publiczną",
+ "description": "Czy na pewno chcesz udostępnić tę tablicę publicznie? Spowoduje to, że tablica będzie dostępna dla wszystkich."
}
}
},
"delete": {
- "label": "",
- "description": "",
- "button": "",
+ "label": "Usuń tę tablicę",
+ "description": "Po usunięciu tablicy nie będzie można tego cofnąć. Upewnij się, że chcesz kontynuować.",
+ "button": "Usuń tę tablicę",
"confirm": {
"title": "Usuń tablicę",
- "description": ""
+ "description": "Czy na pewno chcesz usunąć tę tablicę? Spowoduje to trwałe usunięcie tablicy i całej jej zawartości."
}
}
}
@@ -2800,33 +2815,33 @@
},
"error": {
"noBoard": {
- "title": "",
- "description": "",
- "link": "",
- "notice": ""
+ "title": "Witamy w Homarr",
+ "description": "Elegancki, nowoczesny pulpit nawigacyjny, który daje Ci dostęp do wszystkich Twoich aplikacji i usług w zasięgu ręki.",
+ "link": "Utwórz swoją pierwszą tablicę",
+ "notice": "Aby ta strona zniknęła, utwórz tablicę i ustaw ją jako tablicę główną."
},
"notFound": {
- "title": "",
- "description": "",
- "link": "",
- "notice": ""
+ "title": "Tablica nie znaleziona",
+ "description": "Wskazana tablica nie została znaleziona lub nie masz do niej dostępu.”",
+ "link": "Wyświetl wszystkie tablice",
+ "notice": "Sprawdź link lub skontaktuj się z administratorem, jeśli uważasz, że powinien być dostępny"
},
"homeBoard": {
- "title": "",
+ "title": "Brak tablicy głównej",
"admin": {
- "description": "",
- "link": "",
- "notice": ""
+ "description": "Nie ustawiłeś jeszcze tablicy głównej dla serwera.",
+ "link": "Skonfiguruj tablicę główną dla całego serwera",
+ "notice": "Aby ta strona zniknęła dla wszystkich użytkowników, ustaw tablicę główną dla serwera\n\n"
},
"user": {
- "description": "",
- "link": "",
- "notice": ""
+ "description": "Nie ustawiłeś jeszcze tablicy głównej.",
+ "link": "Skonfiguruj swoją tablicę główną",
+ "notice": "Aby ta strona zniknęła, ustaw tablicę główną w swoich preferencjach"
},
"anonymous": {
- "description": "",
- "link": "",
- "notice": ""
+ "description": "Administrator serwera nie ustawił jeszcze tablicy głównej.",
+ "link": "Pokaż tablice publiczne",
+ "notice": "Aby ta strona zniknęła, poproś administratora serwera o ustawienie tablicy głównej dla serwera."
}
}
}
@@ -2834,53 +2849,53 @@
"layout": {
"field": {
"name": {
- "label": ""
+ "label": "Nazwa"
},
"columnCount": {
- "label": ""
+ "label": "Liczba kolumn"
},
"breakpoint": {
- "label": "",
- "description": ""
+ "label": "Punkt przerwania",
+ "description": "Układ będzie używany na wszystkich ekranach większych niż ten punkt przerwania, aż do kolejnego, większego punktu przerwania."
}
}
},
"management": {
- "metaTitle": "",
+ "metaTitle": "Zarządzanie",
"title": {
- "morning": "",
- "afternoon": "",
- "evening": ""
+ "morning": "Dzień dobry, {username}",
+ "afternoon": "Dzień dobry, {username}",
+ "evening": "Dobry wieczór, {username}"
},
"notFound": {
- "title": "",
- "text": ""
+ "title": "Nie znaleziono",
+ "text": "Nie znaleziono żądanego zasobu."
},
"navbar": {
"items": {
"home": "Strona główna",
"boards": "Tablice",
"apps": "Aplikacje",
- "integrations": "",
- "searchEngies": "",
- "medias": "",
+ "integrations": "Integracje",
+ "searchEngies": "Wyszukiwarki",
+ "medias": "Media",
"users": {
"label": "Użytkownicy",
"items": {
"manage": "Zarządzaj",
"invites": "Zaproszenia",
- "groups": ""
+ "groups": "Grupy"
}
},
"tools": {
"label": "Narzędzia",
"items": {
- "docker": "",
- "kubernetes": "",
- "logs": "",
- "api": "",
- "certificates": "",
- "tasks": ""
+ "docker": "Docker",
+ "kubernetes": "Kubernetes",
+ "logs": "Logi",
+ "api": "API",
+ "certificates": "Certyfikaty",
+ "tasks": "Zadania"
}
},
"settings": "Ustawienia",
@@ -2888,9 +2903,9 @@
"label": "Pomoc",
"items": {
"documentation": "Dokumentacja",
- "submitIssue": "",
+ "submitIssue": "Zgłoś problem",
"discord": "Discord społeczności",
- "sourceCode": ""
+ "sourceCode": "Kod źródłowy"
}
},
"about": "O programie"
@@ -2902,57 +2917,57 @@
"board": "Tablice",
"user": "Użytkownicy",
"invite": "Zaproszenia",
- "integration": "",
+ "integration": "Integracje",
"app": "Aplikacje",
- "group": ""
+ "group": "Grupy"
},
"statisticLabel": {
"boards": "Tablice",
- "resources": "",
- "authentication": "",
- "authorization": ""
+ "resources": "Zasoby",
+ "authentication": "Uwierzytelnianie",
+ "authorization": "Autoryzacja"
}
},
"board": {
"title": "Twoje tablice",
"action": {
"new": {
- "label": ""
+ "label": "Nowa tablica"
},
"open": {
- "label": ""
+ "label": "Otwórz tablicę"
},
"settings": {
"label": "Ustawienia"
},
"setHomeBoard": {
- "label": "",
+ "label": "Ustaw jako tablicę główną",
"badge": {
"label": "Strona główna",
- "tooltip": ""
+ "tooltip": "Ta tablica będzie wyświetlana jako Twoja tablica główna"
}
},
"setMobileHomeBoard": {
- "label": "",
+ "label": "Ustaw jako tablicę mobilną",
"badge": {
- "label": "",
- "tooltip": ""
+ "label": "Mobilny",
+ "tooltip": "Ta tablica będzie wyświetlana jako Twoja tablica mobilna"
}
},
"duplicate": {
- "label": ""
+ "label": "Duplikuj tablicę"
},
"delete": {
"label": "Usuń trwale",
"confirm": {
"title": "Usuń tablicę",
- "description": ""
+ "description": "Czy na pewno chcesz usunąć tablicę {name}?"
}
}
},
"visibility": {
- "public": "",
- "private": ""
+ "public": "Ta tablica jest publiczna",
+ "private": "Ta tablica jest prywatna"
},
"modal": {
"createBoard": {
@@ -2965,24 +2980,24 @@
}
},
"media": {
- "includeFromAllUsers": ""
+ "includeFromAllUsers": "Uwzględnij media od wszystkich użytkowników"
},
"user": {
- "back": "",
- "fieldsDisabledExternalProvider": "",
+ "back": "Powrót do użytkowników",
+ "fieldsDisabledExternalProvider": "Niektóre pola są zablokowane, ponieważ są zarządzane przez zewnętrznego dostawcę uwierzytelniania",
"setting": {
"general": {
"title": "Ogólne",
"item": {
- "language": "",
+ "language": "Język & Region",
"board": {
- "title": "",
+ "title": "Tablica główna",
"type": {
- "general": "",
- "mobile": ""
+ "general": "Ogólne",
+ "mobile": "Mobilny"
}
},
- "search": "",
+ "search": "Szukaj",
"firstDayOfWeek": "Pierwszy dzień tygodnia",
"accessibility": "Ułatwienia dostępu"
}
@@ -2999,50 +3014,50 @@
"title": "Użytkownicy"
},
"edit": {
- "metaTitle": ""
+ "metaTitle": "Edytuj użytkownika {username}"
},
"create": {
"metaTitle": "Dodaj użytkownika",
- "title": "",
+ "title": "Utwórz nowego użytkownika",
"step": {
"personalInformation": {
- "label": ""
+ "label": "Dane osobowe"
},
"security": {
"label": "Bezpieczeństwo"
},
"groups": {
- "label": "",
- "title": "",
- "description": ""
+ "label": "Grupy",
+ "title": "Wybierz wszystkie grupy, do których użytkownik powinien należeć",
+ "description": "Grupa {everyoneGroup} jest przypisana do wszystkich użytkowników i nie może zostać usunięta."
},
"review": {
- "label": ""
+ "label": "Przeglądaj"
},
"completed": {
- "title": ""
+ "title": "Użytkownik został utworzony"
},
"error": {
- "title": ""
+ "title": "Nie udało się utworzyć użytkownika"
}
},
"action": {
- "createAnother": "",
- "back": ""
+ "createAnother": "Utwórz kolejnego użytkownika",
+ "back": "Powrót do listy użytkowników"
}
},
"invite": {
"title": "Zarządzaj zaproszeniami",
"action": {
"new": {
- "title": "",
+ "title": "Nowe zaproszenie",
"description": "Po wygaśnięciu zaproszenie straci ważność, a odbiorca zaproszenia nie będzie mógł utworzyć konta."
},
"copy": {
- "title": "",
- "description": "",
+ "title": "Kopiuj zaproszenie",
+ "description": "Twoje zaproszenie zostało wygenerowane. Po zamknięciu tego okna nie będziesz już mógł skopiować tego linku. Jeśli nie chcesz już zapraszać tej osoby, możesz w każdej chwili usunąć to zaproszenie.",
"link": "Link do zaproszenia",
- "button": ""
+ "button": "Kopiuj i zamknij"
},
"delete": {
"title": "Usuń zaproszenie",
@@ -3051,7 +3066,7 @@
},
"field": {
"id": {
- "label": ""
+ "label": "ID"
},
"creator": {
"label": "Twórca"
@@ -3060,36 +3075,36 @@
"label": "Wygasa"
},
"token": {
- "label": ""
+ "label": "Token"
}
}
}
},
"group": {
- "back": "",
+ "back": "Powrót do grup",
"setting": {
"general": {
"title": "Ogólne",
"owner": "Właściciel",
- "ownerOfGroup": "",
- "ownerOfGroupDeleted": ""
+ "ownerOfGroup": "Właściciel tej grupy",
+ "ownerOfGroupDeleted": "Właściciel tej grupy został usunięty. Obecnie grupa nie ma właściciela."
},
"setting": {
- "title": "",
- "alert": "",
+ "title": "Ustawienia",
+ "alert": "Ustawienia grup są priorytetyzowane według kolejności grup na liście. Ustawienia z górnych grup nadpisują ustawienia z grup dolnych.",
"board": {
- "title": ""
+ "title": "Tablice"
}
},
"members": {
- "title": "",
- "search": "",
- "notFound": ""
+ "title": "Członkowie",
+ "search": "Znajdź członka",
+ "notFound": "Nie znaleziono członków"
},
"permissions": {
- "title": "",
+ "title": "Uprawnienia",
"form": {
- "unsavedChanges": ""
+ "unsavedChanges": "Masz niezapisane zmiany!"
}
}
}
@@ -3098,258 +3113,255 @@
"title": "Ustawienia",
"notification": {
"success": {
- "message": ""
+ "message": "Ustawienia zostały pomyślnie zapisane"
},
"error": {
- "message": ""
+ "message": "Nie udało się zapisać ustawień"
}
},
"section": {
"analytics": {
- "title": "",
+ "title": "Analityka",
"general": {
- "title": "",
- "text": ""
+ "title": "Wysyłaj anonimowe dane analityczne",
+ "text": "Homarr będzie wysyłał anonimowe dane analityczne przy użyciu oprogramowania open source Umami. Nigdy nie zbiera żadnych danych osobowych, dlatego jest w pełni zgodny z RODO i CCPA. Zachęcamy do włączenia analityki, ponieważ pomaga to naszemu zespołowi open source w identyfikowaniu problemów i ustalaniu priorytetów w backlogu."
},
"widgetData": {
- "title": "",
- "text": ""
+ "title": "Dane widżetu",
+ "text": "Wyślij informacje o tym, które widżety (i w jakiej ilości) masz skonfigurowane. Nie obejmuje to adresów URL, nazw ani żadnych innych danych."
},
"integrationData": {
- "title": "",
- "text": ""
+ "title": "Informacje o integracjach",
+ "text": "Wyślij informacje o tym, które integracje (i w jakiej ilości) masz skonfigurowane. Nie obejmuje to adresów URL, nazw ani żadnych innych danych."
},
"usersData": {
- "title": "",
- "text": ""
+ "title": "Dane użytkowników",
+ "text": "Wyślij liczbę użytkowników oraz informację, czy SSO jest aktywne."
}
},
"crawlingAndIndexing": {
- "title": "",
- "warning": "",
+ "title": "Przeszukiwanie i indeksowanie",
+ "warning": "Włączenie lub wyłączenie dowolnych ustawień tutaj może znacząco wpłynąć na sposób indeksowania i przeszukiwania Twojej strony przez wyszukiwarki. Każde ustawienie jest jedynie sugestią, a jego zastosowanie zależy od robota wyszukiwarki. Wprowadzone zmiany mogą wymagać kilku dni lub nawet tygodni, aby zostały uwzględnione. Niektóre ustawienia mogą być specyficzne dla poszczególnych wyszukiwarek.",
"noIndex": {
- "title": "",
- "text": ""
+ "title": "Nie indeksuj",
+ "text": "Nie indeksuj strony w wyszukiwarkach i nie wyświetlaj jej w wynikach wyszukiwania"
},
"noFollow": {
- "title": "",
- "text": ""
+ "title": "Nie śledź",
+ "text": "Nie śledź żadnych linków podczas indeksowania. Wyłączenie tej opcji spowoduje, że roboty będą próbowały śledzić wszystkie linki w Homarr."
},
"noTranslate": {
- "title": "",
- "text": ""
+ "title": "Nie tłumacz",
+ "text": "Jeżeli język strony prawdopodobnie nie jest tym, który użytkownik chciałby czytać, Google wyświetli link do tłumaczenia w wynikach wyszukiwania"
},
"noSiteLinksSearchBox": {
- "title": "",
- "text": ""
+ "title": "Brak pola wyszukiwania linków witryny",
+ "text": "Google utworzy pole wyszukiwania z zaindeksowanymi linkami oraz innymi linkami bezpośrednimi. Włączenie tej opcji poprosi Google o wyłączenie tego pola."
}
},
"board": {
"title": "Tablice",
"homeBoard": {
- "label": "",
- "mobileLabel": "",
- "description": ""
+ "label": "Globalna tablica główna",
+ "mobileLabel": "Global mobile board",
+ "description": "Tylko tablice publiczne są dostępne do wyboru"
},
"status": {
- "title": "",
+ "title": "Status aplikacji",
"enableStatusByDefault": {
- "label": "",
- "description": ""
+ "label": "Domyślnie włącz sprawdzanie statusu",
+ "description": "Podczas dodawania elementu aplikacji, status będzie domyślnie włączony"
},
"forceDisableStatus": {
- "label": "",
- "description": ""
+ "label": "Wymuś wyłączenie statusu",
+ "description": "Status aplikacji zostanie wyłączony dla wszystkich użytkowników i nie będzie można go włączyć"
}
}
},
"search": {
- "title": "",
+ "title": "Szukaj",
"defaultSearchEngine": {
- "label": "",
- "description": ""
+ "label": "Globalna domyślna wyszukiwarka",
+ "description": "Nie można tutaj wybrać wyszukiwarek integracji"
}
},
"appearance": {
"title": "Wygląd",
"defaultColorScheme": {
- "label": "",
+ "label": "Domyślny schemat kolorów",
"options": {
- "light": "",
- "dark": ""
+ "light": "Jasny",
+ "dark": "Ciemny"
}
}
},
"culture": {
- "title": "",
+ "title": "Ustawienia regionalne",
"defaultLocale": {
- "label": ""
+ "label": "Język domyślny"
}
}
}
},
"tool": {
"tasks": {
- "title": "",
+ "title": "Zadania",
"status": {
- "idle": "",
+ "idle": "Bezczynny",
"running": "Uruchomione",
"error": "Błąd",
- "disabled": ""
+ "disabled": "Wyłączone"
},
"job": {
"minecraftServerStatus": {
- "label": ""
+ "label": "Status serwera Minecraft"
},
"iconsUpdater": {
- "label": ""
+ "label": "Aktualizator ikon"
},
"analytics": {
- "label": ""
+ "label": "Analityka"
},
"smartHomeEntityState": {
- "label": ""
+ "label": "Stan jednostki Smart Home"
},
"ping": {
- "label": ""
+ "label": "Pingi"
},
"mediaServer": {
"label": "Serwery mediów"
},
"mediaOrganizer": {
- "label": ""
+ "label": "Organizatory mediów"
},
"downloads": {
- "label": ""
+ "label": "Pobrane "
},
"mediaRequestStats": {
- "label": ""
+ "label": "Statystyki żądań mediów"
},
"mediaRequestList": {
- "label": ""
+ "label": "Lista żądań mediów"
},
"rssFeeds": {
- "label": ""
+ "label": "Kanały RSS"
},
"indexerManager": {
- "label": ""
+ "label": "Menedżer indeksowania"
},
"healthMonitoring": {
- "label": ""
+ "label": "Monitorowanie zdrowia systemu"
},
"dnsHole": {
- "label": ""
- },
- "sessionCleanup": {
- "label": ""
+ "label": "Dane DNS Hole"
},
"updateChecker": {
- "label": ""
+ "label": "Sprawdzanie aktualizacji"
},
"mediaTranscoding": {
- "label": ""
+ "label": "Transkodowanie mediów"
},
"networkController": {
- "label": ""
+ "label": "Kontroler sieci"
},
"refreshNotifications": {
- "label": ""
+ "label": "Aktualizacje powiadomień"
},
"dockerContainers": {
- "label": ""
+ "label": "Kontenery Dockera"
},
"firewallCpu": {
- "label": ""
+ "label": "Procesor firewalla"
},
"firewallMemory": {
- "label": ""
+ "label": "Pamięć firewalla"
},
"firewallVersion": {
- "label": ""
+ "label": "Wersja firewalla"
},
"firewallInterfaces": {
- "label": ""
+ "label": "Interfejsy firewalla"
}
},
"interval": {
- "seconds": "",
- "minutes": "",
- "hours": "",
- "midnight": "",
- "weeklyMonday": "",
+ "seconds": "Co {interval, plural, =1 {sekundę} other {# sekundy}}",
+ "minutes": "Co {interval, plural, =1 {minutę} other {# minuty}}”",
+ "hours": "Co {interval, plural, =1 {godzinę} other {# godziny}}",
+ "midnight": "Codziennie o północy",
+ "weeklyMonday": "Co tydzień w poniedziałek",
"update": {
"success": {
- "message": ""
+ "message": "Interwał został pomyślnie zaktualizowany"
},
"error": {
- "message": ""
+ "message": "Nie udało się zaktualizować interwału"
}
}
},
"settings": {
- "title": ""
+ "title": "Ustawienia zadania dla {jobName}"
},
"field": {
"name": {
- "label": ""
+ "label": "Nazwa"
},
"interval": {
- "label": ""
+ "label": "Interwał harmonogramu"
},
"lastExecution": {
- "label": ""
+ "label": "Ostatnie wykonanie"
},
"actions": {
- "label": ""
+ "label": "Akcje"
}
},
"table": {
- "search": ""
+ "search": "Szukaj wśród {count} zadań..."
},
"action": {
"refresh": {
- "label": ""
+ "label": "Odśwież"
}
},
"refresh": {
"success": {
- "message": ""
+ "message": "Zadania odświeżone pomyślnie"
},
"error": {
- "message": ""
+ "message": "Nie udało się odświeżyć zadań"
}
},
"trigger": {
"success": {
- "message": ""
+ "message": "Zadanie uruchomione pomyślnie"
},
"error": {
- "message": ""
+ "message": "Nie udało się uruchomić zadania"
}
},
"enable": {
"success": {
- "message": ""
+ "message": "Zadanie włączone pomyślnie"
}
},
"disable": {
"success": {
- "message": ""
+ "message": "Zadanie wyłączone pomyślnie"
}
},
"toggle": {
"error": {
- "message": ""
+ "message": "Nie udało się przełączyć statusu zadania"
}
}
},
"api": {
- "title": "",
+ "title": "API",
"modal": {
"createApiToken": {
- "title": "",
- "description": "",
- "button": ""
+ "title": "Token API został utworzony",
+ "description": "Utworzono token API. Zachowaj ostrożność — ten token jest szyfrowany w bazie danych i nie zostanie ponownie wyświetlony. Jeśli go utracisz, nie będzie możliwości odzyskania tego konkretnego tokena.",
+ "button": "Kopiuj i zamknij"
}
},
"tab": {
@@ -3357,22 +3369,22 @@
"label": "Dokumentacja"
},
"apiKey": {
- "label": "",
- "title": "",
+ "label": "Uwierzytelnianie",
+ "title": "Klucze API",
"button": {
- "createApiToken": ""
+ "createApiToken": "Utwórz token API"
},
"modal": {
"delete": {
- "title": "",
- "text": ""
+ "title": "Usuń token API",
+ "text": "To działanie trwale usunie token API. Klienci API korzystający z tego tokena nie będą mogli się uwierzytelniać ani wykonywać żądań. Tej operacji nie można cofnąć."
}
},
"table": {
"header": {
- "id": "",
- "createdBy": "",
- "actions": ""
+ "id": "ID",
+ "createdBy": "Utworzony przez",
+ "actions": "Akcje"
}
}
}
@@ -3380,32 +3392,32 @@
}
},
"about": {
- "version": "",
- "text": "",
+ "version": "Wersja {version}",
+ "text": "Homarr to projekt open source tworzony przez społeczność i utrzymywany przez wolontariuszy. Dzięki tym osobom Homarr rozwija się nieprzerwanie od 2021 roku. Zespół pracuje w pełni zdalnie, z wielu krajów, w wolnym czasie i bez wynagrodzenia.",
"accordion": {
"contributors": {
- "title": "",
- "subtitle": ""
+ "title": "Współtwórcy",
+ "subtitle": "{count} utrzymuje kod & Homarr"
},
"translators": {
- "title": "",
- "subtitle": ""
+ "title": "Tłumacze",
+ "subtitle": "{count} współtworzy tłumaczenia w wielu językach"
},
"libraries": {
- "title": "",
- "subtitle": ""
+ "title": "Biblioteki",
+ "subtitle": "{count} używanych w kodzie Homarr"
}
}
}
}
},
"docker": {
- "title": "",
+ "title": "Kontenery",
"table": {
- "updated": "",
- "search": "",
- "selected": "",
- "footer": ""
+ "updated": "Zaktualizowano {when}",
+ "search": "Szukaj wśród {count} kontenerów",
+ "selected": "Wybrano {selectCount} z {totalCount} kontenerów",
+ "footer": "Łącznie {count} kontenerów"
},
"field": {
"name": {
@@ -3418,17 +3430,17 @@
"running": "Uruchomione",
"paused": "Zatrzymane",
"restarting": "Restartowanie",
- "exited": "",
+ "exited": "Zakończony",
"removing": "Usuwanie",
- "dead": ""
+ "dead": "Martwy"
}
},
"stats": {
"cpu": {
- "label": ""
+ "label": "CPU"
},
"memory": {
- "label": ""
+ "label": "Pamięć"
}
},
"containerImage": {
@@ -3439,17 +3451,17 @@
}
},
"action": {
- "title": "",
+ "title": "Akcje",
"start": {
"label": "Uruchom",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Uruchomione kontenery",
+ "message": "Kontenery zostały pomyślnie uruchomione"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Kontenery nie zostały uruchomione",
+ "message": "Kontenery nie mogły zostać uruchomione"
}
}
},
@@ -3457,12 +3469,12 @@
"label": "Zatrzymaj",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Kontenery zatrzymane",
+ "message": "Kontenery zostały pomyślnie zatrzymane"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Kontenery nie zostały zatrzymane",
+ "message": "Nie udało się zatrzymać kontenerów"
}
}
},
@@ -3470,12 +3482,12 @@
"label": "Uruchom ponownie",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Kontenery zrestartowane",
+ "message": "Kontenery zostały pomyślnie zrestartowane"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Kontenery nie zostały uruchomione ponownie",
+ "message": "Kontenery nie mogły zostać ponownie uruchomione"
}
}
},
@@ -3483,316 +3495,316 @@
"label": "Usuń",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Usunięto kontenery",
+ "message": "Kontenery zostały pomyślnie usunięte"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Nie udało się usunąć kontenerów",
+ "message": "Nie udało się usunąć kontenerów"
}
}
},
"refresh": {
- "label": "",
+ "label": "Odśwież",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Odświeżone kontenery",
+ "message": "Teraz przeglądasz najnowsze dane"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Kontenery nie odświeżone",
+ "message": "Coś poszło nie tak podczas odświeżania kontenerów"
}
}
},
"addToHomarr": {
- "label": "",
+ "label": "Dodaj do Homarr",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Dodano do Homarr",
+ "message": "Wybrane aplikacje zostały dodane do Homarr"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Nie udało się dodać do Homarr",
+ "message": "Nie udało się dodać wybranych aplikacji do Homarr"
}
},
"modal": {
- "title": ""
+ "title": "Dodaj kontener(y) Dockera do Homarr"
}
}
},
"error": {
- "internalServerError": ""
+ "internalServerError": "Nie udało się pobrać kontenerów Dockera"
}
},
"kubernetes": {
"cluster": {
- "title": "",
- "label": "",
- "providers": "",
- "version": "",
- "architecture": "",
+ "title": "Panel klastra",
+ "label": "Klaster",
+ "providers": "Dostawcy",
+ "version": "Wersja",
+ "architecture": "Architektura",
"capacity": {
- "title": "",
+ "title": "Pojemność",
"resource": {
- "reserved": "",
- "used": ""
+ "reserved": "Zarezerwowane",
+ "used": "Używane"
}
},
"resources": {
- "title": "",
- "nodes": "",
- "namespaces": "",
- "ingresses": "",
- "services": "",
- "pods": "",
- "configmaps": "",
- "secrets": "",
- "volumes": ""
+ "title": "Zasoby",
+ "nodes": "Węzły",
+ "namespaces": "Przestrzenie nazw",
+ "ingresses": "Ingresy",
+ "services": "Usługi",
+ "pods": "Pody",
+ "configmaps": "ConfigMaps",
+ "secrets": "Sekrety",
+ "volumes": "Wolumeny"
}
},
"nodes": {
- "label": "",
+ "label": "Węzły",
"field": {
"name": {
- "label": ""
+ "label": "Nazwa"
},
"state": {
- "label": "",
+ "label": "Status",
"option": {
- "ready": "",
- "NotReady": ""
+ "ready": "Gotowe",
+ "NotReady": "Niegotowy"
}
},
"cpu": {
- "label": ""
+ "label": "CPU"
},
"memory": {
- "label": ""
+ "label": "RAM"
},
"pods": {
- "label": ""
+ "label": "Pody"
},
"operatingSystem": {
- "label": ""
+ "label": "System operacyjny"
},
"architecture": {
- "label": ""
+ "label": "Architektura"
},
"kubernetesVersion": {
- "label": ""
+ "label": "Wersja Kubernetes"
},
"creationTimestamp": {
- "label": ""
+ "label": "Utworzony"
}
},
"table": {
- "search": ""
+ "search": "Szukaj {count} węzłów"
}
},
"namespaces": {
- "label": "",
+ "label": "Przestrzenie nazw",
"field": {
"name": {
- "label": ""
+ "label": "Nazwa"
},
"state": {
- "label": "",
+ "label": "Status",
"option": {
- "active": "",
- "terminating": ""
+ "active": "Aktywny",
+ "terminating": "Kończenie"
}
},
"creationTimestamp": {
- "label": ""
+ "label": "Utworzony"
}
},
"table": {
- "search": ""
+ "search": "zukaj {count} przestrzeni nazw"
}
},
"ingresses": {
- "label": "",
+ "label": "Ingresy",
"field": {
"name": {
- "label": ""
+ "label": "Nazwa"
},
"namespace": {
- "label": ""
+ "label": "Przestrzeń nazw"
},
"className": {
- "label": ""
+ "label": "Nazwa klasy"
},
"rulesAndPaths": {
- "label": ""
+ "label": "Reguły i ścieżki"
},
"creationTimestamp": {
- "label": ""
+ "label": "Utworzony"
}
},
"table": {
- "search": ""
+ "search": "Szukaj {count} ingressów"
}
},
"services": {
- "label": "",
+ "label": "Usługi",
"field": {
"name": {
- "label": ""
+ "label": "Nazwa"
},
"namespace": {
- "label": ""
+ "label": "Przestrzeń nazw"
},
"type": {
- "label": ""
+ "label": "Typ"
},
"ports": {
- "label": ""
+ "label": "Porty"
},
"targetPorts": {
- "label": ""
+ "label": "Porty docelowe"
},
"clusterIP": {
- "label": ""
+ "label": "Adres IP klastra"
},
"creationTimestamp": {
- "label": ""
+ "label": "Utworzony"
}
},
"table": {
- "search": ""
+ "search": "Szukaj {count} usług"
}
},
"pods": {
- "label": "",
+ "label": "Pody",
"field": {
"name": {
- "label": ""
+ "label": "Nazwa"
},
"namespace": {
- "label": ""
+ "label": "Przestrzeń nazw"
},
"image": {
- "label": ""
+ "label": "Obraz"
},
"applicationType": {
"label": "Typ aplikacji"
},
"status": {
- "label": ""
+ "label": "Status"
},
"creationTimestamp": {
- "label": ""
+ "label": "Utworzony"
}
},
"table": {
- "search": ""
+ "search": "Szukaj {count} podów"
}
},
"secrets": {
- "label": "",
+ "label": "Sekrety",
"field": {
"name": {
- "label": ""
+ "label": "Nazwa"
},
"namespace": {
- "label": ""
+ "label": "przestrzeń nazw"
},
"type": {
- "label": ""
+ "label": "typ"
},
"creationTimestamp": {
- "label": ""
+ "label": "Utworzony"
}
},
"table": {
- "search": ""
+ "search": "Szukaj {count} sekretów"
}
},
"configmaps": {
- "label": "",
+ "label": "ConfigMaps",
"field": {
"name": {
- "label": ""
+ "label": "Nazwa"
},
"namespace": {
- "label": ""
+ "label": "przestrzeń nazw"
},
"creationTimestamp": {
- "label": ""
+ "label": "Utworzony"
}
},
"table": {
- "search": ""
+ "search": "Szukaj {count} configMaps"
}
},
"volumes": {
- "label": "",
+ "label": "Wolumeny",
"field": {
"name": {
- "label": ""
+ "label": "Nazwa"
},
"namespace": {
- "label": ""
+ "label": "Przestrzeń nazw"
},
"accessModes": {
- "label": ""
+ "label": "Tryby dostępu"
},
"storage": {
- "label": ""
+ "label": "Pamięć"
},
"storageClassName": {
- "label": ""
+ "label": "Nazwa klasy pamięci"
},
"volumeMode": {
- "label": ""
+ "label": "Tryb woluminu"
},
"volumeName": {
- "label": ""
+ "label": "Nazwa wolumenu"
},
"status": {
- "label": ""
+ "label": "Status"
},
"creationTimestamp": {
- "label": ""
+ "label": "Utworzony"
}
},
"table": {
- "search": ""
+ "search": "Szukaj {count} woluminów"
}
},
"error": {
- "internalServerError": ""
+ "internalServerError": "Nie udało się pobrać danych Kubernetes"
}
},
"permission": {
- "title": "",
+ "title": "Uprawnienia",
"userSelect": {
- "title": ""
+ "title": "Dodaj uprawnienie użytkownika"
},
"groupSelect": {
- "title": ""
+ "title": "Dodaj uprawnienie grupy"
},
"tab": {
"user": "Użytkownicy",
- "group": "",
- "inherited": ""
+ "group": "Grupy",
+ "inherited": "Dziedziczone grupy"
},
"field": {
"user": {
"label": "Użytkownik"
},
"group": {
- "label": ""
+ "label": "Grupa"
},
"permission": {
- "label": ""
+ "label": "Uprawnienie"
}
},
"action": {
- "saveUser": "",
- "saveGroup": ""
+ "saveUser": "Zapisz uprawnienia użytkownika",
+ "saveGroup": "Zapisz uprawnienia grupy"
}
},
"navigationStructure": {
@@ -3802,30 +3814,30 @@
"label": "Tablice"
},
"integrations": {
- "label": "",
+ "label": "Integracje",
"edit": {
"label": "Edytuj"
},
"new": {
- "label": ""
+ "label": "Nowy"
}
},
"search-engines": {
- "label": "",
+ "label": "Wyszukiwarki",
"new": {
- "label": ""
+ "label": "Nowy"
},
"edit": {
"label": "Edytuj"
}
},
"medias": {
- "label": ""
+ "label": "Media"
},
"apps": {
"label": "Aplikacje",
"new": {
- "label": ""
+ "label": "Nowy"
},
"edit": {
"label": "Edytuj"
@@ -3840,7 +3852,7 @@
"security": "Bezpieczeństwo",
"board": "Tablice",
"groups": {
- "label": ""
+ "label": "Grupy"
},
"invites": {
"label": "Zaproszenia"
@@ -3849,45 +3861,45 @@
"tools": {
"label": "Narzędzia",
"tasks": {
- "label": ""
+ "label": "Zadania"
},
"docker": {
- "label": ""
+ "label": "Docker"
},
"kubernetes": {
- "label": "",
+ "label": "Kubernetes",
"nodes": {
- "label": ""
+ "label": "Węzły"
},
"namespaces": {
- "label": ""
+ "label": "Przestrzenie nazw"
},
"ingresses": {
- "label": ""
+ "label": "Ingresy"
},
"services": {
- "label": ""
+ "label": "Usługi"
},
"pods": {
- "label": ""
+ "label": "pody"
},
"configmaps": {
- "label": ""
+ "label": "ConfigMaps"
},
"secrets": {
- "label": ""
+ "label": "Sekrety"
},
"volumes": {
- "label": ""
+ "label": "Wolumeny"
}
},
"logs": {
- "label": ""
+ "label": "Logi"
},
"certificates": {
- "label": "",
+ "label": "Certyfikaty",
"hostnames": {
- "label": ""
+ "label": "Nazwy hostów"
}
}
},
@@ -3900,28 +3912,28 @@
}
},
"search": {
- "placeholder": "",
- "nothingFound": "",
+ "placeholder": "Wyszukaj cokolwiek",
+ "nothingFound": "Nic nie znaleziono",
"error": {
- "fetch": ""
+ "fetch": "Wystąpił błąd podczas pobierania danych"
},
"mode": {
"appIntegrationBoard": {
- "help": "",
+ "help": "Szukaj aplikacji, integracji lub tablic",
"group": {
"app": {
"title": "Aplikacje",
"children": {
"action": {
"open": {
- "label": ""
+ "label": "Otwórz adres URL aplikacji"
},
"edit": {
- "label": ""
+ "label": "Edytuj aplikację"
}
},
"detail": {
- "title": ""
+ "title": "Wybierz akcję dla aplikacji"
}
}
},
@@ -3930,122 +3942,122 @@
"children": {
"action": {
"open": {
- "label": ""
+ "label": "Otwórz tablicę"
},
"homeBoard": {
- "label": ""
+ "label": "Ustaw jako tablicę główną"
},
"mobileBoard": {
- "label": ""
+ "label": "Ustaw jako tablicę mobilną"
},
"settings": {
- "label": ""
+ "label": "Otwórz ustawienia"
}
},
"detail": {
- "title": ""
+ "title": "Wybierz akcję dla tablicy"
}
}
},
"integration": {
- "title": ""
+ "title": "Integracje"
}
}
},
"command": {
- "help": "",
+ "help": "Aktywuj tryb poleceń",
"group": {
"localCommand": {
- "title": ""
+ "title": "Polecenia lokalne"
},
"globalCommand": {
- "title": "",
+ "title": "Polecenia globalne",
"option": {
"colorScheme": {
- "light": "",
- "dark": ""
+ "light": "Przełącz na tryb jasny",
+ "dark": "Przełącz na tryb ciemny"
},
"language": {
- "label": "",
+ "label": "Zmień język",
"children": {
"detail": {
- "title": ""
+ "title": "Wybierz preferowany język"
}
}
},
"newBoard": {
- "label": ""
+ "label": "Utwórz nową tablicę"
},
"importBoard": {
- "label": ""
+ "label": "Importuj tablicę"
},
"newApp": {
- "label": ""
+ "label": "Utwórz nową aplikację"
},
"newIntegration": {
- "label": "",
+ "label": "Utwórz nową integrację",
"children": {
"detail": {
- "title": ""
+ "title": "Wybierz typ integracji, który chcesz utworzyć"
}
}
},
"newUser": {
- "label": ""
+ "label": "Utwórz nowego użytkownika"
},
"newInvite": {
- "label": ""
+ "label": "Utwórz nowe zaproszenie"
},
"newGroup": {
- "label": ""
+ "label": "Utwórz nową grupę"
}
}
}
}
},
"media": {
- "requestMovie": "",
- "requestSeries": "",
- "openIn": ""
+ "requestMovie": "Poproś o film",
+ "requestSeries": "Poproś o serial",
+ "openIn": "Otwórz w {kind}"
},
"external": {
- "help": "",
+ "help": "Użyj zewnętrznej wyszukiwarki",
"group": {
"searchEngine": {
- "title": "",
+ "title": "Wyszukiwarki",
"children": {
"action": {
"search": {
- "label": ""
+ "label": "Wyszukaj za pomocą {name}"
}
},
"detail": {
- "title": ""
+ "title": "Wybierz akcję dla wyszukiwarki"
},
"searchResults": {
- "title": ""
+ "title": "Wybierz wynik wyszukiwania do wykonania akcji"
}
},
"option": {
"google": {
- "name": "",
- "description": ""
+ "name": "Google",
+ "description": "Przeszukaj internet za pomocą Google"
},
"bing": {
- "name": "",
- "description": ""
+ "name": "Bing",
+ "description": "Przeszukaj internet za pomocą Bing"
},
"duckduckgo": {
- "name": "",
- "description": ""
+ "name": "DuckDuckGo",
+ "description": "Przeszukaj internet za pomocą DuckDuckGo"
},
"torrent": {
"name": "Torrenty",
- "description": ""
+ "description": "Wyszukaj torrenty na torrentdownloads.pro"
},
"youTube": {
- "name": "",
- "description": ""
+ "name": "YouTube",
+ "description": "Wyszukaj filmy na YouTube"
}
}
}
@@ -4054,7 +4066,7 @@
"help": {
"group": {
"mode": {
- "title": ""
+ "title": "Tryby"
},
"help": {
"title": "Pomoc",
@@ -4063,7 +4075,7 @@
"label": "Dokumentacja"
},
"submitIssue": {
- "label": ""
+ "label": "Zgłoś problem"
},
"discord": {
"label": "Discord społeczności"
@@ -4075,81 +4087,81 @@
"home": {
"group": {
"search": {
- "title": "",
+ "title": "Szukaj",
"option": {
"other": {
- "label": ""
+ "label": "Wyszukaj za pomocą innej wyszukiwarki"
},
"no-default": {
- "label": "",
- "description": ""
+ "label": "Brak domyślnej wyszukiwarki",
+ "description": "Ustaw domyślną wyszukiwarkę w ustawieniach"
},
"search": {
- "label": ""
+ "label": "Wyszukaj „{query}” za pomocą {name}"
},
"from-integration": {
- "description": ""
+ "description": "Zacznij pisać, aby wyszukać"
}
}
},
"local": {
- "title": ""
+ "title": "Wyniki lokalne"
}
}
},
"page": {
- "help": "",
+ "help": "Wyszukaj strony",
"group": {
"page": {
- "title": "",
+ "title": "Strony",
"option": {
"manageHome": {
- "label": ""
+ "label": "Zarządzaj stroną główną"
},
"manageBoard": {
- "label": ""
+ "label": "Zarządzaj tablicami"
},
"manageApp": {
- "label": ""
+ "label": "Zarządzaj aplikacjami"
},
"manageIntegration": {
- "label": ""
+ "label": "Zarządzaj integracjami"
},
"manageSearchEngine": {
- "label": ""
+ "label": "Zarządzaj wyszukiwarkami"
},
"manageMedia": {
- "label": ""
+ "label": "Zarządzaj mediami"
},
"manageUser": {
"label": "Zarządzaj użytkownikami"
},
"manageInvite": {
- "label": ""
+ "label": "Zarządzaj zaproszeniami"
},
"manageGroup": {
- "label": ""
+ "label": "Zarządzaj grupami"
},
"manageDocker": {
- "label": ""
+ "label": "Zarządzaj Dockerem"
},
"manageApi": {
- "label": ""
+ "label": "Swagger API"
},
"manageLog": {
- "label": ""
+ "label": "Wyświetl logi"
},
"manageTask": {
- "label": ""
+ "label": "Zarządzaj zadaniami"
},
"manageSettings": {
- "label": ""
+ "label": "Ustawienia globalne"
},
"about": {
"label": "O programie"
},
"homeBoard": {
- "label": ""
+ "label": "Tablica główna"
},
"preferences": {
"label": "Twoje preferencje"
@@ -4159,37 +4171,37 @@
}
},
"userGroup": {
- "help": "",
+ "help": "Wyszukaj użytkowników lub grupy",
"group": {
"user": {
"title": "Użytkownicy",
"children": {
"action": {
"detail": {
- "label": ""
+ "label": "Pokaż szczegóły użytkownika"
}
},
"detail": {
- "title": ""
+ "title": "Wybierz akcję dla użytkownika"
}
}
},
"group": {
- "title": "",
+ "title": "Grupy",
"children": {
"action": {
"detail": {
- "label": ""
+ "label": "Pokaż szczegóły grupy"
},
"manageMember": {
- "label": ""
+ "label": "Zarządzaj użytkownikami"
},
"managePermission": {
- "label": ""
+ "label": "Zarządzanie uprawnieniami"
}
},
"detail": {
- "title": ""
+ "title": "Wybierz akcję dla grupy"
}
}
}
@@ -4197,72 +4209,72 @@
}
},
"engine": {
- "search": "",
+ "search": "Znajdź wyszukiwarkę",
"field": {
"name": {
"label": "Nazwa"
},
"short": {
- "label": ""
+ "label": "Krótki"
},
"urlTemplate": {
- "label": ""
+ "label": "Szablon wyszukiwania URL"
},
"description": {
- "label": ""
+ "label": "Opis"
}
},
"page": {
"list": {
- "title": "",
+ "title": "Wyszukiwarki",
"noResults": {
- "title": "",
- "action": ""
+ "title": "Nie ma jeszcze żadnych wyszukiwarek",
+ "action": "Utwórz swoją pierwszą wyszukiwarkę"
},
- "interactive": ""
+ "interactive": "Interaktywny, korzysta z integracji"
},
"create": {
- "title": "",
+ "title": "Nowa wyszukiwarka",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Wyszukiwarka została utworzona",
+ "message": "Wyszukiwarka została pomyślnie utworzona"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Wyszukiwarka nie została utworzona",
+ "message": "Nie udało się utworzyć wyszukiwarki"
}
}
},
"edit": {
- "title": "",
+ "title": "Edytuj wyszukiwarkę",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Zmiany zostały pomyślnie zastosowane",
+ "message": "Wyszukiwarka została pomyślnie zapisana"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Nie można zastosować zmian",
+ "message": "Nie udało się zapisać wyszukiwarki"
}
},
- "configControl": "",
+ "configControl": "Konfiguracja",
"searchEngineType": {
- "generic": "",
- "fromIntegration": ""
+ "generic": "Ogólny",
+ "fromIntegration": "Z integracji"
}
},
"delete": {
- "title": "",
- "message": "",
+ "title": "Usuń wyszukiwarkę",
+ "message": "Czy na pewno chcesz usunąć wyszukiwarkę {name}?",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Wyszukiwarka została usunięta",
+ "message": "Wyszukiwarka została pomyślnie usunięta"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Wyszukiwarka nie została usunięta",
+ "message": "Nie udało się usunąć wyszukiwarki"
}
}
}
@@ -4270,15 +4282,15 @@
"media": {
"request": {
"modal": {
- "title": "",
+ "title": "Żądanie \"{name}\"",
"table": {
"header": {
- "season": "",
- "episodes": ""
+ "season": "Sezon",
+ "episodes": "Odcinki"
}
},
"button": {
- "send": ""
+ "send": "Wyślij żądanie"
}
}
}
@@ -4288,89 +4300,89 @@
"certificate": {
"field": {
"hostname": {
- "label": ""
+ "label": "Nazwa hosta"
},
"subject": {
- "label": ""
+ "label": "Temat"
},
"issuer": {
- "label": ""
+ "label": "Wystawca"
},
"validFrom": {
- "label": ""
+ "label": "Ważny od"
},
"validTo": {
- "label": ""
+ "label": "Ważny do"
},
"serialNumber": {
- "label": ""
+ "label": "Numer seryjny"
},
"fingerprint": {
- "label": ""
+ "label": "Odcisk palca"
}
},
"page": {
"list": {
- "title": "",
- "description": "",
+ "title": "Zaufane certyfikaty",
+ "description": "Używane przez Homarr do pobierania danych z integracji.",
"noResults": {
- "title": ""
+ "title": "Brak certyfikatów"
},
"invalid": {
- "title": "",
- "description": ""
+ "title": "Nieprawidłowy certyfikat",
+ "description": "Nie udało się przetworzyć certyfikatu"
},
- "expires": "",
- "toHostnames": ""
+ "expires": "Wygasa {when}",
+ "toHostnames": "Zaufane nazwy hostów"
},
"hostnames": {
- "title": "",
- "description": "",
+ "title": "Zaufane nazwy hostów certyfikatów",
+ "description": "Niektóre certyfikaty nie zezwalają na użycie konkretnej domeny, z której Homarr wysyła żądania. Z tego powodu wszystkie zaufane hosty wraz z odciskami ich certyfikatów są używane, aby obejść te ograniczenia.",
"noResults": {
- "title": ""
+ "title": "Nie dodano jeszcze żadnych nazw hostów"
},
- "toCertificates": ""
+ "toCertificates": "Certyfikaty"
}
},
"action": {
"create": {
- "label": "",
+ "label": "Dodaj certyfikat",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Certyfikat dodany",
+ "message": "Certyfikat został dodany pomyślnie"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Nie udało się dodać certyfikatu",
+ "message": "Nie udało się dodać certyfikatu"
}
}
},
"remove": {
- "label": "",
- "confirm": "",
+ "label": "Usuń certyfikat",
+ "confirm": "Czy na pewno chcesz usunąć certyfikat?",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Certyfikat usunięty",
+ "message": "Certyfikat został pomyślnie usunięty"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Certyfikat nie został usunięty",
+ "message": "Nie udało się usunąć certyfikatu"
}
}
},
"removeHostname": {
- "label": "",
- "confirm": "",
+ "label": "Usuń zaufaną nazwę hosta",
+ "confirm": "Czy na pewno chcesz usunąć tą zaufaną nazwę hosta? Może to spowodować, że niektóre integracje przestaną działać.",
"notification": {
"success": {
- "title": "",
- "message": ""
+ "title": "Nazwa hosta usunięta",
+ "message": "Nazwa hosta została pomyślnie usunięta"
},
"error": {
- "title": "",
- "message": ""
+ "title": "Nazwa hosta nie została usunięta",
+ "message": "Nie udało się usunąć nazwy hosta"
}
}
}
@@ -4379,10 +4391,10 @@
"log": {
"level": {
"option": {
- "debug": "",
- "info": "",
- "warn": "",
- "error": ""
+ "debug": "Debugowanie",
+ "info": "Info",
+ "warn": "Ostrzeżenie",
+ "error": "Błąd"
}
}
}
diff --git a/packages/translation/src/lang/pt.json b/packages/translation/src/lang/pt.json
index 5e7dbe869..c6750dfc1 100644
--- a/packages/translation/src/lang/pt.json
+++ b/packages/translation/src/lang/pt.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": ""
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": ""
},
- "sessionCleanup": {
- "label": ""
- },
"updateChecker": {
"label": ""
},
diff --git a/packages/translation/src/lang/ro.json b/packages/translation/src/lang/ro.json
index 48ddab196..3d2ee7d4d 100644
--- a/packages/translation/src/lang/ro.json
+++ b/packages/translation/src/lang/ro.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": ""
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": ""
},
- "sessionCleanup": {
- "label": ""
- },
"updateChecker": {
"label": ""
},
diff --git a/packages/translation/src/lang/ru.json b/packages/translation/src/lang/ru.json
index b94faac04..0e6f2c4c0 100644
--- a/packages/translation/src/lang/ru.json
+++ b/packages/translation/src/lang/ru.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": "Максимальное количество записей"
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": "Данные DNS-фильтра"
},
- "sessionCleanup": {
- "label": "Очистка сессий"
- },
"updateChecker": {
"label": "Проверка обновлений"
},
diff --git a/packages/translation/src/lang/sk.json b/packages/translation/src/lang/sk.json
index e880c4f5b..34b9ca904 100644
--- a/packages/translation/src/lang/sk.json
+++ b/packages/translation/src/lang/sk.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": "Limit počtu príspevkov"
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": "Údaje o dierach DNS"
},
- "sessionCleanup": {
- "label": "Čistenie relácie"
- },
"updateChecker": {
"label": "Kontrola aktualizácií"
},
diff --git a/packages/translation/src/lang/sl.json b/packages/translation/src/lang/sl.json
index 401481f2a..1261a03d5 100644
--- a/packages/translation/src/lang/sl.json
+++ b/packages/translation/src/lang/sl.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": ""
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": ""
},
- "sessionCleanup": {
- "label": ""
- },
"updateChecker": {
"label": ""
},
diff --git a/packages/translation/src/lang/sv.json b/packages/translation/src/lang/sv.json
index 84438f133..db202e2a0 100644
--- a/packages/translation/src/lang/sv.json
+++ b/packages/translation/src/lang/sv.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": ""
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": ""
},
- "sessionCleanup": {
- "label": ""
- },
"updateChecker": {
"label": ""
},
diff --git a/packages/translation/src/lang/tr.json b/packages/translation/src/lang/tr.json
index faab76dc7..f223f06f4 100644
--- a/packages/translation/src/lang/tr.json
+++ b/packages/translation/src/lang/tr.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "API Anahtarı (Gizli Anahtar)",
"newLabel": "Yeni API Anahtarı (Gizli Anahtar)"
+ },
+ "githubAppId": {
+ "label": "Uygulama Kimliği",
+ "newLabel": "Yeni Uygulama Kimliği"
+ },
+ "githubInstallationId": {
+ "label": "Kurulum Kimliği",
+ "newLabel": "Yeni Kurulum Kimliği"
+ },
+ "privateKey": {
+ "label": "Özel Anahtar",
+ "newLabel": "Yeni özel anahtar"
}
}
},
@@ -1279,12 +1291,12 @@
}
},
"descriptionDisplayMode": {
- "label": "",
- "description": "",
+ "label": "Açıklama görüntüleme modu",
+ "description": "Uygulama açıklamasının nasıl görüntüleneceğini seçin",
"option": {
- "normal": "",
- "tooltip": "",
- "hidden": ""
+ "normal": "Widget içinde",
+ "tooltip": "Araç ipucu olarak",
+ "hidden": "Gizli"
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": "Gönderi sayısı sınırı"
+ },
+ "hideDescription": {
+ "label": "Açıklamayı gizle"
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": "DNS Çözümleyici Verileri"
},
- "sessionCleanup": {
- "label": "Oturum Temizleme"
- },
"updateChecker": {
"label": "Güncelleme denetleyicisi"
},
diff --git a/packages/translation/src/lang/uk.json b/packages/translation/src/lang/uk.json
index 6662be306..7f131069a 100644
--- a/packages/translation/src/lang/uk.json
+++ b/packages/translation/src/lang/uk.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": ""
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": ""
},
- "sessionCleanup": {
- "label": ""
- },
"updateChecker": {
"label": ""
},
diff --git a/packages/translation/src/lang/vi.json b/packages/translation/src/lang/vi.json
index 5e7769248..6883a4990 100644
--- a/packages/translation/src/lang/vi.json
+++ b/packages/translation/src/lang/vi.json
@@ -81,14 +81,14 @@
"subtitle": "",
"form": {
"name": {
- "label": "",
+ "label": "Tên nhóm",
"description": ""
}
}
},
"settings": {
"title": "Cài đặt",
- "subtitle": ""
+ "subtitle": "Cấu hình cài đặt máy chủ."
},
"finish": {
"title": "Hoàn tất cài đặt",
@@ -97,7 +97,7 @@
"action": {
"goToBoard": "",
"createBoard": "",
- "inviteUser": "",
+ "inviteUser": "Mời người dùng khác",
"docs": "Đọc tài liệu hướng dẫn"
}
}
@@ -173,7 +173,7 @@
},
"error": {
"title": "Đăng nhập không thành công",
- "message": ""
+ "message": "Đăng nhập thất bại"
}
},
"forgotPassword": {
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": ""
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": ""
},
- "sessionCleanup": {
- "label": ""
- },
"updateChecker": {
"label": ""
},
diff --git a/packages/translation/src/lang/zh.json b/packages/translation/src/lang/zh.json
index 473bb63b9..b2b0e1aa1 100644
--- a/packages/translation/src/lang/zh.json
+++ b/packages/translation/src/lang/zh.json
@@ -952,6 +952,18 @@
"opnsenseApiSecret": {
"label": "",
"newLabel": ""
+ },
+ "githubAppId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "githubInstallationId": {
+ "label": "",
+ "newLabel": ""
+ },
+ "privateKey": {
+ "label": "",
+ "newLabel": ""
}
}
},
@@ -2259,6 +2271,9 @@
},
"maximumAmountPosts": {
"label": "帖子數量限制"
+ },
+ "hideDescription": {
+ "label": ""
}
}
},
@@ -3240,9 +3255,6 @@
"dnsHole": {
"label": "DNS Hole 數據"
},
- "sessionCleanup": {
- "label": "會話清理"
- },
"updateChecker": {
"label": "更新檢查"
},
diff --git a/packages/ui/package.json b/packages/ui/package.json
index a39c5e0d8..a242e9376 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -30,12 +30,12 @@
"@homarr/log": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
- "@mantine/core": "^8.2.7",
- "@mantine/dates": "^8.2.7",
- "@mantine/hooks": "^8.2.7",
+ "@mantine/core": "^8.3.1",
+ "@mantine/dates": "^8.3.1",
+ "@mantine/hooks": "^8.3.1",
"@tabler/icons-react": "^3.34.1",
"mantine-react-table": "2.0.0-beta.9",
- "next": "15.5.0",
+ "next": "15.5.2",
"react": "19.1.1",
"react-dom": "19.1.1",
"svgson": "^5.3.1"
@@ -45,7 +45,7 @@
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/css-modules": "^1.0.5",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/validation/package.json b/packages/validation/package.json
index d326d4f20..0d0bfa8bd 100644
--- a/packages/validation/package.json
+++ b/packages/validation/package.json
@@ -25,13 +25,13 @@
"@homarr/definitions": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0",
"zod": "^4.1.5",
- "zod-form-data": "^3.0.0"
+ "zod-form-data": "^3.0.1"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/validation/src/board.ts b/packages/validation/src/board.ts
index b538a7076..2ce53a1eb 100644
--- a/packages/validation/src/board.ts
+++ b/packages/validation/src/board.ts
@@ -22,7 +22,7 @@ export const boardNameSchema = z
.string()
.min(1)
.max(255)
- .regex(/^[A-Za-z0-9-\\_]*$/);
+ .regex(/^[A-Za-z0-9-_]*$/);
export const boardColumnCountSchema = z.number().min(1).max(24);
export const boardByNameSchema = z.object({
diff --git a/packages/widgets/package.json b/packages/widgets/package.json
index cf4304891..4269f7734 100644
--- a/packages/widgets/package.json
+++ b/packages/widgets/package.json
@@ -48,9 +48,9 @@
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
- "@mantine/charts": "^8.2.7",
- "@mantine/core": "^8.2.7",
- "@mantine/hooks": "^8.2.7",
+ "@mantine/charts": "^8.3.1",
+ "@mantine/core": "^8.3.1",
+ "@mantine/hooks": "^8.3.1",
"@tabler/icons-react": "^3.34.1",
"@tiptap/extension-color": "2.26.1",
"@tiptap/extension-highlight": "2.26.1",
@@ -69,10 +69,10 @@
"@tiptap/react": "^2.26.1",
"@tiptap/starter-kit": "^2.26.1",
"clsx": "^2.1.1",
- "dayjs": "^1.11.13",
+ "dayjs": "^1.11.18",
"mantine-form-zod-resolver": "^1.3.0",
"mantine-react-table": "2.0.0-beta.9",
- "next": "15.5.0",
+ "next": "15.5.2",
"react": "19.1.1",
"react-dom": "19.1.1",
"react-markdown": "^10.1.0",
@@ -85,7 +85,7 @@
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/video.js": "^7.3.58",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/packages/widgets/src/health-monitoring/system-health.tsx b/packages/widgets/src/health-monitoring/system-health.tsx
index 2c4b5fe0b..7a5d4e9d6 100644
--- a/packages/widgets/src/health-monitoring/system-health.tsx
+++ b/packages/widgets/src/health-monitoring/system-health.tsx
@@ -151,21 +151,26 @@ export const SystemHealthMonitoring = ({
}>
{formatUptime(healthInfo.uptime, t)}
- }>
- {t("widget.healthMonitoring.popover.loadAverage")}
-
- }>
-
- {t("widget.healthMonitoring.popover.minute")} {healthInfo.loadAverage["1min"]}%
-
-
- {t("widget.healthMonitoring.popover.minutes", { count: "5" })} {healthInfo.loadAverage["5min"]}%
-
-
- {t("widget.healthMonitoring.popover.minutes", { count: "15" })}{" "}
- {healthInfo.loadAverage["15min"]}%
-
-
+ {healthInfo.loadAverage && (
+ <>
+ }>
+ {t("widget.healthMonitoring.popover.loadAverage")}
+
+ }>
+
+ {t("widget.healthMonitoring.popover.minute")} {healthInfo.loadAverage["1min"]}%
+
+
+ {t("widget.healthMonitoring.popover.minutes", { count: "5" })}{" "}
+ {healthInfo.loadAverage["5min"]}%
+
+
+ {t("widget.healthMonitoring.popover.minutes", { count: "15" })}{" "}
+ {healthInfo.loadAverage["15min"]}%
+
+
+ >
+ )}
diff --git a/packages/widgets/src/iframe/component.tsx b/packages/widgets/src/iframe/component.tsx
index 3f32742c7..ae8a2bcfa 100644
--- a/packages/widgets/src/iframe/component.tsx
+++ b/packages/widgets/src/iframe/component.tsx
@@ -27,6 +27,7 @@ export default function IFrameWidget({ options, isEditMode }: WidgetComponentPro
src={embedUrl}
title="widget iframe"
allow={allowedPermissions.join(" ")}
+ scrolling={options.allowScrolling ? "yes" : "no"}
>
{t("widget.iframe.error.noBrowerSupport")}
@@ -71,7 +72,9 @@ const UnsupportedProtocol = () => {
);
};
-const getAllowedPermissions = (permissions: Omit["options"], "embedUrl">) => {
+const getAllowedPermissions = (
+ permissions: Omit["options"], "embedUrl" | "allowScrolling">,
+) => {
return objectEntries(permissions)
.filter(([_key, value]) => value)
.map(([key]) => permissionMapping[key]);
@@ -84,6 +87,4 @@ const permissionMapping = {
allowGeolocation: "geolocation",
allowMicrophone: "microphone",
allowPayment: "payment",
- allowScrolling: "scrolling",
- allowTransparency: "transparency",
-} satisfies Record["options"], "embedUrl">, string>;
+} satisfies Record["options"], "embedUrl" | "allowScrolling">, string>;
diff --git a/packages/widgets/src/iframe/index.ts b/packages/widgets/src/iframe/index.ts
index 725e1b3fc..9e6cc06e1 100644
--- a/packages/widgets/src/iframe/index.ts
+++ b/packages/widgets/src/iframe/index.ts
@@ -12,7 +12,6 @@ export const { definition, componentLoader } = createWidgetDefinition("iframe",
allowScrolling: factory.switch({
defaultValue: true,
}),
- allowTransparency: factory.switch(),
allowPayment: factory.switch(),
allowAutoPlay: factory.switch(),
allowMicrophone: factory.switch(),
diff --git a/packages/widgets/src/notebook/notebook.tsx b/packages/widgets/src/notebook/notebook.tsx
index 28a8d27eb..af8062945 100644
--- a/packages/widgets/src/notebook/notebook.tsx
+++ b/packages/widgets/src/notebook/notebook.tsx
@@ -72,6 +72,7 @@ import "./notebook.css";
import { useSession } from "@homarr/auth/client";
import { constructBoardPermissions } from "@homarr/auth/shared";
import { useRequiredBoard } from "@homarr/boards/context";
+import { useConfirmModal } from "@homarr/modals";
const iconProps = {
size: 30,
@@ -240,9 +241,20 @@ export function Notebook({ options, setOptions, isEditMode, boardId, itemId }: W
return false;
}, [editor]);
+ const { openConfirmModal } = useConfirmModal();
const handleEditCancel = useCallback(() => {
- setIsEditing(handleEditCancelCallback);
- }, [setIsEditing, handleEditCancelCallback]);
+ openConfirmModal({
+ title: t("widget.notebook.dismiss.title"),
+ children: t("widget.notebook.dismiss.message"),
+ labels: {
+ confirm: t("widget.notebook.dismiss.action.discard"),
+ cancel: t("widget.notebook.dismiss.action.keepEditing"),
+ },
+ onConfirm: () => {
+ setIsEditing(handleEditCancelCallback);
+ },
+ });
+ }, [setIsEditing, handleEditCancelCallback, openConfirmModal, t]);
const handleEditToggle = useCallback(() => {
setIsEditing(handleEditToggleCallback);
diff --git a/packages/widgets/src/rssFeed/component.tsx b/packages/widgets/src/rssFeed/component.tsx
index 7b3b0a5e9..ee781fb34 100644
--- a/packages/widgets/src/rssFeed/component.tsx
+++ b/packages/widgets/src/rssFeed/component.tsx
@@ -49,7 +49,7 @@ export default function RssFeed({ options }: WidgetComponentProps<"rssFeed">) {
{feedEntry.title}
- {feedEntry.description && (
+ {!options.hideDescription && feedEntry.description && (
import("./component"));
diff --git a/packages/widgets/src/system-resources/component.module.css b/packages/widgets/src/system-resources/component.module.css
deleted file mode 100644
index da1a998ed..000000000
--- a/packages/widgets/src/system-resources/component.module.css
+++ /dev/null
@@ -1,14 +0,0 @@
-.grid {
- display: grid;
- grid-template-rows: repeat(3, 1fr);
- grid-template-columns: repeat(2, 1fr);
- gap: 8px;
- padding: 8px;
-
- height: 100%;
-}
-
-.colSpanWide {
- grid-column-start: 1;
- grid-column-end: 3;
-}
diff --git a/packages/widgets/src/system-resources/component.tsx b/packages/widgets/src/system-resources/component.tsx
index 501eddc65..648f91da6 100644
--- a/packages/widgets/src/system-resources/component.tsx
+++ b/packages/widgets/src/system-resources/component.tsx
@@ -1,6 +1,7 @@
"use client";
import { useState } from "react";
+import { Box, Group, Stack } from "@mantine/core";
import { useElementSize } from "@mantine/hooks";
import { clientApi } from "@homarr/api/client";
@@ -10,11 +11,10 @@ import { CombinedNetworkTrafficChart } from "./chart/combined-network-traffic";
import { SystemResourceCPUChart } from "./chart/cpu-chart";
import { SystemResourceMemoryChart } from "./chart/memory-chart";
import { NetworkTrafficChart } from "./chart/network-traffic";
-import classes from "./component.module.css";
const MAX_QUEUE_SIZE = 15;
-export default function SystemResources({ integrationIds }: WidgetComponentProps<"systemResources">) {
+export default function SystemResources({ integrationIds, options }: WidgetComponentProps<"systemResources">) {
const { ref, width } = useElementSize();
const [data] = clientApi.widget.healthMonitoring.getSystemHealthStatus.useSuspenseQuery({
@@ -49,34 +49,40 @@ export default function SystemResources({ integrationIds }: WidgetComponentProps
},
);
- const showNetwork = items.length === 0 || items.every((item) => item.network !== null);
+ const showNetwork =
+ items.length === 0 || (items.every((item) => item.network !== null) && options.visibleCharts.includes("network"));
+ const rowHeight = `calc((100% - ${(options.visibleCharts.length - 1) * 8}px) / ${options.visibleCharts.length})`;
return (
-
-
- item.cpu)} />
-
-
- item.memory)}
- totalCapacityInBytes={memoryCapacityInBytes}
- />
-
+
+ {options.visibleCharts.includes("cpu") && (
+
+ item.cpu)} />
+
+ )}
+ {options.visibleCharts.includes("memory") && (
+
+ item.memory)}
+ totalCapacityInBytes={memoryCapacityInBytes}
+ />
+
+ )}
{showNetwork &&
- (width > 200 ? (
- <>
+ (width > 256 ? (
+
{/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */}
item.network!.down)} isUp={false} />
{/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */}
item.network!.up)} isUp />
- >
+
) : (
-
+
{/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */}
item.network!)} />
-
+
))}
-
+
);
}
diff --git a/packages/widgets/src/system-resources/index.ts b/packages/widgets/src/system-resources/index.ts
index 664bc0247..f6115dce2 100644
--- a/packages/widgets/src/system-resources/index.ts
+++ b/packages/widgets/src/system-resources/index.ts
@@ -5,8 +5,17 @@ import { optionsBuilder } from "../options";
export const { definition, componentLoader } = createWidgetDefinition("systemResources", {
icon: IconGraphFilled,
- supportedIntegrations: ["dashDot", "openmediavault"],
+ supportedIntegrations: ["dashDot", "openmediavault", "truenas"],
createOptions() {
- return optionsBuilder.from(() => ({}));
+ return optionsBuilder.from((factory) => ({
+ visibleCharts: factory.multiSelect({
+ options: (["cpu", "memory", "network"] as const).map((key) => ({
+ value: key,
+ label: (t) => t(`widget.systemResources.option.visibleCharts.option.${key}`),
+ })),
+ defaultValue: ["cpu", "memory", "network"],
+ withDescription: true,
+ }),
+ }));
},
}).withDynamicImport(() => import("./component"));
diff --git a/packages/widgets/src/video/component.tsx b/packages/widgets/src/video/component.tsx
index 3527246db..68038744e 100644
--- a/packages/widgets/src/video/component.tsx
+++ b/packages/widgets/src/video/component.tsx
@@ -1,9 +1,8 @@
"use client";
import { useEffect, useRef } from "react";
-import { Anchor, Center, Group, Stack, Title } from "@mantine/core";
+import { Anchor, Box, Center, Group, Stack, Title } from "@mantine/core";
import { IconBrandYoutube, IconDeviceCctvOff } from "@tabler/icons-react";
-import combineClasses from "clsx";
import videojs from "video.js";
import { useI18n } from "@homarr/translation/client";
@@ -13,6 +12,8 @@ import classes from "./component.module.css";
import "video.js/dist/video-js.css";
+import type Player from "video.js/dist/types/player";
+
import { createDocumentationLink } from "@homarr/definitions";
export default function VideoWidget({ options }: WidgetComponentProps<"video">) {
@@ -55,32 +56,66 @@ const ForYoutubeUseIframe = () => {
};
const Feed = ({ options }: Pick, "options">) => {
- const videoRef = useRef(null);
+ const videoRef = useRef(null);
+ const playerRef = useRef(null);
useEffect(() => {
- if (!videoRef.current) {
- return;
+ if (playerRef.current) return;
+ const videoElement = document.createElement("video-js");
+ videoElement.classList.add("vjs-big-play-centered");
+ if (classes.video) {
+ videoElement.classList.add(classes.video);
}
+ videoRef.current?.appendChild(videoElement);
- // Initialize Video.js player if it's not already initialized
- if (!("player" in videoRef.current)) {
- videojs(
- videoRef.current,
+ playerRef.current = videojs(videoElement, {
+ autoplay: options.hasAutoPlay,
+ muted: options.isMuted,
+ controls: options.hasControls,
+ sources: [
{
- autoplay: options.hasAutoPlay,
- muted: options.isMuted,
- controls: options.hasControls,
+ src: options.feedUrl,
},
- () => undefined,
- );
- }
- }, [options.hasAutoPlay, options.hasControls, options.isMuted, videoRef]);
+ ],
+ });
+ // All other properties are updated with other useEffect
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [videoRef]);
+
+ useEffect(() => {
+ if (!playerRef.current) return;
+ playerRef.current.src(options.feedUrl);
+ }, [options.feedUrl]);
+
+ useEffect(() => {
+ if (!playerRef.current) return;
+ playerRef.current.autoplay(options.hasAutoPlay);
+ }, [options.hasAutoPlay]);
+
+ useEffect(() => {
+ if (!playerRef.current) return;
+ playerRef.current.muted(options.isMuted);
+ }, [options.isMuted]);
+
+ useEffect(() => {
+ if (!playerRef.current) return;
+ playerRef.current.controls(options.hasControls);
+ }, [options.hasControls]);
+
+ useEffect(() => {
+ const player = playerRef.current;
+
+ return () => {
+ if (player && !player.isDisposed()) {
+ player.dispose();
+ playerRef.current = null;
+ }
+ };
+ }, [playerRef]);
return (
-
+
);
};
diff --git a/packages/widgets/src/widget-integration-select.tsx b/packages/widgets/src/widget-integration-select.tsx
index 1667e3d7a..8567b39d3 100644
--- a/packages/widgets/src/widget-integration-select.tsx
+++ b/packages/widgets/src/widget-integration-select.tsx
@@ -100,7 +100,7 @@ export const WidgetIntegrationSelect = ({
});
return (
-
+
=7.28.3'
- '@babel/runtime@<7.26.10': '>=7.28.3'
- axios@>=1.0.0 <1.8.2: '>=1.11.0'
+ '@babel/helpers@<7.26.10': '>=7.28.4'
+ '@babel/runtime@<7.26.10': '>=7.28.4'
+ axios@>=1.0.0 <1.8.2: '>=1.12.1'
brace-expansion@>=2.0.0 <=2.0.1: '>=4.0.1'
brace-expansion@>=1.0.0 <=1.1.11: '>=4.0.1'
esbuild@<=0.24.2: '>=0.25.9'
form-data@>=4.0.0 <4.0.4: '>=4.0.4'
- hono@<4.6.5: '>=4.9.5'
+ hono@<4.6.5: '>=4.9.7'
linkifyjs@<4.3.2: '>=4.3.2'
nanoid@>=4.0.0 <5.0.9: '>=5.1.5'
prismjs@<1.30.0: '>=1.30.0'
proxmox-api>undici: 7.15.0
- rollup@>=4.0.0 <4.22.4: '>=4.49.0'
+ rollup@>=4.0.0 <4.22.4: '>=4.50.1'
sha.js@<=2.4.11: '>=2.4.12'
tar-fs@>=3.0.0 <3.0.9: '>=3.1.0'
tar-fs@>=2.0.0 <2.1.3: '>=3.1.0'
tmp@<=0.2.3: '>=0.2.5'
- vite@>=5.0.0 <=5.4.18: '>=7.1.3'
+ vite@>=5.0.0 <=5.4.18: '>=7.1.5'
patchedDependencies:
'@types/node-unifi':
@@ -41,31 +41,31 @@ importers:
version: link:tooling/prettier
'@semantic-release/changelog':
specifier: ^6.0.3
- version: 6.0.3(semantic-release@24.2.7(typescript@5.9.2))
+ version: 6.0.3(semantic-release@24.2.8(typescript@5.9.2))
'@semantic-release/commit-analyzer':
specifier: ^13.0.1
- version: 13.0.1(semantic-release@24.2.7(typescript@5.9.2))
+ version: 13.0.1(semantic-release@24.2.8(typescript@5.9.2))
'@semantic-release/git':
specifier: ^10.0.1
- version: 10.0.1(semantic-release@24.2.7(typescript@5.9.2))
+ version: 10.0.1(semantic-release@24.2.8(typescript@5.9.2))
'@semantic-release/github':
- specifier: ^11.0.4
- version: 11.0.4(semantic-release@24.2.7(typescript@5.9.2))
+ specifier: ^11.0.5
+ version: 11.0.5(semantic-release@24.2.8(typescript@5.9.2))
'@semantic-release/npm':
specifier: ^12.0.2
- version: 12.0.2(semantic-release@24.2.7(typescript@5.9.2))
+ version: 12.0.2(semantic-release@24.2.8(typescript@5.9.2))
'@semantic-release/release-notes-generator':
- specifier: ^14.0.3
- version: 14.0.3(semantic-release@24.2.7(typescript@5.9.2))
+ specifier: ^14.1.0
+ version: 14.1.0(semantic-release@24.2.8(typescript@5.9.2))
'@testcontainers/redis':
specifier: ^11.5.1
version: 11.5.1
'@turbo/gen':
specifier: ^2.5.6
- version: 2.5.6(@types/node@22.18.0)(typescript@5.9.2)
+ version: 2.5.6(@types/node@22.18.1)(typescript@5.9.2)
'@vitejs/plugin-react':
- specifier: ^5.0.1
- version: 5.0.1(vite@7.1.3(@types/node@22.18.0)(sass@1.91.0)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1))
+ specifier: ^5.0.2
+ version: 5.0.2(vite@7.1.5(@types/node@22.18.1)(sass@1.92.1)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1))
'@vitest/coverage-v8':
specifier: ^3.2.4
version: 3.2.4(vitest@3.2.4)
@@ -85,8 +85,8 @@ importers:
specifier: ^3.6.2
version: 3.6.2
semantic-release:
- specifier: ^24.2.7
- version: 24.2.7(typescript@5.9.2)
+ specifier: ^24.2.8
+ version: 24.2.8(typescript@5.9.2)
testcontainers:
specifier: ^11.5.1
version: 11.5.1
@@ -98,10 +98,10 @@ importers:
version: 5.9.2
vite-tsconfig-paths:
specifier: ^5.1.4
- version: 5.1.4(typescript@5.9.2)(vite@7.1.3(@types/node@22.18.0)(sass@1.91.0)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1))
+ version: 5.1.4(typescript@5.9.2)(vite@7.1.5(@types/node@22.18.1)(sass@1.92.1)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1))
vitest:
specifier: ^3.2.4
- version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.0)(@vitest/ui@3.2.4)(jsdom@26.1.0)(sass@1.91.0)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(@vitest/ui@3.2.4)(jsdom@26.1.0)(sass@1.92.1)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1)
apps/nextjs:
dependencies:
@@ -211,23 +211,23 @@ importers:
specifier: workspace:^0.1.0
version: link:../../packages/widgets
'@mantine/colors-generator':
- specifier: ^8.2.7
- version: 8.2.7(chroma-js@3.1.2)
+ specifier: ^8.3.1
+ version: 8.3.1(chroma-js@3.1.2)
'@mantine/core':
- specifier: ^8.2.7
- version: 8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@mantine/dropzone':
- specifier: ^8.2.7
- version: 8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@mantine/hooks':
- specifier: ^8.2.7
- version: 8.2.7(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(react@19.1.1)
'@mantine/modals':
- specifier: ^8.2.7
- version: 8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@mantine/tiptap':
- specifier: ^8.2.7
- version: 8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(@tiptap/extension-link@2.26.1(@tiptap/core@2.26.1(@tiptap/pm@2.26.1))(@tiptap/pm@2.26.1))(@tiptap/react@2.26.1(@tiptap/core@2.26.1(@tiptap/pm@2.26.1))(@tiptap/pm@2.26.1)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(@tiptap/extension-link@2.26.1(@tiptap/core@2.26.1(@tiptap/pm@2.26.1))(@tiptap/pm@2.26.1))(@tiptap/react@2.26.1(@tiptap/core@2.26.1(@tiptap/pm@2.26.1))(@tiptap/pm@2.26.1)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@million/lint':
specifier: 1.0.14
version: 1.0.14(webpack-sources@3.2.3)
@@ -235,26 +235,26 @@ importers:
specifier: ^3.34.1
version: 3.34.1(react@19.1.1)
'@tanstack/react-query':
- specifier: ^5.85.5
- version: 5.85.5(react@19.1.1)
+ specifier: ^5.87.1
+ version: 5.87.1(react@19.1.1)
'@tanstack/react-query-devtools':
- specifier: ^5.85.5
- version: 5.85.5(@tanstack/react-query@5.85.5(react@19.1.1))(react@19.1.1)
+ specifier: ^5.87.1
+ version: 5.87.1(@tanstack/react-query@5.87.1(react@19.1.1))(react@19.1.1)
'@tanstack/react-query-next-experimental':
- specifier: ^5.85.5
- version: 5.85.5(@tanstack/react-query@5.85.5(react@19.1.1))(next@15.5.0(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0))(react@19.1.1)
+ specifier: ^5.87.1
+ version: 5.87.1(@tanstack/react-query@5.87.1(react@19.1.1))(next@15.5.2(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1))(react@19.1.1)
'@trpc/client':
- specifier: ^11.5.0
- version: 11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2)
+ specifier: ^11.5.1
+ version: 11.5.1(@trpc/server@11.5.1(typescript@5.9.2))(typescript@5.9.2)
'@trpc/next':
- specifier: ^11.5.0
- version: 11.5.0(@tanstack/react-query@5.85.5(react@19.1.1))(@trpc/client@11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2))(@trpc/react-query@11.5.0(@tanstack/react-query@5.85.5(react@19.1.1))(@trpc/client@11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.5.0(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(@trpc/server@11.5.0(typescript@5.9.2))(next@15.5.0(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
+ specifier: ^11.5.1
+ version: 11.5.1(@tanstack/react-query@5.87.1(react@19.1.1))(@trpc/client@11.5.1(@trpc/server@11.5.1(typescript@5.9.2))(typescript@5.9.2))(@trpc/react-query@11.5.1(@tanstack/react-query@5.87.1(react@19.1.1))(@trpc/client@11.5.1(@trpc/server@11.5.1(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.5.1(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(@trpc/server@11.5.1(typescript@5.9.2))(next@15.5.2(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
'@trpc/react-query':
- specifier: ^11.5.0
- version: 11.5.0(@tanstack/react-query@5.85.5(react@19.1.1))(@trpc/client@11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.5.0(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
+ specifier: ^11.5.1
+ version: 11.5.1(@tanstack/react-query@5.87.1(react@19.1.1))(@trpc/client@11.5.1(@trpc/server@11.5.1(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.5.1(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
'@trpc/server':
- specifier: ^11.5.0
- version: 11.5.0(typescript@5.9.2)
+ specifier: ^11.5.1
+ version: 11.5.1(typescript@5.9.2)
'@xterm/addon-canvas':
specifier: ^0.7.0
version: 0.7.0(@xterm/xterm@5.5.0)
@@ -271,11 +271,11 @@ importers:
specifier: ^2.1.1
version: 2.1.1
dayjs:
- specifier: ^1.11.13
- version: 1.11.13
+ specifier: ^1.11.18
+ version: 1.11.18
dotenv:
- specifier: ^17.2.1
- version: 17.2.1
+ specifier: ^17.2.2
+ version: 17.2.2
flag-icons:
specifier: ^7.5.0
version: 7.5.0
@@ -283,14 +283,14 @@ importers:
specifier: ^11.0.3
version: 11.0.3
jotai:
- specifier: ^2.13.1
- version: 2.13.1(@babel/core@7.26.0)(@babel/template@7.27.2)(@types/react@19.1.12)(react@19.1.1)
+ specifier: ^2.14.0
+ version: 2.14.0(@babel/core@7.26.0)(@babel/template@7.27.2)(@types/react@19.1.12)(react@19.1.1)
mantine-react-table:
specifier: 2.0.0-beta.9
- version: 2.0.0-beta.9(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/dates@8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(@tabler/icons-react@3.34.1(react@19.1.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ version: 2.0.0-beta.9(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/dates@8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(dayjs@1.11.18)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(@tabler/icons-react@3.34.1(react@19.1.1))(clsx@2.1.1)(dayjs@1.11.18)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
next:
- specifier: 15.5.0
- version: 15.5.0(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0)
+ specifier: 15.5.2
+ version: 15.5.2(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1)
postcss-preset-mantine:
specifier: ^1.18.0
version: 1.18.0(postcss@8.5.6)
@@ -310,14 +310,14 @@ importers:
specifier: ^0.14.1
version: 0.14.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
sass:
- specifier: ^1.91.0
- version: 1.91.0
+ specifier: ^1.92.1
+ version: 1.92.1
superjson:
specifier: 2.2.2
version: 2.2.2
swagger-ui-react:
- specifier: ^5.27.1
- version: 5.27.1(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^5.28.1
+ version: 5.28.1(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
use-deep-compare-effect:
specifier: ^1.8.1
version: 1.8.1(react@19.1.1)
@@ -338,8 +338,8 @@ importers:
specifier: 3.1.1
version: 3.1.1
'@types/node':
- specifier: ^22.18.0
- version: 22.18.0
+ specifier: ^22.18.1
+ version: 22.18.1
'@types/prismjs':
specifier: ^1.26.5
version: 1.26.5
@@ -356,8 +356,8 @@ importers:
specifier: ^9.2.1
version: 9.2.1
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
node-loader:
specifier: ^2.1.0
version: 2.1.0(webpack@5.94.0)
@@ -373,6 +373,9 @@ importers:
'@homarr/analytics':
specifier: workspace:^0.1.0
version: link:../../packages/analytics
+ '@homarr/auth':
+ specifier: workspace:^0.1.0
+ version: link:../../packages/auth
'@homarr/common':
specifier: workspace:^0.1.0
version: link:../../packages/common
@@ -406,6 +409,9 @@ importers:
'@homarr/redis':
specifier: workspace:^0.1.0
version: link:../../packages/redis
+ '@homarr/request-handler':
+ specifier: workspace:^0.1.0
+ version: link:../../packages/request-handler
'@homarr/server-settings':
specifier: workspace:^0.1.0
version: link:../../packages/server-settings
@@ -416,14 +422,14 @@ importers:
specifier: workspace:^0.1.0
version: link:../../packages/widgets
dayjs:
- specifier: ^1.11.13
- version: 1.11.13
+ specifier: ^1.11.18
+ version: 1.11.18
dotenv:
- specifier: ^17.2.1
- version: 17.2.1
+ specifier: ^17.2.2
+ version: 17.2.2
fastify:
- specifier: ^5.5.0
- version: 5.5.0
+ specifier: ^5.6.0
+ version: 5.6.0
superjson:
specifier: 2.2.2
version: 2.2.2
@@ -441,8 +447,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
'@types/node':
- specifier: ^22.18.0
- version: 22.18.0
+ specifier: ^22.18.1
+ version: 22.18.1
dotenv-cli:
specifier: ^10.0.0
version: 10.0.0
@@ -450,14 +456,14 @@ importers:
specifier: ^0.25.9
version: 0.25.9
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
prettier:
specifier: ^3.6.2
version: 3.6.2
tsx:
- specifier: 4.20.5
- version: 4.20.5
+ specifier: 4.20.4
+ version: 4.20.4
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -489,11 +495,11 @@ importers:
specifier: workspace:^0.1.0
version: link:../../packages/validation
dotenv:
- specifier: ^17.2.1
- version: 17.2.1
+ specifier: ^17.2.2
+ version: 17.2.2
tsx:
- specifier: 4.20.5
- version: 4.20.5
+ specifier: 4.20.4
+ version: 4.20.4
ws:
specifier: ^8.18.3
version: 8.18.3
@@ -514,8 +520,8 @@ importers:
specifier: ^0.25.9
version: 0.25.9
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
prettier:
specifier: ^3.6.2
version: 3.6.2
@@ -551,8 +557,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -623,26 +629,26 @@ importers:
specifier: ^1.3.0
version: 1.3.0
'@tanstack/react-query':
- specifier: ^5.85.5
- version: 5.85.5(react@19.1.1)
+ specifier: ^5.87.1
+ version: 5.87.1(react@19.1.1)
'@trpc/client':
- specifier: ^11.5.0
- version: 11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2)
+ specifier: ^11.5.1
+ version: 11.5.1(@trpc/server@11.5.1(typescript@5.9.2))(typescript@5.9.2)
'@trpc/react-query':
- specifier: ^11.5.0
- version: 11.5.0(@tanstack/react-query@5.85.5(react@19.1.1))(@trpc/client@11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.5.0(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
+ specifier: ^11.5.1
+ version: 11.5.1(@tanstack/react-query@5.87.1(react@19.1.1))(@trpc/client@11.5.1(@trpc/server@11.5.1(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.5.1(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
'@trpc/server':
- specifier: ^11.5.0
- version: 11.5.0(typescript@5.9.2)
+ specifier: ^11.5.1
+ version: 11.5.1(typescript@5.9.2)
'@trpc/tanstack-react-query':
- specifier: ^11.5.0
- version: 11.5.0(@tanstack/react-query@5.85.5(react@19.1.1))(@trpc/client@11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.5.0(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
+ specifier: ^11.5.1
+ version: 11.5.1(@tanstack/react-query@5.87.1(react@19.1.1))(@trpc/client@11.5.1(@trpc/server@11.5.1(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.5.1(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
lodash.clonedeep:
specifier: ^4.5.0
version: 4.5.0
next:
- specifier: 15.5.0
- version: 15.5.0(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0)
+ specifier: 15.5.2
+ version: 15.5.2(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1)
react:
specifier: 19.1.1
version: 19.1.1
@@ -654,7 +660,7 @@ importers:
version: 2.2.2
trpc-to-openapi:
specifier: ^3.0.1
- version: 3.0.1(patch_hash=2ca3c16af0fcca0c736697ad4fe553a14f794524fa9ce0d5c3e8ee4aea76090c)(@trpc/server@11.5.0(typescript@5.9.2))(zod-openapi@5.3.0(zod@4.1.5))(zod@4.1.5)
+ version: 3.0.1(patch_hash=2ca3c16af0fcca0c736697ad4fe553a14f794524fa9ce0d5c3e8ee4aea76090c)(@trpc/server@11.5.1(typescript@5.9.2))(zod-openapi@5.3.0(zod@4.1.5))(zod@4.1.5)
zod:
specifier: ^4.1.5
version: 4.1.5
@@ -669,8 +675,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
prettier:
specifier: ^3.6.2
version: 3.6.2
@@ -717,11 +723,11 @@ importers:
specifier: 8.0.9
version: 8.0.9
next:
- specifier: 15.5.0
- version: 15.5.0(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0)
+ specifier: 15.5.2
+ version: 15.5.2(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1)
next-auth:
specifier: 5.0.0-beta.29
- version: 5.0.0-beta.29(next@15.5.0(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0))(react@19.1.1)
+ version: 5.0.0-beta.29(next@15.5.2(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1))(react@19.1.1)
react:
specifier: 19.1.1
version: 19.1.1
@@ -748,8 +754,8 @@ importers:
specifier: 0.9.1
version: 0.9.1
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
prettier:
specifier: ^3.6.2
version: 3.6.2
@@ -779,8 +785,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -807,8 +813,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -831,8 +837,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../validation
dotenv:
- specifier: ^17.2.1
- version: 17.2.1
+ specifier: ^17.2.2
+ version: 17.2.2
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -847,8 +853,8 @@ importers:
specifier: ^0.25.9
version: 0.25.9
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -865,11 +871,17 @@ importers:
specifier: ^2.2.2
version: 2.2.2
dayjs:
- specifier: ^1.11.13
- version: 1.11.13
+ specifier: ^1.11.18
+ version: 1.11.18
+ dns-caching:
+ specifier: ^0.2.5
+ version: 0.2.5
next:
- specifier: 15.5.0
- version: 15.5.0(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0)
+ specifier: 15.5.2
+ version: 15.5.2(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1)
+ octokit:
+ specifier: ^5.0.3
+ version: 5.0.3
react:
specifier: 19.1.1
version: 19.1.1
@@ -896,8 +908,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -924,8 +936,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -945,17 +957,17 @@ importers:
specifier: workspace:^0.1.0
version: link:../log
'@tanstack/react-query':
- specifier: ^5.85.5
- version: 5.85.5(react@19.1.1)
+ specifier: ^5.87.1
+ version: 5.87.1(react@19.1.1)
'@trpc/client':
- specifier: ^11.5.0
- version: 11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2)
+ specifier: ^11.5.1
+ version: 11.5.1(@trpc/server@11.5.1(typescript@5.9.2))(typescript@5.9.2)
'@trpc/server':
- specifier: ^11.5.0
- version: 11.5.0(typescript@5.9.2)
+ specifier: ^11.5.1
+ version: 11.5.1(typescript@5.9.2)
'@trpc/tanstack-react-query':
- specifier: ^11.5.0
- version: 11.5.0(@tanstack/react-query@5.85.5(react@19.1.1))(@trpc/client@11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.5.0(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
+ specifier: ^11.5.1
+ version: 11.5.1(@tanstack/react-query@5.87.1(react@19.1.1))(@trpc/client@11.5.1(@trpc/server@11.5.1(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.5.1(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
node-cron:
specifier: ^4.2.1
version: 4.2.1
@@ -982,8 +994,8 @@ importers:
specifier: 19.1.12
version: 19.1.12
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1004,8 +1016,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1074,8 +1086,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1105,8 +1117,8 @@ importers:
specifier: ^3.0.11
version: 3.0.11
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1132,8 +1144,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../server-settings
'@mantine/core':
- specifier: ^8.2.7
- version: 8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@paralleldrive/cuid2':
specifier: ^2.2.2
version: 2.2.2
@@ -1147,20 +1159,20 @@ importers:
specifier: ^12.2.0
version: 12.2.0
dotenv:
- specifier: ^17.2.1
- version: 17.2.1
+ specifier: ^17.2.2
+ version: 17.2.2
drizzle-kit:
specifier: ^0.31.4
version: 0.31.4
drizzle-orm:
specifier: ^0.44.5
- version: 0.44.5(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.2.0)(gel@2.0.0)(mysql2@3.14.3)(pg@8.16.3)
+ version: 0.44.5(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.2.0)(gel@2.0.0)(mysql2@3.14.5)(pg@8.16.3)
drizzle-zod:
specifier: ^0.8.3
- version: 0.8.3(drizzle-orm@0.44.5(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.2.0)(gel@2.0.0)(mysql2@3.14.3)(pg@8.16.3))(zod@4.1.5)
+ version: 0.8.3(drizzle-orm@0.44.5(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.2.0)(gel@2.0.0)(mysql2@3.14.5)(pg@8.16.3))(zod@4.1.5)
mysql2:
- specifier: 3.14.3
- version: 3.14.3
+ specifier: 3.14.5
+ version: 3.14.5
pg:
specifier: ^8.16.3
version: 8.16.3
@@ -1190,14 +1202,14 @@ importers:
specifier: ^0.25.9
version: 0.25.9
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
prettier:
specifier: ^3.6.2
version: 3.6.2
tsx:
- specifier: 4.20.5
- version: 4.20.5
+ specifier: 4.20.4
+ version: 4.20.4
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1224,11 +1236,11 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
tsx:
- specifier: 4.20.5
- version: 4.20.5
+ specifier: 4.20.4
+ version: 4.20.4
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1242,8 +1254,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../core
dockerode:
- specifier: ^4.0.7
- version: 4.0.7
+ specifier: ^4.0.8
+ version: 4.0.8
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -1258,8 +1270,8 @@ importers:
specifier: ^3.3.43
version: 3.3.43
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1276,11 +1288,11 @@ importers:
specifier: workspace:^0.1.0
version: link:../validation
'@mantine/form':
- specifier: ^8.2.7
- version: 8.2.7(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(react@19.1.1)
mantine-form-zod-resolver:
specifier: ^1.3.0
- version: 1.3.0(@mantine/form@8.2.7(react@19.1.1))(zod@4.1.5)
+ version: 1.3.0(@mantine/form@8.3.1(react@19.1.1))(zod@4.1.5)
zod:
specifier: ^4.1.5
version: 4.1.5
@@ -1295,8 +1307,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1325,8 +1337,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../validation
'@mantine/core':
- specifier: ^8.2.7
- version: 8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
react:
specifier: 19.1.1
version: 19.1.1
@@ -1344,8 +1356,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1372,8 +1384,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1409,8 +1421,8 @@ importers:
specifier: 6.0.0
version: 6.0.0
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1418,17 +1430,17 @@ importers:
packages/integrations:
dependencies:
'@ctrl/deluge':
- specifier: ^7.1.1
- version: 7.1.1
- '@ctrl/qbittorrent':
- specifier: ^9.6.0
- version: 9.6.0
- '@ctrl/transmission':
specifier: ^7.2.0
version: 7.2.0
+ '@ctrl/qbittorrent':
+ specifier: ^9.7.0
+ version: 9.7.0
+ '@ctrl/transmission':
+ specifier: ^7.3.0
+ version: 7.3.0
'@gitbeaker/rest':
- specifier: ^43.4.0
- version: 43.4.0
+ specifier: ^43.5.0
+ version: 43.5.0
'@homarr/certificates':
specifier: workspace:^0.1.0
version: link:../certificates
@@ -1461,7 +1473,10 @@ importers:
version: link:../validation
'@jellyfin/sdk':
specifier: ^0.11.0
- version: 0.11.0(axios@1.11.0)
+ version: 0.11.0(axios@1.12.1)
+ '@octokit/auth-app':
+ specifier: ^8.1.0
+ version: 8.1.0
maria2:
specifier: ^0.4.1
version: 0.4.1
@@ -1503,8 +1518,8 @@ importers:
specifier: ^0.4.14
version: 0.4.14
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1534,8 +1549,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1549,11 +1564,11 @@ importers:
specifier: workspace:^0.1.0
version: link:../ui
'@mantine/core':
- specifier: ^8.2.7
- version: 8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@mantine/hooks':
- specifier: ^8.2.7
- version: 8.2.7(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(react@19.1.1)
react:
specifier: 19.1.1
version: 19.1.1
@@ -1568,8 +1583,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1610,17 +1625,17 @@ importers:
specifier: workspace:^0.1.0
version: link:../validation
'@mantine/core':
- specifier: ^8.2.7
- version: 8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@tabler/icons-react':
specifier: ^3.34.1
version: 3.34.1(react@19.1.1)
dayjs:
- specifier: ^1.11.13
- version: 1.11.13
+ specifier: ^1.11.18
+ version: 1.11.18
next:
- specifier: 15.5.0
- version: 15.5.0(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0)
+ specifier: 15.5.2
+ version: 15.5.2(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1)
react:
specifier: 19.1.1
version: 19.1.1
@@ -1641,8 +1656,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1653,8 +1668,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../ui
'@mantine/notifications':
- specifier: ^8.2.7
- version: 8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@tabler/icons-react':
specifier: ^3.34.1
version: 3.34.1(react@19.1.1)
@@ -1669,8 +1684,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1711,17 +1726,17 @@ importers:
specifier: workspace:^0.1.0
version: link:../validation
'@mantine/core':
- specifier: ^8.2.7
- version: 8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@mantine/hooks':
- specifier: ^8.2.7
- version: 8.2.7(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(react@19.1.1)
adm-zip:
specifier: 0.5.16
version: 0.5.16
next:
- specifier: 15.5.0
- version: 15.5.0(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0)
+ specifier: 15.5.2
+ version: 15.5.2(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1)
react:
specifier: 19.1.1
version: 19.1.1
@@ -1735,8 +1750,8 @@ importers:
specifier: ^4.1.5
version: 4.1.5
zod-form-data:
- specifier: ^3.0.0
- version: 3.0.0(zod@4.1.5)
+ specifier: ^3.0.1
+ version: 3.0.1(zod@4.1.5)
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -1751,8 +1766,8 @@ importers:
specifier: 0.5.7
version: 0.5.7
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1776,8 +1791,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1804,8 +1819,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1844,8 +1859,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1853,8 +1868,8 @@ importers:
packages/request-handler:
dependencies:
'@extractus/feed-extractor':
- specifier: 7.1.6
- version: 7.1.6
+ specifier: 7.1.7
+ version: 7.1.7
'@homarr/common':
specifier: workspace:^0.1.0
version: link:../common
@@ -1874,8 +1889,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../redis
dayjs:
- specifier: ^1.11.13
- version: 1.11.13
+ specifier: ^1.11.18
+ version: 1.11.18
octokit:
specifier: ^5.0.3
version: 5.0.3
@@ -1896,8 +1911,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1921,8 +1936,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -1939,11 +1954,11 @@ importers:
specifier: workspace:^0.1.0
version: link:../server-settings
'@mantine/dates':
- specifier: ^8.2.7
- version: 8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(dayjs@1.11.18)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
next:
- specifier: 15.5.0
- version: 15.5.0(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0)
+ specifier: 15.5.2
+ version: 15.5.2(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1)
react:
specifier: 19.1.1
version: 19.1.1
@@ -1961,8 +1976,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -2000,23 +2015,23 @@ importers:
specifier: workspace:^0.1.0
version: link:../ui
'@mantine/core':
- specifier: ^8.2.7
- version: 8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@mantine/hooks':
- specifier: ^8.2.7
- version: 8.2.7(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(react@19.1.1)
'@mantine/spotlight':
- specifier: ^8.2.7
- version: 8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@tabler/icons-react':
specifier: ^3.34.1
version: 3.34.1(react@19.1.1)
jotai:
- specifier: ^2.13.1
- version: 2.13.1(@babel/core@7.28.3)(@babel/template@7.27.2)(@types/react@19.1.12)(react@19.1.1)
+ specifier: ^2.14.0
+ version: 2.14.0(@babel/core@7.28.3)(@babel/template@7.27.2)(@types/react@19.1.12)(react@19.1.1)
next:
- specifier: 15.5.0
- version: 15.5.0(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0)
+ specifier: 15.5.2
+ version: 15.5.2(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1)
react:
specifier: 19.1.1
version: 19.1.1
@@ -2037,8 +2052,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -2052,20 +2067,20 @@ importers:
specifier: workspace:^0.1.0
version: link:../definitions
dayjs:
- specifier: ^1.11.13
- version: 1.11.13
+ specifier: ^1.11.18
+ version: 1.11.18
deepmerge:
specifier: 4.3.1
version: 4.3.1
mantine-react-table:
specifier: 2.0.0-beta.9
- version: 2.0.0-beta.9(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/dates@8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(@tabler/icons-react@3.34.1(react@19.1.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ version: 2.0.0-beta.9(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/dates@8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(dayjs@1.11.18)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(@tabler/icons-react@3.34.1(react@19.1.1))(clsx@2.1.1)(dayjs@1.11.18)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
next:
- specifier: 15.5.0
- version: 15.5.0(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0)
+ specifier: 15.5.2
+ version: 15.5.2(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1)
next-intl:
- specifier: 4.3.5
- version: 4.3.5(next@15.5.0(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0))(react@19.1.1)(typescript@5.9.2)
+ specifier: 4.3.7
+ version: 4.3.7(next@15.5.2(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1))(react@19.1.1)(typescript@5.9.2)
react:
specifier: 19.1.1
version: 19.1.1
@@ -2083,8 +2098,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -2107,23 +2122,23 @@ importers:
specifier: workspace:^0.1.0
version: link:../validation
'@mantine/core':
- specifier: ^8.2.7
- version: 8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@mantine/dates':
- specifier: ^8.2.7
- version: 8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(dayjs@1.11.18)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@mantine/hooks':
- specifier: ^8.2.7
- version: 8.2.7(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(react@19.1.1)
'@tabler/icons-react':
specifier: ^3.34.1
version: 3.34.1(react@19.1.1)
mantine-react-table:
specifier: 2.0.0-beta.9
- version: 2.0.0-beta.9(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/dates@8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(@tabler/icons-react@3.34.1(react@19.1.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ version: 2.0.0-beta.9(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/dates@8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(dayjs@1.11.18)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(@tabler/icons-react@3.34.1(react@19.1.1))(clsx@2.1.1)(dayjs@1.11.18)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
next:
- specifier: 15.5.0
- version: 15.5.0(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0)
+ specifier: 15.5.2
+ version: 15.5.2(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1)
react:
specifier: 19.1.1
version: 19.1.1
@@ -2147,8 +2162,8 @@ importers:
specifier: ^1.0.5
version: 1.0.5
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -2165,8 +2180,8 @@ importers:
specifier: ^4.1.5
version: 4.1.5
zod-form-data:
- specifier: ^3.0.0
- version: 3.0.0(zod@4.1.5)
+ specifier: ^3.0.1
+ version: 3.0.1(zod@4.1.5)
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -2178,8 +2193,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -2256,14 +2271,14 @@ importers:
specifier: workspace:^0.1.0
version: link:../validation
'@mantine/charts':
- specifier: ^8.2.7
- version: 8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(recharts@2.15.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))
+ specifier: ^8.3.1
+ version: 8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(recharts@2.15.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))
'@mantine/core':
- specifier: ^8.2.7
- version: 8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@mantine/hooks':
- specifier: ^8.2.7
- version: 8.2.7(react@19.1.1)
+ specifier: ^8.3.1
+ version: 8.3.1(react@19.1.1)
'@tabler/icons-react':
specifier: ^3.34.1
version: 3.34.1(react@19.1.1)
@@ -2319,17 +2334,17 @@ importers:
specifier: ^2.1.1
version: 2.1.1
dayjs:
- specifier: ^1.11.13
- version: 1.11.13
+ specifier: ^1.11.18
+ version: 1.11.18
mantine-form-zod-resolver:
specifier: ^1.3.0
- version: 1.3.0(@mantine/form@8.2.7(react@19.1.1))(zod@4.1.5)
+ version: 1.3.0(@mantine/form@8.3.1(react@19.1.1))(zod@4.1.5)
mantine-react-table:
specifier: 2.0.0-beta.9
- version: 2.0.0-beta.9(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/dates@8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(@tabler/icons-react@3.34.1(react@19.1.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ version: 2.0.0-beta.9(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/dates@8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(dayjs@1.11.18)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(@tabler/icons-react@3.34.1(react@19.1.1))(clsx@2.1.1)(dayjs@1.11.18)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
next:
- specifier: 15.5.0
- version: 15.5.0(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0)
+ specifier: 15.5.2
+ version: 15.5.2(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1)
react:
specifier: 19.1.1
version: 19.1.1
@@ -2362,8 +2377,8 @@ importers:
specifier: ^7.3.58
version: 7.3.58
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -2371,29 +2386,29 @@ importers:
tooling/eslint:
dependencies:
'@next/eslint-plugin-next':
- specifier: 15.5.0
- version: 15.5.0
+ specifier: 15.5.2
+ version: 15.5.2
eslint-config-prettier:
specifier: ^10.1.8
- version: 10.1.8(eslint@9.34.0)
+ version: 10.1.8(eslint@9.35.0)
eslint-config-turbo:
specifier: ^2.5.6
- version: 2.5.6(eslint@9.34.0)(turbo@2.5.6)
+ version: 2.5.6(eslint@9.35.0)(turbo@2.5.6)
eslint-plugin-import:
specifier: ^2.32.0
- version: 2.32.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0)(typescript@5.9.2))(eslint@9.34.0)
+ version: 2.32.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.9.2))(eslint@9.35.0)
eslint-plugin-jsx-a11y:
specifier: ^6.10.2
- version: 6.10.2(eslint@9.34.0)
+ version: 6.10.2(eslint@9.35.0)
eslint-plugin-react:
specifier: ^7.37.5
- version: 7.37.5(eslint@9.34.0)
+ version: 7.37.5(eslint@9.35.0)
eslint-plugin-react-hooks:
specifier: ^5.2.0
- version: 5.2.0(eslint@9.34.0)
+ version: 5.2.0(eslint@9.35.0)
typescript-eslint:
- specifier: ^8.41.0
- version: 8.41.0(eslint@9.34.0)(typescript@5.9.2)
+ specifier: ^8.43.0
+ version: 8.43.0(eslint@9.35.0)(typescript@5.9.2)
devDependencies:
'@homarr/prettier-config':
specifier: workspace:^0.1.0
@@ -2402,8 +2417,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../typescript
eslint:
- specifier: ^9.34.0
- version: 9.34.0
+ specifier: ^9.35.0
+ version: 9.35.0
typescript:
specifier: ^5.9.2
version: 5.9.2
@@ -2413,8 +2428,8 @@ importers:
tooling/prettier:
dependencies:
'@ianvs/prettier-plugin-sort-imports':
- specifier: ^4.6.2
- version: 4.6.2(prettier@3.6.2)
+ specifier: ^4.7.0
+ version: 4.7.0(prettier@3.6.2)
prettier:
specifier: ^3.6.2
version: 3.6.2
@@ -2499,10 +2514,6 @@ packages:
resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==}
engines: {node: '>=6.9.0'}
- '@babel/generator@7.28.0':
- resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==}
- engines: {node: '>=6.9.0'}
-
'@babel/generator@7.28.3':
resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==}
engines: {node: '>=6.9.0'}
@@ -2571,16 +2582,15 @@ packages:
resolution: {integrity: sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==}
engines: {node: '>=6.9.0'}
+ '@babel/helpers@7.28.4':
+ resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
+ engines: {node: '>=6.9.0'}
+
'@babel/parser@7.26.2':
resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==}
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/parser@7.28.0':
- resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==}
- engines: {node: '>=6.0.0'}
- hasBin: true
-
'@babel/parser@7.28.3':
resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==}
engines: {node: '>=6.0.0'}
@@ -2602,8 +2612,8 @@ packages:
resolution: {integrity: sha512-909rVuj3phpjW6y0MCXAZ5iNeORePa6ldJvp2baWGcTjwqbBDDz6xoS5JHJ7lS88NlwLYj07ImL/8IUMtDZzTA==}
engines: {node: '>=6.9.0'}
- '@babel/runtime@7.28.3':
- resolution: {integrity: sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==}
+ '@babel/runtime@7.28.4':
+ resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==}
engines: {node: '>=6.9.0'}
'@babel/template@7.25.9':
@@ -2618,10 +2628,6 @@ packages:
resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==}
engines: {node: '>=6.9.0'}
- '@babel/traverse@7.28.0':
- resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==}
- engines: {node: '>=6.9.0'}
-
'@babel/traverse@7.28.3':
resolution: {integrity: sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==}
engines: {node: '>=6.9.0'}
@@ -2630,14 +2636,14 @@ packages:
resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==}
engines: {node: '>=6.9.0'}
- '@babel/types@7.28.1':
- resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==}
- engines: {node: '>=6.9.0'}
-
'@babel/types@7.28.2':
resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
engines: {node: '>=6.9.0'}
+ '@babel/types@7.28.4':
+ resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==}
+ engines: {node: '>=6.9.0'}
+
'@balena/dockerignore@1.0.2':
resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==}
@@ -2696,28 +2702,30 @@ packages:
resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==}
engines: {node: '>=18'}
- '@ctrl/deluge@7.1.1':
- resolution: {integrity: sha512-BouWdImYwuLqTo9kagVpiE7BiLojpoyAyQ3GA1M1EgOMn+ZDcj7Ovci2TJ7NMbKv1YOD0SyEIl4ejIngXq3S/A==}
+ '@ctrl/deluge@7.2.0':
+ resolution: {integrity: sha512-tR3WSpO9n/7yeNXuQHMrh/Itb1eFkoLDMMgv145vpWxRjrDP5RH2kdY9VAyeJrvLyQC9r5tMB93sxFcNanwBzg==}
engines: {node: '>=18'}
'@ctrl/magnet-link@4.0.2':
resolution: {integrity: sha512-wENP7LH4BmCjz+gXVq7Nzz20zMjY/huuG7aDk/yu/LhFdC84e/l8222rCIAo0lwhU451lFcJKLcOmtG6TNrBAQ==}
engines: {node: '>=18'}
- '@ctrl/qbittorrent@9.6.0':
- resolution: {integrity: sha512-/8HnjvHEx8tFNhWdtjkPGN+rCpBtNatk0kAFPNe7w4pExKjbpQHsJ3AvItcn1F7j04npn4MzCs5mYP7oBtyYig==}
+ '@ctrl/qbittorrent@9.7.0':
+ resolution: {integrity: sha512-yUBqe6knrK6+vx57D4tpETw0RcPGWLnDR1UNd8rHttmffIyxE4LX7SymyS48TR4Bcx6wE5SqzulV0JXd1aKlXg==}
engines: {node: '>=18'}
- '@ctrl/shared-torrent@6.2.1':
- resolution: {integrity: sha512-0ouXQnBEik6B3LXByiXnDZ6MAj8r9oMEE09q2MkifqSRmGImhZKq7iNbzcGzTn9BI1TU/anwjSOrxjmYV4T5eQ==}
+ '@ctrl/shared-torrent@6.3.0':
+ resolution: {integrity: sha512-rhgN/tXQFIh6ujFE5wXVj1hBftb2tLmAYt5CVfxncKtS38AlPAqyiwg2VOWrWpq/gL+eRlP0uWTyt5yEohxIzw==}
engines: {node: '>=18'}
+ peerDependencies:
+ ofetch: ^1.4.1
'@ctrl/torrent-file@4.1.0':
resolution: {integrity: sha512-mC6HdmCrRhhwpthM+OboJvGIywVR05IbdhVSBkfbGslzbQk2xNnx4UOKljV/x2YI2M1DDF3F3o0paIiYd5O0Og==}
engines: {node: '>=18'}
- '@ctrl/transmission@7.2.0':
- resolution: {integrity: sha512-l0iPcyWxzu0CadILil8s2UGq6EOjkGsFrJCY++4ndJsU0Dw/Cgej/tUkEIu+eKckjylUvVJ/ojVhMpMB8TEhsA==}
+ '@ctrl/transmission@7.3.0':
+ resolution: {integrity: sha512-dd9vgIjXiN5LYToQ/Nq/d6tuukAE9SpxEjrHlGItMurW7mIruR+l4qQfCVD7O2xh6Pye1AYmwGzrW/8AeBQreQ==}
engines: {node: '>=18'}
'@dabh/diagnostics@2.0.3':
@@ -2927,8 +2935,8 @@ packages:
cpu: [x64]
os: [win32]
- '@eslint-community/eslint-utils@4.7.0':
- resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
+ '@eslint-community/eslint-utils@4.9.0':
+ resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
@@ -2953,8 +2961,8 @@ packages:
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/js@9.34.0':
- resolution: {integrity: sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==}
+ '@eslint/js@9.35.0':
+ resolution: {integrity: sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.6':
@@ -2965,9 +2973,9 @@ packages:
resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@extractus/feed-extractor@7.1.6':
- resolution: {integrity: sha512-hgTjb7vHNXPiSSshAJSE6D5w2bMW6jWklj52B2SG5BI5GakkH14PxDiXHzyRZrJgVd2t1BEcA/aaM8eXazUHaA==}
- engines: {node: '>= 18'}
+ '@extractus/feed-extractor@7.1.7':
+ resolution: {integrity: sha512-eNeddvKK9rBxWSHj5zBo6ODihJqJtq+QzEQdVeadkOK48avmdela+c2JAfMcPEBMFaWcAYV4bUMhI9Tqi8mX2Q==}
+ engines: {node: '>= 20'}
'@fastify/ajv-compiler@4.0.2':
resolution: {integrity: sha512-Rkiu/8wIjpsf46Rr+Fitd3HRP+VsxUFDDeag0hs9L0ksfnwx2g7SPQQTFL0E8Qv+rfXzQOxBJnjUB9ITUDjfWQ==}
@@ -2987,26 +2995,26 @@ packages:
'@fastify/proxy-addr@5.0.0':
resolution: {integrity: sha512-37qVVA1qZ5sgH7KpHkkC4z9SK6StIsIcOmpjvMPXNb3vx2GQxhZocogVYbr2PbbeLCQxYIPDok307xEvRZOzGA==}
- '@floating-ui/core@1.6.8':
- resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==}
+ '@floating-ui/core@1.7.3':
+ resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==}
- '@floating-ui/dom@1.6.11':
- resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==}
+ '@floating-ui/dom@1.7.4':
+ resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==}
- '@floating-ui/react-dom@2.1.2':
- resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==}
+ '@floating-ui/react-dom@2.1.6':
+ resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==}
peerDependencies:
react: '>=16.8.0'
react-dom: '>=16.8.0'
- '@floating-ui/react@0.26.28':
- resolution: {integrity: sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==}
+ '@floating-ui/react@0.27.16':
+ resolution: {integrity: sha512-9O8N4SeG2z++TSM8QA/KTeKFBVCNEz/AGS7gWPJf6KFRzmRWixFRnCnkPHRDwSVZW6QPDO6uT0P2SpWNKCc9/g==}
peerDependencies:
- react: '>=16.8.0'
- react-dom: '>=16.8.0'
+ react: '>=17.0.0'
+ react-dom: '>=17.0.0'
- '@floating-ui/utils@0.2.8':
- resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==}
+ '@floating-ui/utils@0.2.10':
+ resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
'@formatjs/ecma402-abstract@2.2.0':
resolution: {integrity: sha512-IpM+ev1E4QLtstniOE29W1rqH9eTdx5hQdNL8pzrflMj/gogfaoONZqL83LUeQScHAvyMbpqP5C9MzNf+fFwhQ==}
@@ -3023,16 +3031,16 @@ packages:
'@formatjs/intl-localematcher@0.5.5':
resolution: {integrity: sha512-t5tOGMgZ/i5+ALl2/offNqAQq/lfUnKLEw0mXQI4N4bqpedhrSE+fyKLpwnd22sK0dif6AV+ufQcTsKShB9J1g==}
- '@gitbeaker/core@43.4.0':
- resolution: {integrity: sha512-SN7/2raXQa99i/koOV5voQ3q5Pz9F8TkyECBDmY8lDrgufgf5QLfRvTVc1uRU/As543KCrPi2s/Hn+vZgwLdYw==}
+ '@gitbeaker/core@43.5.0':
+ resolution: {integrity: sha512-Lfsl6DE/2RkFvpSEhMEnN6sNuY0IeR68UEQq2qzR0MkUF1RMCmOFlD3OydnT9yY+fkWjB4FPSG4SA/oBVZYTFQ==}
engines: {node: '>=18.20.0'}
- '@gitbeaker/requester-utils@43.4.0':
- resolution: {integrity: sha512-W15fZbLzEonMdqzz+/H3KmIByI3neUE2+HjnvnyMl5g4CHZuPCkj0boTkGRBH1c6ax1Fmdhz5vPv7OjRF274gQ==}
+ '@gitbeaker/requester-utils@43.5.0':
+ resolution: {integrity: sha512-C6CLAZDy6mNAKHqqt+T2s0RNXf7tmjT9PLAxTZCdtS0276eAj1xmqmPPy9RDKKPzhGaiUicn9q2pA3IyEDM1jQ==}
engines: {node: '>=18.20.0'}
- '@gitbeaker/rest@43.4.0':
- resolution: {integrity: sha512-SmyBcC16+wNuAT77vcqk1gQr5ITC0yD4ln5/s7qplEC4U3hQtII/NKvpiygapMDrFF4GGA3GTCQAPQuUk22onw==}
+ '@gitbeaker/rest@43.5.0':
+ resolution: {integrity: sha512-HJgzKSBtdHrfpbH3vHj+1qSyH9RR0L/zMDCwvo4NE2Fg9P2nkWMfj2AzhytENHGTtL6gcfSPOS16HLLTQ4uVeg==}
engines: {node: '>=18.20.0'}
'@grpc/grpc-js@1.12.5':
@@ -3058,7 +3066,7 @@ packages:
resolution: {integrity: sha512-kz323qIQkNQElEGroo/E9MKPDuIR5pkuk/XEWd50K+cSEKdmdiYx0PKWUdaNY2ecJYngtF+njDMsMKplL6zfEg==}
engines: {node: '>=18.14.1'}
peerDependencies:
- hono: '>=4.9.5'
+ hono: '>=4.9.7'
'@humanfs/core@0.19.1':
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
@@ -3080,8 +3088,8 @@ packages:
resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
engines: {node: '>=18.18'}
- '@ianvs/prettier-plugin-sort-imports@4.6.2':
- resolution: {integrity: sha512-kHiL1IghIodo43clNQaJJU2rPqXEioPG+Ink4/T5za46A0ggSNvIx4NM3hGgciQ2VpDaR/X8cTJIZDKRurWjPw==}
+ '@ianvs/prettier-plugin-sort-imports@4.7.0':
+ resolution: {integrity: sha512-soa2bPUJAFruLL4z/CnMfSEKGznm5ebz29fIa9PxYtu8HHyLKNE1NXAs6dylfw1jn/ilEIfO2oLLN6uAafb7DA==}
peerDependencies:
'@prettier/plugin-oxc': ^0.0.4
'@vue/compiler-sfc': 2.7.x || 3.x
@@ -3242,7 +3250,7 @@ packages:
'@jellyfin/sdk@0.11.0':
resolution: {integrity: sha512-WmM4as9ptqH+CvC2YsUefNWQDmu2aWIamwAoj7h2BFR6l019pcRFG5FT22egwbdizR6DfdpmsoAWB4x9QCzcEQ==}
peerDependencies:
- axios: '>=1.11.0'
+ axios: '>=1.12.1'
'@jridgewell/gen-mapping@0.3.12':
resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==}
@@ -3304,88 +3312,88 @@ packages:
'@libsql/core@0.14.0':
resolution: {integrity: sha512-nhbuXf7GP3PSZgdCY2Ecj8vz187ptHlZQ0VRc751oB2C1W8jQUXKKklvt7t1LJiUTQBVJuadF628eUk+3cRi4Q==}
- '@mantine/charts@8.2.7':
- resolution: {integrity: sha512-nXR5SLR6AqWL3s0AjMO/N5HQAokBmXjmyVFDKrFCMwzkDOlzhDPpaJwGfk/aPkHSc4W/VtxeB/5pkMOzQBtHfw==}
+ '@mantine/charts@8.3.1':
+ resolution: {integrity: sha512-Mb6rSbDbcL2lQmSVZA3dZfJf3734qsdN+UeZ8vAoh00e1hJEzu6hT0SUimP7G16q1yMaB+6bgN76lOQsG8vRug==}
peerDependencies:
- '@mantine/core': 8.2.7
- '@mantine/hooks': 8.2.7
+ '@mantine/core': 8.3.1
+ '@mantine/hooks': 8.3.1
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
recharts: '>=2.13.3'
- '@mantine/colors-generator@8.2.7':
- resolution: {integrity: sha512-S74q0GPyJ5UmGOmsFWoo77GReAr3OFWG0nplt0/jLtBW15xiE9g5Xp1C0NipjuTjzkvJ1rXWigyxVkhelHP3cw==}
+ '@mantine/colors-generator@8.3.1':
+ resolution: {integrity: sha512-1JJ/wIN+JaLhObWi3Ap4dvTk4ksN7dvOHa+ynEaxMg5Ienb2sv2V/zadiFISXkMw1zgBkcFe1UJbgm3QL4gsmg==}
peerDependencies:
chroma-js: '>=2.4.2'
- '@mantine/core@8.2.7':
- resolution: {integrity: sha512-gfVDf/qFxt66PrsktYEJt/MZbiNo3KCx6PxKKcskSe/J2g5g1kf4nhhvBFlYaicDX93PfT4MgTnipyfJQ09NDA==}
+ '@mantine/core@8.3.1':
+ resolution: {integrity: sha512-OYfxn9cTv+K6RZ8+Ozn/HDQXkB8Fmn+KJJt5lxyFDP9F09EHnC59Ldadv1LyUZVBGtNqz4sn6b3vBShbxwAmYw==}
peerDependencies:
- '@mantine/hooks': 8.2.7
+ '@mantine/hooks': 8.3.1
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
- '@mantine/dates@8.2.7':
- resolution: {integrity: sha512-6DpGmtBLuKcwsV6umpPPu2S5nuOQMlaroy99imM88ooJZSCHAtfQsky2DZRUPgUojrsWqKVb7L9qW3az6A660Q==}
+ '@mantine/dates@8.3.1':
+ resolution: {integrity: sha512-qCGlLnrwu9eQsl+yQC/tEYgTEO8rE6hopagNpTV2/wzLBUywlL/AbtB1yHuOikQgZxXAOLfvIBWNTWUHRtTnfw==}
peerDependencies:
- '@mantine/core': 8.2.7
- '@mantine/hooks': 8.2.7
+ '@mantine/core': 8.3.1
+ '@mantine/hooks': 8.3.1
dayjs: '>=1.0.0'
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
- '@mantine/dropzone@8.2.7':
- resolution: {integrity: sha512-p8kgYUymSPNgPCOyy1AeBJRqphnDgPEJDIMzWVSP1lzUGSL84cauBPnt91QGa+oHkzSXCcg6PiO+G2cfZvI4Qw==}
+ '@mantine/dropzone@8.3.1':
+ resolution: {integrity: sha512-jsaZhX02Uu8FDWBYNk59wWEBNO0hrayuBfRGqSjY/FQwRHZXIBgfuBsE3AIBJte6ptX+gWSR0Bhwids0LicEtg==}
peerDependencies:
- '@mantine/core': 8.2.7
- '@mantine/hooks': 8.2.7
+ '@mantine/core': 8.3.1
+ '@mantine/hooks': 8.3.1
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
- '@mantine/form@8.2.7':
- resolution: {integrity: sha512-bhOygfZMo+vOX37xBhUCCiOdudNMFQzxm/DOHzwIhGsrmgdhyV0Kof/+zDEfj1/09GtjFP9ecYvmnL5zhZv+6w==}
+ '@mantine/form@8.3.1':
+ resolution: {integrity: sha512-kmnF5o0Tl/Wi+ZGdqNknoN7QDswxuRo7OlPDRwXuxv/TcazuOIwf7j0p6kFzJ0c/wuqrZfjx3vnOg4Txtmwa1g==}
peerDependencies:
react: ^18.x || ^19.x
- '@mantine/hooks@8.2.7':
- resolution: {integrity: sha512-DV0RdFBI0g0Bu7CWipIIiPK6d8+pTNXTbIOF4N+VZ6LAIpZPk5ldtb8sGaTVyQtQhEjrChrCxfkrLiNGTOAwiw==}
+ '@mantine/hooks@8.3.1':
+ resolution: {integrity: sha512-lQutBS+Q0iz/cNFvdrsYassPWo3RtWcmDGJeOtKfHigLzFOhxUuLOkQgepDbMf3WcVMB/tist6Px1PQOv57JTw==}
peerDependencies:
react: ^18.x || ^19.x
- '@mantine/modals@8.2.7':
- resolution: {integrity: sha512-btbZ4lO7S931jklBtmE6VTHUG7g4VuQLuloDxfWa21nK4X7pUjq9zvaeuYVkIVJuUxm4kXn/mMHnw57V2B6Tvw==}
+ '@mantine/modals@8.3.1':
+ resolution: {integrity: sha512-3+OL1VcrKI91eqfLR4j6gIKHxwCVINNBrBdIVKc4ozAPAF/XI5VXwhXYxV/Nd7B2lxQgsOlIK5rjEKFvTfHZBg==}
peerDependencies:
- '@mantine/core': 8.2.7
- '@mantine/hooks': 8.2.7
+ '@mantine/core': 8.3.1
+ '@mantine/hooks': 8.3.1
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
- '@mantine/notifications@8.2.7':
- resolution: {integrity: sha512-KXtueabwBIbgl1M5vmjzGBt88AOwhxkhmvQhEDC6UvGPtIlf4jw0BT0i3a54AKc1YwSCs0bUd91jKg5Oem2wpw==}
+ '@mantine/notifications@8.3.1':
+ resolution: {integrity: sha512-C1Iqa4g1HNNTLv2/CxOCR1mNlYNFCNtnS0u/JsR+HvtFVrun1namxDG6e6/U0hIva2klogYdivx4cyxmjPFerg==}
peerDependencies:
- '@mantine/core': 8.2.7
- '@mantine/hooks': 8.2.7
+ '@mantine/core': 8.3.1
+ '@mantine/hooks': 8.3.1
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
- '@mantine/spotlight@8.2.7':
- resolution: {integrity: sha512-S6+OzJJTnTOk9mg2e0pV7vENvP+Bp5INAolbm7G2UZK+gczw30leo7xbCmmDmCtEDTgvJau2xiABtPjYOYadhg==}
+ '@mantine/spotlight@8.3.1':
+ resolution: {integrity: sha512-Efmvk/uiG4MhmlkUGBu7afz5BgBDMwKUJMhMThDKZkaZfp7/VxOhHNEfC5ZPYMYd5Nk5i8Wo0urfybIMRwyO2A==}
peerDependencies:
- '@mantine/core': 8.2.7
- '@mantine/hooks': 8.2.7
+ '@mantine/core': 8.3.1
+ '@mantine/hooks': 8.3.1
react: ^18.x || ^19.x
react-dom: ^18.x || ^19.x
- '@mantine/store@8.2.7':
- resolution: {integrity: sha512-TQye6nRFDOQ+HQovQSjQlFHrivn6NqdiZAuytszOnB9jqgKSzPqQxK0mEynAxJsomaO9K1rrj7clZcPNgZc+Pw==}
+ '@mantine/store@8.3.1':
+ resolution: {integrity: sha512-OZwg0YKbCEKnkFmS9oRLKA8TMriBzO1T6nUib1yfLCx0VFuznllYZiDtaSWNkEYSdnFWCv5hKh5aOD4RHUnQfQ==}
peerDependencies:
react: ^18.x || ^19.x
- '@mantine/tiptap@8.2.7':
- resolution: {integrity: sha512-aKWvisnrDa+IScxiNsWeWcfSclDF8PBi+EGA2Baof5d5T7KBqAJLcQ/S3rF/ZQzhsXcDoApAigY/m48yC00YtA==}
+ '@mantine/tiptap@8.3.1':
+ resolution: {integrity: sha512-JJ3shYUinUK582I0pGNOQWJdQTjvzaU8LCJ+0E7zfEV2WUZKZdu7lNKg3ywbmqGGwXvCFtJgBXsiHbCh/ms8xQ==}
peerDependencies:
- '@mantine/core': 8.2.7
- '@mantine/hooks': 8.2.7
+ '@mantine/core': 8.3.1
+ '@mantine/hooks': 8.3.1
'@tiptap/extension-link': '>=2.1.12'
'@tiptap/react': '>=2.1.12'
react: ^18.x || ^19.x
@@ -3402,56 +3410,56 @@ packages:
'@ndaidong/bellajs@12.0.1':
resolution: {integrity: sha512-1iY42uiHz0cxNMbde7O3zVN+ZX1viOOUOBRt6ht6lkRZbSjwOnFV34Zv4URp3hGzEe6L9Byk7BOq/41H0PzAOQ==}
- '@next/env@15.5.0':
- resolution: {integrity: sha512-sDaprBAfzCQiOgo2pO+LhnV0Wt2wBgartjrr+dpcTORYVnnXD0gwhHhiiyIih9hQbq+JnbqH4odgcFWhqCGidw==}
+ '@next/env@15.5.2':
+ resolution: {integrity: sha512-Qe06ew4zt12LeO6N7j8/nULSOe3fMXE4dM6xgpBQNvdzyK1sv5y4oAP3bq4LamrvGCZtmRYnW8URFCeX5nFgGg==}
- '@next/eslint-plugin-next@15.5.0':
- resolution: {integrity: sha512-+k83U/fST66eQBjTltX2T9qUYd43ntAe+NZ5qeZVTQyTiFiHvTLtkpLKug4AnZAtuI/lwz5tl/4QDJymjVkybg==}
+ '@next/eslint-plugin-next@15.5.2':
+ resolution: {integrity: sha512-lkLrRVxcftuOsJNhWatf1P2hNVfh98k/omQHrCEPPriUypR6RcS13IvLdIrEvkm9AH2Nu2YpR5vLqBuy6twH3Q==}
- '@next/swc-darwin-arm64@15.5.0':
- resolution: {integrity: sha512-v7Jj9iqC6enxIRBIScD/o0lH7QKvSxq2LM8UTyqJi+S2w2QzhMYjven4vgu/RzgsdtdbpkyCxBTzHl/gN5rTRg==}
+ '@next/swc-darwin-arm64@15.5.2':
+ resolution: {integrity: sha512-8bGt577BXGSd4iqFygmzIfTYizHb0LGWqH+qgIF/2EDxS5JsSdERJKA8WgwDyNBZgTIIA4D8qUtoQHmxIIquoQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- '@next/swc-darwin-x64@15.5.0':
- resolution: {integrity: sha512-s2Nk6ec+pmYmAb/utawuURy7uvyYKDk+TRE5aqLRsdnj3AhwC9IKUBmhfnLmY/+P+DnwqpeXEFIKe9tlG0p6CA==}
+ '@next/swc-darwin-x64@15.5.2':
+ resolution: {integrity: sha512-2DjnmR6JHK4X+dgTXt5/sOCu/7yPtqpYt8s8hLkHFK3MGkka2snTv3yRMdHvuRtJVkPwCGsvBSwmoQCHatauFQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
- '@next/swc-linux-arm64-gnu@15.5.0':
- resolution: {integrity: sha512-mGlPJMZReU4yP5fSHjOxiTYvZmwPSWn/eF/dcg21pwfmiUCKS1amFvf1F1RkLHPIMPfocxLViNWFvkvDB14Isg==}
+ '@next/swc-linux-arm64-gnu@15.5.2':
+ resolution: {integrity: sha512-3j7SWDBS2Wov/L9q0mFJtEvQ5miIqfO4l7d2m9Mo06ddsgUK8gWfHGgbjdFlCp2Ek7MmMQZSxpGFqcC8zGh2AA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@next/swc-linux-arm64-musl@15.5.0':
- resolution: {integrity: sha512-biWqIOE17OW/6S34t1X8K/3vb1+svp5ji5QQT/IKR+VfM3B7GvlCwmz5XtlEan2ukOUf9tj2vJJBffaGH4fGRw==}
+ '@next/swc-linux-arm64-musl@15.5.2':
+ resolution: {integrity: sha512-s6N8k8dF9YGc5T01UPQ08yxsK6fUow5gG1/axWc1HVVBYQBgOjca4oUZF7s4p+kwhkB1bDSGR8QznWrFZ/Rt5g==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@next/swc-linux-x64-gnu@15.5.0':
- resolution: {integrity: sha512-zPisT+obYypM/l6EZ0yRkK3LEuoZqHaSoYKj+5jiD9ESHwdr6QhnabnNxYkdy34uCigNlWIaCbjFmQ8FY5AlxA==}
+ '@next/swc-linux-x64-gnu@15.5.2':
+ resolution: {integrity: sha512-o1RV/KOODQh6dM6ZRJGZbc+MOAHww33Vbs5JC9Mp1gDk8cpEO+cYC/l7rweiEalkSm5/1WGa4zY7xrNwObN4+Q==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@next/swc-linux-x64-musl@15.5.0':
- resolution: {integrity: sha512-+t3+7GoU9IYmk+N+FHKBNFdahaReoAktdOpXHFIPOU1ixxtdge26NgQEEkJkCw2dHT9UwwK5zw4mAsURw4E8jA==}
+ '@next/swc-linux-x64-musl@15.5.2':
+ resolution: {integrity: sha512-/VUnh7w8RElYZ0IV83nUcP/J4KJ6LLYliiBIri3p3aW2giF+PAVgZb6mk8jbQSB3WlTai8gEmCAr7kptFa1H6g==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@next/swc-win32-arm64-msvc@15.5.0':
- resolution: {integrity: sha512-d8MrXKh0A+c9DLiy1BUFwtg3Hu90Lucj3k6iKTUdPOv42Ve2UiIG8HYi3UAb8kFVluXxEfdpCoPPCSODk5fDcw==}
+ '@next/swc-win32-arm64-msvc@15.5.2':
+ resolution: {integrity: sha512-sMPyTvRcNKXseNQ/7qRfVRLa0VhR0esmQ29DD6pqvG71+JdVnESJaHPA8t7bc67KD5spP3+DOCNLhqlEI2ZgQg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
- '@next/swc-win32-x64-msvc@15.5.0':
- resolution: {integrity: sha512-Fe1tGHxOWEyQjmygWkkXSwhFcTJuimrNu52JEuwItrKJVV4iRjbWp9I7zZjwqtiNnQmxoEvoisn8wueFLrNpvQ==}
+ '@next/swc-win32-x64-msvc@15.5.2':
+ resolution: {integrity: sha512-W5VvyZHnxG/2ukhZF/9Ikdra5fdNftxI6ybeVKYvBPDtyx7x4jPPSNduUkfH5fo3zG0JQ0bPxgy41af2JX5D4Q==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@@ -3472,12 +3480,12 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
- '@octokit/app@16.0.1':
- resolution: {integrity: sha512-kgTeTsWmpUX+s3Fs4EK4w1K+jWCDB6ClxLSWUWTyhlw7+L3jHtuXDR4QtABu2GsmCMdk67xRhruiXotS3ay3Yw==}
+ '@octokit/app@16.1.0':
+ resolution: {integrity: sha512-OdKHnm0CYLk8Setr47CATT4YnRTvWkpTYvE+B/l2B0mjszlfOIit3wqPHVslD2jfc1bD4UbO7Mzh6gjCuMZKsA==}
engines: {node: '>= 20'}
- '@octokit/auth-app@8.0.1':
- resolution: {integrity: sha512-P2J5pB3pjiGwtJX4WqJVYCtNkcZ+j5T2Wm14aJAEIC3WJOrv12jvBley3G1U/XI8q9o1A7QMG54LiFED2BiFlg==}
+ '@octokit/auth-app@8.1.0':
+ resolution: {integrity: sha512-6bWhyvLXqCSfHiqlwzn9pScLZ+Qnvh/681GR/UEEPCMIVwfpRDBw0cCzy3/t2Dq8B7W2X/8pBgmw6MOiyE0DXQ==}
engines: {node: '>= 20'}
'@octokit/auth-oauth-app@9.0.1':
@@ -3729,14 +3737,14 @@ packages:
'@remirror/core-constants@3.0.0':
resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==}
- '@rolldown/pluginutils@1.0.0-beta.32':
- resolution: {integrity: sha512-QReCdvxiUZAPkvp1xpAg62IeNzykOFA6syH2CnClif4YmALN1XKpB39XneL80008UbtMShthSVDKmrx05N1q/g==}
+ '@rolldown/pluginutils@1.0.0-beta.34':
+ resolution: {integrity: sha512-LyAREkZHP5pMom7c24meKmJCdhf2hEyvam2q0unr3or9ydwDL+DJ8chTF6Av/RFPb3rH8UFBdMzO5MxTZW97oA==}
'@rollup/pluginutils@5.1.0':
resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==}
engines: {node: '>=14.0.0'}
peerDependencies:
- rollup: '>=4.49.0'
+ rollup: '>=4.50.1'
peerDependenciesMeta:
rollup:
optional: true
@@ -3890,8 +3898,8 @@ packages:
peerDependencies:
semantic-release: '>=18.0.0'
- '@semantic-release/github@11.0.4':
- resolution: {integrity: sha512-fU/nLSjkp9DmB0h7FVO5imhhWJMvq2LjD4+3lz3ZAzpDLY9+KYwC+trJ+g7LbZeJv9y3L9fSFSg2DduUpiT6bw==}
+ '@semantic-release/github@11.0.5':
+ resolution: {integrity: sha512-wJamzHteXwBdopvkTD6BJjPz1UHLm20twlVCSMA9zpd3B5KrOQX137jfTbNJT6ZVz3pXtg0S1DroQl4wifJ4WQ==}
engines: {node: '>=20.8.1'}
peerDependencies:
semantic-release: '>=24.1.0'
@@ -3902,8 +3910,8 @@ packages:
peerDependencies:
semantic-release: '>=20.1.0'
- '@semantic-release/release-notes-generator@14.0.3':
- resolution: {integrity: sha512-XxAZRPWGwO5JwJtS83bRdoIhCiYIx8Vhr+u231pQAsdFIAbm19rSVJLdnBN+Avvk7CKvNQE/nJ4y7uqKH6WTiw==}
+ '@semantic-release/release-notes-generator@14.1.0':
+ resolution: {integrity: sha512-CcyDRk7xq+ON/20YNR+1I/jP7BYKICr1uKd1HHpROSnnTdGqOTburi4jcRiTYz0cpfhxSloQO3cGhnoot7IEkA==}
engines: {node: '>=20.8.1'}
peerDependencies:
semantic-release: '>=20.1.0'
@@ -4073,27 +4081,27 @@ packages:
resolution: {integrity: sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==}
engines: {node: '>=12'}
- '@tanstack/query-core@5.85.5':
- resolution: {integrity: sha512-KO0WTob4JEApv69iYp1eGvfMSUkgw//IpMnq+//cORBzXf0smyRwPLrUvEe5qtAEGjwZTXrjxg+oJNP/C00t6w==}
+ '@tanstack/query-core@5.87.1':
+ resolution: {integrity: sha512-HOFHVvhOCprrWvtccSzc7+RNqpnLlZ5R6lTmngb8aq7b4rc2/jDT0w+vLdQ4lD9bNtQ+/A4GsFXy030Gk4ollA==}
- '@tanstack/query-devtools@5.84.0':
- resolution: {integrity: sha512-fbF3n+z1rqhvd9EoGp5knHkv3p5B2Zml1yNRjh7sNXklngYI5RVIWUrUjZ1RIcEoscarUb0+bOvIs5x9dwzOXQ==}
+ '@tanstack/query-devtools@5.86.0':
+ resolution: {integrity: sha512-/JDw9BP80eambEK/EsDMGAcsL2VFT+8F5KCOwierjPU7QP8Wt1GT32yJpn3qOinBM8/zS3Jy36+F0GiyJp411A==}
- '@tanstack/react-query-devtools@5.85.5':
- resolution: {integrity: sha512-6Ol6Q+LxrCZlQR4NoI5181r+ptTwnlPG2t7H9Sp3klxTBhYGunONqcgBn2YKRPsaKiYM8pItpKMdMXMEINntMQ==}
+ '@tanstack/react-query-devtools@5.87.1':
+ resolution: {integrity: sha512-YPuEub8RQrrsXOxoiMJn33VcGPIeuVINWBgLu9RLSQB8ueXaKlGLZ3NJkahGpbt2AbWf749FQ6R+1jBFk3kdCA==}
peerDependencies:
- '@tanstack/react-query': ^5.85.5
+ '@tanstack/react-query': ^5.87.1
react: ^18 || ^19
- '@tanstack/react-query-next-experimental@5.85.5':
- resolution: {integrity: sha512-DX4VQOA16UYPRy/xUOU9U6CNr+p7SQ83G1fkPECPsgnAIsz2/Qm5jNgKX6nR37v0BvIIq8gY4ejYAJynEV1V5A==}
+ '@tanstack/react-query-next-experimental@5.87.1':
+ resolution: {integrity: sha512-AeZRThgx9cLkcRfE8W+qasgoyPvO4aJafdxqz+uHvCskjDkNt5Y3FAxuqIb9By1Z6VhA9ktyAEUgI/nqJGABiw==}
peerDependencies:
- '@tanstack/react-query': ^5.85.5
+ '@tanstack/react-query': ^5.87.1
next: ^13 || ^14 || ^15
react: ^18 || ^19
- '@tanstack/react-query@5.85.5':
- resolution: {integrity: sha512-/X4EFNcnPiSs8wM2v+b6DqS5mmGeuJQvxBglmDxl6ZQb5V26ouD2SJYAcC3VjbNwqhY2zjxVD15rDA5nGbMn3A==}
+ '@tanstack/react-query@5.87.1':
+ resolution: {integrity: sha512-YKauf8jfMowgAqcxj96AHs+Ux3m3bWT1oSVKamaRPXSnW2HqSznnTCEkAVqctF1e/W9R/mPcyzzINIgpOH94qg==}
peerDependencies:
react: ^18 || ^19
@@ -4338,19 +4346,19 @@ packages:
tree-sitter:
optional: true
- '@trpc/client@11.5.0':
- resolution: {integrity: sha512-32oH+KOAdo73jJKjU9tyG+vCjID6A28NgXwUNr691O5HjpF5yyTX51Zzyee8YtGzU89Nw/drCHdfA4gD7BN2eg==}
+ '@trpc/client@11.5.1':
+ resolution: {integrity: sha512-7I6JJ1I1lxv3S87ht3FAIZi0XxQa7hnQ9K+Oo5BH7cGO8ZtWe9Ftq6ItdkuDfpsnsRPcR2h158AMWbNs/iptqg==}
peerDependencies:
- '@trpc/server': 11.5.0
+ '@trpc/server': 11.5.1
typescript: '>=5.7.2'
- '@trpc/next@11.5.0':
- resolution: {integrity: sha512-HTs3HiJWoW8P0LHlPjAXrJd35UzzvlvSu/DBK/Xx9+NTx7yw729N81QAzn3qSxRZy3sBkEg10LKDrluIZGwgDQ==}
+ '@trpc/next@11.5.1':
+ resolution: {integrity: sha512-MWb7Jqa0XYx0z2he7Eq7HSILc2z9oDqUtsbWz+S6LWCemewRSRzmG8UuoiZm+ICEoRa452RmqeQH1EYiPCWTUg==}
peerDependencies:
'@tanstack/react-query': ^5.59.15
- '@trpc/client': 11.5.0
- '@trpc/react-query': 11.5.0
- '@trpc/server': 11.5.0
+ '@trpc/client': 11.5.1
+ '@trpc/react-query': 11.5.1
+ '@trpc/server': 11.5.1
next: '*'
react: '>=16.8.0'
react-dom: '>=16.8.0'
@@ -4361,27 +4369,27 @@ packages:
'@trpc/react-query':
optional: true
- '@trpc/react-query@11.5.0':
- resolution: {integrity: sha512-BPrMbYi5/oW11SSRUmD3dONCAG/JJjxfniSyFbsY5VSS6qHXDF1RcfLAkiF+Ofo7MPchqmHc2iNqSl5Eumh8iA==}
+ '@trpc/react-query@11.5.1':
+ resolution: {integrity: sha512-Y+e0Lp7na1LAjoYqtHVjxpfayOuvvnuchS723b4dsI/V0h3irBuI+bx38S3m7RgaIh/L1av1SldFrKIauk+r/A==}
peerDependencies:
'@tanstack/react-query': ^5.80.3
- '@trpc/client': 11.5.0
- '@trpc/server': 11.5.0
+ '@trpc/client': 11.5.1
+ '@trpc/server': 11.5.1
react: '>=18.2.0'
react-dom: '>=18.2.0'
typescript: '>=5.7.2'
- '@trpc/server@11.5.0':
- resolution: {integrity: sha512-0IBtkmUCeO2ycn4K45/cqsujnlCQrSvkCo7lFDpg3kGMIPiLyLRciID5IiS7prEjRjeITa+od2aaHTIwONApVw==}
+ '@trpc/server@11.5.1':
+ resolution: {integrity: sha512-KIDzHRS5m8U1ncPwjgtOtPWK9lNO0kYL7b+lnvKXRqowSAQIEC/z6y7g/dkt4Aqv3DKI/STLydt2/afrP1QrxQ==}
peerDependencies:
typescript: '>=5.7.2'
- '@trpc/tanstack-react-query@11.5.0':
- resolution: {integrity: sha512-I4A/fxLXbbfGIfV0X0tKtcy8WqLN7t/P6mvwU33ZkeLEYRk0PyBl/zCTc8z189m5MufgRqEWJ1ps6E7sb0u1JQ==}
+ '@trpc/tanstack-react-query@11.5.1':
+ resolution: {integrity: sha512-1irzKOXhasMq09pHvLqJPTTwaEULIoNfFtoeLNkLnOVHLGvfHkS9qvpVjinRyW1aiQi7OqFDeaUDrQhtbP6tVA==}
peerDependencies:
'@tanstack/react-query': ^5.80.3
- '@trpc/client': 11.5.0
- '@trpc/server': 11.5.0
+ '@trpc/client': 11.5.1
+ '@trpc/server': 11.5.1
react: '>=18.2.0'
react-dom: '>=18.2.0'
typescript: '>=5.7.2'
@@ -4574,8 +4582,8 @@ packages:
'@types/node@18.19.50':
resolution: {integrity: sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==}
- '@types/node@22.18.0':
- resolution: {integrity: sha512-m5ObIqwsUp6BZzyiy4RdZpzWGub9bqLJMvZDD0QMXhxjqMHMENlj+SqF5QxoUwaQNFe+8kz8XM8ZQhqkQPTgMQ==}
+ '@types/node@22.18.1':
+ resolution: {integrity: sha512-rzSDyhn4cYznVG+PCzGe1lwuMYJrcBS1fc3JqSa2PvtABwWo+dZ1ij5OVok3tqfpEBCBoaR4d7upFJk73HRJDw==}
'@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
@@ -4657,63 +4665,63 @@ packages:
'@types/xml2js@0.4.14':
resolution: {integrity: sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==}
- '@typescript-eslint/eslint-plugin@8.41.0':
- resolution: {integrity: sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw==}
+ '@typescript-eslint/eslint-plugin@8.43.0':
+ resolution: {integrity: sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.41.0
+ '@typescript-eslint/parser': ^8.43.0
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/parser@8.41.0':
- resolution: {integrity: sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg==}
+ '@typescript-eslint/parser@8.43.0':
+ resolution: {integrity: sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/project-service@8.41.0':
- resolution: {integrity: sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ==}
+ '@typescript-eslint/project-service@8.43.0':
+ resolution: {integrity: sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/scope-manager@8.41.0':
- resolution: {integrity: sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==}
+ '@typescript-eslint/scope-manager@8.43.0':
+ resolution: {integrity: sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/tsconfig-utils@8.41.0':
- resolution: {integrity: sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw==}
+ '@typescript-eslint/tsconfig-utils@8.43.0':
+ resolution: {integrity: sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/type-utils@8.41.0':
- resolution: {integrity: sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ==}
+ '@typescript-eslint/type-utils@8.43.0':
+ resolution: {integrity: sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/types@8.41.0':
- resolution: {integrity: sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==}
+ '@typescript-eslint/types@8.43.0':
+ resolution: {integrity: sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.41.0':
- resolution: {integrity: sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ==}
+ '@typescript-eslint/typescript-estree@8.43.0':
+ resolution: {integrity: sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/utils@8.41.0':
- resolution: {integrity: sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A==}
+ '@typescript-eslint/utils@8.43.0':
+ resolution: {integrity: sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/visitor-keys@8.41.0':
- resolution: {integrity: sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==}
+ '@typescript-eslint/visitor-keys@8.43.0':
+ resolution: {integrity: sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@umami/node@0.4.0':
@@ -4739,11 +4747,11 @@ packages:
'@videojs/xhr@2.7.0':
resolution: {integrity: sha512-giab+EVRanChIupZK7gXjHy90y3nncA2phIOyG3Ne5fvpiMJzvqYwiTOnEVW2S4CoYcuKJkomat7bMXA/UoUZQ==}
- '@vitejs/plugin-react@5.0.1':
- resolution: {integrity: sha512-DE4UNaBXwtVoDJ0ccBdLVjFTWL70NRuWNCxEieTI3lrq9ORB9aOCQEKstwDXBl87NvFdbqh/p7eINGyj0BthJA==}
+ '@vitejs/plugin-react@5.0.2':
+ resolution: {integrity: sha512-tmyFgixPZCx2+e6VO9TNITWcCQl8+Nl/E8YbAyPVv85QCc7/A3JrdfG2A8gIzvVhWuzMOVrFW1aReaNxrI6tbw==}
engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
- vite: '>=7.1.3'
+ vite: '>=7.1.5'
'@vitest/coverage-v8@3.2.4':
resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==}
@@ -4761,7 +4769,7 @@ packages:
resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==}
peerDependencies:
msw: ^2.4.9
- vite: '>=7.1.3'
+ vite: '>=7.1.5'
peerDependenciesMeta:
msw:
optional: true
@@ -5131,6 +5139,9 @@ packages:
axios@1.11.0:
resolution: {integrity: sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==}
+ axios@1.12.1:
+ resolution: {integrity: sha512-Kn4kbSXpkFHCGE6rBFNwIv0GQs4AvDT80jlveJDKFxjbTYMUeB4QtsdPCv6H8Cm19Je7IU6VFtRl2zWZI0rudQ==}
+
axios@1.9.0:
resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==}
@@ -5380,6 +5391,9 @@ packages:
resolution: {integrity: sha512-mxIojEAQcuEvT/lyXq+jf/3cO/KoA6z4CeNDGGevTybECPOMFCnQy3OPahluUkbqgPNGw5Bi78UC7Po6Lhy+NA==}
engines: {node: '>= 14.16.0'}
+ chownr@1.1.4:
+ resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
+
chroma-js@3.1.2:
resolution: {integrity: sha512-IJnETTalXbsLx1eKEgx19d5L6SRM7cH4vINw/99p/M11HCuXGRWL+6YmCm7FWFGIo6dtWuQoQi1dc5yQ7ESIHg==}
@@ -5731,8 +5745,8 @@ packages:
resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
engines: {node: '>= 0.4'}
- dayjs@1.11.13:
- resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==}
+ dayjs@1.11.18:
+ resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==}
debug@3.2.7:
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
@@ -5881,6 +5895,9 @@ packages:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
+ dns-caching@0.2.5:
+ resolution: {integrity: sha512-1cnB6i/OG4zfYbRnDjWZDT+FGLvOBuJlFIxVZvHBiaa62SCfaGoP4Si50O14HyoHmx1gadeGWigYXdX5LQAFvg==}
+
docker-compose@1.2.0:
resolution: {integrity: sha512-wIU1eHk3Op7dFgELRdmOYlPYS4gP8HhH1ZmZa13QZF59y0fblzFDFmKPhyc05phCy2hze9OEvNZAsoljrs+72w==}
engines: {node: '>= 6.0.0'}
@@ -5889,8 +5906,8 @@ packages:
resolution: {integrity: sha512-ens7BiayssQz/uAxGzH8zGXCtiV24rRWXdjNha5V4zSOcxmAZsfGVm/PPFbwQdqEkDnhG+SyR9E3zSHUbOKXBQ==}
engines: {node: '>= 8.0'}
- dockerode@4.0.7:
- resolution: {integrity: sha512-R+rgrSRTRdU5mH14PZTCPZtW/zw3HDWNTS/1ZAQpL/5Upe/ye5K9WQkIysu4wBoiMwKynsz0a8qWuGsHgEvSAA==}
+ dockerode@4.0.8:
+ resolution: {integrity: sha512-HdPBprWmwfHMHi12AVIFDhXIqIS+EpiOVkZaAZxgML4xf5McqEZjJZtahTPkLDxWOt84ApfWPAH9EoQwOiaAIQ==}
engines: {node: '>= 8.0'}
doctrine@2.1.0:
@@ -5929,8 +5946,8 @@ packages:
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
engines: {node: '>=12'}
- dotenv@17.2.1:
- resolution: {integrity: sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ==}
+ dotenv@17.2.2:
+ resolution: {integrity: sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q==}
engines: {node: '>=12'}
drange@1.1.1:
@@ -6298,8 +6315,8 @@ packages:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint@9.34.0:
- resolution: {integrity: sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==}
+ eslint@9.35.0:
+ resolution: {integrity: sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -6450,8 +6467,8 @@ packages:
peerDependencies:
'@babel/types': ^7
- fastify@5.5.0:
- resolution: {integrity: sha512-ZWSWlzj3K/DcULCnCjEiC2zn2FBPdlZsSA/pnPa/dbUfLvxkD/Nqmb0XXMXLrWkeM4uQPUvjdJpwtXmTfriXqw==}
+ fastify@5.6.0:
+ resolution: {integrity: sha512-9j2r9TnwNsfGiCKGYT0Voqy244qwcoYM9qvNi/i+F8sNNWDnqUEVuGYNc9GyjldhXmMlJmVPS6gI1LdvjYGRJw==}
fastq@1.17.1:
resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
@@ -6579,6 +6596,9 @@ packages:
from2@2.3.0:
resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==}
+ fs-constants@1.0.0:
+ resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
+
fs-extra@10.1.0:
resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
engines: {node: '>=12'}
@@ -6849,13 +6869,13 @@ packages:
highlightjs-vue@1.0.0:
resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==}
- hono@4.9.5:
- resolution: {integrity: sha512-aLAVl5/67ifNnoFVxnhR89dpmSLsgwBprw/PT671ASwUpJqmd7Ne8KPTQo37DbRZfgpHaHeZ4bPVUvbOkeedMw==}
+ hono@4.9.7:
+ resolution: {integrity: sha512-t4Te6ERzIaC48W3x4hJmBwgNlLhmiEdEE5ViYb02ffw4ignHNHa5IBtPjmbKstmtKa8X6C35iWwK4HaqvrzG9w==}
engines: {node: '>=16.9.0'}
- hook-std@3.0.0:
- resolution: {integrity: sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ hook-std@4.0.0:
+ resolution: {integrity: sha512-IHI4bEVOt3vRUDJ+bFA9VUJlo7SzvFARPNLw75pqSmAOP2HmTWfFJtPvLBrDrlgjEYXY9zs7SFdHPQaJShkSCQ==}
+ engines: {node: '>=20'}
hosted-git-info@7.0.2:
resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==}
@@ -6924,6 +6944,10 @@ packages:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines: {node: '>=0.10.0'}
+ iconv-lite@0.7.0:
+ resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==}
+ engines: {node: '>=0.10.0'}
+
ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
@@ -7374,8 +7398,8 @@ packages:
jose@6.0.8:
resolution: {integrity: sha512-EyUPtOKyTYq+iMOszO42eobQllaIjJnwkZ2U93aJzNyPibCy7CEvT9UQnaCVB51IAd49gbNdCew1c0LcLTCB2g==}
- jotai@2.13.1:
- resolution: {integrity: sha512-cRsw6kFeGC9Z/D3egVKrTXRweycZ4z/k7i2MrfCzPYsL9SIWcPXTyqv258/+Ay8VUEcihNiE/coBLE6Kic6b8A==}
+ jotai@2.14.0:
+ resolution: {integrity: sha512-JQkNkTnqjk1BlSUjHfXi+pGG/573bVN104gp6CymhrWDseZGDReTNniWrLhJ+zXbM6pH+82+UNJ2vwYQUkQMWQ==}
engines: {node: '>=12.20.0'}
peerDependencies:
'@babel/core': '>=7.0.0'
@@ -7631,6 +7655,10 @@ packages:
resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==}
engines: {node: 20 || >=22}
+ lru-cache@11.1.0:
+ resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==}
+ engines: {node: 20 || >=22}
+
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
@@ -7916,8 +7944,8 @@ packages:
engines: {node: '>=8', npm: '>=5'}
hasBin: true
- mysql2@3.14.3:
- resolution: {integrity: sha512-fD6MLV8XJ1KiNFIF0bS7Msl8eZyhlTDCDl75ajU5SJtpdx9ZPEACulJcqJWr1Y8OYyxsFc4j3+nflpmhxCU5aQ==}
+ mysql2@3.14.5:
+ resolution: {integrity: sha512-40hDf8LPUsuuJ2hFq+UgOuPwt2IFLIRDvMv6ez9hKbXeYuZPxDDwiJW7KdknvOsQqKznaKczOT1kELgFkhDvFg==}
engines: {node: '>= 8.0'}
mz@2.7.0:
@@ -7935,11 +7963,6 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- nanoid@3.3.9:
- resolution: {integrity: sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
-
nanoid@5.1.5:
resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==}
engines: {node: ^18 || >=20}
@@ -7989,8 +8012,8 @@ packages:
nodemailer:
optional: true
- next-intl@4.3.5:
- resolution: {integrity: sha512-tT3SltfpPOCAQ9kVNr+8t6FUtVf8G0WFlJcVc8zj4WCMfuF8XFk4gZCN/MtjgDgkUISw5aKamOClJB4EsV95WQ==}
+ next-intl@4.3.7:
+ resolution: {integrity: sha512-2bVsHSnSj5boJMaUR5SY6bu3khFtNf0he+s1nj23PFGWPCYWHPqa+FOe4YCzkKw1BpB+3UkUn1PNqJCdZNpWwg==}
peerDependencies:
next: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0
@@ -7999,8 +8022,8 @@ packages:
typescript:
optional: true
- next@15.5.0:
- resolution: {integrity: sha512-N1lp9Hatw3a9XLt0307lGB4uTKsXDhyOKQo7uYMzX4i0nF/c27grcGXkLdb7VcT8QPYLBa8ouIyEoUQJ2OyeNQ==}
+ next@15.5.2:
+ resolution: {integrity: sha512-H8Otr7abj1glFhbGnvUt3gz++0AF1+QoCXEBmd/6aKbfdFwrn0LpA836Ed5+00va/7HQSDD+mOoVhn3tNy3e/Q==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
hasBin: true
peerDependencies:
@@ -8065,8 +8088,8 @@ packages:
resolution: {integrity: sha512-VBlAiynj3VMLrotgwOS3OyECFxas5y7ltLcK4t41lMUZeaK15Ym4QRkqN0EQKAFL42q9i21EPKjzLUPfltR72A==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- node-fetch-native@1.6.6:
- resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==}
+ node-fetch-native@1.6.7:
+ resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==}
node-fetch@2.7.0:
resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
@@ -8610,10 +8633,6 @@ packages:
resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
engines: {node: ^10 || ^12 || >=14}
- postcss@8.4.47:
- resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==}
- engines: {node: ^10 || ^12 || >=14}
-
postcss@8.5.6:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
@@ -8830,8 +8849,8 @@ packages:
randombytes@2.1.0:
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
- rate-limiter-flexible@4.0.1:
- resolution: {integrity: sha512-2/dGHpDFpeA0+755oUkW+EKyklqLS9lu0go9pDsbhqQjZcxfRyJ6LA4JI0+HAdZ2bemD/oOjUeZQB2lCZqXQfQ==}
+ rate-limiter-flexible@7.3.0:
+ resolution: {integrity: sha512-0R5gYs0m+jLGqcE6wxuvht+zuch0h4Un+JqVCEWaQajJGCWU2HzY0IFDp8WS8NNqIpviJOLmkZ5VKmzW/8q5dA==}
raw-body@2.5.2:
resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
@@ -8896,8 +8915,8 @@ packages:
'@types/react': '>=18'
react: '>=18'
- react-number-format@5.4.3:
- resolution: {integrity: sha512-VCY5hFg/soBighAoGcdE+GagkJq0230qN6jcS5sp8wQX1qy1fYN/RX7/BXkrs0oyzzwqR8/+eSUrqXbGeywdUQ==}
+ react-number-format@5.4.4:
+ resolution: {integrity: sha512-wOmoNZoOpvMminhifQYiYSTCLUDOiUbBunrMrMjA+dV52sY+vck1S4UhR6PkgnoCquvvMSeJjErXZ4qSaWCliA==}
peerDependencies:
react: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -8928,8 +8947,8 @@ packages:
'@types/react':
optional: true
- react-remove-scroll@2.6.2:
- resolution: {integrity: sha512-KmONPx5fnlXYJQqC62Q+lwIeAk64ws/cUw6omIumRzMRPqgnYqhSSti99nbj0Ry13bv7dF+BKn7NB+OqkdZGTw==}
+ react-remove-scroll@2.7.1:
+ resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==}
engines: {node: '>=10'}
peerDependencies:
'@types/react': '*'
@@ -9247,8 +9266,8 @@ packages:
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
- sass@1.91.0:
- resolution: {integrity: sha512-aFOZHGf+ur+bp1bCHZ+u8otKGh77ZtmFyXDo4tlYvT7PWql41Kwd8wdkPqhhT+h2879IVblcHFglIMofsFd1EA==}
+ sass@1.92.1:
+ resolution: {integrity: sha512-ffmsdbwqb3XeyR8jJR6KelIXARM9bFQe8A6Q3W4Klmwy5Ckd5gz7jgUNHo4UOqutU5Sk1DtKLbpDP0nLCg1xqQ==}
engines: {node: '>=14.0.0'}
hasBin: true
@@ -9273,8 +9292,8 @@ packages:
secure-json-parse@4.0.0:
resolution: {integrity: sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA==}
- semantic-release@24.2.7:
- resolution: {integrity: sha512-g7RssbTAbir1k/S7uSwSVZFfFXwpomUB9Oas0+xi9KStSCmeDXcA7rNhiskjLqvUe/Evhx8fVCT16OSa34eM5g==}
+ semantic-release@24.2.8:
+ resolution: {integrity: sha512-uvoLiKEB/AvvA3SCPE78cd90nVJXn220kkEA6sNGzDpas4s7pe4OgYWvhfR0lvWBdBH/T0RFCI6U+GvcT2CypQ==}
engines: {node: '>=20.8.1'}
hasBin: true
@@ -9708,11 +9727,11 @@ packages:
swagger-client@3.35.5:
resolution: {integrity: sha512-ayCrpDAgm5jIdq1kmcVWJRfp27cqU9tSRiAfKg3BKeplOmvu3+lKTPPtz4x1uI8v5l5/92Aopvq0EzRkXEr7Rw==}
- swagger-ui-react@5.27.1:
- resolution: {integrity: sha512-wwDoavIeJI/Pwiavn32FMJ5dfptz0BAOKjSrj7EdU22QdP3gdk9+MZHdzzjxWURmVj0kc0XoQfsFgjln0toJaw==}
+ swagger-ui-react@5.28.1:
+ resolution: {integrity: sha512-JfLZvbCpsjwUnYKx+Q1YfkrgM7gD6Zb7HnO8/DwFNo5xppwC3MbL27/5MhPkmDyMZ669r6CNiJ0SALiivs7iQg==}
peerDependencies:
- react: '>=16.8.0 <19'
- react-dom: '>=16.8.0 <19'
+ react: '>=16.8.0 <20'
+ react-dom: '>=16.8.0 <20'
swap-case@1.1.2:
resolution: {integrity: sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==}
@@ -9731,9 +9750,16 @@ packages:
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
engines: {node: '>=6'}
+ tar-fs@2.1.3:
+ resolution: {integrity: sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==}
+
tar-fs@3.1.0:
resolution: {integrity: sha512-5Mty5y/sOF1YWj1J6GiBodjlDc05CUR8PKXrsnFAiSG0xA+GHeWLovaZPYUDXkH/1iKRf2+M5+OrRgzC7O9b7w==}
+ tar-stream@2.2.0:
+ resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
+ engines: {node: '>=6'}
+
tar-stream@3.1.7:
resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
@@ -9815,6 +9841,10 @@ packages:
resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
engines: {node: '>=12.0.0'}
+ tinyglobby@0.2.15:
+ resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
+ engines: {node: '>=12.0.0'}
+
tinygradient@1.1.5:
resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==}
@@ -9839,10 +9869,17 @@ packages:
tldts-core@6.1.69:
resolution: {integrity: sha512-nygxy9n2PBUFQUtAXAc122gGo+04/j5qr5TGQFZTHafTKYvmARVXt2cA5rgero2/dnXUfkdPtiJoKmrd3T+wdA==}
+ tldts-core@7.0.12:
+ resolution: {integrity: sha512-3K76aXywJFduGRsOYoY5JzINLs/WMlOkeDwPL+8OCPq2Rh39gkSDtWAxdJQlWjpun/xF/LHf29yqCi6VC/rHDA==}
+
tldts@6.1.69:
resolution: {integrity: sha512-Oh/CqRQ1NXNY7cy9NkTPUauOWiTro0jEYZTioGbOmcQh6EC45oribyIMJp0OJO3677r13tO6SKdWoGZUx2BDFw==}
hasBin: true
+ tldts@7.0.12:
+ resolution: {integrity: sha512-M9ZQBPp6FyqhMcl233vHYyYRkxXOA1SKGlnq13S0mJdUhRSwr2w6I8rlchPL73wBwRlyIZpFvpu2VcdSMWLYXw==}
+ hasBin: true
+
tmp@0.2.4:
resolution: {integrity: sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==}
engines: {node: '>=14.14'}
@@ -9878,6 +9915,10 @@ packages:
resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==}
engines: {node: '>=16'}
+ tough-cookie@6.0.0:
+ resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==}
+ engines: {node: '>=16'}
+
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
@@ -9977,6 +10018,11 @@ packages:
resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==}
engines: {node: '>=0.6.x'}
+ tsx@4.20.4:
+ resolution: {integrity: sha512-yyxBKfORQ7LuRt/BQKBXrpcq59ZvSW0XxwfjAt3w2/8PmdxaFzijtMhTawprSHhpzeM5BgU2hXHG3lklIERZXg==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
tsx@4.20.5:
resolution: {integrity: sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==}
engines: {node: '>=18.0.0'}
@@ -10042,14 +10088,6 @@ packages:
resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
engines: {node: '>=12.20'}
- type-fest@4.30.2:
- resolution: {integrity: sha512-UJShLPYi1aWqCdq9HycOL/gwsuqda1OISdBO3t8RlXQC4QvtuIz4b5FCfe2dQIWEpmlRExKmcTBfP1r9bhY7ig==}
- engines: {node: '>=16'}
-
- type-fest@4.40.0:
- resolution: {integrity: sha512-ABHZ2/tS2JkvH1PEjxFDTUWC8dB5OsIGZP4IFLhR293GqT5Y5qB1WwL2kMPYhQW9DVgVD8Hd7I8gjwPIf5GFkw==}
- engines: {node: '>=16'}
-
type-fest@4.41.0:
resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
engines: {node: '>=16'}
@@ -10096,8 +10134,8 @@ packages:
types-ramda@0.30.1:
resolution: {integrity: sha512-1HTsf5/QVRmLzcGfldPFvkVsAdi1db1BBKzi7iW3KBUlOICg/nKnFS+jGqDJS3YD8VsWbAh7JiHeBvbsw8RPxA==}
- typescript-eslint@8.41.0:
- resolution: {integrity: sha512-n66rzs5OBXW3SFSnZHr2T685q1i4ODm2nulFJhMZBotaTavsS8TrI3d7bDlRSs9yWo7HmyWrN9qDu14Qv7Y0Dw==}
+ typescript-eslint@8.43.0:
+ resolution: {integrity: sha512-FyRGJKUGvcFekRRcBKFBlAhnp4Ng8rhe8tuvvkR9OiU0gfd4vyvTRQHEckO6VDlH57jbeUQem2IpqPq9kLJH+w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -10111,9 +10149,6 @@ packages:
uc.micro@2.1.0:
resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
- ufo@1.5.4:
- resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
-
ufo@1.6.1:
resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
@@ -10122,8 +10157,8 @@ packages:
engines: {node: '>=0.8.0'}
hasBin: true
- uint8array-extras@1.4.0:
- resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==}
+ uint8array-extras@1.5.0:
+ resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==}
engines: {node: '>=18'}
unbox-primitive@1.0.2:
@@ -10269,8 +10304,8 @@ packages:
peerDependencies:
react: '>=16.13'
- use-intl@4.3.5:
- resolution: {integrity: sha512-qyL1TZNesVbzj/75ZbYsi+xzNSiFqp5rIVsiAN0JT8rPMSjX0/3KQz76aJIrngI1/wIQdVYFVdImWh5yAv+dWA==}
+ use-intl@4.3.7:
+ resolution: {integrity: sha512-IkRFatZEIAm+JfFBAU2Bleb3f2DVt8WldIn5EZVSVu4D5U0QYq2hwB28LHAt15TDhfQw5sdEPsDpvJ2Uj8HjqA==}
peerDependencies:
react: ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0
@@ -10292,12 +10327,12 @@ packages:
'@types/react':
optional: true
- use-sidecar@1.1.2:
- resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==}
+ use-sidecar@1.1.3:
+ resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==}
engines: {node: '>=10'}
peerDependencies:
- '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
@@ -10368,13 +10403,13 @@ packages:
vite-tsconfig-paths@5.1.4:
resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==}
peerDependencies:
- vite: '>=7.1.3'
+ vite: '>=7.1.5'
peerDependenciesMeta:
vite:
optional: true
- vite@7.1.3:
- resolution: {integrity: sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==}
+ vite@7.1.5:
+ resolution: {integrity: sha512-4cKBO9wR75r0BeIWWWId9XK9Lj6La5X846Zw9dFfzMRw38IlTk2iCcUt6hsyiDRcPidc55ZParFYDXi0nXOeLQ==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
@@ -10703,8 +10738,8 @@ packages:
resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==}
engines: {node: '>= 14'}
- zod-form-data@3.0.0:
- resolution: {integrity: sha512-jTQbmXQU5wMfI+ERZH6EuATzeD9FEOviPasLL2hCUP+FcLagXLtboUM95PHsSOFseL8Nv91YKlwln3zo1sAS2g==}
+ zod-form-data@3.0.1:
+ resolution: {integrity: sha512-uwSrDzpLDoXeAxePjPHrjjMelE5pk5zL5JcwLFISvqidGjtPl7hcheH584xGcS76c9IRHq6tqdGkf+A4eKO6Cw==}
peerDependencies:
zod: '>= 3.25.0'
@@ -10749,7 +10784,7 @@ snapshots:
'@csstools/css-color-parser': 3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
'@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
'@csstools/css-tokenizer': 3.0.3
- lru-cache: 11.0.2
+ lru-cache: 11.1.0
'@auth/core@0.40.0':
dependencies:
@@ -10795,7 +10830,7 @@ snapshots:
'@babel/generator': 7.26.2
'@babel/helper-compilation-targets': 7.25.9
'@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)
- '@babel/helpers': 7.28.3
+ '@babel/helpers': 7.28.4
'@babel/parser': 7.26.2
'@babel/template': 7.25.9
'@babel/traverse': 7.25.9
@@ -10836,14 +10871,6 @@ snapshots:
'@jridgewell/trace-mapping': 0.3.25
jsesc: 3.0.2
- '@babel/generator@7.28.0':
- dependencies:
- '@babel/parser': 7.28.0
- '@babel/types': 7.28.1
- '@jridgewell/gen-mapping': 0.3.12
- '@jridgewell/trace-mapping': 0.3.29
- jsesc: 3.0.2
-
'@babel/generator@7.28.3':
dependencies:
'@babel/parser': 7.28.3
@@ -10872,15 +10899,15 @@ snapshots:
'@babel/helper-module-imports@7.25.9':
dependencies:
- '@babel/traverse': 7.28.0
- '@babel/types': 7.28.2
+ '@babel/traverse': 7.28.3
+ '@babel/types': 7.28.4
transitivePeerDependencies:
- supports-color
'@babel/helper-module-imports@7.27.1':
dependencies:
'@babel/traverse': 7.28.3
- '@babel/types': 7.28.2
+ '@babel/types': 7.28.4
transitivePeerDependencies:
- supports-color
@@ -10889,7 +10916,7 @@ snapshots:
'@babel/core': 7.26.0
'@babel/helper-module-imports': 7.25.9
'@babel/helper-validator-identifier': 7.25.9
- '@babel/traverse': 7.28.0
+ '@babel/traverse': 7.28.3
transitivePeerDependencies:
- supports-color
@@ -10919,16 +10946,17 @@ snapshots:
'@babel/helpers@7.28.3':
dependencies:
'@babel/template': 7.27.2
- '@babel/types': 7.28.2
+ '@babel/types': 7.28.4
+
+ '@babel/helpers@7.28.4':
+ dependencies:
+ '@babel/template': 7.27.2
+ '@babel/types': 7.28.4
'@babel/parser@7.26.2':
dependencies:
'@babel/types': 7.28.2
- '@babel/parser@7.28.0':
- dependencies:
- '@babel/types': 7.28.1
-
'@babel/parser@7.28.3':
dependencies:
'@babel/types': 7.28.2
@@ -10947,7 +10975,7 @@ snapshots:
dependencies:
core-js-pure: 3.38.1
- '@babel/runtime@7.28.3': {}
+ '@babel/runtime@7.28.4': {}
'@babel/template@7.25.9':
dependencies:
@@ -10959,12 +10987,12 @@ snapshots:
dependencies:
'@babel/code-frame': 7.27.1
'@babel/parser': 7.28.3
- '@babel/types': 7.28.2
+ '@babel/types': 7.28.4
'@babel/traverse@7.25.9':
dependencies:
'@babel/code-frame': 7.26.2
- '@babel/generator': 7.28.0
+ '@babel/generator': 7.28.3
'@babel/parser': 7.28.3
'@babel/template': 7.25.9
'@babel/types': 7.28.2
@@ -10973,18 +11001,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@babel/traverse@7.28.0':
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/generator': 7.28.0
- '@babel/helper-globals': 7.28.0
- '@babel/parser': 7.28.0
- '@babel/template': 7.27.2
- '@babel/types': 7.28.1
- debug: 4.4.1
- transitivePeerDependencies:
- - supports-color
-
'@babel/traverse@7.28.3':
dependencies:
'@babel/code-frame': 7.27.1
@@ -11002,12 +11018,12 @@ snapshots:
'@babel/helper-string-parser': 7.25.9
'@babel/helper-validator-identifier': 7.25.9
- '@babel/types@7.28.1':
+ '@babel/types@7.28.2':
dependencies:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.27.1
- '@babel/types@7.28.2':
+ '@babel/types@7.28.4':
dependencies:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.27.1
@@ -11062,48 +11078,50 @@ snapshots:
'@csstools/css-tokenizer@3.0.3': {}
- '@ctrl/deluge@7.1.1':
+ '@ctrl/deluge@7.2.0':
dependencies:
'@ctrl/magnet-link': 4.0.2
- '@ctrl/shared-torrent': 6.2.1
- node-fetch-native: 1.6.6
+ '@ctrl/shared-torrent': 6.3.0(ofetch@1.4.1)
+ node-fetch-native: 1.6.7
ofetch: 1.4.1
- tough-cookie: 5.1.2
+ tough-cookie: 6.0.0
type-fest: 4.41.0
ufo: 1.6.1
- uint8array-extras: 1.4.0
+ uint8array-extras: 1.5.0
'@ctrl/magnet-link@4.0.2':
dependencies:
rfc4648: 1.5.3
- uint8array-extras: 1.4.0
+ uint8array-extras: 1.5.0
- '@ctrl/qbittorrent@9.6.0':
+ '@ctrl/qbittorrent@9.7.0':
dependencies:
'@ctrl/magnet-link': 4.0.2
- '@ctrl/shared-torrent': 6.2.1
+ '@ctrl/shared-torrent': 6.3.0(ofetch@1.4.1)
'@ctrl/torrent-file': 4.1.0
cookie: 1.0.2
- node-fetch-native: 1.6.6
+ node-fetch-native: 1.6.7
ofetch: 1.4.1
- type-fest: 4.40.0
+ type-fest: 4.41.0
ufo: 1.6.1
- uint8array-extras: 1.4.0
+ uint8array-extras: 1.5.0
- '@ctrl/shared-torrent@6.2.1': {}
+ '@ctrl/shared-torrent@6.3.0(ofetch@1.4.1)':
+ dependencies:
+ ofetch: 1.4.1
'@ctrl/torrent-file@4.1.0':
dependencies:
- uint8array-extras: 1.4.0
+ uint8array-extras: 1.5.0
- '@ctrl/transmission@7.2.0':
+ '@ctrl/transmission@7.3.0':
dependencies:
'@ctrl/magnet-link': 4.0.2
- '@ctrl/shared-torrent': 6.2.1
+ '@ctrl/shared-torrent': 6.3.0(ofetch@1.4.1)
ofetch: 1.4.1
- type-fest: 4.30.2
- ufo: 1.5.4
- uint8array-extras: 1.4.0
+ type-fest: 4.41.0
+ ufo: 1.6.1
+ uint8array-extras: 1.5.0
'@dabh/diagnostics@2.0.3':
dependencies:
@@ -11242,9 +11260,9 @@ snapshots:
'@esbuild/win32-x64@0.25.9':
optional: true
- '@eslint-community/eslint-utils@4.7.0(eslint@9.34.0)':
+ '@eslint-community/eslint-utils@4.9.0(eslint@9.35.0)':
dependencies:
- eslint: 9.34.0
+ eslint: 9.35.0
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
@@ -11277,7 +11295,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@eslint/js@9.34.0': {}
+ '@eslint/js@9.35.0': {}
'@eslint/object-schema@2.1.6': {}
@@ -11286,7 +11304,7 @@ snapshots:
'@eslint/core': 0.15.2
levn: 0.4.1
- '@extractus/feed-extractor@7.1.6':
+ '@extractus/feed-extractor@7.1.7':
dependencies:
'@ndaidong/bellajs': 12.0.1
cross-fetch: 4.1.0
@@ -11318,30 +11336,30 @@ snapshots:
'@fastify/forwarded': 3.0.0
ipaddr.js: 2.2.0
- '@floating-ui/core@1.6.8':
+ '@floating-ui/core@1.7.3':
dependencies:
- '@floating-ui/utils': 0.2.8
+ '@floating-ui/utils': 0.2.10
- '@floating-ui/dom@1.6.11':
+ '@floating-ui/dom@1.7.4':
dependencies:
- '@floating-ui/core': 1.6.8
- '@floating-ui/utils': 0.2.8
+ '@floating-ui/core': 1.7.3
+ '@floating-ui/utils': 0.2.10
- '@floating-ui/react-dom@2.1.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@floating-ui/react-dom@2.1.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
dependencies:
- '@floating-ui/dom': 1.6.11
+ '@floating-ui/dom': 1.7.4
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
- '@floating-ui/react@0.26.28(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@floating-ui/react@0.27.16(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
dependencies:
- '@floating-ui/react-dom': 2.1.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@floating-ui/utils': 0.2.8
+ '@floating-ui/react-dom': 2.1.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@floating-ui/utils': 0.2.10
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
tabbable: 6.2.0
- '@floating-ui/utils@0.2.8': {}
+ '@floating-ui/utils@0.2.10': {}
'@formatjs/ecma402-abstract@2.2.0':
dependencies:
@@ -11368,23 +11386,23 @@ snapshots:
dependencies:
tslib: 2.8.1
- '@gitbeaker/core@43.4.0':
+ '@gitbeaker/core@43.5.0':
dependencies:
- '@gitbeaker/requester-utils': 43.4.0
+ '@gitbeaker/requester-utils': 43.5.0
qs: 6.14.0
xcase: 2.0.1
- '@gitbeaker/requester-utils@43.4.0':
+ '@gitbeaker/requester-utils@43.5.0':
dependencies:
picomatch-browser: 2.2.6
qs: 6.14.0
- rate-limiter-flexible: 4.0.1
+ rate-limiter-flexible: 7.3.0
xcase: 2.0.1
- '@gitbeaker/rest@43.4.0':
+ '@gitbeaker/rest@43.5.0':
dependencies:
- '@gitbeaker/core': 43.4.0
- '@gitbeaker/requester-utils': 43.4.0
+ '@gitbeaker/core': 43.5.0
+ '@gitbeaker/requester-utils': 43.5.0
'@grpc/grpc-js@1.12.5':
dependencies:
@@ -11415,9 +11433,9 @@ snapshots:
- undici
- utf-8-validate
- '@hono/node-server@1.13.0(hono@4.9.5)':
+ '@hono/node-server@1.13.0(hono@4.9.7)':
dependencies:
- hono: 4.9.5
+ hono: 4.9.7
'@humanfs/core@0.19.1': {}
@@ -11432,12 +11450,12 @@ snapshots:
'@humanwhocodes/retry@0.4.2': {}
- '@ianvs/prettier-plugin-sort-imports@4.6.2(prettier@3.6.2)':
+ '@ianvs/prettier-plugin-sort-imports@4.7.0(prettier@3.6.2)':
dependencies:
- '@babel/generator': 7.28.0
- '@babel/parser': 7.28.0
- '@babel/traverse': 7.28.0
- '@babel/types': 7.28.1
+ '@babel/generator': 7.28.3
+ '@babel/parser': 7.28.3
+ '@babel/traverse': 7.28.3
+ '@babel/types': 7.28.2
prettier: 3.6.2
semver: 7.7.2
transitivePeerDependencies:
@@ -11548,9 +11566,9 @@ snapshots:
'@istanbuljs/schema@0.1.3': {}
- '@jellyfin/sdk@0.11.0(axios@1.11.0)':
+ '@jellyfin/sdk@0.11.0(axios@1.12.1)':
dependencies:
- axios: 1.11.0
+ axios: 1.12.1
'@jridgewell/gen-mapping@0.3.12':
dependencies:
@@ -11608,7 +11626,7 @@ snapshots:
'@kubernetes/client-node@1.3.0':
dependencies:
'@types/js-yaml': 4.0.9
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@types/node-fetch': 2.6.12
'@types/stream-buffers': 3.0.7
form-data: 4.0.4
@@ -11641,91 +11659,91 @@ snapshots:
js-base64: 3.7.7
optional: true
- '@mantine/charts@8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(recharts@2.15.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))':
+ '@mantine/charts@8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(recharts@2.15.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))':
dependencies:
- '@mantine/core': 8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@mantine/hooks': 8.2.7(react@19.1.1)
+ '@mantine/core': 8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@mantine/hooks': 8.3.1(react@19.1.1)
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
recharts: 2.15.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@mantine/colors-generator@8.2.7(chroma-js@3.1.2)':
+ '@mantine/colors-generator@8.3.1(chroma-js@3.1.2)':
dependencies:
chroma-js: 3.1.2
- '@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
dependencies:
- '@floating-ui/react': 0.26.28(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@mantine/hooks': 8.2.7(react@19.1.1)
+ '@floating-ui/react': 0.27.16(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@mantine/hooks': 8.3.1(react@19.1.1)
clsx: 2.1.1
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
- react-number-format: 5.4.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- react-remove-scroll: 2.6.2(@types/react@19.1.12)(react@19.1.1)
+ react-number-format: 5.4.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ react-remove-scroll: 2.7.1(@types/react@19.1.12)(react@19.1.1)
react-textarea-autosize: 8.5.9(@types/react@19.1.12)(react@19.1.1)
type-fest: 4.41.0
transitivePeerDependencies:
- '@types/react'
- '@mantine/dates@8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@mantine/dates@8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(dayjs@1.11.18)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
dependencies:
- '@mantine/core': 8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@mantine/hooks': 8.2.7(react@19.1.1)
+ '@mantine/core': 8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@mantine/hooks': 8.3.1(react@19.1.1)
clsx: 2.1.1
- dayjs: 1.11.13
+ dayjs: 1.11.18
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
- '@mantine/dropzone@8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@mantine/dropzone@8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
dependencies:
- '@mantine/core': 8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@mantine/hooks': 8.2.7(react@19.1.1)
+ '@mantine/core': 8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@mantine/hooks': 8.3.1(react@19.1.1)
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
react-dropzone: 14.3.8(react@19.1.1)
- '@mantine/form@8.2.7(react@19.1.1)':
+ '@mantine/form@8.3.1(react@19.1.1)':
dependencies:
fast-deep-equal: 3.1.3
klona: 2.0.6
react: 19.1.1
- '@mantine/hooks@8.2.7(react@19.1.1)':
+ '@mantine/hooks@8.3.1(react@19.1.1)':
dependencies:
react: 19.1.1
- '@mantine/modals@8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@mantine/modals@8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
dependencies:
- '@mantine/core': 8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@mantine/hooks': 8.2.7(react@19.1.1)
+ '@mantine/core': 8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@mantine/hooks': 8.3.1(react@19.1.1)
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
- '@mantine/notifications@8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@mantine/notifications@8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
dependencies:
- '@mantine/core': 8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@mantine/hooks': 8.2.7(react@19.1.1)
- '@mantine/store': 8.2.7(react@19.1.1)
+ '@mantine/core': 8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@mantine/hooks': 8.3.1(react@19.1.1)
+ '@mantine/store': 8.3.1(react@19.1.1)
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
react-transition-group: 4.4.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@mantine/spotlight@8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@mantine/spotlight@8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
dependencies:
- '@mantine/core': 8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@mantine/hooks': 8.2.7(react@19.1.1)
- '@mantine/store': 8.2.7(react@19.1.1)
+ '@mantine/core': 8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@mantine/hooks': 8.3.1(react@19.1.1)
+ '@mantine/store': 8.3.1(react@19.1.1)
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
- '@mantine/store@8.2.7(react@19.1.1)':
+ '@mantine/store@8.3.1(react@19.1.1)':
dependencies:
react: 19.1.1
- '@mantine/tiptap@8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(@tiptap/extension-link@2.26.1(@tiptap/core@2.26.1(@tiptap/pm@2.26.1))(@tiptap/pm@2.26.1))(@tiptap/react@2.26.1(@tiptap/core@2.26.1(@tiptap/pm@2.26.1))(@tiptap/pm@2.26.1)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@mantine/tiptap@8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(@tiptap/extension-link@2.26.1(@tiptap/core@2.26.1(@tiptap/pm@2.26.1))(@tiptap/pm@2.26.1))(@tiptap/react@2.26.1(@tiptap/core@2.26.1(@tiptap/pm@2.26.1))(@tiptap/pm@2.26.1)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
dependencies:
- '@mantine/core': 8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@mantine/hooks': 8.2.7(react@19.1.1)
+ '@mantine/core': 8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@mantine/hooks': 8.3.1(react@19.1.1)
'@tiptap/extension-link': 2.26.1(@tiptap/core@2.26.1(@tiptap/pm@2.26.1))(@tiptap/pm@2.26.1)
'@tiptap/react': 2.26.1(@tiptap/core@2.26.1(@tiptap/pm@2.26.1))(@tiptap/pm@2.26.1)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
react: 19.1.1
@@ -11751,7 +11769,7 @@ snapshots:
'@axiomhq/js': 1.0.0-rc.3
'@babel/core': 7.26.0
'@babel/types': 7.26.0
- '@hono/node-server': 1.13.0(hono@4.9.5)
+ '@hono/node-server': 1.13.0(hono@4.9.7)
'@million/install': 1.0.14
'@rollup/pluginutils': 5.1.0
'@rrweb/types': 2.0.0-alpha.16
@@ -11759,7 +11777,7 @@ snapshots:
ci-info: 4.0.0
esbuild: 0.25.9
faster-babel-types: 0.1.0(@babel/types@7.26.0)
- hono: 4.9.5
+ hono: 4.9.7
isomorphic-fetch: 3.0.0
nanoid: 5.1.5
ohash: 1.1.4
@@ -11786,34 +11804,34 @@ snapshots:
'@ndaidong/bellajs@12.0.1': {}
- '@next/env@15.5.0': {}
+ '@next/env@15.5.2': {}
- '@next/eslint-plugin-next@15.5.0':
+ '@next/eslint-plugin-next@15.5.2':
dependencies:
fast-glob: 3.3.1
- '@next/swc-darwin-arm64@15.5.0':
+ '@next/swc-darwin-arm64@15.5.2':
optional: true
- '@next/swc-darwin-x64@15.5.0':
+ '@next/swc-darwin-x64@15.5.2':
optional: true
- '@next/swc-linux-arm64-gnu@15.5.0':
+ '@next/swc-linux-arm64-gnu@15.5.2':
optional: true
- '@next/swc-linux-arm64-musl@15.5.0':
+ '@next/swc-linux-arm64-musl@15.5.2':
optional: true
- '@next/swc-linux-x64-gnu@15.5.0':
+ '@next/swc-linux-x64-gnu@15.5.2':
optional: true
- '@next/swc-linux-x64-musl@15.5.0':
+ '@next/swc-linux-x64-musl@15.5.2':
optional: true
- '@next/swc-win32-arm64-msvc@15.5.0':
+ '@next/swc-win32-arm64-msvc@15.5.2':
optional: true
- '@next/swc-win32-x64-msvc@15.5.0':
+ '@next/swc-win32-x64-msvc@15.5.2':
optional: true
'@noble/hashes@1.5.0': {}
@@ -11830,9 +11848,9 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.17.1
- '@octokit/app@16.0.1':
+ '@octokit/app@16.1.0':
dependencies:
- '@octokit/auth-app': 8.0.1
+ '@octokit/auth-app': 8.1.0
'@octokit/auth-unauthenticated': 7.0.1
'@octokit/core': 7.0.2
'@octokit/oauth-app': 8.0.1
@@ -11840,7 +11858,7 @@ snapshots:
'@octokit/types': 14.1.0
'@octokit/webhooks': 14.0.0
- '@octokit/auth-app@8.0.1':
+ '@octokit/auth-app@8.1.0':
dependencies:
'@octokit/auth-oauth-app': 9.0.1
'@octokit/auth-oauth-user': 6.0.0
@@ -11887,7 +11905,7 @@ snapshots:
'@octokit/graphql': 9.0.1
'@octokit/request': 10.0.2
'@octokit/request-error': 7.0.0
- '@octokit/types': 14.0.0
+ '@octokit/types': 14.1.0
before-after-hook: 4.0.0
universal-user-agent: 7.0.2
@@ -11946,13 +11964,13 @@ snapshots:
dependencies:
'@octokit/core': 7.0.2
'@octokit/request-error': 7.0.0
- '@octokit/types': 14.0.0
+ '@octokit/types': 14.1.0
bottleneck: 2.19.5
'@octokit/plugin-throttling@11.0.1(@octokit/core@7.0.2)':
dependencies:
'@octokit/core': 7.0.2
- '@octokit/types': 14.0.0
+ '@octokit/types': 14.1.0
bottleneck: 2.19.5
'@octokit/request-error@7.0.0':
@@ -12095,7 +12113,7 @@ snapshots:
'@remirror/core-constants@3.0.0': {}
- '@rolldown/pluginutils@1.0.0-beta.32': {}
+ '@rolldown/pluginutils@1.0.0-beta.34': {}
'@rollup/pluginutils@5.1.0':
dependencies:
@@ -12180,15 +12198,15 @@ snapshots:
'@sec-ant/readable-stream@0.4.1': {}
- '@semantic-release/changelog@6.0.3(semantic-release@24.2.7(typescript@5.9.2))':
+ '@semantic-release/changelog@6.0.3(semantic-release@24.2.8(typescript@5.9.2))':
dependencies:
'@semantic-release/error': 3.0.0
aggregate-error: 3.1.0
fs-extra: 11.2.0
lodash: 4.17.21
- semantic-release: 24.2.7(typescript@5.9.2)
+ semantic-release: 24.2.8(typescript@5.9.2)
- '@semantic-release/commit-analyzer@13.0.1(semantic-release@24.2.7(typescript@5.9.2))':
+ '@semantic-release/commit-analyzer@13.0.1(semantic-release@24.2.8(typescript@5.9.2))':
dependencies:
conventional-changelog-angular: 8.0.0
conventional-changelog-writer: 8.0.0
@@ -12198,7 +12216,7 @@ snapshots:
import-from-esm: 2.0.0
lodash-es: 4.17.21
micromatch: 4.0.8
- semantic-release: 24.2.7(typescript@5.9.2)
+ semantic-release: 24.2.8(typescript@5.9.2)
transitivePeerDependencies:
- supports-color
@@ -12206,7 +12224,7 @@ snapshots:
'@semantic-release/error@4.0.0': {}
- '@semantic-release/git@10.0.1(semantic-release@24.2.7(typescript@5.9.2))':
+ '@semantic-release/git@10.0.1(semantic-release@24.2.8(typescript@5.9.2))':
dependencies:
'@semantic-release/error': 3.0.0
aggregate-error: 3.1.0
@@ -12216,11 +12234,11 @@ snapshots:
lodash: 4.17.21
micromatch: 4.0.8
p-reduce: 2.1.0
- semantic-release: 24.2.7(typescript@5.9.2)
+ semantic-release: 24.2.8(typescript@5.9.2)
transitivePeerDependencies:
- supports-color
- '@semantic-release/github@11.0.4(semantic-release@24.2.7(typescript@5.9.2))':
+ '@semantic-release/github@11.0.5(semantic-release@24.2.8(typescript@5.9.2))':
dependencies:
'@octokit/core': 7.0.2
'@octokit/plugin-paginate-rest': 13.0.0(@octokit/core@7.0.2)
@@ -12237,12 +12255,12 @@ snapshots:
lodash-es: 4.17.21
mime: 4.0.4
p-filter: 4.1.0
- semantic-release: 24.2.7(typescript@5.9.2)
+ semantic-release: 24.2.8(typescript@5.9.2)
url-join: 5.0.0
transitivePeerDependencies:
- supports-color
- '@semantic-release/npm@12.0.2(semantic-release@24.2.7(typescript@5.9.2))':
+ '@semantic-release/npm@12.0.2(semantic-release@24.2.8(typescript@5.9.2))':
dependencies:
'@semantic-release/error': 4.0.0
aggregate-error: 5.0.0
@@ -12255,23 +12273,23 @@ snapshots:
rc: 1.2.8
read-pkg: 9.0.1
registry-auth-token: 5.0.2
- semantic-release: 24.2.7(typescript@5.9.2)
+ semantic-release: 24.2.8(typescript@5.9.2)
semver: 7.7.1
tempy: 3.1.0
- '@semantic-release/release-notes-generator@14.0.3(semantic-release@24.2.7(typescript@5.9.2))':
+ '@semantic-release/release-notes-generator@14.1.0(semantic-release@24.2.8(typescript@5.9.2))':
dependencies:
conventional-changelog-angular: 8.0.0
conventional-changelog-writer: 8.0.0
conventional-commits-filter: 5.0.0
conventional-commits-parser: 6.0.0
- debug: 4.4.0
+ debug: 4.4.1
get-stream: 7.0.1
import-from-esm: 2.0.0
into-stream: 7.0.0
lodash-es: 4.17.21
read-package-up: 11.0.0
- semantic-release: 24.2.7(typescript@5.9.2)
+ semantic-release: 24.2.8(typescript@5.9.2)
transitivePeerDependencies:
- supports-color
@@ -12607,7 +12625,7 @@ snapshots:
'@swagger-api/apidom-core': 1.0.0-beta.41
'@swagger-api/apidom-error': 1.0.0-beta.41
'@types/ramda': 0.30.2
- axios: 1.9.0
+ axios: 1.11.0
minimatch: 7.4.6
process: 0.11.10
ramda: 0.30.1
@@ -12673,25 +12691,25 @@ snapshots:
dependencies:
remove-accents: 0.5.0
- '@tanstack/query-core@5.85.5': {}
+ '@tanstack/query-core@5.87.1': {}
- '@tanstack/query-devtools@5.84.0': {}
+ '@tanstack/query-devtools@5.86.0': {}
- '@tanstack/react-query-devtools@5.85.5(@tanstack/react-query@5.85.5(react@19.1.1))(react@19.1.1)':
+ '@tanstack/react-query-devtools@5.87.1(@tanstack/react-query@5.87.1(react@19.1.1))(react@19.1.1)':
dependencies:
- '@tanstack/query-devtools': 5.84.0
- '@tanstack/react-query': 5.85.5(react@19.1.1)
+ '@tanstack/query-devtools': 5.86.0
+ '@tanstack/react-query': 5.87.1(react@19.1.1)
react: 19.1.1
- '@tanstack/react-query-next-experimental@5.85.5(@tanstack/react-query@5.85.5(react@19.1.1))(next@15.5.0(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0))(react@19.1.1)':
+ '@tanstack/react-query-next-experimental@5.87.1(@tanstack/react-query@5.87.1(react@19.1.1))(next@15.5.2(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1))(react@19.1.1)':
dependencies:
- '@tanstack/react-query': 5.85.5(react@19.1.1)
- next: 15.5.0(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0)
+ '@tanstack/react-query': 5.87.1(react@19.1.1)
+ next: 15.5.2(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1)
react: 19.1.1
- '@tanstack/react-query@5.85.5(react@19.1.1)':
+ '@tanstack/react-query@5.87.1(react@19.1.1)':
dependencies:
- '@tanstack/query-core': 5.85.5
+ '@tanstack/query-core': 5.87.1
react: 19.1.1
'@tanstack/react-table@8.20.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
@@ -12953,41 +12971,41 @@ snapshots:
tree-sitter: 0.22.4
optional: true
- '@trpc/client@11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2)':
+ '@trpc/client@11.5.1(@trpc/server@11.5.1(typescript@5.9.2))(typescript@5.9.2)':
dependencies:
- '@trpc/server': 11.5.0(typescript@5.9.2)
+ '@trpc/server': 11.5.1(typescript@5.9.2)
typescript: 5.9.2
- '@trpc/next@11.5.0(@tanstack/react-query@5.85.5(react@19.1.1))(@trpc/client@11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2))(@trpc/react-query@11.5.0(@tanstack/react-query@5.85.5(react@19.1.1))(@trpc/client@11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.5.0(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(@trpc/server@11.5.0(typescript@5.9.2))(next@15.5.0(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)':
+ '@trpc/next@11.5.1(@tanstack/react-query@5.87.1(react@19.1.1))(@trpc/client@11.5.1(@trpc/server@11.5.1(typescript@5.9.2))(typescript@5.9.2))(@trpc/react-query@11.5.1(@tanstack/react-query@5.87.1(react@19.1.1))(@trpc/client@11.5.1(@trpc/server@11.5.1(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.5.1(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(@trpc/server@11.5.1(typescript@5.9.2))(next@15.5.2(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)':
dependencies:
- '@trpc/client': 11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2)
- '@trpc/server': 11.5.0(typescript@5.9.2)
- next: 15.5.0(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0)
+ '@trpc/client': 11.5.1(@trpc/server@11.5.1(typescript@5.9.2))(typescript@5.9.2)
+ '@trpc/server': 11.5.1(typescript@5.9.2)
+ next: 15.5.2(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1)
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
typescript: 5.9.2
optionalDependencies:
- '@tanstack/react-query': 5.85.5(react@19.1.1)
- '@trpc/react-query': 11.5.0(@tanstack/react-query@5.85.5(react@19.1.1))(@trpc/client@11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.5.0(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
+ '@tanstack/react-query': 5.87.1(react@19.1.1)
+ '@trpc/react-query': 11.5.1(@tanstack/react-query@5.87.1(react@19.1.1))(@trpc/client@11.5.1(@trpc/server@11.5.1(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.5.1(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@trpc/react-query@11.5.0(@tanstack/react-query@5.85.5(react@19.1.1))(@trpc/client@11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.5.0(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)':
+ '@trpc/react-query@11.5.1(@tanstack/react-query@5.87.1(react@19.1.1))(@trpc/client@11.5.1(@trpc/server@11.5.1(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.5.1(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)':
dependencies:
- '@tanstack/react-query': 5.85.5(react@19.1.1)
- '@trpc/client': 11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2)
- '@trpc/server': 11.5.0(typescript@5.9.2)
+ '@tanstack/react-query': 5.87.1(react@19.1.1)
+ '@trpc/client': 11.5.1(@trpc/server@11.5.1(typescript@5.9.2))(typescript@5.9.2)
+ '@trpc/server': 11.5.1(typescript@5.9.2)
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
typescript: 5.9.2
- '@trpc/server@11.5.0(typescript@5.9.2)':
+ '@trpc/server@11.5.1(typescript@5.9.2)':
dependencies:
typescript: 5.9.2
- '@trpc/tanstack-react-query@11.5.0(@tanstack/react-query@5.85.5(react@19.1.1))(@trpc/client@11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.5.0(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)':
+ '@trpc/tanstack-react-query@11.5.1(@tanstack/react-query@5.87.1(react@19.1.1))(@trpc/client@11.5.1(@trpc/server@11.5.1(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.5.1(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)':
dependencies:
- '@tanstack/react-query': 5.85.5(react@19.1.1)
- '@trpc/client': 11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2)
- '@trpc/server': 11.5.0(typescript@5.9.2)
+ '@tanstack/react-query': 5.87.1(react@19.1.1)
+ '@trpc/client': 11.5.1(@trpc/server@11.5.1(typescript@5.9.2))(typescript@5.9.2)
+ '@trpc/server': 11.5.1(typescript@5.9.2)
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
typescript: 5.9.2
@@ -13002,7 +13020,7 @@ snapshots:
'@tsconfig/svelte@1.0.13': {}
- '@turbo/gen@2.5.6(@types/node@22.18.0)(typescript@5.9.2)':
+ '@turbo/gen@2.5.6(@types/node@22.18.1)(typescript@5.9.2)':
dependencies:
'@turbo/workspaces': 2.5.6
commander: 10.0.1
@@ -13012,7 +13030,7 @@ snapshots:
node-plop: 0.26.3
picocolors: 1.0.1
proxy-agent: 6.5.0
- ts-node: 10.9.2(@types/node@22.18.0)(typescript@5.9.2)
+ ts-node: 10.9.2(@types/node@22.18.1)(typescript@5.9.2)
update-check: 1.5.4
validate-npm-package-name: 5.0.1
transitivePeerDependencies:
@@ -13038,47 +13056,47 @@ snapshots:
'@types/adm-zip@0.5.7':
dependencies:
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@types/asn1@0.2.4':
dependencies:
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@types/aws-lambda@8.10.146': {}
'@types/babel__core@7.20.5':
dependencies:
- '@babel/parser': 7.28.0
- '@babel/types': 7.28.1
+ '@babel/parser': 7.28.3
+ '@babel/types': 7.28.2
'@types/babel__generator': 7.6.8
'@types/babel__template': 7.4.4
'@types/babel__traverse': 7.20.6
'@types/babel__generator@7.6.8':
dependencies:
- '@babel/types': 7.28.2
+ '@babel/types': 7.28.4
'@types/babel__template@7.4.4':
dependencies:
'@babel/parser': 7.28.3
- '@babel/types': 7.28.2
+ '@babel/types': 7.28.4
'@types/babel__traverse@7.20.6':
dependencies:
- '@babel/types': 7.28.2
+ '@babel/types': 7.28.4
'@types/bcrypt@6.0.0':
dependencies:
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@types/better-sqlite3@7.6.13':
dependencies:
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@types/body-parser@1.19.5':
dependencies:
'@types/connect': 3.4.38
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@types/chai@5.2.2':
dependencies:
@@ -13088,7 +13106,7 @@ snapshots:
'@types/connect@3.4.38':
dependencies:
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@types/cookie@0.4.1': {}
@@ -13097,11 +13115,11 @@ snapshots:
'@types/connect': 3.4.38
'@types/express': 4.17.21
'@types/keygrip': 1.0.6
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@types/cors@2.8.17':
dependencies:
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@types/css-font-loading-module@0.0.7': {}
@@ -13139,13 +13157,13 @@ snapshots:
'@types/docker-modem@3.0.6':
dependencies:
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@types/ssh2': 1.15.1
'@types/dockerode@3.3.43':
dependencies:
'@types/docker-modem': 3.0.6
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@types/ssh2': 1.15.1
'@types/estree-jsx@1.0.5':
@@ -13156,7 +13174,7 @@ snapshots:
'@types/express-serve-static-core@4.19.5':
dependencies:
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@types/qs': 6.9.16
'@types/range-parser': 1.2.7
'@types/send': 0.17.4
@@ -13171,7 +13189,7 @@ snapshots:
'@types/glob@7.2.0':
dependencies:
'@types/minimatch': 5.1.2
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@types/hast@2.3.10':
dependencies:
@@ -13219,7 +13237,7 @@ snapshots:
'@types/node-fetch@2.6.12':
dependencies:
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
form-data: 4.0.4
'@types/node-unifi@2.5.1(patch_hash=5e6ae51e2a17a7f9729bfa30b0eb3d0842a5810ac6db47603ab4a6efa1ed84c5)':
@@ -13230,7 +13248,7 @@ snapshots:
dependencies:
undici-types: 5.26.5
- '@types/node@22.18.0':
+ '@types/node@22.18.1':
dependencies:
undici-types: 6.21.0
@@ -13238,7 +13256,7 @@ snapshots:
'@types/pg@8.15.5':
dependencies:
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
pg-protocol: 1.10.3
pg-types: 2.2.0
@@ -13265,21 +13283,21 @@ snapshots:
'@types/send@0.17.4':
dependencies:
'@types/mime': 1.3.5
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@types/serve-static@1.15.7':
dependencies:
'@types/http-errors': 2.0.4
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@types/send': 0.17.4
'@types/ssh2-streams@0.1.12':
dependencies:
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@types/ssh2@0.5.52':
dependencies:
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@types/ssh2-streams': 0.1.12
'@types/ssh2@1.15.1':
@@ -13288,7 +13306,7 @@ snapshots:
'@types/stream-buffers@3.0.7':
dependencies:
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@types/swagger-ui-react@5.18.0':
dependencies:
@@ -13296,7 +13314,7 @@ snapshots:
'@types/through@0.0.33':
dependencies:
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@types/tinycolor2@1.4.6': {}
@@ -13315,21 +13333,21 @@ snapshots:
'@types/ws@8.18.1':
dependencies:
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@types/xml2js@0.4.14':
dependencies:
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
- '@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0)(typescript@5.9.2))(eslint@9.34.0)(typescript@5.9.2)':
+ '@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.9.2))(eslint@9.35.0)(typescript@5.9.2)':
dependencies:
'@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.41.0(eslint@9.34.0)(typescript@5.9.2)
- '@typescript-eslint/scope-manager': 8.41.0
- '@typescript-eslint/type-utils': 8.41.0(eslint@9.34.0)(typescript@5.9.2)
- '@typescript-eslint/utils': 8.41.0(eslint@9.34.0)(typescript@5.9.2)
- '@typescript-eslint/visitor-keys': 8.41.0
- eslint: 9.34.0
+ '@typescript-eslint/parser': 8.43.0(eslint@9.35.0)(typescript@5.9.2)
+ '@typescript-eslint/scope-manager': 8.43.0
+ '@typescript-eslint/type-utils': 8.43.0(eslint@9.35.0)(typescript@5.9.2)
+ '@typescript-eslint/utils': 8.43.0(eslint@9.35.0)(typescript@5.9.2)
+ '@typescript-eslint/visitor-keys': 8.43.0
+ eslint: 9.35.0
graphemer: 1.4.0
ignore: 7.0.4
natural-compare: 1.4.0
@@ -13338,56 +13356,56 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.41.0(eslint@9.34.0)(typescript@5.9.2)':
+ '@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.9.2)':
dependencies:
- '@typescript-eslint/scope-manager': 8.41.0
- '@typescript-eslint/types': 8.41.0
- '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2)
- '@typescript-eslint/visitor-keys': 8.41.0
+ '@typescript-eslint/scope-manager': 8.43.0
+ '@typescript-eslint/types': 8.43.0
+ '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2)
+ '@typescript-eslint/visitor-keys': 8.43.0
debug: 4.4.1
- eslint: 9.34.0
+ eslint: 9.35.0
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.41.0(typescript@5.9.2)':
+ '@typescript-eslint/project-service@8.43.0(typescript@5.9.2)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.9.2)
- '@typescript-eslint/types': 8.41.0
+ '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2)
+ '@typescript-eslint/types': 8.43.0
debug: 4.4.1
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.41.0':
+ '@typescript-eslint/scope-manager@8.43.0':
dependencies:
- '@typescript-eslint/types': 8.41.0
- '@typescript-eslint/visitor-keys': 8.41.0
+ '@typescript-eslint/types': 8.43.0
+ '@typescript-eslint/visitor-keys': 8.43.0
- '@typescript-eslint/tsconfig-utils@8.41.0(typescript@5.9.2)':
+ '@typescript-eslint/tsconfig-utils@8.43.0(typescript@5.9.2)':
dependencies:
typescript: 5.9.2
- '@typescript-eslint/type-utils@8.41.0(eslint@9.34.0)(typescript@5.9.2)':
+ '@typescript-eslint/type-utils@8.43.0(eslint@9.35.0)(typescript@5.9.2)':
dependencies:
- '@typescript-eslint/types': 8.41.0
- '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2)
- '@typescript-eslint/utils': 8.41.0(eslint@9.34.0)(typescript@5.9.2)
+ '@typescript-eslint/types': 8.43.0
+ '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2)
+ '@typescript-eslint/utils': 8.43.0(eslint@9.35.0)(typescript@5.9.2)
debug: 4.4.1
- eslint: 9.34.0
+ eslint: 9.35.0
ts-api-utils: 2.1.0(typescript@5.9.2)
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.41.0': {}
+ '@typescript-eslint/types@8.43.0': {}
- '@typescript-eslint/typescript-estree@8.41.0(typescript@5.9.2)':
+ '@typescript-eslint/typescript-estree@8.43.0(typescript@5.9.2)':
dependencies:
- '@typescript-eslint/project-service': 8.41.0(typescript@5.9.2)
- '@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.9.2)
- '@typescript-eslint/types': 8.41.0
- '@typescript-eslint/visitor-keys': 8.41.0
+ '@typescript-eslint/project-service': 8.43.0(typescript@5.9.2)
+ '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2)
+ '@typescript-eslint/types': 8.43.0
+ '@typescript-eslint/visitor-keys': 8.43.0
debug: 4.4.1
fast-glob: 3.3.2
is-glob: 4.0.3
@@ -13398,20 +13416,20 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.41.0(eslint@9.34.0)(typescript@5.9.2)':
+ '@typescript-eslint/utils@8.43.0(eslint@9.35.0)(typescript@5.9.2)':
dependencies:
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0)
- '@typescript-eslint/scope-manager': 8.41.0
- '@typescript-eslint/types': 8.41.0
- '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2)
- eslint: 9.34.0
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0)
+ '@typescript-eslint/scope-manager': 8.43.0
+ '@typescript-eslint/types': 8.43.0
+ '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2)
+ eslint: 9.35.0
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.41.0':
+ '@typescript-eslint/visitor-keys@8.43.0':
dependencies:
- '@typescript-eslint/types': 8.41.0
+ '@typescript-eslint/types': 8.43.0
eslint-visitor-keys: 4.2.1
'@umami/node@0.4.0': {}
@@ -13420,7 +13438,7 @@ snapshots:
'@videojs/http-streaming@3.17.2(video.js@8.23.4)':
dependencies:
- '@babel/runtime': 7.28.3
+ '@babel/runtime': 7.28.4
'@videojs/vhs-utils': 4.1.1
aes-decrypter: 4.0.2
global: 4.4.0
@@ -13431,30 +13449,30 @@ snapshots:
'@videojs/vhs-utils@4.0.0':
dependencies:
- '@babel/runtime': 7.28.3
+ '@babel/runtime': 7.28.4
global: 4.4.0
url-toolkit: 2.2.5
'@videojs/vhs-utils@4.1.1':
dependencies:
- '@babel/runtime': 7.28.3
+ '@babel/runtime': 7.28.4
global: 4.4.0
'@videojs/xhr@2.7.0':
dependencies:
- '@babel/runtime': 7.28.3
+ '@babel/runtime': 7.28.4
global: 4.4.0
is-function: 1.0.2
- '@vitejs/plugin-react@5.0.1(vite@7.1.3(@types/node@22.18.0)(sass@1.91.0)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1))':
+ '@vitejs/plugin-react@5.0.2(vite@7.1.5(@types/node@22.18.1)(sass@1.92.1)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1))':
dependencies:
'@babel/core': 7.28.3
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.3)
'@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.3)
- '@rolldown/pluginutils': 1.0.0-beta.32
+ '@rolldown/pluginutils': 1.0.0-beta.34
'@types/babel__core': 7.20.5
react-refresh: 0.17.0
- vite: 7.1.3(@types/node@22.18.0)(sass@1.91.0)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1)
+ vite: 7.1.5(@types/node@22.18.1)(sass@1.92.1)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1)
transitivePeerDependencies:
- supports-color
@@ -13473,7 +13491,7 @@ snapshots:
std-env: 3.9.0
test-exclude: 7.0.1
tinyrainbow: 2.0.0
- vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.0)(@vitest/ui@3.2.4)(jsdom@26.1.0)(sass@1.91.0)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1)
+ vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(@vitest/ui@3.2.4)(jsdom@26.1.0)(sass@1.92.1)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1)
transitivePeerDependencies:
- supports-color
@@ -13485,13 +13503,13 @@ snapshots:
chai: 5.2.0
tinyrainbow: 2.0.0
- '@vitest/mocker@3.2.4(vite@7.1.3(@types/node@22.18.0)(sass@1.91.0)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1))':
+ '@vitest/mocker@3.2.4(vite@7.1.5(@types/node@22.18.1)(sass@1.92.1)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1))':
dependencies:
'@vitest/spy': 3.2.4
estree-walker: 3.0.3
magic-string: 0.30.17
optionalDependencies:
- vite: 7.1.3(@types/node@22.18.0)(sass@1.91.0)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1)
+ vite: 7.1.5(@types/node@22.18.1)(sass@1.92.1)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1)
'@vitest/pretty-format@3.2.4':
dependencies:
@@ -13522,7 +13540,7 @@ snapshots:
sirv: 3.0.1
tinyglobby: 0.2.14
tinyrainbow: 2.0.0
- vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.0)(@vitest/ui@3.2.4)(jsdom@26.1.0)(sass@1.91.0)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1)
+ vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(@vitest/ui@3.2.4)(jsdom@26.1.0)(sass@1.92.1)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1)
'@vitest/utils@3.2.4':
dependencies:
@@ -13655,7 +13673,7 @@ snapshots:
aes-decrypter@4.0.2:
dependencies:
- '@babel/runtime': 7.28.3
+ '@babel/runtime': 7.28.4
'@videojs/vhs-utils': 4.1.1
global: 4.4.0
pkcs7: 1.0.4
@@ -13942,6 +13960,14 @@ snapshots:
transitivePeerDependencies:
- debug
+ axios@1.12.1:
+ dependencies:
+ follow-redirects: 1.15.9
+ form-data: 4.0.4
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
axios@1.9.0:
dependencies:
follow-redirects: 1.15.9
@@ -14206,6 +14232,8 @@ snapshots:
dependencies:
readdirp: 4.0.1
+ chownr@1.1.4: {}
+
chroma-js@3.1.2: {}
chrome-trace-event@1.0.4: {}
@@ -14569,7 +14597,7 @@ snapshots:
es-errors: 1.3.0
is-data-view: 1.0.2
- dayjs@1.11.13: {}
+ dayjs@1.11.18: {}
debug@3.2.7:
dependencies:
@@ -14683,6 +14711,10 @@ snapshots:
dependencies:
path-type: 4.0.0
+ dns-caching@0.2.5:
+ dependencies:
+ lru-cache: 11.1.0
+
docker-compose@1.2.0:
dependencies:
yaml: 2.5.1
@@ -14696,17 +14728,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
- dockerode@4.0.7:
+ dockerode@4.0.8:
dependencies:
'@balena/dockerignore': 1.0.2
'@grpc/grpc-js': 1.12.5
'@grpc/proto-loader': 0.7.13
docker-modem: 5.0.6
protobufjs: 7.4.0
- tar-fs: 3.1.0
+ tar-fs: 2.1.3
uuid: 10.0.0
transitivePeerDependencies:
- - bare-buffer
- supports-color
doctrine@2.1.0:
@@ -14715,7 +14746,7 @@ snapshots:
dom-helpers@5.2.1:
dependencies:
- '@babel/runtime': 7.28.3
+ '@babel/runtime': 7.28.4
csstype: 3.1.3
dom-walk@0.1.2: {}
@@ -14735,7 +14766,7 @@ snapshots:
dotenv-cli@10.0.0:
dependencies:
cross-spawn: 7.0.6
- dotenv: 17.2.1
+ dotenv: 17.2.2
dotenv-expand: 11.0.7
minimist: 1.2.8
@@ -14747,7 +14778,7 @@ snapshots:
dotenv@16.6.1: {}
- dotenv@17.2.1: {}
+ dotenv@17.2.2: {}
drange@1.1.1: {}
@@ -14760,19 +14791,19 @@ snapshots:
transitivePeerDependencies:
- supports-color
- drizzle-orm@0.44.5(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.2.0)(gel@2.0.0)(mysql2@3.14.3)(pg@8.16.3):
+ drizzle-orm@0.44.5(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.2.0)(gel@2.0.0)(mysql2@3.14.5)(pg@8.16.3):
optionalDependencies:
'@libsql/client-wasm': 0.14.0
'@types/better-sqlite3': 7.6.13
'@types/pg': 8.15.5
better-sqlite3: 12.2.0
gel: 2.0.0
- mysql2: 3.14.3
+ mysql2: 3.14.5
pg: 8.16.3
- drizzle-zod@0.8.3(drizzle-orm@0.44.5(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.2.0)(gel@2.0.0)(mysql2@3.14.3)(pg@8.16.3))(zod@4.1.5):
+ drizzle-zod@0.8.3(drizzle-orm@0.44.5(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.2.0)(gel@2.0.0)(mysql2@3.14.5)(pg@8.16.3))(zod@4.1.5):
dependencies:
- drizzle-orm: 0.44.5(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.2.0)(gel@2.0.0)(mysql2@3.14.3)(pg@8.16.3)
+ drizzle-orm: 0.44.5(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.15.5)(better-sqlite3@12.2.0)(gel@2.0.0)(mysql2@3.14.5)(pg@8.16.3)
zod: 4.1.5
dunder-proto@1.0.1:
@@ -14828,7 +14859,7 @@ snapshots:
dependencies:
'@types/cookie': 0.4.1
'@types/cors': 2.8.17
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
accepts: 1.3.8
base64id: 2.0.0
cookie: 0.7.2
@@ -15144,14 +15175,14 @@ snapshots:
optionalDependencies:
source-map: 0.6.1
- eslint-config-prettier@10.1.8(eslint@9.34.0):
+ eslint-config-prettier@10.1.8(eslint@9.35.0):
dependencies:
- eslint: 9.34.0
+ eslint: 9.35.0
- eslint-config-turbo@2.5.6(eslint@9.34.0)(turbo@2.5.6):
+ eslint-config-turbo@2.5.6(eslint@9.35.0)(turbo@2.5.6):
dependencies:
- eslint: 9.34.0
- eslint-plugin-turbo: 2.5.6(eslint@9.34.0)(turbo@2.5.6)
+ eslint: 9.35.0
+ eslint-plugin-turbo: 2.5.6(eslint@9.35.0)(turbo@2.5.6)
turbo: 2.5.6
eslint-import-resolver-node@0.3.9:
@@ -15162,17 +15193,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.34.0)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0):
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 8.41.0(eslint@9.34.0)(typescript@5.9.2)
- eslint: 9.34.0
+ '@typescript-eslint/parser': 8.43.0(eslint@9.35.0)(typescript@5.9.2)
+ eslint: 9.35.0
eslint-import-resolver-node: 0.3.9
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0)(typescript@5.9.2))(eslint@9.34.0):
+ eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.9.2))(eslint@9.35.0):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.9
@@ -15181,9 +15212,9 @@ snapshots:
array.prototype.flatmap: 1.3.3
debug: 3.2.7
doctrine: 2.1.0
- eslint: 9.34.0
+ eslint: 9.35.0
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.34.0)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.34.0)
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.35.0)
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -15195,13 +15226,13 @@ snapshots:
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.41.0(eslint@9.34.0)(typescript@5.9.2)
+ '@typescript-eslint/parser': 8.43.0(eslint@9.35.0)(typescript@5.9.2)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-jsx-a11y@6.10.2(eslint@9.34.0):
+ eslint-plugin-jsx-a11y@6.10.2(eslint@9.35.0):
dependencies:
aria-query: 5.3.2
array-includes: 3.1.8
@@ -15211,7 +15242,7 @@ snapshots:
axobject-query: 4.1.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
- eslint: 9.34.0
+ eslint: 9.35.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
@@ -15220,11 +15251,11 @@ snapshots:
safe-regex-test: 1.0.3
string.prototype.includes: 2.0.1
- eslint-plugin-react-hooks@5.2.0(eslint@9.34.0):
+ eslint-plugin-react-hooks@5.2.0(eslint@9.35.0):
dependencies:
- eslint: 9.34.0
+ eslint: 9.35.0
- eslint-plugin-react@7.37.5(eslint@9.34.0):
+ eslint-plugin-react@7.37.5(eslint@9.35.0):
dependencies:
array-includes: 3.1.8
array.prototype.findlast: 1.2.5
@@ -15232,7 +15263,7 @@ snapshots:
array.prototype.tosorted: 1.1.4
doctrine: 2.1.0
es-iterator-helpers: 1.2.1
- eslint: 9.34.0
+ eslint: 9.35.0
estraverse: 5.3.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
@@ -15246,10 +15277,10 @@ snapshots:
string.prototype.matchall: 4.0.12
string.prototype.repeat: 1.0.0
- eslint-plugin-turbo@2.5.6(eslint@9.34.0)(turbo@2.5.6):
+ eslint-plugin-turbo@2.5.6(eslint@9.35.0)(turbo@2.5.6):
dependencies:
dotenv: 16.0.3
- eslint: 9.34.0
+ eslint: 9.35.0
turbo: 2.5.6
eslint-scope@5.1.1:
@@ -15266,15 +15297,15 @@ snapshots:
eslint-visitor-keys@4.2.1: {}
- eslint@9.34.0:
+ eslint@9.35.0:
dependencies:
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0)
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0)
'@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.21.0
'@eslint/config-helpers': 0.3.1
'@eslint/core': 0.15.2
'@eslint/eslintrc': 3.3.1
- '@eslint/js': 9.34.0
+ '@eslint/js': 9.35.0
'@eslint/plugin-kit': 0.3.5
'@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1
@@ -15458,7 +15489,7 @@ snapshots:
dependencies:
'@babel/types': 7.26.0
- fastify@5.5.0:
+ fastify@5.6.0:
dependencies:
'@fastify/ajv-compiler': 4.0.2
'@fastify/error': 4.2.0
@@ -15589,6 +15620,8 @@ snapshots:
inherits: 2.0.4
readable-stream: 2.3.8
+ fs-constants@1.0.0: {}
+
fs-extra@10.1.0:
dependencies:
graceful-fs: 4.2.11
@@ -15937,9 +15970,9 @@ snapshots:
highlightjs-vue@1.0.0: {}
- hono@4.9.5: {}
+ hono@4.9.7: {}
- hook-std@3.0.0: {}
+ hook-std@4.0.0: {}
hosted-git-info@7.0.2:
dependencies:
@@ -16004,6 +16037,10 @@ snapshots:
dependencies:
safer-buffer: 2.1.2
+ iconv-lite@0.7.0:
+ dependencies:
+ safer-buffer: 2.1.2
+
ieee754@1.2.1: {}
ignore@5.3.2: {}
@@ -16454,20 +16491,20 @@ snapshots:
jest-worker@27.5.1:
dependencies:
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
merge-stream: 2.0.0
supports-color: 8.1.1
jose@6.0.8: {}
- jotai@2.13.1(@babel/core@7.26.0)(@babel/template@7.27.2)(@types/react@19.1.12)(react@19.1.1):
+ jotai@2.14.0(@babel/core@7.26.0)(@babel/template@7.27.2)(@types/react@19.1.12)(react@19.1.1):
optionalDependencies:
'@babel/core': 7.26.0
'@babel/template': 7.27.2
'@types/react': 19.1.12
react: 19.1.1
- jotai@2.13.1(@babel/core@7.28.3)(@babel/template@7.27.2)(@types/react@19.1.12)(react@19.1.1):
+ jotai@2.14.0(@babel/core@7.28.3)(@babel/template@7.27.2)(@types/react@19.1.12)(react@19.1.1):
optionalDependencies:
'@babel/core': 7.28.3
'@babel/template': 7.27.2
@@ -16716,6 +16753,8 @@ snapshots:
lru-cache@11.0.2: {}
+ lru-cache@11.1.0: {}
+
lru-cache@5.1.1:
dependencies:
yallist: 3.1.1
@@ -16726,7 +16765,7 @@ snapshots:
m3u8-parser@7.2.0:
dependencies:
- '@babel/runtime': 7.28.3
+ '@babel/runtime': 7.28.4
'@videojs/vhs-utils': 4.1.1
global: 4.4.0
@@ -16736,8 +16775,8 @@ snapshots:
magicast@0.3.5:
dependencies:
- '@babel/parser': 7.28.0
- '@babel/types': 7.28.1
+ '@babel/parser': 7.28.3
+ '@babel/types': 7.28.2
source-map-js: 1.2.1
make-dir@3.1.0:
@@ -16750,22 +16789,22 @@ snapshots:
make-error@1.3.6: {}
- mantine-form-zod-resolver@1.3.0(@mantine/form@8.2.7(react@19.1.1))(zod@4.1.5):
+ mantine-form-zod-resolver@1.3.0(@mantine/form@8.3.1(react@19.1.1))(zod@4.1.5):
dependencies:
- '@mantine/form': 8.2.7(react@19.1.1)
+ '@mantine/form': 8.3.1(react@19.1.1)
zod: 4.1.5
- mantine-react-table@2.0.0-beta.9(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/dates@8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(@tabler/icons-react@3.34.1(react@19.1.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
+ mantine-react-table@2.0.0-beta.9(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/dates@8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(dayjs@1.11.18)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(@tabler/icons-react@3.34.1(react@19.1.1))(clsx@2.1.1)(dayjs@1.11.18)(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
dependencies:
- '@mantine/core': 8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@mantine/dates': 8.2.7(@mantine/core@8.2.7(@mantine/hooks@8.2.7(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.7(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@mantine/hooks': 8.2.7(react@19.1.1)
+ '@mantine/core': 8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@mantine/dates': 8.3.1(@mantine/core@8.3.1(@mantine/hooks@8.3.1(react@19.1.1))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.3.1(react@19.1.1))(dayjs@1.11.18)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@mantine/hooks': 8.3.1(react@19.1.1)
'@tabler/icons-react': 3.34.1(react@19.1.1)
'@tanstack/match-sorter-utils': 8.19.4
'@tanstack/react-table': 8.20.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@tanstack/react-virtual': 3.11.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
clsx: 2.1.1
- dayjs: 1.11.13
+ dayjs: 1.11.18
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
@@ -17096,7 +17135,7 @@ snapshots:
mpd-parser@1.3.1:
dependencies:
- '@babel/runtime': 7.28.3
+ '@babel/runtime': 7.28.4
'@videojs/vhs-utils': 4.0.0
'@xmldom/xmldom': 0.8.10
global: 4.4.0
@@ -17111,15 +17150,15 @@ snapshots:
mux.js@7.1.0:
dependencies:
- '@babel/runtime': 7.28.3
+ '@babel/runtime': 7.28.4
global: 4.4.0
- mysql2@3.14.3:
+ mysql2@3.14.5:
dependencies:
aws-ssl-profiles: 1.1.2
denque: 2.1.0
generate-function: 2.3.1
- iconv-lite: 0.6.3
+ iconv-lite: 0.7.0
long: 5.2.3
lru.min: 1.1.0
named-placeholders: 1.1.3
@@ -17141,8 +17180,6 @@ snapshots:
nanoid@3.3.11: {}
- nanoid@3.3.9: {}
-
nanoid@5.1.5: {}
napi-build-utils@1.0.2: {}
@@ -17161,25 +17198,25 @@ snapshots:
netmask@2.0.2: {}
- next-auth@5.0.0-beta.29(next@15.5.0(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0))(react@19.1.1):
+ next-auth@5.0.0-beta.29(next@15.5.2(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1))(react@19.1.1):
dependencies:
'@auth/core': 0.40.0
- next: 15.5.0(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0)
+ next: 15.5.2(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1)
react: 19.1.1
- next-intl@4.3.5(next@15.5.0(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0))(react@19.1.1)(typescript@5.9.2):
+ next-intl@4.3.7(next@15.5.2(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1))(react@19.1.1)(typescript@5.9.2):
dependencies:
'@formatjs/intl-localematcher': 0.5.5
negotiator: 1.0.0
- next: 15.5.0(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0)
+ next: 15.5.2(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1)
react: 19.1.1
- use-intl: 4.3.5(react@19.1.1)
+ use-intl: 4.3.7(react@19.1.1)
optionalDependencies:
typescript: 5.9.2
- next@15.5.0(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0):
+ next@15.5.2(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1):
dependencies:
- '@next/env': 15.5.0
+ '@next/env': 15.5.2
'@swc/helpers': 0.5.15
caniuse-lite: 1.0.30001703
postcss: 8.4.31
@@ -17187,23 +17224,23 @@ snapshots:
react-dom: 19.1.1(react@19.1.1)
styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.1.1)
optionalDependencies:
- '@next/swc-darwin-arm64': 15.5.0
- '@next/swc-darwin-x64': 15.5.0
- '@next/swc-linux-arm64-gnu': 15.5.0
- '@next/swc-linux-arm64-musl': 15.5.0
- '@next/swc-linux-x64-gnu': 15.5.0
- '@next/swc-linux-x64-musl': 15.5.0
- '@next/swc-win32-arm64-msvc': 15.5.0
- '@next/swc-win32-x64-msvc': 15.5.0
- sass: 1.91.0
+ '@next/swc-darwin-arm64': 15.5.2
+ '@next/swc-darwin-x64': 15.5.2
+ '@next/swc-linux-arm64-gnu': 15.5.2
+ '@next/swc-linux-arm64-musl': 15.5.2
+ '@next/swc-linux-x64-gnu': 15.5.2
+ '@next/swc-linux-x64-musl': 15.5.2
+ '@next/swc-win32-arm64-msvc': 15.5.2
+ '@next/swc-win32-x64-msvc': 15.5.2
+ sass: 1.92.1
sharp: 0.34.3
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
- next@15.5.0(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.91.0):
+ next@15.5.2(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.92.1):
dependencies:
- '@next/env': 15.5.0
+ '@next/env': 15.5.2
'@swc/helpers': 0.5.15
caniuse-lite: 1.0.30001703
postcss: 8.4.31
@@ -17211,15 +17248,15 @@ snapshots:
react-dom: 19.1.1(react@19.1.1)
styled-jsx: 5.1.6(@babel/core@7.28.3)(react@19.1.1)
optionalDependencies:
- '@next/swc-darwin-arm64': 15.5.0
- '@next/swc-darwin-x64': 15.5.0
- '@next/swc-linux-arm64-gnu': 15.5.0
- '@next/swc-linux-arm64-musl': 15.5.0
- '@next/swc-linux-x64-gnu': 15.5.0
- '@next/swc-linux-x64-musl': 15.5.0
- '@next/swc-win32-arm64-msvc': 15.5.0
- '@next/swc-win32-x64-msvc': 15.5.0
- sass: 1.91.0
+ '@next/swc-darwin-arm64': 15.5.2
+ '@next/swc-darwin-x64': 15.5.2
+ '@next/swc-linux-arm64-gnu': 15.5.2
+ '@next/swc-linux-arm64-musl': 15.5.2
+ '@next/swc-linux-x64-gnu': 15.5.2
+ '@next/swc-linux-x64-musl': 15.5.2
+ '@next/swc-win32-arm64-msvc': 15.5.2
+ '@next/swc-win32-x64-msvc': 15.5.2
+ sass: 1.92.1
sharp: 0.34.3
transitivePeerDependencies:
- '@babel/core'
@@ -17268,7 +17305,7 @@ snapshots:
node-domexception: 1.0.0
web-streams-polyfill: 3.3.3
- node-fetch-native@1.6.6: {}
+ node-fetch-native@1.6.7: {}
node-fetch@2.7.0:
dependencies:
@@ -17278,7 +17315,7 @@ snapshots:
node-ical@0.20.1:
dependencies:
- axios: 1.11.0
+ axios: 1.12.1
moment-timezone: 0.5.47
rrule: 2.8.1
uuid: 10.0.0
@@ -17400,7 +17437,7 @@ snapshots:
octokit@5.0.3:
dependencies:
- '@octokit/app': 16.0.1
+ '@octokit/app': 16.1.0
'@octokit/core': 7.0.2
'@octokit/oauth-app': 8.0.1
'@octokit/plugin-paginate-graphql': 6.0.0(@octokit/core@7.0.2)
@@ -17415,7 +17452,7 @@ snapshots:
ofetch@1.4.1:
dependencies:
destr: 2.0.3
- node-fetch-native: 1.6.6
+ node-fetch-native: 1.6.7
ufo: 1.6.1
ohash@1.1.4: {}
@@ -17730,7 +17767,7 @@ snapshots:
pkcs7@1.0.4:
dependencies:
- '@babel/runtime': 7.28.3
+ '@babel/runtime': 7.28.4
pkg-conf@2.1.0:
dependencies:
@@ -17781,12 +17818,6 @@ snapshots:
postcss: 8.5.6
postcss@8.4.31:
- dependencies:
- nanoid: 3.3.9
- picocolors: 1.1.1
- source-map-js: 1.2.1
-
- postcss@8.4.47:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
@@ -17999,7 +18030,7 @@ snapshots:
'@protobufjs/path': 1.1.2
'@protobufjs/pool': 1.1.0
'@protobufjs/utf8': 1.1.0
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
long: 5.2.3
proxmox-api@1.1.1:
@@ -18063,7 +18094,7 @@ snapshots:
dependencies:
safe-buffer: 5.2.1
- rate-limiter-flexible@4.0.1: {}
+ rate-limiter-flexible@7.3.0: {}
raw-body@2.5.2:
dependencies:
@@ -18105,7 +18136,7 @@ snapshots:
react-error-boundary@6.0.0(react@19.1.1):
dependencies:
- '@babel/runtime': 7.28.3
+ '@babel/runtime': 7.28.4
react: 19.1.1
react-immutable-proptypes@2.2.0(immutable@3.8.2):
@@ -18145,7 +18176,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- react-number-format@5.4.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
+ react-number-format@5.4.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
dependencies:
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
@@ -18169,14 +18200,14 @@ snapshots:
optionalDependencies:
'@types/react': 19.1.12
- react-remove-scroll@2.6.2(@types/react@19.1.12)(react@19.1.1):
+ react-remove-scroll@2.7.1(@types/react@19.1.12)(react@19.1.1):
dependencies:
react: 19.1.1
react-remove-scroll-bar: 2.3.8(@types/react@19.1.12)(react@19.1.1)
react-style-singleton: 2.2.3(@types/react@19.1.12)(react@19.1.1)
tslib: 2.8.1
use-callback-ref: 1.3.3(@types/react@19.1.12)(react@19.1.1)
- use-sidecar: 1.1.2(@types/react@19.1.12)(react@19.1.1)
+ use-sidecar: 1.1.3(@types/react@19.1.12)(react@19.1.1)
optionalDependencies:
'@types/react': 19.1.12
@@ -18211,7 +18242,7 @@ snapshots:
react-syntax-highlighter@15.6.1(react@19.1.1):
dependencies:
- '@babel/runtime': 7.28.3
+ '@babel/runtime': 7.28.4
highlight.js: 10.7.3
highlightjs-vue: 1.0.0
lowlight: 1.20.0
@@ -18221,7 +18252,7 @@ snapshots:
react-textarea-autosize@8.5.9(@types/react@19.1.12)(react@19.1.1):
dependencies:
- '@babel/runtime': 7.28.3
+ '@babel/runtime': 7.28.4
react: 19.1.1
use-composed-ref: 1.3.0(react@19.1.1)
use-latest: 1.2.1(@types/react@19.1.12)(react@19.1.1)
@@ -18230,7 +18261,7 @@ snapshots:
react-transition-group@4.4.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
dependencies:
- '@babel/runtime': 7.28.3
+ '@babel/runtime': 7.28.4
dom-helpers: 5.2.1
loose-envify: 1.4.0
prop-types: 15.8.1
@@ -18499,7 +18530,7 @@ snapshots:
rrweb-snapshot@2.0.0-alpha.17:
dependencies:
- postcss: 8.4.47
+ postcss: 8.5.6
rrweb-snapshot@2.0.0-alpha.4: {}
@@ -18576,7 +18607,7 @@ snapshots:
safer-buffer@2.1.2: {}
- sass@1.91.0:
+ sass@1.92.1:
dependencies:
chokidar: 4.0.0
immutable: 5.0.2
@@ -18607,13 +18638,13 @@ snapshots:
secure-json-parse@4.0.0: {}
- semantic-release@24.2.7(typescript@5.9.2):
+ semantic-release@24.2.8(typescript@5.9.2):
dependencies:
- '@semantic-release/commit-analyzer': 13.0.1(semantic-release@24.2.7(typescript@5.9.2))
+ '@semantic-release/commit-analyzer': 13.0.1(semantic-release@24.2.8(typescript@5.9.2))
'@semantic-release/error': 4.0.0
- '@semantic-release/github': 11.0.4(semantic-release@24.2.7(typescript@5.9.2))
- '@semantic-release/npm': 12.0.2(semantic-release@24.2.7(typescript@5.9.2))
- '@semantic-release/release-notes-generator': 14.0.3(semantic-release@24.2.7(typescript@5.9.2))
+ '@semantic-release/github': 11.0.5(semantic-release@24.2.8(typescript@5.9.2))
+ '@semantic-release/npm': 12.0.2(semantic-release@24.2.8(typescript@5.9.2))
+ '@semantic-release/release-notes-generator': 14.1.0(semantic-release@24.2.8(typescript@5.9.2))
aggregate-error: 5.0.0
cosmiconfig: 9.0.0(typescript@5.9.2)
debug: 4.4.1
@@ -18623,7 +18654,7 @@ snapshots:
find-versions: 6.0.0
get-stream: 6.0.1
git-log-parser: 1.2.1
- hook-std: 3.0.0
+ hook-std: 4.0.0
hosted-git-info: 8.0.2
import-from-esm: 2.0.0
lodash-es: 4.17.21
@@ -18634,7 +18665,7 @@ snapshots:
p-reduce: 3.0.0
read-package-up: 11.0.0
resolve-from: 5.0.0
- semver: 7.7.1
+ semver: 7.7.2
semver-diff: 4.0.0
signale: 1.4.0
yargs: 17.7.2
@@ -19174,11 +19205,12 @@ snapshots:
transitivePeerDependencies:
- debug
- swagger-ui-react@5.27.1(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
+ swagger-ui-react@5.28.1(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
dependencies:
'@babel/runtime-corejs3': 7.27.1
'@scarf/scarf': 1.4.0
base64-js: 1.5.1
+ buffer: 6.0.3
classnames: 2.5.1
css.escape: 1.5.1
deep-extend: 0.6.0
@@ -19230,6 +19262,13 @@ snapshots:
tapable@2.2.1: {}
+ tar-fs@2.1.3:
+ dependencies:
+ chownr: 1.1.4
+ mkdirp-classic: 0.5.3
+ pump: 3.0.2
+ tar-stream: 2.2.0
+
tar-fs@3.1.0:
dependencies:
pump: 3.0.2
@@ -19240,6 +19279,14 @@ snapshots:
transitivePeerDependencies:
- bare-buffer
+ tar-stream@2.2.0:
+ dependencies:
+ bl: 4.1.0
+ end-of-stream: 1.4.4
+ fs-constants: 1.0.0
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
tar-stream@3.1.7:
dependencies:
b4a: 1.6.6
@@ -19286,7 +19333,7 @@ snapshots:
byline: 5.0.0
debug: 4.4.1
docker-compose: 1.2.0
- dockerode: 4.0.7
+ dockerode: 4.0.8
get-port: 7.1.0
proper-lockfile: 4.1.2
properties-reader: 2.3.0
@@ -19340,6 +19387,11 @@ snapshots:
fdir: 6.4.4(picomatch@4.0.2)
picomatch: 4.0.2
+ tinyglobby@0.2.15:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+
tinygradient@1.1.5:
dependencies:
'@types/tinycolor2': 1.4.6
@@ -19362,10 +19414,16 @@ snapshots:
tldts-core@6.1.69: {}
+ tldts-core@7.0.12: {}
+
tldts@6.1.69:
dependencies:
tldts-core: 6.1.69
+ tldts@7.0.12:
+ dependencies:
+ tldts-core: 7.0.12
+
tmp@0.2.4: {}
tmp@0.2.5: {}
@@ -19392,6 +19450,10 @@ snapshots:
dependencies:
tldts: 6.1.69
+ tough-cookie@6.0.0:
+ dependencies:
+ tldts: 7.0.12
+
tr46@0.0.3: {}
tr46@5.1.0:
@@ -19428,9 +19490,9 @@ snapshots:
trough@2.2.0: {}
- trpc-to-openapi@3.0.1(patch_hash=2ca3c16af0fcca0c736697ad4fe553a14f794524fa9ce0d5c3e8ee4aea76090c)(@trpc/server@11.5.0(typescript@5.9.2))(zod-openapi@5.3.0(zod@4.1.5))(zod@4.1.5):
+ trpc-to-openapi@3.0.1(patch_hash=2ca3c16af0fcca0c736697ad4fe553a14f794524fa9ce0d5c3e8ee4aea76090c)(@trpc/server@11.5.1(typescript@5.9.2))(zod-openapi@5.3.0(zod@4.1.5))(zod@4.1.5):
dependencies:
- '@trpc/server': 11.5.0(typescript@5.9.2)
+ '@trpc/server': 11.5.1(typescript@5.9.2)
co-body: 6.2.0
h3: 1.15.1
openapi3-ts: 4.4.0
@@ -19445,14 +19507,14 @@ snapshots:
ts-mixer@6.0.4: {}
- ts-node@10.9.2(@types/node@22.18.0)(typescript@5.9.2):
+ ts-node@10.9.2(@types/node@22.18.1)(typescript@5.9.2):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
acorn: 8.15.0
acorn-walk: 8.3.4
arg: 4.1.3
@@ -19492,12 +19554,20 @@ snapshots:
tsscmp@1.0.6: {}
+ tsx@4.20.4:
+ dependencies:
+ esbuild: 0.25.9
+ get-tsconfig: 4.8.1
+ optionalDependencies:
+ fsevents: 2.3.3
+
tsx@4.20.5:
dependencies:
esbuild: 0.25.9
get-tsconfig: 4.8.1
optionalDependencies:
fsevents: 2.3.3
+ optional: true
tunnel-agent@0.6.0:
dependencies:
@@ -19544,10 +19614,6 @@ snapshots:
type-fest@2.19.0: {}
- type-fest@4.30.2: {}
-
- type-fest@4.40.0: {}
-
type-fest@4.41.0: {}
type-is@1.6.18:
@@ -19628,13 +19694,13 @@ snapshots:
dependencies:
ts-toolbelt: 9.6.0
- typescript-eslint@8.41.0(eslint@9.34.0)(typescript@5.9.2):
+ typescript-eslint@8.43.0(eslint@9.35.0)(typescript@5.9.2):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0)(typescript@5.9.2))(eslint@9.34.0)(typescript@5.9.2)
- '@typescript-eslint/parser': 8.41.0(eslint@9.34.0)(typescript@5.9.2)
- '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2)
- '@typescript-eslint/utils': 8.41.0(eslint@9.34.0)(typescript@5.9.2)
- eslint: 9.34.0
+ '@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.9.2))(eslint@9.35.0)(typescript@5.9.2)
+ '@typescript-eslint/parser': 8.43.0(eslint@9.35.0)(typescript@5.9.2)
+ '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2)
+ '@typescript-eslint/utils': 8.43.0(eslint@9.35.0)(typescript@5.9.2)
+ eslint: 9.35.0
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
@@ -19643,14 +19709,12 @@ snapshots:
uc.micro@2.1.0: {}
- ufo@1.5.4: {}
-
ufo@1.6.1: {}
uglify-js@3.19.3:
optional: true
- uint8array-extras@1.4.0: {}
+ uint8array-extras@1.5.0: {}
unbox-primitive@1.0.2:
dependencies:
@@ -19808,11 +19872,11 @@ snapshots:
use-deep-compare-effect@1.8.1(react@19.1.1):
dependencies:
- '@babel/runtime': 7.28.3
+ '@babel/runtime': 7.28.4
dequal: 2.0.3
react: 19.1.1
- use-intl@4.3.5(react@19.1.1):
+ use-intl@4.3.7(react@19.1.1):
dependencies:
'@formatjs/fast-memoize': 2.2.1
'@schummar/icu-type-parser': 1.21.5
@@ -19832,7 +19896,7 @@ snapshots:
optionalDependencies:
'@types/react': 19.1.12
- use-sidecar@1.1.2(@types/react@19.1.12)(react@19.1.1):
+ use-sidecar@1.1.3(@types/react@19.1.12)(react@19.1.1):
dependencies:
detect-node-es: 1.1.0
react: 19.1.1
@@ -19892,7 +19956,7 @@ snapshots:
video.js@8.23.4:
dependencies:
- '@babel/runtime': 7.28.3
+ '@babel/runtime': 7.28.4
'@videojs/http-streaming': 3.17.2(video.js@8.23.4)
'@videojs/vhs-utils': 4.1.1
'@videojs/xhr': 2.7.0
@@ -19916,13 +19980,13 @@ snapshots:
dependencies:
global: 4.4.0
- vite-node@3.2.4(@types/node@22.18.0)(sass@1.91.0)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1):
+ vite-node@3.2.4(@types/node@22.18.1)(sass@1.92.1)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1):
dependencies:
cac: 6.7.14
debug: 4.4.1
es-module-lexer: 1.7.0
pathe: 2.0.3
- vite: 7.1.3(@types/node@22.18.0)(sass@1.91.0)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1)
+ vite: 7.1.5(@types/node@22.18.1)(sass@1.92.1)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1)
transitivePeerDependencies:
- '@types/node'
- jiti
@@ -19937,39 +20001,39 @@ snapshots:
- tsx
- yaml
- vite-tsconfig-paths@5.1.4(typescript@5.9.2)(vite@7.1.3(@types/node@22.18.0)(sass@1.91.0)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1)):
+ vite-tsconfig-paths@5.1.4(typescript@5.9.2)(vite@7.1.5(@types/node@22.18.1)(sass@1.92.1)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1)):
dependencies:
debug: 4.3.7
globrex: 0.1.2
tsconfck: 3.1.3(typescript@5.9.2)
optionalDependencies:
- vite: 7.1.3(@types/node@22.18.0)(sass@1.91.0)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1)
+ vite: 7.1.5(@types/node@22.18.1)(sass@1.92.1)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1)
transitivePeerDependencies:
- supports-color
- typescript
- vite@7.1.3(@types/node@22.18.0)(sass@1.91.0)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1):
+ vite@7.1.5(@types/node@22.18.1)(sass@1.92.1)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1):
dependencies:
esbuild: 0.25.9
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
postcss: 8.5.6
rollup: 4.48.1
- tinyglobby: 0.2.14
+ tinyglobby: 0.2.15
optionalDependencies:
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
fsevents: 2.3.3
- sass: 1.91.0
+ sass: 1.92.1
sugarss: 5.0.0(postcss@8.5.6)
terser: 5.39.0
tsx: 4.20.5
yaml: 2.5.1
- vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.0)(@vitest/ui@3.2.4)(jsdom@26.1.0)(sass@1.91.0)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1):
+ vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(@vitest/ui@3.2.4)(jsdom@26.1.0)(sass@1.92.1)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1):
dependencies:
'@types/chai': 5.2.2
'@vitest/expect': 3.2.4
- '@vitest/mocker': 3.2.4(vite@7.1.3(@types/node@22.18.0)(sass@1.91.0)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1))
+ '@vitest/mocker': 3.2.4(vite@7.1.5(@types/node@22.18.1)(sass@1.92.1)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1))
'@vitest/pretty-format': 3.2.4
'@vitest/runner': 3.2.4
'@vitest/snapshot': 3.2.4
@@ -19987,12 +20051,12 @@ snapshots:
tinyglobby: 0.2.14
tinypool: 1.1.1
tinyrainbow: 2.0.0
- vite: 7.1.3(@types/node@22.18.0)(sass@1.91.0)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1)
- vite-node: 3.2.4(@types/node@22.18.0)(sass@1.91.0)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1)
+ vite: 7.1.5(@types/node@22.18.1)(sass@1.92.1)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1)
+ vite-node: 3.2.4(@types/node@22.18.1)(sass@1.92.1)(sugarss@5.0.0(postcss@8.5.6))(terser@5.39.0)(tsx@4.20.5)(yaml@2.5.1)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/debug': 4.1.12
- '@types/node': 22.18.0
+ '@types/node': 22.18.1
'@vitest/ui': 3.2.4(vitest@3.2.4)
jsdom: 26.1.0
transitivePeerDependencies:
@@ -20308,7 +20372,7 @@ snapshots:
compress-commons: 6.0.2
readable-stream: 4.5.2
- zod-form-data@3.0.0(zod@4.1.5):
+ zod-form-data@3.0.1(zod@4.1.5):
dependencies:
'@rvf/set-get': 7.0.1
zod: 4.1.5
diff --git a/static-data/contributors.json b/static-data/contributors.json
index f46b07f6c..06a95d084 100644
--- a/static-data/contributors.json
+++ b/static-data/contributors.json
@@ -1 +1 @@
-[{"login":"ajnart","avatar_url":"https://avatars.githubusercontent.com/u/49837342?v=4"},{"login":"manuel-rw","avatar_url":"https://avatars.githubusercontent.com/u/30572287?v=4"},{"login":"Meierschlumpf","avatar_url":"https://avatars.githubusercontent.com/u/63781622?v=4"},{"login":"SeDemal","avatar_url":"https://avatars.githubusercontent.com/u/26098587?v=4"},{"login":"lammersbjorn","avatar_url":"https://avatars.githubusercontent.com/u/71191962?v=4"},{"login":"LarveyOfficial","avatar_url":"https://avatars.githubusercontent.com/u/39219859?v=4"},{"login":"c00ldude1oo","avatar_url":"https://avatars.githubusercontent.com/u/15677803?v=4"},{"login":"InterN0te","avatar_url":"https://avatars.githubusercontent.com/u/10882916?v=4"},{"login":"Aimsucks","avatar_url":"https://avatars.githubusercontent.com/u/1828486?v=4"},{"login":"JannesV","avatar_url":"https://avatars.githubusercontent.com/u/5984244?v=4"},{"login":"MauriceNino","avatar_url":"https://avatars.githubusercontent.com/u/18658092?v=4"},{"login":"hillaliy","avatar_url":"https://avatars.githubusercontent.com/u/950010?v=4"},{"login":"Skeeww","avatar_url":"https://avatars.githubusercontent.com/u/9639992?v=4"},{"login":"RichyHBM","avatar_url":"https://avatars.githubusercontent.com/u/5472275?v=4"},{"login":"Bonfire","avatar_url":"https://avatars.githubusercontent.com/u/5704760?v=4"},{"login":"wieli99","avatar_url":"https://avatars.githubusercontent.com/u/46794825?v=4"},{"login":"ishaanparlikar","avatar_url":"https://avatars.githubusercontent.com/u/43013132?v=4"},{"login":"Zareix","avatar_url":"https://avatars.githubusercontent.com/u/29818713?v=4"},{"login":"tuggan","avatar_url":"https://avatars.githubusercontent.com/u/4325608?v=4"},{"login":"Spillebulle","avatar_url":"https://avatars.githubusercontent.com/u/46653946?v=4"},{"login":"tancak","avatar_url":"https://avatars.githubusercontent.com/u/11760749?v=4"},{"login":"spkesDE","avatar_url":"https://avatars.githubusercontent.com/u/1682314?v=4"},{"login":"j3lte","avatar_url":"https://avatars.githubusercontent.com/u/2557568?v=4"},{"login":"dslatt","avatar_url":"https://avatars.githubusercontent.com/u/5211001?v=4"},{"login":"Malong11-007","avatar_url":"https://avatars.githubusercontent.com/u/40298510?v=4"},{"login":"StefanB7","avatar_url":"https://avatars.githubusercontent.com/u/22056509?v=4"},{"login":"souravghosh01","avatar_url":"https://avatars.githubusercontent.com/u/37548139?v=4"},{"login":"SR3u","avatar_url":"https://avatars.githubusercontent.com/u/2380522?v=4"},{"login":"Rikpat","avatar_url":"https://avatars.githubusercontent.com/u/33869814?v=4"},{"login":"NormanJS","avatar_url":"https://avatars.githubusercontent.com/u/83409549?v=4"},{"login":"No-Maines-Land","avatar_url":"https://avatars.githubusercontent.com/u/20687725?v=4"},{"login":"stark1tty","avatar_url":"https://avatars.githubusercontent.com/u/69326376?v=4"},{"login":"Momcilo42","avatar_url":"https://avatars.githubusercontent.com/u/10118137?v=4"},{"login":"marius-arch","avatar_url":"https://avatars.githubusercontent.com/u/72494359?v=4"},{"login":"Lumilias","avatar_url":"https://avatars.githubusercontent.com/u/10852161?v=4"},{"login":"Havock94","avatar_url":"https://avatars.githubusercontent.com/u/7635248?v=4"},{"login":"Lollyde","avatar_url":"https://avatars.githubusercontent.com/u/11347524?v=4"},{"login":"krishnamuppaneni","avatar_url":"https://avatars.githubusercontent.com/u/4703366?v=4"},{"login":"devtobi","avatar_url":"https://avatars.githubusercontent.com/u/28538704?v=4"},{"login":"TyxTang","avatar_url":"https://avatars.githubusercontent.com/u/90897955?v=4"},{"login":"VinnyVynce","avatar_url":"https://avatars.githubusercontent.com/u/19630511?v=4"},{"login":"WillyJL","avatar_url":"https://avatars.githubusercontent.com/u/49810075?v=4"},{"login":"anonysoul","avatar_url":"https://avatars.githubusercontent.com/u/105715150?v=4"},{"login":"cospeedster","avatar_url":"https://avatars.githubusercontent.com/u/52749645?v=4"},{"login":"diederbert","avatar_url":"https://avatars.githubusercontent.com/u/162878798?v=4"},{"login":"digdilem","avatar_url":"https://avatars.githubusercontent.com/u/4052275?v=4"},{"login":"dinghino","avatar_url":"https://avatars.githubusercontent.com/u/14729459?v=4"},{"login":"gfomichev","avatar_url":"https://avatars.githubusercontent.com/u/1596146?v=4"},{"login":"gnattu","avatar_url":"https://avatars.githubusercontent.com/u/12995396?v=4"},{"login":"tuxpizza","avatar_url":"https://avatars.githubusercontent.com/u/84710786?v=4"},{"login":"xmarkurion","avatar_url":"https://avatars.githubusercontent.com/u/46654687?v=4"},{"login":"huanga","avatar_url":"https://avatars.githubusercontent.com/u/732970?v=4"},{"login":"taos15","avatar_url":"https://avatars.githubusercontent.com/u/122130728?v=4"},{"login":"arghyadipchak","avatar_url":"https://avatars.githubusercontent.com/u/32430374?v=4"},{"login":"AuthorShin","avatar_url":"https://avatars.githubusercontent.com/u/4959043?v=4"},{"login":"benniblot","avatar_url":"https://avatars.githubusercontent.com/u/47495914?v=4"},{"login":"bebsworthy","avatar_url":"https://avatars.githubusercontent.com/u/5266759?v=4"},{"login":"catrielmuller","avatar_url":"https://avatars.githubusercontent.com/u/2272323?v=4"},{"login":"Vysp3r","avatar_url":"https://avatars.githubusercontent.com/u/62019735?v=4"},{"login":"DR-Blogs","avatar_url":"https://avatars.githubusercontent.com/u/96393186?v=4"},{"login":"singular0","avatar_url":"https://avatars.githubusercontent.com/u/1925883?v=4"},{"login":"diogovalentte","avatar_url":"https://avatars.githubusercontent.com/u/49578155?v=4"},{"login":"codezninja","avatar_url":"https://avatars.githubusercontent.com/u/4400773?v=4"},{"login":"fabricionaweb","avatar_url":"https://avatars.githubusercontent.com/u/15933?v=4"},{"login":"nyok1912","avatar_url":"https://avatars.githubusercontent.com/u/32163949?v=4"},{"login":"bo3bdo","avatar_url":"https://avatars.githubusercontent.com/u/5271380?v=4"},{"login":"hskrtich","avatar_url":"https://avatars.githubusercontent.com/u/1214484?v=4"},{"login":"ishults","avatar_url":"https://avatars.githubusercontent.com/u/7275442?v=4"},{"login":"jelliuk","avatar_url":"https://avatars.githubusercontent.com/u/4790959?v=4"},{"login":"Moohan","avatar_url":"https://avatars.githubusercontent.com/u/5982260?v=4"},{"login":"tesar-tech","avatar_url":"https://avatars.githubusercontent.com/u/33880579?v=4"},{"login":"jbruell","avatar_url":"https://avatars.githubusercontent.com/u/31685172?v=4"},{"login":"JasonLeeB06","avatar_url":"https://avatars.githubusercontent.com/u/82266978?v=4"},{"login":"jeffersonraimon","avatar_url":"https://avatars.githubusercontent.com/u/80064475?v=4"},{"login":"jo-chemla","avatar_url":"https://avatars.githubusercontent.com/u/16822841?v=4"},{"login":"joser93","avatar_url":"https://avatars.githubusercontent.com/u/6912089?v=4"},{"login":"justijndepover","avatar_url":"https://avatars.githubusercontent.com/u/9008623?v=4"},{"login":"Aandree5","avatar_url":"https://avatars.githubusercontent.com/u/32734153?v=4"},{"login":"jackwellerreal","avatar_url":"https://avatars.githubusercontent.com/u/97435840?v=4"},{"login":"toineenzo","avatar_url":"https://avatars.githubusercontent.com/u/4921397?v=4"},{"login":"rezstje","avatar_url":"https://avatars.githubusercontent.com/u/45420315?v=4"},{"login":"MaienM","avatar_url":"https://avatars.githubusercontent.com/u/583129?v=4"},{"login":"oben01","avatar_url":"https://avatars.githubusercontent.com/u/22369027?v=4"},{"login":"m0s4ik","avatar_url":"https://avatars.githubusercontent.com/u/26578395?v=4"},{"login":"Oupsman","avatar_url":"https://avatars.githubusercontent.com/u/11260343?v=4"},{"login":"ieugen","avatar_url":"https://avatars.githubusercontent.com/u/1050920?v=4"},{"login":"faugusto-oliveira","avatar_url":"https://avatars.githubusercontent.com/u/37384074?v=4"},{"login":"frankvHoof93","avatar_url":"https://avatars.githubusercontent.com/u/7346516?v=4"},{"login":"Kaotic3","avatar_url":"https://avatars.githubusercontent.com/u/80522225?v=4"},{"login":"hotrungnhan","avatar_url":"https://avatars.githubusercontent.com/u/40029631?v=4"},{"login":"leandroscardua","avatar_url":"https://avatars.githubusercontent.com/u/24698541?v=4"},{"login":"itzTheMeow","avatar_url":"https://avatars.githubusercontent.com/u/50887230?v=4"},{"login":"NikeLaosClericus","avatar_url":"https://avatars.githubusercontent.com/u/39810627?v=4"},{"login":"xoxyuxu","avatar_url":"https://avatars.githubusercontent.com/u/3543416?v=4"},{"login":"lthomsen","avatar_url":"https://avatars.githubusercontent.com/u/28560325?v=4"},{"login":"pitschi","avatar_url":"https://avatars.githubusercontent.com/u/6841565?v=4"},{"login":"tech62","avatar_url":"https://avatars.githubusercontent.com/u/16237642?v=4"}]
\ No newline at end of file
+[{"login":"ajnart","avatar_url":"https://avatars.githubusercontent.com/u/49837342?v=4"},{"login":"manuel-rw","avatar_url":"https://avatars.githubusercontent.com/u/30572287?v=4"},{"login":"Meierschlumpf","avatar_url":"https://avatars.githubusercontent.com/u/63781622?v=4"},{"login":"SeDemal","avatar_url":"https://avatars.githubusercontent.com/u/26098587?v=4"},{"login":"lammersbjorn","avatar_url":"https://avatars.githubusercontent.com/u/71191962?v=4"},{"login":"LarveyOfficial","avatar_url":"https://avatars.githubusercontent.com/u/39219859?v=4"},{"login":"c00ldude1oo","avatar_url":"https://avatars.githubusercontent.com/u/15677803?v=4"},{"login":"InterN0te","avatar_url":"https://avatars.githubusercontent.com/u/10882916?v=4"},{"login":"Aimsucks","avatar_url":"https://avatars.githubusercontent.com/u/1828486?v=4"},{"login":"JannesV","avatar_url":"https://avatars.githubusercontent.com/u/5984244?v=4"},{"login":"MauriceNino","avatar_url":"https://avatars.githubusercontent.com/u/18658092?v=4"},{"login":"hillaliy","avatar_url":"https://avatars.githubusercontent.com/u/950010?v=4"},{"login":"Skeeww","avatar_url":"https://avatars.githubusercontent.com/u/9639992?v=4"},{"login":"RichyHBM","avatar_url":"https://avatars.githubusercontent.com/u/5472275?v=4"},{"login":"Bonfire","avatar_url":"https://avatars.githubusercontent.com/u/5704760?v=4"},{"login":"wieli99","avatar_url":"https://avatars.githubusercontent.com/u/46794825?v=4"},{"login":"ishaanparlikar","avatar_url":"https://avatars.githubusercontent.com/u/43013132?v=4"},{"login":"Zareix","avatar_url":"https://avatars.githubusercontent.com/u/29818713?v=4"},{"login":"tuggan","avatar_url":"https://avatars.githubusercontent.com/u/4325608?v=4"},{"login":"Spillebulle","avatar_url":"https://avatars.githubusercontent.com/u/46653946?v=4"},{"login":"tancak","avatar_url":"https://avatars.githubusercontent.com/u/11760749?v=4"},{"login":"spkesDE","avatar_url":"https://avatars.githubusercontent.com/u/1682314?v=4"},{"login":"j3lte","avatar_url":"https://avatars.githubusercontent.com/u/2557568?v=4"},{"login":"dslatt","avatar_url":"https://avatars.githubusercontent.com/u/5211001?v=4"},{"login":"Malong11-007","avatar_url":"https://avatars.githubusercontent.com/u/40298510?v=4"},{"login":"StefanB7","avatar_url":"https://avatars.githubusercontent.com/u/22056509?v=4"},{"login":"souravghosh01","avatar_url":"https://avatars.githubusercontent.com/u/37548139?v=4"},{"login":"SR3u","avatar_url":"https://avatars.githubusercontent.com/u/2380522?v=4"},{"login":"Rikpat","avatar_url":"https://avatars.githubusercontent.com/u/33869814?v=4"},{"login":"NormanJS","avatar_url":"https://avatars.githubusercontent.com/u/83409549?v=4"},{"login":"No-Maines-Land","avatar_url":"https://avatars.githubusercontent.com/u/20687725?v=4"},{"login":"stark1tty","avatar_url":"https://avatars.githubusercontent.com/u/69326376?v=4"},{"login":"Momcilo42","avatar_url":"https://avatars.githubusercontent.com/u/10118137?v=4"},{"login":"marius-arch","avatar_url":"https://avatars.githubusercontent.com/u/72494359?v=4"},{"login":"Lumilias","avatar_url":"https://avatars.githubusercontent.com/u/10852161?v=4"},{"login":"Havock94","avatar_url":"https://avatars.githubusercontent.com/u/7635248?v=4"},{"login":"Lollyde","avatar_url":"https://avatars.githubusercontent.com/u/11347524?v=4"},{"login":"krishnamuppaneni","avatar_url":"https://avatars.githubusercontent.com/u/4703366?v=4"},{"login":"devtobi","avatar_url":"https://avatars.githubusercontent.com/u/28538704?v=4"},{"login":"TyxTang","avatar_url":"https://avatars.githubusercontent.com/u/90897955?v=4"},{"login":"VinnyVynce","avatar_url":"https://avatars.githubusercontent.com/u/19630511?v=4"},{"login":"WillyJL","avatar_url":"https://avatars.githubusercontent.com/u/49810075?v=4"},{"login":"anonysoul","avatar_url":"https://avatars.githubusercontent.com/u/105715150?v=4"},{"login":"cospeedster","avatar_url":"https://avatars.githubusercontent.com/u/52749645?v=4"},{"login":"diederbert","avatar_url":"https://avatars.githubusercontent.com/u/162878798?v=4"},{"login":"digdilem","avatar_url":"https://avatars.githubusercontent.com/u/4052275?v=4"},{"login":"dinghino","avatar_url":"https://avatars.githubusercontent.com/u/14729459?v=4"},{"login":"gfomichev","avatar_url":"https://avatars.githubusercontent.com/u/1596146?v=4"},{"login":"gnattu","avatar_url":"https://avatars.githubusercontent.com/u/12995396?v=4"},{"login":"tuxpizza","avatar_url":"https://avatars.githubusercontent.com/u/84710786?v=4"},{"login":"xmarkurion","avatar_url":"https://avatars.githubusercontent.com/u/46654687?v=4"},{"login":"huanga","avatar_url":"https://avatars.githubusercontent.com/u/732970?v=4"},{"login":"taos15","avatar_url":"https://avatars.githubusercontent.com/u/122130728?v=4"},{"login":"arghyadipchak","avatar_url":"https://avatars.githubusercontent.com/u/32430374?v=4"},{"login":"AuthorShin","avatar_url":"https://avatars.githubusercontent.com/u/4959043?v=4"},{"login":"benniblot","avatar_url":"https://avatars.githubusercontent.com/u/47495914?v=4"},{"login":"bebsworthy","avatar_url":"https://avatars.githubusercontent.com/u/5266759?v=4"},{"login":"catrielmuller","avatar_url":"https://avatars.githubusercontent.com/u/2272323?v=4"},{"login":"Vysp3r","avatar_url":"https://avatars.githubusercontent.com/u/62019735?v=4"},{"login":"DR-Blogs","avatar_url":"https://avatars.githubusercontent.com/u/96393186?v=4"},{"login":"singular0","avatar_url":"https://avatars.githubusercontent.com/u/1925883?v=4"},{"login":"diogovalentte","avatar_url":"https://avatars.githubusercontent.com/u/49578155?v=4"},{"login":"codezninja","avatar_url":"https://avatars.githubusercontent.com/u/4400773?v=4"},{"login":"fabricionaweb","avatar_url":"https://avatars.githubusercontent.com/u/15933?v=4"},{"login":"nyok1912","avatar_url":"https://avatars.githubusercontent.com/u/32163949?v=4"},{"login":"bo3bdo","avatar_url":"https://avatars.githubusercontent.com/u/5271380?v=4"},{"login":"hskrtich","avatar_url":"https://avatars.githubusercontent.com/u/1214484?v=4"},{"login":"ishults","avatar_url":"https://avatars.githubusercontent.com/u/7275442?v=4"},{"login":"jelliuk","avatar_url":"https://avatars.githubusercontent.com/u/4790959?v=4"},{"login":"Moohan","avatar_url":"https://avatars.githubusercontent.com/u/5982260?v=4"},{"login":"tesar-tech","avatar_url":"https://avatars.githubusercontent.com/u/33880579?v=4"},{"login":"jbruell","avatar_url":"https://avatars.githubusercontent.com/u/31685172?v=4"},{"login":"JasonLeeB06","avatar_url":"https://avatars.githubusercontent.com/u/82266978?v=4"},{"login":"jeffersonraimon","avatar_url":"https://avatars.githubusercontent.com/u/80064475?v=4"},{"login":"jo-chemla","avatar_url":"https://avatars.githubusercontent.com/u/16822841?v=4"},{"login":"joser93","avatar_url":"https://avatars.githubusercontent.com/u/6912089?v=4"},{"login":"justijndepover","avatar_url":"https://avatars.githubusercontent.com/u/9008623?v=4"},{"login":"Aandree5","avatar_url":"https://avatars.githubusercontent.com/u/32734153?v=4"},{"login":"jackwellerreal","avatar_url":"https://avatars.githubusercontent.com/u/97435840?v=4"},{"login":"toineenzo","avatar_url":"https://avatars.githubusercontent.com/u/4921397?v=4"},{"login":"oben01","avatar_url":"https://avatars.githubusercontent.com/u/22369027?v=4"},{"login":"rezstje","avatar_url":"https://avatars.githubusercontent.com/u/45420315?v=4"},{"login":"MaienM","avatar_url":"https://avatars.githubusercontent.com/u/583129?v=4"},{"login":"xoxyuxu","avatar_url":"https://avatars.githubusercontent.com/u/3543416?v=4"},{"login":"m0s4ik","avatar_url":"https://avatars.githubusercontent.com/u/26578395?v=4"},{"login":"Oupsman","avatar_url":"https://avatars.githubusercontent.com/u/11260343?v=4"},{"login":"Copilot","avatar_url":"https://avatars.githubusercontent.com/in/1143301?v=4"},{"login":"ieugen","avatar_url":"https://avatars.githubusercontent.com/u/1050920?v=4"},{"login":"faugusto-oliveira","avatar_url":"https://avatars.githubusercontent.com/u/37384074?v=4"},{"login":"frankvHoof93","avatar_url":"https://avatars.githubusercontent.com/u/7346516?v=4"},{"login":"HeapReaper","avatar_url":"https://avatars.githubusercontent.com/u/31496522?v=4"},{"login":"Kaotic3","avatar_url":"https://avatars.githubusercontent.com/u/80522225?v=4"},{"login":"hotrungnhan","avatar_url":"https://avatars.githubusercontent.com/u/40029631?v=4"},{"login":"leandroscardua","avatar_url":"https://avatars.githubusercontent.com/u/24698541?v=4"},{"login":"itzTheMeow","avatar_url":"https://avatars.githubusercontent.com/u/50887230?v=4"},{"login":"NikeLaosClericus","avatar_url":"https://avatars.githubusercontent.com/u/39810627?v=4"},{"login":"lthomsen","avatar_url":"https://avatars.githubusercontent.com/u/28560325?v=4"},{"login":"pitschi","avatar_url":"https://avatars.githubusercontent.com/u/6841565?v=4"},{"login":"tech62","avatar_url":"https://avatars.githubusercontent.com/u/16237642?v=4"}]
\ No newline at end of file
diff --git a/static-data/translators.json b/static-data/translators.json
index 5863e6752..64bf3d0cb 100644
--- a/static-data/translators.json
+++ b/static-data/translators.json
@@ -1 +1 @@
-[{"username":"carlchina","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/6697/medium/d22bbe7797bbeb30dbdc73a5648d329a_default.png"},{"username":"zielmann","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/7795/medium/ad22b8b8d5eb33e4154d53a454c862fd_default.png"},{"username":"Thalyn","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12494028/medium/5faf5acc945a874ed116c4567edaa09f_default.png"},{"username":"magnushj","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12503488/medium/68f32e33ea7b891960055c9f831f7344_default.png"},{"username":"almontegil","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12580457/medium/f4136cacbdfdb4c28ae7f85dc5f840db_default.png"},{"username":"Skick","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12619811/medium/0331f1de413a645b4516bc4e037f31bb.jpg"},{"username":"andibing","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12664938/medium/b8be63e4dcb2e791ced1ffc9e3a049a5.jpg"},{"username":"gronare","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12680911/medium/c6eb14d1504156f34a158e507f73aa3d_default.png"},{"username":"SmartPhoneLover","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12701640/medium/ec95486662ec875cda080e778c3ff702.jpg"},{"username":"marcelotk_15","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12773227/medium/ecf6bea16ab0c873c131df2154ee9718_default.png"},{"username":"S3OD177","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13051544/medium/11dd990837f61f7e8f7d36b041a7fddb_default.png"},{"username":"marcg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13153301/medium/ebcf60fbf27deb148ec40a659566c6ff_default.png"},{"username":"BeersTeddy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13185230/medium/2f1f4e1effe74a23422b195cbefb2a95_default.png"},{"username":"jamesmcmahon0","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13245578/medium/586aa873b4abddbd9abc6f3de99ab70e.jpeg"},{"username":"b1nar10","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13286752/medium/249b02e3368752cb175446082015737c_default.png"},{"username":"vannCN","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13330448/medium/9b8a9ee3611e51e951e22d5fd4eb7d8d.jpg"},{"username":"binswm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13343482/medium/45dde0e6097b9b72705d2eba9dbbc276_default.png"},{"username":"SkewRam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13496556/medium/188f5c2deb7938eda51eb786cc4539ca.jpeg"},{"username":"raphcatarino","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13547726/medium/b003511e67df13a4b4b5689488fa8099.jpg"},{"username":"shillos5","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13600557/medium/b17650b2b84f829d54fa548c44c1ab27.jpeg"},{"username":"wolong98","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13641407/medium/f4634edc58c7857a357e5293543c15cf.jpg"},{"username":"spair0039","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14012333/medium/72430e96027c09c19141cac38eae4617.png"},{"username":"MajorMarcin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14072183/medium/0a197e64bb92b6ea94cecbb607512c45.jpg"},{"username":"KosmoMoustache","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14103535/medium/51c438cdd9f86e8811c75f4869de479c.png"},{"username":"Soochaehwa","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14118689/medium/496a1ce63111547bf455a1e0a7ac75f1_default.png"},{"username":"garryfield","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14187035/medium/520c964706676045f6eeec1b08edc880.jpg"},{"username":"droidenko","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14444264/medium/4aa3a8e824f72bc9e5ec0d8de307095e.jpeg"},{"username":"maathis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14489950/medium/6eeddf13a757ee35f78f1763f94d95e1.jpeg"},{"username":"bukvam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14546502/medium/a819dc40a13c57395a17dc46e847d3ce.jpg"},{"username":"gm.cinalli","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14670666/medium/2d466a0fdbda40764526be86c97c0ab4.jpeg"},{"username":"antoine2tt","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14722148/medium/f88d926900862dd59007ea4b3419cb9d.png"},{"username":"cretzen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14799754/medium/3ba5c1805ec20c000d5810c07985afe9.jpg"},{"username":"ktKongTong","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14817246/medium/97cfc3c028dbdaf85ebd1102da71e58c.jpeg"},{"username":"marinkaberg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14861042/medium/2d5c4e62613f03082f3e645fa92efd59.jpeg"},{"username":"djismgaming","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14934947/medium/f5a8570713c34ab0f7d5405d105e2a9a.jpeg"},{"username":"f1refa11","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14949159/medium/fd2ae63b8eb4462200ba96abf943c1b9.png"},{"username":"jeffersonraimon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15057621/medium/6dff469563860e2618bc9d45646d0ab4.png"},{"username":"giop98","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15057987/medium/b8a4825d3fc39fc662f35ee258db4b2d.jpeg"},{"username":"tomislav.kraljevic","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15118857/medium/e133f1061cc92850b854d05d8faaeafd.png"},{"username":"Walkx","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15202182/medium/5c37361ae45aeed487b34582c1f7ca37.png"},{"username":"andrea.rosso","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15246318/medium/11f3f5ef44ec7f55b6f143090e208704_default.png"},{"username":"ajnart","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15270132/medium/a0f107a463c8910ee96bc2fa843a17e3.jpeg"},{"username":"Witchling","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15282238/medium/9e196b6783415b10ca571b7673c2ef33.jpg"},{"username":"guineuu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15292058/medium/22fbb758bda3b7805d50bf21d38f2c20.jpeg"},{"username":"Bulgus","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15304568/medium/0e8787e5ceb02ed5c96a514d0068ae87.jpg"},{"username":"Narno","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15314996/medium/a6ba093f24884250a1bf6c6f2ca50f1b_default.png"},{"username":"BySempron","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15315986/medium/e3d22d7b1423c6823a9f36d595ed4bdb.png"},{"username":"jonathan.berglin.work","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15359236/medium/95930b2093db13b76179782f7322c5d5.png"},{"username":"icdmkg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15405504/medium/f334d16cde1ac4ffb935b440d03465af.gif"},{"username":"irithys","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15405614/medium/3086461c47cce0a0c031925e5f943412.png"},{"username":"JannesV","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419912/medium/a7809eb4b817d7c49b62cf10ae86b950.png"},{"username":"benniblot","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419914/medium/8086b1573d31f152ba41949b3a172445.jpeg"},{"username":"pacjo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419916/medium/3cbeddbd7bc01faafb5a3bf47bba915b_default.png"},{"username":"Payou6994","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419934/medium/37c9b9b17dfb578404c1c1ddb73ba7a8.png"},{"username":"fzibi21","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419976/medium/0da688450358e0290a7b7359cc1f7328.png"},{"username":"WowMurdock","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420118/medium/de19576fccb495b6dfe4c4c04a56b834.png"},{"username":"hbooo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420120/medium/6c7c7f8db785061356ebb03d044d3329.jpeg"},{"username":"Manicraft1001","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420178/medium/50ec94563a06a9f74f33bd09f01eed4d.jpg"},{"username":"Void123","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420354/medium/86929d44df92a00f9fe900a985c196df_default.png"},{"username":"R4cc","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15422606/medium/a390979662b84694f59de30bdb732141.jpeg"},{"username":"fabricionaweb","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15425808/medium/a9354142e7ae5152c144409d55fda551_default.png"},{"username":"JokeOfDead","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15426890/medium/a383eac9365e9de64fd4ab1d6fd0cb95.jpeg"},{"username":"hkz","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15427174/medium/c88acefb0d7306e1f7470e872029fb39_default.png"},{"username":"Steken","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15428516/medium/d5aea5653c769c3a523182bdb60d1664.png"},{"username":"flar.anton","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15428592/medium/b01fdb365d892e9f811f77fcb50a80a2.jpeg"},{"username":"Bon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15433542/medium/5397da4dfc821f20b6ac14fe0c514e9a.jpeg"},{"username":"bfkadan","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15434162/medium/4f9a0b43cfe3acaea60124c14ba7f44a.png"},{"username":"BunnySweety","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15434662/medium/f0ef200a6a0dcf0e1d0e9ecd4148f560_default.png"},{"username":"HRKings","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15436168/medium/69a31e461d38549f01864e7ef10d642e.png"},{"username":"wiston81","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15439078/medium/10f292c8d12a7c21a44b54495fa4a3d8.jpeg"},{"username":"qaz0911","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15440860/medium/3d3e50ee388c72dc4bf7a771761f2d89_default.png"},{"username":"qqyule","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15441462/medium/7a3cdf82710ffb5d8f388bc0bd010665.png"},{"username":"Bims0n","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15445560/medium/603220b603eeb3367e0f0d3fa675247c.jpg"},{"username":"TariqDaCoder","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15446228/medium/50b0f4040112bbd67690b769477398e5_default.png"},{"username":"Anarchon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15449644/medium/e925e1f3e3ffbf0f982391ce263a1a28.jpeg"},{"username":"Ashun","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15453020/medium/ccdcf51c73d6aae40751bb30beee1915_default.png"},{"username":"sebekmartin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15454038/medium/bcfb44598cdfd1d7cd4eb35812538962.jpeg"},{"username":"RagnarGraves","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15459882/medium/143d5af850c1154070a218bea124e9cb_default.png"},{"username":"PrtmPhlp","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15462414/medium/b80db55e9de301432dcd1f8c8b24fd49_default.png"},{"username":"DooYoo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15470768/medium/2a18cf4be67094724b508c9e1e698a21_default.png"},{"username":"espentruls","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15486092/medium/8e38afc3a4ff669226a0cfd3e420ff3a.jpeg"},{"username":"frisco82","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15486922/medium/4e1c5d4189b42508e660daa3c1c25b2a.jpeg"},{"username":"lupineDK","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15491798/medium/461bd501e8371c062bf29ea171aedd36_default.png"},{"username":"hillaliy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15492732/medium/0bae17b421604892d888e3fc70cf0587.jpeg"},{"username":"MarcOrfilaCarreras","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15501072/medium/ea52b26c3c6f21e4931e38e3ce3f3d6e.png"},{"username":"robertbridda","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15507822/medium/a368c2e30411bb2da9b49290084191f3.png"},{"username":"MKoniuszko","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15518090/medium/87605434fcc839f6763ab07c50f6d232.jpeg"},{"username":"HeroSizy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15518710/medium/4e79c0e98cbeb536dd961e656331b509.png"},{"username":"dwt136","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15520022/medium/554422503f2baea43ace85facb4546fb_default.png"},{"username":"asifthewebguy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15526719/medium/b18931dd0c800d725048bd440646198b_default.png"},{"username":"eiloogs","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15545537/medium/f290a2f1190983530a9b76b2e858a609.gif"},{"username":"_vytdv","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15547289/medium/60d8644cc8ad6f11a92ccea4a14cd098_default.png"},{"username":"crendasien","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15554645/medium/598ab1d4aaf6b8dccd5ba16be92da7b9.jpeg"},{"username":"edxo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15573823/medium/8a565b732a75a77f840dd123cdb30bf4.png"},{"username":"somerlev","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15617065/medium/f4b13513e311ec902d90b2f718412c55.jpg"},{"username":"kid1412621","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15643771/medium/dd455e32de652fa88e6fd97598bdffa7.png"},{"username":"suming","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15644717/medium/244159dfe10fa03436205506f80c9e25.png"},{"username":"nick.gher","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15647517/medium/5374a2c6fef60a3fbf0edf86b997c351_default.png"},{"username":"DataCat","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15650315/medium/ce7c1365adf35c5d490d77500a4607fb_default.png"},{"username":"dizo89","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15658375/medium/0ca745e5017d491fe1b22b0239904de8.jpeg"},{"username":"tee_noodle","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15674577/medium/804d9cf06f5196026acb6436b809d0da_default.png"},{"username":"Marty88","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15674593/medium/492b1509d52bd2809dea768121217125.jpeg"},{"username":"Spillebulle","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15677023/medium/20b98bb85062e07afe0e63618f8a5feb.PNG"},{"username":"petitmewen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15685239/medium/15de9b62d2e0bc25013435f1784bbcc1.jpeg"},{"username":"NoProsNoNoobs","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15687709/medium/ae8f65fafeb8bcf74dcb8871bbe46461.png"},{"username":"y.gybson","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15690777/medium/b5cb5d2d5768904ff6586c727e3a6c77.jpeg"},{"username":"inside90","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15704947/medium/c1355fcb30dd76f8e39d98d1d49f1c52.png"},{"username":"RJSkudra","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15709853/medium/c3abf2774913dc4e81fb261d36d7668c.png"},{"username":"binge203","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15713937/medium/77c1cfa4314673db80e6881fd9f64668.gif"},{"username":"Mailootje","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15714337/medium/743c3bc4ab1989966a375eeeec83d8b8.jpeg"},{"username":"tim-wiegers","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15719805/medium/08a96f064813350661cd6b20bf3d7d99.png"},{"username":"GkhnG","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15722911/medium/71a027caec489ef6ce82bcf1888329d0_default.png"},{"username":"Zoen-Millo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15760967/medium/9e956f11adc5b34f5636268b5c485dbf.jpg"},{"username":"HooinKyoma","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15792897/medium/9489f0a9b368e0e827ae758b740a2eed.jpeg"},{"username":"wathergeen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15794495/medium/a83b7fc80d180669ebfd6deb3544cfd0.png"},{"username":"MoeToo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15818233/medium/d35cd6953717706eaf20f6c143c62947.png"},{"username":"itodouble","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15836233/medium/e984caea18fb0673bf319fcf28cef649.png"},{"username":"loslocitos","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15847901/medium/fe30d12fd2cf38212f929e13b169f9ec.jpeg"},{"username":"Oversleep","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15849065/medium/06141f13a6d541d753f3c2f2947b8068_default.png"},{"username":"Beardy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15865139/medium/fca6b9d2b3f52e286d1568f52b83b6a0_default.png"},{"username":"raelyan","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15875457/medium/2f4fda1d1aaa5dcc79b328baf3f03151.jpeg"},{"username":"dolphin738","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15913763/medium/ee6fede7b8528ca642329ada80d1cc18.png"},{"username":"brunotco","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15916719/medium/09db45880fc05abc18adb8d932a5ecf9_default.png"},{"username":"LukeIsHereToDevelop","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15924739/medium/3e6cd3940297bb4ba7bb039c93e6f918.png"},{"username":"kennit","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15925879/medium/6b0733ad3c5949b91c55e4d8b03db8a5_default.png"},{"username":"kuunpire","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15950309/medium/8192a4f08f07086828ac9f74ed29a169.jpeg"},{"username":"Sandor-dev","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15951759/medium/0216c2da4eb028164ebbecf1c72f6271_default.png"},{"username":"Meierschlumpf","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15953187/medium/23c744faef1ab84fbdc9351a7850aab6.jpeg"},{"username":"harmlesscat","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15970733/medium/dd8d0214a0250c932bb518b1b55e45a2_default.png"},{"username":"OrzWTF","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15976121/medium/4c4557cbff7ff7b0503455bc59c020e0.jpeg"},{"username":"tagaishi","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15977271/medium/eade504c83a5a1ff831c80a538fbdb44_default.png"},{"username":"azurite928","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15981895/medium/547ccc459ee123e78b5401c499f1022d.png"},{"username":"Ronner231","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16021342/medium/7734d550df2de5a2fec2ffff33e7024c.jpeg"},{"username":"ugyes","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16034148/medium/ed001e3f470a2dea9a8ce955b18e7bd5.png"},{"username":"rpieja","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16045554/medium/bd55baca2ef8b92502a760cc9ee7c505_default.png"},{"username":"flambyisyou","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16051620/medium/3a3bc0c90f6b95ab4ef74396a0a17beb.png"},{"username":"Topbcy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16077170/medium/d3aed33ea56330338756cfcd89477cfe.jpeg"},{"username":"ai5d02sb","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16084674/medium/7c8119fe2a5ca71bb15f636916a42b95_default.png"},{"username":"explosiveparrot","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16097722/medium/7762f80fc1da63f5b2eb87de9d640324_default.png"},{"username":"DestroyCom","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16111544/medium/83e3d3ac5c8bfed634cd1a074854db67.png"},{"username":"neotraxo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16116966/medium/b30df957873329019a8a90a69f6efe3a.png"},{"username":"gzxpa","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16123314/medium/487b05577310a946b0b98bc72c11213b_default.png"},{"username":"TORIK","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16124732/medium/de770890e6411860ac06e8cc2dc0abd0_default.png"},{"username":"sergio.pibot","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16138114/medium/80db802b2fcd6bbf19ea4c7413367dca.jpeg"},{"username":"karam-ajaj","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16139838/medium/7539ab958d3c85d5f67e7849483ea8f7.jpeg"},{"username":"SimonHenz97","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16151520/medium/9b94a85b536688e2d94538c384fd0a76.png"},{"username":"olsson82","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16198988/medium/eeaab4cba210c537424d4204754b604e.png"},{"username":"bo3bdo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16222806/medium/8652f3beacb6098dde5a4cd0a29fe80d.jpeg"},{"username":"AngryPlayer04","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16245192/medium/342715274f4dc31fd4132cdae9126188.jpeg"},{"username":"ehatamm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16245884/medium/979d5e5526fe545be9bf46db481f7182.jpeg"},{"username":"Balionelis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16246058/medium/986d62ba363594c517d966fe9178dcbb.png"},{"username":"kwargs","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16248816/medium/19ce11f04bf1ae2637e0483399c675f9_default.png"},{"username":"lucicu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16273892/medium/3b09e8f3bead221ef98d6a45a16851dc_default.png"},{"username":"Michael5564445","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16357688/medium/9d9026a8bf3eaccb0417da240932ebf7.png"},{"username":"Netscream","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16359198/medium/694e0c8572dc8a47e6d63da31ec5b992.png"},{"username":"belicstefan04","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16368142/medium/4742dcfd7bf7ad7e33e37ac44fba7e0f.png"},{"username":"Hamad2066","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16371478/medium/f37bbc7685b6757defdbd1494236af61.jpeg"},{"username":"3ct0pl4sm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16399616/medium/ce796d1c40163975624c0a483e56374f.png"},{"username":"sanchez.marcell626","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16433865/medium/3ddde1314764cc2205ffdcd1ae719a91.png"},{"username":"Minoctis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16490079/medium/91fd0849303a4eca033d660d0a7b6854.jpeg"},{"username":"vittoriosoccorso","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16498805/medium/17086b2f1981f734edd1572f79c3158a.jpeg"},{"username":"Worgen325","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16533177/medium/4a62cc6b06095751aeb4b1b3e96db93f.png"},{"username":"homarr","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16657003/medium/3afabfd3de949a54ff5d40ad04552aba.png"},{"username":"mwgg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16658379/medium/763dd09f5c238cc5324d4d5357985292.png"},{"username":"dymek37","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16659221/medium/d1dc6d11d7e7fc370efc5070e837ae03.png"},{"username":"kiwinho","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16671855/medium/bfe3a2d497dc4748a04d02e4ae2139cb.jpeg"},{"username":"tjvg4m34r13","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16679135/medium/7a483b9b0abe0d925e54808e1cb38fa0.jpeg"},{"username":"Diegoem","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16705921/medium/29ce68ebc191fc3f65499511b12de98f_default.png"},{"username":"bouks69","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16746091/medium/b58b1fc08520de416198be9df5d093eb.jpeg"},{"username":"futhgar","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16748067/medium/b8c526b097f9aa9d687250cac3df16dc.jpeg"},{"username":"GrimSQL","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16764343/medium/fff729a76d1f8fbcdaee9bb0c0f5f3fd.png"},{"username":"chnikel","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16767047/medium/3dda2a37e03049dafefe6697bb00f75c.png"},{"username":"yuki19870616","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16767951/medium/f59c848e38382cda6c8464b0a7b9e642_default.png"},{"username":"noamdal","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16782245/medium/b4a72a61f9caf138f0322c0cb987e6d0.png"},{"username":"MalithRukshan","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16809057/medium/084d6a5b35fbbeacc70e7021197d222f.png"},{"username":"minirope19","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16930929/medium/e8cbbc26747e31c5a8959215e1dd067b.jpeg"},{"username":"toineenzo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12371852/medium/9f1b2bedb4794c59479cd289bdba9fab.png"},{"username":"ArcaneWater","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12421105/medium/1ac82517a6c658f6b62c48aebcb17e86_default.png"},{"username":"Ebedami","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12974801/medium/b596dea5c09454c4c828eac558389755.jpg"},{"username":"SergiSvK","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13320543/medium/3df3c79cc5f0c53716c559cd3fd2fc20.png"},{"username":"jeongeon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13362856/medium/eb572f72cde5e5526c517ca3a6489850_default.png"},{"username":"MrTranCFCVN","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13439475/medium/a1789d69c85d90c667194b5d6a518c08_default.png"},{"username":"Cruellest","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13610615/medium/2a74faa0947ee08d18f7946fb8602c1e.jpg"},{"username":"Thario","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14491372/medium/dd5e142070802a672900121aa3f332a6_default.png"},{"username":"Kachelkaiser","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14763406/medium/203a781797da4a18fe0f4e7db8fd547c.png"},{"username":"regi4","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14842936/medium/f7e1d672f562a7db61ba6b4b8f4de41d.png"},{"username":"baton5129","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14891064/medium/8d438f557b82977dd02f0ead3187265f.PNG"},{"username":"TheRedCyclops","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16486399/medium/7f39226180120d5a9efcb8e13d8aec8e_default.png"},{"username":"B3CKDOOR","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16744975/medium/e6c7b2d45e76465d54e6efb67c83da7d.png"},{"username":"Larsluph","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16779933/medium/ed7d36f8b44013bad3a16ac0491bd0f7.png"},{"username":"FOEDI","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16781001/medium/6b4552fb72e359aa016f7a054078fac8.png"},{"username":"xmarkurion","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16805443/medium/34a20428427de5aaef99c7d140646803.png"},{"username":"gregid","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16806705/medium/f3c8f4a20436e8538929130142bbc104.png"},{"username":"Flameberg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16820453/medium/d47be866148474c9d05fec6fbe406d88.png"},{"username":"Playfust","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16872865/medium/5f4609cc711e5fb9fa8a0b178635769c.jpeg"},{"username":"Cotignac","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16879297/medium/81ff353edf030699a159bb79cda26e84.jpg"},{"username":"LeaHun","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16916375/medium/618520f0543b1e212ebc83d66b683d4b_default.png"},{"username":"jackwellerreal","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16919717/medium/37bbfdc03893f141133ccc619593266d.png"},{"username":"andrius.cim","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16967845/medium/46028fc1a0ddfaaeebcb37b39739625d_default.png"},{"username":"xjxexrxrxyx","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17041412/medium/d34d664166db6fb25579bca9ff3b50b4.jpeg"},{"username":"bilhal.fellah","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17044572/medium/d1ec6f17e4aa013e9eededc83778d2c6.png"},{"username":"the_octo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17058060/medium/7423ab3a4cabb67f5decb2e2dfa2b675_default.png"},{"username":"BamesJond","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17075846/medium/128d7ffd40254c8e376f45678e2fc620_default.png"},{"username":"Kornikus","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17134240/medium/d7a42b2c30db46ff152699ca01f9e11a_default.png"},{"username":"xoxyuxu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17176526/medium/108055aa24343043de852e412bec74be.png"},{"username":"cryptodntsleep","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17249408/medium/2bd0f716f062632f78085b3828a72b6d_default.png"},{"username":"yaniorg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17261842/medium/7dbfc77f21c826845961243c44540d26.jpg"},{"username":"Vidariondr","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17262438/medium/45fbc71be02ef27296b6f423e97b6a03_default.png"},{"username":"Fastery","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17263066/medium/701b0edc59676174863ad651528bbb37.jpeg"},{"username":"stratself","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17290388/medium/57d9d8161b3fd0abf4dc5558b4a1fa05_default.png"},{"username":"wuzeqin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17292606/medium/b9e0308410b31337e2d7aa6ed346d718_default.png"}]
\ No newline at end of file
+[{"username":"carlchina","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/6697/medium/d22bbe7797bbeb30dbdc73a5648d329a_default.png"},{"username":"zielmann","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/7795/medium/ad22b8b8d5eb33e4154d53a454c862fd_default.png"},{"username":"Thalyn","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12494028/medium/5faf5acc945a874ed116c4567edaa09f_default.png"},{"username":"magnushj","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12503488/medium/68f32e33ea7b891960055c9f831f7344_default.png"},{"username":"almontegil","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12580457/medium/f4136cacbdfdb4c28ae7f85dc5f840db_default.png"},{"username":"Skick","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12619811/medium/0331f1de413a645b4516bc4e037f31bb.jpg"},{"username":"andibing","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12664938/medium/b8be63e4dcb2e791ced1ffc9e3a049a5.jpg"},{"username":"gronare","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12680911/medium/c6eb14d1504156f34a158e507f73aa3d_default.png"},{"username":"SmartPhoneLover","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12701640/medium/ec95486662ec875cda080e778c3ff702.jpg"},{"username":"marcelotk_15","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12773227/medium/ecf6bea16ab0c873c131df2154ee9718_default.png"},{"username":"S3OD177","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13051544/medium/11dd990837f61f7e8f7d36b041a7fddb_default.png"},{"username":"marcg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13153301/medium/ebcf60fbf27deb148ec40a659566c6ff_default.png"},{"username":"BeersTeddy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13185230/medium/2f1f4e1effe74a23422b195cbefb2a95_default.png"},{"username":"jamesmcmahon0","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13245578/medium/586aa873b4abddbd9abc6f3de99ab70e.jpeg"},{"username":"b1nar10","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13286752/medium/249b02e3368752cb175446082015737c_default.png"},{"username":"vannCN","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13330448/medium/9b8a9ee3611e51e951e22d5fd4eb7d8d.jpg"},{"username":"binswm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13343482/medium/45dde0e6097b9b72705d2eba9dbbc276_default.png"},{"username":"SkewRam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13496556/medium/188f5c2deb7938eda51eb786cc4539ca.jpeg"},{"username":"raphcatarino","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13547726/medium/b003511e67df13a4b4b5689488fa8099.jpg"},{"username":"shillos5","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13600557/medium/b17650b2b84f829d54fa548c44c1ab27.jpeg"},{"username":"wolong98","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13641407/medium/f4634edc58c7857a357e5293543c15cf.jpg"},{"username":"spair0039","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14012333/medium/72430e96027c09c19141cac38eae4617.png"},{"username":"MajorMarcin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14072183/medium/0a197e64bb92b6ea94cecbb607512c45.jpg"},{"username":"KosmoMoustache","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14103535/medium/51c438cdd9f86e8811c75f4869de479c.png"},{"username":"Soochaehwa","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14118689/medium/496a1ce63111547bf455a1e0a7ac75f1_default.png"},{"username":"garryfield","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14187035/medium/520c964706676045f6eeec1b08edc880.jpg"},{"username":"droidenko","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14444264/medium/4aa3a8e824f72bc9e5ec0d8de307095e.jpeg"},{"username":"maathis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14489950/medium/6eeddf13a757ee35f78f1763f94d95e1.jpeg"},{"username":"bukvam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14546502/medium/a819dc40a13c57395a17dc46e847d3ce.jpg"},{"username":"gm.cinalli","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14670666/medium/2d466a0fdbda40764526be86c97c0ab4.jpeg"},{"username":"antoine2tt","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14722148/medium/f88d926900862dd59007ea4b3419cb9d.png"},{"username":"cretzen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14799754/medium/3ba5c1805ec20c000d5810c07985afe9.jpg"},{"username":"ktKongTong","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14817246/medium/97cfc3c028dbdaf85ebd1102da71e58c.jpeg"},{"username":"marinkaberg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14861042/medium/2d5c4e62613f03082f3e645fa92efd59.jpeg"},{"username":"djismgaming","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14934947/medium/f5a8570713c34ab0f7d5405d105e2a9a.jpeg"},{"username":"f1refa11","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14949159/medium/fd2ae63b8eb4462200ba96abf943c1b9.png"},{"username":"jeffersonraimon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15057621/medium/6dff469563860e2618bc9d45646d0ab4.png"},{"username":"giop98","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15057987/medium/b8a4825d3fc39fc662f35ee258db4b2d.jpeg"},{"username":"tomislav.kraljevic","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15118857/medium/e133f1061cc92850b854d05d8faaeafd.png"},{"username":"Walkx","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15202182/medium/5c37361ae45aeed487b34582c1f7ca37.png"},{"username":"andrea.rosso","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15246318/medium/11f3f5ef44ec7f55b6f143090e208704_default.png"},{"username":"ajnart","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15270132/medium/a0f107a463c8910ee96bc2fa843a17e3.jpeg"},{"username":"Witchling","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15282238/medium/9e196b6783415b10ca571b7673c2ef33.jpg"},{"username":"guineuu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15292058/medium/22fbb758bda3b7805d50bf21d38f2c20.jpeg"},{"username":"Bulgus","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15304568/medium/0e8787e5ceb02ed5c96a514d0068ae87.jpg"},{"username":"Narno","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15314996/medium/a6ba093f24884250a1bf6c6f2ca50f1b_default.png"},{"username":"BySempron","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15315986/medium/e3d22d7b1423c6823a9f36d595ed4bdb.png"},{"username":"jonathan.berglin.work","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15359236/medium/95930b2093db13b76179782f7322c5d5.png"},{"username":"icdmkg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15405504/medium/f334d16cde1ac4ffb935b440d03465af.gif"},{"username":"irithys","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15405614/medium/3086461c47cce0a0c031925e5f943412.png"},{"username":"JannesV","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419912/medium/a7809eb4b817d7c49b62cf10ae86b950.png"},{"username":"benniblot","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419914/medium/8086b1573d31f152ba41949b3a172445.jpeg"},{"username":"pacjo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419916/medium/3cbeddbd7bc01faafb5a3bf47bba915b_default.png"},{"username":"Payou6994","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419934/medium/37c9b9b17dfb578404c1c1ddb73ba7a8.png"},{"username":"fzibi21","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419976/medium/0da688450358e0290a7b7359cc1f7328.png"},{"username":"WowMurdock","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420118/medium/de19576fccb495b6dfe4c4c04a56b834.png"},{"username":"hbooo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420120/medium/6c7c7f8db785061356ebb03d044d3329.jpeg"},{"username":"Manicraft1001","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420178/medium/50ec94563a06a9f74f33bd09f01eed4d.jpg"},{"username":"Void123","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420354/medium/86929d44df92a00f9fe900a985c196df_default.png"},{"username":"R4cc","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15422606/medium/a390979662b84694f59de30bdb732141.jpeg"},{"username":"fabricionaweb","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15425808/medium/a9354142e7ae5152c144409d55fda551_default.png"},{"username":"JokeOfDead","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15426890/medium/a383eac9365e9de64fd4ab1d6fd0cb95.jpeg"},{"username":"hkz","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15427174/medium/c88acefb0d7306e1f7470e872029fb39_default.png"},{"username":"Steken","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15428516/medium/d5aea5653c769c3a523182bdb60d1664.png"},{"username":"flar.anton","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15428592/medium/b01fdb365d892e9f811f77fcb50a80a2.jpeg"},{"username":"Bon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15433542/medium/5397da4dfc821f20b6ac14fe0c514e9a.jpeg"},{"username":"bfkadan","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15434162/medium/4f9a0b43cfe3acaea60124c14ba7f44a.png"},{"username":"BunnySweety","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15434662/medium/f0ef200a6a0dcf0e1d0e9ecd4148f560_default.png"},{"username":"HRKings","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15436168/medium/69a31e461d38549f01864e7ef10d642e.png"},{"username":"wiston81","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15439078/medium/10f292c8d12a7c21a44b54495fa4a3d8.jpeg"},{"username":"qaz0911","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15440860/medium/3d3e50ee388c72dc4bf7a771761f2d89_default.png"},{"username":"qqyule","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15441462/medium/7a3cdf82710ffb5d8f388bc0bd010665.png"},{"username":"Bims0n","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15445560/medium/603220b603eeb3367e0f0d3fa675247c.jpg"},{"username":"TariqDaCoder","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15446228/medium/50b0f4040112bbd67690b769477398e5_default.png"},{"username":"Anarchon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15449644/medium/e925e1f3e3ffbf0f982391ce263a1a28.jpeg"},{"username":"Ashun","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15453020/medium/ccdcf51c73d6aae40751bb30beee1915_default.png"},{"username":"sebekmartin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15454038/medium/bcfb44598cdfd1d7cd4eb35812538962.jpeg"},{"username":"RagnarGraves","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15459882/medium/143d5af850c1154070a218bea124e9cb_default.png"},{"username":"PrtmPhlp","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15462414/medium/b80db55e9de301432dcd1f8c8b24fd49_default.png"},{"username":"DooYoo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15470768/medium/2a18cf4be67094724b508c9e1e698a21_default.png"},{"username":"espentruls","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15486092/medium/8e38afc3a4ff669226a0cfd3e420ff3a.jpeg"},{"username":"frisco82","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15486922/medium/4e1c5d4189b42508e660daa3c1c25b2a.jpeg"},{"username":"lupineDK","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15491798/medium/461bd501e8371c062bf29ea171aedd36_default.png"},{"username":"hillaliy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15492732/medium/0bae17b421604892d888e3fc70cf0587.jpeg"},{"username":"MarcOrfilaCarreras","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15501072/medium/ea52b26c3c6f21e4931e38e3ce3f3d6e.png"},{"username":"robertbridda","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15507822/medium/a368c2e30411bb2da9b49290084191f3.png"},{"username":"MKoniuszko","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15518090/medium/87605434fcc839f6763ab07c50f6d232.jpeg"},{"username":"HeroSizy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15518710/medium/4e79c0e98cbeb536dd961e656331b509.png"},{"username":"dwt136","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15520022/medium/554422503f2baea43ace85facb4546fb_default.png"},{"username":"asifthewebguy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15526719/medium/b18931dd0c800d725048bd440646198b_default.png"},{"username":"eiloogs","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15545537/medium/f290a2f1190983530a9b76b2e858a609.gif"},{"username":"_vytdv","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15547289/medium/60d8644cc8ad6f11a92ccea4a14cd098_default.png"},{"username":"crendasien","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15554645/medium/598ab1d4aaf6b8dccd5ba16be92da7b9.jpeg"},{"username":"edxo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15573823/medium/8a565b732a75a77f840dd123cdb30bf4.png"},{"username":"somerlev","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15617065/medium/f4b13513e311ec902d90b2f718412c55.jpg"},{"username":"kid1412621","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15643771/medium/dd455e32de652fa88e6fd97598bdffa7.png"},{"username":"suming","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15644717/medium/244159dfe10fa03436205506f80c9e25.png"},{"username":"nick.gher","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15647517/medium/5374a2c6fef60a3fbf0edf86b997c351_default.png"},{"username":"DataCat","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15650315/medium/ce7c1365adf35c5d490d77500a4607fb_default.png"},{"username":"dizo89","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15658375/medium/0ca745e5017d491fe1b22b0239904de8.jpeg"},{"username":"tee_noodle","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15674577/medium/804d9cf06f5196026acb6436b809d0da_default.png"},{"username":"Marty88","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15674593/medium/492b1509d52bd2809dea768121217125.jpeg"},{"username":"Spillebulle","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15677023/medium/20b98bb85062e07afe0e63618f8a5feb.PNG"},{"username":"petitmewen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15685239/medium/15de9b62d2e0bc25013435f1784bbcc1.jpeg"},{"username":"NoProsNoNoobs","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15687709/medium/ae8f65fafeb8bcf74dcb8871bbe46461.png"},{"username":"y.gybson","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15690777/medium/b5cb5d2d5768904ff6586c727e3a6c77.jpeg"},{"username":"inside90","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15704947/medium/c1355fcb30dd76f8e39d98d1d49f1c52.png"},{"username":"RJSkudra","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15709853/medium/c3abf2774913dc4e81fb261d36d7668c.png"},{"username":"binge203","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15713937/medium/77c1cfa4314673db80e6881fd9f64668.gif"},{"username":"Mailootje","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15714337/medium/743c3bc4ab1989966a375eeeec83d8b8.jpeg"},{"username":"tim-wiegers","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15719805/medium/08a96f064813350661cd6b20bf3d7d99.png"},{"username":"GkhnG","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15722911/medium/71a027caec489ef6ce82bcf1888329d0_default.png"},{"username":"Zoen-Millo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15760967/medium/9e956f11adc5b34f5636268b5c485dbf.jpg"},{"username":"HooinKyoma","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15792897/medium/9489f0a9b368e0e827ae758b740a2eed.jpeg"},{"username":"wathergeen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15794495/medium/a83b7fc80d180669ebfd6deb3544cfd0.png"},{"username":"MoeToo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15818233/medium/d35cd6953717706eaf20f6c143c62947.png"},{"username":"itodouble","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15836233/medium/e984caea18fb0673bf319fcf28cef649.png"},{"username":"loslocitos","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15847901/medium/fe30d12fd2cf38212f929e13b169f9ec.jpeg"},{"username":"Oversleep","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15849065/medium/06141f13a6d541d753f3c2f2947b8068_default.png"},{"username":"Beardy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15865139/medium/fca6b9d2b3f52e286d1568f52b83b6a0_default.png"},{"username":"raelyan","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15875457/medium/2f4fda1d1aaa5dcc79b328baf3f03151.jpeg"},{"username":"dolphin738","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15913763/medium/ee6fede7b8528ca642329ada80d1cc18.png"},{"username":"brunotco","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15916719/medium/09db45880fc05abc18adb8d932a5ecf9_default.png"},{"username":"LukeIsHereToDevelop","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15924739/medium/3e6cd3940297bb4ba7bb039c93e6f918.png"},{"username":"kennit","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15925879/medium/6b0733ad3c5949b91c55e4d8b03db8a5_default.png"},{"username":"kuunpire","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15950309/medium/8192a4f08f07086828ac9f74ed29a169.jpeg"},{"username":"Sandor-dev","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15951759/medium/0216c2da4eb028164ebbecf1c72f6271_default.png"},{"username":"Meierschlumpf","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15953187/medium/23c744faef1ab84fbdc9351a7850aab6.jpeg"},{"username":"harmlesscat","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15970733/medium/dd8d0214a0250c932bb518b1b55e45a2_default.png"},{"username":"OrzWTF","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15976121/medium/4c4557cbff7ff7b0503455bc59c020e0.jpeg"},{"username":"tagaishi","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15977271/medium/eade504c83a5a1ff831c80a538fbdb44_default.png"},{"username":"azurite928","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15981895/medium/547ccc459ee123e78b5401c499f1022d.png"},{"username":"Ronner231","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16021342/medium/7734d550df2de5a2fec2ffff33e7024c.jpeg"},{"username":"ugyes","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16034148/medium/ed001e3f470a2dea9a8ce955b18e7bd5.png"},{"username":"rpieja","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16045554/medium/bd55baca2ef8b92502a760cc9ee7c505_default.png"},{"username":"flambyisyou","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16051620/medium/3a3bc0c90f6b95ab4ef74396a0a17beb.png"},{"username":"Topbcy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16077170/medium/d3aed33ea56330338756cfcd89477cfe.jpeg"},{"username":"ai5d02sb","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16084674/medium/7c8119fe2a5ca71bb15f636916a42b95_default.png"},{"username":"explosiveparrot","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16097722/medium/7762f80fc1da63f5b2eb87de9d640324_default.png"},{"username":"DestroyCom","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16111544/medium/83e3d3ac5c8bfed634cd1a074854db67.png"},{"username":"neotraxo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16116966/medium/b30df957873329019a8a90a69f6efe3a.png"},{"username":"gzxpa","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16123314/medium/487b05577310a946b0b98bc72c11213b_default.png"},{"username":"TORIK","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16124732/medium/de770890e6411860ac06e8cc2dc0abd0_default.png"},{"username":"sergio.pibot","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16138114/medium/80db802b2fcd6bbf19ea4c7413367dca.jpeg"},{"username":"karam-ajaj","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16139838/medium/7539ab958d3c85d5f67e7849483ea8f7.jpeg"},{"username":"SimonHenz97","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16151520/medium/9b94a85b536688e2d94538c384fd0a76.png"},{"username":"olsson82","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16198988/medium/eeaab4cba210c537424d4204754b604e.png"},{"username":"bo3bdo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16222806/medium/8652f3beacb6098dde5a4cd0a29fe80d.jpeg"},{"username":"AngryPlayer04","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16245192/medium/342715274f4dc31fd4132cdae9126188.jpeg"},{"username":"ehatamm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16245884/medium/979d5e5526fe545be9bf46db481f7182.jpeg"},{"username":"Balionelis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16246058/medium/986d62ba363594c517d966fe9178dcbb.png"},{"username":"kwargs","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16248816/medium/19ce11f04bf1ae2637e0483399c675f9_default.png"},{"username":"lucicu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16273892/medium/3b09e8f3bead221ef98d6a45a16851dc_default.png"},{"username":"Michael5564445","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16357688/medium/9d9026a8bf3eaccb0417da240932ebf7.png"},{"username":"Netscream","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16359198/medium/694e0c8572dc8a47e6d63da31ec5b992.png"},{"username":"belicstefan04","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16368142/medium/4742dcfd7bf7ad7e33e37ac44fba7e0f.png"},{"username":"Hamad2066","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16371478/medium/f37bbc7685b6757defdbd1494236af61.jpeg"},{"username":"3ct0pl4sm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16399616/medium/ce796d1c40163975624c0a483e56374f.png"},{"username":"sanchez.marcell626","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16433865/medium/3ddde1314764cc2205ffdcd1ae719a91.png"},{"username":"Minoctis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16490079/medium/91fd0849303a4eca033d660d0a7b6854.jpeg"},{"username":"vittoriosoccorso","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16498805/medium/17086b2f1981f734edd1572f79c3158a.jpeg"},{"username":"Worgen325","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16533177/medium/4a62cc6b06095751aeb4b1b3e96db93f.png"},{"username":"homarr","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16657003/medium/3afabfd3de949a54ff5d40ad04552aba.png"},{"username":"mwgg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16658379/medium/763dd09f5c238cc5324d4d5357985292.png"},{"username":"kiwinho","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16671855/medium/bfe3a2d497dc4748a04d02e4ae2139cb.jpeg"},{"username":"tjvg4m34r13","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16679135/medium/7a483b9b0abe0d925e54808e1cb38fa0.jpeg"},{"username":"Diegoem","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16705921/medium/29ce68ebc191fc3f65499511b12de98f_default.png"},{"username":"bouks69","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16746091/medium/b58b1fc08520de416198be9df5d093eb.jpeg"},{"username":"futhgar","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16748067/medium/b8c526b097f9aa9d687250cac3df16dc.jpeg"},{"username":"GrimSQL","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16764343/medium/fff729a76d1f8fbcdaee9bb0c0f5f3fd.png"},{"username":"chnikel","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16767047/medium/3dda2a37e03049dafefe6697bb00f75c.png"},{"username":"yuki19870616","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16767951/medium/f59c848e38382cda6c8464b0a7b9e642_default.png"},{"username":"noamdal","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16782245/medium/b4a72a61f9caf138f0322c0cb987e6d0.png"},{"username":"MalithRukshan","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16809057/medium/084d6a5b35fbbeacc70e7021197d222f.png"},{"username":"minirope19","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16930929/medium/e8cbbc26747e31c5a8959215e1dd067b.jpeg"},{"username":"toineenzo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12371852/medium/9f1b2bedb4794c59479cd289bdba9fab.png"},{"username":"ArcaneWater","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12421105/medium/1ac82517a6c658f6b62c48aebcb17e86_default.png"},{"username":"Ebedami","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12974801/medium/b596dea5c09454c4c828eac558389755.jpg"},{"username":"SergiSvK","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13320543/medium/3df3c79cc5f0c53716c559cd3fd2fc20.png"},{"username":"jeongeon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13362856/medium/eb572f72cde5e5526c517ca3a6489850_default.png"},{"username":"MrTranCFCVN","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13439475/medium/a1789d69c85d90c667194b5d6a518c08_default.png"},{"username":"Cruellest","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13610615/medium/2a74faa0947ee08d18f7946fb8602c1e.jpg"},{"username":"Thario","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14491372/medium/dd5e142070802a672900121aa3f332a6_default.png"},{"username":"Kachelkaiser","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14763406/medium/203a781797da4a18fe0f4e7db8fd547c.png"},{"username":"regi4","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14842936/medium/f7e1d672f562a7db61ba6b4b8f4de41d.png"},{"username":"baton5129","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14891064/medium/8d438f557b82977dd02f0ead3187265f.PNG"},{"username":"TheRedCyclops","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16486399/medium/7f39226180120d5a9efcb8e13d8aec8e_default.png"},{"username":"dymek37","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16659221/medium/d1dc6d11d7e7fc370efc5070e837ae03.png"},{"username":"B3CKDOOR","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16744975/medium/e6c7b2d45e76465d54e6efb67c83da7d.png"},{"username":"Larsluph","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16779933/medium/ed7d36f8b44013bad3a16ac0491bd0f7.png"},{"username":"FOEDI","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16781001/medium/6b4552fb72e359aa016f7a054078fac8.png"},{"username":"xmarkurion","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16805443/medium/34a20428427de5aaef99c7d140646803.png"},{"username":"gregid","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16806705/medium/f3c8f4a20436e8538929130142bbc104.png"},{"username":"Flameberg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16820453/medium/d47be866148474c9d05fec6fbe406d88.png"},{"username":"Playfust","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16872865/medium/5f4609cc711e5fb9fa8a0b178635769c.jpeg"},{"username":"Cotignac","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16879297/medium/81ff353edf030699a159bb79cda26e84.jpg"},{"username":"LeaHun","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16916375/medium/618520f0543b1e212ebc83d66b683d4b_default.png"},{"username":"jackwellerreal","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16919717/medium/37bbfdc03893f141133ccc619593266d.png"},{"username":"andrius.cim","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16967845/medium/46028fc1a0ddfaaeebcb37b39739625d_default.png"},{"username":"xjxexrxrxyx","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17041412/medium/d34d664166db6fb25579bca9ff3b50b4.jpeg"},{"username":"bilhal.fellah","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17044572/medium/d1ec6f17e4aa013e9eededc83778d2c6.png"},{"username":"the_octo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17058060/medium/7423ab3a4cabb67f5decb2e2dfa2b675_default.png"},{"username":"BamesJond","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17075846/medium/128d7ffd40254c8e376f45678e2fc620_default.png"},{"username":"Kornikus","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17134240/medium/d7a42b2c30db46ff152699ca01f9e11a_default.png"},{"username":"xoxyuxu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17176526/medium/108055aa24343043de852e412bec74be.png"},{"username":"cryptodntsleep","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17249408/medium/b9e15aa2b24a0dbc1e4f194aa8ed5109.png"},{"username":"yaniorg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17261842/medium/7dbfc77f21c826845961243c44540d26.jpg"},{"username":"Vidariondr","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17262438/medium/45fbc71be02ef27296b6f423e97b6a03_default.png"},{"username":"Fastery","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17263066/medium/701b0edc59676174863ad651528bbb37.jpeg"},{"username":"stratself","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17290388/medium/57d9d8161b3fd0abf4dc5558b4a1fa05_default.png"},{"username":"wuzeqin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17292606/medium/b9e0308410b31337e2d7aa6ed346d718_default.png"},{"username":"ChristopherBull","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17304338/medium/21a175ce596bfae81430767467908b90.jpeg"},{"username":"darkbcnlord","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17311436/medium/b271bc0b419ec3a26ddb7b63ff8ffc4b.png"}]
\ No newline at end of file
diff --git a/tooling/eslint/package.json b/tooling/eslint/package.json
index 34588160d..5f36205a0 100644
--- a/tooling/eslint/package.json
+++ b/tooling/eslint/package.json
@@ -17,19 +17,19 @@
},
"prettier": "@homarr/prettier-config",
"dependencies": {
- "@next/eslint-plugin-next": "15.5.0",
+ "@next/eslint-plugin-next": "15.5.2",
"eslint-config-prettier": "^10.1.8",
"eslint-config-turbo": "^2.5.6",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^5.2.0",
- "typescript-eslint": "^8.41.0"
+ "typescript-eslint": "^8.43.0"
},
"devDependencies": {
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "eslint": "^9.34.0",
+ "eslint": "^9.35.0",
"typescript": "^5.9.2"
}
}
diff --git a/tooling/github/setup/action.yml b/tooling/github/setup/action.yml
index a84e3fb96..db9d781f5 100644
--- a/tooling/github/setup/action.yml
+++ b/tooling/github/setup/action.yml
@@ -5,7 +5,7 @@ runs:
using: composite
steps:
- uses: pnpm/action-setup@v4
- - uses: actions/setup-node@v4
+ - uses: actions/setup-node@v5
with:
node-version: 22.19.0
cache: "pnpm"
diff --git a/tooling/prettier/package.json b/tooling/prettier/package.json
index f32987a0d..949f4c58d 100644
--- a/tooling/prettier/package.json
+++ b/tooling/prettier/package.json
@@ -10,7 +10,7 @@
},
"prettier": "@homarr/prettier-config",
"dependencies": {
- "@ianvs/prettier-plugin-sort-imports": "^4.6.2",
+ "@ianvs/prettier-plugin-sort-imports": "^4.7.0",
"prettier": "^3.6.2"
},
"devDependencies": {
|