diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index c6d6e5fdf..d824200e4 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -33,6 +33,15 @@ body: options: # The below comment is used to insert a new version with on-release.yml #NEXT_VERSION# + - 1.59.3 + - 1.59.2 + - 1.59.1 + - 1.59.0 + - 1.58.1 + - 1.58.0 + - 1.57.1 + - 1.57.0 + - 1.56.1 - 1.56.0 - 1.55.0 - 1.54.0 diff --git a/.github/ISSUE_TEMPLATE/integration.yml b/.github/ISSUE_TEMPLATE/integration.yml index 3aeb492e7..549808df3 100644 --- a/.github/ISSUE_TEMPLATE/integration.yml +++ b/.github/ISSUE_TEMPLATE/integration.yml @@ -25,16 +25,16 @@ body: label: Public API available? description: Is there a public API available, that we can consume in Homarr? options: - - Yes, available on a website - - Yes, available in the application itself - - No + - "Yes, available on a website" + - "Yes, available in the application itself" + - "No" validations: required: true - type: dropdown attributes: label: Are you willing to contribute this yourself? options: - - Yes - - No + - "Yes" + - "No" validations: required: true diff --git a/.github/ISSUE_TEMPLATE/widget.yml b/.github/ISSUE_TEMPLATE/widget.yml index 9ede8d0ba..aa1d0f6a1 100644 --- a/.github/ISSUE_TEMPLATE/widget.yml +++ b/.github/ISSUE_TEMPLATE/widget.yml @@ -24,7 +24,7 @@ body: attributes: label: Are you willing to contribute this yourself? options: - - Yes - - No + - "Yes" + - "No" validations: required: true diff --git a/.github/actions/prebuilt-debian/action.yaml b/.github/actions/prebuilt-debian/action.yaml index 9770a7eb1..af1b7fdad 100644 --- a/.github/actions/prebuilt-debian/action.yaml +++ b/.github/actions/prebuilt-debian/action.yaml @@ -15,11 +15,11 @@ runs: with: persist-credentials: false - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Build docker image for ${{ inputs.architecture }} id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: push: false load: true diff --git a/.github/renovate.json5 b/.github/renovate.json5 index e3c3e433f..269a4d2ff 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -11,6 +11,12 @@ matchPackageNames: ["tsx"], enabled: false, }, + // Reenable once bug with undici v8 is fixed (https://github.com/homarr-labs/homarr/issues/5467) + { + matchPackageNames: ["undici"], + matchNewValue: "8.*", + enabled: false, + }, { matchUpdateTypes: ["minor", "patch", "pin", "digest"], automerge: true, @@ -31,6 +37,12 @@ automerge: false, }, ], + // Updates lockfile for prebuilt-debian after if package.json is updated, otherwise only root lockfile is updated + postUpgradeTasks: { + commands: ["cd deployments/prebuilt-debian && pnpm install --ignore-workspace --lockfile-only"], + fileFilters: ["deployments/prebuilt-debian/pnpm-lock.yaml"], + executionMode: "update", + }, updateInternalDeps: true, rangeStrategy: "bump", automerge: false, diff --git a/.github/workflows/automatic-approval.yml b/.github/workflows/automatic-approval.yml index a8a7b6feb..6647bad82 100644 --- a/.github/workflows/automatic-approval.yml +++ b/.github/workflows/automatic-approval.yml @@ -9,16 +9,21 @@ jobs: approve-automatic-prs: runs-on: ubuntu-latest timeout-minutes: 2 - if: github.actor_id == 158783068 || github.actor_id == 190541745 || github.actor_id == 210161987 # Id of renovate bot and crowdin bot see https://api.github.com/users/homarr-renovate%5Bbot%5D and https://api.github.com/users/homarr-crowdin%5Bbot%5D and https://api.github.com/users/homarr-update-contributors%5Bbot%5D + # 158783068: homarr-renovate[bot] + # 190541745: homarr-crowdin[bot] + # 210161987: homarr-update-contributors[bot] + # 175486441: homarr-releases[bot] + # Extracted from https://api.github.com/users/ + if: github.actor_id == 158783068 || github.actor_id == 190541745 || github.actor_id == 210161987 || github.actor_id == 175486441 steps: - name: Checkout code uses: actions/checkout@v6 - name: Obtain token id: obtainToken - uses: actions/create-github-app-token@v2 + uses: actions/create-github-app-token@v3 with: private-key: ${{ secrets.RENOVATE_APPROVE_PRIVATE_KEY }} - app-id: ${{ secrets.RENOVATE_APPROVE_APP_ID }} + client-id: ${{ secrets.RENOVATE_APPROVE_APP_ID }} permission-pull-requests: write # required to approve pull request - name: Install GitHub CLI diff --git a/.github/workflows/code-quality.yml b/.github/workflows/code-quality.yml index eeaec94f2..5dc6df825 100644 --- a/.github/workflows/code-quality.yml +++ b/.github/workflows/code-quality.yml @@ -11,14 +11,10 @@ on: concurrency: group: "${{ github.workflow }}-${{ github.ref }}" - cancel-in-progress: ${{ github.ref != 'refs/heads/master' }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} -# You can leverage Vercel Remote Caching with Turbo to speed up your builds -# @link https://turborepo.org/docs/core-concepts/remote-caching#remote-caching-on-vercel-builds env: FORCE_COLOR: 3 - TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} - TURBO_TEAM: ${{ vars.TURBO_TEAM }} jobs: lint: @@ -59,7 +55,7 @@ jobs: uses: ./tooling/github/setup - name: Typecheck - run: turbo typecheck + run: pnpm typecheck test: runs-on: ubuntu-latest @@ -89,7 +85,7 @@ jobs: uses: ./tooling/github/setup - name: Build docker image id: build-docker-image - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: platforms: linux/amd64 context: . diff --git a/.github/workflows/crowdin-schedule-download.yml b/.github/workflows/crowdin-schedule-download.yml index fb0e1d7ba..a5dec8869 100644 --- a/.github/workflows/crowdin-schedule-download.yml +++ b/.github/workflows/crowdin-schedule-download.yml @@ -19,10 +19,10 @@ jobs: - name: Obtain token id: obtainToken - uses: actions/create-github-app-token@v2 + uses: actions/create-github-app-token@v3 with: private-key: ${{ secrets.CROWDIN_APP_PRIVATE_KEY }} - app-id: ${{ secrets.CROWDIN_APP_ID }} + client-id: ${{ secrets.CROWDIN_APP_ID }} permission-contents: write # required to commit to crowdin branch permission-pull-requests: write # required to create pull request diff --git a/.github/workflows/deployment-docker-image.yml b/.github/workflows/deployment-docker-image.yml index b13b1d378..d55fa857d 100644 --- a/.github/workflows/deployment-docker-image.yml +++ b/.github/workflows/deployment-docker-image.yml @@ -50,22 +50,22 @@ jobs: - name: Obtain token if: env.SKIP_RELEASE == 'false' id: obtainToken - uses: actions/create-github-app-token@v2 + uses: actions/create-github-app-token@v3 with: private-key: ${{ secrets.RENOVATE_MERGE_PRIVATE_KEY }} - app-id: ${{ secrets.RENOVATE_MERGE_APP_ID }} + client-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@v6 if: env.SKIP_RELEASE == 'false' with: persist-credentials: false - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@v6 if: env.SKIP_RELEASE == 'false' - uses: actions/setup-node@v6 if: env.SKIP_RELEASE == 'false' with: - node-version: 24.14.0 + node-version: 24.15.0 cache: "pnpm" - run: npm i -g pnpm if: env.SKIP_RELEASE == 'false' @@ -123,7 +123,7 @@ jobs: - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: "${{ env.GHCR_REPO }}" @@ -135,11 +135,11 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: . network: host @@ -162,7 +162,7 @@ jobs: - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: "${{ env.GHCR_REPO }}" @@ -174,11 +174,11 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: . network: host @@ -231,10 +231,10 @@ jobs: - name: Obtain token if: needs.release.outputs.skipped == 'false' id: obtainToken - uses: actions/create-github-app-token@v2 + uses: actions/create-github-app-token@v3 with: private-key: ${{ secrets.RENOVATE_MERGE_PRIVATE_KEY }} - app-id: ${{ secrets.RENOVATE_MERGE_APP_ID }} + client-id: ${{ secrets.RENOVATE_MERGE_APP_ID }} permission-contents: write # required to publish the release - name: Log in to the Container registry @@ -274,6 +274,6 @@ jobs: - name: Discord notification env: DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} - uses: Ilshidur/action-discord@master + uses: Ilshidur/action-discord@0.4.0 with: args: "Successfully deployed images for branch **${{ github.ref_name }}**. Tagged as **${{env.NEXT_VERSION}}**." diff --git a/.github/workflows/deployment-weekly-release.yml b/.github/workflows/deployment-weekly-release.yml index 869894a15..8cb117b8c 100644 --- a/.github/workflows/deployment-weekly-release.yml +++ b/.github/workflows/deployment-weekly-release.yml @@ -21,10 +21,10 @@ jobs: timeout-minutes: 2 steps: - name: Discord notification - if: ${{ github.events.inputs.send-notifications }} + if: ${{ github.event.inputs.send-notifications }} env: DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} - uses: Ilshidur/action-discord@master + uses: Ilshidur/action-discord@0.4.0 with: args: "Automatic release has been triggered: [run ${{ github.run_number }}](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})" - name: Checkout repository @@ -38,22 +38,23 @@ jobs: token: ${{ github.token }} branch: dev - name: Create pull request + id: create-pull-request run: 'gh pr create --title "chore(release): automatic release ${{ steps.semver.outputs.next }}" --body "**This is an automatic release**.
Manual action may be required for major bumps.
Detected change to be ``${{ steps.semver.outputs.bump }}``
Bump version from ``${{ steps.semver.outputs.current }}`` to ``${{ steps.semver.outputs.next }}``" --base main --head dev --label automerge' env: GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" - name: Discord notification - if: ${{ github.events.inputs.send-notifications }} + if: ${{ github.event.inputs.send-notifications }} env: DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} - uses: Ilshidur/action-discord@master + uses: Ilshidur/action-discord@0.4.0 with: 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: actions/create-github-app-token@v2 + uses: actions/create-github-app-token@v3 with: private-key: ${{ secrets.RENOVATE_APPROVE_PRIVATE_KEY }} - app-id: ${{ secrets.RENOVATE_APPROVE_APP_ID }} + client-id: ${{ secrets.RENOVATE_APPROVE_APP_ID }} permission-pull-requests: write - name: Approve PR env: @@ -62,10 +63,10 @@ jobs: gh pr review --approve --body "Automatically approved by GitHub Action" - name: Obtain token id: obtainMergeToken - uses: actions/create-github-app-token@v2 + uses: actions/create-github-app-token@v3 with: private-key: ${{ secrets.RENOVATE_MERGE_PRIVATE_KEY }} - app-id: ${{ secrets.RENOVATE_MERGE_APP_ID }} + client-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 @@ -74,7 +75,7 @@ jobs: uses: "pascalgn/automerge-action@v0.16.4" env: GITHUB_TOKEN: ${{ steps.obtainMergeToken.outputs.token }} - MERGE_METHOD: merge # we prefer merge commits for merging to master + MERGE_METHOD: merge # we prefer merge commits for merging to main MERGE_COMMIT_MESSAGE: "chore(release): automatic release ${{ steps.semver.outputs.next }}" MERGE_DELETE_BRANCH: false # never set to true! PULL_REQUEST: "${{ steps.create-pull-request.outputs.pr_number }}" @@ -83,23 +84,23 @@ jobs: MERGE_REQUIRED_APPROVALS: 0 # do not require approvals - name: Merged Discord notification - if: ${{ steps.automerge.outputs.mergeResult == 'merged' && github.events.inputs.send-notifications }} + if: ${{ steps.automerge.outputs.mergeResult == 'merged' && github.event.inputs.send-notifications }} env: DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} - uses: Ilshidur/action-discord@master + uses: Ilshidur/action-discord@0.4.0 with: args: "Merged PR ${{ steps.create-pull-request.outputs.url }} for release ${{ steps.semver.outputs.next }}" - name: Major Bump Discord notification - if: ${{ steps.semver.outputs.bump == 'major' && github.events.inputs.send-notifications }} + if: ${{ steps.semver.outputs.bump == 'major' && github.event.inputs.send-notifications }} env: DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} - uses: Ilshidur/action-discord@master + uses: Ilshidur/action-discord@0.4.0 with: args: "The release PR must be manually merged because the next version is a major version: ${{ steps.create-pull-request.outputs.url }} for release ${{ steps.semver.outputs.next }}" - name: Discord Fail Notification - if: failure() && github.events.inputs.send-notifications + if: failure() && github.event.inputs.send-notifications env: DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} - uses: Ilshidur/action-discord@master + uses: Ilshidur/action-discord@0.4.0 with: args: "The automatic release workflow [run ${{ github.run_number }}](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) has failed" diff --git a/.github/workflows/on-release.yml b/.github/workflows/on-release.yml index f5042d42f..514f225b4 100644 --- a/.github/workflows/on-release.yml +++ b/.github/workflows/on-release.yml @@ -12,10 +12,10 @@ jobs: steps: - name: Obtain token id: obtainToken - uses: actions/create-github-app-token@v2 + uses: actions/create-github-app-token@v3 with: private-key: ${{ secrets.HOMARR_DOCS_RELEASE_APP_PRIVATE_KEY }} - app-id: ${{ vars.HOMARR_DOCS_RELEASE_APP_ID }} + client-id: ${{ vars.HOMARR_DOCS_RELEASE_APP_ID }} owner: homarr-labs repositories: | documentation @@ -45,10 +45,10 @@ jobs: steps: - name: Obtain token id: obtainToken - uses: actions/create-github-app-token@v2 + uses: actions/create-github-app-token@v3 with: private-key: ${{ secrets.RENOVATE_MERGE_PRIVATE_KEY }} - app-id: ${{ secrets.RENOVATE_MERGE_APP_ID }} + client-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 diff --git a/.github/workflows/skip-renovate-stability-days.yml b/.github/workflows/skip-renovate-stability-days.yml index 5e4be4054..e85b2e33e 100644 --- a/.github/workflows/skip-renovate-stability-days.yml +++ b/.github/workflows/skip-renovate-stability-days.yml @@ -7,7 +7,7 @@ on: jobs: skip-stability-days: - if: ${{ !startsWith(github.head_ref, 'renovate/') }} + if: ${{ !startsWith(github.head_ref, 'renovate/') && github.event.pull_request.head.repo.full_name == github.repository }} name: Skip Stability Days runs-on: ubuntu-latest timeout-minutes: 1 diff --git a/.github/workflows/update-contributors.yml b/.github/workflows/update-contributors.yml index c3b7e53f0..925e490c7 100644 --- a/.github/workflows/update-contributors.yml +++ b/.github/workflows/update-contributors.yml @@ -21,10 +21,10 @@ jobs: steps: - name: Obtain token id: obtainToken - uses: actions/create-github-app-token@v2 + uses: actions/create-github-app-token@v3 with: private-key: ${{ secrets.HOMARR_UPDATE_CONTRIBUTORS_PRIVATE_KEY }} - app-id: ${{ vars.HOMARR_UPDATE_CONTRIBUTORS_APP_ID }} + client-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 @@ -33,7 +33,7 @@ jobs: env: GITHUB_TOKEN: ${{ steps.obtainToken.outputs.token }} - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@v6 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v6 with: diff --git a/.github/workflows/update-integration-list.yml b/.github/workflows/update-integration-list.yml index 35e012c16..05bb05d27 100644 --- a/.github/workflows/update-integration-list.yml +++ b/.github/workflows/update-integration-list.yml @@ -21,10 +21,10 @@ jobs: steps: - name: Obtain token id: obtainToken - uses: actions/create-github-app-token@v2 + uses: actions/create-github-app-token@v3 with: private-key: ${{ secrets.HOMARR_UPDATE_CONTRIBUTORS_PRIVATE_KEY }} - app-id: ${{ vars.HOMARR_UPDATE_CONTRIBUTORS_APP_ID }} + client-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 diff --git a/.gitignore b/.gitignore index 8562d4250..0e991cc6c 100644 --- a/.gitignore +++ b/.gitignore @@ -69,4 +69,6 @@ apps/nextjs/public/images/background.png # next-intl en.d.json.ts -.cursor/ \ No newline at end of file +# personal agent config +AGENTS.md +.opencode diff --git a/.nvmrc b/.nvmrc index d845d9d88..5bf4400f2 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -24.14.0 +24.15.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index fe0c7ad47..c9aae9c1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,202 @@ +## [1.59.3](https://github.com/homarr-labs/homarr/compare/v1.59.2...v1.59.3) (2026-04-24) + +### Bug Fixes + +* **deps:** update dependency better-sqlite3 to ^12.9.0 ([#5531](https://github.com/homarr-labs/homarr/issues/5531)) ([7852f1d](https://github.com/homarr-labs/homarr/commit/7852f1d987d40707ae13494f9c934a563581f97f)) + +## [1.59.3](https://github.com/homarr-labs/homarr/compare/v1.59.2...v1.59.3) (2026-04-24) + +### Bug Fixes + +* **deps:** update dependency better-sqlite3 to ^12.9.0 ([#5531](https://github.com/homarr-labs/homarr/issues/5531)) ([7852f1d](https://github.com/homarr-labs/homarr/commit/7852f1d987d40707ae13494f9c934a563581f97f)) + +## [1.59.2](https://github.com/homarr-labs/homarr/compare/v1.59.1...v1.59.2) (2026-04-17) + +### Bug Fixes + +* **about:** add missing dependencies ([#5480](https://github.com/homarr-labs/homarr/issues/5480)) ([c48588c](https://github.com/homarr-labs/homarr/commit/c48588c6a748920b05f8afcd79fad17dc65f2930)) +* **deps:** update dependency @drizzle-team/brocli to ^0.12.0 ([#5489](https://github.com/homarr-labs/homarr/issues/5489)) ([74611b7](https://github.com/homarr-labs/homarr/commit/74611b75a736df43a77ebc780d2e0eee5c40e3f3)) +* **deps:** update dependency @immich/sdk to ^2.7.0 ([#5490](https://github.com/homarr-labs/homarr/issues/5490)) ([9cdf2aa](https://github.com/homarr-labs/homarr/commit/9cdf2aa1f2b1477522879095b603b100c1dd3ac0)) +* **deps:** update dependency @immich/sdk to ^2.7.2 ([#5494](https://github.com/homarr-labs/homarr/issues/5494)) ([0927f45](https://github.com/homarr-labs/homarr/commit/0927f45b2573753152fd5e9e318ba62b88abca35)) +* **deps:** update dependency fast-xml-parser to ^5.5.11 ([#5500](https://github.com/homarr-labs/homarr/issues/5500)) ([652ed1a](https://github.com/homarr-labs/homarr/commit/652ed1a5ed0beeb2dbd44976890f24dc12b90cf6)) +* **deps:** update dependency isomorphic-dompurify to ^3.8.0 ([#5503](https://github.com/homarr-labs/homarr/issues/5503)) ([0731b7c](https://github.com/homarr-labs/homarr/commit/0731b7c5ef272bcf69c566cdec723f2696309e67)) +* **deps:** update dependency jotai to ^2.19.1 ([#5487](https://github.com/homarr-labs/homarr/issues/5487)) ([efd8a55](https://github.com/homarr-labs/homarr/commit/efd8a55b6ea113bc42bc90d9ccb0db6c1d2b68ef)) +* **deps:** update dependency next-intl to v4.9.1 [security] ([#5470](https://github.com/homarr-labs/homarr/issues/5470)) ([f2437c4](https://github.com/homarr-labs/homarr/commit/f2437c473106689e9fa93e7dcbea84b00800ea4a)) +* **deps:** update dependency swagger-ui-react to ^5.32.2 ([#5488](https://github.com/homarr-labs/homarr/issues/5488)) ([cf131c5](https://github.com/homarr-labs/homarr/commit/cf131c5c51f6c21f942ab89d02353f93dc05774c)) +* **deps:** update dependency typescript-eslint to ^8.58.1 ([#5496](https://github.com/homarr-labs/homarr/issues/5496)) ([f88984c](https://github.com/homarr-labs/homarr/commit/f88984cda844beb1099a08c9cdeb6691ad13b5a8)) +* **deps:** update react monorepo to v19.2.5 ([#5502](https://github.com/homarr-labs/homarr/issues/5502)) ([c8a61a9](https://github.com/homarr-labs/homarr/commit/c8a61a9df3087de28c76f573623725eec246dd32)) +* **deps:** update testcontainers-node monorepo to ^11.14.0 ([#5498](https://github.com/homarr-labs/homarr/issues/5498)) ([1057b47](https://github.com/homarr-labs/homarr/commit/1057b478c37d02e9de7bcd155f0b3fb764149abe)) +* **deps:** update tiptap monorepo to v3.22.3 ([#5499](https://github.com/homarr-labs/homarr/issues/5499)) ([95abd2c](https://github.com/homarr-labs/homarr/commit/95abd2c9d3a563c7eaebe12f3b8015e3299e27e8)) +* **deps:** update turbo monorepo to ^2.9.4 ([#5476](https://github.com/homarr-labs/homarr/issues/5476)) ([813f2fa](https://github.com/homarr-labs/homarr/commit/813f2fa5efb999d3364882578fdf456537dba3a6)) +* **deps:** update turbo monorepo to ^2.9.5 ([#5491](https://github.com/homarr-labs/homarr/issues/5491)) ([ed24ce6](https://github.com/homarr-labs/homarr/commit/ed24ce6381466fa530ce225363231303be4ed92e)) +* preserve all-day event dates in Nextcloud calendar integration ([#5523](https://github.com/homarr-labs/homarr/issues/5523)) ([2e78979](https://github.com/homarr-labs/homarr/commit/2e789795ed11c816550b6a3ce88fe92a360ede9c)) + +## [1.59.1](https://github.com/homarr-labs/homarr/compare/v1.59.0...v1.59.1) (2026-04-10) + +### Bug Fixes + +* **qbittorrent:** requests fail ([#5473](https://github.com/homarr-labs/homarr/issues/5473)) ([db6bb87](https://github.com/homarr-labs/homarr/commit/db6bb870e3be14c7895a2882755d3aee09e44fa6)) + +### Reverts + +* **deps:** downgrade undici from v8 to v7 ([#5473](https://github.com/homarr-labs/homarr/issues/5473)) ([dc44fac](https://github.com/homarr-labs/homarr/commit/dc44fac42aab5679427b2921402dfa11e634e1cf)) + +## [1.59.0](https://github.com/homarr-labs/homarr/compare/v1.58.1...v1.59.0) (2026-04-10) + +### Features + +* Anchor integration and Anchor Note widget ([#5040](https://github.com/homarr-labs/homarr/issues/5040)) ([7879b31](https://github.com/homarr-labs/homarr/commit/7879b3163074b6af9381b8eb70dced55faddc506)) +* **rss-feed:** add optional poster ([#5452](https://github.com/homarr-labs/homarr/issues/5452)) ([6ec058c](https://github.com/homarr-labs/homarr/commit/6ec058c835040dbf72cd2490d49f94be7da066dc)) +* **rss-feed:** add periodic live updates ([#5449](https://github.com/homarr-labs/homarr/issues/5449)) ([faffb81](https://github.com/homarr-labs/homarr/commit/faffb818f99900e3abb5fa78cfbb7980692362b5)) +* speedtest tracker integration ([#5363](https://github.com/homarr-labs/homarr/issues/5363)) ([22d599c](https://github.com/homarr-labs/homarr/commit/22d599c0cf64b39f3d616ceadc6c2ac32551f99d)) + +### Bug Fixes + +* **deps:** update dependency @tabler/icons-react to ^3.41.1 ([#5400](https://github.com/homarr-labs/homarr/issues/5400)) ([f0ef472](https://github.com/homarr-labs/homarr/commit/f0ef4729bfb7c3672968b77b9b757bc34877c60f)) +* **deps:** update dependency adm-zip to v0.5.17 ([#5422](https://github.com/homarr-labs/homarr/issues/5422)) ([dbe8d84](https://github.com/homarr-labs/homarr/commit/dbe8d84202b00687f16784cbedf61d7488efbbff)) +* **deps:** update dependency dotenv to ^17.4.0 ([#5427](https://github.com/homarr-labs/homarr/issues/5427)) ([50bf7cd](https://github.com/homarr-labs/homarr/commit/50bf7cdf194c13bcbf95ef8a6a1bc7eb4c9c3865)) +* **deps:** update dependency dotenv to ^17.4.1 ([#5462](https://github.com/homarr-labs/homarr/issues/5462)) ([845f115](https://github.com/homarr-labs/homarr/commit/845f11526ea7b3dd6f543fad48a158a4782c52bb)) +* **deps:** update dependency fast-xml-parser to ^5.5.10 ([#5439](https://github.com/homarr-labs/homarr/issues/5439)) ([a7b195d](https://github.com/homarr-labs/homarr/commit/a7b195d2cb25fffe81266e7f6fa9499d94cae733)) +* **deps:** update dependency next to v16.2.3 [security] ([#5461](https://github.com/homarr-labs/homarr/issues/5461)) ([7982def](https://github.com/homarr-labs/homarr/commit/7982def853fd69c269946dc2d6377186512baaf9)) +* **deps:** update dependency next-intl to v4.8.4 ([#5413](https://github.com/homarr-labs/homarr/issues/5413)) ([6047eb4](https://github.com/homarr-labs/homarr/commit/6047eb4477584172f7d8e6e14237c251ac487d81)) +* **deps:** update dependency next-intl to v4.9.0 ([#5426](https://github.com/homarr-labs/homarr/issues/5426)) ([612038a](https://github.com/homarr-labs/homarr/commit/612038ad070681c582cb54ac4298bc07700765c9)) +* **deps:** update dependency react-quill-new to ^3.8.3 ([#5463](https://github.com/homarr-labs/homarr/issues/5463)) ([13e13ba](https://github.com/homarr-labs/homarr/commit/13e13ba3526436b044ac83d08c346e8e406ca3d4)) +* **deps:** update dependency sass to ^1.99.0 ([#5437](https://github.com/homarr-labs/homarr/issues/5437)) ([3f73474](https://github.com/homarr-labs/homarr/commit/3f73474d3125279d94395272365aa67e0a0f69e8)) +* **deps:** update dependency typescript-eslint to ^8.58.0 ([#5409](https://github.com/homarr-labs/homarr/issues/5409)) ([1e869f6](https://github.com/homarr-labs/homarr/commit/1e869f6a96d7e34af068b5666e01093a4b20fe97)) +* **deps:** update dependency undici to v8 ([#5432](https://github.com/homarr-labs/homarr/issues/5432)) ([f2f5128](https://github.com/homarr-labs/homarr/commit/f2f5128cbd961b6576e195ac8b695f12996c377e)) +* **deps:** update dependency undici to v8.0.1 ([#5440](https://github.com/homarr-labs/homarr/issues/5440)) ([a0e0083](https://github.com/homarr-labs/homarr/commit/a0e0083b16ea6ce42a0e3594ad53321210c98141)) +* **deps:** update dependency undici to v8.0.2 ([#5446](https://github.com/homarr-labs/homarr/issues/5446)) ([75b36bb](https://github.com/homarr-labs/homarr/commit/75b36bb1609a0ea1a97158f4674ebf8f4c5f205e)) +* **deps:** update nextjs monorepo to v16.2.2 ([#5418](https://github.com/homarr-labs/homarr/issues/5418)) ([8597470](https://github.com/homarr-labs/homarr/commit/859747037b4a0caca9e208e0b4ebce638b6c5d4e)) +* **deps:** update tanstack-query monorepo to ^5.96.0 ([#5410](https://github.com/homarr-labs/homarr/issues/5410)) ([8b1e3ba](https://github.com/homarr-labs/homarr/commit/8b1e3babc02d8ab6a7db9fd85325a0b92813ce8c)) +* **deps:** update tanstack-query monorepo to ^5.96.1 ([#5421](https://github.com/homarr-labs/homarr/issues/5421)) ([72ad935](https://github.com/homarr-labs/homarr/commit/72ad935ddf831c008e53ae3a1c5e924cc82710d1)) +* **deps:** update tanstack-query monorepo to ^5.96.2 ([#5442](https://github.com/homarr-labs/homarr/issues/5442)) ([b619ba1](https://github.com/homarr-labs/homarr/commit/b619ba1d46768cc3ed1d3739e0f379e0059bc2d9)) +* **deps:** update tiptap monorepo to v3.22.0 ([#5414](https://github.com/homarr-labs/homarr/issues/5414)) ([402d948](https://github.com/homarr-labs/homarr/commit/402d948fe7d36406b7a75a4e4861330c6bcaa78b)) +* **deps:** update tiptap monorepo to v3.22.1 ([#5434](https://github.com/homarr-labs/homarr/issues/5434)) ([2baab54](https://github.com/homarr-labs/homarr/commit/2baab5402d79caba0e1b3c53f52fdf0cbeb6875d)) +* **deps:** update tiptap monorepo to v3.22.2 ([#5448](https://github.com/homarr-labs/homarr/issues/5448)) ([8cab4b0](https://github.com/homarr-labs/homarr/commit/8cab4b03333050376ae22a14eaaa1c0f045992d3)) +* **deps:** update turbo monorepo to ^2.9.1 ([#5408](https://github.com/homarr-labs/homarr/issues/5408)) ([7607140](https://github.com/homarr-labs/homarr/commit/7607140f94f5b19a6b9cbacc7deabd2afc004d24)) +* **deps:** update turbo monorepo to ^2.9.2 ([#5415](https://github.com/homarr-labs/homarr/issues/5415)) ([d8480c0](https://github.com/homarr-labs/homarr/commit/d8480c05a63525dc655a73675c2a9eec575a9539)) +* **deps:** update turbo monorepo to ^2.9.3 ([#5419](https://github.com/homarr-labs/homarr/issues/5419)) ([dfa8793](https://github.com/homarr-labs/homarr/commit/dfa87939f200719af9f34e0e409895cf6e5a9c13)) +* **logs:** missing fields from top level error with metadata in output ([#5456](https://github.com/homarr-labs/homarr/issues/5456)) ([41a03ef](https://github.com/homarr-labs/homarr/commit/41a03ef4e03675c5adf1171be152a767679bc466)) +* **security:** remove salt from database ([#5412](https://github.com/homarr-labs/homarr/issues/5412)) ([2454cac](https://github.com/homarr-labs/homarr/commit/2454cac7be14207f822bf3e38f9a7fd261645dc5)) + +## [1.58.1](https://github.com/homarr-labs/homarr/compare/v1.58.0...v1.58.1) (2026-04-04) + +### Bug Fixes + +* arabic text in english translations ([a86cdb9](https://github.com/homarr-labs/homarr/commit/a86cdb9fb91a10c8250f849e70c17777c18ada77)) + +## [1.58.0](https://github.com/homarr-labs/homarr/compare/v1.57.1...v1.58.0) (2026-04-03) + +### Features + +* **integrations:** add search.ch integration with timetable widget ([#5180](https://github.com/homarr-labs/homarr/issues/5180)) ([abb2dfc](https://github.com/homarr-labs/homarr/commit/abb2dfc92ab51b16e7172374cfee8b9c0c752454)) + +### Bug Fixes + +* **boards:** unable to click on links at settings page ([#5230](https://github.com/homarr-labs/homarr/issues/5230)) ([6a200c3](https://github.com/homarr-labs/homarr/commit/6a200c39afaa1a9a1057643612065a40ad1cdd82)) +* **deps:** update dependency @ctrl/deluge to ^7.5.3 ([#5365](https://github.com/homarr-labs/homarr/issues/5365)) ([9c134c5](https://github.com/homarr-labs/homarr/commit/9c134c5ceb742b21b021ef3b49de8cc0d526d460)) +* **deps:** update dependency @ctrl/deluge to v8 ([#5367](https://github.com/homarr-labs/homarr/issues/5367)) ([e88e3d1](https://github.com/homarr-labs/homarr/commit/e88e3d17c01dab8836bec11d2ac01195f06cdc2e)) +* **deps:** update dependency @immich/sdk to ^2.6.2 ([#5370](https://github.com/homarr-labs/homarr/issues/5370)) ([4a5bafa](https://github.com/homarr-labs/homarr/commit/4a5bafa79092b209e94a56f72362011f416bf115)) +* **deps:** update dependency @immich/sdk to ^2.6.3 ([#5380](https://github.com/homarr-labs/homarr/issues/5380)) ([2dd3c90](https://github.com/homarr-labs/homarr/commit/2dd3c906c4215b55e23f4b15ba4b423e23be8376)) +* **deps:** update dependency @tabler/icons-react to ^3.41.0 ([#5384](https://github.com/homarr-labs/homarr/issues/5384)) ([a9bcc9d](https://github.com/homarr-labs/homarr/commit/a9bcc9d04bdfcf28ea561cd590ca2a4bd775593c)) +* **deps:** update dependency better-sqlite3 to ^12.8.0 ([#5266](https://github.com/homarr-labs/homarr/issues/5266)) ([46db8b6](https://github.com/homarr-labs/homarr/commit/46db8b6ab32406fb4ff7a7a9938692954778a070)) +* **deps:** update dependency drizzle-orm to ^0.45.2 ([#5388](https://github.com/homarr-labs/homarr/issues/5388)) ([0a78e3f](https://github.com/homarr-labs/homarr/commit/0a78e3f12aa99509f42d7af647a478c5abaf5c96)) +* **deps:** update dependency fast-xml-parser to ^5.5.9 ([#5359](https://github.com/homarr-labs/homarr/issues/5359)) ([189806b](https://github.com/homarr-labs/homarr/commit/189806b5a2b8e67f925cc8def6bc8ddefdc5bfc4)) +* **deps:** update dependency fastify to ^5.8.4 ([#5351](https://github.com/homarr-labs/homarr/issues/5351)) ([728f7e4](https://github.com/homarr-labs/homarr/commit/728f7e489aa499bcd7e97c7ec8571e29e7e2cab3)) +* **deps:** update dependency isomorphic-dompurify to ^3.7.0 ([#5366](https://github.com/homarr-labs/homarr/issues/5366)) ([c2b54dd](https://github.com/homarr-labs/homarr/commit/c2b54ddfaab93daa4e65c0c38bf5c27e4402a492)) +* **deps:** update dependency isomorphic-dompurify to ^3.7.1 ([#5369](https://github.com/homarr-labs/homarr/issues/5369)) ([8d1ff40](https://github.com/homarr-labs/homarr/commit/8d1ff4065d669268f0e6a03f2b68c1ba728a756a)) +* **deps:** update dependency jotai to ^2.19.0 ([#5368](https://github.com/homarr-labs/homarr/issues/5368)) ([14d8717](https://github.com/homarr-labs/homarr/commit/14d87178b5a93bdc6fb74793feed95d014814d0b)) +* **deps:** update dependency node-ical to ^0.23.1 - abandoned ([#4856](https://github.com/homarr-labs/homarr/issues/4856)) ([b07c545](https://github.com/homarr-labs/homarr/commit/b07c545f17f4dafa62167047baa9eed4b7ee4395)) +* **deps:** update dependency typescript-eslint to ^8.57.2 ([#5360](https://github.com/homarr-labs/homarr/issues/5360)) ([cefbf0e](https://github.com/homarr-labs/homarr/commit/cefbf0e2715e9adbc72cdb0b83d84c309e3257d6)) +* **deps:** update dependency undici to v7.24.6 ([#5374](https://github.com/homarr-labs/homarr/issues/5374)) ([4f2cc9a](https://github.com/homarr-labs/homarr/commit/4f2cc9af2a42e19624def3bdea60fcb00334c483)) +* **deps:** update dependency zod to ^4.3.5 - abandoned ([#4803](https://github.com/homarr-labs/homarr/issues/4803)) ([2b4c83d](https://github.com/homarr-labs/homarr/commit/2b4c83dccac168ffa6f9b6e184ed004659373cf7)) +* **deps:** update dependency zod to ^4.3.6 ([#5376](https://github.com/homarr-labs/homarr/issues/5376)) ([a9582f0](https://github.com/homarr-labs/homarr/commit/a9582f04edb0e161d1fab6e64b13d0ce463ef341)) +* **deps:** update tanstack-query monorepo to ^5.95.0 ([#5325](https://github.com/homarr-labs/homarr/issues/5325)) ([b11bf36](https://github.com/homarr-labs/homarr/commit/b11bf367d0567e4c8b9068804442ebd200dab01c)) +* **deps:** update tanstack-query monorepo to ^5.95.1 ([#5355](https://github.com/homarr-labs/homarr/issues/5355)) ([332b6b4](https://github.com/homarr-labs/homarr/commit/332b6b4f42e7c90570cd4c25a6e6a331a76c660f)) +* **deps:** update tanstack-query monorepo to ^5.95.2 ([#5357](https://github.com/homarr-labs/homarr/issues/5357)) ([6820991](https://github.com/homarr-labs/homarr/commit/682099189b689ea17e16af41fd280a72ed68016f)) +* **deps:** update tiptap monorepo to v3.20.5 ([#5371](https://github.com/homarr-labs/homarr/issues/5371)) ([6820f8a](https://github.com/homarr-labs/homarr/commit/6820f8afea622587c1ee18b13d13a041ca0572ee)) +* **deps:** update tiptap monorepo to v3.21.0 ([#5386](https://github.com/homarr-labs/homarr/issues/5386)) ([b30dbaf](https://github.com/homarr-labs/homarr/commit/b30dbafbbbad468ff37ff11237a64ec29df62345)) +* **deps:** update trpc monorepo to ^11.15.0 ([#5354](https://github.com/homarr-labs/homarr/issues/5354)) ([2fb2981](https://github.com/homarr-labs/homarr/commit/2fb2981d2fb79ca2ca6a9bc5c08d91c8fa5710e7)) +* **deps:** update trpc monorepo to ^11.15.1 ([#5381](https://github.com/homarr-labs/homarr/issues/5381)) ([451e68a](https://github.com/homarr-labs/homarr/commit/451e68ab57551e23dd7ae772b7483cc56d57ebbb)) +* **deps:** update trpc monorepo to ^11.16.0 ([#5392](https://github.com/homarr-labs/homarr/issues/5392)) ([72a93e6](https://github.com/homarr-labs/homarr/commit/72a93e681f3701459176692857220730c279f80b)) +* **deps:** update turbo monorepo to ^2.8.21 ([#5391](https://github.com/homarr-labs/homarr/issues/5391)) ([fa40b6b](https://github.com/homarr-labs/homarr/commit/fa40b6b647b884a7f10c268a22330e0e68b50d4d)) +* honor trusted certificates in Immich integration requests ([#5275](https://github.com/homarr-labs/homarr/issues/5275)) ([7679553](https://github.com/homarr-labs/homarr/commit/7679553f16ff2945a3eb6cb668ca3a701d13d5ce)), closes [#5242](https://github.com/homarr-labs/homarr/issues/5242) +* node-ical prevents many trpc queries from loading ([#5395](https://github.com/homarr-labs/homarr/issues/5395)) ([c977b84](https://github.com/homarr-labs/homarr/commit/c977b84e2d84d5724219f5ff5f99bc550438e168)) + +## [1.57.1](https://github.com/homarr-labs/homarr/compare/v1.57.0...v1.57.1) (2026-03-27) + +### Bug Fixes + +* dashdot gpu ([#5347](https://github.com/homarr-labs/homarr/issues/5347)) ([192a43a](https://github.com/homarr-labs/homarr/commit/192a43a031eb9431da2c11395eda69a6c7236b9b)) +* **deps:** update dependency @t3-oss/env-nextjs to ^0.13.11 ([#5345](https://github.com/homarr-labs/homarr/issues/5345)) ([49d9394](https://github.com/homarr-labs/homarr/commit/49d9394cd78b2a1146c8dc00dd982215a2f9a580)) +* **deps:** update dependency dockerode to ^4.0.10 ([#5327](https://github.com/homarr-labs/homarr/issues/5327)) ([42a3791](https://github.com/homarr-labs/homarr/commit/42a3791e6b5664a0f28d3ee4d29d5257ef3765f6)) +* **deps:** update dependency fast-xml-parser to ^5.5.8 ([#5324](https://github.com/homarr-labs/homarr/issues/5324)) ([7982938](https://github.com/homarr-labs/homarr/commit/798293813cf82e38d7059069823f927b7cdfb3b8)) + +## [1.57.0](https://github.com/homarr-labs/homarr/compare/v1.56.1...v1.57.0) (2026-03-27) + +### Features + +* add "allowModals" option for iframe widget ([#5339](https://github.com/homarr-labs/homarr/issues/5339)) ([2fefd9d](https://github.com/homarr-labs/homarr/commit/2fefd9da01c827160fa5fd9b63a38615ea9969e2)) +* add GPU monitoring support via Glances integration ([#5255](https://github.com/homarr-labs/homarr/issues/5255)) ([003dac4](https://github.com/homarr-labs/homarr/commit/003dac4744f2e23535f1cbb7494187201af4b164)), closes [#5102](https://github.com/homarr-labs/homarr/issues/5102) +* add nextcloud notification provider ([#5343](https://github.com/homarr-labs/homarr/issues/5343)) ([f88bf95](https://github.com/homarr-labs/homarr/commit/f88bf9582e1cf45a6b7fd898e12d227869a3849f)) + +### Bug Fixes + +* **deps:** update dependency @immich/sdk to ^2.6.0 ([#5318](https://github.com/homarr-labs/homarr/issues/5318)) ([20a9b3d](https://github.com/homarr-labs/homarr/commit/20a9b3d556a15e6fdf7d1dbd78b677b5ce219c75)) +* **deps:** update dependency @immich/sdk to ^2.6.1 ([#5319](https://github.com/homarr-labs/homarr/issues/5319)) ([feaf022](https://github.com/homarr-labs/homarr/commit/feaf022965cf4a27112c7e3bcb9ef3ad0dd5c281)) +* **deps:** update dependency @next/eslint-plugin-next to v16.1.7 ([#5289](https://github.com/homarr-labs/homarr/issues/5289)) ([237d11d](https://github.com/homarr-labs/homarr/commit/237d11d2c021e28d58b0d627d2802d509d4c1b2b)) +* **deps:** update dependency @tanstack/react-query to ^5.91.0 ([#5305](https://github.com/homarr-labs/homarr/issues/5305)) ([13b99d0](https://github.com/homarr-labs/homarr/commit/13b99d021b46fe0541ce9b42ba66756fafd26c30)) +* **deps:** update dependency @tanstack/react-query to ^5.91.2 ([#5314](https://github.com/homarr-labs/homarr/issues/5314)) ([6fa6ba3](https://github.com/homarr-labs/homarr/commit/6fa6ba385e6691fefbb9f045a0ff976bcd85de16)) +* **deps:** update dependency drizzle-kit to ^0.31.10 ([#5291](https://github.com/homarr-labs/homarr/issues/5291)) ([09227a3](https://github.com/homarr-labs/homarr/commit/09227a3884d291032f1012b59ce06babc3c87103)) +* **deps:** update dependency fast-xml-parser to ^5.5.6 ([#5297](https://github.com/homarr-labs/homarr/issues/5297)) ([991044e](https://github.com/homarr-labs/homarr/commit/991044ebd78288bea7b441d3c14b159b5e66915b)) +* **deps:** update dependency fast-xml-parser to ^5.5.7 ([#5315](https://github.com/homarr-labs/homarr/issues/5315)) ([2336f9e](https://github.com/homarr-labs/homarr/commit/2336f9ee5e35f7b610743dee55b91caf8434c1e4)) +* **deps:** update dependency ioredis to v5.10.1 ([#5316](https://github.com/homarr-labs/homarr/issues/5316)) ([47b2d36](https://github.com/homarr-labs/homarr/commit/47b2d36f7a0933b6a6bbb61a449888be9304e1c5)) +* **deps:** update dependency isomorphic-dompurify to ^3.4.0 ([#5292](https://github.com/homarr-labs/homarr/issues/5292)) ([6276449](https://github.com/homarr-labs/homarr/commit/62764499e7bbc9995ecf3de7351c9224d6aee4b6)) +* **deps:** update dependency isomorphic-dompurify to ^3.5.0 ([#5299](https://github.com/homarr-labs/homarr/issues/5299)) ([b6b11c3](https://github.com/homarr-labs/homarr/commit/b6b11c39d2b4a33c5732ae239d7c1aaba6003cc6)) +* **deps:** update dependency isomorphic-dompurify to ^3.5.1 ([#5300](https://github.com/homarr-labs/homarr/issues/5300)) ([94dfddf](https://github.com/homarr-labs/homarr/commit/94dfddf8bde2966b46bcd2d30e5e4f886ebe4605)) +* **deps:** update dependency isomorphic-dompurify to ^3.6.0 ([#5334](https://github.com/homarr-labs/homarr/issues/5334)) ([8d64cb8](https://github.com/homarr-labs/homarr/commit/8d64cb8a5e276677b033774152c921aedc1e6c8a)) +* **deps:** update dependency mysql2 to v3.20.0 ([#5283](https://github.com/homarr-labs/homarr/issues/5283)) ([4fb48c2](https://github.com/homarr-labs/homarr/commit/4fb48c23a2ccb1c047bab0d354933561e81cc3ed)) +* **deps:** update dependency swagger-ui-react to ^5.32.1 ([#5296](https://github.com/homarr-labs/homarr/issues/5296)) ([63c55ce](https://github.com/homarr-labs/homarr/commit/63c55cec5711c41544c65ab83f24d09e63b10354)) +* **deps:** update dependency trpc-to-openapi to ^3.2.0 ([#5320](https://github.com/homarr-labs/homarr/issues/5320)) ([22f5d3b](https://github.com/homarr-labs/homarr/commit/22f5d3b95959cf0a835c9750b41106eaafc4432e)) +* **deps:** update dependency typescript-eslint to ^8.57.1 ([#5286](https://github.com/homarr-labs/homarr/issues/5286)) ([d4e4c96](https://github.com/homarr-labs/homarr/commit/d4e4c9669d648632a055b5ec0515821b50821142)) +* **deps:** update dependency undici to v7.24.5 ([#5338](https://github.com/homarr-labs/homarr/issues/5338)) ([22bbef9](https://github.com/homarr-labs/homarr/commit/22bbef9d8e03215abddf6c6e26a5df45f252626d)) +* **deps:** update dependency ws to ^8.20.0 ([#5337](https://github.com/homarr-labs/homarr/issues/5337)) ([d53c922](https://github.com/homarr-labs/homarr/commit/d53c922688606bd7d9494089e1ec43b930ad9923)) +* **deps:** update mantine monorepo to ^8.3.18 ([#5298](https://github.com/homarr-labs/homarr/issues/5298)) ([6f8e629](https://github.com/homarr-labs/homarr/commit/6f8e62963a4eb47cb3095dff46ee0e759e1cbd3c)) +* **deps:** update nextjs monorepo to v16.2.0 ([#5309](https://github.com/homarr-labs/homarr/issues/5309)) ([8831613](https://github.com/homarr-labs/homarr/commit/883161357dab4d94ff794f9444040d88074c464c)) +* **deps:** update nextjs monorepo to v16.2.1 ([#5330](https://github.com/homarr-labs/homarr/issues/5330)) ([e23a397](https://github.com/homarr-labs/homarr/commit/e23a397a80e4409f5da50c737aeb26b295ce79fc)) +* **deps:** update testcontainers-node monorepo to ^11.13.0 ([#5293](https://github.com/homarr-labs/homarr/issues/5293)) ([c009dd7](https://github.com/homarr-labs/homarr/commit/c009dd7de649bf24ab9bcf5ea25c65ebd18540bb)) +* **deps:** update tiptap monorepo to v3.20.4 ([#5287](https://github.com/homarr-labs/homarr/issues/5287)) ([369b4d4](https://github.com/homarr-labs/homarr/commit/369b4d486327d0eaa04b70dd692c426f9a39afd7)) +* **deps:** update trpc monorepo to ^11.14.1 ([#5328](https://github.com/homarr-labs/homarr/issues/5328)) ([d7f0596](https://github.com/homarr-labs/homarr/commit/d7f0596db8e44e2e79bb26095abd142b50675cc3)) +* **deps:** update turbo monorepo to ^2.8.18 ([#5308](https://github.com/homarr-labs/homarr/issues/5308)) ([24694b9](https://github.com/homarr-labs/homarr/commit/24694b92411aae818b97a3a5c9add97d707a2f38)) +* **deps:** update turbo monorepo to ^2.8.19 ([#5310](https://github.com/homarr-labs/homarr/issues/5310)) ([7537184](https://github.com/homarr-labs/homarr/commit/7537184a8168a4837d0a83a925a70c938555f199)) +* **deps:** update turbo monorepo to ^2.8.20 ([#5317](https://github.com/homarr-labs/homarr/issues/5317)) ([5b4e6fc](https://github.com/homarr-labs/homarr/commit/5b4e6fcc11c877815c4730607de84ab70d630fb8)) +* handle null ports in Docker container table ([#5313](https://github.com/homarr-labs/homarr/issues/5313)) ([1639da5](https://github.com/homarr-labs/homarr/commit/1639da57794d2555426e56030b4b34e2cc201aa9)), closes [#5311](https://github.com/homarr-labs/homarr/issues/5311) +* warnings in code ([4f2b821](https://github.com/homarr-labs/homarr/commit/4f2b8217f819b91ec4b05e32aebd6bc5473db155)) + +## [1.56.1](https://github.com/homarr-labs/homarr/compare/v1.56.0...v1.56.1) (2026-03-20) + +### Bug Fixes + +* **deps:** update dependency dayjs to ^1.11.20 ([#5253](https://github.com/homarr-labs/homarr/issues/5253)) ([615062c](https://github.com/homarr-labs/homarr/commit/615062c6b141fa1e4bc91d2fab505fa1652608d2)) +* **deps:** update dependency fast-xml-parser to ^5.5.1 ([#5246](https://github.com/homarr-labs/homarr/issues/5246)) ([91a9b6b](https://github.com/homarr-labs/homarr/commit/91a9b6bec9438e9a812960b829cea343e8478c63)) +* **deps:** update dependency fast-xml-parser to ^5.5.3 ([#5251](https://github.com/homarr-labs/homarr/issues/5251)) ([d1d8659](https://github.com/homarr-labs/homarr/commit/d1d8659f951cdd22bf4a22b407a4f3027f036ec2)) +* **deps:** update dependency fast-xml-parser to ^5.5.5 ([#5270](https://github.com/homarr-labs/homarr/issues/5270)) ([2423ecd](https://github.com/homarr-labs/homarr/commit/2423ecdce57353dd50d678444da800c02a246223)) +* **deps:** update dependency isomorphic-dompurify to ^3.1.0 ([#5239](https://github.com/homarr-labs/homarr/issues/5239)) ([63f91b6](https://github.com/homarr-labs/homarr/commit/63f91b6352e9ba58a0823434d86915371f1c1d30)) +* **deps:** update dependency isomorphic-dompurify to ^3.3.0 ([#5252](https://github.com/homarr-labs/homarr/issues/5252)) ([e8f6876](https://github.com/homarr-labs/homarr/commit/e8f6876d2477fb0e1936006b81f7324b90b6eb33)) +* **deps:** update dependency jotai to ^2.18.1 ([#5238](https://github.com/homarr-labs/homarr/issues/5238)) ([729b49f](https://github.com/homarr-labs/homarr/commit/729b49ffa9b1f91ebd7bcd2300febba4d9d0fbb9)) +* **deps:** update dependency mysql2 to v3.19.1 ([#5240](https://github.com/homarr-labs/homarr/issues/5240)) ([1040eca](https://github.com/homarr-labs/homarr/commit/1040ecac04fd0b10e101495d5230a3fa4898097a)) +* **deps:** update dependency next to v16.1.7 [security] ([#5263](https://github.com/homarr-labs/homarr/issues/5263)) ([3bbde3c](https://github.com/homarr-labs/homarr/commit/3bbde3cbb8eb3aa528485f17d40817cb982a8687)) +* **deps:** update dependency sass to ^1.98.0 ([#5247](https://github.com/homarr-labs/homarr/issues/5247)) ([f995cba](https://github.com/homarr-labs/homarr/commit/f995cba157c9954b6f266bd5b2bb8d60a08f51f1)) +* **deps:** update dependency typescript-eslint to ^8.57.0 ([#5241](https://github.com/homarr-labs/homarr/issues/5241)) ([7841b58](https://github.com/homarr-labs/homarr/commit/7841b58f0fdd4a4494b6f3d61881a1efb4c9eba3)) +* **deps:** update mantine monorepo to ^8.3.17 ([#5271](https://github.com/homarr-labs/homarr/issues/5271)) ([6fa9087](https://github.com/homarr-labs/homarr/commit/6fa9087a119334dee63e4ca4ed51276b25c4564a)) +* **deps:** update tiptap monorepo to v3.20.2 ([#5279](https://github.com/homarr-labs/homarr/issues/5279)) ([55cf3c7](https://github.com/homarr-labs/homarr/commit/55cf3c72a3d9cd9f702e802716d549d7d2644105)) +* **deps:** update trpc monorepo to ^11.13.2 ([#5273](https://github.com/homarr-labs/homarr/issues/5273)) ([7d93b10](https://github.com/homarr-labs/homarr/commit/7d93b1003245ab89fdba7175b0b4f745041cd1fe)) +* **deps:** update trpc monorepo to ^11.13.3 ([#5276](https://github.com/homarr-labs/homarr/issues/5276)) ([0e0b857](https://github.com/homarr-labs/homarr/commit/0e0b857905a7b5196dbf529520f86467aa94d8ce)) +* **deps:** update trpc monorepo to ^11.13.4 ([#5278](https://github.com/homarr-labs/homarr/issues/5278)) ([9648d9e](https://github.com/homarr-labs/homarr/commit/9648d9e99f02be8ba16a5238bd47866f7303724d)) +* **deps:** update turbo monorepo to ^2.8.15 ([#5243](https://github.com/homarr-labs/homarr/issues/5243)) ([1bd924e](https://github.com/homarr-labs/homarr/commit/1bd924ea9917949ac64ab754d97964b12c083b82)) +* **deps:** update turbo monorepo to ^2.8.16 ([#5250](https://github.com/homarr-labs/homarr/issues/5250)) ([ac80008](https://github.com/homarr-labs/homarr/commit/ac80008ce0796cb6927642c83ff2e667f6e9d24c)) +* **deps:** update turbo monorepo to ^2.8.17 ([#5265](https://github.com/homarr-labs/homarr/issues/5265)) ([d2f438f](https://github.com/homarr-labs/homarr/commit/d2f438f294df3093b249213ac0a018b770705e3b)) + ## [1.56.0](https://github.com/homarr-labs/homarr/compare/v1.55.0...v1.56.0) (2026-03-13) ### Features diff --git a/Dockerfile b/Dockerfile index a36fbffdb..eab3c4419 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:24.14.0-alpine AS base +FROM node:24.15.0-alpine AS base FROM base AS builder RUN apk add --no-cache libc6-compat diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index 226ed0f59..92538095f 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -15,10 +15,10 @@ }, "prettier": "@homarr/prettier-config", "dependencies": { - "@dnd-kit/core": "^6.3.1", - "@dnd-kit/modifiers": "^9.0.0", - "@dnd-kit/sortable": "^10.0.0", - "@dnd-kit/utilities": "^3.2.2", + "@dnd-kit/core": "catalog:", + "@dnd-kit/modifiers": "catalog:", + "@dnd-kit/sortable": "catalog:", + "@dnd-kit/utilities": "catalog:", "@homarr/analytics": "workspace:^0.1.0", "@homarr/api": "workspace:^0.1.0", "@homarr/auth": "workspace:^0.1.0", @@ -31,7 +31,7 @@ "@homarr/docker": "workspace:^0.1.0", "@homarr/form": "workspace:^0.1.0", "@homarr/forms-collection": "workspace:^0.1.0", - "@homarr/gridstack": "^1.12.0", + "@homarr/gridstack": "catalog:", "@homarr/icons": "workspace:^0.1.0", "@homarr/image-proxy": "workspace:^0.1.0", "@homarr/integrations": "workspace:^0.1.0", @@ -48,62 +48,62 @@ "@homarr/ui": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", "@homarr/widgets": "workspace:^0.1.0", - "@mantine/colors-generator": "^8.3.16", - "@mantine/core": "^8.3.16", - "@mantine/dropzone": "^8.3.16", - "@mantine/hooks": "^8.3.16", - "@mantine/modals": "^8.3.16", - "@mantine/tiptap": "^8.3.16", - "@million/lint": "1.0.14", - "@tanstack/react-form": "^1.27.7", - "@tabler/icons-react": "^3.40.0", - "@tanstack/react-query": "^5.90.21", - "@tanstack/react-query-devtools": "^5.91.3", - "@tanstack/react-query-next-experimental": "^5.91.0", - "@trpc/client": "^11.12.0", - "@trpc/next": "^11.12.0", - "@trpc/react-query": "^11.12.0", - "@trpc/server": "^11.12.0", - "@xterm/addon-canvas": "^0.7.0", - "@xterm/addon-fit": "0.11.0", - "@xterm/xterm": "^6.0.0", - "babel-plugin-react-compiler": "^1.0.0", - "chroma-js": "^3.2.0", - "clsx": "^2.1.1", - "dayjs": "^1.11.19", - "dotenv": "^17.3.1", - "flag-icons": "^7.5.0", - "glob": "^13.0.6", - "isomorphic-dompurify": "^3.1.0", - "jotai": "^2.18.1", - "mantine-react-table": "2.0.0-beta.9", - "next": "16.1.6", - "postcss-preset-mantine": "^1.18.0", - "prismjs": "^1.30.0", - "react": "19.2.4", - "react-dom": "19.2.4", - "react-error-boundary": "^6.1.1", - "react-simple-code-editor": "^0.14.1", - "sass": "^1.97.3", - "superjson": "2.2.6", - "swagger-ui-react": "^5.32.0", - "use-deep-compare-effect": "^1.8.1", - "zod": "^4.2.1" + "@mantine/colors-generator": "catalog:", + "@mantine/core": "catalog:", + "@mantine/dropzone": "catalog:", + "@mantine/hooks": "catalog:", + "@mantine/modals": "catalog:", + "@mantine/tiptap": "catalog:", + "@million/lint": "catalog:", + "@tabler/icons-react": "catalog:", + "@tanstack/react-query": "catalog:", + "@tanstack/react-query-devtools": "catalog:", + "@tanstack/react-query-next-experimental": "catalog:", + "@trpc/client": "catalog:", + "@trpc/next": "catalog:", + "@trpc/react-query": "catalog:", + "@trpc/server": "catalog:", + "@xterm/addon-canvas": "catalog:", + "@xterm/addon-fit": "catalog:", + "@xterm/xterm": "catalog:", + "babel-plugin-react-compiler": "catalog:", + "chroma-js": "catalog:", + "clsx": "catalog:", + "dayjs": "catalog:", + "dotenv": "catalog:", + "flag-icons": "catalog:", + "glob": "catalog:", + "isomorphic-dompurify": "catalog:", + "jotai": "catalog:", + "mantine-react-table": "catalog:", + "next": "catalog:", + "postcss-preset-mantine": "catalog:", + "prismjs": "catalog:", + "react": "catalog:", + "react-dom": "catalog:", + "react-error-boundary": "catalog:", + "react-simple-code-editor": "catalog:", + "sass": "catalog:", + "superjson": "catalog:", + "swagger-ui-react": "catalog:", + "use-deep-compare-effect": "catalog:", + "yaml": "catalog:", + "zod": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "@types/chroma-js": "3.1.2", - "@types/node": "^24.12.0", - "@types/prismjs": "^1.26.6", - "@types/react": "19.2.14", - "@types/react-dom": "19.2.3", - "@types/swagger-ui-react": "^5.18.0", - "concurrently": "^9.2.1", - "eslint": "^9.39.4", - "node-loader": "^2.1.0", - "prettier": "^3.8.1", - "typescript": "^5.9.3" + "@types/chroma-js": "catalog:", + "@types/node": "catalog:", + "@types/prismjs": "catalog:", + "@types/react": "catalog:", + "@types/react-dom": "catalog:", + "@types/swagger-ui-react": "catalog:", + "concurrently": "catalog:", + "eslint": "catalog:", + "node-loader": "catalog:", + "prettier": "catalog:", + "typescript": "catalog:" } } diff --git a/apps/nextjs/src/app/[locale]/auth/login/_login-form.tsx b/apps/nextjs/src/app/[locale]/auth/login/_login-form.tsx index 411055756..71d249cf5 100644 --- a/apps/nextjs/src/app/[locale]/auth/login/_login-form.tsx +++ b/apps/nextjs/src/app/[locale]/auth/login/_login-form.tsx @@ -13,6 +13,7 @@ import type { useForm } from "@homarr/form"; import { useZodForm } from "@homarr/form"; import { showErrorNotification, showSuccessNotification } from "@homarr/notifications"; import { useScopedI18n } from "@homarr/translation/client"; +import { sanitizeRedirectionUrl } from "@homarr/validation/redirection-url"; import { userSignInSchema } from "@homarr/validation/user"; type Provider = "credentials" | "ldap" | "oidc"; @@ -70,7 +71,7 @@ export const LoginForm = ({ providers, oidcClientName, isOidcAutoLoginEnabled, c // Redirect to the callback URL if the response is defined and comes from a credentials provider (ldap or credentials). oidc is redirected automatically. await revalidatePathActionAsync("/"); - router.push(callbackUrl); + router.push(sanitizeRedirectionUrl(callbackUrl)); }, [t, router, callbackUrl], ); diff --git a/apps/nextjs/src/app/[locale]/auth/login/page.tsx b/apps/nextjs/src/app/[locale]/auth/login/page.tsx index c9d913c08..22adf3b87 100644 --- a/apps/nextjs/src/app/[locale]/auth/login/page.tsx +++ b/apps/nextjs/src/app/[locale]/auth/login/page.tsx @@ -4,6 +4,7 @@ import { Card, Center, Stack, Text, Title } from "@mantine/core"; import { env } from "@homarr/auth/env"; import { auth } from "@homarr/auth/next"; import { getScopedI18n } from "@homarr/translation/server"; +import { sanitizeRedirectionUrl } from "@homarr/validation/redirection-url"; import { HomarrLogoWithTitle } from "~/components/layout/logo/homarr-logo"; import { LoginForm } from "./_login-form"; @@ -19,7 +20,7 @@ export default async function Login(props: LoginProps) { const session = await auth(); if (session) { - redirect(searchParams.callbackUrl ?? "/"); + redirect(sanitizeRedirectionUrl(searchParams.callbackUrl)); } const t = await getScopedI18n("user.page.login"); diff --git a/apps/nextjs/src/app/[locale]/boards/(content)/_header-actions.tsx b/apps/nextjs/src/app/[locale]/boards/(content)/_header-actions.tsx index ce6866ef3..f1185430c 100644 --- a/apps/nextjs/src/app/[locale]/boards/(content)/_header-actions.tsx +++ b/apps/nextjs/src/app/[locale]/boards/(content)/_header-actions.tsx @@ -264,6 +264,5 @@ const usePreventLeaveWithDirty = (isDirty: boolean) => { window.removeEventListener("popstate", handlePopState); window.removeEventListener("beforeunload", handleBeforeUnload); }; - // eslint-disable-next-line react-hooks/exhaustive-deps }, [isDirty]); }; diff --git a/apps/nextjs/src/app/[locale]/boards/(content)/_ready-context.tsx b/apps/nextjs/src/app/[locale]/boards/(content)/_ready-context.tsx index dcd07a311..606a296ea 100644 --- a/apps/nextjs/src/app/[locale]/boards/(content)/_ready-context.tsx +++ b/apps/nextjs/src/app/[locale]/boards/(content)/_ready-context.tsx @@ -27,7 +27,6 @@ export const BoardReadyProvider = ({ children }: PropsWithChildren) => { useEffect(() => { setReadySections((previous) => previous.filter((id) => board.sections.some((section) => section.id === id))); - // eslint-disable-next-line react-hooks/exhaustive-deps }, [board.sections.length, setReadySections]); const markAsReady = useCallback((id: string) => { diff --git a/apps/nextjs/src/app/[locale]/boards/[name]/settings/_general.tsx b/apps/nextjs/src/app/[locale]/boards/[name]/settings/_general.tsx index 51be38157..0bfc79173 100644 --- a/apps/nextjs/src/app/[locale]/boards/[name]/settings/_general.tsx +++ b/apps/nextjs/src/app/[locale]/boards/[name]/settings/_general.tsx @@ -2,7 +2,7 @@ import { useEffect, useRef } from "react"; import { Button, Grid, Group, Loader, Stack, TextInput } from "@mantine/core"; -import { useDebouncedValue, useDocumentTitle, useFavicon } from "@mantine/hooks"; +import { useDebouncedValue, useDocumentTitle } from "@mantine/hooks"; import { useUpdateBoard } from "@homarr/boards/updater"; import { useZodForm } from "@homarr/form"; @@ -10,6 +10,7 @@ import { IconPicker } from "@homarr/forms-collection"; import { useI18n } from "@homarr/translation/client"; import { boardSavePartialSettingsSchema } from "@homarr/validation/board"; +import { homarrLogoPath } from "~/components/layout/logo/homarr-logo"; import { createMetaTitle } from "~/metadata"; import type { Board } from "../../_types"; import { useSavePartialSettingsMutation } from "./_shared"; @@ -53,7 +54,6 @@ export const GeneralSettingsContent = ({ board }: Props) => { ); useLogoPreview(form.values.logoImageUrl); - useFaviconPreview(form.values.faviconImageUrl); const metaTitleStatus = useMetaTitlePreview(form.values.metaTitle); // Cleanup for not applied changes of the page title and logo image URL @@ -75,6 +75,7 @@ export const GeneralSettingsContent = ({ board }: Props) => { pageTitle: values.pageTitle, logoImageUrl: values.logoImageUrl, }; + updateFavicon(values.faviconImageUrl ?? homarrLogoPath); savePartialSettings({ id: board.id, ...values, @@ -146,7 +147,13 @@ const useMetaTitlePreview = (title: string | null) => { }; }; -const useFaviconPreview = (url: string | null) => { - const [faviconDebounced] = useDebouncedValue(url ?? "", 500); - useFavicon(faviconDebounced); +// Previously we used the useFavicon hook from Mantine +// However if the user tried to click on a link to a different page +// it caused an error "Cannot read properties of null (reading 'removeChild')" +// Probably because the head element was null (https://github.com/mantinedev/mantine/blob/b90d9b81031f45f5d15e75f25138ed6477f65bce/packages/%40mantine/hooks/src/use-favicon/use-favicon.ts#L21) +// See https://github.com/homarr-labs/homarr/issues/4905 +const updateFavicon = (url: string) => { + const link: HTMLLinkElement | null = document.querySelector('link[rel="icon"]'); + if (!link) return; + link.href = url; }; diff --git a/apps/nextjs/src/app/[locale]/manage/about/about.module.css b/apps/nextjs/src/app/[locale]/manage/about/about.module.css index c1d362c48..457d36526 100644 --- a/apps/nextjs/src/app/[locale]/manage/about/about.module.css +++ b/apps/nextjs/src/app/[locale]/manage/about/about.module.css @@ -1,3 +1,7 @@ .contributorCard { background-color: light-dark(var(--mantine-color-gray-1), var(--mantine-color-dark-5)); } + +.dependencyCard:hover { + background-color: light-dark(var(--mantine-color-gray-1), var(--mantine-color-dark-5)); +} diff --git a/apps/nextjs/src/app/[locale]/manage/about/page.tsx b/apps/nextjs/src/app/[locale]/manage/about/page.tsx index 8e336449d..0be4d5687 100644 --- a/apps/nextjs/src/app/[locale]/manage/about/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/about/page.tsx @@ -12,8 +12,7 @@ import { Flex, Group, Kbd, - List, - ListItem, + SimpleGrid, Stack, Table, TableTbody, @@ -22,9 +21,18 @@ import { TableThead, TableTr, Text, + ThemeIcon, Title, + UnstyledButton, } from "@mantine/core"; -import { IconKeyboard, IconLanguage, IconLibrary, IconUsers } from "@tabler/icons-react"; +import { + IconKeyboard, + IconLanguage, + IconLibrary, + IconMoneybagHeart, + IconPackage, + IconUsers, +} from "@tabler/icons-react"; import { capitalize, objectEntries } from "@homarr/common"; import { hotkeys } from "@homarr/definitions"; @@ -33,8 +41,10 @@ import { getScopedI18n } from "@homarr/translation/server"; import { homarrLogoPath } from "~/components/layout/logo/homarr-logo"; import { DynamicBreadcrumb } from "~/components/navigation/dynamic-breadcrumb"; import { createMetaTitle } from "~/metadata"; -import { getPackageAttributesAsync } from "~/versions/package-reader"; +import type { PackageJsonDependencies } from "~/versions/package-reader"; +import { getPackageVersion } from "~/versions/package-reader"; import type githubContributorsJson from "../../../../../../../static-data/contributors.json"; +import type openCollectiveContributorsJson from "../../../../../../../static-data/opencollective-contributors.json"; import type crowdinContributorsJson from "../../../../../../../static-data/translators.json"; import classes from "./about.module.css"; @@ -57,7 +67,10 @@ const getHostAsync = async () => { export default async function AboutPage() { const baseServerUrl = `http://${await getHostAsync()}`; const t = await getScopedI18n("management.page.about"); - const attributes = await getPackageAttributesAsync(); + const version = getPackageVersion(); + const dependencies = (await fetch(`${baseServerUrl}/api/about/dependencies`).then((res) => + res.json(), + )) as PackageJsonDependencies; const githubContributors = (await fetch(`${baseServerUrl}/api/about/contributors/github`).then((res) => res.json(), )) as typeof githubContributorsJson; @@ -66,6 +79,10 @@ export default async function AboutPage() { res.json(), )) as typeof crowdinContributorsJson; + const openCollectiveContributors = (await fetch(`${baseServerUrl}/api/about/contributors/opencollective`).then( + (res) => res.json(), + )) as typeof openCollectiveContributorsJson; + return (
@@ -76,7 +93,7 @@ export default async function AboutPage() { Homarr - {t("version", { version: attributes.version })} + {t("version", { version })} @@ -131,31 +148,72 @@ export default async function AboutPage() { + + }> + + {t("accordion.sponsors.title")} + + {t("accordion.sponsors.subtitle", { + count: String(openCollectiveContributors.length), + })} + + + + + + {openCollectiveContributors.map((sponsor) => ( + + ))} + + + }> {t("accordion.libraries.title")} {t("accordion.libraries.subtitle", { - count: String(Object.keys(attributes.dependencies).length), + count: String(Object.keys(dependencies).length), })} - - {Object.entries(attributes.dependencies) + + {Object.entries(dependencies) + .filter(([, value]) => !value.includes("workspace:")) .sort(([key1], [key2]) => key1.localeCompare(key2)) - .map(([key, value]) => ( - - {value.includes("workspace:") ? ( - {key} - ) : ( - {key} - )} - + .map(([name, version]) => ( + + + + + + + + + + {name} + + + v{version.replace("^", "").replace("~", "")} + + + + + ))} - + diff --git a/apps/nextjs/src/app/[locale]/manage/tools/api/page.tsx b/apps/nextjs/src/app/[locale]/manage/tools/api/page.tsx index adfa1648a..f3fe3b825 100644 --- a/apps/nextjs/src/app/[locale]/manage/tools/api/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/tools/api/page.tsx @@ -2,7 +2,7 @@ import { headers } from "next/headers"; import { notFound } from "next/navigation"; import { Stack, Tabs, TabsList, TabsPanel, TabsTab } from "@mantine/core"; -import { openApiDocument } from "@homarr/api"; +import { openApiDocument } from "@homarr/api/open-api"; import { api } from "@homarr/api/server"; import { auth } from "@homarr/auth/next"; import { extractBaseUrlFromHeaders } from "@homarr/common"; @@ -14,7 +14,7 @@ import { ApiKeysManagement } from "./components/api-keys"; export async function generateMetadata() { const session = await auth(); - if (!session?.user || !session.user.permissions.includes("admin")) { + if (!session?.user.permissions.includes("admin")) { return {}; } @@ -27,7 +27,7 @@ export async function generateMetadata() { export default async function ApiPage() { const session = await auth(); - if (!session?.user || !session.user.permissions.includes("admin")) { + if (!session?.user.permissions.includes("admin")) { notFound(); } const document = openApiDocument(extractBaseUrlFromHeaders(await headers())); diff --git a/apps/nextjs/src/app/[locale]/manage/tools/docker/docker-table.tsx b/apps/nextjs/src/app/[locale]/manage/tools/docker/docker-table.tsx index f8c8509f5..537c85e7c 100644 --- a/apps/nextjs/src/app/[locale]/manage/tools/docker/docker-table.tsx +++ b/apps/nextjs/src/app/[locale]/manage/tools/docker/docker-table.tsx @@ -76,6 +76,7 @@ const createColumns = ( accessorKey: "ports", header: t("docker.field.ports.label"), Cell({ cell }) { + if (!cell.row.original.ports) return null; if (!cell.row.original.ports.length) return null; return ( port.PrivatePort.toString())} /> diff --git a/apps/nextjs/src/app/[locale]/manage/tools/logs/page.tsx b/apps/nextjs/src/app/[locale]/manage/tools/logs/page.tsx index d672947e4..b6901934c 100644 --- a/apps/nextjs/src/app/[locale]/manage/tools/logs/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/tools/logs/page.tsx @@ -18,7 +18,7 @@ import { LogContextProvider } from "./log-context"; export async function generateMetadata() { const session = await auth(); - if (!session?.user || !session.user.permissions.includes("admin")) { + if (!session?.user.permissions.includes("admin")) { return {}; } const t = await getScopedI18n("management"); @@ -30,7 +30,7 @@ export async function generateMetadata() { export default async function LogsManagementPage() { const session = await auth(); - if (!session?.user || !session.user.permissions.includes("other-view-logs")) { + if (!session?.user.permissions.includes("other-view-logs")) { notFound(); } diff --git a/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/_components/_first-day-of-week.tsx b/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/_components/_first-day-of-week.tsx index e2b1a859d..71bef0737 100644 --- a/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/_components/_first-day-of-week.tsx +++ b/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/_components/_first-day-of-week.tsx @@ -30,7 +30,7 @@ export const FirstDayOfWeek = ({ user }: FirstDayOfWeekProps) => { }, onSuccess(_, variables) { form.setInitialValues({ - firstDayOfWeek: variables.firstDayOfWeek, + firstDayOfWeek: variables.firstDayOfWeek as DayOfWeek, }); showSuccessNotification({ message: t("user.action.changeFirstDayOfWeek.notification.success.message"), diff --git a/apps/nextjs/src/app/api/[...trpc]/route.ts b/apps/nextjs/src/app/api/[...trpc]/route.ts index 2980900a8..1ae1e5e92 100644 --- a/apps/nextjs/src/app/api/[...trpc]/route.ts +++ b/apps/nextjs/src/app/api/[...trpc]/route.ts @@ -2,7 +2,8 @@ import type { NextRequest } from "next/server"; import { userAgent } from "next/server"; import { createOpenApiFetchHandler } from "trpc-to-openapi"; -import { appRouter, createTRPCContext } from "@homarr/api"; +import { createTRPCContext } from "@homarr/api"; +import { openApiRouter } from "@homarr/api/open-api"; import { API_KEY_HEADER_NAME, getSessionFromApiKeyAsync } from "@homarr/auth/api-key"; import { ipAddressFromHeaders } from "@homarr/common/server"; import { createLogger } from "@homarr/core/infrastructure/logs"; @@ -30,7 +31,7 @@ const handlerAsync = async (req: NextRequest) => { return createOpenApiFetchHandler({ req, endpoint: "/", - router: appRouter, + router: openApiRouter, createContext: () => createTRPCContext({ session, headers: req.headers }), onError({ error, path, type }) { logger.error(new ErrorWithMetadata("tRPC Error occured", { path, type }, { cause: error })); diff --git a/apps/nextjs/src/app/api/about/contributors/opencollective/route.ts b/apps/nextjs/src/app/api/about/contributors/opencollective/route.ts new file mode 100644 index 000000000..369f14a8c --- /dev/null +++ b/apps/nextjs/src/app/api/about/contributors/opencollective/route.ts @@ -0,0 +1,9 @@ +import { NextResponse } from "next/server"; + +import openCollectiveContributors from "../../../../../../../../static-data/opencollective-contributors.json"; + +export const GET = () => { + return NextResponse.json(openCollectiveContributors); +}; + +export const dynamic = "force-static"; diff --git a/apps/nextjs/src/app/api/about/dependencies/route.ts b/apps/nextjs/src/app/api/about/dependencies/route.ts new file mode 100644 index 000000000..b0a985b2d --- /dev/null +++ b/apps/nextjs/src/app/api/about/dependencies/route.ts @@ -0,0 +1,10 @@ +import { NextResponse } from "next/server"; + +import { getDependenciesAsync } from "../../../../versions/package-reader"; + +export const GET = async () => { + const dependencies = await getDependenciesAsync(); + return NextResponse.json(dependencies); +}; + +export const dynamic = "force-static"; diff --git a/apps/nextjs/src/app/api/health/live/route.ts b/apps/nextjs/src/app/api/health/live/route.ts index 2576b3f8e..ceeb7dc15 100644 --- a/apps/nextjs/src/app/api/health/live/route.ts +++ b/apps/nextjs/src/app/api/health/live/route.ts @@ -75,7 +75,6 @@ const executeHealthCheckSafelyAsync = async ( }, }; } catch (error) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions logger.error(new ErrorWithMetadata("Healthcheck failed", { name }, { cause: error })); return { status: "unhealthy", diff --git a/apps/nextjs/src/app/api/openapi/route.ts b/apps/nextjs/src/app/api/openapi/route.ts index d4c514b68..26f26f9e7 100644 --- a/apps/nextjs/src/app/api/openapi/route.ts +++ b/apps/nextjs/src/app/api/openapi/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from "next/server"; -import { openApiDocument } from "@homarr/api"; +import { openApiDocument } from "@homarr/api/open-api"; import { extractBaseUrlFromHeaders } from "@homarr/common"; export function GET(request: Request) { diff --git a/apps/nextjs/src/components/board/items/item-content.tsx b/apps/nextjs/src/components/board/items/item-content.tsx index 8f89ba091..d61d05902 100644 --- a/apps/nextjs/src/components/board/items/item-content.tsx +++ b/apps/nextjs/src/components/board/items/item-content.tsx @@ -117,7 +117,6 @@ const InnerContent = ({ item, ...dimensions }: InnerContentProps) => { when={ widgetSupportsIntegrations && item.integrationIds.length === 0 && - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition (!("integrationsRequired" in definition) || definition.integrationsRequired !== false) } /> diff --git a/apps/nextjs/src/components/board/sections/gridstack/use-gridstack.ts b/apps/nextjs/src/components/board/sections/gridstack/use-gridstack.ts index 4f2fef067..eda89a8e6 100644 --- a/apps/nextjs/src/components/board/sections/gridstack/use-gridstack.ts +++ b/apps/nextjs/src/components/board/sections/gridstack/use-gridstack.ts @@ -206,7 +206,6 @@ export const useGridstack = (section: Omit, itemIds: string[]) } // Only run this effect when the section items change - // eslint-disable-next-line react-hooks/exhaustive-deps }, [itemIds.length, columnCount]); /** diff --git a/apps/nextjs/src/versions/package-reader.ts b/apps/nextjs/src/versions/package-reader.ts index a7da5b029..d62c97b20 100644 --- a/apps/nextjs/src/versions/package-reader.ts +++ b/apps/nextjs/src/versions/package-reader.ts @@ -1,12 +1,16 @@ import fsPromises from "fs/promises"; +import path from "path"; +import { fileURLToPath } from "url"; import { glob } from "glob"; +import { parse as parseYaml } from "yaml"; +import z from "zod"; import packageJson from "../../../../package.json"; -const getPackageVersion = () => packageJson.version; -const getDependenciesAsync = async (): Promise => { +export const getPackageVersion = () => packageJson.version; +export const getDependenciesAsync = async (): Promise => { const pathNames = await glob("**/package.json", { - ignore: "node_modules/**", + ignore: "**/node_modules/**", cwd: "../../", absolute: true, }); @@ -15,21 +19,37 @@ const getDependenciesAsync = async (): Promise => { .map((packageContent) => (JSON.parse(packageContent) as PackageJson).dependencies) .filter((dependencies) => dependencies !== undefined); + const catalog = await parseDependencyCatalogsAsync(); + let dependencies = {}; for (const dependenciesOfPackage of packageDependencies) { - dependencies = { ...dependencies, ...dependenciesOfPackage }; + const resolvedDependencies = Object.entries(dependenciesOfPackage).map(([name, version]) => { + const catalogVersion = catalog.get(name); + return [name, catalogVersion ?? version] as const; + }); + dependencies = { ...dependencies, ...Object.fromEntries(resolvedDependencies) }; } return dependencies; }; -export const getPackageAttributesAsync = async () => { - return { - version: getPackageVersion(), - dependencies: await getDependenciesAsync(), - }; +type DependencyCatalog = Map; +const parseDependencyCatalogsAsync = async (): Promise => { + const currentDir = path.dirname(fileURLToPath(import.meta.url)); + const workspaceConfigContent = await fsPromises.readFile( + path.join(currentDir, "..", "..", "..", "..", "pnpm-workspace.yaml"), + "utf-8", + ); + const workspaceConfig: unknown = parseYaml(workspaceConfigContent); + const parseResult = workspaceConfigCatalogSchema.parse(workspaceConfig); + + return new Map(Object.entries(parseResult.catalog ?? {})); }; -type PackageJsonDependencies = Record; +const workspaceConfigCatalogSchema = z.object({ + catalog: z.record(z.string(), z.string()).optional(), +}); + +export type PackageJsonDependencies = Record; interface PackageJson { dependencies: PackageJsonDependencies | undefined; } diff --git a/apps/tasks/package.json b/apps/tasks/package.json index d877bfaee..3cb918df5 100644 --- a/apps/tasks/package.json +++ b/apps/tasks/package.json @@ -37,22 +37,22 @@ "@homarr/server-settings": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", "@homarr/widgets": "workspace:^0.1.0", - "dayjs": "^1.11.19", - "dotenv": "^17.3.1", - "fastify": "^5.8.2", - "superjson": "2.2.6", - "undici": "7.18.2" + "dayjs": "catalog:", + "dotenv": "catalog:", + "fastify": "catalog:", + "superjson": "catalog:", + "undici": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "@types/node": "^24.12.0", - "dotenv-cli": "^11.0.0", - "esbuild": "^0.27.3", - "eslint": "^9.39.4", - "prettier": "^3.8.1", - "tsx": "4.20.4", - "typescript": "^5.9.3" + "@types/node": "catalog:", + "dotenv-cli": "catalog:", + "esbuild": "catalog:", + "eslint": "catalog:", + "prettier": "catalog:", + "tsx": "catalog:", + "typescript": "catalog:" } } diff --git a/apps/websocket/package.json b/apps/websocket/package.json index 71d02bfd3..8fe731bcb 100644 --- a/apps/websocket/package.json +++ b/apps/websocket/package.json @@ -25,18 +25,18 @@ "@homarr/definitions": "workspace:^0.1.0", "@homarr/redis": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", - "dotenv": "^17.3.1", - "tsx": "4.20.4", - "ws": "^8.19.0" + "dotenv": "catalog:", + "tsx": "catalog:", + "ws": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "@types/ws": "^8.18.1", - "esbuild": "^0.27.3", - "eslint": "^9.39.4", - "prettier": "^3.8.1", - "typescript": "^5.9.3" + "@types/ws": "catalog:", + "esbuild": "catalog:", + "eslint": "catalog:", + "prettier": "catalog:", + "typescript": "catalog:" } } diff --git a/deployments/prebuilt-debian/Dockerfile b/deployments/prebuilt-debian/Dockerfile index ced8d7bdf..8ac61693e 100644 --- a/deployments/prebuilt-debian/Dockerfile +++ b/deployments/prebuilt-debian/Dockerfile @@ -1,4 +1,4 @@ -FROM node:24.14.0-trixie AS base +FROM node:24.15.0-trixie AS base WORKDIR /app COPY package.json . COPY pnpm-lock.yaml . diff --git a/deployments/prebuilt-debian/package.json b/deployments/prebuilt-debian/package.json index a774856f4..15876ecc1 100644 --- a/deployments/prebuilt-debian/package.json +++ b/deployments/prebuilt-debian/package.json @@ -2,12 +2,12 @@ "name": "homarr-prebuilt-debian", "private": true, "dependencies": { - "better-sqlite3": "^12.6.2" + "better-sqlite3": "^12.9.0" }, - "packageManager": "pnpm@10.32.0", + "packageManager": "pnpm@10.33.2", "engines": { - "node": ">=24.14.0", - "pnpm": ">=10.32.0" + "node": ">=24.15.0", + "pnpm": ">=10.33.2" }, "pnpm": { "onlyBuiltDependencies": [ diff --git a/deployments/prebuilt-debian/pnpm-lock.yaml b/deployments/prebuilt-debian/pnpm-lock.yaml index f18d00d42..3a2fb8ad1 100644 --- a/deployments/prebuilt-debian/pnpm-lock.yaml +++ b/deployments/prebuilt-debian/pnpm-lock.yaml @@ -9,16 +9,16 @@ importers: .: dependencies: better-sqlite3: - specifier: ^12.6.2 - version: 12.6.2 + specifier: ^12.9.0 + version: 12.9.0 packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - better-sqlite3@12.6.2: - resolution: {integrity: sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA==} + better-sqlite3@12.9.0: + resolution: {integrity: sha512-wqUv4Gm3toFpHDQmaKD4QhZm3g1DjUBI0yzS4UBl6lElUmXFYdTQmmEDpAFa5o8FiFiymURypEnfVHzILKaxqQ==} engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x} bindings@1.5.0: @@ -93,6 +93,7 @@ packages: prebuild-install@7.1.3: resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} engines: {node: '>=10'} + deprecated: No longer maintained. Please contact the author of the relevant native addon; alternatives are available. hasBin: true pump@3.0.3: @@ -147,7 +148,7 @@ snapshots: base64-js@1.5.1: {} - better-sqlite3@12.6.2: + better-sqlite3@12.9.0: dependencies: bindings: 1.5.0 prebuild-install: 7.1.3 diff --git a/docs/README.md b/docs/README.md index f159c8765..999df9791 100644 --- a/docs/README.md +++ b/docs/README.md @@ -64,6 +64,13 @@ + + Anchor +
+

Anchor

+
+ + Aria2
@@ -97,15 +104,15 @@

Deluge

- - + + Docker Hub

Docker
Hub

- - + + Emby
@@ -146,15 +153,15 @@

Home
Assistant

- - + + iCal

iCal

- - + + Immich
@@ -195,15 +202,15 @@

Nextcloud

- - + + NPM

NPM

- - + + ntfy
@@ -244,15 +251,15 @@

Pi-hole

- - + + Plex

Plex

- - + + Prowlarr
@@ -293,15 +300,22 @@

Readarr

- - + + SABnzbd

SABnzbd

- - + + + + Search.ch +
+

Search.ch

+
+ + Seerr
@@ -323,13 +337,20 @@
+ + Speedtest Tracker +
+

Speedtest
Tracker

+
+ + Tdarr

Tdarr

- - + + Tracearr
@@ -349,8 +370,8 @@

TrueNAS

- - + + Unifi Controller
diff --git a/package.json b/package.json index 985836d8b..c9ea46f32 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "homarr", - "version": "1.56.0", + "version": "1.59.3", "private": true, "scripts": { "build": "cross-env CI=true turbo build", @@ -36,33 +36,33 @@ "prettier": "@homarr/prettier-config", "devDependencies": { "@homarr/prettier-config": "workspace:^0.1.0", - "@semantic-release/changelog": "^6.0.3", - "@semantic-release/commit-analyzer": "^13.0.1", - "@semantic-release/git": "^10.0.1", - "@semantic-release/github": "^12.0.6", - "@semantic-release/npm": "^13.1.5", - "@semantic-release/release-notes-generator": "^14.1.0", - "@testcontainers/redis": "^11.12.0", - "@turbo/gen": "^2.8.15", - "@vitejs/plugin-react": "^5.1.4", - "@vitest/coverage-v8": "^4.0.18", - "@vitest/ui": "^4.0.18", - "conventional-changelog-conventionalcommits": "^9.3.0", - "cross-env": "^10.1.0", - "jsdom": "^28.1.0", - "json5": "^2.2.3", - "prettier": "^3.8.1", - "semantic-release": "^25.0.3", - "testcontainers": "^11.12.0", - "turbo": "^2.8.15", - "typescript": "^5.9.3", - "vite-tsconfig-paths": "^6.1.1", - "vitest": "^4.0.18" + "@semantic-release/changelog": "catalog:", + "@semantic-release/commit-analyzer": "catalog:", + "@semantic-release/git": "catalog:", + "@semantic-release/github": "catalog:", + "@semantic-release/npm": "catalog:", + "@semantic-release/release-notes-generator": "catalog:", + "@testcontainers/redis": "catalog:", + "@turbo/gen": "catalog:", + "@vitejs/plugin-react": "catalog:", + "@vitest/coverage-v8": "catalog:", + "@vitest/ui": "catalog:", + "conventional-changelog-conventionalcommits": "catalog:", + "cross-env": "catalog:", + "jsdom": "catalog:", + "json5": "catalog:", + "prettier": "catalog:", + "semantic-release": "catalog:", + "testcontainers": "catalog:", + "turbo": "catalog:", + "typescript": "catalog:", + "vite-tsconfig-paths": "catalog:", + "vitest": "catalog:" }, - "packageManager": "pnpm@10.32.0", + "packageManager": "pnpm@10.33.2", "engines": { - "node": ">=24.14.0", - "pnpm": ">=10.32.0" + "node": ">=24.15.0", + "pnpm": ">=10.33.2" }, "pnpm": { "onlyBuiltDependencies": [ @@ -77,25 +77,25 @@ "tree-sitter-json" ], "overrides": { - "@babel/helpers@<7.26.10": ">=7.28.6", - "@babel/runtime@<7.26.10": ">=7.28.6", - "axios@>=1.0.0 <1.8.2": ">=1.13.6", - "brace-expansion@>=2.0.0 <=2.0.1": ">=5.0.4", - "brace-expansion@>=1.0.0 <=1.1.11": ">=5.0.4", - "esbuild@<=0.24.2": ">=0.27.3", + "@babel/helpers@<7.26.10": ">=7.29.2", + "@babel/runtime@<7.26.10": ">=7.29.2", + "axios@>=1.0.0 <1.8.2": ">=1.15.2", + "brace-expansion@>=2.0.0 <=2.0.1": ">=5.0.5", + "brace-expansion@>=1.0.0 <=1.1.11": ">=5.0.5", + "esbuild@<=0.24.2": ">=0.28.0", "form-data@>=4.0.0 <4.0.4": ">=4.0.5", - "hono@<4.6.5": ">=4.12.7", + "hono@<4.6.5": ">=4.12.15", "linkifyjs@<4.3.2": ">=4.3.2", - "nanoid@>=4.0.0 <5.0.9": ">=5.1.6", + "nanoid@>=4.0.0 <5.0.9": ">=5.1.9", "prismjs@<1.30.0": ">=1.30.0", - "proxmox-api>undici": "7.19.2", - "react-is": "^19.2.4", - "rollup@>=4.0.0 <4.22.4": ">=4.59.0", + "proxmox-api>undici": "7.24.6", + "react-is": "^19.2.5", + "rollup@>=4.0.0 <4.22.4": ">=4.60.2", "sha.js@<=2.4.11": ">=2.4.12", "tar-fs@>=3.0.0 <3.0.9": ">=3.1.2", "tar-fs@>=2.0.0 <2.1.3": ">=3.1.2", "tmp@<=0.2.3": ">=0.2.5", - "vite@>=5.0.0 <=5.4.18": ">=7.3.1" + "vite@>=5.0.0 <=5.4.18": ">=8.0.10" }, "patchedDependencies": { "@types/node-unifi": "patches/@types__node-unifi.patch", diff --git a/packages/analytics/package.json b/packages/analytics/package.json index 102249620..ed0ea2331 100644 --- a/packages/analytics/package.json +++ b/packages/analytics/package.json @@ -28,14 +28,14 @@ "@homarr/db": "workspace:^0.1.0", "@homarr/docker": "workspace:^0.1.0", "@homarr/server-settings": "workspace:^0.1.0", - "@umami/node": "^0.4.0", - "superjson": "2.2.6" + "@umami/node": "catalog:", + "superjson": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/api/package.json b/packages/api/package.json index 41b8980d6..e90bc7278 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -9,7 +9,8 @@ "./client": "./src/client.ts", "./server": "./src/server.ts", "./websocket": "./src/websocket.ts", - "./shared": "./src/shared.ts" + "./shared": "./src/shared.ts", + "./open-api": "./src/open-api.ts" }, "main": "./index.ts", "types": "./index.ts", @@ -40,26 +41,26 @@ "@homarr/server-settings": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", - "@kubernetes/client-node": "^1.4.0", - "@tanstack/react-query": "^5.90.21", - "@trpc/client": "^11.12.0", - "@trpc/react-query": "^11.12.0", - "@trpc/server": "^11.12.0", - "@trpc/tanstack-react-query": "^11.12.0", - "lodash.clonedeep": "^4.5.0", - "next": "16.1.6", - "react": "19.2.4", - "react-dom": "19.2.4", - "superjson": "2.2.6", - "trpc-to-openapi": "^3.1.0", - "zod": "^4.2.1" + "@kubernetes/client-node": "catalog:", + "@tanstack/react-query": "catalog:", + "@trpc/client": "catalog:", + "@trpc/react-query": "catalog:", + "@trpc/server": "catalog:", + "@trpc/tanstack-react-query": "catalog:", + "lodash.clonedeep": "catalog:", + "next": "catalog:", + "react": "catalog:", + "react-dom": "catalog:", + "superjson": "catalog:", + "trpc-to-openapi": "catalog:", + "zod": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.39.4", - "prettier": "^3.8.1", - "typescript": "^5.9.3" + "eslint": "catalog:", + "prettier": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts index d339d177f..1cbe6fdd7 100644 --- a/packages/api/src/index.ts +++ b/packages/api/src/index.ts @@ -1,6 +1,5 @@ import type { inferRouterInputs, inferRouterOutputs } from "@trpc/server"; -import { openApiDocument } from "./open-api"; import type { AppRouter } from "./root"; import { appRouter } from "./root"; import { createCallerFactory, createTRPCContext } from "./trpc"; @@ -30,5 +29,5 @@ type RouterInputs = inferRouterInputs; **/ type RouterOutputs = inferRouterOutputs; -export { createTRPCContext, appRouter, createCaller, openApiDocument }; +export { createTRPCContext, appRouter, createCaller }; export type { AppRouter, RouterInputs, RouterOutputs }; diff --git a/packages/api/src/open-api.ts b/packages/api/src/open-api.ts index b4827871c..d789582df 100644 --- a/packages/api/src/open-api.ts +++ b/packages/api/src/open-api.ts @@ -2,10 +2,21 @@ import { generateOpenApiDocument } from "trpc-to-openapi"; import { API_KEY_HEADER_NAME } from "@homarr/auth/api-key"; -import { appRouter } from "./root"; +import { appRouter } from "./router/app"; +import { infoRouter } from "./router/info"; +import { inviteRouter } from "./router/invite"; +import { userRouter } from "./router/user"; +import { createTRPCRouter } from "./trpc"; + +export const openApiRouter = createTRPCRouter({ + appRouter, + infoRouter, + inviteRouter, + userRouter, +}); export const openApiDocument = (base: string) => - generateOpenApiDocument(appRouter, { + generateOpenApiDocument(openApiRouter, { title: "Homarr API documentation", version: "1.0.0", baseUrl: base, diff --git a/packages/api/src/router/apiKeys.ts b/packages/api/src/router/apiKeys.ts index 9c0117085..71efd98ca 100644 --- a/packages/api/src/router/apiKeys.ts +++ b/packages/api/src/router/apiKeys.ts @@ -1,6 +1,6 @@ import { z } from "zod/v4"; -import { createSaltAsync, hashPasswordAsync } from "@homarr/auth"; +import { hashPasswordAsync } from "@homarr/auth"; import { createId } from "@homarr/common"; import { generateSecureRandomToken } from "@homarr/common/server"; import { db, eq } from "@homarr/db"; @@ -14,7 +14,6 @@ export const apiKeysRouter = createTRPCRouter({ columns: { id: true, apiKey: false, - salt: false, }, with: { user: { @@ -29,14 +28,12 @@ export const apiKeysRouter = createTRPCRouter({ }); }), create: permissionRequiredProcedure.requiresPermission("admin").mutation(async ({ ctx }) => { - const salt = await createSaltAsync(); const randomToken = generateSecureRandomToken(64); - const hashedRandomToken = await hashPasswordAsync(randomToken, salt); + const hashedRandomToken = await hashPasswordAsync(randomToken); const id = createId(); await db.insert(apiKeys).values({ id, apiKey: hashedRandomToken, - salt, userId: ctx.session.user.id, }); return { diff --git a/packages/api/src/router/docker/docker-router.ts b/packages/api/src/router/docker/docker-router.ts index 6a0ea49a0..e5a4b4796 100644 --- a/packages/api/src/router/docker/docker-router.ts +++ b/packages/api/src/router/docker/docker-router.ts @@ -140,7 +140,7 @@ interface DockerContainer { id: string; state: ContainerState; image: string; - ports: Port[]; + ports: Port[] | undefined; iconUrl: string | null; cpuUsage: number; memoryUsage: number; diff --git a/packages/api/src/router/test/widgets/rssFeed.spec.ts b/packages/api/src/router/test/widgets/rssFeed.spec.ts index acd7f5c17..4773fa149 100644 --- a/packages/api/src/router/test/widgets/rssFeed.spec.ts +++ b/packages/api/src/router/test/widgets/rssFeed.spec.ts @@ -208,6 +208,7 @@ async function setupUrlRestrictionAsync(dbUrls: string[]) { hideDescription: false, textLinesClamp: 3, maximumAmountPosts: 5, + showPosterImage: true, } satisfies WidgetComponentProps<"rssFeed">["options"]), }) satisfies InferInsertModel, ), diff --git a/packages/api/src/router/user.ts b/packages/api/src/router/user.ts index f7ed6deb6..ad11f4fce 100644 --- a/packages/api/src/router/user.ts +++ b/packages/api/src/router/user.ts @@ -1,16 +1,18 @@ import { TRPCError } from "@trpc/server"; +import type { MySqlRawQueryResult } from "drizzle-orm/mysql2"; +import type { QueryResult } from "pg"; import { z } from "zod/v4"; -import { createSaltAsync, hashPasswordAsync } from "@homarr/auth"; +import { comparePasswordsAsync, hashPasswordAsync } from "@homarr/auth"; import { createId } from "@homarr/common"; import { createLogger } from "@homarr/core/infrastructure/logs"; import type { Database } from "@homarr/db"; -import { and, eq, like } from "@homarr/db"; +import { and, eq, handleTransactionsAsync, like } from "@homarr/db"; import { getMaxGroupPositionAsync } from "@homarr/db/queries"; import { boards, groupMembers, groupPermissions, groups, invites, users } from "@homarr/db/schema"; import { selectUserSchema } from "@homarr/db/validationSchemas"; -import { credentialsAdminGroup } from "@homarr/definitions"; import type { SupportedAuthProvider } from "@homarr/definitions"; +import { credentialsAdminGroup } from "@homarr/definitions"; import { byIdSchema } from "@homarr/validation/common"; import type { userBaseCreateSchema } from "@homarr/validation/user"; import { @@ -90,15 +92,58 @@ export const userRouter = createTRPCRouter({ await checkUsernameAlreadyTakenAndThrowAsync(ctx.db, "credentials", input.username); - await createUserAsync(ctx.db, input); + const hashedPassword = await hashPasswordAsync(input.password); - // Delete invite as it's used - await ctx.db.delete(invites).where(inviteWhere); + const userId = createId(); + const user = { + id: userId, + name: input.username, + password: hashedPassword, + }; + + await handleTransactionsAsync(ctx.db, { + async handleAsync(db, schema) { + await db.transaction(async (trx) => { + await trx.insert(schema.users).values(user); + + // Delete invite as it's used + const queryResult = (await trx.delete(schema.invites).where(inviteWhere)) as + | QueryResult + | MySqlRawQueryResult; + let count = 0; + if (Array.isArray(queryResult)) { + count = queryResult[0].affectedRows; + } else { + count = queryResult.rowCount ?? 0; + } + if (count === 0) { + throw new TRPCError({ + code: "FORBIDDEN", + message: "Invalid invite", + }); + } + }); + }, + handleSync(db) { + db.transaction((trx) => { + trx.insert(users).values(user).run(); + // Delete invite as it's used + const result = trx.delete(invites).where(inviteWhere).run(); + + if (result.changes === 0) { + throw new TRPCError({ + code: "FORBIDDEN", + message: "Invalid invite", + }); + } + }); + }, + }); }), create: permissionRequiredProcedure .requiresPermission("admin") .meta({ openapi: { method: "POST", path: "/api/users", tags: ["users"], protect: true } }) - .input(userCreateSchema) + .input(convertIntersectionToZodObject(userCreateSchema)) .output(z.void()) .mutation(async ({ ctx, input }) => { throwIfCredentialsDisabled(); @@ -329,7 +374,7 @@ export const userRouter = createTRPCRouter({ await ctx.db.delete(users).where(eq(users.id, input.userId)); }), changePassword: protectedProcedure - .input(userChangePasswordApiSchema) + .input(convertIntersectionToZodObject(userChangePasswordApiSchema)) .output(z.void()) .meta({ openapi: { method: "PATCH", path: "/api/users/{userId}/changePassword", tags: ["users"], protect: true } }) .mutation(async ({ ctx, input }) => { @@ -346,7 +391,6 @@ export const userRouter = createTRPCRouter({ columns: { id: true, password: true, - salt: true, provider: true, }, where: eq(users.id, input.userId), @@ -376,8 +420,7 @@ export const userRouter = createTRPCRouter({ }); if (isPreviousPasswordRequired) { - const previousPasswordHash = await hashPasswordAsync(input.previousPassword, dbUser.salt ?? ""); - const isValid = previousPasswordHash === dbUser.password; + const isValid = await comparePasswordsAsync(input.previousPassword, dbUser.password ?? ""); if (!isValid) { throw new TRPCError({ @@ -387,8 +430,7 @@ export const userRouter = createTRPCRouter({ } } - const salt = await createSaltAsync(); - const hashedPassword = await hashPasswordAsync(input.password, salt); + const hashedPassword = await hashPasswordAsync(input.password); await ctx.db .update(users) .set({ @@ -536,8 +578,7 @@ export const userRouter = createTRPCRouter({ }); const createUserAsync = async (db: Database, input: Omit, "groupIds">) => { - const salt = await createSaltAsync(); - const hashedPassword = await hashPasswordAsync(input.password, salt); + const hashedPassword = await hashPasswordAsync(input.password); const userId = createId(); await db.insert(users).values({ @@ -545,7 +586,6 @@ const createUserAsync = async (db: Database, input: Omit { + try { + const parsed: unknown = JSON.parse(value); + return typeof parsed === "object" && parsed !== null && Array.isArray((parsed as { ops?: unknown }).ops); + } catch { + return false; + } +}; + +const normalizeAnchorContent = (content: string | undefined) => { + if (content === undefined) return undefined; + + const trimmed = content.trim(); + if (!trimmed) { + return JSON.stringify({ ops: [{ insert: "\n" }] }); + } + + if (isJsonDeltaString(content)) return content; + + const normalizedText = content.endsWith("\n") ? content : `${content}\n`; + return JSON.stringify({ ops: [{ insert: normalizedText }] }); +}; + +export const anchorNotesRouter = createTRPCRouter({ + listNotes: publicProcedure + .concat(createOneIntegrationMiddleware("query", "anchor")) + .input(anchorNotesListInputSchema) + .query(async ({ ctx, input }) => { + const handler = anchorNotesListRequestHandler.handler(ctx.integration, { ...input, limit: input.limit ?? 50 }); + + const { data } = await handler.getCachedOrUpdatedDataAsync({ + forceUpdate: false, + }); + + return data; + }), + getNote: publicProcedure + .concat(createOneIntegrationMiddleware("query", "anchor")) + .input(noteIdInput) + .query(async ({ ctx, input }) => { + const handler = anchorNoteRequestHandler.handler(ctx.integration, { noteId: input.noteId }); + + const { data } = await handler.getCachedOrUpdatedDataAsync({ + forceUpdate: false, + }); + + return data; + }), + updateNote: protectedProcedure + .concat(createOneIntegrationMiddleware("interact", "anchor")) + .input(anchorNoteUpdateInputSchema) + .mutation(async ({ ctx, input }) => { + const integrationInstance = await createIntegrationAsync(ctx.integration); + const normalizedContent = normalizeAnchorContent(input.content); + const isContentNormalized = + input.content !== undefined && normalizedContent !== undefined && input.content !== normalizedContent; + + try { + const updatedNote = await integrationInstance.updateNoteAsync({ + noteId: input.noteId, + ...(input.title !== undefined ? { title: input.title } : {}), + ...(normalizedContent !== undefined ? { content: normalizedContent } : {}), + }); + + const noteHandler = anchorNoteRequestHandler.handler(ctx.integration, { noteId: input.noteId }); + await noteHandler.invalidateAsync(); + + return updatedNote; + } catch (error) { + if (error instanceof ResponseError && error.statusCode === 400) { + logger.warn("Anchor update note failed validation", { + noteId: input.noteId, + integrationId: ctx.integration.id, + contentLength: input.content?.length ?? 0, + contentIsJsonDelta: input.content ? isJsonDeltaString(input.content) : false, + contentNormalized: isContentNormalized, + }); + } + + if (error instanceof ResponseError && error.statusCode === 403) { + throw new TRPCError({ + code: "FORBIDDEN", + message: "You do not have permission to edit this note", + }); + } + + if (error instanceof ResponseError && error.statusCode === 404) { + throw new TRPCError({ + code: "NOT_FOUND", + message: "Note not found", + }); + } + + throw error; + } + }), +}); diff --git a/packages/api/src/router/widgets/index.ts b/packages/api/src/router/widgets/index.ts index 126ec4ad2..5e29dfa72 100644 --- a/packages/api/src/router/widgets/index.ts +++ b/packages/api/src/router/widgets/index.ts @@ -3,6 +3,7 @@ import { lazy } from "@trpc/server"; import { createTRPCRouter } from "../../trpc"; export const widgetRouter = createTRPCRouter({ + anchorNotes: lazy(() => import("./anchor-notes").then((mod) => mod.anchorNotesRouter)), coolify: lazy(() => import("./coolify").then((mod) => mod.coolifyRouter)), immich: lazy(() => import("./immich").then((mod) => mod.immichRouter)), notebook: lazy(() => import("./notebook").then((mod) => mod.notebookRouter)), @@ -26,5 +27,7 @@ export const widgetRouter = createTRPCRouter({ networkController: lazy(() => import("./network-controller").then((mod) => mod.networkControllerRouter)), firewall: lazy(() => import("./firewall").then((mod) => mod.firewallRouter)), notifications: lazy(() => import("./notifications").then((mod) => mod.notificationsRouter)), + timetable: lazy(() => import("./timetable").then((mod) => mod.timetableRouter)), tracearr: lazy(() => import("./tracearr").then((mod) => mod.tracearrRouter)), + speedtestTracker: lazy(() => import("./speedtest-tracker").then((mod) => mod.speedtestTrackerRouter)), }); diff --git a/packages/api/src/router/widgets/rssFeed.ts b/packages/api/src/router/widgets/rssFeed.ts index 079d84a32..ec9c223e0 100644 --- a/packages/api/src/router/widgets/rssFeed.ts +++ b/packages/api/src/router/widgets/rssFeed.ts @@ -1,3 +1,4 @@ +import { observable } from "@trpc/server/observable"; import SuperJSON from "superjson"; import { z } from "zod/v4"; @@ -5,45 +6,59 @@ import type { Session } from "@homarr/auth"; import type { Database } from "@homarr/db"; import { eq } from "@homarr/db"; import { items, users } from "@homarr/db/schema"; +import type { ExtendedFeedEntry } from "@homarr/request-handler/rss-feeds"; import { rssFeedsRequestHandler } from "@homarr/request-handler/rss-feeds"; import type { WidgetComponentProps } from "../../../../widgets/src"; import { createTRPCRouter, publicProcedure } from "../../trpc"; +const feedsInput = z.object({ + urls: z.array(z.string()).max(100), + maximumAmountPosts: z.number(), +}); + export const rssFeedRouter = createTRPCRouter({ - getFeeds: publicProcedure - .input( - z.object({ - urls: z.array(z.string()).max(100), - maximumAmountPosts: z.number(), - }), - ) - .query(async ({ ctx, input }) => { - const urls = (await canAccessAllFeedsAsync(ctx.db, ctx.session)) - ? input.urls - : await restrictUrlsAsync(ctx.db, input.urls); + getFeeds: publicProcedure.input(feedsInput).query(async ({ ctx, input }) => { + const urls = (await canAccessAllFeedsAsync(ctx.db, ctx.session)) + ? input.urls + : await restrictUrlsAsync(ctx.db, input.urls); - const rssFeeds = await Promise.all( - urls.map(async (url) => { - const innerHandler = rssFeedsRequestHandler.handler({ - url, - count: input.maximumAmountPosts, - }); - return await innerHandler.getCachedOrUpdatedDataAsync({ - forceUpdate: false, - }); - }), - ); - - return rssFeeds - .flatMap((rssFeed) => rssFeed.data.entries) - .slice(0, input.maximumAmountPosts) - .sort((entryA, entryB) => { - return entryA.published && entryB.published - ? new Date(entryB.published).getTime() - new Date(entryA.published).getTime() - : 0; + const rssFeeds = await Promise.all( + urls.map(async (url) => { + const innerHandler = rssFeedsRequestHandler.handler({ + url, + count: input.maximumAmountPosts, }); - }), + return await innerHandler.getCachedOrUpdatedDataAsync({ + forceUpdate: false, + }); + }), + ); + + return rssFeeds + .flatMap((rssFeed) => rssFeed.data.entries) + .slice(0, input.maximumAmountPosts) + .sort((entryA, entryB) => { + return entryA.published && entryB.published + ? new Date(entryB.published).getTime() - new Date(entryA.published).getTime() + : 0; + }); + }), + subscribeFeeds: publicProcedure.input(feedsInput).subscription(({ input }) => { + // It is not necessary to check access to all feeds here, as the client will only subscribe to feeds which already exist + return observable<{ url: string; entries: ExtendedFeedEntry[] }>((emit) => { + const unsubscribes = input.urls.map((url) => { + const innerHandler = rssFeedsRequestHandler.handler({ url, count: input.maximumAmountPosts }); + return innerHandler.subscribe((data) => { + emit.next({ url, entries: data.entries }); + }); + }); + + return () => { + unsubscribes.forEach((unsubscribe) => unsubscribe()); + }; + }); + }), }); export async function canAccessAllFeedsAsync(db: Database, session: Session | null) { diff --git a/packages/api/src/router/widgets/speedtest-tracker.ts b/packages/api/src/router/widgets/speedtest-tracker.ts new file mode 100644 index 000000000..be4245921 --- /dev/null +++ b/packages/api/src/router/widgets/speedtest-tracker.ts @@ -0,0 +1,55 @@ +import { observable } from "@trpc/server/observable"; + +import type { SpeedtestTrackerDashboardData } from "@homarr/integrations/types"; +import { speedtestTrackerRequestHandler } from "@homarr/request-handler/speedtest-tracker"; + +import { createManyIntegrationMiddleware } from "../../middlewares/integration"; +import { createTRPCRouter, publicProcedure } from "../../trpc"; + +export const speedtestTrackerRouter = createTRPCRouter({ + getDashboard: publicProcedure + .concat(createManyIntegrationMiddleware("query", "speedtestTracker")) + .query(async ({ ctx }) => { + const results = await Promise.all( + ctx.integrations.map(async (integration) => { + const innerHandler = speedtestTrackerRequestHandler.handler(integration, {}); + const { data, timestamp } = await innerHandler.getCachedOrUpdatedDataAsync({ forceUpdate: false }); + + return { + integrationId: integration.id, + integrationName: integration.name, + integrationUrl: integration.url, + dashboard: data, + updatedAt: timestamp, + }; + }), + ); + + return results; + }), + + subscribeToDashboard: publicProcedure + .concat(createManyIntegrationMiddleware("query", "speedtestTracker")) + .subscription(({ ctx }) => { + return observable<{ + integrationId: string; + dashboard: SpeedtestTrackerDashboardData; + timestamp: Date; + }>((emit) => { + const unsubscribes = ctx.integrations.map((integration) => { + const innerHandler = speedtestTrackerRequestHandler.handler(integration, {}); + return innerHandler.subscribe((dashboard) => { + emit.next({ + integrationId: integration.id, + dashboard, + timestamp: new Date(), + }); + }); + }); + + return () => { + unsubscribes.forEach((unsubscribe) => unsubscribe()); + }; + }); + }), +}); diff --git a/packages/api/src/router/widgets/timetable.ts b/packages/api/src/router/widgets/timetable.ts new file mode 100644 index 000000000..787be4c37 --- /dev/null +++ b/packages/api/src/router/widgets/timetable.ts @@ -0,0 +1,43 @@ +import z from "zod"; + +import { getIntegrationKindsByCategory } from "@homarr/definitions"; +import { timetableOptionsSchema } from "@homarr/integrations/types"; +import { + timetableGetTimetableRequestHandler, + timetableSearchStationsRequestHandler, +} from "@homarr/request-handler/timetable"; + +import { createOneIntegrationMiddleware } from "../../middlewares/integration"; +import { createTRPCRouter, publicProcedure } from "../../trpc"; + +export const timetableRouter = createTRPCRouter({ + getTimetable: publicProcedure + .concat(createOneIntegrationMiddleware("query", ...getIntegrationKindsByCategory("timetable"))) + .input(timetableOptionsSchema) + .query(async ({ input, ctx }) => { + const innerHandler = timetableGetTimetableRequestHandler.handler(ctx.integration, { + stationId: input.stationId, + limit: input.limit, + }); + + const { data } = await innerHandler.getCachedOrUpdatedDataAsync({ forceUpdate: false }); + + return data; + }), + searchStations: publicProcedure + .concat(createOneIntegrationMiddleware("query", ...getIntegrationKindsByCategory("timetable"))) + .input( + z.object({ + query: z.string(), + }), + ) + .query(async ({ input, ctx }) => { + const innerHandler = timetableSearchStationsRequestHandler.handler(ctx.integration, { + query: input.query, + }); + + const { data } = await innerHandler.getCachedOrUpdatedDataAsync({ forceUpdate: false }); + + return data; + }), +}); diff --git a/packages/auth/api-key/get-api-key-session.ts b/packages/auth/api-key/get-api-key-session.ts index 6fbaec972..632271498 100644 --- a/packages/auth/api-key/get-api-key-session.ts +++ b/packages/auth/api-key/get-api-key-session.ts @@ -5,7 +5,7 @@ import type { Database } from "@homarr/db"; import { eq } from "@homarr/db"; import { apiKeys } from "@homarr/db/schema"; -import { hashPasswordAsync } from "../security"; +import { comparePasswordsAsync } from "../security"; import { createSessionAsync } from "../server"; const logger = createLogger({ module: "apiKeyAuth" }); @@ -41,7 +41,6 @@ export const getSessionFromApiKeyAsync = async ( columns: { id: true, apiKey: true, - salt: true, }, with: { user: { @@ -60,9 +59,9 @@ export const getSessionFromApiKeyAsync = async ( return null; } - const hashedApiKey = await hashPasswordAsync(apiKey, apiKeyFromDb.salt); + const isValid = await comparePasswordsAsync(apiKey, apiKeyFromDb.apiKey); - if (apiKeyFromDb.apiKey !== hashedApiKey) { + if (!isValid) { logger.warn("Failed to authenticate with api-key", { ipAddress, userAgent, reason: "API_KEY_MISMATCH" }); return null; } diff --git a/packages/auth/api-key/test/get-api-key-session.spec.ts b/packages/auth/api-key/test/get-api-key-session.spec.ts index 5040ea441..dac713bd8 100644 --- a/packages/auth/api-key/test/get-api-key-session.spec.ts +++ b/packages/auth/api-key/test/get-api-key-session.spec.ts @@ -5,7 +5,7 @@ import { createId } from "@homarr/common"; import { apiKeys, users } from "@homarr/db/schema"; import { createDb } from "@homarr/db/test"; -import { createSaltAsync, hashPasswordAsync } from "../../security"; +import { hashPasswordAsync } from "../../security"; import { getSessionFromApiKeyAsync } from "../get-api-key-session"; // Mock the logger to avoid console output during tests @@ -118,11 +118,9 @@ const setupAsync = async (options?: SetupOptions) => { }); if (options?.token) { - const salt = await createSaltAsync(); await db.insert(apiKeys).values({ id: defaultApiKeyId, - apiKey: await hashPasswordAsync(options.token, salt), - salt, + apiKey: await hashPasswordAsync(options.token), userId: defaultUserId, }); } diff --git a/packages/auth/package.json b/packages/auth/package.json index 2ac1e586c..c0f98fdfc 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -24,30 +24,30 @@ }, "prettier": "@homarr/prettier-config", "dependencies": { - "@auth/core": "^0.41.1", - "@auth/drizzle-adapter": "^1.11.1", + "@auth/core": "catalog:", + "@auth/drizzle-adapter": "catalog:", "@homarr/common": "workspace:^0.1.0", "@homarr/core": "workspace:^0.1.0", "@homarr/db": "workspace:^0.1.0", "@homarr/definitions": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", - "bcrypt": "^6.0.0", - "cookies": "^0.9.1", - "ldapts": "8.1.7", - "next": "16.1.6", - "next-auth": "5.0.0-beta.30", - "react": "19.2.4", - "react-dom": "19.2.4", - "zod": "^4.2.1" + "bcrypt": "catalog:", + "cookies": "catalog:", + "ldapts": "catalog:", + "next": "catalog:", + "next-auth": "catalog:", + "react": "catalog:", + "react-dom": "catalog:", + "zod": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "@types/bcrypt": "6.0.0", - "@types/cookies": "0.9.2", - "eslint": "^9.39.4", - "prettier": "^3.8.1", - "typescript": "^5.9.3" + "@types/bcrypt": "catalog:", + "@types/cookies": "catalog:", + "eslint": "catalog:", + "prettier": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/auth/providers/credentials/authorization/basic-authorization.ts b/packages/auth/providers/credentials/authorization/basic-authorization.ts index 04253d837..2a6b96a31 100644 --- a/packages/auth/providers/credentials/authorization/basic-authorization.ts +++ b/packages/auth/providers/credentials/authorization/basic-authorization.ts @@ -1,4 +1,3 @@ -import bcrypt from "bcrypt"; import type { z } from "zod/v4"; import { createLogger } from "@homarr/core/infrastructure/logs"; @@ -7,6 +6,8 @@ import { and, eq } from "@homarr/db"; import { users } from "@homarr/db/schema"; import type { userSignInSchema } from "@homarr/validation/user"; +import { comparePasswordsAsync } from "../../../security"; + const logger = createLogger({ module: "basicAuthorization" }); export const authorizeWithBasicCredentialsAsync = async ( @@ -23,7 +24,7 @@ export const authorizeWithBasicCredentialsAsync = async ( } logger.info("User is trying to log in. Checking password...", { userName: user.name }); - const isValidPassword = await bcrypt.compare(credentials.password, user.password); + const isValidPassword = await comparePasswordsAsync(credentials.password, user.password); if (!isValidPassword) { logger.warn("Password for user was incorrect", { userName: user.name }); diff --git a/packages/auth/providers/test/basic-authorization.spec.ts b/packages/auth/providers/test/basic-authorization.spec.ts index 17d1d00e1..6188729c7 100644 --- a/packages/auth/providers/test/basic-authorization.spec.ts +++ b/packages/auth/providers/test/basic-authorization.spec.ts @@ -4,7 +4,7 @@ import { createId } from "@homarr/common"; import { users } from "@homarr/db/schema"; import { createDb } from "@homarr/db/test"; -import { createSaltAsync, hashPasswordAsync } from "../../security"; +import { hashPasswordAsync } from "../../security"; import { authorizeWithBasicCredentialsAsync } from "../credentials/authorization/basic-authorization"; const defaultUserId = createId(); @@ -13,12 +13,10 @@ describe("authorizeWithBasicCredentials", () => { test("should authorize user with correct credentials", async () => { // Arrange const db = createDb(); - const salt = await createSaltAsync(); await db.insert(users).values({ id: defaultUserId, name: "test", - salt, - password: await hashPasswordAsync("test", salt), + password: await hashPasswordAsync("test"), }); // Act @@ -34,12 +32,10 @@ describe("authorizeWithBasicCredentials", () => { test("should not authorize user with incorrect credentials", async () => { // Arrange const db = createDb(); - const salt = await createSaltAsync(); await db.insert(users).values({ id: defaultUserId, name: "test", - salt, - password: await hashPasswordAsync("test", salt), + password: await hashPasswordAsync("test"), }); // Act @@ -55,12 +51,10 @@ describe("authorizeWithBasicCredentials", () => { test("should not authorize user with incorrect username", async () => { // Arrange const db = createDb(); - const salt = await createSaltAsync(); await db.insert(users).values({ id: defaultUserId, name: "test", - salt, - password: await hashPasswordAsync("test", salt), + password: await hashPasswordAsync("test"), }); // Act diff --git a/packages/auth/security.ts b/packages/auth/security.ts index cc0c16c6b..de6c4523b 100644 --- a/packages/auth/security.ts +++ b/packages/auth/security.ts @@ -1,9 +1,15 @@ import bcrypt from "bcrypt"; -export const createSaltAsync = async () => { - return bcrypt.genSalt(10); +export const hashPasswordAsync = async (password: string) => { + return bcrypt.hash(password, 10); }; -export const hashPasswordAsync = async (password: string, salt: string) => { - return bcrypt.hash(password, salt); +/** + * Compares a plaintext password with a hashed password and returns whether they match. + * @param password plaintext password + * @param hash hashed password + * @returns wheter it is the same + */ +export const comparePasswordsAsync = async (password: string, hash: string) => { + return await bcrypt.compare(password, hash); }; diff --git a/packages/auth/test/security.spec.ts b/packages/auth/test/security.spec.ts index fed59513b..fee34ec7f 100644 --- a/packages/auth/test/security.spec.ts +++ b/packages/auth/test/security.spec.ts @@ -1,25 +1,11 @@ import { describe, expect, it } from "vitest"; -import { createSaltAsync, hashPasswordAsync } from "../security"; - -describe("createSalt should return a salt", () => { - it("should return a salt", async () => { - const result = await createSaltAsync(); - expect(result).toBeDefined(); - expect(result.length).toBeGreaterThan(25); - }); - it("should return a different salt each time", async () => { - const result1 = await createSaltAsync(); - const result2 = await createSaltAsync(); - expect(result1).not.toEqual(result2); - }); -}); +import { comparePasswordsAsync, hashPasswordAsync } from "../security"; describe("hashPassword should return a hash", () => { it("should return a hash", async () => { const password = "password"; - const salt = await createSaltAsync(); - const result = await hashPasswordAsync(password, salt); + const result = await hashPasswordAsync(password); expect(result).toBeDefined(); expect(result.length).toBeGreaterThan(55); expect(result).not.toEqual(password); @@ -27,21 +13,44 @@ describe("hashPassword should return a hash", () => { it("should return a different hash each time", async () => { const password = "password"; const password2 = "another password"; - const salt = await createSaltAsync(); - const result1 = await hashPasswordAsync(password, salt); - const result2 = await hashPasswordAsync(password2, salt); + const result1 = await hashPasswordAsync(password); + const result2 = await hashPasswordAsync(password2); expect(result1).not.toEqual(result2); }); it("should return a different hash for the same password with different salts", async () => { const password = "password"; - const salt1 = await createSaltAsync(); - const salt2 = await createSaltAsync(); - const result1 = await hashPasswordAsync(password, salt1); - const result2 = await hashPasswordAsync(password, salt2); + const result1 = await hashPasswordAsync(password); + const result2 = await hashPasswordAsync(password); expect(result1).not.toEqual(result2); }); }); + +describe("comparePasswordsAsync should compare passwords correctly", () => { + it("should return true for matching passwords", async () => { + // Arrange + const password = "password"; + const hash = await hashPasswordAsync(password); + + // Act + const result = await comparePasswordsAsync(password, hash); + + // Assert + expect(result).toBe(true); + }); + it("should return false for non-matching passwords", async () => { + // Arrange + const password = "password"; + const wrongPassword = "wrongpassword"; + const hash = await hashPasswordAsync(password); + + // Act + const result = await comparePasswordsAsync(wrongPassword, hash); + + // Assert + expect(result).toBe(false); + }); +}); diff --git a/packages/boards/package.json b/packages/boards/package.json index 59968d9e6..b6dff9fca 100644 --- a/packages/boards/package.json +++ b/packages/boards/package.json @@ -25,14 +25,14 @@ "prettier": "@homarr/prettier-config", "dependencies": { "@homarr/api": "workspace:^0.1.0", - "react": "19.2.4", - "react-dom": "19.2.4" + "react": "catalog:", + "react-dom": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/cli/package.json b/packages/cli/package.json index 2cd8a86d2..6811f7a37 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -25,19 +25,19 @@ }, "prettier": "@homarr/prettier-config", "dependencies": { - "@drizzle-team/brocli": "^0.11.0", + "@drizzle-team/brocli": "catalog:", "@homarr/auth": "workspace:^0.1.0", "@homarr/common": "workspace:^0.1.0", "@homarr/db": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", - "dotenv": "^17.3.1" + "dotenv": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "esbuild": "^0.27.3", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "esbuild": "catalog:", + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/cli/src/commands/recreate-admin.ts b/packages/cli/src/commands/recreate-admin.ts index 8c2b9fd8d..5734d9c9d 100644 --- a/packages/cli/src/commands/recreate-admin.ts +++ b/packages/cli/src/commands/recreate-admin.ts @@ -1,6 +1,6 @@ import { command, string } from "@drizzle-team/brocli"; -import { createSaltAsync, hashPasswordAsync } from "@homarr/auth"; +import { hashPasswordAsync } from "@homarr/auth"; import { createId } from "@homarr/common"; import { generateSecureRandomToken } from "@homarr/common/server"; import { and, count, db, eq } from "@homarr/db"; @@ -67,9 +67,8 @@ export const recreateAdmin = command({ permission: "admin", }); - const salt = await createSaltAsync(); const password = generateSecureRandomToken(24); - const hashedPassword = await hashPasswordAsync(password, salt); + const hashedPassword = await hashPasswordAsync(password); const userId = createId(); await db.insert(users).values({ @@ -77,7 +76,6 @@ export const recreateAdmin = command({ name: result.data, provider: "credentials", password: hashedPassword, - salt, }); await db.insert(groupMembers).values({ diff --git a/packages/cli/src/commands/reset-password.ts b/packages/cli/src/commands/reset-password.ts index ee4383205..1c10734d7 100644 --- a/packages/cli/src/commands/reset-password.ts +++ b/packages/cli/src/commands/reset-password.ts @@ -22,7 +22,7 @@ export const resetPassword = command({ where: and(eq(users.name, options.username), eq(users.provider, "credentials")), }); - if (!user?.salt) { + if (!user?.password) { console.error(`User ${options.username} not found`); return; } @@ -33,7 +33,7 @@ export const resetPassword = command({ await db .update(users) .set({ - password: await hashPasswordAsync(newPassword, user.salt), + password: await hashPasswordAsync(newPassword), }) .where(eq(users.id, user.id)); diff --git a/packages/cli/src/commands/users-update-password.ts b/packages/cli/src/commands/users-update-password.ts index c579f0d24..2db3342b1 100644 --- a/packages/cli/src/commands/users-update-password.ts +++ b/packages/cli/src/commands/users-update-password.ts @@ -29,7 +29,7 @@ export const usersUpdatePassword = command({ where: options.id ? eq(users.id, options.id) : eq(users.name, options.username!), }); - if (!user?.salt) { + if (!user?.password) { console.error("User not found or has no credentials record"); return; } @@ -37,7 +37,7 @@ export const usersUpdatePassword = command({ await db .update(users) .set({ - password: await hashPasswordAsync(options.password, user.salt), + password: await hashPasswordAsync(options.password), }) .where(eq(users.id, user.id)); diff --git a/packages/common/package.json b/packages/common/package.json index 06682d083..e96ff6047 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -27,22 +27,22 @@ "prettier": "@homarr/prettier-config", "dependencies": { "@homarr/core": "workspace:^0.1.0", - "@paralleldrive/cuid2": "^3.3.0", - "cookie": "1.1.1", - "dayjs": "^1.11.19", - "next": "16.1.6", - "octokit": "^5.0.5", - "react": "19.2.4", - "react-dom": "19.2.4", - "undici": "7.18.2", - "zod": "^4.2.1", - "zod-validation-error": "^5.0.0" + "@paralleldrive/cuid2": "catalog:", + "cookie": "catalog:", + "dayjs": "catalog:", + "next": "catalog:", + "octokit": "catalog:", + "react": "catalog:", + "react-dom": "catalog:", + "undici": "catalog:", + "zod": "catalog:", + "zod-validation-error": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/core/package.json b/packages/core/package.json index 167ea4099..19e7f473b 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -37,24 +37,24 @@ }, "prettier": "@homarr/prettier-config", "dependencies": { - "@t3-oss/env-nextjs": "^0.13.10", - "better-sqlite3": "^12.6.2", - "dns-caching": "^0.2.9", - "drizzle-orm": "^0.45.1", - "ioredis": "5.10.0", - "mysql2": "3.19.1", - "pg": "^8.20.0", - "superjson": "2.2.6", - "winston": "3.19.0", - "zod": "^4.2.1" + "@t3-oss/env-nextjs": "catalog:", + "better-sqlite3": "catalog:", + "dns-caching": "catalog:", + "drizzle-orm": "catalog:", + "ioredis": "catalog:", + "mysql2": "catalog:", + "pg": "catalog:", + "superjson": "catalog:", + "winston": "catalog:", + "zod": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "@types/better-sqlite3": "7.6.13", - "@types/pg": "^8.18.0", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "@types/better-sqlite3": "catalog:", + "@types/pg": "catalog:", + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/core/src/infrastructure/logs/format/metadata.ts b/packages/core/src/infrastructure/logs/format/metadata.ts index 057aa157d..515bea272 100644 --- a/packages/core/src/infrastructure/logs/format/metadata.ts +++ b/packages/core/src/infrastructure/logs/format/metadata.ts @@ -1,7 +1,10 @@ import { ErrorWithMetadata } from "@homarr/core/infrastructure/logs/error"; export const formatMetadata = (metadata: Record | Error, ignoreKeys?: string[]) => { - const metadataObject = metadata instanceof ErrorWithMetadata ? metadata.metadata : metadata; + const metadataObject = + metadata instanceof ErrorWithMetadata || ("metadata" in metadata && typeof metadata.metadata === "object") + ? (metadata.metadata as Record) + : metadata; const filteredMetadata = Object.keys(metadataObject) .filter((key) => !ignoreKeys?.includes(key)) diff --git a/packages/cron-job-api/package.json b/packages/cron-job-api/package.json index bf3c512d9..09bde876b 100644 --- a/packages/cron-job-api/package.json +++ b/packages/cron-job-api/package.json @@ -28,21 +28,21 @@ "@homarr/common": "workspace:^0.1.0", "@homarr/core": "workspace:^0.1.0", "@homarr/cron-jobs": "workspace:^0.1.0", - "@tanstack/react-query": "^5.90.21", - "@trpc/client": "^11.12.0", - "@trpc/server": "^11.12.0", - "@trpc/tanstack-react-query": "^11.12.0", - "node-cron": "^4.2.1", - "react": "19.2.4", - "zod": "^4.2.1" + "@tanstack/react-query": "catalog:", + "@trpc/client": "catalog:", + "@trpc/server": "catalog:", + "@trpc/tanstack-react-query": "catalog:", + "node-cron": "catalog:", + "react": "catalog:", + "zod": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "@types/node-cron": "^3.0.11", - "@types/react": "19.2.14", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "@types/node-cron": "catalog:", + "@types/react": "catalog:", + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/cron-job-status/package.json b/packages/cron-job-status/package.json index 79f3b0ae9..2bd53b9cb 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.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/cron-jobs-core/package.json b/packages/cron-jobs-core/package.json index 7983a9f77..02570d692 100644 --- a/packages/cron-jobs-core/package.json +++ b/packages/cron-jobs-core/package.json @@ -27,14 +27,14 @@ "@homarr/common": "workspace:^0.1.0", "@homarr/core": "workspace:^", "@homarr/db": "workspace:^0.1.0", - "node-cron": "^4.2.1" + "node-cron": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "@types/node-cron": "^3.0.11", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "@types/node-cron": "catalog:", + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/cron-jobs/package.json b/packages/cron-jobs/package.json index c015f14b9..d0a55d25a 100644 --- a/packages/cron-jobs/package.json +++ b/packages/cron-jobs/package.json @@ -38,13 +38,13 @@ "@homarr/server-settings": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", - "semver-parser": "^4.1.8" + "semver-parser": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/cron-jobs/src/index.ts b/packages/cron-jobs/src/index.ts index 5ab802124..7f2b2349f 100644 --- a/packages/cron-jobs/src/index.ts +++ b/packages/cron-jobs/src/index.ts @@ -18,6 +18,7 @@ import { mediaServerJob } from "./jobs/integrations/media-server"; import { mediaTranscodingJob } from "./jobs/integrations/media-transcoding"; import { networkControllerJob } from "./jobs/integrations/network-controller"; import { refreshNotificationsJob } from "./jobs/integrations/notifications"; +import { timetableJob } from "./jobs/integrations/timetable"; import { tracearrJob } from "./jobs/integrations/tracearr"; import { minecraftServerStatusJob } from "./jobs/minecraft-server-status"; import { pingJob } from "./jobs/ping"; @@ -51,6 +52,7 @@ export const jobGroup = createCronJobGroup({ firewallInterfaces: firewallInterfacesJob, refreshNotifications: refreshNotificationsJob, weather: weatherJob, + timetable: timetableJob, tracearr: tracearrJob, }); diff --git a/packages/cron-jobs/src/jobs/integrations/timetable.ts b/packages/cron-jobs/src/jobs/integrations/timetable.ts new file mode 100644 index 000000000..b3964dc38 --- /dev/null +++ b/packages/cron-jobs/src/jobs/integrations/timetable.ts @@ -0,0 +1,20 @@ +import { EVERY_5_MINUTES } from "@homarr/cron-jobs-core/expressions"; +import { createRequestIntegrationJobHandler } from "@homarr/request-handler/lib/cached-request-integration-job-handler"; +import { timetableGetTimetableRequestHandler } from "@homarr/request-handler/timetable"; + +import { createCronJob } from "../../lib"; + +export const timetableJob = createCronJob("timetable", EVERY_5_MINUTES).withCallback( + createRequestIntegrationJobHandler(timetableGetTimetableRequestHandler.handler, { + widgetKinds: ["timetable"], + getInput: { + timetable: (options) => + options.station + ? { + stationId: options.station.value, + limit: 10, + } + : [], + }, + }), +); diff --git a/packages/cron-jobs/src/jobs/rss-feeds.ts b/packages/cron-jobs/src/jobs/rss-feeds.ts index 2dda83499..6a497a043 100644 --- a/packages/cron-jobs/src/jobs/rss-feeds.ts +++ b/packages/cron-jobs/src/jobs/rss-feeds.ts @@ -5,9 +5,9 @@ import { ErrorWithMetadata } from "@homarr/core/infrastructure/logs/error"; import { EVERY_10_MINUTES } from "@homarr/cron-jobs-core/expressions"; import { db, eq } from "@homarr/db"; import { items } from "@homarr/db/schema"; -// This import is done that way to avoid circular dependencies. import { rssFeedsRequestHandler } from "@homarr/request-handler/rss-feeds"; +// This import is done that way to avoid circular dependencies. import type { WidgetComponentProps } from "../../../widgets"; import { createCronJob } from "../lib"; diff --git a/packages/db/migrations/mysql/0037_remove_salt.sql b/packages/db/migrations/mysql/0037_remove_salt.sql new file mode 100644 index 000000000..20f6ed492 --- /dev/null +++ b/packages/db/migrations/mysql/0037_remove_salt.sql @@ -0,0 +1,2 @@ +ALTER TABLE `apiKey` DROP COLUMN `salt`;--> statement-breakpoint +ALTER TABLE `user` DROP COLUMN `salt`; \ No newline at end of file diff --git a/packages/db/migrations/mysql/meta/0037_snapshot.json b/packages/db/migrations/mysql/meta/0037_snapshot.json new file mode 100644 index 000000000..1ccd5e954 --- /dev/null +++ b/packages/db/migrations/mysql/meta/0037_snapshot.json @@ -0,0 +1,2096 @@ +{ + "version": "5", + "dialect": "mysql", + "id": "730ee1c1-a35e-426f-a828-7ecde882f920", + "prevId": "90ea3b87-abde-433b-9cd4-0aaff72311a9", + "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 + }, + "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 + }, + "app_id": { + "name": "app_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "integration__kind_idx": { + "name": "integration__kind_idx", + "columns": ["kind"], + "isUnique": false + } + }, + "foreignKeys": { + "integration_app_id_app_id_fk": { + "name": "integration_app_id_app_id_fk", + "tableFrom": "integration", + "tableTo": "app", + "columnsFrom": ["app_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "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": {} + }, + "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 + }, + "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": {} + }, + "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": {} + } + }, + "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 284af5f2a..aa12294e3 100644 --- a/packages/db/migrations/mysql/meta/_journal.json +++ b/packages/db/migrations/mysql/meta/_journal.json @@ -260,6 +260,13 @@ "when": 1760968518445, "tag": "0036_add_app_reference_to_integration", "breakpoints": true + }, + { + "idx": 37, + "version": "5", + "when": 1775399941430, + "tag": "0037_remove_salt", + "breakpoints": true } ] } diff --git a/packages/db/migrations/postgresql/0003_remove_salt.sql b/packages/db/migrations/postgresql/0003_remove_salt.sql new file mode 100644 index 000000000..413cdb18e --- /dev/null +++ b/packages/db/migrations/postgresql/0003_remove_salt.sql @@ -0,0 +1,2 @@ +ALTER TABLE "apiKey" DROP COLUMN "salt";--> statement-breakpoint +ALTER TABLE "user" DROP COLUMN "salt"; \ No newline at end of file diff --git a/packages/db/migrations/postgresql/meta/0003_snapshot.json b/packages/db/migrations/postgresql/meta/0003_snapshot.json new file mode 100644 index 000000000..8c2b80518 --- /dev/null +++ b/packages/db/migrations/postgresql/meta/0003_snapshot.json @@ -0,0 +1,1995 @@ +{ + "id": "259f3d62-93b1-4e4c-b201-38ee6d5a5db1", + "prevId": "66a8193e-c82f-4b41-99da-8d94f5737c62", + "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 + }, + "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 + }, + "app_id": { + "name": "app_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false + } + }, + "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": { + "integration_app_id_app_id_fk": { + "name": "integration_app_id_app_id_fk", + "tableFrom": "integration", + "tableTo": "app", + "columnsFrom": ["app_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "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.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 + }, + "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 + }, + "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 + } + }, + "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 01f3a047c..e84263a17 100644 --- a/packages/db/migrations/postgresql/meta/_journal.json +++ b/packages/db/migrations/postgresql/meta/_journal.json @@ -22,6 +22,13 @@ "when": 1760968530084, "tag": "0002_add_app_reference_to_integration", "breakpoints": true + }, + { + "idx": 3, + "version": "7", + "when": 1775399963041, + "tag": "0003_remove_salt", + "breakpoints": true } ] } diff --git a/packages/db/migrations/sqlite/0035_remove_salt.sql b/packages/db/migrations/sqlite/0035_remove_salt.sql new file mode 100644 index 000000000..20f6ed492 --- /dev/null +++ b/packages/db/migrations/sqlite/0035_remove_salt.sql @@ -0,0 +1,2 @@ +ALTER TABLE `apiKey` DROP COLUMN `salt`;--> statement-breakpoint +ALTER TABLE `user` DROP COLUMN `salt`; \ No newline at end of file diff --git a/packages/db/migrations/sqlite/meta/0035_snapshot.json b/packages/db/migrations/sqlite/meta/0035_snapshot.json new file mode 100644 index 000000000..6e987190d --- /dev/null +++ b/packages/db/migrations/sqlite/meta/0035_snapshot.json @@ -0,0 +1,2011 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "fc94243d-373c-4834-890e-560bbbd53f12", + "prevId": "26cc52b8-505b-44af-9cbd-6f70f6f3bb6b", + "tables": { + "account": { + "name": "account", + "columns": { + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "provider": { + "name": "provider", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "provider_account_id": { + "name": "provider_account_id", + "type": "text", + "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": "integer", + "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": { + "columns": ["provider", "provider_account_id"], + "name": "account_provider_provider_account_id_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "apiKey": { + "name": "apiKey", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "api_key": { + "name": "api_key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "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": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "app": { + "name": "app", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "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": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "boardGroupPermission": { + "name": "boardGroupPermission", + "columns": { + "board_id": { + "name": "board_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "group_id": { + "name": "group_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "permission": { + "name": "permission", + "type": "text", + "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": { + "columns": ["board_id", "group_id", "permission"], + "name": "boardGroupPermission_board_id_group_id_permission_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "boardUserPermission": { + "name": "boardUserPermission", + "columns": { + "board_id": { + "name": "board_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "permission": { + "name": "permission", + "type": "text", + "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": { + "columns": ["board_id", "user_id", "permission"], + "name": "boardUserPermission_board_id_user_id_permission_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "board": { + "name": "board", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "is_public": { + "name": "is_public", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "creator_id": { + "name": "creator_id", + "type": "text", + "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": "integer", + "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": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + } + }, + "indexes": { + "board_name_unique": { + "name": "board_name_unique", + "columns": ["name"], + "isUnique": true + } + }, + "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": {}, + "checkConstraints": {} + }, + "cron_job_configuration": { + "name": "cron_job_configuration", + "columns": { + "name": { + "name": "name", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "cron_expression": { + "name": "cron_expression", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "is_enabled": { + "name": "is_enabled", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "groupMember": { + "name": "groupMember", + "columns": { + "group_id": { + "name": "group_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "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": { + "columns": ["group_id", "user_id"], + "name": "groupMember_group_id_user_id_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "groupPermission": { + "name": "groupPermission", + "columns": { + "group_id": { + "name": "group_id", + "type": "text", + "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": {}, + "checkConstraints": {} + }, + "group": { + "name": "group", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "owner_id": { + "name": "owner_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "home_board_id": { + "name": "home_board_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "mobile_home_board_id": { + "name": "mobile_home_board_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "position": { + "name": "position", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "group_name_unique": { + "name": "group_name_unique", + "columns": ["name"], + "isUnique": true + } + }, + "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": {}, + "checkConstraints": {} + }, + "iconRepository": { + "name": "iconRepository", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "icon": { + "name": "icon", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "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 + }, + "checksum": { + "name": "checksum", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "icon_repository_id": { + "name": "icon_repository_id", + "type": "text", + "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": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "integrationGroupPermissions": { + "name": "integrationGroupPermissions", + "columns": { + "integration_id": { + "name": "integration_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "group_id": { + "name": "group_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "permission": { + "name": "permission", + "type": "text", + "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": { + "integrationGroupPermissions_integration_id_group_id_permission_pk": { + "columns": ["integration_id", "group_id", "permission"], + "name": "integrationGroupPermissions_integration_id_group_id_permission_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "integration_item": { + "name": "integration_item", + "columns": { + "item_id": { + "name": "item_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "integration_id": { + "name": "integration_id", + "type": "text", + "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": { + "columns": ["item_id", "integration_id"], + "name": "integration_item_item_id_integration_id_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "integrationSecret": { + "name": "integrationSecret", + "columns": { + "kind": { + "name": "kind", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "integration_id": { + "name": "integration_id", + "type": "text", + "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": { + "columns": ["integration_id", "kind"], + "name": "integrationSecret_integration_id_kind_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "integrationUserPermission": { + "name": "integrationUserPermission", + "columns": { + "integration_id": { + "name": "integration_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "permission": { + "name": "permission", + "type": "text", + "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": { + "columns": ["integration_id", "user_id", "permission"], + "name": "integrationUserPermission_integration_id_user_id_permission_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "integration": { + "name": "integration", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "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": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "app_id": { + "name": "app_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "integration__kind_idx": { + "name": "integration__kind_idx", + "columns": ["kind"], + "isUnique": false + } + }, + "foreignKeys": { + "integration_app_id_app_id_fk": { + "name": "integration_app_id_app_id_fk", + "tableFrom": "integration", + "tableTo": "app", + "columnsFrom": ["app_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "invite": { + "name": "invite", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expiration_date": { + "name": "expiration_date", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "creator_id": { + "name": "creator_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "invite_token_unique": { + "name": "invite_token_unique", + "columns": ["token"], + "isUnique": true + } + }, + "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": {}, + "checkConstraints": {} + }, + "item_layout": { + "name": "item_layout", + "columns": { + "item_id": { + "name": "item_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "section_id": { + "name": "section_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "layout_id": { + "name": "layout_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "x_offset": { + "name": "x_offset", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "y_offset": { + "name": "y_offset", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "width": { + "name": "width", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "height": { + "name": "height", + "type": "integer", + "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": { + "columns": ["item_id", "section_id", "layout_id"], + "name": "item_layout_item_id_section_id_layout_id_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "item": { + "name": "item", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "board_id": { + "name": "board_id", + "type": "text", + "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": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "layout": { + "name": "layout", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "board_id": { + "name": "board_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "column_count": { + "name": "column_count", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "breakpoint": { + "name": "breakpoint", + "type": "integer", + "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": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "media": { + "name": "media", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "content": { + "name": "content", + "type": "blob", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "content_type": { + "name": "content_type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "size": { + "name": "size", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(unixepoch())" + }, + "creator_id": { + "name": "creator_id", + "type": "text", + "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": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "onboarding": { + "name": "onboarding", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "step": { + "name": "step", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "previous_step": { + "name": "previous_step", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "search_engine": { + "name": "search_engine", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "icon_url": { + "name": "icon_url", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "short": { + "name": "short", + "type": "text", + "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": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'generic'" + }, + "integration_id": { + "name": "integration_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "search_engine_short_unique": { + "name": "search_engine_short_unique", + "columns": ["short"], + "isUnique": true + } + }, + "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": {}, + "checkConstraints": {} + }, + "section_collapse_state": { + "name": "section_collapse_state", + "columns": { + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "section_id": { + "name": "section_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "collapsed": { + "name": "collapsed", + "type": "integer", + "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": { + "columns": ["user_id", "section_id"], + "name": "section_collapse_state_user_id_section_id_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "section_layout": { + "name": "section_layout", + "columns": { + "section_id": { + "name": "section_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "layout_id": { + "name": "layout_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "parent_section_id": { + "name": "parent_section_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "x_offset": { + "name": "x_offset", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "y_offset": { + "name": "y_offset", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "width": { + "name": "width", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "height": { + "name": "height", + "type": "integer", + "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": { + "columns": ["section_id", "layout_id"], + "name": "section_layout_section_id_layout_id_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "section": { + "name": "section", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "board_id": { + "name": "board_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "kind": { + "name": "kind", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "x_offset": { + "name": "x_offset", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "y_offset": { + "name": "y_offset", + "type": "integer", + "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": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "serverSetting": { + "name": "serverSetting", + "columns": { + "setting_key": { + "name": "setting_key", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'{\"json\": {}}'" + } + }, + "indexes": { + "serverSetting_settingKey_unique": { + "name": "serverSetting_settingKey_unique", + "columns": ["setting_key"], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "session": { + "name": "session", + "columns": { + "session_token": { + "name": "session_token", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires": { + "name": "expires", + "type": "integer", + "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": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "trusted_certificate_hostname": { + "name": "trusted_certificate_hostname", + "columns": { + "hostname": { + "name": "hostname", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "thumbprint": { + "name": "thumbprint", + "type": "text", + "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": { + "columns": ["hostname", "thumbprint"], + "name": "trusted_certificate_hostname_hostname_thumbprint_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "user": { + "name": "user", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "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": "integer", + "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 + }, + "provider": { + "name": "provider", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'credentials'" + }, + "home_board_id": { + "name": "home_board_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "mobile_home_board_id": { + "name": "mobile_home_board_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "default_search_engine_id": { + "name": "default_search_engine_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "open_search_in_new_tab": { + "name": "open_search_in_new_tab", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": true + }, + "color_scheme": { + "name": "color_scheme", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'dark'" + }, + "first_day_of_week": { + "name": "first_day_of_week", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 1 + }, + "ping_icons_enabled": { + "name": "ping_icons_enabled", + "type": "integer", + "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": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "verificationToken": { + "name": "verificationToken", + "columns": { + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires": { + "name": "expires", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "verificationToken_identifier_token_pk": { + "columns": ["identifier", "token"], + "name": "verificationToken_identifier_token_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} diff --git a/packages/db/migrations/sqlite/meta/_journal.json b/packages/db/migrations/sqlite/meta/_journal.json index ef6bdbd49..a5e7c4a39 100644 --- a/packages/db/migrations/sqlite/meta/_journal.json +++ b/packages/db/migrations/sqlite/meta/_journal.json @@ -246,6 +246,13 @@ "when": 1760968503571, "tag": "0034_add_app_reference_to_integration", "breakpoints": true + }, + { + "idx": 35, + "version": "6", + "when": 1775399918831, + "tag": "0035_remove_salt", + "breakpoints": true } ] } diff --git a/packages/db/package.json b/packages/db/package.json index c585cb2e1..2dd2b1070 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -42,35 +42,35 @@ }, "prettier": "@homarr/prettier-config", "dependencies": { - "@auth/core": "^0.41.1", + "@auth/core": "catalog:", "@homarr/common": "workspace:^0.1.0", "@homarr/core": "workspace:^0.1.0", "@homarr/definitions": "workspace:^0.1.0", "@homarr/server-settings": "workspace:^0.1.0", - "@mantine/core": "^8.3.16", - "@paralleldrive/cuid2": "^3.3.0", - "@testcontainers/mysql": "^11.12.0", - "@testcontainers/postgresql": "^11.12.0", - "better-sqlite3": "^12.6.2", - "dotenv": "^17.3.1", - "drizzle-kit": "^0.31.9", - "drizzle-orm": "^0.45.1", - "drizzle-zod": "^0.8.3", - "mysql2": "3.19.1", - "pg": "^8.20.0", - "superjson": "2.2.6" + "@mantine/core": "catalog:", + "@paralleldrive/cuid2": "catalog:", + "@testcontainers/mysql": "catalog:", + "@testcontainers/postgresql": "catalog:", + "better-sqlite3": "catalog:", + "dotenv": "catalog:", + "drizzle-kit": "catalog:", + "drizzle-orm": "catalog:", + "drizzle-zod": "catalog:", + "mysql2": "catalog:", + "pg": "catalog:", + "superjson": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "@types/better-sqlite3": "7.6.13", - "@types/pg": "^8.18.0", - "dotenv-cli": "^11.0.0", - "esbuild": "^0.27.3", - "eslint": "^9.39.4", - "prettier": "^3.8.1", - "tsx": "4.20.4", - "typescript": "^5.9.3" + "@types/better-sqlite3": "catalog:", + "@types/pg": "catalog:", + "dotenv-cli": "catalog:", + "esbuild": "catalog:", + "eslint": "catalog:", + "prettier": "catalog:", + "tsx": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/db/schema/mysql.ts b/packages/db/schema/mysql.ts index edbcec281..719d0a74e 100644 --- a/packages/db/schema/mysql.ts +++ b/packages/db/schema/mysql.ts @@ -51,7 +51,6 @@ export * from "@homarr/core/infrastructure/certificates/hostnames/db/mysql"; export const apiKeys = mysqlTable("apiKey", { id: varchar({ length: 64 }).notNull().primaryKey(), apiKey: text().notNull(), - salt: text().notNull(), userId: varchar({ length: 64 }) .notNull() .references((): AnyMySqlColumn => users.id, { @@ -66,7 +65,6 @@ export const users = mysqlTable("user", { emailVerified: timestamp(), image: text(), password: text(), - salt: text(), provider: varchar({ length: 64 }).$type().default("credentials").notNull(), homeBoardId: varchar({ length: 64 }).references((): AnyMySqlColumn => boards.id, { onDelete: "set null", diff --git a/packages/db/schema/postgresql.ts b/packages/db/schema/postgresql.ts index e41d72f75..7b5a7af54 100644 --- a/packages/db/schema/postgresql.ts +++ b/packages/db/schema/postgresql.ts @@ -50,7 +50,6 @@ export * from "@homarr/core/infrastructure/certificates/hostnames/db/postgresql" export const apiKeys = pgTable("apiKey", { id: varchar({ length: 64 }).notNull().primaryKey(), apiKey: text().notNull(), - salt: text().notNull(), userId: varchar({ length: 64 }) .notNull() .references((): AnyPgColumn => users.id, { @@ -65,7 +64,6 @@ export const users = pgTable("user", { emailVerified: timestamp(), image: text(), password: text(), - salt: text(), provider: varchar({ length: 64 }).$type().default("credentials").notNull(), homeBoardId: varchar({ length: 64 }).references((): AnyPgColumn => boards.id, { onDelete: "set null", diff --git a/packages/db/schema/sqlite.ts b/packages/db/schema/sqlite.ts index 78ec4ac9c..a2485596c 100644 --- a/packages/db/schema/sqlite.ts +++ b/packages/db/schema/sqlite.ts @@ -33,7 +33,6 @@ export * from "@homarr/core/infrastructure/certificates/hostnames/db/sqlite"; export const apiKeys = sqliteTable("apiKey", { id: text().notNull().primaryKey(), apiKey: text().notNull(), - salt: text().notNull(), userId: text() .notNull() .references((): AnySQLiteColumn => users.id, { @@ -48,7 +47,6 @@ export const users = sqliteTable("user", { emailVerified: int({ mode: "timestamp_ms" }), image: text(), password: text(), - salt: text(), provider: text().$type().default("credentials").notNull(), homeBoardId: text().references((): AnySQLiteColumn => boards.id, { onDelete: "set null", diff --git a/packages/definitions/package.json b/packages/definitions/package.json index 850583267..0dee78c65 100644 --- a/packages/definitions/package.json +++ b/packages/definitions/package.json @@ -24,15 +24,15 @@ "prettier": "@homarr/prettier-config", "dependencies": { "@homarr/common": "workspace:^0.1.0", - "fast-xml-parser": "^5.4.2", - "zod": "^4.2.1" + "fast-xml-parser": "catalog:", + "zod": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.39.4", - "tsx": "4.20.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "tsx": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/definitions/src/docs/homarr-docs-sitemap.ts b/packages/definitions/src/docs/homarr-docs-sitemap.ts index 555dad16c..049c8a4af 100644 --- a/packages/definitions/src/docs/homarr-docs-sitemap.ts +++ b/packages/definitions/src/docs/homarr-docs-sitemap.ts @@ -153,6 +153,7 @@ export type HomarrDocumentationPath = | "/docs/getting-started/installation/synology" | "/docs/getting-started/installation/unraid" | "/docs/integrations/adguard-home" + | "/docs/integrations/anchor" | "/docs/integrations/aria2" | "/docs/integrations/codeberg" | "/docs/integrations/dash-dot" @@ -188,9 +189,11 @@ export type HomarrDocumentationPath = | "/docs/integrations/radarr" | "/docs/integrations/readarr" | "/docs/integrations/sabnzbd" + | "/docs/integrations/search-ch" | "/docs/integrations/seerr" | "/docs/integrations/slskd" | "/docs/integrations/sonarr" + | "/docs/integrations/speedtest-tracker" | "/docs/integrations/tdarr" | "/docs/integrations/tracearr" | "/docs/integrations/transmission" @@ -207,6 +210,7 @@ export type HomarrDocumentationPath = | "/docs/management/settings" | "/docs/management/tasks" | "/docs/management/users" + | "/docs/widgets/anchor-note" | "/docs/widgets/app" | "/docs/widgets/bookmarks" | "/docs/widgets/calendar" @@ -235,8 +239,10 @@ export type HomarrDocumentationPath = | "/docs/widgets/rss-feed" | "/docs/widgets/smart-home-entity-state" | "/docs/widgets/smart-home-execute-automation" + | "/docs/widgets/speedtest-tracker" | "/docs/widgets/stock-price" | "/docs/widgets/system-resources" + | "/docs/widgets/timetable" | "/docs/widgets/tracearr" | "/docs/widgets/video" | "/docs/widgets/weather" diff --git a/packages/definitions/src/integration.ts b/packages/definitions/src/integration.ts index bbcfcde5f..006bc9ab7 100644 --- a/packages/definitions/src/integration.ts +++ b/packages/definitions/src/integration.ts @@ -217,7 +217,7 @@ export const integrationDefs = { name: "Nextcloud", secretKinds: [["username", "password"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/nextcloud.svg", - category: ["calendar"], + category: ["calendar", "notifications"], documentationUrl: createDocumentationLink("/docs/integrations/nextcloud"), }, unifiController: { @@ -312,6 +312,13 @@ export const integrationDefs = { category: ["calendar"], documentationUrl: createDocumentationLink("/docs/integrations/ical"), }, + anchor: { + name: "Anchor", + secretKinds: [["apiKey"]], + iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/anchor.svg", + category: ["notes"], + documentationUrl: createDocumentationLink("/docs/integrations/anchor"), + }, truenas: { name: "TrueNAS", secretKinds: [["username", "password"]], @@ -334,6 +341,14 @@ export const integrationDefs = { // @ts-expect-error - docs page will be created when integration is merged documentationUrl: createDocumentationLink("/docs/integrations/coolify"), }, + searchCh: { + name: "Search.ch", + secretKinds: [[]], + iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/search-ch.png", + defaultUrl: "https://search.ch", + category: ["timetable"], + documentationUrl: createDocumentationLink("/docs/integrations/search-ch"), + }, immich: { name: "Immich", secretKinds: [["apiKey"]], @@ -348,6 +363,13 @@ export const integrationDefs = { category: ["mediaMonitoring"], documentationUrl: createDocumentationLink("/docs/integrations/tracearr"), }, + speedtestTracker: { + name: "Speedtest Tracker", + secretKinds: [["apiKey"]], + iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/speedtest-tracker.png", + category: ["speedtest"], + documentationUrl: createDocumentationLink("/docs/integrations/speedtest-tracker"), + }, // 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", @@ -434,8 +456,11 @@ export const integrationCategories = [ "releasesProvider", "notifications", "firewall", + "timetable", "photoService", + "notes", "mediaMonitoring", + "speedtest", ] as const; export type IntegrationCategory = (typeof integrationCategories)[number]; diff --git a/packages/definitions/src/widget.ts b/packages/definitions/src/widget.ts index cf94bd3fa..b246b32ea 100644 --- a/packages/definitions/src/widget.ts +++ b/packages/definitions/src/widget.ts @@ -5,6 +5,7 @@ export const widgetKinds = [ "iframe", "video", "notebook", + "anchorNote", "dnsHoleSummary", "dnsHoleControls", "smartHome-entityState", @@ -31,8 +32,10 @@ export const widgetKinds = [ "systemResources", "coolify", "systemDisks", + "timetable", "immich-serverStats", "immich-albumCarousel", "tracearr", + "speedtestTracker", ] as const; export type WidgetKind = (typeof widgetKinds)[number]; diff --git a/packages/docker/package.json b/packages/docker/package.json index 4873adfcc..f52507a38 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.9" + "dockerode": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "@types/dockerode": "^4.0.1", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "@types/dockerode": "catalog:", + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/form/package.json b/packages/form/package.json index 418aa9f43..fcb7754ea 100644 --- a/packages/form/package.json +++ b/packages/form/package.json @@ -26,15 +26,15 @@ "@homarr/common": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", - "@mantine/form": "^8.3.16", - "mantine-form-zod-resolver": "^1.3.0", - "zod": "^4.2.1" + "@mantine/form": "catalog:", + "mantine-form-zod-resolver": "catalog:", + "zod": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/forms-collection/package.json b/packages/forms-collection/package.json index 74d735a03..720ec39c8 100644 --- a/packages/forms-collection/package.json +++ b/packages/forms-collection/package.json @@ -30,15 +30,15 @@ "@homarr/translation": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", - "@mantine/core": "^8.3.16", - "react": "19.2.4", - "zod": "^4.2.1" + "@mantine/core": "catalog:", + "react": "catalog:", + "zod": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/icons/package.json b/packages/icons/package.json index a15db8e85..1025cb8bf 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.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/image-proxy/package.json b/packages/image-proxy/package.json index 796f3ce91..2cebf6a02 100644 --- a/packages/image-proxy/package.json +++ b/packages/image-proxy/package.json @@ -25,14 +25,14 @@ "@homarr/common": "workspace:^0.1.0", "@homarr/core": "workspace:^0.1.0", "@homarr/redis": "workspace:^0.1.0", - "bcrypt": "^6.0.0" + "bcrypt": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "@types/bcrypt": "6.0.0", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "@types/bcrypt": "catalog:", + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/integrations/package.json b/packages/integrations/package.json index b08599aa3..9811d05da 100644 --- a/packages/integrations/package.json +++ b/packages/integrations/package.json @@ -25,39 +25,39 @@ }, "prettier": "@homarr/prettier-config", "dependencies": { - "@ctrl/deluge": "^7.5.2", - "@ctrl/qbittorrent": "^9.11.2", - "@ctrl/transmission": "^7.4.0", - "@gitbeaker/rest": "^43.8.0", + "@ctrl/deluge": "catalog:", + "@ctrl/qbittorrent": "catalog:", + "@ctrl/transmission": "catalog:", + "@gitbeaker/rest": "catalog:", "@homarr/common": "workspace:^0.1.0", "@homarr/core": "workspace:^0.1.0", "@homarr/db": "workspace:^0.1.0", "@homarr/definitions": "workspace:^0.1.0", "@homarr/image-proxy": "workspace:^0.1.0", - "@homarr/node-unifi": "^2.6.0", + "@homarr/node-unifi": "catalog:", "@homarr/redis": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", - "@immich/sdk": "^2.5.6", - "@jellyfin/sdk": "^0.13.0", - "@octokit/auth-app": "^8.2.0", - "ical.js": "^2.2.1", - "maria2": "^0.4.1", - "node-ical": "^0.22.1", - "octokit": "^5.0.5", - "proxmox-api": "1.1.1", - "tsdav": "^2.1.8", - "undici": "7.18.2", - "xml2js": "^0.6.2", - "zod": "^4.2.1" + "@immich/sdk": "catalog:", + "@jellyfin/sdk": "catalog:", + "@octokit/auth-app": "catalog:", + "ical.js": "catalog:", + "maria2": "catalog:", + "octokit": "catalog:", + "proxmox-api": "catalog:", + "timezones-ical-library": "catalog:", + "tsdav": "catalog:", + "undici": "catalog:", + "xml2js": "catalog:", + "zod": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "@types/node-unifi": "^2.5.1", - "@types/xml2js": "^0.4.14", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "@types/node-unifi": "catalog:", + "@types/xml2js": "catalog:", + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/integrations/src/anchor/anchor-integration.ts b/packages/integrations/src/anchor/anchor-integration.ts new file mode 100644 index 000000000..5db4a024c --- /dev/null +++ b/packages/integrations/src/anchor/anchor-integration.ts @@ -0,0 +1,118 @@ +import type { fetch as undiciFetch } from "undici"; + +import { ResponseError } from "@homarr/common/server"; +import { fetchWithTrustedCertificatesAsync } from "@homarr/core/infrastructure/http"; +import { createLogger } from "@homarr/core/infrastructure/logs"; + +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 { anchorNoteSchema, anchorNoteSummaryListSchema } from "./anchor-types"; +import type { AnchorNote, AnchorNotesListInput, AnchorNoteSummary, AnchorNoteUpdateInput } from "./anchor-types"; + +const logger = createLogger({ module: "anchorIntegration" }); + +export class AnchorIntegration extends Integration { + protected async testingAsync(input: IntegrationTestingInput): Promise { + const response = await input.fetchAsync(this.url("/api/notes", { limit: 1 }), { + headers: { + Authorization: `Bearer ${this.getSecretValue("apiKey")}`, + }, + }); + + if (!response.ok) return TestConnectionError.StatusResult(response); + + anchorNoteSummaryListSchema.parse(await response.json()); + return { success: true }; + } + + public async listNotesAsync(input: AnchorNotesListInput = {}): Promise { + const queryParams = buildListQuery(input); + const response = await this.requestAsync(fetchWithTrustedCertificatesAsync, "/api/notes", { + queryParams, + }); + return anchorNoteSummaryListSchema.parse(response); + } + + public async getNoteAsync(noteId: string): Promise { + const response = await this.requestAsync(fetchWithTrustedCertificatesAsync, `/api/notes/${noteId}`); + return anchorNoteSchema.parse(response); + } + + public async updateNoteAsync(input: AnchorNoteUpdateInput): Promise { + const { noteId, ...updateData } = input; + const response = await this.requestAsync(fetchWithTrustedCertificatesAsync, `/api/notes/${noteId}`, { + method: "PATCH", + body: updateData, + }); + if (response === null) { + return this.getNoteAsync(noteId); + } + return anchorNoteSchema.parse(response); + } + + private async requestAsync( + fetchAsync: typeof undiciFetch, + path: `/${string}`, + options?: { + queryParams?: Record; + method?: string; + body?: unknown; + }, + ): Promise { + const url = this.url(path, options?.queryParams); + const headers: Record = { + Authorization: `Bearer ${this.getSecretValue("apiKey")}`, + }; + + if (options?.body !== undefined) { + headers["Content-Type"] = "application/json"; + } + + const response = await fetchAsync(url, { + method: options?.method ?? "GET", + headers, + body: options?.body !== undefined ? JSON.stringify(options.body) : undefined, + }); + + if (!response.ok) { + let errorBody: string | null = null; + try { + errorBody = await response.text(); + } catch { + errorBody = null; + } + logger.warn("Anchor request failed", { + statusCode: response.status, + url, + errorBody: errorBody ? errorBody.slice(0, 200) : null, + }); + throw new ResponseError(response); + } + + if (response.status === 204) { + return null; + } + + return await response.json(); + } +} + +const buildListQuery = (input: AnchorNotesListInput) => { + const queryParams: Record = {}; + + if (input.search?.trim()) { + queryParams.search = input.search.trim(); + } + + if (input.tagId?.trim()) { + queryParams.tagId = input.tagId.trim(); + } + + if (typeof input.limit === "number") { + queryParams.limit = input.limit.toString(); + } + + return Object.keys(queryParams).length > 0 ? queryParams : undefined; +}; diff --git a/packages/integrations/src/anchor/anchor-types.ts b/packages/integrations/src/anchor/anchor-types.ts new file mode 100644 index 000000000..547969cbb --- /dev/null +++ b/packages/integrations/src/anchor/anchor-types.ts @@ -0,0 +1,43 @@ +import { z } from "zod/v4"; + +export const anchorNotesListInputSchema = z.object({ + search: z.string().optional(), + tagId: z.string().optional(), + limit: z.number().min(1).max(200).optional(), +}); +export type AnchorNotesListInput = z.infer; + +export const anchorNotePermissionSchema = z.enum(["owner", "viewer", "editor"]); +export type AnchorNotePermission = z.infer; + +export const anchorNoteSummarySchema = z.object({ + id: z.string(), + title: z.string(), + updatedAt: z.string(), + isPinned: z.boolean(), + tagIds: z.array(z.string()), + permission: anchorNotePermissionSchema, +}); +export type AnchorNoteSummary = z.infer; + +export const anchorNoteSchema = anchorNoteSummarySchema.extend({ + content: z.string().nullable().optional(), + createdAt: z.string(), + isArchived: z.boolean(), + background: z.string().nullable().optional(), + userId: z.string(), +}); +export type AnchorNote = z.infer; + +export const anchorNoteSummaryListSchema = z.array(anchorNoteSummarySchema); + +export const anchorNoteUpdateInputSchema = z + .object({ + noteId: z.string(), + title: z.string().optional(), + content: z.string().optional(), + }) + .refine((value) => value.title !== undefined || value.content !== undefined, { + message: "At least one field to update must be provided", + }); +export type AnchorNoteUpdateInput = z.infer; diff --git a/packages/integrations/src/base/creator.ts b/packages/integrations/src/base/creator.ts index b35fa5f63..5748bdd96 100644 --- a/packages/integrations/src/base/creator.ts +++ b/packages/integrations/src/base/creator.ts @@ -1,6 +1,7 @@ import type { IntegrationKind } from "@homarr/definitions"; import { AdGuardHomeIntegration } from "../adguard-home/adguard-home-integration"; +import { AnchorIntegration } from "../anchor/anchor-integration"; import { CodebergIntegration } from "../codeberg/codeberg-integration"; import { CoolifyIntegration } from "../coolify/coolify-integration"; import { DashDotIntegration } from "../dashdot/dashdot-integration"; @@ -40,7 +41,9 @@ 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 { SearchChIntegration } from "../search-ch/search-ch-integration"; import { SeerrIntegration } from "../seerr/seerr-integration"; +import { SpeedtestTrackerIntegration } from "../speedtest-tracker/speedtest-tracker-integration"; import { TracearrIntegration } from "../tracearr/tracearr-integration"; import { TrueNasIntegration } from "../truenas/truenas-integration"; import { UnifiControllerIntegration } from "../unifi-controller/unifi-controller-integration"; @@ -70,6 +73,7 @@ type IntegrationInstance = new (integration: IntegrationInput) => Integration; // factories are an array, to differentiate in js between class constructors and functions export const integrationCreators = { + anchor: AnchorIntegration, piHole: [createPiHoleIntegrationAsync], adGuardHome: AdGuardHomeIntegration, homeAssistant: HomeAssistantIntegration, @@ -114,7 +118,9 @@ export const integrationCreators = { coolify: CoolifyIntegration, tracearr: TracearrIntegration, glances: GlancesIntegration, + searchCh: SearchChIntegration, immich: ImmichIntegration, + speedtestTracker: SpeedtestTrackerIntegration, } satisfies Record Promise]>; type IntegrationInstanceOfKind = { diff --git a/packages/integrations/src/dashdot/dashdot-integration.ts b/packages/integrations/src/dashdot/dashdot-integration.ts index fb5d9070e..3c835a302 100644 --- a/packages/integrations/src/dashdot/dashdot-integration.ts +++ b/packages/integrations/src/dashdot/dashdot-integration.ts @@ -33,6 +33,7 @@ export class DashDotIntegration extends Integration implements ISystemHealthMoni const memoryLoad = await this.getCurrentMemoryLoadAsync(); const storageLoad = await this.getCurrentStorageLoadAsync(); const networkLoad = await this.getCurrentNetworkLoadAsync(); + const gpuLoad = await this.getCurrentGpuLoadAsync(); const channel = this.getChannel(); const history = await channel.getSliceUntilTimeAsync(dayjs().subtract(15, "minutes").toDate()); @@ -56,6 +57,14 @@ export class DashDotIntegration extends Integration implements ISystemHealthMoni availablePkgUpdates: 0, rebootRequired: false, smart: [], // API endpoint does not provide S.M.A.R.T data. + gpu: gpuLoad.map((gpu, index) => ({ + gpuId: `gpu-${index}`, + name: info.gpuNames[index] ?? `GPU ${index}`, + memoryUtilization: gpu.memory ?? 0, + processorUtilization: gpu.load ?? 0, + temperature: null, + fanSpeed: null, + })), uptime: info.uptime, version: `${info.operatingSystemVersion}`, loadAverage: { @@ -76,6 +85,7 @@ export class DashDotIntegration extends Integration implements ISystemHealthMoni cpuModel: serverInfo.cpu.model, operatingSystemVersion: `${serverInfo.os.distro} ${serverInfo.os.release} (${serverInfo.os.kernel})`, uptime: serverInfo.os.uptime, + gpuNames: serverInfo.gpu.layout.map((gpu) => gpu.brand), }; } @@ -150,6 +160,17 @@ export class DashDotIntegration extends Integration implements ISystemHealthMoni return await networkLoadApi.parseAsync(JSON.parse(result)); } + private async getCurrentGpuLoadAsync() { + try { + const response = await fetchWithTrustedCertificatesAsync(this.url("/load/gpu")); + const result = await response.json(); + const data = await gpuLoadApi.parseAsync(result); + return data.layout; + } catch { + return []; + } + } + private getChannel() { return createChannelEventHistoryOld>( `integration:${this.integration.id}:history:cpu`, @@ -198,6 +219,25 @@ const internalServerInfoApi = z.object({ ), }), ), + gpu: z.object({ + layout: z + .array( + z.object({ + brand: z.string(), + model: z.string().optional(), + }), + ) + .default([]), + }), }); const cpuLoadPerCoreApiList = z.array(cpuLoadPerCoreApi); + +const gpuLoadApi = z.object({ + layout: z.array( + z.object({ + load: z.number().min(0).optional(), + memory: z.number().min(0).optional(), + }), + ), +}); diff --git a/packages/integrations/src/glances/glances-integration.ts b/packages/integrations/src/glances/glances-integration.ts index 2d1f8601f..7b6ae3b79 100644 --- a/packages/integrations/src/glances/glances-integration.ts +++ b/packages/integrations/src/glances/glances-integration.ts @@ -59,6 +59,14 @@ export class GlancesIntegration extends Integration implements ISystemHealthMoni loadAverage: null, smart: [], cpuTemp: undefined, + gpu: stats.gpu.map((gpu) => ({ + gpuId: gpu.gpu_id, + name: gpu.name, + memoryUtilization: gpu.mem ?? 0, + processorUtilization: gpu.proc ?? 0, + temperature: gpu.temperature ?? null, + fanSpeed: gpu.fan_speed ?? null, + })), }; } @@ -150,4 +158,16 @@ const allSchema = z.object({ quicklook: z.object({ cpu_name: z.string(), }), + gpu: z + .array( + z.object({ + gpu_id: z.string(), + name: z.string(), + mem: z.number().nullable().optional(), + proc: z.number().nullable().optional(), + temperature: z.number().nullable().optional(), + fan_speed: z.number().nullable().optional(), + }), + ) + .default([]), }); diff --git a/packages/integrations/src/immich/immich-integration.ts b/packages/integrations/src/immich/immich-integration.ts index 21019e4b7..9e13ff953 100644 --- a/packages/integrations/src/immich/immich-integration.ts +++ b/packages/integrations/src/immich/immich-integration.ts @@ -1,5 +1,6 @@ import { getAlbumInfo, getAllAlbums, getMyUser, getServerStatistics, init, searchUsers } from "@immich/sdk"; +import { fetchWithTrustedCertificatesAsync } from "@homarr/core/infrastructure/http"; import { createLogger } from "@homarr/core/infrastructure/logs"; import { ImageProxy } from "@homarr/image-proxy"; @@ -41,7 +42,10 @@ export class ImmichIntegration extends Integration { public async getServerStatsAsync(): Promise { this.initClient(); - const [statistics, users] = await Promise.all([getServerStatistics(), searchUsers()]); + const [statistics, users] = await Promise.all([ + getServerStatistics(this.getRequestOptions()), + searchUsers(this.getRequestOptions()), + ]); return { photoCount: statistics.photos, userCount: users.length, @@ -52,7 +56,7 @@ export class ImmichIntegration extends Integration { public async getAlbumAsync(albumId: string): Promise { this.initClient(); - const album = await getAlbumInfo({ id: albumId }); + const album = await getAlbumInfo({ id: albumId }, this.getRequestOptions()); const imageProxy = new ImageProxy(); return { albumName: album.albumName, @@ -89,17 +93,24 @@ export class ImmichIntegration extends Integration { }[] > { this.initClient(); - const albums = await getAllAlbums({}); + const albums = await getAllAlbums({}, this.getRequestOptions()); return albums.map((album) => ({ id: album.id, albumName: album.albumName, assetCount: album.assetCount })); } - protected async testingAsync(_: IntegrationTestingInput): Promise { + protected async testingAsync(input: IntegrationTestingInput): Promise { this.initClient(); - const user = await getMyUser(); + const user = await getMyUser(this.getRequestOptions(input.fetchAsync)); logger.debug(`Logged in as ${user.name} (${user.id})`); return { success: true }; } + private getRequestOptions(fetchAsync = fetchWithTrustedCertificatesAsync) { + return { + // Undici and node types are not the same + fetch: fetchAsync as unknown as typeof fetch, + }; + } + /** * Sets the credentials and prepares the client for calls. * Must be called before any other functions. diff --git a/packages/integrations/src/index.ts b/packages/integrations/src/index.ts index 3514e022b..2ac590bdb 100644 --- a/packages/integrations/src/index.ts +++ b/packages/integrations/src/index.ts @@ -1,5 +1,6 @@ // General integrations export { AdGuardHomeIntegration } from "./adguard-home/adguard-home-integration"; +export { AnchorIntegration } from "./anchor/anchor-integration"; export { Aria2Integration } from "./download-client/aria2/aria2-integration"; export { DelugeIntegration } from "./download-client/deluge/deluge-integration"; export { NzbGetIntegration } from "./download-client/nzbget/nzbget-integration"; @@ -31,6 +32,7 @@ export { ICalIntegration } from "./ical/ical-integration"; export { CoolifyIntegration } from "./coolify/coolify-integration"; export { ImmichIntegration } from "./immich/immich-integration"; export { TracearrIntegration } from "./tracearr/tracearr-integration"; +export { SpeedtestTrackerIntegration } from "./speedtest-tracker/speedtest-tracker-integration"; // Types export type { IntegrationInput } from "./base/integration"; @@ -57,9 +59,19 @@ export type { export type { ReleasesRepository, ReleaseResponse } from "./interfaces/releases-providers/releases-providers-types"; export type { Notification } from "./interfaces/notifications/notification-types"; export type { ImmichServerStats, ImmichAlbum, ImmichAsset } from "./immich/immich-integration"; +export type { + AnchorNote, + AnchorNotePermission, + AnchorNoteUpdateInput, + AnchorNotesListInput, + AnchorNoteSummary, +} from "./anchor/anchor-types"; export type { TracearrDashboardData } from "./tracearr/tracearr-types"; +export type { SpeedtestTrackerDashboardData } from "./speedtest-tracker/speedtest-tracker-types"; // Schemas +export { anchorNotesListInputSchema } from "./anchor/anchor-types"; +export { anchorNoteUpdateInputSchema } from "./anchor/anchor-types"; export { downloadClientItemSchema } from "./interfaces/downloads/download-client-items"; // Helpers 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 08b5b4100..731f1c577 100644 --- a/packages/integrations/src/interfaces/health-monitoring/health-monitoring-types.ts +++ b/packages/integrations/src/interfaces/health-monitoring/health-monitoring-types.ts @@ -31,6 +31,14 @@ export interface SystemHealthMonitoring { overallStatus: string; healthy: boolean; }[]; + gpu: { + gpuId: string; + name: string; + memoryUtilization: number; + processorUtilization: number; + temperature: number | null; + fanSpeed: number | null; + }[]; } // TODO: in the future decouple this from the Proxmox integration diff --git a/packages/integrations/src/interfaces/timetable/timetable-integration.ts b/packages/integrations/src/interfaces/timetable/timetable-integration.ts new file mode 100644 index 000000000..74e9d3c02 --- /dev/null +++ b/packages/integrations/src/interfaces/timetable/timetable-integration.ts @@ -0,0 +1,6 @@ +import type { Station, Timetable, TimetableOptions } from "./timetable-types"; + +export interface TimetableIntegration { + searchStationsAsync(query: string): Promise; + getTimetableAsync(options: TimetableOptions): Promise; +} diff --git a/packages/integrations/src/interfaces/timetable/timetable-types.ts b/packages/integrations/src/interfaces/timetable/timetable-types.ts new file mode 100644 index 000000000..72350b5a3 --- /dev/null +++ b/packages/integrations/src/interfaces/timetable/timetable-types.ts @@ -0,0 +1,33 @@ +import z from "zod"; + +export interface Station { + id: string; + name: string; +} + +export const timetableOptionsSchema = z.object({ + stationId: z.string(), + limit: z.number().default(10), +}); + +export type TimetableOptions = z.infer; + +export interface TimetableEntry { + timestamp: Date; + delay: number; + line: { + name: string; + color: string | null; + } | null; + location: string; + platform: { + name: string; + hasChanged: boolean; + } | null; +} + +export interface Timetable { + stationId: string; + timestamp: Date; + entries: TimetableEntry[]; +} diff --git a/packages/integrations/src/mock/data/system-health-monitoring.ts b/packages/integrations/src/mock/data/system-health-monitoring.ts index bafccd7c5..e209ff8c7 100644 --- a/packages/integrations/src/mock/data/system-health-monitoring.ts +++ b/packages/integrations/src/mock/data/system-health-monitoring.ts @@ -36,6 +36,16 @@ export class SystemHealthMonitoringMockService implements ISystemHealthMonitorin healthy: true, }, ], + gpu: [ + { + gpuId: "mock0", + name: "Mock GPU RTX 4090", + memoryUtilization: Math.floor(Math.random() * 100), + processorUtilization: Math.floor(Math.random() * 100), + temperature: Math.floor(Math.random() * 90), + fanSpeed: Math.floor(Math.random() * 2000), + }, + ], }); } } diff --git a/packages/integrations/src/nextcloud/nextcloud.integration.ts b/packages/integrations/src/nextcloud/nextcloud.integration.ts index aa57f480f..f14bd11d7 100644 --- a/packages/integrations/src/nextcloud/nextcloud.integration.ts +++ b/packages/integrations/src/nextcloud/nextcloud.integration.ts @@ -2,11 +2,14 @@ import type { Agent } from "https"; import dayjs from "dayjs"; import timezone from "dayjs/plugin/timezone"; import utc from "dayjs/plugin/utc"; +import ICAL from "ical.js"; import type { RequestInit as NodeFetchRequestInit } from "node-fetch"; -import * as ical from "node-ical"; +import { tzlib_get_ical_block, tzlib_get_timezones } from "timezones-ical-library"; import { DAVClient } from "tsdav"; +import { z } from "zod"; -import { createHttpsAgentAsync } from "@homarr/core/infrastructure/http"; +import { ResponseError } from "@homarr/common/server"; +import { createHttpsAgentAsync, fetchWithTrustedCertificatesAsync } from "@homarr/core/infrastructure/http"; import { createLogger } from "@homarr/core/infrastructure/logs"; import { HandleIntegrationErrors } from "../base/errors/decorator"; @@ -16,6 +19,35 @@ import { Integration } from "../base/integration"; import type { TestingResult } from "../base/test-connection/test-connection-service"; import type { ICalendarIntegration } from "../interfaces/calendar/calendar-integration"; import type { CalendarEvent } from "../interfaces/calendar/calendar-types"; +import type { Notification } from "../interfaces/notifications/notification-types"; +import type { INotificationsIntegration } from "../interfaces/notifications/notifications-integration"; + +// Register all existing timezones +if (ICAL.TimezoneService.count === 0) { + const timezones = tzlib_get_timezones() as string[]; + for (const tzid of timezones) { + ICAL.TimezoneService.register( + new ICAL.Timezone({ + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-non-null-assertion + component: new ICAL.Component(ICAL.parse((tzlib_get_ical_block(tzid) as string[])[0]!)), + tzid, + }), + ); + } +} + +const notificationSchema = z.object({ + ocs: z.object({ + data: z.array( + z.object({ + notification_id: z.number(), + datetime: z.string(), + subject: z.string(), + message: z.string(), + }), + ), + }), +}); const logger = createLogger({ module: "nextcloudIntegration" }); @@ -23,7 +55,7 @@ dayjs.extend(utc); dayjs.extend(timezone); @HandleIntegrationErrors([integrationTsdavHttpErrorHandler]) -export class NextcloudIntegration extends Integration implements ICalendarIntegration { +export class NextcloudIntegration extends Integration implements ICalendarIntegration, INotificationsIntegration { protected async testingAsync(input: IntegrationTestingInput): Promise { const client = await this.createCalendarClientAsync(await createHttpsAgentAsync(input.options)); await client.login(); @@ -51,42 +83,70 @@ export class NextcloudIntegration extends Integration implements ICalendarIntegr return calendarEvents .map((event) => { - // @ts-expect-error the typescript definitions for this package are wrong - // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access - const icalData = ical.default.parseICS(event.data) as ical.CalendarResponse; - const veventObject = Object.values(icalData).find((data) => data.type === "VEVENT"); - - if (!veventObject) { - throw new Error(`Invalid event data object: ${JSON.stringify(event.data)}. Unable to process the calendar.`); + if (typeof event.data !== "string") { + return []; } + const comp = ICAL.Component.fromString(event.data); + const veventComponent = comp.getFirstSubcomponent("vevent"); + + if (!veventComponent) { + return []; + } + + const veventObject = new ICAL.Event(veventComponent); logger.debug(`Converting VEVENT event to ${event.etag} from Nextcloud: ${JSON.stringify(veventObject)}`); const eventUrlWithoutHost = new URL(event.url).pathname; const eventSlug = Buffer.from(eventUrlWithoutHost).toString("base64url"); - const startDates = veventObject.rrule ? veventObject.rrule.between(start, end) : [veventObject.start]; + const durationMs = veventObject.duration.toSeconds() * 1000; - const durationMs = veventObject.end.getTime() - veventObject.start.getTime(); + // Handle recurring events + let startDates: Date[]; + if (veventObject.isRecurring()) { + const iterator = veventObject.iterator(); + startDates = []; + + // Iterate through occurrences within the time range + let next: ICAL.Time | undefined; + // next actually returns undefined when there are no more occurrences + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + while ((next = iterator.next())) { + const nextStartDate = next.isDate + ? next.toJSDate() + : next.convertToZone(ICAL.Timezone.utcTimezone).toJSDate(); + if (nextStartDate > end) break; + const nextEndDate = new Date(nextStartDate.getTime() + durationMs); + if (nextEndDate < start) continue; + + startDates.push(nextStartDate); + } + } else { + startDates = [ + veventObject.startDate.isDate + ? veventObject.startDate.toJSDate() + : veventObject.startDate.convertToZone(ICAL.Timezone.utcTimezone).toJSDate(), + ]; + } return startDates.map((startDate) => { - const timezoneOffsetMinutes = veventObject.rrule?.origOptions.tzid - ? dayjs(startDate).tz(veventObject.rrule.origOptions.tzid).utcOffset() - : 0; - const utcStartDate = new Date(startDate.getTime() - timezoneOffsetMinutes * 60 * 1000); - const endDate = new Date(utcStartDate.getTime() + durationMs); - const dateInMillis = utcStartDate.valueOf(); + const endDate = new Date(startDate.getTime() + durationMs); + const dateInMillis = startDate.valueOf(); + + // Get color property from the component + const colorProperty = veventComponent.getFirstProperty("color"); + const color = colorProperty?.getFirstValue() as string | undefined; return { title: veventObject.summary, subTitle: null, - description: veventObject.description, - startDate: utcStartDate, + description: veventObject.description || null, + startDate, endDate, image: null, location: veventObject.location || null, - indicatorColor: - "color" in veventObject && typeof veventObject.color === "string" ? veventObject.color : "#ff8600", + indicatorColor: color ?? "#ff8600", links: [ { href: this.externalUrl( @@ -104,6 +164,29 @@ export class NextcloudIntegration extends Integration implements ICalendarIntegr .flat(); } + public async getNotificationsAsync(): Promise { + const url = this.url("/ocs/v2.php/apps/notifications/api/v2/notifications", { format: "json" }); + const response = await fetchWithTrustedCertificatesAsync(url, { + headers: { + Authorization: `Basic ${Buffer.from( + `${this.getSecretValue("username")}:${this.getSecretValue("password")}`, + ).toString("base64")}`, + "OCS-APIRequest": "true", + }, + }); + + if (!response.ok) throw new ResponseError(response); + + const json = notificationSchema.parse(await response.json()); + + return json.ocs.data.map((notification) => ({ + id: String(notification.notification_id), + time: new Date(notification.datetime), + title: notification.subject, + body: notification.message, + })); + } + private async createCalendarClientAsync(agent?: Agent) { return new DAVClient({ serverUrl: this.integration.url, diff --git a/packages/integrations/src/openmediavault/openmediavault-integration.ts b/packages/integrations/src/openmediavault/openmediavault-integration.ts index 6449ee48c..382f211e6 100644 --- a/packages/integrations/src/openmediavault/openmediavault-integration.ts +++ b/packages/integrations/src/openmediavault/openmediavault-integration.ts @@ -86,6 +86,7 @@ export class OpenMediaVaultIntegration extends Integration implements ISystemHea cpuTemp: cpuTempResult.success ? cpuTempResult.data.response.cputemp : undefined, fileSystem, smart, + gpu: [], // OpenMediaVault does not expose GPU monitoring via its RPC API. }; } diff --git a/packages/integrations/src/search-ch/search-ch-integration.ts b/packages/integrations/src/search-ch/search-ch-integration.ts new file mode 100644 index 000000000..cbaf8e80d --- /dev/null +++ b/packages/integrations/src/search-ch/search-ch-integration.ts @@ -0,0 +1,141 @@ +import z from "zod"; + +import { ResponseError } from "@homarr/common/server"; +import { fetchWithTrustedCertificatesAsync } from "@homarr/core/infrastructure/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 { TimetableIntegration } from "../interfaces/timetable/timetable-integration"; +import type { Station, Timetable, TimetableOptions } from "../interfaces/timetable/timetable-types"; + +const supportedStationTypes = ["bus", "tram", "train", "ship", "cablecar", "funicular", "chairlift"]; + +export class SearchChIntegration extends Integration implements TimetableIntegration { + protected async testingAsync(input: IntegrationTestingInput): Promise { + const response = await input.fetchAsync(this.url("/timetable/api/completion.json", { term: "Zürich" })); + + if (!response.ok) { + return TestConnectionError.StatusResult(response); + } + + return { + success: true, + }; + } + + /** + * Searches for stations matching the given query. + * @param query The search query for station names. + * @returns A list of stations matching the search query. + * @docs https://search.ch/fahrplan/api/help + */ + public async searchStationsAsync(query: string): Promise { + const response = await fetchWithTrustedCertificatesAsync( + this.url("/timetable/api/completion.json", { + term: query, + show_ids: 1, + nofavorites: 1, + }), + ); + + if (!response.ok) { + throw new ResponseError(response); + } + + const data = await searchSchema.parseAsync(await response.json()); + + return ( + data + // Remove completions like addresses, we only want stations. + .filter((item) => supportedStationTypes.some((type) => item.iconclass.endsWith(type))) + .map((item) => (item.id !== undefined ? { id: item.id, name: item.label } : null)) + .filter((item) => item !== null) + ); + } + + /** + * Gets the departure timetable for a given station. + * @param options Timetable options including station ID and limit. + * @returns timetable for the given station. + * @docs https://search.ch/fahrplan/api/help + */ + public async getTimetableAsync(options: TimetableOptions): Promise { + const now = new Date(); + // The following format is used [01.01.2000, 23:59:00]. The API allows usage of DD.MM.YYYY format and HH:mm format + const [date, time] = now.toLocaleString("en-CH", { timeZone: "Europe/Zurich" }).split(", ") as [string, string]; + + const response = await fetchWithTrustedCertificatesAsync( + this.url("/timetable/api/stationboard.json", { + stop: options.stationId, + limit: options.limit, + show_delays: 1, + show_tracks: 1, + date, + time: time.substring(0, 5), // Only keep the HH:mm part of the time, as that's what the API expects + }), + ); + + if (!response.ok) { + throw new ResponseError(response); + } + + const data = await timetableSchema.parseAsync(await response.json()); + + return { + stationId: options.stationId, + timestamp: now, + entries: data.connections.map((connection) => { + // Color is in format A35~F10~ for foreground and background color. Some only have ~~ and therefore no color + const color = connection.color.split("~")[0]; + + return { + timestamp: connection.time, + line: connection.line + ? { + name: connection.line, + color: color && color.length >= 1 ? `#${color}` : null, + } + : null, + location: connection.terminal.name, + delay: connection.dep_delay, + platform: connection.track + ? { + // If the track name contains "!", it indicates a change in the track + // so we remove the "!" from the name and set hasChanged to true + name: connection.track.replace("!", ""), + hasChanged: connection.track.includes("!"), + } + : null, + }; + }), + }; + } +} + +const timetableSchema = z.object({ + connections: z.array( + z.object({ + time: z.string().transform((str) => new Date(str)), + line: z.string().optional(), + color: z.string(), + terminal: z.object({ + name: z.string(), + }), + track: z.string().optional(), + dep_delay: z + .string() + .optional() + .transform((str) => (str ? parseInt(str) : 0)), + }), + ), +}); + +const searchSchema = z.array( + z.object({ + id: z.string().optional(), + label: z.string(), + iconclass: z.string(), // This is in format sl-icon-type-{type} + }), +); diff --git a/packages/integrations/src/speedtest-tracker/speedtest-tracker-integration.ts b/packages/integrations/src/speedtest-tracker/speedtest-tracker-integration.ts new file mode 100644 index 000000000..80517c69e --- /dev/null +++ b/packages/integrations/src/speedtest-tracker/speedtest-tracker-integration.ts @@ -0,0 +1,98 @@ +import { ResponseError } from "@homarr/common/server"; +import { fetchWithTrustedCertificatesAsync } from "@homarr/core/infrastructure/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 { + speedtestTrackerLatestResultEnvelopeSchema, + speedtestTrackerResultsCollectionSchema, + speedtestTrackerStatsEnvelopeSchema, +} from "./speedtest-tracker-types"; +import type { + SpeedtestTrackerDashboardData, + SpeedtestTrackerResult, + SpeedtestTrackerResultsCollection, + SpeedtestTrackerStats, +} from "./speedtest-tracker-types"; + +export class SpeedtestTrackerIntegration extends Integration { + protected async testingAsync(input: IntegrationTestingInput): Promise { + const url = this.url("/api/v1/results/latest"); + const response = await input.fetchAsync(url, { + headers: this.getAuthHeaders(), + }); + + if (!response.ok) { + return TestConnectionError.StatusResult(response); + } + + return { success: true }; + } + + public async getLatestResultAsync(): Promise { + const response = await this.getAsync("/api/v1/results/latest"); + + // Speedtest Tracker returns 404 when no tests have been run yet (fresh install) + if (response.status === 404) { + return null; + } + + if (!response.ok) { + throw new ResponseError(response); + } + + return speedtestTrackerLatestResultEnvelopeSchema.parse(await response.json()).data; + } + + public async getStatsAsync(): Promise { + const response = await this.getAsync("/api/v1/stats"); + + if (!response.ok) { + throw new ResponseError(response); + } + + return speedtestTrackerStatsEnvelopeSchema.parse(await response.json()).data; + } + + public async getRecentResultsAsync(perPage = 10): Promise { + const response = await this.getAsync("/api/v1/results", { + result_count: String(perPage), + sort: "-created_at", + }); + + if (!response.ok) { + throw new ResponseError(response); + } + + return speedtestTrackerResultsCollectionSchema.parse(await response.json()); + } + + public async getDashboardDataAsync(): Promise { + const [latestResult, stats, recentCollection] = await Promise.all([ + this.getLatestResultAsync(), + this.getStatsAsync(), + this.getRecentResultsAsync(30), + ]); + + return { + latestResult, + stats, + recentResults: recentCollection.data, + }; + } + + private async getAsync(path: `/api/v1/${string}`, queryParams?: Record) { + return await fetchWithTrustedCertificatesAsync(this.url(path, queryParams), { + headers: this.getAuthHeaders(), + }); + } + + private getAuthHeaders(): Record { + return { + Authorization: `Bearer ${this.getSecretValue("apiKey")}`, + Accept: "application/json", + }; + } +} diff --git a/packages/integrations/src/speedtest-tracker/speedtest-tracker-types.ts b/packages/integrations/src/speedtest-tracker/speedtest-tracker-types.ts new file mode 100644 index 000000000..83aa5bb24 --- /dev/null +++ b/packages/integrations/src/speedtest-tracker/speedtest-tracker-types.ts @@ -0,0 +1,58 @@ +import { z } from "zod/v4"; + +const createEnvelopeSchema = (dataSchema: T) => z.object({ data: dataSchema }); + +const parseTimestamp = (timestamp: string): Date => new Date(`${timestamp.replace(" ", "T")}Z`); + +export const speedtestTrackerResultSchema = z.object({ + id: z.number().int(), + ping: z.number().nullable(), + download_bits: z.number().int().nullish(), + upload_bits: z.number().int().nullish(), + healthy: z.boolean().nullable(), + created_at: z.string().transform(parseTimestamp), +}); + +export type SpeedtestTrackerResult = z.infer; + +export const speedtestTrackerLatestResultEnvelopeSchema = createEnvelopeSchema(speedtestTrackerResultSchema); + +export const speedtestTrackerStatsBandwidthSchema = z.object({ + avg: z.number(), + avg_bits: z.number().optional(), + min: z.number(), + max: z.number(), +}); + +export const speedtestTrackerStatsSchema = z.object({ + ping: z.object({ + avg: z.number(), + min: z.number(), + max: z.number(), + }), + download: speedtestTrackerStatsBandwidthSchema, + upload: speedtestTrackerStatsBandwidthSchema, + total_results: z.number().int(), +}); + +export type SpeedtestTrackerStats = z.infer; + +export const speedtestTrackerStatsEnvelopeSchema = createEnvelopeSchema(speedtestTrackerStatsSchema); + +export const speedtestTrackerResultsCollectionSchema = z.object({ + data: z.array(speedtestTrackerResultSchema), + meta: z.object({ + current_page: z.number().int(), + last_page: z.number().int(), + total: z.number().int(), + per_page: z.number().int().optional(), + }), +}); + +export type SpeedtestTrackerResultsCollection = z.infer; + +export interface SpeedtestTrackerDashboardData { + latestResult: SpeedtestTrackerResult | null; + stats: SpeedtestTrackerStats | null; + recentResults: SpeedtestTrackerResult[]; +} diff --git a/packages/integrations/src/truenas/truenas-integration.ts b/packages/integrations/src/truenas/truenas-integration.ts index a712bc076..8d64f848c 100644 --- a/packages/integrations/src/truenas/truenas-integration.ts +++ b/packages/integrations/src/truenas/truenas-integration.ts @@ -297,6 +297,7 @@ export class TrueNasIntegration extends Integration implements ISystemHealthMoni version: systemInformation.version, cpuModelName: systemInformation.model, rebootRequired: false, + gpu: [], }; } diff --git a/packages/integrations/src/types.ts b/packages/integrations/src/types.ts index debdd041b..eb8b9e6ca 100644 --- a/packages/integrations/src/types.ts +++ b/packages/integrations/src/types.ts @@ -12,4 +12,7 @@ export * from "./unifi-controller/unifi-controller-types"; export * from "./opnsense/opnsense-types"; export * from "./interfaces/media-releases"; export * from "./coolify/coolify-types"; +export * from "./anchor/anchor-types"; +export * from "./interfaces/timetable/timetable-types"; export * from "./tracearr/tracearr-types"; +export * from "./speedtest-tracker/speedtest-tracker-types"; diff --git a/packages/integrations/src/unraid/unraid-integration.ts b/packages/integrations/src/unraid/unraid-integration.ts index 577d34a4a..38b12c31d 100644 --- a/packages/integrations/src/unraid/unraid-integration.ts +++ b/packages/integrations/src/unraid/unraid-integration.ts @@ -70,6 +70,7 @@ export class UnraidIntegration extends Integration implements ISystemHealthMonit // See ArrayDiskStatus from https://studio.apollographql.com/public/Unraid-API/variant/current/explorer healthy: disk.status === "DISK_OK", })), + gpu: [], }; } diff --git a/packages/integrations/test/nextcloud.spec.ts b/packages/integrations/test/nextcloud.spec.ts new file mode 100644 index 000000000..cef3ae494 --- /dev/null +++ b/packages/integrations/test/nextcloud.spec.ts @@ -0,0 +1,454 @@ +/* eslint-disable @typescript-eslint/no-non-null-assertion */ +import type { StartedTestContainer } from "testcontainers"; +import { GenericContainer, getContainerRuntimeClient, ImageName, Wait } from "testcontainers"; +import { afterAll, beforeAll, describe, expect, test, vi } from "vitest"; + +import { createId } from "@homarr/common"; +import { createDb } from "@homarr/db/test"; + +import { NextcloudIntegration } from "../src"; + +// Mock the database +vi.mock("@homarr/db", async (importActual) => { + // eslint-disable-next-line @typescript-eslint/consistent-type-imports + const actual = await importActual(); + return { + ...actual, + db: createDb(), + }; +}); + +// Mock certificate verification +vi.mock("@homarr/core/infrastructure/certificates", async (importActual) => { + // eslint-disable-next-line @typescript-eslint/consistent-type-imports + const actual = await importActual(); + return { + ...actual, + getTrustedCertificateHostnamesAsync: vi.fn().mockImplementation(() => { + return Promise.resolve([]); + }), + }; +}); + +const IMAGE_NAME = "nextcloud:latest"; +const DEFAULT_USERNAME = "admin"; +const DEFAULT_PASSWORD = "admin123"; + +interface CalendarTestEvent { + summary: string; + description?: string; + location?: string; + color?: string; + dtstart: string; + dtend: string; + rrule?: string; + timezone?: string; +} + +describe("Nextcloud integration", () => { + let startedContainer: StartedTestContainer | null = null; + let nextcloudIntegration: NextcloudIntegration | null = null; + + beforeAll(async () => { + const containerRuntimeClient = await getContainerRuntimeClient(); + await containerRuntimeClient.image.pull(ImageName.fromString(IMAGE_NAME)); + + startedContainer = await prepareNextcloudContainerAsync(); + nextcloudIntegration = createNextcloudIntegration(startedContainer); + }, 100_000); + + afterAll(async () => { + if (startedContainer) { + await startedContainer.stop(); + startedContainer = null; + } + }); + + describe("Test connection", () => { + test("Test connection > Should work with valid credentials", async () => { + // Act + const result = await nextcloudIntegration!.testConnectionAsync(); + + // Assert + expect(result.success).toBe(true); + }, 20_000); + + test("Test connection > Should fail with invalid credentials", async () => { + // Arrange + const invalidIntegration = createNextcloudIntegration(startedContainer!, "wrong-user", "wrong-pass"); + + // Act + const result = await invalidIntegration.testConnectionAsync(); + + // Assert + expect(result.success).toBe(false); + }, 20_000); + }); + + describe("Retrieve calendar events", () => { + test("Retrieve calendar events > Should retrieve all fields correctly", async () => { + // Arrange + const calendarName = createId(); + const testEvent: CalendarTestEvent = { + summary: "Test Meeting", + description: "This is a test meeting", + location: "Conference Room A", + color: "#FF5733", + dtstart: "20260415T140000Z", + dtend: "20260415T150000Z", + }; + const start = new Date("2026-04-01T00:00:00Z"); + const end = new Date("2026-04-30T23:59:59Z"); + + await createCalendarAsync(startedContainer!, calendarName); + await createCalendarEventAsync(startedContainer!, calendarName, testEvent); + + // Act + const events = await nextcloudIntegration!.getCalendarEventsAsync(start, end); + + // Assert + const relevantEvents = events.filter((event) => event.title === testEvent.summary); + expect(relevantEvents).toHaveLength(1); + const retrievedEvent = relevantEvents[0]; + expect(retrievedEvent).toMatchObject({ + title: testEvent.summary, + description: testEvent.description, + location: testEvent.location, + indicatorColor: testEvent.color, + }); + expect(retrievedEvent!.startDate.toISOString()).toBe("2026-04-15T14:00:00.000Z"); + expect(retrievedEvent!.endDate?.toISOString()).toBe("2026-04-15T15:00:00.000Z"); + }, 20_000); + test("Retrieve calendar events > Should work with only required fields", async () => { + // Arrange + const calendarName = createId(); + const testEvent: CalendarTestEvent = { + summary: "Simple Event", + dtstart: "20260415T140000Z", + dtend: "20260415T150000Z", + }; + const start = new Date("2026-04-01T00:00:00Z"); + const end = new Date("2026-04-30T23:59:59Z"); + + await createCalendarAsync(startedContainer!, calendarName); + await createCalendarEventAsync(startedContainer!, calendarName, testEvent); + + // Act + const events = await nextcloudIntegration!.getCalendarEventsAsync(start, end); + + // Assert + const relevantEvents = events.filter((event) => event.title === testEvent.summary); + expect(relevantEvents).toHaveLength(1); + const retrievedEvent = relevantEvents[0]; + expect(retrievedEvent?.location).toBeNull(); + expect(retrievedEvent?.description).toBeNull(); + expect(retrievedEvent?.indicatorColor).toBe("#ff8600"); // Default color + }, 20_000); + test("Retrieve calendar events > Should work with timezone specified", async () => { + // Arrange + const calendarName = createId(); + const testEvent: CalendarTestEvent = { + summary: "Timezone Event", + dtstart: "20260415T140000", + dtend: "20260415T150000", + timezone: "Asia/Tokyo", + }; + const start = new Date("2026-04-01T00:00:00Z"); + const end = new Date("2026-04-30T23:59:59Z"); + + await createCalendarAsync(startedContainer!, calendarName); + await createCalendarEventAsync(startedContainer!, calendarName, testEvent); + + // Act + const events = await nextcloudIntegration!.getCalendarEventsAsync(start, end); + + // Assert + const relevantEvents = events.filter((event) => event.title === testEvent.summary); + expect(relevantEvents).toHaveLength(1); + const retrievedEvent = relevantEvents[0]; + + expect(retrievedEvent!.startDate.toISOString()).toBe("2026-04-15T05:00:00.000Z"); // 14:00 in Tokyo is 05:00 UTC + expect(retrievedEvent!.endDate?.toISOString()).toBe("2026-04-15T06:00:00.000Z"); // 15:00 in Tokyo is 06:00 UTC + }, 120_000); + test("Retrieve calendar events > Should work with event that starts before the range but ends within the range", async () => { + // Arrange + const calendarName = createId(); + const testEvent: CalendarTestEvent = { + summary: "Early Meeting", + dtstart: "20260401T230000Z", // Starts before the range + dtend: "20260402T010000Z", // Ends within the range + }; + const start = new Date("2026-04-02T00:00:00Z"); + const end = new Date("2026-04-30T23:59:59Z"); + + await createCalendarAsync(startedContainer!, calendarName); + await createCalendarEventAsync(startedContainer!, calendarName, testEvent); + + // Act + const events = await nextcloudIntegration!.getCalendarEventsAsync(start, end); + + // Assert + const relevantEvents = events.filter((event) => event.title === testEvent.summary); + expect(relevantEvents).toHaveLength(1); + }, 20_000); + test("Retrieve calendar events > Should work with event that starts within the range but ends after the range", async () => { + // Arrange + const calendarName = createId(); + const testEvent: CalendarTestEvent = { + summary: "Late Meeting", + dtstart: "20260430T230000Z", // Starts within the range + dtend: "20260501T010000Z", // Ends after the range + }; + const start = new Date("2026-04-01T00:00:00Z"); + const end = new Date("2026-04-30T23:59:59Z"); + + await createCalendarAsync(startedContainer!, calendarName); + await createCalendarEventAsync(startedContainer!, calendarName, testEvent); + + // Act + const events = await nextcloudIntegration!.getCalendarEventsAsync(start, end); + + // Assert + const relevantEvents = events.filter((event) => event.title === testEvent.summary); + expect(relevantEvents).toHaveLength(1); + }, 20_000); + test("Retrieve calendar events > Should not retrieve events outside the range", async () => { + // Arrange + const calendarName = createId(); + const testEvent: CalendarTestEvent = { + summary: "Out of Range Meeting", + dtstart: "20260301T140000Z", // Starts before the range + dtend: "20260301T150000Z", // Ends before the range + }; + const start = new Date("2026-04-01T00:00:00Z"); + const end = new Date("2026-04-30T23:59:59Z"); + + await createCalendarAsync(startedContainer!, calendarName); + await createCalendarEventAsync(startedContainer!, calendarName, testEvent); + + // Act + const events = await nextcloudIntegration!.getCalendarEventsAsync(start, end); + + // Assert + const relevantEvents = events.filter((event) => event.title === testEvent.summary); + expect(relevantEvents).toHaveLength(0); + }, 20_000); + test("Retrieve calendar events > Should work with events that begin before the range and end after the range", async () => { + // Arrange + const calendarName = createId(); + const testEvent: CalendarTestEvent = { + summary: "Spanning Meeting", + dtstart: "20260330T230000Z", // Starts before the range + dtend: "20260501T010000Z", // Ends after the range + }; + const start = new Date("2026-04-01T00:00:00Z"); + const end = new Date("2026-04-30T23:59:59Z"); + + await createCalendarAsync(startedContainer!, calendarName); + await createCalendarEventAsync(startedContainer!, calendarName, testEvent); + + // Act + const events = await nextcloudIntegration!.getCalendarEventsAsync(start, end); + + // Assert + const relevantEvents = events.filter((event) => event.title === testEvent.summary); + expect(relevantEvents).toHaveLength(1); + }, 20_000); + test("Retrieve calendar events > Should work with recurring events first occurrence before the range", async () => { + // Arrange + const calendarName = createId(); + const testEvent: CalendarTestEvent = { + summary: "Recurring Meeting", + dtstart: "20260330T140000Z", // First occurrence starts before the range + dtend: "20260330T150000Z", + rrule: "FREQ=DAILY;COUNT=5", // Daily for 5 occurrences + }; + const start = new Date("2026-04-01T00:00:00Z"); + const end = new Date("2026-04-30T23:59:59Z"); + + await createCalendarAsync(startedContainer!, calendarName); + await createCalendarEventAsync(startedContainer!, calendarName, testEvent); + + // Act + const events = await nextcloudIntegration!.getCalendarEventsAsync(start, end); + + // Assert + const relevantEvents = events.filter((event) => event.title === testEvent.summary); + expect(relevantEvents).toHaveLength(3); + }, 20_000); + test("Retrieve calendar events > Should work with recurring events that go beyond the range", async () => { + // Arrange + const calendarName = createId(); + const testEvent: CalendarTestEvent = { + summary: "Working Week", + dtstart: "20260302T090000Z", + dtend: "20260306T170000Z", + rrule: "FREQ=WEEKLY;COUNT=10", + }; + const start = new Date("2026-04-01T00:00:00Z"); + const end = new Date("2026-04-30T23:59:59Z"); + + await createCalendarAsync(startedContainer!, calendarName); + await createCalendarEventAsync(startedContainer!, calendarName, testEvent); + + // Act + const events = await nextcloudIntegration!.getCalendarEventsAsync(start, end); + + // Assert + const relevantEvents = events.filter((event) => event.title === testEvent.summary); + expect(relevantEvents).toHaveLength(5); + }); + }); +}); + +/** + * Prepares a Nextcloud container with proper configuration + */ +async function prepareNextcloudContainerAsync(): Promise { + const container = createNextcloudContainer(); + const startedContainer = await container.start(); + + return startedContainer; +} + +/** + * Creates a Nextcloud container with proper configuration + */ +function createNextcloudContainer() { + return new GenericContainer(IMAGE_NAME) + .withEnvironment({ + NEXTCLOUD_ADMIN_USER: DEFAULT_USERNAME, + NEXTCLOUD_ADMIN_PASSWORD: DEFAULT_PASSWORD, + NEXTCLOUD_TRUSTED_DOMAINS: "*", + SQLITE_DATABASE: "nextcloud", // Use SQLite for faster startup + }) + .withExposedPorts(80) + .withWaitStrategy(Wait.forHttp("/status.php", 80).forStatusCode(200)) + .withStartupTimeout(120_000); +} + +/** + * Creates a Nextcloud integration instance + */ +function createNextcloudIntegration( + container: StartedTestContainer, + username?: string, + password?: string, +): NextcloudIntegration { + return new NextcloudIntegration({ + id: "1", + decryptedSecrets: [ + { + kind: "username", + value: username ?? DEFAULT_USERNAME, + }, + { + kind: "password", + value: password ?? DEFAULT_PASSWORD, + }, + ], + name: "Nextcloud", + url: `http://${container.getHost()}:${container.getMappedPort(80)}`, + externalUrl: null, + }); +} + +/** + * Creates a calendar in Nextcloud via OCS API + */ +async function createCalendarAsync(container: StartedTestContainer, calendarName: string): Promise { + const host = container.getHost(); + const port = container.getMappedPort(80); + const url = `http://${host}:${port}/remote.php/dav/calendars/${DEFAULT_USERNAME}/${calendarName}`; + + const auth = Buffer.from(`${DEFAULT_USERNAME}:${DEFAULT_PASSWORD}`).toString("base64"); + + const response = await fetch(url, { + method: "MKCALENDAR", + headers: { + Authorization: `Basic ${auth}`, + "Content-Type": "application/xml", + }, + body: ` + + + + ${calendarName} + + + `, + }); + + if (!response.ok && response.status !== 201) { + throw new Error(`Failed to create calendar: ${response.status} ${response.statusText}`); + } +} + +/** + * Creates a calendar event in Nextcloud via CalDAV + */ +async function createCalendarEventAsync( + container: StartedTestContainer, + calendarName: string, + event: CalendarTestEvent, +): Promise { + const host = container.getHost(); + const port = container.getMappedPort(80); + const id = createId(); + const url = `http://${host}:${port}/remote.php/dav/calendars/${DEFAULT_USERNAME}/${calendarName}/${id}.ics`; + + const auth = Buffer.from(`${DEFAULT_USERNAME}:${DEFAULT_PASSWORD}`).toString("base64"); + + // Build iCalendar format + const icalData = buildICalEvent(id, event); + + const response = await fetch(url, { + method: "PUT", + headers: { + Authorization: `Basic ${auth}`, + "Content-Type": "text/calendar", + }, + body: icalData, + }); + + if (!response.ok && response.status !== 201) { + throw new Error(`Failed to create event: ${response.status} ${response.statusText}`); + } +} + +/** + * Builds an iCalendar format string from event data + */ +function buildICalEvent(uid: string, event: CalendarTestEvent): string { + const lines = [ + "BEGIN:VCALENDAR", + "VERSION:2.0", + "PRODID:-//Homarr Tests//EN", + "BEGIN:VEVENT", + `UID:${uid}`, + `DTSTAMP:${new Date().toISOString().replace(/[-:]/g, "").split(".")[0]}Z`, + `DTSTART${event.timezone ? `;TZID=${event.timezone}` : ""}:${event.dtstart}`, + `DTEND${event.timezone ? `;TZID=${event.timezone}` : ""}:${event.dtend}`, + `SUMMARY:${event.summary}`, + ]; + + if (event.description) { + lines.push(`DESCRIPTION:${event.description}`); + } + + if (event.location) { + lines.push(`LOCATION:${event.location}`); + } + + if (event.color) { + lines.push(`COLOR:${event.color}`); + } + + if (event.rrule) { + lines.push(`RRULE:${event.rrule}`); + } + + lines.push("END:VEVENT", "END:VCALENDAR"); + + return lines.join("\r\n"); +} diff --git a/packages/modals-collection/package.json b/packages/modals-collection/package.json index beb37dcb0..3b23100dd 100644 --- a/packages/modals-collection/package.json +++ b/packages/modals-collection/package.json @@ -33,19 +33,19 @@ "@homarr/translation": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", - "@mantine/core": "^8.3.16", - "@tabler/icons-react": "^3.40.0", - "dayjs": "^1.11.19", - "next": "16.1.6", - "react": "19.2.4", - "react-dom": "19.2.4", - "zod": "^4.2.1" + "@mantine/core": "catalog:", + "@tabler/icons-react": "catalog:", + "dayjs": "catalog:", + "next": "catalog:", + "react": "catalog:", + "react-dom": "catalog:", + "zod": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/modals-collection/src/boards/add-board-modal.tsx b/packages/modals-collection/src/boards/add-board-modal.tsx index 919335b9b..b18ca9851 100644 --- a/packages/modals-collection/src/boards/add-board-modal.tsx +++ b/packages/modals-collection/src/boards/add-board-modal.tsx @@ -57,10 +57,12 @@ export const AddBoardModal = createModal(({ actions }) => { {...form.getInputProps("name")} description={ boardNameStatus.description ? ( - - {boardNameStatus.description.icon ? : null} - {boardNameStatus.description.label} - + + + {boardNameStatus.description.icon ? : null} + {boardNameStatus.description.label} + + ) : null } /> diff --git a/packages/modals-collection/src/docker/add-docker-app-to-homarr.tsx b/packages/modals-collection/src/docker/add-docker-app-to-homarr.tsx index fc8567ccb..f94bf8f24 100644 --- a/packages/modals-collection/src/docker/add-docker-app-to-homarr.tsx +++ b/packages/modals-collection/src/docker/add-docker-app-to-homarr.tsx @@ -21,7 +21,7 @@ export const AddDockerAppToHomarrModal = createModal( { initialValues: { containerUrls: innerProps.selectedContainers.map((container) => { - if (container.ports[0]) { + if (Array.isArray(container.ports) && container.ports[0]) { return `http://${container.ports[0].IP}:${container.ports[0].PublicPort}`; } diff --git a/packages/modals/package.json b/packages/modals/package.json index cff5fac17..8387be196 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.3.16", - "@mantine/hooks": "^8.3.16", - "react": "19.2.4" + "@mantine/core": "catalog:", + "@mantine/hooks": "catalog:", + "react": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/notifications/package.json b/packages/notifications/package.json index 08141e88f..2409be83a 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.3.16", - "@tabler/icons-react": "^3.40.0" + "@mantine/notifications": "catalog:", + "@tabler/icons-react": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/old-import/package.json b/packages/old-import/package.json index 9b488c0bc..4f60fcad2 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.3.16", - "@mantine/hooks": "^8.3.16", - "adm-zip": "0.5.16", - "next": "16.1.6", - "react": "19.2.4", - "react-dom": "19.2.4", - "superjson": "2.2.6", - "zod": "^4.2.1", - "zod-form-data": "^3.0.1" + "@mantine/core": "catalog:", + "@mantine/hooks": "catalog:", + "adm-zip": "catalog:", + "next": "catalog:", + "react": "catalog:", + "react-dom": "catalog:", + "superjson": "catalog:", + "zod": "catalog:", + "zod-form-data": "catalog:" }, "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.39.4", - "typescript": "^5.9.3" + "@types/adm-zip": "catalog:", + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/old-import/src/mappers/map-user.ts b/packages/old-import/src/mappers/map-user.ts index f0b57cebf..48ca701ee 100644 --- a/packages/old-import/src/mappers/map-user.ts +++ b/packages/old-import/src/mappers/map-user.ts @@ -16,7 +16,7 @@ export const mapAndDecryptUsers = (importUsers: OldmarrImportUser[], encryptionT ({ id, password, - salt, + salt: _saltIsNotNeededAsPartOfPassword, settings, ...user }): InferInsertModel & { oldId: string; isAdmin: boolean } => ({ @@ -30,7 +30,6 @@ export const mapAndDecryptUsers = (importUsers: OldmarrImportUser[], encryptionT pingIconsEnabled: settings?.replacePingWithIcons, isAdmin: user.isAdmin || user.isOwner, password: decryptSecretWithKey(password, key), - salt: decryptSecretWithKey(salt, key), }), ); }; diff --git a/packages/old-import/src/widgets/options.ts b/packages/old-import/src/widgets/options.ts index e3c58768f..32b1f25c3 100644 --- a/packages/old-import/src/widgets/options.ts +++ b/packages/old-import/src/widgets/options.ts @@ -101,6 +101,7 @@ const optionMapping: OptionMapping = { allowMicrophone: (oldOptions) => oldOptions.allowMicrophone, allowGeolocation: (oldOptions) => oldOptions.allowGeolocation, allowScrolling: (oldOptions) => oldOptions.allowScrolling, + allowModals: () => undefined, }, video: { feedUrl: (oldOptions) => oldOptions.FeedUrl, @@ -121,6 +122,7 @@ const optionMapping: OptionMapping = { maximumAmountPosts: (oldOptions) => oldOptions.maximumAmountOfPosts, textLinesClamp: (oldOptions) => oldOptions.textLinesClamp, hideDescription: () => undefined, + showPosterImage: () => true, // This was the default in oldmarr }, notebook: { allowReadOnlyCheck: (oldOptions) => oldOptions.allowReadOnlyCheck, @@ -161,6 +163,7 @@ const optionMapping: OptionMapping = { sectionIndicatorRequirement: (oldOptions) => "sectionIndicatorColor" in oldOptions ? oldOptions.sectionIndicatorColor : undefined, showUptime: () => undefined, + gpu: () => undefined, visibleClusterSections: (oldOptions) => { if (!("showNode" in oldOptions)) return undefined; diff --git a/packages/old-schema/package.json b/packages/old-schema/package.json index 0c3b01d24..9db60a184 100644 --- a/packages/old-schema/package.json +++ b/packages/old-schema/package.json @@ -23,13 +23,13 @@ "prettier": "@homarr/prettier-config", "dependencies": { "@homarr/common": "workspace:^0.1.0", - "zod": "^4.2.1" + "zod": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/ping/package.json b/packages/ping/package.json index a345896fc..6f0a9e6df 100644 --- a/packages/ping/package.json +++ b/packages/ping/package.json @@ -29,7 +29,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/redis/package.json b/packages/redis/package.json index 67166f609..6a5d14a38 100644 --- a/packages/redis/package.json +++ b/packages/redis/package.json @@ -26,14 +26,14 @@ "@homarr/core": "workspace:^", "@homarr/db": "workspace:^", "@homarr/definitions": "workspace:^", - "ioredis": "5.10.0", - "superjson": "2.2.6" + "ioredis": "catalog:", + "superjson": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/request-handler/package.json b/packages/request-handler/package.json index 66e0677cb..5504d6031 100644 --- a/packages/request-handler/package.json +++ b/packages/request-handler/package.json @@ -22,7 +22,7 @@ }, "prettier": "@homarr/prettier-config", "dependencies": { - "@extractus/feed-extractor": "7.1.7", + "@extractus/feed-extractor": "catalog:", "@homarr/common": "workspace:^0.1.0", "@homarr/core": "workspace:^0.1.0", "@homarr/db": "workspace:^0.1.0", @@ -30,17 +30,17 @@ "@homarr/docker": "workspace:^0.1.0", "@homarr/integrations": "workspace:^0.1.0", "@homarr/redis": "workspace:^0.1.0", - "dayjs": "^1.11.19", - "octokit": "^5.0.5", - "superjson": "2.2.6", - "undici": "7.18.2", - "zod": "^4.2.1" + "dayjs": "catalog:", + "octokit": "catalog:", + "superjson": "catalog:", + "undici": "catalog:", + "zod": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/request-handler/src/anchor-notes.ts b/packages/request-handler/src/anchor-notes.ts new file mode 100644 index 000000000..bd6f19e44 --- /dev/null +++ b/packages/request-handler/src/anchor-notes.ts @@ -0,0 +1,30 @@ +import dayjs from "dayjs"; + +import type { AnchorNote, AnchorNotesListInput, AnchorNoteSummary } from "@homarr/integrations"; +import { createIntegrationAsync } from "@homarr/integrations"; + +import { createCachedIntegrationRequestHandler } from "./lib/cached-integration-request-handler"; + +export const anchorNotesListRequestHandler = createCachedIntegrationRequestHandler< + AnchorNoteSummary[], + "anchor", + AnchorNotesListInput +>({ + queryKey: "anchorNotesList", + cacheDuration: dayjs.duration(15, "seconds"), + async requestAsync(integration, input) { + const instance = await createIntegrationAsync(integration); + return instance.listNotesAsync(input); + }, +}); + +export const anchorNoteRequestHandler = createCachedIntegrationRequestHandler( + { + queryKey: "anchorNote", + cacheDuration: dayjs.duration(15, "seconds"), + async requestAsync(integration, input) { + const instance = await createIntegrationAsync(integration); + return instance.getNoteAsync(input.noteId); + }, + }, +); diff --git a/packages/request-handler/src/docker.ts b/packages/request-handler/src/docker.ts index 0d2c02809..7b873ec00 100644 --- a/packages/request-handler/src/docker.ts +++ b/packages/request-handler/src/docker.ts @@ -1,5 +1,6 @@ import dayjs from "dayjs"; import type { ContainerInfo, ContainerStats } from "dockerode"; +import type Dockerode from "dockerode"; import { db, like, or } from "@homarr/db"; import { icons } from "@homarr/db/schema"; @@ -72,7 +73,7 @@ async function getContainersWithStatsAsync() { cpuUsage, memoryUsage, image: container.Image, - ports: container.Ports, + ports: container.Ports as Dockerode.Port[] | undefined, }; }); diff --git a/packages/request-handler/src/rss-feeds.ts b/packages/request-handler/src/rss-feeds.ts index eb13caa88..9eaf026ea 100644 --- a/packages/request-handler/src/rss-feeds.ts +++ b/packages/request-handler/src/rss-feeds.ts @@ -28,7 +28,7 @@ export const rssFeedsRequestHandler = createCachedWidgetRequestHandler({ return { ...result, - entries: result.entries?.slice(0, input.count) ?? [], + entries: result.entries?.map((entry) => ({ ...entry, feedUrl: input.url })).slice(0, input.count) ?? [], }; }, cacheDuration: dayjs.duration(5, "minutes"), @@ -109,6 +109,7 @@ const getFirstMediaProperty = (feedObject: object) => { * This interface adds properties on top of the default ones. */ export interface ExtendedFeedEntry extends FeedEntry { + feedUrl: string; enclosure?: string; } diff --git a/packages/request-handler/src/speedtest-tracker.ts b/packages/request-handler/src/speedtest-tracker.ts new file mode 100644 index 000000000..799d37f16 --- /dev/null +++ b/packages/request-handler/src/speedtest-tracker.ts @@ -0,0 +1,19 @@ +import dayjs from "dayjs"; + +import { createIntegrationAsync } from "@homarr/integrations"; +import type { SpeedtestTrackerDashboardData } from "@homarr/integrations/types"; + +import { createCachedIntegrationRequestHandler } from "./lib/cached-integration-request-handler"; + +export const speedtestTrackerRequestHandler = createCachedIntegrationRequestHandler< + SpeedtestTrackerDashboardData, + "speedtestTracker", + Record +>({ + async requestAsync(integration, _input) { + const integrationInstance = await createIntegrationAsync(integration); + return await integrationInstance.getDashboardDataAsync(); + }, + cacheDuration: dayjs.duration(10, "minutes"), + queryKey: "speedtestTrackerDashboard", +}); diff --git a/packages/request-handler/src/timetable.ts b/packages/request-handler/src/timetable.ts new file mode 100644 index 000000000..0946ac67d --- /dev/null +++ b/packages/request-handler/src/timetable.ts @@ -0,0 +1,36 @@ +import dayjs from "dayjs"; + +import type { IntegrationKindByCategory } from "@homarr/definitions"; +import { createIntegrationAsync } from "@homarr/integrations"; +import type { Station, Timetable } from "@homarr/integrations/types"; + +import { createCachedIntegrationRequestHandler } from "./lib/cached-integration-request-handler"; + +export const timetableSearchStationsRequestHandler = createCachedIntegrationRequestHandler< + Station[], + IntegrationKindByCategory<"timetable">, + { query: string } +>({ + async requestAsync(integration, input) { + const integrationInstance = await createIntegrationAsync(integration); + return await integrationInstance.searchStationsAsync(input.query); + }, + queryKey: "timetableSearchStations", + cacheDuration: dayjs.duration(1, "day"), +}); + +export const timetableGetTimetableRequestHandler = createCachedIntegrationRequestHandler< + Timetable, + IntegrationKindByCategory<"timetable">, + { stationId: string; limit: number } +>({ + async requestAsync(integration, input) { + const integrationInstance = await createIntegrationAsync(integration); + return await integrationInstance.getTimetableAsync({ + stationId: input.stationId, + limit: input.limit, + }); + }, + queryKey: "timetableGetTimetable", + cacheDuration: dayjs.duration(1, "minute"), +}); diff --git a/packages/server-settings/package.json b/packages/server-settings/package.json index 473dd685f..494bc2a91 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.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/settings/package.json b/packages/settings/package.json index a6e55954f..ab2e62a2e 100644 --- a/packages/settings/package.json +++ b/packages/settings/package.json @@ -25,16 +25,16 @@ "dependencies": { "@homarr/db": "workspace:^0.1.0", "@homarr/server-settings": "workspace:^0.1.0", - "@mantine/dates": "^8.3.16", - "next": "16.1.6", - "react": "19.2.4", - "react-dom": "19.2.4" + "@mantine/dates": "catalog:", + "next": "catalog:", + "react": "catalog:", + "react-dom": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/spotlight/package.json b/packages/spotlight/package.json index 4a573d3ab..c7903ee49 100644 --- a/packages/spotlight/package.json +++ b/packages/spotlight/package.json @@ -33,21 +33,21 @@ "@homarr/settings": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0", - "@mantine/core": "^8.3.16", - "@mantine/hooks": "^8.3.16", - "@mantine/spotlight": "^8.3.16", - "@tabler/icons-react": "^3.40.0", - "jotai": "^2.18.1", - "next": "16.1.6", - "react": "19.2.4", - "react-dom": "19.2.4", - "use-deep-compare-effect": "^1.8.1" + "@mantine/core": "catalog:", + "@mantine/hooks": "catalog:", + "@mantine/spotlight": "catalog:", + "@tabler/icons-react": "catalog:", + "jotai": "catalog:", + "next": "catalog:", + "react": "catalog:", + "react-dom": "catalog:", + "use-deep-compare-effect": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/spotlight/src/modes/home/context.tsx b/packages/spotlight/src/modes/home/context.tsx index 3a681499b..fced7fc06 100644 --- a/packages/spotlight/src/modes/home/context.tsx +++ b/packages/spotlight/src/modes/home/context.tsx @@ -94,7 +94,6 @@ const createSpotlightContext = (displayName: string) => { context.unregisterItems(key); }; // We ignore the results - // eslint-disable-next-line react-hooks/exhaustive-deps }, [...dependencyArray, key]); }; diff --git a/packages/translation/package.json b/packages/translation/package.json index c1ba92057..e8e42b749 100644 --- a/packages/translation/package.json +++ b/packages/translation/package.json @@ -29,19 +29,19 @@ "dependencies": { "@homarr/common": "workspace:^0.1.0", "@homarr/definitions": "workspace:^0.1.0", - "dayjs": "^1.11.19", - "deepmerge": "4.3.1", - "mantine-react-table": "2.0.0-beta.9", - "next": "16.1.6", - "next-intl": "4.8.3", - "react": "19.2.4", - "react-dom": "19.2.4" + "dayjs": "catalog:", + "deepmerge": "catalog:", + "mantine-react-table": "catalog:", + "next": "catalog:", + "next-intl": "catalog:", + "react": "catalog:", + "react-dom": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/translation/src/lang/ca.json b/packages/translation/src/lang/ca.json index 978817e9b..5985ba892 100644 --- a/packages/translation/src/lang/ca.json +++ b/packages/translation/src/lang/ca.json @@ -1525,6 +1525,17 @@ "offline": "" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "", "description": "", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "", "description": "", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "" }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "", "description": "", @@ -2725,6 +2812,7 @@ "option": { "cpu": "", "memory": "", + "gpu": "", "network": "" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "", "memory": "", + "gpu": "", "network": "", "up": "", "down": "" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "" }, @@ -3698,6 +3790,10 @@ "title": "", "subtitle": "" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "", "subtitle": "" diff --git a/packages/translation/src/lang/cn.json b/packages/translation/src/lang/cn.json index 33443c465..c25440a6b 100644 --- a/packages/translation/src/lang/cn.json +++ b/packages/translation/src/lang/cn.json @@ -1525,6 +1525,17 @@ "offline": "离线" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "笔记", "description": "支持 Markdown 的简单笔记本小部件", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "显示标题" + }, + "showUpdatedAt": { + "label": "显示最近更新" + } + }, + "empty": "选择要显示的笔记", + "emptyContent": "此笔记没有内容", + "notFound": "未找到笔记", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "更新时间:{date}", + "untitled": "未命名", + "edit": "编辑", + "save": "保存", + "cancel": "取消", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "iFrame", "description": "嵌入互联网上的任何内容。某些网站可能限制访问。", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "允许地理位置" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "显示内存信息" }, + "gpu": { + "label": "显示 GPU 信息" + }, "showUptime": { "label": "显示运行时间" }, @@ -2155,15 +2200,15 @@ "description": "" }, "showPhotos": { - "label": "", + "label": "显示图片", "description": "" }, "showVideos": { - "label": "", + "label": "显示视频", "description": "" }, "showStorage": { - "label": "", + "label": "显示存储", "description": "" } }, @@ -2184,7 +2229,7 @@ "description": "" }, "showPhotoInfo": { - "label": "", + "label": "显示图片信息", "description": "" } }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "隐藏描述" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "没有可显示的通知。", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "下载", + "upload": "上传", + "ping": "Ping", + "status": "状态", + "avgDownload": "平均下载", + "avgUpload": "平均上传", + "avgPing": "平均Ping", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "失败", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "系统资源", "description": "您系统的 CPU、内存、磁盘及其他硬件使用情况", @@ -2725,6 +2812,7 @@ "option": { "cpu": "CPU", "memory": "内存", + "gpu": "GPU", "network": "网络" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "CPU", "memory": "内存", + "gpu": "GPU", "network": "网络", "up": "上传", "down": "下载" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "Minecraft 服务状态" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "图标更新" }, @@ -3698,6 +3790,10 @@ "title": "翻译人员", "subtitle": "在许多语言中,有{count}人贡献了翻译" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "相关的库", "subtitle": "{count} 用于 Homarr 代码中" diff --git a/packages/translation/src/lang/cr.json b/packages/translation/src/lang/cr.json index c6a8b4da3..d9e5c0224 100644 --- a/packages/translation/src/lang/cr.json +++ b/packages/translation/src/lang/cr.json @@ -1525,6 +1525,17 @@ "offline": "crwdns2494:0crwdne2494:0" } }, + "timetable": { + "name": "crwdns4000:0crwdne4000:0", + "description": "crwdns4002:0crwdne4002:0", + "title": "crwdns4004:0{station}crwdne4004:0", + "noStation": "crwdns4006:0crwdne4006:0", + "option": { + "station": { + "label": "crwdns4008:0crwdne4008:0" + } + } + }, "notebook": { "name": "crwdns860:0crwdne860:0", "description": "crwdns862:0crwdne862:0", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "crwdns4064:0crwdne4064:0", + "description": "crwdns4066:0crwdne4066:0", + "option": { + "noteId": { + "label": "crwdns4068:0crwdne4068:0" + }, + "showTitle": { + "label": "crwdns4070:0crwdne4070:0" + }, + "showUpdatedAt": { + "label": "crwdns4072:0crwdne4072:0" + } + }, + "empty": "crwdns4074:0crwdne4074:0", + "emptyContent": "crwdns4076:0crwdne4076:0", + "notFound": "crwdns4078:0crwdne4078:0", + "noNotes": "crwdns4080:0crwdne4080:0", + "integrationRequired": "crwdns4082:0crwdne4082:0", + "updatedAt": "crwdns4084:0{date}crwdne4084:0", + "untitled": "crwdns4086:0crwdne4086:0", + "edit": "crwdns4088:0crwdne4088:0", + "save": "crwdns4090:0crwdne4090:0", + "cancel": "crwdns4092:0crwdne4092:0", + "readOnlyViewer": "crwdns4094:0crwdne4094:0", + "saveForbidden": "crwdns4096:0crwdne4096:0", + "saveFailed": "crwdns4098:0crwdne4098:0" + }, "iframe": { "name": "crwdns950:0crwdne950:0", "description": "crwdns952:0crwdne952:0", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "crwdns970:0crwdne970:0" + }, + "allowModals": { + "label": "crwdns3992:0crwdne3992:0" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "crwdns1080:0crwdne1080:0" }, + "gpu": { + "label": "crwdns3994:0crwdne3994:0" + }, "showUptime": { "label": "crwdns3446:0crwdne3446:0" }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "crwdns3674:0crwdne3674:0" + }, + "showPosterImage": { + "label": "crwdns4012:0crwdne4012:0" } } }, @@ -2712,6 +2760,45 @@ "noItems": "crwdns3480:0crwdne3480:0", "option": {} }, + "speedtestTracker": { + "name": "crwdns4014:0crwdne4014:0", + "description": "crwdns4016:0crwdne4016:0", + "option": { + "showLatestResult": { + "label": "crwdns4018:0crwdne4018:0" + }, + "showStats": { + "label": "crwdns4020:0crwdne4020:0" + }, + "showRecentResults": { + "label": "crwdns4022:0crwdne4022:0" + }, + "showPingGraph": { + "label": "crwdns4024:0crwdne4024:0" + } + }, + "latestResult": "crwdns4026:0crwdne4026:0", + "averages": "crwdns4028:0crwdne4028:0", + "tests": "crwdns4030:0{count}crwdne4030:0", + "recentResults": "crwdns4032:0crwdne4032:0", + "recentResultsSpeed": "crwdns4034:0crwdne4034:0", + "recentResultsPing": "crwdns4036:0crwdne4036:0", + "download": "crwdns4038:0crwdne4038:0", + "upload": "crwdns4040:0crwdne4040:0", + "ping": "crwdns4042:0crwdne4042:0", + "status": "crwdns4044:0crwdne4044:0", + "avgDownload": "crwdns4046:0crwdne4046:0", + "avgUpload": "crwdns4048:0crwdne4048:0", + "avgPing": "crwdns4050:0crwdne4050:0", + "healthy": "crwdns4052:0crwdne4052:0", + "unhealthy": "crwdns4054:0crwdne4054:0", + "ok": "crwdns4056:0crwdne4056:0", + "fail": "crwdns4058:0crwdne4058:0", + "noSectionsEnabled": "crwdns4060:0crwdne4060:0", + "error": { + "internalServerError": "crwdns4062:0crwdne4062:0" + } + }, "systemResources": { "name": "crwdns3600:0crwdne3600:0", "description": "crwdns3602:0crwdne3602:0", @@ -2725,6 +2812,7 @@ "option": { "cpu": "crwdns3700:0crwdne3700:0", "memory": "crwdns3702:0crwdne3702:0", + "gpu": "crwdns3996:0crwdne3996:0", "network": "crwdns3704:0crwdne3704:0" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "crwdns3604:0crwdne3604:0", "memory": "crwdns3606:0crwdne3606:0", + "gpu": "crwdns3998:0crwdne3998:0", "network": "crwdns3608:0crwdne3608:0", "up": "crwdns3610:0crwdne3610:0", "down": "crwdns3612:0crwdne3612:0" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "crwdns2496:0crwdne2496:0" }, + "timetable": { + "label": "crwdns4010:0crwdne4010:0" + }, "iconsUpdater": { "label": "crwdns1828:0crwdne1828:0" }, @@ -3698,6 +3790,10 @@ "title": "crwdns1884:0crwdne1884:0", "subtitle": "crwdns1886:0{count}crwdne1886:0" }, + "sponsors": { + "title": "crwdns4100:0crwdne4100:0", + "subtitle": "crwdns4102:0{count}crwdne4102:0" + }, "libraries": { "title": "crwdns1888:0crwdne1888:0", "subtitle": "crwdns1890:0{count}crwdne1890:0" diff --git a/packages/translation/src/lang/cs.json b/packages/translation/src/lang/cs.json index 124de13bb..ef47cde8b 100644 --- a/packages/translation/src/lang/cs.json +++ b/packages/translation/src/lang/cs.json @@ -1525,6 +1525,17 @@ "offline": "" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "Zápisník", "description": "", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "iFrame", "description": "Vložte jakýkoli obsah z internetu. Některé webové stránky mohou omezit přístup.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Povolit polohu" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "Zobrazit informace o paměti" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "" }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "", "description": "", @@ -2725,6 +2812,7 @@ "option": { "cpu": "", "memory": "", + "gpu": "", "network": "" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "", "memory": "", + "gpu": "", "network": "", "up": "", "down": "" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "" }, @@ -3698,6 +3790,10 @@ "title": "Překladatelé", "subtitle": "{count} přispívá překladem do mnoha jazyků" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "", "subtitle": "" diff --git a/packages/translation/src/lang/da.json b/packages/translation/src/lang/da.json index df562d1ff..f73d49a08 100644 --- a/packages/translation/src/lang/da.json +++ b/packages/translation/src/lang/da.json @@ -1138,9 +1138,9 @@ "dangerZone": "Farezone", "noResults": "Ingen resultater fundet", "unsavedChanges": "Du har ikke gemte ændringer!", - "servers": "", - "applications": "", - "services": "", + "servers": "Servere", + "applications": "Apps", + "services": "Services", "preview": { "show": "Vis forhåndsvisning", "hide": "Skjul forhåndsvisning" @@ -1525,6 +1525,17 @@ "offline": "Offline" } }, + "timetable": { + "name": "Tidsskema", + "description": "Viser afgangstider for en station", + "title": "Afgange {station}", + "noStation": "Ingen station valgt", + "option": { + "station": { + "label": "Station" + } + } + }, "notebook": { "name": "Notesbog", "description": "En simpel notebook widget, der understøtter markdown", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "Anchor note", + "description": "Viser en valgt note fra Anchor", + "option": { + "noteId": { + "label": "Note" + }, + "showTitle": { + "label": "Vis titel" + }, + "showUpdatedAt": { + "label": "Vis senest opdateret" + } + }, + "empty": "Vælg en note der skal vises", + "emptyContent": "Denne note har intet indhold", + "notFound": "Note ikke fundet", + "noNotes": "Ingen noter fundet", + "integrationRequired": "Vælg først en Anchorintegration", + "updatedAt": "Opdateret {date}", + "untitled": "Unavngivet", + "edit": "Rediger", + "save": "Gem", + "cancel": "Annullér", + "readOnlyViewer": "Du har læseadgang til denne note. Redigering er deaktiveret.", + "saveForbidden": "Du har ikke adgang til at redigere denne note.", + "saveFailed": "Kunne ikke gemme denne note. Prøv igen." + }, "iframe": { "name": "indlejret dokument (iframe)", "description": "Indlejr ethvert indhold fra internettet. Nogle websteder kan begrænse adgang.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Tillad geolokalisering" + }, + "allowModals": { + "label": "Tillad modaler" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "Vis hukommelsesoplysninger" }, + "gpu": { + "label": "Vis GPU info" + }, "showUptime": { "label": "Vis Oppetid" }, @@ -1944,19 +1989,19 @@ "description": "Statistik for dine containere (Denne widget kan kun tilføjes med administratorrettigheder)", "option": { "enableRowSorting": { - "label": "" + "label": "Aktiver sortering" }, "defaultSort": { - "label": "", + "label": "Kolonne brugt til sortering som standard", "option": { - "name": "", - "state": "", - "cpuUsage": "", - "memoryUsage": "" + "name": "Navn", + "state": "Tilstand", + "cpuUsage": "CPU-forbrug", + "memoryUsage": "Hukommelsesforbrug" } }, "descendingDefaultSort": { - "label": "" + "label": "Inverter sortering" } }, "error": { @@ -1964,91 +2009,91 @@ } }, "coolify": { - "name": "", - "description": "", + "name": "Coolify", + "description": "Oversigt over din Coolify instans med servere og applikationer", "option": { "showServers": { - "label": "" + "label": "Vis servere" }, "showApplications": { - "label": "" + "label": "Vis applikationer" }, "showServices": { - "label": "" + "label": "Vis services" } }, "empty": { - "servers": "", - "applications": "", - "services": "" + "servers": "Ingen servere fundet", + "applications": "Ingen applikationer fundet", + "services": "Ingen services fundet" }, "footer": { - "updated": "" + "updated": "Opdateret {when}" }, "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "Ingen Coolify integration konfigureret", + "internalServerError": "Kunne ikke hente Coolify data" }, "server": { - "buildServer": "" + "buildServer": "Byg" }, "instances": { - "title": "" + "title": "Instanser" } }, "tracearr": { - "name": "", - "description": "", + "name": "Tracearr", + "description": "Forbedret overvågning af medieserver med detaljerede stream og omkodningsdata", "option": { "showStreams": { - "label": "" + "label": "Vis aktive streams" }, "showStats": { - "label": "" + "label": "Vis statistikoversigt" }, "showRecentActivity": { - "label": "" + "label": "Vis seneste aktivitet" }, "showViolations": { - "label": "" + "label": "Vis overtrædelser" } }, "stats": { - "activeStreams": "", - "totalUsers": "", - "transcodes": "", - "bandwidth": "" + "activeStreams": "Aktive streams", + "totalUsers": "Antal brugere i alt", + "transcodes": "Transkodninger", + "bandwidth": "Båndbredde" }, "streams": { - "empty": "", - "user": "", - "media": "", - "state": "", - "quality": "", - "device": "", - "progress": "", + "empty": "Ingen aktive streams", + "user": "Bruger", + "media": "Medie", + "state": "Tilstand", + "quality": "Kvalitet", + "device": "Enhed", + "progress": "Fremskridt", "videoDecision": { - "directPlay": "", - "transcode": "", - "directStream": "" + "directPlay": "Direkte afspilning", + "transcode": "Transkod", + "directStream": "Direkte stream" } }, "recentActivity": { - "title": "", - "empty": "", - "watched": "", - "partial": "" + "title": "Seneste aktivitet", + "empty": "Ingen nylig aktivitet", + "watched": "Sete", + "partial": "Delvis" }, "violations": { - "title": "", - "empty": "", - "rule": "", - "user": "" + "title": "Overtrædelser", + "empty": "Ingen nylige overtrædelser", + "rule": "Regel", + "user": "Bruger" }, - "noSectionsEnabled": "", + "noSectionsEnabled": "Ingen sektioner aktiveret", "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "Ingen Tracearr integration konfigureret", + "internalServerError": "Kunne ikke hente Tracearr data" } }, "common": { @@ -2147,50 +2192,50 @@ } }, "immich-serverStats": { - "name": "", - "description": "", + "name": "Immich Server Statistik", + "description": "Information om din Immich instans", "option": { "showUsers": { - "label": "", - "description": "" + "label": "Vis brugere", + "description": "Vis antal brugere på din instans" }, "showPhotos": { - "label": "", - "description": "" + "label": "Vis billeder", + "description": "Vis antal billeder på din instans" }, "showVideos": { - "label": "", - "description": "" + "label": "Vis videoer", + "description": "Vis antal videoer på din instans" }, "showStorage": { - "label": "", - "description": "" + "label": "Vis lagerplads", + "description": "Vis den samlede mængde brugte lagerplads" } }, - "users": "", - "photos": "", - "videos": "", - "storage": "" + "users": "Brugere", + "photos": "Billeder", + "videos": "Videoer", + "storage": "Brugt lagerplads" }, "immich-albumCarousel": { - "name": "", + "name": "Immich album", "option": { "albumId": { - "label": "", - "description": "" + "label": "Album ID", + "description": "Dette er et unikt ID som refererer til dit Immich album. Du kan finde dette id ved at åbne et album og kopiere den unikke streng fra URL, for eksempel 'a21aca09-9f05-47dc-b1a1-7b53c547226e'" }, "rotationIntervalSeconds": { - "label": "", - "description": "" + "label": "Interval i sekunder", + "description": "Skift mellem billeder i albummet hvert X sekunder. Skal være mindst 1. Skal være under 3600." }, "showPhotoInfo": { - "label": "", - "description": "" + "label": "Vis billedinfo", + "description": "Vis dato for billedet og det aktuelle indeks i bunden af diasshowet" } }, - "description": "", - "noAlbumSelected": "", - "noPhotos": "" + "description": "Diasshow af billeder i dit Immich album", + "noAlbumSelected": "Intet album valgt, rediger widget og vælg et album", + "noPhotos": "Ingen fotos i dette album" }, "downloads": { "name": "Download Klient", @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "Skjul beskrivelse" + }, + "showPosterImage": { + "label": "Vis poster billede" } } }, @@ -2712,6 +2760,45 @@ "noItems": "Ingen notifikationer at vise.", "option": {} }, + "speedtestTracker": { + "name": "Speedtest Tracker", + "description": "Viser testresultater for hastighed fra din Speedtest Tracker instans.", + "option": { + "showLatestResult": { + "label": "Vis seneste resultat" + }, + "showStats": { + "label": "Vis gennemsnit" + }, + "showRecentResults": { + "label": "Vis seneste resultater" + }, + "showPingGraph": { + "label": "Vis ping-graf" + } + }, + "latestResult": "Seneste resultat", + "averages": "Gennemsnit", + "tests": "{count} tests", + "recentResults": "Seneste resultater", + "recentResultsSpeed": "Hastighed", + "recentResultsPing": "Ping", + "download": "Download", + "upload": "Upload", + "ping": "Ping", + "status": "Status", + "avgDownload": "Gns Download", + "avgUpload": "Gns Upload", + "avgPing": "Gns Ping", + "healthy": "Sund", + "unhealthy": "Usund", + "ok": "OK", + "fail": "Fejl", + "noSectionsEnabled": "Aktivér mindst én sektion i widget-indstillinger.", + "error": { + "internalServerError": "Kunne ikke hente hastighedstestdata" + } + }, "systemResources": { "name": "Systemressourcer", "description": "CPU, Hukommelse, Disk og andet hardwareforbrug af dit system", @@ -2725,6 +2812,7 @@ "option": { "cpu": "CPU", "memory": "Hukommelse", + "gpu": "GPU", "network": "Netværk" } }, @@ -2741,38 +2829,39 @@ "card": { "cpu": "CPU", "memory": "MEM", + "gpu": "GPU", "network": "NET", "up": "OP", "down": "NED" } }, "systemDisks": { - "name": "", - "description": "", + "name": "System diske", + "description": "Diskforbrug af dit system", "option": { "showTemperatureIfAvailable": { - "label": "" + "label": "Vis temperatur, hvis muligt" }, "displayMode": { - "label": "", + "label": "Visningstilstand", "option": { "percentage": { - "label": "" + "label": "Procentdel (f.eks. 76 %)" }, "absolute": { - "label": "" + "label": "Absolutte værdier (f.eks. 800GB / 1TB)" }, "free": { - "label": "" + "label": "Fri pladsprocent (fx, 24% fri)" } } }, "showBackgroundBar": { - "label": "" + "label": "Vis forbrugslinje i baggrunden" } }, "status": { - "unhealthy": "" + "unhealthy": "Usund" } } }, @@ -3461,10 +3550,10 @@ } }, "user": { - "title": "", + "title": "Brugere", "enableGravatar": { - "label": "", - "description": "" + "label": "Aktiver Gravatar", + "description": "Falder tilbage til brugernes avatarer fra Libravatar/Gravatar, når ingen brugerdefineret avatar er valgt og en e-mail er konfigureret" } }, "search": { @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "Status for Minecraft server" }, + "timetable": { + "label": "Tidsskema" + }, "iconsUpdater": { "label": "Opdatering Af Ikoner" }, @@ -3575,7 +3667,7 @@ "label": "Vejr" }, "tracearr": { - "label": "" + "label": "Tracearr" } }, "interval": { @@ -3698,6 +3790,10 @@ "title": "Oversættere", "subtitle": "{count} bidragende oversættere på mange sprog" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "Biblioteker", "subtitle": "{count} brugt i koden for Homarr" diff --git a/packages/translation/src/lang/de-CH.json b/packages/translation/src/lang/de-CH.json index 62b300aff..fa5931482 100644 --- a/packages/translation/src/lang/de-CH.json +++ b/packages/translation/src/lang/de-CH.json @@ -1525,6 +1525,17 @@ "offline": "" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "Notizbuch", "description": "Ein einfaches Notizbuch Widget, das Markdown unterstützt", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "", "description": "Einbetten von Inhalten aus dem Internet. Einige Websites können den Zugriff einschränken.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Geolokalisierung zulassen" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "Speicher-Info anzeigen" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "" }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "", "description": "", @@ -2725,6 +2812,7 @@ "option": { "cpu": "", "memory": "", + "gpu": "", "network": "" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "", "memory": "", + "gpu": "", "network": "", "up": "", "down": "" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "Status des Minecraft Servers" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "Symbol Updater" }, @@ -3698,6 +3790,10 @@ "title": "Übersetzer", "subtitle": "{count} tragen Übersetzungen in viele Sprachen bei" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "Bibliotheken", "subtitle": "{count} im Code von Homarr verwendet" diff --git a/packages/translation/src/lang/de.json b/packages/translation/src/lang/de.json index e5a34d96f..d46f12613 100644 --- a/packages/translation/src/lang/de.json +++ b/packages/translation/src/lang/de.json @@ -1525,6 +1525,17 @@ "offline": "Offline" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "Notizbuch", "description": "Ein einfaches Notizbuch Widget, das Markdown unterstützt", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "iFrame", "description": "Einbetten von Inhalten aus dem Internet. Einige Websites können den Zugriff einschränken.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Geolokalisierung zulassen" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "Speicher-Info anzeigen" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "Laufzeit anzeigen" }, @@ -2001,7 +2046,7 @@ "description": "", "option": { "showStreams": { - "label": "" + "label": "Aktive Streams anzeigen" }, "showStats": { "label": "" @@ -2014,7 +2059,7 @@ } }, "stats": { - "activeStreams": "", + "activeStreams": "Aktive Streams", "totalUsers": "", "transcodes": "", "bandwidth": "" @@ -2151,7 +2196,7 @@ "description": "", "option": { "showUsers": { - "label": "", + "label": "Benutzer anzeigen", "description": "" }, "showPhotos": { @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "Beschreibung ausblenden" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "Keine Benachrichtigungen zum Anzeigen.", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "Systemressourcen", "description": "CPU, Arbeitsspeicher, Festplatte und andere Hardware-Nutzung Ihres Systems", @@ -2725,6 +2812,7 @@ "option": { "cpu": "CPU", "memory": "Speicher", + "gpu": "", "network": "Netzwerk" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "CPU", "memory": "Arbeitsspeicher", + "gpu": "", "network": "Netzwerk", "up": "OBEN", "down": "UNTEN" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "Status des Minecraft Servers" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "Symbol Updater" }, @@ -3698,6 +3790,10 @@ "title": "Übersetzer", "subtitle": "{count} tragen Übersetzungen in viele Sprachen bei" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "Bibliotheken", "subtitle": "{count} im Code von Homarr verwendet" diff --git a/packages/translation/src/lang/el.json b/packages/translation/src/lang/el.json index ea7862559..9a15d93b9 100644 --- a/packages/translation/src/lang/el.json +++ b/packages/translation/src/lang/el.json @@ -1525,6 +1525,17 @@ "offline": "" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "Σημειωματάριο", "description": "", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "iframe", "description": "Ενσωματώστε οποιοδήποτε περιεχόμενο από το διαδίκτυο. Ορισμένοι ιστότοποι ενδέχεται να περιορίζουν την πρόσβαση.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Επιτρέπεται ο γεωεντοπισμός" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "Εμφάνιση Πληροφοριών Μνήμης" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "" }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "", "description": "", @@ -2725,6 +2812,7 @@ "option": { "cpu": "", "memory": "", + "gpu": "", "network": "" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "", "memory": "", + "gpu": "", "network": "", "up": "", "down": "" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "" }, @@ -3698,6 +3790,10 @@ "title": "", "subtitle": "" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "", "subtitle": "" diff --git a/packages/translation/src/lang/en-gb.json b/packages/translation/src/lang/en-gb.json index ae9fbfe1f..2e276bb37 100644 --- a/packages/translation/src/lang/en-gb.json +++ b/packages/translation/src/lang/en-gb.json @@ -1525,6 +1525,17 @@ "offline": "Offline" } }, + "timetable": { + "name": "Timetable", + "description": "Displays departure times for a station", + "title": "Departures {station}", + "noStation": "No station selected", + "option": { + "station": { + "label": "Station" + } + } + }, "notebook": { "name": "Notebook", "description": "A simple notebook widget that supports markdown", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "Anchor Note", + "description": "Displays a selected note from Anchor", + "option": { + "noteId": { + "label": "Note" + }, + "showTitle": { + "label": "Show title" + }, + "showUpdatedAt": { + "label": "Show last updated" + } + }, + "empty": "Select a note to display", + "emptyContent": "This note has no content", + "notFound": "Note not found", + "noNotes": "No notes found", + "integrationRequired": "Select an Anchor integration first", + "updatedAt": "Updated {date}", + "untitled": "Untitled", + "edit": "Edit", + "save": "Save", + "cancel": "Cancel", + "readOnlyViewer": "You have viewer access to this note. Editing is disabled.", + "saveForbidden": "You do not have permission to edit this note.", + "saveFailed": "Failed to save this note. Please try again." + }, "iframe": { "name": "iFrame", "description": "Embed any content from the Internet. Some websites may restrict access.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Allow geolocation" + }, + "allowModals": { + "label": "Allow modals" } }, "error": { @@ -1689,448 +1731,451 @@ "label": "3 Months" }, "6mo": { - "label": "" + "label": "6 Months" }, "ytd": { - "label": "" + "label": "Year to Date" }, "1y": { - "label": "" + "label": "1 Year" }, "2y": { - "label": "" + "label": "2 Years" }, "5y": { - "label": "" + "label": "5 Years" }, "10y": { - "label": "" + "label": "10 Years" }, "max": { - "label": "" + "label": "Max" } } }, "timeInterval": { - "label": "", + "label": "Time Interval", "option": { "5m": { - "label": "" + "label": "5 Minutes" }, "15m": { - "label": "" + "label": "15 Minutes" }, "30m": { - "label": "" + "label": "30 Minutes" }, "1h": { - "label": "" + "label": "1 Hour" }, "1d": { - "label": "" + "label": "1 Day" }, "5d": { - "label": "" + "label": "5 Days" }, "1wk": { - "label": "" + "label": "1 Week" }, "1mo": { - "label": "" + "label": "1 Month" } } } } }, "calendar": { - "name": "", - "description": "", + "name": "Calendar", + "description": "Display events from your integrations in a calendar view within a certain relative time period", "duration": { - "allDay": "" + "allDay": "All day" }, "option": { "releaseType": { - "label": "", + "label": "Radarr release type", "options": { - "inCinemas": "", - "digitalRelease": "", - "physicalRelease": "" + "inCinemas": "In cinemas", + "digitalRelease": "Digital release", + "physicalRelease": "Physical release" } }, "filterPastMonths": { - "label": "" + "label": "Start from" }, "filterFutureMonths": { - "label": "" + "label": "End at" }, "showUnmonitored": { - "label": "" + "label": "Show unmonitored" } } }, "weather": { - "name": "", - "description": "", + "name": "Weather", + "description": "Displays the current weather information of a set location.", "option": { "isFormatFahrenheit": { - "label": "" + "label": "Temperature in Fahrenheit" }, "disableTemperatureDecimals": { - "label": "" + "label": "Disable temperature decimals" }, "showCurrentWindSpeed": { - "label": "", - "description": "" + "label": "Show current wind speed", + "description": "Only on current weather" }, "useImperialSpeed": { - "label": "" + "label": "Use mph for windspeed" }, "location": { - "label": "" + "label": "Weather location" }, "showCity": { - "label": "" + "label": "Show city" }, "hasForecast": { - "label": "" + "label": "Show forecast" }, "forecastDayCount": { - "label": "", - "description": "" + "label": "Amount of forecast days", + "description": "When the widget is not wide enough, less days are shown" }, "dateFormat": { - "label": "", - "description": "" + "label": "Date Format", + "description": "How the date should look like" } }, - "currentWindSpeed": "", + "currentWindSpeed": "{currentWindSpeed} {unit}", "dailyForecast": { - "sunrise": "", - "sunset": "", - "maxWindSpeed": "", - "maxWindGusts": "" + "sunrise": "Sunrise", + "sunset": "Sunset", + "maxWindSpeed": "Max wind speed: {maxWindSpeed} {unit}", + "maxWindGusts": "Max wind gusts: {maxWindGusts} {unit}" }, "kind": { - "clear": "", - "mainlyClear": "", - "fog": "", - "drizzle": "", - "freezingDrizzle": "", + "clear": "Clear", + "mainlyClear": "Mainly clear", + "fog": "Fog", + "drizzle": "Drizzle", + "freezingDrizzle": "Freezing drizzle", "rain": "Rain", "freezingRain": "Freezing rain", "snowFall": "Snow fall", - "snowGrains": "", - "rainShowers": "", - "snowShowers": "", - "thunderstorm": "", - "thunderstormWithHail": "", - "unknown": "" + "snowGrains": "Snow grains", + "rainShowers": "Rain showers", + "snowShowers": "Snow showers", + "thunderstorm": "Thunderstorm", + "thunderstormWithHail": "Thunderstorm with hail", + "unknown": "Unknown" } }, "indexerManager": { - "name": "", - "description": "", + "name": "Indexer manager status", + "description": "Status of your indexers", "option": { "openIndexerSiteInNewTab": { - "label": "" + "label": "Open indexer site in new tab" } }, - "title": "", - "testAll": "", + "title": "Indexer manager", + "testAll": "Test all", "error": { - "internalServerError": "" + "internalServerError": "Failed to fetch indexers status" } }, "healthMonitoring": { - "name": "", - "description": "", + "name": "System Health Monitoring", + "description": "Displays information showing the health and status of your system(s).", "tab": { - "system": "", - "cluster": "" + "system": "System", + "cluster": "Cluster" }, "option": { "fahrenheit": { - "label": "" + "label": "CPU Temp in Fahrenheit" }, "cpu": { - "label": "" + "label": "Show CPU Info" }, "memory": { - "label": "" + "label": "Show Memory Info" + }, + "gpu": { + "label": "Show GPU Info" }, "showUptime": { - "label": "" + "label": "Show Uptime" }, "fileSystem": { - "label": "" + "label": "Show Filesystem Info" }, "defaultTab": { - "label": "" + "label": "Default tab" }, "visibleClusterSections": { - "label": "" + "label": "Visible cluster sections" }, "sectionIndicatorRequirement": { - "label": "" + "label": "Section indicator requirement" } }, "popover": { - "information": "", - "processor": "", - "memory": "", - "memoryAvailable": "", - "version": "", - "uptime": "", - "loadAverage": "", - "minute": "", - "minutes": "", - "used": "", - "available": "", - "lastSeen": "" + "information": "Information", + "processor": "Processor: {cpuModelName}", + "memory": "Memory: {memory}GiB", + "memoryAvailable": "Available: {memoryAvailable}GiB ({percent}%)", + "version": "Version: {version}", + "uptime": "Uptime: {months} Months, {days} Days, {hours} Hours, {minutes} Minutes", + "loadAverage": "Load average:", + "minute": "1 minute", + "minutes": "{count} minutes", + "used": "Used", + "available": "Available", + "lastSeen": "Last status update: {lastSeen}" }, "memory": {}, "error": { - "internalServerError": "" + "internalServerError": "Failed to fetch health status" }, "cluster": { "summary": { - "cpu": "", - "memory": "" + "cpu": "CPU", + "memory": "RAM" }, "resource": { "node": { - "name": "" + "name": "Nodes" }, "qemu": { - "name": "" + "name": "VMs" }, "lxc": { - "name": "" + "name": "LXCs" }, "storage": { - "name": "" + "name": "Storage" } }, "popover": { "rightSection": { - "node": "", - "vmId": "", - "plugin": "" + "node": "Node", + "vmId": "VM ID", + "plugin": "Plugin" }, "detail": { - "cpu": "", - "memory": "", - "storage": "", - "uptime": "", - "haState": "", + "cpu": "Cores", + "memory": "Memory", + "storage": "Storage", + "uptime": "Uptime", + "haState": "HA State", "storageType": { - "local": "", - "shared": "" + "local": "Local storage", + "shared": "Shared storage" } } }, "table": { "header": { - "name": "", - "cpu": "", - "memory": "", - "node": "" + "name": "Name", + "cpu": "CPU", + "memory": "RAM", + "node": "Node" } } } }, "dockerContainers": { - "name": "", - "description": "", + "name": "Docker stats", + "description": "Stats of your containers (This widget can only be added with administrator privileges)", "option": { "enableRowSorting": { - "label": "" + "label": "Enable items sorting" }, "defaultSort": { - "label": "", + "label": "Column used for sorting by default", "option": { - "name": "", - "state": "", - "cpuUsage": "", - "memoryUsage": "" + "name": "Name", + "state": "State", + "cpuUsage": "CPU usage", + "memoryUsage": "Memory usage" } }, "descendingDefaultSort": { - "label": "" + "label": "Invert sorting" } }, "error": { - "internalServerError": "" + "internalServerError": "Failed to fetch containers stats" } }, "coolify": { - "name": "", - "description": "", + "name": "Coolify", + "description": "Overview of your Coolify instance with servers and applications", "option": { "showServers": { - "label": "" + "label": "Show servers" }, "showApplications": { - "label": "" + "label": "Show applications" }, "showServices": { - "label": "" + "label": "Show services" } }, "empty": { - "servers": "", - "applications": "", - "services": "" + "servers": "No servers found", + "applications": "No applications found", + "services": "No services found" }, "footer": { - "updated": "" + "updated": "Updated {when}" }, "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "No Coolify integration configured", + "internalServerError": "Failed to fetch Coolify data" }, "server": { - "buildServer": "" + "buildServer": "Build" }, "instances": { - "title": "" + "title": "Instances" } }, "tracearr": { - "name": "", - "description": "", + "name": "Tracearr", + "description": "Enhanced media server monitoring with detailed stream and transcoding data", "option": { "showStreams": { - "label": "" + "label": "Show active streams" }, "showStats": { - "label": "" + "label": "Show stats summary" }, "showRecentActivity": { - "label": "" + "label": "Show recent activity" }, "showViolations": { - "label": "" + "label": "Show violations" } }, "stats": { - "activeStreams": "", - "totalUsers": "", - "transcodes": "", - "bandwidth": "" + "activeStreams": "Active Streams", + "totalUsers": "Total Users", + "transcodes": "Transcodes", + "bandwidth": "Bandwidth" }, "streams": { - "empty": "", - "user": "", - "media": "", - "state": "", - "quality": "", - "device": "", - "progress": "", + "empty": "No active streams", + "user": "User", + "media": "Media", + "state": "State", + "quality": "Quality", + "device": "Device", + "progress": "Progress", "videoDecision": { - "directPlay": "", - "transcode": "", - "directStream": "" + "directPlay": "Direct Play", + "transcode": "Transcode", + "directStream": "Direct Stream" } }, "recentActivity": { - "title": "", - "empty": "", - "watched": "", - "partial": "" + "title": "Recent Activity", + "empty": "No recent activity", + "watched": "Watched", + "partial": "Partial" }, "violations": { - "title": "", - "empty": "", - "rule": "", - "user": "" + "title": "Violations", + "empty": "No recent violations", + "rule": "Rule", + "user": "User" }, - "noSectionsEnabled": "", + "noSectionsEnabled": "No sections enabled", "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "No Tracearr integration configured", + "internalServerError": "Failed to fetch Tracearr data" } }, "common": { "location": { - "query": "", - "latitude": "", - "longitude": "", - "disabledTooltip": "", - "unknownLocation": "", - "search": "", + "query": "City / Postal code", + "latitude": "Latitude", + "longitude": "Longitude", + "disabledTooltip": "Please enter a city or postal code", + "unknownLocation": "Unknown location", + "search": "Search", "table": { "header": { - "city": "", - "country": "", - "coordinates": "", - "population": "" + "city": "City", + "country": "Country", + "coordinates": "Coordinates", + "population": "Population" }, "action": { - "select": "" + "select": "Select {city}, {countryCode}" }, "population": { - "fallback": "" + "fallback": "Unknown" } } }, "integration": { - "noData": "", - "description": "" + "noData": "No integration found", + "description": "Click to create a new integration" }, "app": { - "noData": "", - "description": "", - "quickCreate": "" + "noData": "No app found", + "description": "Click to create a new app", + "quickCreate": "Create app on the fly" }, "error": { - "noIntegration": "", - "noData": "" + "noIntegration": "No integration selected", + "noData": "No integration data available" }, "option": {} }, "video": { - "name": "", - "description": "", + "name": "Video Stream", + "description": "Embed a video stream or video from a camera or a website", "option": { "feedUrl": { - "label": "" + "label": "Feed URL" }, "hasAutoPlay": { - "label": "", - "description": "" + "label": "Autoplay", + "description": "Autoplay only works when muted because of browser restrictions" }, "isMuted": { - "label": "" + "label": "Muted" }, "hasControls": { - "label": "" + "label": "Show controls" } }, "error": { - "noUrl": "", - "forYoutubeUseIframe": "" + "noUrl": "No Video URL provided", + "forYoutubeUseIframe": "For YouTube videos use the iframe option" } }, "mediaServer": { - "name": "", - "description": "", + "name": "Current media server streams", + "description": "Show the current streams on your media servers", "option": { "showOnlyPlaying": { - "label": "", - "description": "" + "label": "Show only currently playing", + "description": "Disabling this will not work for Plex" } }, "items": { - "currentlyPlaying": "", - "user": "", - "name": "", - "id": "", + "currentlyPlaying": "Currently playing", + "user": "User", + "name": "Name", + "id": "Id", "metadata": { - "title": "", + "title": "Stats for nerds", "video": { - "title": "", - "resolution": "" + "title": "Video", + "resolution": "Resolution" }, "audio": { "title": "", @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "", "description": "", @@ -2725,6 +2812,7 @@ "option": { "cpu": "", "memory": "", + "gpu": "", "network": "" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "", "memory": "", + "gpu": "", "network": "", "up": "", "down": "" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "" }, @@ -3698,6 +3790,10 @@ "title": "", "subtitle": "" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "", "subtitle": "" @@ -4313,13 +4409,13 @@ } }, "newUser": { - "label": "" + "label": "Create a new user" }, "newInvite": { - "label": "" + "label": "Create a new invite" }, "newGroup": { - "label": "" + "label": "Create a new group" } } } @@ -4362,12 +4458,12 @@ "description": "" }, "torrent": { - "name": "", - "description": "" + "name": "Torrents", + "description": "Search for torrents on torrentdownloads.pro" }, "youTube": { - "name": "", - "description": "" + "name": "YouTube", + "description": "Search for videos on YouTube" } } } @@ -4376,19 +4472,19 @@ "help": { "group": { "mode": { - "title": "" + "title": "Modes" }, "help": { - "title": "", + "title": "Help", "option": { "documentation": { - "label": "" + "label": "Documentation" }, "submitIssue": { - "label": "" + "label": "Submit an issue" }, "discord": { - "label": "" + "label": "Community Discord" } } } @@ -4397,20 +4493,20 @@ "home": { "group": { "search": { - "title": "", + "title": "Search", "option": { "other": { - "label": "" + "label": "Search with another search engine" }, "no-default": { - "label": "", - "description": "" + "label": "No default search engine", + "description": "Set a default search engine in preferences" }, "search": { - "label": "" + "label": "Search for \"{query}\" with {name}" }, "from-integration": { - "description": "" + "description": "Start typing to search" } } }, diff --git a/packages/translation/src/lang/en.json b/packages/translation/src/lang/en.json index 77d37810f..817abb3f8 100644 --- a/packages/translation/src/lang/en.json +++ b/packages/translation/src/lang/en.json @@ -1525,6 +1525,17 @@ "offline": "Offline" } }, + "timetable": { + "name": "Timetable", + "description": "Displays departure times for a station", + "title": "Departures {station}", + "noStation": "No station selected", + "option": { + "station": { + "label": "Station" + } + } + }, "notebook": { "name": "Notebook", "description": "A simple notebook widget that supports markdown", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "Anchor Note", + "description": "Displays a selected note from Anchor", + "option": { + "noteId": { + "label": "Note" + }, + "showTitle": { + "label": "Show title" + }, + "showUpdatedAt": { + "label": "Show last updated" + } + }, + "empty": "Select a note to display", + "emptyContent": "This note has no content", + "notFound": "Note not found", + "noNotes": "No notes found", + "integrationRequired": "Select an Anchor integration first", + "updatedAt": "Updated {date}", + "untitled": "Untitled", + "edit": "Edit", + "save": "Save", + "cancel": "Cancel", + "readOnlyViewer": "You have viewer access to this note. Editing is disabled.", + "saveForbidden": "You do not have permission to edit this note.", + "saveFailed": "Failed to save this note. Please try again." + }, "iframe": { "name": "iFrame", "description": "Embed any content from the internet. Some websites may restrict access.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Allow geolocation" + }, + "allowModals": { + "label": "Allow modals" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "Show Memory Info" }, + "gpu": { + "label": "Show GPU Info" + }, "showUptime": { "label": "Show Uptime" }, @@ -2033,7 +2078,6 @@ "directStream": "Direct Stream" } }, - "recentActivity": { "title": "Recent Activity", "empty": "No recent activity", @@ -2500,6 +2544,9 @@ }, "hideDescription": { "label": "Hide description" + }, + "showPosterImage": { + "label": "Show poster image" } } }, @@ -2713,6 +2760,45 @@ "noItems": "No notifications to display.", "option": {} }, + "speedtestTracker": { + "name": "Speedtest Tracker", + "description": "Displays speed test results from your Speedtest Tracker instance.", + "option": { + "showLatestResult": { + "label": "Show latest result" + }, + "showStats": { + "label": "Show averages" + }, + "showRecentResults": { + "label": "Show recent results" + }, + "showPingGraph": { + "label": "Show ping graph" + } + }, + "latestResult": "Latest Result", + "averages": "Averages", + "tests": "{count} tests", + "recentResults": "Recent Results", + "recentResultsSpeed": "Speed", + "recentResultsPing": "Ping", + "download": "Download", + "upload": "Upload", + "ping": "Ping", + "status": "Status", + "avgDownload": "Avg Download", + "avgUpload": "Avg Upload", + "avgPing": "Avg Ping", + "healthy": "Healthy", + "unhealthy": "Unhealthy", + "ok": "OK", + "fail": "Fail", + "noSectionsEnabled": "Enable at least one section in widget options.", + "error": { + "internalServerError": "Failed to fetch speedtest data" + } + }, "systemResources": { "name": "System resources", "description": "CPU, Memory, Disk and other hardware usage of your system", @@ -2726,6 +2812,7 @@ "option": { "cpu": "CPU", "memory": "Memory", + "gpu": "GPU", "network": "Network" } }, @@ -2742,6 +2829,7 @@ "card": { "cpu": "CPU", "memory": "MEM", + "gpu": "GPU", "network": "NET", "up": "UP", "down": "DOWN" @@ -3506,6 +3594,9 @@ "minecraftServerStatus": { "label": "Minecraft server status" }, + "timetable": { + "label": "Timetable" + }, "iconsUpdater": { "label": "Icons Updater" }, @@ -3699,6 +3790,10 @@ "title": "Translators", "subtitle": "{count} contributing translations in many languages" }, + "sponsors": { + "title": "Sponsors", + "subtitle": "{count} supporting the project financially" + }, "libraries": { "title": "Libraries", "subtitle": "{count} used in the Code of Homarr" diff --git a/packages/translation/src/lang/es.json b/packages/translation/src/lang/es.json index 507c4630f..5ec0b8573 100644 --- a/packages/translation/src/lang/es.json +++ b/packages/translation/src/lang/es.json @@ -1525,6 +1525,17 @@ "offline": "Desconectado" } }, + "timetable": { + "name": "Horarios de estación", + "description": "Muestra los horarios de salida de una estación", + "title": "Salidas {station}", + "noStation": "No se ha seleccionado ninguna integración", + "option": { + "station": { + "label": "Estación" + } + } + }, "notebook": { "name": "Bloc de notas", "description": "Un widget de bloc de notas sencillo que soporta Markdown", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "Nota de Anchor", + "description": "Muestra una nota seleccionada de Anchor", + "option": { + "noteId": { + "label": "Nota" + }, + "showTitle": { + "label": "Mostrar título" + }, + "showUpdatedAt": { + "label": "Mostrar última actualización" + } + }, + "empty": "Selecciona una nota para mostrar", + "emptyContent": "Esta nota no tiene contenido", + "notFound": "No se encontró la nota", + "noNotes": "No se encontraron notas", + "integrationRequired": "Selecciona primero una integración de Anchor", + "updatedAt": "Actualizado a {date}", + "untitled": "Sin título", + "edit": "Editar", + "save": "Guardar", + "cancel": "Cancelar", + "readOnlyViewer": "Solo tienes acceso de lectura para esta nota.", + "saveForbidden": "No tienes permiso para editar esta nota.", + "saveFailed": "Error al guardar esta nota. Por favor, inténtalo de nuevo." + }, "iframe": { "name": "iFrame", "description": "Incrusta cualquier contenido de Internet. Algunos sitios web pueden restringir el acceso.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Permitir geolocalización" + }, + "allowModals": { + "label": "Permitir modales" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "Mostrar información de la memoria" }, + "gpu": { + "label": "Mostrar Información de GPU" + }, "showUptime": { "label": "Mostrar tiempo de actividad" }, @@ -1997,58 +2042,58 @@ } }, "tracearr": { - "name": "", - "description": "", + "name": "Tracearr", + "description": "Monitoreo de servidores multimedia mejorado con información detallada de flujo y transcodificación", "option": { "showStreams": { - "label": "" + "label": "Mostrar flujos activos" }, "showStats": { - "label": "" + "label": "Mostrar resumen de estadísticas" }, "showRecentActivity": { - "label": "" + "label": "Mostrar actividad reciente" }, "showViolations": { - "label": "" + "label": "Mostrar infracciones" } }, "stats": { - "activeStreams": "", - "totalUsers": "", - "transcodes": "", - "bandwidth": "" + "activeStreams": "Flujos activos", + "totalUsers": "Usuarios totales", + "transcodes": "Transcodificaciones", + "bandwidth": "Ancho de banda" }, "streams": { - "empty": "", - "user": "", - "media": "", - "state": "", - "quality": "", - "device": "", - "progress": "", + "empty": "No hay flujos activos", + "user": "Usuario", + "media": "Medio", + "state": "Estado", + "quality": "Calidad", + "device": "Dispositivo", + "progress": "Progreso", "videoDecision": { - "directPlay": "", - "transcode": "", - "directStream": "" + "directPlay": "Reproducción directa", + "transcode": "Transcodificación", + "directStream": "Flujo directo" } }, "recentActivity": { - "title": "", - "empty": "", - "watched": "", - "partial": "" + "title": "Actividad reciente", + "empty": "Sin actividad reciente", + "watched": "Visto", + "partial": "Parcial" }, "violations": { - "title": "", - "empty": "", - "rule": "", - "user": "" + "title": "Infracciones", + "empty": "Sin infracciones recientes", + "rule": "Regla", + "user": "Usuario" }, - "noSectionsEnabled": "", + "noSectionsEnabled": "No hay secciones habilitadas", "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "Ninguna integración de Tracearr configurada", + "internalServerError": "Error al obtener los datos de Tracearr" } }, "common": { @@ -2147,50 +2192,50 @@ } }, "immich-serverStats": { - "name": "", - "description": "", + "name": "Estadísticas del servidor Immich", + "description": "Información del servidor Immich", "option": { "showUsers": { - "label": "", - "description": "" + "label": "Mostrar usuarios", + "description": "Mostrar el número de usuarios del servidor" }, "showPhotos": { - "label": "", - "description": "" + "label": "Mostrar fotos", + "description": "Mostrar el número de fotos del servidor" }, "showVideos": { - "label": "", - "description": "" + "label": "Mostrar vídeos", + "description": "Mostrar el número de vídeos del servidor" }, "showStorage": { - "label": "", - "description": "" + "label": "Mostrar almacenamiento", + "description": "Mostrar la cantidad total de almacenamiento usado" } }, - "users": "", - "photos": "", - "videos": "", - "storage": "" + "users": "Usuarios", + "photos": "Fotos", + "videos": "Vídeos", + "storage": "Almacenamiento usado" }, "immich-albumCarousel": { - "name": "", + "name": "Álbum de Immich", "option": { "albumId": { - "label": "", - "description": "" + "label": "ID de álbum", + "description": "Este es un identificador único que se refiere a un álbum de Immich. Puedes encontrarlo abriendo un álbum y copiando el ID que se muestra en la URL. Como por ejemplo: 'a21aca09-9f05-47dc-b1a1-7b53c547226e'" }, "rotationIntervalSeconds": { - "label": "", - "description": "" + "label": "Intervalo de actualización en segundos", + "description": "Intervalo de actualización en segundos entre las fotos del álbum. El rango debe estar entre 1 y 3600 segundos, ambos incluidos." }, "showPhotoInfo": { - "label": "", - "description": "" + "label": "Mostrar información de la foto", + "description": "Mostrar la fecha y el índice actual de la foto en la parte inferior de la presentación" } }, - "description": "", - "noAlbumSelected": "", - "noPhotos": "" + "description": "Presentación de fotos de un álbum de Immich", + "noAlbumSelected": "No se ha seleccionado ningún álbum. Edita el widget y selecciona uno.", + "noPhotos": "No hay fotos en este álbum" }, "downloads": { "name": "Cliente de descarga", @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "Ocultar descripción" + }, + "showPosterImage": { + "label": "Mostrar imagen del póster" } } }, @@ -2712,6 +2760,45 @@ "noItems": "Ninguna notificación para mostrar.", "option": {} }, + "speedtestTracker": { + "name": "Speedtest Tracker", + "description": "Muestra los resultados de tu instancia de Speedtest Tracker.", + "option": { + "showLatestResult": { + "label": "Mostrar último resultado" + }, + "showStats": { + "label": "Mostrar promedios" + }, + "showRecentResults": { + "label": "Mostrar resultados recientes" + }, + "showPingGraph": { + "label": "Mostrar gráfico de latencia" + } + }, + "latestResult": "Último resultado", + "averages": "Promedios", + "tests": "{count} pruebas", + "recentResults": "Resultados recientes", + "recentResultsSpeed": "Velocidad", + "recentResultsPing": "Latencia", + "download": "Descarga", + "upload": "Subida", + "ping": "Latencia", + "status": "Estado", + "avgDownload": "Descarga promedio", + "avgUpload": "Subida promedio", + "avgPing": "Latencia promedio", + "healthy": "Buen estado", + "unhealthy": "Mal estado", + "ok": "Correcto", + "fail": "Fallido", + "noSectionsEnabled": "Habilitar al menos una sección en las opciones del widget.", + "error": { + "internalServerError": "Error al obtener los datos del test de velocidad" + } + }, "systemResources": { "name": "Recursos del sistema", "description": "CPU, Memoria, Disco y otro uso de hardware de su sistema", @@ -2725,6 +2812,7 @@ "option": { "cpu": "CPU", "memory": "Memoria", + "gpu": "GPU", "network": "Red" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "CPU", "memory": "MEM", + "gpu": "GPU", "network": "RED", "up": "ENCENDIDO", "down": "APAGADO" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "Estado del Servidor de Minecraft" }, + "timetable": { + "label": "Horarios de estación" + }, "iconsUpdater": { "label": "Actualizador de iconos" }, @@ -3575,7 +3667,7 @@ "label": "Tiempo" }, "tracearr": { - "label": "" + "label": "Tracearr" } }, "interval": { @@ -3698,6 +3790,10 @@ "title": "Traductores", "subtitle": "{count} contribuyendo con las traducciones en muchos idiomas" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "Librerías", "subtitle": "{count} usadas en el Código de Homarr" diff --git a/packages/translation/src/lang/et.json b/packages/translation/src/lang/et.json index 2bab54e1e..3f4b529f7 100644 --- a/packages/translation/src/lang/et.json +++ b/packages/translation/src/lang/et.json @@ -1525,6 +1525,17 @@ "offline": "" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "", "description": "", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "", "description": "", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "" }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "", "description": "", @@ -2725,6 +2812,7 @@ "option": { "cpu": "", "memory": "", + "gpu": "", "network": "" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "", "memory": "", + "gpu": "", "network": "", "up": "", "down": "" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "" }, @@ -3698,6 +3790,10 @@ "title": "", "subtitle": "" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "", "subtitle": "" diff --git a/packages/translation/src/lang/fr.json b/packages/translation/src/lang/fr.json index d66bf74c0..aba3a3589 100644 --- a/packages/translation/src/lang/fr.json +++ b/packages/translation/src/lang/fr.json @@ -27,7 +27,7 @@ "description": "Configurer le comportement d'importation" }, "boardSelection": { - "title": "Tableaux {count} trouvés", + "title": "{count} tableaux trouvés", "description": "Choisissez tous les tableaux avec la taille que vous souhaitez importer", "action": { "selectAll": "Tout sélectionner", @@ -114,7 +114,7 @@ }, "invite": { "title": "Rejoignez Homarr", - "subtitle": "Bienvenue sur Homarr! Veuillez créer votre compte", + "subtitle": "Bienvenue sur Homarr ! Veuillez créer votre compte", "description": "Vous avez été invité par {username}" }, "init": { @@ -177,7 +177,7 @@ } }, "forgotPassword": { - "label": "Mot de passe oublié?", + "label": "Mot de passe oublié ?", "description": "Un administrateur peut utiliser la commande suivante pour réinitialiser votre mot de passe :" } }, @@ -578,7 +578,7 @@ }, "delete": { "title": "Supprimer l'app", - "message": "Êtes-vous sûr de vouloir supprimer l'app {name}?", + "message": "Êtes-vous sûr de vouloir supprimer l'app {name} ?", "notification": { "success": { "title": "Suppression effectuée avec succès", @@ -684,7 +684,7 @@ }, "delete": { "title": "Supprimer l'intégration", - "message": "Êtes-vous sûr(e) de vouloir supprimer l'intégration {name}?", + "message": "Êtes-vous sûr(e) de vouloir supprimer l'intégration {name} ?", "notification": { "success": { "title": "Suppression réussie", @@ -742,7 +742,7 @@ "description": "La réponse n'a pas pu être analysée. Veuillez vérifier que l'URL pointe vers l'URL de base du service." }, "authorization": { - "title": "", + "title": "Erreur d'autorisation", "description": "La requête n'a pas été autorisée. Veuillez vérifier que les informations d'identification sont correctes et que vous les avez configurées avec suffisamment d'autorisations." }, "statusCode": { @@ -794,7 +794,7 @@ "hostnameMismatch": { "confirm": { "title": "Faire confiant à l'incohérence du nom d'hôte", - "message": "" + "message": "Êtes-vous sûr de vouloir faire confiance ce certificat avec un nom d'hôte incohérent ?" }, "notification": { "success": { @@ -1164,8 +1164,8 @@ "number": "Ce champ doit être inférieur ou égal à {maximum}" }, "custom": { - "passwordsDoNotMatch": "Les mots de passe ne correspondent pas.", - "passwordRequirements": "Le mot de passe ne respecte pas les exigences requises.", + "passwordsDoNotMatch": "Les mots de passe ne correspondent pas", + "passwordRequirements": "Le mot de passe ne respecte pas les exigences requises", "boardAlreadyExists": "Un tableau avec ce nom existe déjà", "invalidFileType": "Type de fichier invalide, {expected} attendu", "invalidFileName": "Nom de fichier invalide", @@ -1248,7 +1248,7 @@ "action": { "create": "Nouvel élément", "import": "Importer un élément", - "edit": "Editer l'élément", + "edit": "Éditer l'élément", "moveResize": "Déplacer / redimensionner l'élément", "duplicate": "Dupliquer l'élément", "remove": "Supprimer l'élément" @@ -1281,7 +1281,7 @@ } }, "edit": { - "title": "Editer l'élément", + "title": "Éditer l'élément", "advancedOptions": { "label": "Options avancées", "title": "Options avancées de l'élément" @@ -1309,7 +1309,7 @@ "widget": { "app": { "name": "App", - "description": "Intégre une application dans le tableau.", + "description": "Intègre une application dans le tableau.", "option": { "appId": { "label": "Choisir une application" @@ -1525,6 +1525,17 @@ "offline": "Hors ligne" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "Bloc-notes", "description": "Un simple widget bloc-notes qui supporte le markdown", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "iFrame", "description": "Intégrer n'importe quel contenu à partir d'Internet. Certains sites Web peuvent restreindre l'accès.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Autoriser la géolocalisation" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1634,7 +1676,7 @@ } }, "smartHome-entityState": { - "name": "Etat de l'entité", + "name": "État de l'entité", "description": "Affichez l'état d'une entité et optionnellement activez la", "option": { "entityId": { @@ -1858,6 +1900,9 @@ "memory": { "label": "Afficher les infos de la mémoire" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "Afficher le temps de disponibilité" }, @@ -1877,16 +1922,16 @@ "popover": { "information": "Information", "processor": "Processeur : {cpuModelName}", - "memory": "Mémoire: {memory}GiB", - "memoryAvailable": "Disponible: {memoryAvailable}GiB ({percent}%)", + "memory": "Mémoire : {memory}GiB", + "memoryAvailable": "Disponible : {memoryAvailable}GiB ({percent}%)", "version": "Version : {version}", - "uptime": "Disponibilité: {months} Mois, {days} Jours, {hours} Heures, {minutes} Minutes", - "loadAverage": "Charge moyenne:", + "uptime": "Disponibilité : {months} Mois, {days} Jours, {hours} Heures, {minutes} Minutes", + "loadAverage": "Charge moyenne :", "minute": "1 minute", "minutes": "{count} minutes", "used": "Utilisé ", "available": "Disponible", - "lastSeen": "Dernière mise à jour de statut: {lastSeen}" + "lastSeen": "Dernière mise à jour de statut : {lastSeen}" }, "memory": {}, "error": { @@ -1922,7 +1967,7 @@ "memory": "Mémoire", "storage": "Stockage", "uptime": "Disponibilité", - "haState": "Etat HA", + "haState": "État HA", "storageType": { "local": "Stockage local", "shared": "Stockage partagé" @@ -1997,36 +2042,36 @@ } }, "tracearr": { - "name": "", - "description": "", + "name": "Tracearr", + "description": "Surveillance avancée du serveur multimédia avec des données détaillées de flux et de transcodage", "option": { "showStreams": { "label": "" }, "showStats": { - "label": "" + "label": "Afficher le résumé des statistiques" }, "showRecentActivity": { - "label": "" + "label": "Afficher l'activité récente" }, "showViolations": { - "label": "" + "label": "Afficher les violations" } }, "stats": { "activeStreams": "", - "totalUsers": "", + "totalUsers": "Utilisateurs totaux", "transcodes": "", - "bandwidth": "" + "bandwidth": "Bande passante" }, "streams": { "empty": "", - "user": "", - "media": "", + "user": "Utilisateur", + "media": "Média", "state": "", - "quality": "", - "device": "", - "progress": "", + "quality": "Qualité", + "device": "Appareil", + "progress": "Progression", "videoDecision": { "directPlay": "", "transcode": "", @@ -2034,21 +2079,21 @@ } }, "recentActivity": { - "title": "", - "empty": "", + "title": "Activité récente", + "empty": "Aucune activité récente", "watched": "", "partial": "" }, "violations": { - "title": "", - "empty": "", - "rule": "", - "user": "" + "title": "Violations", + "empty": "Aucune violation récente", + "rule": "Règle", + "user": "Utilisateur" }, "noSectionsEnabled": "", "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "Aucune intégration Tracearr configurée", + "internalServerError": "Impossible de récupérer les données de Tracearr" } }, "common": { @@ -2056,7 +2101,7 @@ "query": "Ville / Code Postal", "latitude": "Latitude", "longitude": "Longitude", - "disabledTooltip": "Veuillez saisir une ville ou un code postal.", + "disabledTooltip": "Veuillez saisir une ville ou un code postal", "unknownLocation": "Lieu inconnu", "search": "Rechercher", "table": { @@ -2075,7 +2120,7 @@ } }, "integration": { - "noData": "Aucune intégration trouvée.", + "noData": "Aucune intégration trouvée", "description": "Cliquez sur pour créer une nouvelle intégration" }, "app": { @@ -2091,7 +2136,7 @@ }, "video": { "name": "Flux vidéo", - "description": "Intégre un flux vidéo ou une vidéo provenant d'une caméra ou d'un site web", + "description": "Intègre un flux vidéo ou une vidéo provenant d'une caméra ou d'un site web", "option": { "feedUrl": { "label": "URL du flux" @@ -2104,7 +2149,7 @@ "label": "Muet" }, "hasControls": { - "label": "Afficher les controles" + "label": "Afficher les contrôles" } }, "error": { @@ -2147,50 +2192,50 @@ } }, "immich-serverStats": { - "name": "", - "description": "", + "name": "Statistiques du serveur Immich", + "description": "Informations sur votre instance Immich", "option": { "showUsers": { - "label": "", - "description": "" + "label": "Afficher les utilisateurs", + "description": "Afficher le nombre d'utilisateurs de l'instance" }, "showPhotos": { - "label": "", - "description": "" + "label": "Afficher les photos", + "description": "Afficher le nombre de photos de l'instance" }, "showVideos": { - "label": "", - "description": "" + "label": "Afficher les vidéos", + "description": "Afficher le nombre de vidéos de l'instance" }, "showStorage": { - "label": "", - "description": "" + "label": "Affiche le stockage", + "description": "Afficher le stockage total utilisé" } }, - "users": "", - "photos": "", - "videos": "", - "storage": "" + "users": "Utilisateurs", + "photos": "Photos", + "videos": "Vidéos", + "storage": "Stockage utilisé" }, "immich-albumCarousel": { - "name": "", + "name": "Album Immich", "option": { "albumId": { - "label": "", - "description": "" + "label": "Identifiant de l'album", + "description": "C'est l'identifiant unique qui correspond à l'album Immich. Vous pouvez le trouver en ouvrant un album et copiant l'identifiant unique depuis l'URL, par exemple 'a21aca09-9f05-47dc-b1a1-7b53c547226e'" }, "rotationIntervalSeconds": { - "label": "", - "description": "" + "label": "Intervalle en secondes", + "description": "Rotation entre les images de l'album chaque X secondes. Doit être entre 1 et 3600." }, "showPhotoInfo": { - "label": "", - "description": "" + "label": "Afficher les informations de la photo", + "description": "Afficher la date et l'index de la photo en bas du diaporama" } }, - "description": "", - "noAlbumSelected": "", - "noPhotos": "" + "description": "Diaporama de photos dans votre album Immich", + "noAlbumSelected": "Aucun album sélectionné, modifier le widget et choisissez un album", + "noPhotos": "Aucune photo dans cet album" }, "downloads": { "name": "Client de téléchargement", @@ -2330,7 +2375,7 @@ "pause": "Mettre en pause l'élément", "resume": "Reprendre l'élément", "delete": { - "title": "Supprimer l'élement", + "title": "Supprimer l'élément", "modalTitle": "Êtes-vous sûr de vouloir supprimer cette tâche ?", "entry": "Supprimer l'entrée", "entryAndFiles": "Supprimer l'entrée et le(s) fichier(s)" @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "Masquer la description" + }, + "showPosterImage": { + "label": "" } } }, @@ -2542,7 +2590,7 @@ "allImagesAlreadyImported": "Toutes les images déjà importées", "onlyAdminCanImport": "Seuls les administrateurs peuvent importer depuis docker", "selectAll": "Tout sélectionner", - "deselectAll": "Tout déselectionner" + "deselectAll": "Tout désélectionner" }, "provider": { "label": "Fournisseur" @@ -2667,7 +2715,7 @@ }, "error": { "integrationsDisconnected": "Aucune donnée disponible, toutes les intégrations sont déconnectées", - "unknownContentOption": "Option de contenu inconnue pour le widget d'état du réseau: " + "unknownContentOption": "Option de contenu inconnue pour le widget d'état du réseau : " }, "name": "État du réseau", "description": "Afficher les périphériques connectés sur un réseau" @@ -2712,6 +2760,45 @@ "noItems": "Aucune notification à afficher.", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "Ressources du système", "description": "CPU, Mémoire, Disque et autre utilisation matérielle de votre système", @@ -2725,6 +2812,7 @@ "option": { "cpu": "CPU", "memory": "Mémoire", + "gpu": "", "network": "Réseau" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "CPU", "memory": "RAM", + "gpu": "", "network": "NET", "up": "UP", "down": "HORS SERVICE" @@ -2757,7 +2846,7 @@ "label": "Mode d'affichage", "option": { "percentage": { - "label": "Pourcentage (ex : 70%)" + "label": "Pourcentage (ex : 76%)" }, "absolute": { "label": "Valeurs absolues (ex. : 800 Go / 1 To)" @@ -2965,7 +3054,7 @@ }, "customCss": { "label": "CSS personnalisé pour ce tableau", - "description": "En outre, vous pouvez personnaliser votre tableau de bord à l'aide de CSS. Réservé aux utilisateurs expérimentés.", + "description": "De plus, personnalisez votre tableau de bord à l'aide de CSS, recommandé uniquement pour les utilisateurs expérimentés", "customClassesAlert": { "title": "Classes personnalisées", "description": "Vous pouvez ajouter des classes personnalisées aux éléments de votre tableau dans les options avancées de chaque élément et les utiliser dans le CSS personnalisé ci-dessus." @@ -3243,7 +3332,7 @@ "label": "Supprimer définitivement", "confirm": { "title": "Supprimer le tableau de bord", - "description": "Êtes-vous sûr de vouloir supprimer le tableau {name}?" + "description": "Êtes-vous sûr de vouloir supprimer le tableau {name} ?" } } }, @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "État du serveur Minecraft" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "Mise à jour des icônes" }, @@ -3575,7 +3667,7 @@ "label": "Météo" }, "tracearr": { - "label": "" + "label": "Tracearr" } }, "interval": { @@ -3698,6 +3790,10 @@ "title": "Traducteurs", "subtitle": "{count} ont contribué à des traductions dans de nombreuses langues" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "Bibliothèques", "subtitle": "{count} utilisés dans le Code d'Homarr" diff --git a/packages/translation/src/lang/he.json b/packages/translation/src/lang/he.json index 7e4e13549..68ff225d1 100644 --- a/packages/translation/src/lang/he.json +++ b/packages/translation/src/lang/he.json @@ -1525,6 +1525,17 @@ "offline": "לא מקוון" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "פנקס רשימות", "description": "ווידג'ט פשוט של מחברת התומך ב-markdown", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "iFrame", "description": "הטמע כל תוכן מהאינטרנט. חלק מהאתרים עשויים להגביל את הגישה.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "אפשר מיקום גיאוגרפי" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "הצג מידע זיכרון" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "הצג זמן פעולה" }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "הסתר תיאור" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "אין התראות להצגה.", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "משאבי מערכת", "description": "שימוש במעבד, זיכרון, דיסק וחומרה אחרת של המערכת שלך", @@ -2725,6 +2812,7 @@ "option": { "cpu": "מעבד", "memory": "זיכרון", + "gpu": "", "network": "רשת" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "מעבד", "memory": "זיכרון", + "gpu": "", "network": "רשת", "up": "העלאה", "down": "הורדה" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "סטטוס שרת מיינקראפט" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "עדכון אייקונים" }, @@ -3698,6 +3790,10 @@ "title": "מתרגמים", "subtitle": "{count} תורמים בתרגום לשפות שונות" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "ספריות", "subtitle": "{count} בשימוש בקוד של Homarr" diff --git a/packages/translation/src/lang/hr.json b/packages/translation/src/lang/hr.json index 513022ea1..c6b65dbbd 100644 --- a/packages/translation/src/lang/hr.json +++ b/packages/translation/src/lang/hr.json @@ -1525,6 +1525,17 @@ "offline": "" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "Bilježnica", "description": "", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "", "description": "Ugradite bilo koji sadržaj s interneta. Neke web stranice mogu ograničiti pristup.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Dopusti geolociranje" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "" }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "", "description": "", @@ -2725,6 +2812,7 @@ "option": { "cpu": "", "memory": "", + "gpu": "", "network": "" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "", "memory": "", + "gpu": "", "network": "", "up": "", "down": "" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "" }, @@ -3698,6 +3790,10 @@ "title": "", "subtitle": "" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "", "subtitle": "" diff --git a/packages/translation/src/lang/hu.json b/packages/translation/src/lang/hu.json index c0d07454b..44da07150 100644 --- a/packages/translation/src/lang/hu.json +++ b/packages/translation/src/lang/hu.json @@ -51,7 +51,7 @@ "title": "Import token megadása", "field": { "token": { - "label": "", + "label": "Token", "description": "Írja be a megjelenített import tokent az előző homarr példányból" } }, @@ -153,10 +153,10 @@ "label": "Ikonok használata a pingekhez" }, "defaultSearchEngine": { - "label": "" + "label": "Alapértelmezett kereső" }, "openSearchInNewTab": { - "label": "" + "label": "Nyissa meg a keresési eredményeket új ablakban" } }, "error": { @@ -219,10 +219,10 @@ "changeSearchPreferences": { "notification": { "success": { - "message": "" + "message": "A keresési beállítások sikeresen megváltoztak" }, "error": { - "message": "" + "message": "A keresési beállításokat nem sikerült megváltoztatni" } } }, @@ -307,12 +307,12 @@ "name": "Név", "members": "Tagok", "homeBoard": { - "label": "", - "description": "" + "label": "Főoldal", + "description": "Csak a csoport számára elérhető oldalak választhatók ki" }, "mobileBoard": { - "label": "", - "description": "" + "label": "Mobiloldal", + "description": "Csak a csoport számára elérhető oldalak választhatók ki" } }, "permission": { @@ -514,12 +514,12 @@ "board": { "notification": { "success": { - "title": "", - "message": "" + "title": "Beállítások elmentve", + "message": "Oldal beállítások sikeresen elmentve" }, "error": { - "title": "", - "message": "" + "title": "Nem sikerült menteni a beállításokat", + "message": "Az oldalbeállítások nem menthetők" } } } @@ -527,21 +527,21 @@ "changePosition": { "notification": { "success": { - "message": "" + "message": "Pozíció sikeresen megváltozott" }, "error": { - "message": "" + "message": "Pozíció nem módosítható" } } } }, "defaultGroup": { - "name": "", - "description": "" + "name": "Alapértelmezett csoport", + "description": "{name} - Minden bejelentkezett felhasználó" } }, "app": { - "search": "", + "search": "Alkalmazás megtalálása", "page": { "list": { "title": "Alkalmazások", @@ -599,12 +599,12 @@ "label": "Leírás" }, "url": { - "label": "" + "label": "Url" }, "useDifferentUrlForPing": { "checkbox": { - "label": "", - "description": "" + "label": "Más URL használata a ping-hez", + "description": "Hasznos, ha a Homarr közvetlenül, egy belső hosztnév vagy hálózaton keresztül fér hozzá, hogy elkerülje az internetszolgáltató által használt sávszélesség terhelését" } } }, @@ -612,17 +612,17 @@ "select": { "label": "Alkalmazás kiválasztása", "notFound": "Nem található alkalmazás", - "search": "", - "noResults": "", - "action": "", - "title": "" + "search": "Alkalmazás keresése", + "noResults": "Nincs találat", + "action": "Kiválasztás {app}", + "title": "Válassz egy programot az oldalhoz adáshoz" }, "create": { - "title": "", - "description": "", - "action": "" + "title": "Új alkalmazás készítése", + "description": "Új alkalmazás létrehozása ", + "action": "Alkalmazás készítő megnyitása" }, - "add": "" + "add": "Alkalmazás hozzáadása" } }, "integration": { @@ -649,14 +649,14 @@ "app": { "option": { "existing": { - "title": "", - "label": "" + "title": "Meglévő", + "label": "Meglévő alkalmazás kiválasztása" }, "new": { - "title": "", + "title": "Új", "url": { - "label": "", - "description": "" + "label": "Alkalmazás url", + "description": "Az url, amelyre az alkalmazás a műszerfalról történő eléréskor irányít" } } } @@ -676,9 +676,9 @@ }, "app": { "action": { - "add": "", - "remove": "", - "select": "" + "add": "Alkalmazás megtalálása", + "remove": "Leválasztás", + "select": "Válasszon ki egy alkalmazást a hivatkozáshoz" } } }, @@ -702,21 +702,21 @@ "label": "Név" }, "url": { - "label": "" + "label": "Url" }, "attemptSearchEngineCreation": { - "label": "", - "description": "" + "label": "Keresőmotor létrehozása", + "description": "A \"{kind}\" integráció használható a keresőmotorokkal. Jelölje be ezt a jelölőnégyzetet, ha automatikusan szeretné konfigurálni a keresőmotort." }, "app": { - "sectionTitle": "" + "sectionTitle": "Hivattkozott alkalmazás" }, "createApp": { - "label": "", - "description": "" + "label": "Alkalmazás létrehozása", + "description": "Hozzon létre egy alkalmazást, amelynek ugyanaz a neve és ikonja van, mint az integrációnak. Hagyja üresen az alábbi beviteli mezőt, hogy az alkalmazás az integrációs URL-lel jöjjön létre." }, "appHref": { - "placeholder": "" + "placeholder": "Egyéni alkalmazás URL" } }, "action": { @@ -730,125 +730,125 @@ "error": { "common": { "cause": { - "title": "" + "title": "Részletesebb leírás a problémáról" } }, "unknown": { - "title": "", - "description": "" + "title": "Ismeretlen hiba", + "description": "Egy ismeretlen hiba történt, nyissa meg a részleteket alul, hogy többet megtudjon" }, "parse": { - "title": "", - "description": "" + "title": "Elemzési hiba", + "description": "A válasz nem volt elemezhető. Kérjük, ellenőrizze, hogy az URL a szolgáltatás alap URL-jére mutat-e." }, "authorization": { - "title": "", - "description": "" + "title": "Hitelesítési hiba", + "description": "A kérés nem volt engedélyezett. Kérjük, ellenőrizze, hogy a hitelesítő adatok helyesek-e, és hogy a megfelelő engedélyekkel vannak-e beállítva." }, "statusCode": { - "title": "", - "description": "", - "otherDescription": "", + "title": "Válaszhiba", + "description": "Váratlan {statusCode} ({reason}) választ kapott a címen. Kérjük, ellenőrizze, hogy az URL az integráció alap URL-jére mutat-e.", + "otherDescription": "Váratlan {statusCode} választ kapott a címen. Kérjük, ellenőrizze, hogy az URL az integráció alap URL-jére mutat-e.", "reason": { - "badRequest": "", - "notFound": "", - "tooManyRequests": "", - "internalServerError": "", - "serviceUnavailable": "", - "gatewayTimeout": "" + "badRequest": "Hibás kérés", + "notFound": "Nem található", + "tooManyRequests": "Túl sok kérés", + "internalServerError": "Belső szerverhiba", + "serviceUnavailable": "A szolgáltatás nem elérhető", + "gatewayTimeout": "Átjáró időtúllépés" } }, "certificate": { - "title": "", + "title": "Tanúsítványhiba", "description": { - "expired": "", - "notYetValid": "", - "untrusted": "", - "hostnameMismatch": "" + "expired": "A tanúsítvány lejárt.", + "notYetValid": "A tanúsítvány még nem érvényes.", + "untrusted": "A tanúsítvány nem megbízható.", + "hostnameMismatch": "A tanúsítványban szereplő hosztnév nem egyezik meg az URL-lel." }, "alert": { "permission": { - "title": "", - "message": "" + "title": "Nincsenek megfelelő engedélyek", + "message": "Önnek nincs joga tanúsítványokat megbízhatónak nyilvánítani vagy feltölteni. Kérjük, lépjen kapcsolatba a rendszergazdájával, hogy feltölthesse a szükséges gyökér tanúsítványt." }, "hostnameMismatch": { - "title": "", - "message": "" + "title": "Állomásnév eltérés", + "message": "A tanúsítványban szereplő hosztnév nem egyezik meg azzal a hosztnévvel, amelyhez kapcsolódik. Ez biztonsági kockázatot jelezhet, de mégis dönthet úgy, hogy megbízik ebben a tanúsítványban." }, "extract": { - "title": "", - "message": "" + "title": "A tanúsító hatóság (CA) tanúsítványának kinyerése sikertelen", + "message": "Csak a lánc nélküli, önaláírt tanúsítványok tölthetők le automatikusan. Ha önaláírt tanúsítványt használ, kérjük, feltétlenül töltse fel manuálisan a tanúsító hatóság (CA) tanúsítványát. Az ehhez szükséges lépések leírását itt találja: ." } }, "action": { "retry": { - "label": "" + "label": "Újrapróbál" }, "trust": { - "label": "" + "label": "Bizalmi tanúsítvány" }, "upload": { - "label": "" + "label": "Tanúsítvány feltöltése" } }, "hostnameMismatch": { "confirm": { - "title": "", - "message": "" + "title": "Megbízható gépnév nem egyezik", + "message": "Biztosan megbízik a tanúsítványban, ha a gazdagépnév nem egyezik?" }, "notification": { "success": { - "title": "", - "message": "" + "title": "Megbízható tanúsítvány", + "message": "A gazdagépnevet felvettük a megbízható tanúsítványok listájára" }, "error": { - "title": "", - "message": "" + "title": "A tanúsítvány hitelesítése sikertelen", + "message": "A gazdagépnév-eltérés miatt a tanúsítvány nem tekinthető megbízhatónak" } } }, "selfSigned": { "confirm": { - "title": "", - "message": "" + "title": "Önaláírt tanúsítvány megbízhatósága", + "message": "Biztosan megbízik ebben az önaláírt tanúsítványban?" }, "notification": { "success": { - "title": "", - "message": "" + "title": "Megbízható tanúsítvány", + "message": "A tanúsítványt felvettük a megbízható tanúsítványok listájára" }, "error": { - "title": "", - "message": "" + "title": "Tanúsítvány hitelesítése sikertelen", + "message": "Nem sikerült hozzáadni a tanúsítványt a megbízható tanúsítványok listájához" } } }, "details": { - "title": "", - "description": "", + "title": "Részletek", + "description": "Mielőtt megbízik a tanúsítványban, ellenőrizze annak adatait.", "content": { - "action": "", - "title": "" + "action": "Tartalom megjelenítése", + "title": "PEM tanúsítvány" } } }, "request": { - "title": "", + "title": "Kérelemhiba", "description": { "connection": { - "hostUnreachable": "", - "networkUnreachable": "", - "refused": "", - "reset": "" + "hostUnreachable": "A szerver nem érhető el. Ez általában azt jelenti, hogy a szerver nincs online, vagy a hálózatodról nem érhető el.", + "networkUnreachable": "A hálózat nem érhető el. Kérjük, ellenőrizze az internetkapcsolatát vagy a hálózati beállításokat.", + "refused": "A szerver elutasította a kapcsolatot. Lehet, hogy nem fut, vagy elutasítja a megadott porton érkező kéréseket.", + "reset": "A kapcsolatot a szerver váratlanul megszakította. Ez akkor fordulhat elő, ha a szerver instabil, vagy újraindult." }, "dns": { - "notFound": "", - "timeout": "", - "noAnswer": "" + "notFound": "A szerver címe nem található. Kérjük, ellenőrizze, hogy az URL-címben nincs-e elírás vagy érvénytelen domainnév.", + "timeout": "A DNS-lekérdezés időtúllépése történt. Ez átmeneti probléma lehet – kérjük, próbálja meg újra néhány perc múlva.", + "noAnswer": "A DNS-kiszolgáló nem adott érvényes választ. Lehet, hogy a domain létezik, de nincsenek érvényes bejegyzései." }, "timeout": { - "aborted": "", - "timeout": "" + "aborted": "A kérés még befejezése előtt megszakadt. Ennek oka lehet egy felhasználói művelet vagy a rendszer időtúllépése.", + "timeout": "A kérés feldolgozása túl sokáig tartott, ezért a rendszer időtúllépést jelezett. Ellenőrizze a hálózati kapcsolatot, vagy próbálja meg később újra." } } } @@ -920,8 +920,8 @@ "message": "Az útvonal valószínűleg nem helyes" }, "tooManyRequests": { - "title": "", - "message": "" + "title": "Túl sok kérés adott idő alatt", + "message": "Túl sok kérést küldött. Valószínűleg a célrendszer korlátozza vagy elutasítja a kéréseket" } } }, @@ -955,44 +955,44 @@ "newLabel": "Új jelszó" }, "tokenId": { - "label": "", - "newLabel": "" + "label": "Token azonosító", + "newLabel": "Új token azonosító" }, "realm": { - "label": "", - "newLabel": "" + "label": "Tartomány", + "newLabel": "Új tartomány" }, "personalAccessToken": { - "label": "", - "newLabel": "" + "label": "Személyes Hozzáférési Token", + "newLabel": "Új Személyes Hozzáférési Token" }, "topic": { - "label": "", - "newLabel": "" + "label": "Téma", + "newLabel": "Új téma" }, "url": { - "label": "", - "newLabel": "" + "label": "Url", + "newLabel": "Új url" }, "opnsenseApiKey": { - "label": "", - "newLabel": "" + "label": "API kulcs (Kulcs)", + "newLabel": "Új API Kulcs (Kulcs)" }, "opnsenseApiSecret": { - "label": "", - "newLabel": "" + "label": "Api Kulcs (Titkos)", + "newLabel": "Új API Kulcs (Titkos)" }, "githubAppId": { - "label": "", - "newLabel": "" + "label": "App Azonosító", + "newLabel": "Új App Azonosító" }, "githubInstallationId": { - "label": "", - "newLabel": "" + "label": "Telepítési azonosító", + "newLabel": "Új telepítési azonosító" }, "privateKey": { - "label": "", - "newLabel": "" + "label": "Privát kulcs", + "newLabel": "Új privát kulcs" } } }, @@ -1039,21 +1039,21 @@ "label": "URL másolása" }, "open": { - "label": "" + "label": "Média megnyitása" } } }, "common": { - "success": "", + "success": "Siker", "beta": "Béta", "error": "Hiba", "action": { "add": "Hozzáadás", "apply": "Alkalmaz", "backToOverview": "Vissza az áttekintéshez", - "change": "", + "change": "Módosít", "create": "Létrehozás", - "createAnother": "", + "createAnother": "Újrakezdés", "edit": "Szerkesztés", "import": "Importálás", "insert": "Beillesztés", @@ -1063,7 +1063,7 @@ "cancel": "Mégse", "delete": "Törlés", "discard": "Elvetés", - "close": "", + "close": "Bezárás", "confirm": "Megerősít", "continue": "Folytatás", "previous": "Előző", @@ -1087,7 +1087,7 @@ "information": { "min": "Legalább", "max": "Legfeljebb", - "days": "", + "days": "Nap", "hours": "Óra", "minutes": "Perc" }, @@ -1105,45 +1105,45 @@ "error": "Nem sikerült alkalmazni a változtatásokat" }, "transfer": { - "success": "", - "error": "" + "success": "Sikeres átvitel", + "error": "Sikertelen átvitel" } }, "multiSelect": { - "placeholder": "" + "placeholder": "Válasszon ki egy vagy több értéket" }, "multiText": { - "placeholder": "", - "addLabel": "" + "placeholder": "További értékek hozzáadása", + "addLabel": "Hozzáad {value}" }, "select": { - "placeholder": "", + "placeholder": "Érték kiválasztása", "badge": { - "recommended": "" + "recommended": "Ajánlott" } }, "userAvatar": { "menu": { - "switchToDarkMode": "", - "switchToLightMode": "", - "management": "", + "switchToDarkMode": "Váltás sötét módba", + "switchToLightMode": "Váltás világos módra", + "management": "Kezelés", "preferences": "Saját preferenciák", - "logout": "", + "logout": "Kijelentkezés", "login": "Bejelentkezés", - "homeBoard": "", - "loggedOut": "", - "updateAvailable": "" + "homeBoard": "A saját kezdőlapod", + "loggedOut": "Kijelentkezett", + "updateAvailable": "{countUpdates} frissítés elérhető: {tag}" } }, "dangerZone": "Veszélyzóna", "noResults": "Nincs eredmény", - "unsavedChanges": "", - "servers": "", - "applications": "", - "services": "", + "unsavedChanges": "Nem mentett módosításai vannak!", + "servers": "Szerverek", + "applications": "Alkalmazások", + "services": "Szolgáltatások", "preview": { - "show": "", - "hide": "" + "show": "Előnézet megjelenítése", + "hide": "Előnézet elrejtése" }, "zod": { "errors": { @@ -1153,7 +1153,7 @@ "startsWith": "Ennek a mezőnek a {startsWith} kell kezdődnie", "endsWith": "Ennek a mezőnek a {endsWith} kell végződnie", "includes": "Ennek a mezőnek tartalmaznia kell a {includes} értéket", - "invalidEmail": "" + "invalidEmail": "A mezőnek érvényes e-mail címet kell tartalmaznia" }, "tooSmall": { "string": "Ennek a mezőnek legalább {minimum} karakter hosszúságúnak kell lennie", @@ -1164,44 +1164,44 @@ "number": "Ennek a mezőnek kisebbnek vagy egyenlőnek kell lennie a {maximum} értékkel" }, "custom": { - "passwordsDoNotMatch": "", - "passwordRequirements": "", - "boardAlreadyExists": "", - "invalidFileType": "", - "invalidFileName": "", - "fileTooLarge": "", - "invalidConfiguration": "", - "groupNameTaken": "" + "passwordsDoNotMatch": "A jelszavak nem egyeznek", + "passwordRequirements": "A jelszó nem felel meg a követelményeknek", + "boardAlreadyExists": "Már létezik ilyen nevű oldal", + "invalidFileType": "Érvénytelen fájltípus, várt: {expected}", + "invalidFileName": "Érvénytelen fájlnév", + "fileTooLarge": "A fájl túl nagy, a maximális méret {maxSize}", + "invalidConfiguration": "Érvénytelen konfiguráció", + "groupNameTaken": "A felhasználónév már foglalt" } } }, "unit": { "speed": { - "kilometersPerHour": "", - "milesPerHour": "" + "kilometersPerHour": "km/óra", + "milesPerHour": "mph" } } }, "section": { "dynamic": { "action": { - "create": "", - "remove": "" + "create": "Új dinamikus szakasz", + "remove": "A dinamikus szakasz eltávolítása" }, "option": { "title": { - "label": "" + "label": "Cím" }, "customCssClasses": { - "label": "" + "label": "Egyéni css-osztályok" }, "borderColor": { - "label": "" + "label": "Határszín" } }, "remove": { - "title": "", - "message": "" + "title": "Dinamikus szakasz eltávolítása", + "message": "Biztosan el akarja távolítani ezt a dinamikus részt? Az elemek a szülő rész ugyanazon helyére kerülnek át." } }, "category": { @@ -1211,47 +1211,47 @@ } }, "action": { - "create": "", - "edit": "", - "remove": "", + "create": "Új kategória", + "edit": "Kategória átnevezése", + "remove": "Kategória eltávolítása", "moveUp": "Felfelé mozgatás", "moveDown": "Mozgatás le", - "createAbove": "", - "createBelow": "", - "openAllInNewTabs": "" + "createAbove": "Új kategória fent", + "createBelow": "Új kategória alább", + "openAllInNewTabs": "Mindet lapokban megnyitni" }, "create": { - "title": "", - "submit": "" + "title": "Új kategória", + "submit": "Kategória hozzáadása" }, "remove": { - "title": "", - "message": "" + "title": "Kategória eltávolítása", + "message": "Biztosan el akarja távolítani a {name} kategóriát?" }, "edit": { - "title": "", - "submit": "" + "title": "Kategória átnevezése", + "submit": "Kategória átnevezése" }, "menu": { "label": { - "create": "", + "create": "Új kategória", "changePosition": "Pozíció módosítása" } }, "openAllInNewTabs": { - "title": "", - "text": "" + "title": "Mindet lapokban megnyitni", + "text": "Bizonyos böngészők biztonsági okokból megakadályozhatják a lapok tömeges megnyitását. A Homarr nem tudta megnyitni az összes ablakot, mert a böngészője letiltotta ezt a műveletet. Kérjük, engedélyezze a „Felugró ablakok megnyitása” opciót, majd próbálja meg újra." } } }, "item": { "action": { - "create": "", - "import": "", - "edit": "", - "moveResize": "", - "duplicate": "", - "remove": "" + "create": "Új elem", + "import": "Elemek importálása", + "edit": "Elem szerkesztése", + "moveResize": "Elem áthelyezése / átméretezése", + "duplicate": "Elem másolása", + "remove": "Elem eltávolítása" }, "menu": { "label": { @@ -1260,11 +1260,11 @@ }, "create": { "title": "Válassza ki a hozzáadni kívánt elemet", - "search": "", + "search": "Elemek szűrése", "addToBoard": "Hozzáadás a táblához" }, "moveResize": { - "title": "", + "title": "Elem áthelyezése / átméretezése", "field": { "width": { "label": "Szélesség" @@ -1281,7 +1281,7 @@ } }, "edit": { - "title": "", + "title": "Elem szerkesztése", "advancedOptions": { "label": "Haladó beállítások", "title": "Speciális tételbeállítások" @@ -1291,18 +1291,18 @@ "label": "Integrációk" }, "title": { - "label": "" + "label": "Cím" }, "customCssClasses": { "label": "Egyedi css osztályok" }, "borderColor": { - "label": "" + "label": "Határszín" } } }, "remove": { - "title": "", + "title": "Elem eltávolítása", "message": "Biztosan eltávolítja ezt az elemet?" } }, @@ -1324,21 +1324,21 @@ "label": "Egyszerű ping engedélyezése" }, "layout": { - "label": "", + "label": "Elrendezés", "option": { - "row": "", - "row-reverse": "", - "column": "", - "column-reverse": "" + "row": "Vízszintes", + "row-reverse": "Vízszintes (fordított)", + "column": "Függőleges", + "column-reverse": "Függőleges (fordított)" } }, "descriptionDisplayMode": { - "label": "", - "description": "", + "label": "Leírás megjelenítési mód", + "description": "Válassza ki, hogyan jelenjen meg az alkalmazás leírása", "option": { - "normal": "", - "tooltip": "", - "hidden": "" + "normal": "A widgeten belül", + "tooltip": "Eszköztippként", + "hidden": "Rejtett" } } }, @@ -1369,21 +1369,21 @@ "label": "Rács" }, "gridHorizontal": { - "label": "" + "label": "Vízszintes rács" } } }, "hideTitle": { - "label": "" + "label": "Cím elrejtése" }, "hideIcon": { - "label": "" + "label": "Ikon elrejtése" }, "hideHostname": { - "label": "" + "label": "A gazdagépnevek elrejtése" }, "openNewTab": { - "label": "" + "label": "Megnyitás új lapon" }, "items": { "label": "Könyjelzők", @@ -1423,7 +1423,7 @@ "dnsQueriesToday": "Mai lekérdezések", "domainsBeingBlocked": "Domainek a tiltólistán" }, - "domainsTooltip": "" + "domainsTooltip": "A számos integráció miatt a Homarr nem tudja kiszámítani a blokkolt domainek pontos számát" }, "dnsHoleControls": { "name": "DNS blokkolók ellenőrzése", @@ -1497,32 +1497,43 @@ "description": "Hogyan nézzen ki a dátum" }, "customTimeFormat": { - "label": "", - "description": "" + "label": "Egyéni időformátum", + "description": "Az idő formázásához használja az ISO 8601 szabványt (ez felülírja az egyéb beállításokat)" }, "customDateFormat": { - "label": "", - "description": "" + "label": "Egyedi dátumformátum", + "description": "A dátum formázásához használja az ISO 8601 szabványt (ez felülírja az egyéb beállításokat)" } } }, "minecraftServerStatus": { - "name": "", - "description": "", + "name": "Minecraft szerver állapota", + "description": "Megjeleníti a Minecraft-szerver állapotát", "option": { "title": { - "label": "" + "label": "Cím" }, "domain": { - "label": "" + "label": "Szerver cím" }, "isBedrockServer": { - "label": "" + "label": "Bedrock szerver" } }, "status": { - "online": "", - "offline": "" + "online": "Elérhető", + "offline": "Nem elérhető" + } + }, + "timetable": { + "name": "Órarend", + "description": "Megjeleníti az adott állomás indulási idejét", + "title": "Indulások {station}", + "noStation": "Nincs kiválasztott állomás", + "option": { + "station": { + "label": "Állomás" + } } }, "notebook": { @@ -1585,16 +1596,44 @@ "width": "Szélesség", "height": "Magasság" }, - "placeholder": "", + "placeholder": "Kezdd el írni a jegyzeteidet", "dismiss": { - "title": "", - "message": "", + "title": "Elveted a módosításokat?", + "message": "A jegyzetfüzetben vannak mentetlen módosítások. Biztosan el akarja vetni őket?", "action": { - "discard": "", - "keepEditing": "" + "discard": "Változtatások elvetése", + "keepEditing": "Szerkesztés folytatása" } } }, + "anchorNote": { + "name": "Anchor Note", + "description": "Megjeleníti az Anchor alkalmazásból kiválasztott jegyzetet", + "option": { + "noteId": { + "label": "Jegyzet" + }, + "showTitle": { + "label": "Cím megjelenítése" + }, + "showUpdatedAt": { + "label": "Utolsó frissítés megjelenítése" + } + }, + "empty": "Válasszon ki egy jegyzetet a megjelenítéshez", + "emptyContent": "Ez a jegyzet nem tartalmaz szöveget", + "notFound": "Jegyzet nem található", + "noNotes": "Nem található jegyzet", + "integrationRequired": "Először válasszon ki egy Anchor-integrációt", + "updatedAt": "Frissítve: {dátum}", + "untitled": "Névtelen", + "edit": "Szerkesztés", + "save": "Mentés", + "cancel": "Mégse", + "readOnlyViewer": "Ehhez a jegyzethez olvasói hozzáférésed van. A szerkesztés le van tiltva.", + "saveForbidden": "You do not have permission to edit this note.", + "saveFailed": "A jegyzet mentése nem sikerült. Kérjük, próbálja meg újra." + }, "iframe": { "name": "Beágyazott keret (iFrame)", "description": "Bármilyen tartalom beágyazása az internetről. Egyes webhelyek korlátozhatják a hozzáférést.", @@ -1625,35 +1664,38 @@ }, "allowGeolocation": { "label": "Geolokáció engedélyezése" + }, + "allowModals": { + "label": "Modálablakok engedélyezése" } }, "error": { "noUrl": "Nincs megadva iFrame URL", - "unsupportedProtocol": "", + "unsupportedProtocol": "A megadott URL nem támogatott protokollt használ. Kérjük, válasszon egyet a ({supportedProtocols}) közül.", "noBrowerSupport": "Az Ön böngészője nem támogatja a beágyazott kereteket. Kérjük, frissítse böngészőjét." } }, "smartHome-entityState": { "name": "Egység állapota", - "description": "", + "description": "Egy elem állapotának megjelenítése és opcionális be- és kikapcsolása", "option": { "entityId": { "label": "Egység azonosító" }, "displayName": { - "label": "" + "label": "Megjelenítendő név" }, "entityUnit": { - "label": "" + "label": "Entitás-egység" }, "clickable": { - "label": "" + "label": "Kattintható" } } }, "smartHome-executeAutomation": { - "name": "", - "description": "", + "name": "Automatizálás végrehajtása", + "description": "Indítson el egy automatizált folyamatot egyetlen kattintással", "option": { "displayName": { "label": "Megjelenített név" @@ -1663,80 +1705,80 @@ } }, "spotlightAction": { - "run": "" + "run": "Futtasd a {name} parancsot" } }, "stockPrice": { - "name": "", - "description": "", + "name": "Részvényár", + "description": "Megjeleníti egy vállalat aktuális részvényárfolyamát", "option": { "stock": { - "label": "" + "label": "Tőzsdei szimbólumok" }, "timeRange": { - "label": "", + "label": "Időtartomány", "option": { "1d": { - "label": "" + "label": "1 nap" }, "5d": { - "label": "" + "label": "5 nap" }, "1mo": { - "label": "" + "label": "1 hónap" }, "3mo": { - "label": "" + "label": "3 hónap" }, "6mo": { - "label": "" + "label": "6 hónap" }, "ytd": { - "label": "" + "label": "Év eddigi részében" }, "1y": { - "label": "" + "label": "1 év" }, "2y": { - "label": "" + "label": "2 év" }, "5y": { - "label": "" + "label": "5 év" }, "10y": { - "label": "" + "label": "10 év" }, "max": { - "label": "" + "label": "Legfeljebb" } } }, "timeInterval": { - "label": "", + "label": "Időintervallum", "option": { "5m": { - "label": "" + "label": "5 perc" }, "15m": { - "label": "" + "label": "15 perc" }, "30m": { - "label": "" + "label": "30 perc" }, "1h": { - "label": "" + "label": "1 óra" }, "1d": { - "label": "" + "label": "1 nap" }, "5d": { - "label": "" + "label": "5 nap" }, "1wk": { - "label": "" + "label": "1 hét" }, "1mo": { - "label": "" + "label": "1 hónap" } } } @@ -1744,27 +1786,27 @@ }, "calendar": { "name": "Naptár", - "description": "", + "description": "Az integrációkból származó események megjelenítése naptárnézetben egy adott időtartamon belül", "duration": { - "allDay": "" + "allDay": "Egész nap" }, "option": { "releaseType": { "label": "Radarr kiadás típusa", "options": { - "inCinemas": "", - "digitalRelease": "", - "physicalRelease": "" + "inCinemas": "Mozikban", + "digitalRelease": "Digitális megjelenés", + "physicalRelease": "Fizikai megjelenés" } }, "filterPastMonths": { - "label": "" + "label": "Kezdete" }, "filterFutureMonths": { - "label": "" + "label": "Vége" }, "showUnmonitored": { - "label": "" + "label": "Nem ellenőrzött megjelenítés" } } }, @@ -1773,42 +1815,42 @@ "description": "Megjeleníti egy meghatározott hely aktuális időjárási adatait.", "option": { "isFormatFahrenheit": { - "label": "" + "label": "Hőmérséklet Fahrenheitben" }, "disableTemperatureDecimals": { - "label": "" + "label": "Hőmérséklet tizedesjegyének kikapcsolása" }, "showCurrentWindSpeed": { - "label": "", - "description": "" + "label": "Aktuális szélsebesség megjelenítése", + "description": "Csak az aktuális időjárásról" }, "useImperialSpeed": { - "label": "" + "label": "A szélsebességet mérföld/órában (mph) adja meg" }, "location": { "label": "Időjárás helye" }, "showCity": { - "label": "" + "label": "Város megjelenítése" }, "hasForecast": { - "label": "" + "label": "Előrejelzés megjelenítése" }, "forecastDayCount": { - "label": "", - "description": "" + "label": "Előrejelzés napjainak száma", + "description": "Ha a widget nem elég széles, kevesebb nap jelenik meg" }, "dateFormat": { "label": "Dátum formátum", "description": "Hogyan nézzen ki a dátum" } }, - "currentWindSpeed": "", + "currentWindSpeed": "{currentWindSpeed} {unit}", "dailyForecast": { - "sunrise": "", - "sunset": "", - "maxWindSpeed": "", - "maxWindGusts": "" + "sunrise": "Napkelte", + "sunset": "Naplemente", + "maxWindSpeed": "Legnagyobb szélsebesség: {maxWindSpeed} {unit}", + "maxWindGusts": "Legerősebb széllökés: {maxWindGusts} {unit}" }, "kind": { "clear": "Tiszta", @@ -1829,24 +1871,24 @@ }, "indexerManager": { "name": "Indexelő menedzser állapota", - "description": "", + "description": "Az indexelők állapota", "option": { "openIndexerSiteInNewTab": { - "label": "" + "label": "Indexelő webhely megnyitása új lapon" } }, "title": "Indexelő menedzser", "testAll": "Teszteld az összeset", "error": { - "internalServerError": "" + "internalServerError": "Nem sikerült lekérni az indexelők állapotát" } }, "healthMonitoring": { "name": "Rendszerállapot-felügyelet", "description": "Megjeleníti a rendszer(ek) állapotát és állapotát mutató információkat.", "tab": { - "system": "", - "cluster": "" + "system": "Rendszer", + "cluster": "Klaszter" }, "option": { "fahrenheit": { @@ -1858,216 +1900,219 @@ "memory": { "label": "Memóriainformációk megjelenítése" }, + "gpu": { + "label": "GPU információ megjelenítése" + }, "showUptime": { - "label": "" + "label": "Üzemidő megjelenítése" }, "fileSystem": { "label": "Fájlrendszer-információk megjelenítése" }, "defaultTab": { - "label": "" + "label": "Alapértelmezett fül" }, "visibleClusterSections": { - "label": "" + "label": "Látható klaszterrészek" }, "sectionIndicatorRequirement": { - "label": "" + "label": "A szakaszjelzőre vonatkozó követelmény" } }, "popover": { - "information": "", - "processor": "", - "memory": "", - "memoryAvailable": "", - "version": "", - "uptime": "", - "loadAverage": "", - "minute": "", - "minutes": "", - "used": "", + "information": "Információ", + "processor": "Processzor: {cpuModelName}", + "memory": "Memória: {memory} GiB", + "memoryAvailable": "Rendelkezésre álló: {memoryAvailable}GiB ({percent}%)", + "version": "Verzió: {version}", + "uptime": "Üzemidő: {months} hónap, {days} nap, {hours} óra, {minutes} perc", + "loadAverage": "Átlagos terhelés:", + "minute": "1 perc", + "minutes": "{count} perc", + "used": "Használt", "available": "Elérhető", - "lastSeen": "" + "lastSeen": "Utolsó állapotfrissítés: {lastSeen}" }, "memory": {}, "error": { - "internalServerError": "" + "internalServerError": "Nem sikerült lekérni az állapotot" }, "cluster": { "summary": { - "cpu": "", - "memory": "" + "cpu": "Processzor", + "memory": "Memória" }, "resource": { "node": { - "name": "" + "name": "Node-ok" }, "qemu": { - "name": "" + "name": "VM-ek" }, "lxc": { - "name": "" + "name": "Linux konténerek" }, "storage": { - "name": "" + "name": "Tárhely" } }, "popover": { "rightSection": { - "node": "", - "vmId": "", - "plugin": "" + "node": "Node", + "vmId": "VM ID", + "plugin": "Bővítmény" }, "detail": { - "cpu": "", - "memory": "", - "storage": "", - "uptime": "", - "haState": "", + "cpu": "Mag", + "memory": "Memória", + "storage": "Tárhely", + "uptime": "Üzemidő", + "haState": "HA állapot", "storageType": { - "local": "", - "shared": "" + "local": "Helyi tárhely", + "shared": "Megosztott tárhely" } } }, "table": { "header": { - "name": "", - "cpu": "", - "memory": "", - "node": "" + "name": "Név", + "cpu": "CPU", + "memory": "Memória", + "node": "Node" } } } }, "dockerContainers": { - "name": "", - "description": "", + "name": "Docker statisztika", + "description": "A konténereid statisztikái (Ezt a widgetet csak rendszergazdai jogosultsággal lehet hozzáadni)", "option": { "enableRowSorting": { - "label": "" + "label": "Az elemek rendezésének engedélyezése" }, "defaultSort": { - "label": "", + "label": "Alapértelmezés szerint rendezéshez használt oszlop", "option": { - "name": "", - "state": "", - "cpuUsage": "", - "memoryUsage": "" + "name": "Név", + "state": "Állapot", + "cpuUsage": "CPU használat", + "memoryUsage": "Memória használat" } }, "descendingDefaultSort": { - "label": "" + "label": "Fordított rendezés" } }, "error": { - "internalServerError": "" + "internalServerError": "A konténerek statisztikáinak lekérése sikertelen" } }, "coolify": { - "name": "", - "description": "", + "name": "Coolify", + "description": "A Coolify-példány áttekintése a szerverekkel és alkalmazásokkal", "option": { "showServers": { - "label": "" + "label": "Kiszolgálók megjelenítése" }, "showApplications": { - "label": "" + "label": "Alkalmazások megjelenítése" }, "showServices": { - "label": "" + "label": "Szolgáltatások megjelenítése" } }, "empty": { - "servers": "", - "applications": "", - "services": "" + "servers": "Nem találtható szerver", + "applications": "Nem található alkalmazás", + "services": "Nem található szolgáltatás" }, "footer": { - "updated": "" + "updated": "Frissítve {when}" }, "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "Nincs beállítva Coolify-integráció", + "internalServerError": "A Coolify-adatok letöltése nem sikerült" }, "server": { - "buildServer": "" + "buildServer": "Build" }, "instances": { - "title": "" + "title": "Példányok" } }, "tracearr": { - "name": "", - "description": "", + "name": "Tracearr", + "description": "Továbbfejlesztett médiaszerver-felügyelet részletes adatfolyam- és átkódolási adatokkal", "option": { "showStreams": { - "label": "" + "label": "Aktív streamek megjelenítése" }, "showStats": { - "label": "" + "label": "Statisztikai összefoglaló megjelenítése" }, "showRecentActivity": { - "label": "" + "label": "Legutóbbi tevékenység mutatása" }, "showViolations": { - "label": "" + "label": "Szabálysértések megjelenítése" } }, "stats": { - "activeStreams": "", - "totalUsers": "", - "transcodes": "", - "bandwidth": "" + "activeStreams": "Aktív Stream-ek", + "totalUsers": "Összes Felhasználó", + "transcodes": "Átkódolás", + "bandwidth": "Sávszélesség" }, "streams": { - "empty": "", - "user": "", - "media": "", - "state": "", - "quality": "", - "device": "", - "progress": "", + "empty": "Nincsenek aktív streamek", + "user": "Felhasználó", + "media": "Média", + "state": "Állapot", + "quality": "Minőség", + "device": "Eszköz", + "progress": "Folyamat", "videoDecision": { - "directPlay": "", - "transcode": "", - "directStream": "" + "directPlay": "Közvetlen lejátszás", + "transcode": "Átkódolás", + "directStream": "Közvetlen közvetítés" } }, "recentActivity": { - "title": "", - "empty": "", - "watched": "", - "partial": "" + "title": "Legutóbbi tevékenységek", + "empty": "Nincs újabb tevékenység", + "watched": "Megnézve", + "partial": "Részleges" }, "violations": { - "title": "", - "empty": "", - "rule": "", - "user": "" + "title": "Szabálysértések", + "empty": "Nincsenek szabálysértések", + "rule": "Szabály", + "user": "Felhasználó" }, - "noSectionsEnabled": "", + "noSectionsEnabled": "Nincs engedélyezett szakasz", "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "Nincs beállítva a Tracearr-integráció", + "internalServerError": "Nem sikerült letölteni a Tracearr-adatokat" } }, "common": { "location": { - "query": "", - "latitude": "", - "longitude": "", - "disabledTooltip": "", - "unknownLocation": "", + "query": "Város / Irányítószám", + "latitude": "Szélesség", + "longitude": "Hosszúság", + "disabledTooltip": "Adj meg egy várost vagy irányítószámot", + "unknownLocation": "Ismeretlen hely", "search": "Keresés", "table": { "header": { - "city": "", - "country": "", - "coordinates": "", - "population": "" + "city": "Város", + "country": "Ország", + "coordinates": "Koordináták", + "population": "Népesség" }, "action": { - "select": "" + "select": "Kiválasztás {city}, {countryCode}" }, "population": { "fallback": "Ismeretlen" @@ -2075,17 +2120,17 @@ } }, "integration": { - "noData": "", - "description": "" + "noData": "Nem találtam integrációt", + "description": "Kattintson egy új integráció létrehozásához" }, "app": { "noData": "Nem található alkalmazás", - "description": "", - "quickCreate": "" + "description": "Kattintson egy új alkalmazás létrehozásához", + "quickCreate": "Alkalmazás létrehozása pillanatok alatt" }, "error": { - "noIntegration": "", - "noData": "" + "noIntegration": "Nincs kiválasztva integráció", + "noData": "Nincs elérhető integrációs adat" }, "option": {} }, @@ -2098,210 +2143,210 @@ }, "hasAutoPlay": { "label": "Automatikus lejátszás", - "description": "" + "description": "Az automatikus lejátszás a böngésző korlátozásai miatt csak némítás esetén működik" }, "isMuted": { - "label": "" + "label": "Némítva" }, "hasControls": { - "label": "" + "label": "Vezérlők megjelenítése" } }, "error": { - "noUrl": "", - "forYoutubeUseIframe": "" + "noUrl": "Nincs megadva videó URL-cím", + "forYoutubeUseIframe": "YouTube-videók esetén használja az iframe opciót" } }, "mediaServer": { - "name": "", - "description": "", + "name": "Aktuális médiaszolgáltató-adások", + "description": "Az aktuális streamek megjelenítése a médialejátszókon", "option": { "showOnlyPlaying": { - "label": "", - "description": "" + "label": "Csak a jelenleg lejátszottakat mutasd", + "description": "Ennek letiltása a Plex esetében nem fog működni" } }, "items": { - "currentlyPlaying": "", - "user": "", - "name": "", - "id": "", + "currentlyPlaying": "Jelenleg lejátszás alatt", + "user": "Felhasználó", + "name": "Név", + "id": "Azonosító", "metadata": { - "title": "", + "title": "Statisztikák a rajongóknak", "video": { - "title": "", - "resolution": "" + "title": "Videó", + "resolution": "Felbontás" }, "audio": { - "title": "", - "channelCount": "", - "codec": "" + "title": "Audió", + "channelCount": "Hangsávok", + "codec": "Hangkodek" }, "transcoding": { - "title": "", - "container": "", - "resolution": "", - "target": "" + "title": "Átkódolás", + "container": "Konténer", + "resolution": "Felbontás", + "target": "Cél kódoló" } } } }, "immich-serverStats": { - "name": "", - "description": "", + "name": "Immich szerver statisztikák", + "description": "Információk az Immich-példányodról", "option": { "showUsers": { - "label": "", - "description": "" + "label": "Felhasználók megjelenítése", + "description": "Az instanszon lévő felhasználók számának megjelenítése" }, "showPhotos": { - "label": "", - "description": "" + "label": "Fotók megjelenítése", + "description": "Az instanszon lévő fotók számának megjelenítése" }, "showVideos": { - "label": "", - "description": "" + "label": "Videó megjelenítése", + "description": "Az instanszon lévő videók számának megjelenítése" }, "showStorage": { - "label": "", - "description": "" + "label": "Tárhely megjelenítése", + "description": "Felhasznált tárhely teljes mennyiségének megjelenítése" } }, - "users": "", - "photos": "", - "videos": "", - "storage": "" + "users": "Felhasználók", + "photos": "Fotók", + "videos": "Videók", + "storage": "Felhasznált tárhely" }, "immich-albumCarousel": { - "name": "", + "name": "Immich Album", "option": { "albumId": { - "label": "", - "description": "" + "label": "Album ID", + "description": "Ez az Immich-albumodra utaló egyedi azonosító. Az azonosítót úgy találhatod meg, hogy megnyitsz egy albumot, és lemásolod az URL-ből az egyedi karakterláncot, például: „a21aca09-9f05-47dc-b1a1-7b53c547226e”" }, "rotationIntervalSeconds": { - "label": "", - "description": "" + "label": "Időköz másodpercekben", + "description": "Az album képei között X másodpercenként váltson. Az értéknek legalább 1-nek kell lennie. Az érték nem haladhatja meg a 3600-at." }, "showPhotoInfo": { - "label": "", - "description": "" + "label": "Fotóadatok megjelenítése", + "description": "Kép dátumának és az aktuális indexszámnak a megjelenítése a diavetítés alján" } }, - "description": "", - "noAlbumSelected": "", - "noPhotos": "" + "description": "Képek diavetítése az Immich-albumodból", + "noAlbumSelected": "Nincs kiválasztott album; szerkeszd a widgetet, és válassz ki egy albumot", + "noPhotos": "Ebben az albumban nincs fénykép" }, "downloads": { - "name": "", - "description": "", + "name": "Kliens letöltése", + "description": "Lehetővé teszi a Torrent- és Usenet-kliensből származó letöltések megtekintését és kezelését.", "option": { "columns": { - "label": "" + "label": "Megjelenítendő oszlopok" }, "enableRowSorting": { - "label": "" + "label": "Elemek rendezésének engedélyezése" }, "defaultSort": { - "label": "" + "label": "Alapértelmezés szerint rendezéshez használt oszlop" }, "descendingDefaultSort": { - "label": "" + "label": "Fordított rendezés" }, "showCompletedUsenet": { - "label": "" + "label": "Mutassa a befejezettként megjelölt Usenet bejegyzéseket" }, "showCompletedTorrent": { - "label": "" + "label": "Mutassa a befejezettként megjelölt torrent bejegyzéseket" }, "showCompletedHttp": { - "label": "" + "label": "Mutassa a befejezettként megjelölt Vegyes bejegyzéseket" }, "activeTorrentThreshold": { - "label": "" + "label": "A küszöbérték alatt lévő befejezett torrenteket elrejtés (kiB/s-ban)" }, "categoryFilter": { - "label": "" + "label": "Szűrhető kategóriák/címkék" }, "filterIsWhitelist": { - "label": "" + "label": "Szűrés fehérlistával" }, "applyFilterToRatio": { - "label": "" + "label": "Használja a szűrőt az arány kiszámításához" }, "limitPerIntegration": { - "label": "", - "description": "" + "label": "Elemek száma integrációnként", + "description": "Ez az egyes integrációkhoz tartozó elemek számát korlátozza, nem pedig általánosan" } }, "errors": { - "noColumns": "", - "noCommunications": "" + "noColumns": "Oszlopok kiválasztása az elemek között", + "noCommunications": "Nem sikerül betölteni az adatokat az integrációból" }, "items": { "actions": { - "columnTitle": "" + "columnTitle": "Vezérlők" }, "added": { - "columnTitle": "", + "columnTitle": "Hozzáadva", "detailsTitle": "Hozzáadás dátuma" }, "category": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Extrák", + "detailsTitle": "Kategóriák (vagy további információk)" }, "downSpeed": { "columnTitle": "Le", "detailsTitle": "Letöltési sebesség" }, "index": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "#", + "detailsTitle": "Aktuális index az ügyfélnél" }, "id": { - "columnTitle": "" + "columnTitle": "Azonosító" }, "integration": { "columnTitle": "Integráció" }, "name": { - "columnTitle": "" + "columnTitle": "Folyamat neve" }, "progress": { "columnTitle": "Folyamat", - "detailsTitle": "" + "detailsTitle": "Letöltési folyamat" }, "ratio": { "columnTitle": "Arány", - "detailsTitle": "" + "detailsTitle": "Torrent-arány (letöltött/feltöltött)" }, "received": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Összes le", + "detailsTitle": "Összes letöltés" }, "sent": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Teljesen fönn", + "detailsTitle": "Teljesen föltöltött" }, "size": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Fájl mérete", + "detailsTitle": "A kijelölt elemek/fájlok teljes mérete" }, "state": { "columnTitle": "Állapot", - "detailsTitle": "" + "detailsTitle": "A feladat állapota" }, "time": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Befejezési idő", + "detailsTitle": "A befejezésig hátralévő idő" }, "type": { - "columnTitle": "", - "detailsTitle": "" + "columnTitle": "Típus", + "detailsTitle": "Letöltőkliens típusa" }, "upSpeed": { "columnTitle": "Fel", - "detailsTitle": "" + "detailsTitle": "Feltöltési sebesség" } }, "states": { @@ -2309,67 +2354,67 @@ "queued": "Sorban áll", "paused": "Szünet", "completed": "Kész", - "failed": "", + "failed": "Sikertelen", "processing": "Feldolgozás", - "leeching": "", - "stalled": "", + "leeching": "Leechelés", + "stalled": "Elakadt", "unknown": "Ismeretlen", - "seeding": "" + "seeding": "Seedelés" }, "actions": { "clients": { - "modalTitle": "", - "pause": "", - "resume": "" + "modalTitle": "Letöltkliensek listája", + "pause": "Minden kliens/elem felfüggesztése", + "resume": "Minden kliens/elem folytatása" }, "client": { - "pause": "", - "resume": "" + "pause": "Kliens felfüggesztése", + "resume": "Kliens folytatása" }, "item": { - "pause": "", - "resume": "", + "pause": "Elem felfüggesztése", + "resume": "Elem folytatása", "delete": { - "title": "", - "modalTitle": "", - "entry": "", - "entryAndFiles": "" + "title": "Elem törlése", + "modalTitle": "Biztosan törli ezt a feladatot?", + "entry": "Bejegyzés törlése", + "entryAndFiles": "Bejegyzés és file(ok) törlése" } } }, - "globalRatio": "" + "globalRatio": "Összes arány" }, "mediaReleases": { - "name": "", - "description": "", + "name": "Sajtóközlemények", + "description": "Az egyes integrációkból származó újonnan hozzáadott médiafájlok vagy hamarosan megjelenő kiadványok megjelenítése", "option": { "layout": { - "label": "", + "label": "Elrendezés", "option": { "backdrop": { - "label": "" + "label": "Háttér" }, "poster": { - "label": "" + "label": "Poszter" } } }, "showDescriptionTooltip": { - "label": "" + "label": "Leírás megjelenítése" }, "showType": { - "label": "" + "label": "Médiatípus-jelölő megjelenítése" }, "showSource": { - "label": "" + "label": "Forrásintegráció megjelenítése" } }, "length": { - "duration": "" + "duration": "{length}perc" } }, "mediaRequests-requestList": { - "name": "", + "name": "Médiakérések listája", "description": "Az Overseerr vagy Jellyseerr példány összes médiakérelmének listájának megtekintése", "option": { "linksTargetNewTab": { @@ -2377,31 +2422,31 @@ } }, "pending": { - "approve": "", - "approving": "", - "decline": "" + "approve": "Kérelem elfogadása", + "approving": "Kérelem elfogadása...", + "decline": "Kérés elutasítása" }, "availability": { "unknown": "Ismeretlen", - "pending": "", + "pending": "Függőben", "processing": "Feldolgozás", - "requested": "", + "requested": "Kérve", "partiallyAvailable": "Részleges", "available": "Elérhető", - "blacklisted": "", - "deleted": "" + "blacklisted": "Tiltólistára került", + "deleted": "Törölve" }, "status": { - "pending": "", - "approved": "", - "declined": "", - "failed": "", - "completed": "" + "pending": "Függőben", + "approved": "Jóváhagyva", + "declined": "Elutasítva", + "failed": "Sikertelen", + "completed": "Befejezett" }, - "toBeDetermined": "" + "toBeDetermined": "TBD" }, "mediaRequests-requestStats": { - "name": "", + "name": "Médiakérések állapota", "description": "Statisztikák az Ön médiakéréseiről", "option": {}, "titles": { @@ -2409,28 +2454,28 @@ "main": "Média statisztikák", "approved": "Már jóváhagyva", "pending": "Várakozás jóváhagyásra", - "processing": "", - "declined": "", - "available": "", + "processing": "Feldolgozás alatt", + "declined": "Már elutasították", + "available": "Már elérhető", "tv": "TV kérések", "movie": "Filmkérések", "total": "Összesen" }, "users": { "main": "Legnépszerűbb felhasználók", - "requests": "" + "requests": "Kérelmek" } } }, "mediaTranscoding": { - "name": "", - "description": "", + "name": "Médiatartalmak átkódolása", + "description": "Média átkódolásának statisztikái, az aktuális sorállás és a feldolgozók állapota", "option": { "defaultView": { "label": "Alapértelmezett nézet" }, "queuePageSize": { - "label": "" + "label": "A várólista méret" } }, "tab": { @@ -2438,9 +2483,9 @@ "queue": "Várólista", "statistics": "Statisztikák" }, - "currentIndex": "", + "currentIndex": "{total} / {start}–{end}", "healthCheck": { - "title": "", + "title": "Állapotfelmérés", "queued": "Sorban áll", "status": { "healthy": "Egészséges", @@ -2451,11 +2496,11 @@ "statistics": { "empty": "Üres", "transcodes": "Átkódolás", - "transcodesCount": "", - "healthChecksCount": "", - "filesCount": "", - "savedSpace": "", - "healthChecks": "", + "transcodesCount": "Átkódolás", + "healthChecksCount": "Állapotfelmérések", + "filesCount": "Fájlok", + "savedSpace": "Megtakarított tárhely", + "healthChecks": "Állapotfelmérések", "videoCodecs": "Kodekek", "videoContainers": "Tartály", "videoResolutions": "Felbontás" @@ -2467,7 +2512,7 @@ "eta": "Hátralévő idő", "progress": "Folyamat", "transcode": "Átkódolás", - "healthCheck": "" + "healthCheck": "Állapotfelmérés" } }, "queue": { @@ -2476,112 +2521,115 @@ "file": "Fájl", "size": "Méret", "transcode": "Átkódolás", - "healthCheck": "" + "healthCheck": "Állapotfelmérés" } } } }, "rssFeed": { - "name": "", - "description": "", + "name": "RSS feedek", + "description": "Egy vagy több általános RSS-, ATOM- vagy JSON-hírcsatorna figyelése és megjelenítése", "option": { "feedUrls": { - "label": "" + "label": "Hírcsatorna URL" }, "enableRtl": { - "label": "" + "label": "RTL engedélyezése" }, "textLinesClamp": { - "label": "" + "label": "Leírás sorlimit" }, "maximumAmountPosts": { - "label": "" + "label": "Bejegyzések számának korlátja" }, "hideDescription": { - "label": "" + "label": "Leírás elrejtése" + }, + "showPosterImage": { + "label": "Plakátkép megjelenítése" } } }, "releases": { - "name": "", - "description": "", + "name": "Kiadások", + "description": "Megjeleníti az adott tárolók aktuális verzióinak listáját a megadott verzió-kifejezés alapján.", "option": { "newReleaseWithin": { - "label": "", - "description": "" + "label": "Új kiadás a", + "description": "Használati példa: 1w (1 hét), 10M (10 hónap). Elfogadott mértékegységek: h (óra), d (nap), w (hét), M (hónap), y (év). Ha nem szeretné, hogy az új kiadások kiemelve jelenjenek meg, hagyja üresen." }, "staleReleaseWithin": { - "label": "", - "description": "" + "label": "Elavult kiadás", + "description": "Használati példa: 1w (1 hét), 10M (10 hónap). Elfogadott mértékegységek: h (óra), d (nap), w (hét), M (hónap), y (év). Ha nem szeretné, hogy a régi kiadások ki legyenek emelve, hagyja üresen." }, "showOnlyHighlighted": { - "label": "", - "description": "" + "label": "Csak a kiemelt elemeket mutasd", + "description": "Csak az új vagy lejárt kiadásokat mutassa. A fentiek szerint." }, "showDetails": { - "label": "" + "label": "Részletek megjelenítése" }, "showOnlyIcon": { - "label": "" + "label": "Csak ikonok megjelenítése" }, "topReleases": { - "label": "", - "description": "" + "label": "Legnépszerűbb kiadások", + "description": "A megjelenítendő legújabb kiadások maximális száma. A nulla érték korlátlan számot jelent." }, "repositories": { - "label": "", + "label": "Csomagtárolók", "addRepository": { - "label": "" + "label": "Gyűjtemény Hozzáadása" }, "importRepositories": { - "label": "", - "loading": "", - "noImagesFound": "", - "listFoundImages": "", - "listAlreadyImportedImages": "", - "allImagesAlreadyImported": "", - "onlyAdminCanImport": "", - "selectAll": "", - "deselectAll": "" + "label": "Importálás dockerből", + "loading": "Docker-képek betöltése", + "noImagesFound": "Nem találtam docker-képet", + "listFoundImages": "Talált képek listája", + "listAlreadyImportedImages": "A már importált képek listája", + "allImagesAlreadyImported": "Minden kép már importálva", + "onlyAdminCanImport": "Csak a rendszergazdák importálhatnak docker-ből", + "selectAll": "Összes kijelölése", + "deselectAll": "Kijelölés elvetése" }, "provider": { - "label": "" + "label": "Szolgáltató" }, "identifier": { - "label": "", - "placeholder": "" + "label": "Azonosító", + "placeholder": "Név vagy tulajdonos/név" }, "name": { - "label": "" + "label": "Név" }, "versionFilter": { - "label": "", + "label": "Verziószűrő", "prefix": { - "label": "" + "label": "Előtag" }, "precision": { - "label": "", + "label": "Pontosság", "options": { - "none": "" + "none": "Nem" } }, "suffix": { - "label": "" + "label": "Utótag" }, "regex": { - "label": "" + "label": "Reguláris kifejezés" } }, "edit": { - "label": "" + "label": "Szerkesztés" }, "editForm": { - "title": "", + "title": "Gyűjtemény Szerkesztése", "cancel": { - "label": "" + "label": "Mégse" }, "confirm": { - "label": "" + "label": "Megerősít" } }, "importForm": { @@ -2694,53 +2742,94 @@ "fwname": "", "version": "", "versiontitle": "", - "cputitle": "", - "memorytitle": "", - "cpu": "", - "memory": "", + "cputitle": "CPU használat", + "memorytitle": "Memória használat", + "cpu": "CPU", + "memory": "Memória", "interfaces": { - "name": "", - "trans": "", - "recv": "", - "title": "" + "name": "név", + "trans": "Továbbított", + "recv": "Kézbesített", + "title": "Hálózati interfészek" } } }, "notifications": { - "name": "", - "description": "", - "noItems": "", + "name": "Értesítések", + "description": "Egy integráció értesítési előzményeinek megjelenítése", + "noItems": "Nincs megjelenítendő üzenet.", "option": {} }, + "speedtestTracker": { + "name": "Hálózatsebesség Monitorozó", + "description": "Megjeleníti a Hálózatsebesség Monitorozó példányából származó sebességteszt-eredményeket.", + "option": { + "showLatestResult": { + "label": "Legfrissebb eredmények megjelenítése" + }, + "showStats": { + "label": "Átlag mutatása" + }, + "showRecentResults": { + "label": "Legutóbbi eredmények megjelenítése" + }, + "showPingGraph": { + "label": "Válaszidő grafikon megjelenítése" + } + }, + "latestResult": "Legfrissebb eredmény", + "averages": "Átlagok", + "tests": "{count} mérések", + "recentResults": "Legutóbbi eredmények", + "recentResultsSpeed": "Sebesség", + "recentResultsPing": "Válaszidő", + "download": "Letöltés", + "upload": "Feltöltés", + "ping": "Válaszidő", + "status": "Állapot", + "avgDownload": "Átlag Letöltés", + "avgUpload": "Átlag Feltöltés", + "avgPing": "Átlag válaszidő", + "healthy": "Normális", + "unhealthy": "Rossz", + "ok": "OK", + "fail": "Hiba", + "noSectionsEnabled": "A widget beállításaiban legalább egy szakaszt engedélyezzen.", + "error": { + "internalServerError": "A sebességteszt-adatok letöltése nem sikerült" + } + }, "systemResources": { - "name": "", - "description": "", + "name": "Rendszer erőforrások", + "description": "A rendszer CPU-, memória-, lemez- és egyéb hardverhasználata", "option": { "hasShadow": { - "label": "" + "label": "Diagram árnyékolás engedélyezése" }, "visibleCharts": { - "label": "", - "description": "", + "label": "Látható diagramok", + "description": "Válassza ki azokat a diagramokat, amelyeket meg szeretne jeleníteni.", "option": { - "cpu": "", - "memory": "", - "network": "" + "cpu": "CPU", + "memory": "Memória", + "gpu": "GPU", + "network": "Hálózat" } }, "labelDisplayMode": { - "label": "", + "label": "Címke megjelenítési mód", "option": { - "textWithIcon": "", - "text": "", - "icon": "", - "hidden": "" + "textWithIcon": "Szöveg megjelenítése ikonnal", + "text": "Csak a szöveget mutasd", + "icon": "Csak az ikont mutatsd", + "hidden": "Címke elrejtése" } } }, "card": { - "cpu": "", - "memory": "", + "cpu": "CPU", + "memory": "RAM", + "gpu": "GPU", "network": "", "up": "", "down": "" @@ -2882,20 +2971,20 @@ }, "field": { "pageTitle": { - "label": "" + "label": "Oldal cím" }, "metaTitle": { - "label": "" + "label": "Meta cím" }, "logoImageUrl": { - "label": "" + "label": "Logo kép URL" }, "faviconImageUrl": { - "label": "" + "label": "A favicon képének URL-címe" }, "backgroundImageUrl": { - "label": "", - "placeholder": "", + "label": "Háttérkép URL", + "placeholder": "Kezdje el gépelni a helyi képek kereséséhez", "group": { "your": "", "other": "" @@ -3406,7 +3495,7 @@ "title": "", "general": { "title": "", - "text": "" + "text": "A Homarr az Umami nevű nyílt forráskódú szoftver segítségével névtelen elemzési adatokat küld. Ha ez az opció engedélyezve van, a következő adatokat gyűjtjük: a Homarr verziója, az adatbázis típusa (MySQL/PostgreSQL/SQLite), a Docker/Kubernetes állapota, az engedélyezett hitelesítési módszerek, valamint az egyes funkciók száma. Minden adat névtelen és összesített formában kerül rögzítésre – személyes adatokat, URL-eket, neveket vagy bármilyen azonosítható adatot soha nem gyűjtünk. Ez segít nyílt forráskódú fejlesztői csapatunknak a használati szokások megértésében és a fejlesztési feladatok fontossági sorrendjének meghatározásában." }, "widgetData": { "title": "", @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "" }, @@ -3560,10 +3652,10 @@ "label": "" }, "firewallCpu": { - "label": "" + "label": "Tűzfal CPU" }, "firewallMemory": { - "label": "" + "label": "Tűzfal Memória" }, "firewallVersion": { "label": "" @@ -3698,6 +3790,10 @@ "title": "", "subtitle": "" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "", "subtitle": "" @@ -3747,10 +3843,10 @@ }, "stats": { "cpu": { - "label": "" + "label": "CPU" }, "memory": { - "label": "" + "label": "Memória" } }, "containerImage": { @@ -3888,10 +3984,10 @@ } }, "cpu": { - "label": "" + "label": "CPU" }, "memory": { - "label": "" + "label": "RAM" }, "pods": { "label": "" @@ -4595,12 +4691,12 @@ "title": "", "table": { "header": { - "season": "", - "episodes": "" + "season": "Évszak", + "episodes": "Epizódok" } }, "button": { - "send": "" + "send": "Kérelem küldése" } } } @@ -4610,39 +4706,39 @@ "certificate": { "field": { "hostname": { - "label": "" + "label": "Gazdagépnév" }, "subject": { - "label": "" + "label": "Tárgy" }, "issuer": { - "label": "" + "label": "Kiállító" }, "validFrom": { - "label": "" + "label": "Érvényesség kezdete" }, "validTo": { - "label": "" + "label": "Érvényesség vége" }, "serialNumber": { - "label": "" + "label": "Sorozatszám" }, "fingerprint": { - "label": "" + "label": "Ujjlenyomat" } }, "page": { "list": { - "title": "", - "description": "", + "title": "Megbízható tanúsítványok", + "description": "A Homarr ezt használja az integrációkból származó adatok lekérésére.", "noResults": { - "title": "" + "title": "Még nincsenek tanúsítványok" }, "invalid": { - "title": "", - "description": "" + "title": "Érvénytelen tanúsítvány", + "description": "A tanúsítvány értelmezése sikertelen" }, - "expires": "", + "expires": "Lejár {when}", "toHostnames": "" }, "hostnames": { @@ -4692,7 +4788,7 @@ }, "error": { "title": "", - "message": "" + "message": "A gazdagépnév nem távolítható el" } } } @@ -4701,10 +4797,10 @@ "log": { "level": { "option": { - "debug": "", - "info": "", - "warn": "", - "error": "" + "debug": "Hibakeresés", + "info": "Infó", + "warn": "Figyelmeztetés", + "error": "Hiba" } } } diff --git a/packages/translation/src/lang/it.json b/packages/translation/src/lang/it.json index 8a755b3e4..497c28d60 100644 --- a/packages/translation/src/lang/it.json +++ b/packages/translation/src/lang/it.json @@ -1525,6 +1525,17 @@ "offline": "Offline" } }, + "timetable": { + "name": "Orario", + "description": "Visualizza gli orari di partenza per una stazione", + "title": "Partenze {station}", + "noStation": "Nessuna stazione selezionata", + "option": { + "station": { + "label": "Stazione" + } + } + }, "notebook": { "name": "Blocco note", "description": "Un semplice widget notebook che supporta markdown", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "Nota Anchor", + "description": "Visualizza una nota selezionata da Ancoraggio", + "option": { + "noteId": { + "label": "Nota" + }, + "showTitle": { + "label": "Mostra titolo" + }, + "showUpdatedAt": { + "label": "Mostra ultimo aggiornamento" + } + }, + "empty": "Seleziona una nota da visualizzare", + "emptyContent": "Questa nota non ha nessun contenuto", + "notFound": "Nota non trovata", + "noNotes": "Nessuna nota trovata", + "integrationRequired": "Seleziona prima l'integrazione di Anchor", + "updatedAt": "Aggiornato {date}", + "untitled": "Senza titolo", + "edit": "Modifica", + "save": "Salva", + "cancel": "Annulla", + "readOnlyViewer": "Hai accesso in modalità visualizzazione a questa nota. La modifica è disabilitata.", + "saveForbidden": "Non hai i permessi per modificare questa nota.", + "saveFailed": "Impossibile salvare questa nota. Per favore, riprova." + }, "iframe": { "name": "iFrame", "description": "Incorpora qualsiasi contenuto da Internet. Alcuni siti web possono limitare l'accesso.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Consenti geo-localizzazione" + }, + "allowModals": { + "label": "Consenti modali" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "Mostra Informazioni Memoria" }, + "gpu": { + "label": "Mostra informazioni sulla GPU" + }, "showUptime": { "label": "Mostra Uptime" }, @@ -1997,46 +2042,46 @@ } }, "tracearr": { - "name": "", - "description": "", + "name": "Tracearr", + "description": "Monitoraggio avanzato del server multimediale con dati dettagliati su streaming e transcodifica", "option": { "showStreams": { - "label": "" + "label": "Mostra stream attivo" }, "showStats": { - "label": "" + "label": "Mostra riepilogo statistiche" }, "showRecentActivity": { - "label": "" + "label": "Mostra attività recenti" }, "showViolations": { - "label": "" + "label": "Visualizza violazioni" } }, "stats": { - "activeStreams": "", + "activeStreams": "Stream Attivi", "totalUsers": "Utenti Totali", - "transcodes": "", - "bandwidth": "" + "transcodes": "Transcodifiche", + "bandwidth": "Larghezza banda" }, "streams": { - "empty": "", + "empty": "Nessun stream attivo", "user": "Utente", - "media": "", - "state": "", - "quality": "", + "media": "Multimedia", + "state": "Stato", + "quality": "Qualità", "device": "Dispositivo", "progress": "Avanzamento", "videoDecision": { - "directPlay": "", - "transcode": "", - "directStream": "" + "directPlay": "Riproduzione diretta", + "transcode": "Transcodifica", + "directStream": "Streaming Diretto" } }, "recentActivity": { - "title": "", - "empty": "", - "watched": "", + "title": "Attività recenti", + "empty": "Nessuna attività recente", + "watched": "Guardato", "partial": "Parziale" }, "violations": { @@ -2047,8 +2092,8 @@ }, "noSectionsEnabled": "Nessuna sezione abilitata", "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "Nessuna integrazione Tracearr configurata", + "internalServerError": "Impossibile recuperare i dati di Tracearr" } }, "common": { @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "Nascondi descrizione" + }, + "showPosterImage": { + "label": "Mostra immagine poster" } } }, @@ -2712,6 +2760,45 @@ "noItems": "Nessuna notifica da visualizzare.", "option": {} }, + "speedtestTracker": { + "name": "SpeedTest Tracker", + "description": "Visualizza i risultati del test di velocità della tua istanza di Speedtest Tracker.", + "option": { + "showLatestResult": { + "label": "Mostra l'ultimo risultato" + }, + "showStats": { + "label": "Mostra medie" + }, + "showRecentResults": { + "label": "Mostra risultati recenti" + }, + "showPingGraph": { + "label": "Mostra grafico di ping" + } + }, + "latestResult": "Ultima Risultato", + "averages": "Medie", + "tests": "{count} test", + "recentResults": "Risultati Recenti", + "recentResultsSpeed": "Velocità", + "recentResultsPing": "Ping", + "download": "Download", + "upload": "Upload", + "ping": "Ping", + "status": "Stato", + "avgDownload": "Media di Download", + "avgUpload": "Media di Upload", + "avgPing": "Media di Ping", + "healthy": "Normale funzionamento", + "unhealthy": "Compromesso", + "ok": "OK", + "fail": "Fallito", + "noSectionsEnabled": "Abilita almeno una sezione nelle opzioni del widget.", + "error": { + "internalServerError": "Recupero dei dati di speedtest non riuscito" + } + }, "systemResources": { "name": "Risorse di sistema", "description": "CPU, memoria, disco e altro utilizzo hardware del sistema", @@ -2725,6 +2812,7 @@ "option": { "cpu": "CPU", "memory": "Memoria", + "gpu": "GPU", "network": "Rete" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "CPU", "memory": "MEM", + "gpu": "GPU", "network": "NET", "up": "SU", "down": "DOWN" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "Stato del server Minecraft" }, + "timetable": { + "label": "Orario" + }, "iconsUpdater": { "label": "Aggiornatore Icone" }, @@ -3575,7 +3667,7 @@ "label": "Meteo" }, "tracearr": { - "label": "" + "label": "Tracearr" } }, "interval": { @@ -3698,6 +3790,10 @@ "title": "Traduttori", "subtitle": "{count} contribuendo alle traduzioni in molte lingue" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "Librerie", "subtitle": "{count} utilizzato nel Codice di Homarr" diff --git a/packages/translation/src/lang/ja.json b/packages/translation/src/lang/ja.json index aeb7a1da6..72c636d84 100644 --- a/packages/translation/src/lang/ja.json +++ b/packages/translation/src/lang/ja.json @@ -1138,9 +1138,9 @@ "dangerZone": "危険な操作", "noResults": "結果が見つかりません", "unsavedChanges": "保存していない変更があります!", - "servers": "", - "applications": "", - "services": "", + "servers": "サーバー", + "applications": "アプリケーション", + "services": "サービス", "preview": { "show": "プレビューを表示", "hide": "プレビューを閉じる" @@ -1525,6 +1525,17 @@ "offline": "オフライン" } }, + "timetable": { + "name": "タイムテーブル", + "description": "駅の出発時刻を表示します", + "title": "{station} 出発時刻", + "noStation": "駅が選択されていません", + "option": { + "station": { + "label": "駅" + } + } + }, "notebook": { "name": "メモ帳", "description": "マークダウンをサポートするシンプルなノートブックウィジェット", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "アンカーノート", + "description": "アンカーから選択したノートを表示する", + "option": { + "noteId": { + "label": "ノート" + }, + "showTitle": { + "label": "タイトルを表示" + }, + "showUpdatedAt": { + "label": "最終更新を表示" + } + }, + "empty": "表示するノートを選択", + "emptyContent": "このノートにはコンテンツがありません", + "notFound": "ノートが見つかりません", + "noNotes": "ノートがありません", + "integrationRequired": "アンカー統合を最初に選択してください", + "updatedAt": "{date} に更新しました", + "untitled": "タイトルなし", + "edit": "編集", + "save": "保存", + "cancel": "キャンセル", + "readOnlyViewer": "このノートを閲覧することができます。編集は無効になっています", + "saveForbidden": "このノートを編集する権限がありません。", + "saveFailed": "このノートを保存できませんでした。もう一度やり直してください。" + }, "iframe": { "name": "iFrame", "description": "インターネットから任意のコンテンツを埋め込みます。一部のウェブサイトではアクセスが制限される場合があります", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "位置情報を許可する" + }, + "allowModals": { + "label": "モーダルを許可" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "メモリー情報を表示" }, + "gpu": { + "label": "GPU情報を表示" + }, "showUptime": { "label": "稼働時間を表示" }, @@ -1964,91 +2009,91 @@ } }, "coolify": { - "name": "", - "description": "", + "name": "Coolify", + "description": "サーバーとアプリケーションを使用した Coolify インスタンスの概要", "option": { "showServers": { - "label": "" + "label": "サーバーを表示" }, "showApplications": { - "label": "" + "label": "アプリケーションを表示" }, "showServices": { - "label": "" + "label": "サービスを表示" } }, "empty": { - "servers": "", - "applications": "", - "services": "" + "servers": "サーバーが見つかりません", + "applications": "アプリケーションが見つかりません", + "services": "サービスが見つかりません" }, "footer": { - "updated": "" + "updated": "{when} に更新しました" }, "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "Coolify 統合が設定されていません", + "internalServerError": "Coolify データの取得に失敗しました" }, "server": { - "buildServer": "" + "buildServer": "ビルド" }, "instances": { - "title": "" + "title": "インスタンス" } }, "tracearr": { - "name": "", - "description": "", + "name": "Tracearr", + "description": "詳細なストリームとトランスコーディングデータによるメディアサーバーのモニタリングの強化", "option": { "showStreams": { - "label": "" + "label": "アクティブなストリームを表示" }, "showStats": { - "label": "" + "label": "統計情報の概要を表示" }, "showRecentActivity": { - "label": "" + "label": "最近のアクティビティを表示" }, "showViolations": { - "label": "" + "label": "違反を表示" } }, "stats": { - "activeStreams": "", - "totalUsers": "", - "transcodes": "", - "bandwidth": "" + "activeStreams": "アクティブなストリーム", + "totalUsers": "総ユーザー数", + "transcodes": "トランスコード", + "bandwidth": "帯域幅" }, "streams": { - "empty": "", - "user": "", - "media": "", - "state": "", - "quality": "", - "device": "", - "progress": "", + "empty": "アクティブなストリームがありません", + "user": "ユーザー", + "media": "メディア", + "state": "状態", + "quality": "品質", + "device": "デバイス", + "progress": "進捗状況", "videoDecision": { - "directPlay": "", - "transcode": "", - "directStream": "" + "directPlay": "ダイレクトプレイ", + "transcode": "トランスコード", + "directStream": "ダイレクトストリーム" } }, "recentActivity": { - "title": "", - "empty": "", - "watched": "", - "partial": "" + "title": "最近のアクティビティ", + "empty": "最近のアクティビティなし", + "watched": "視聴済", + "partial": "一部" }, "violations": { - "title": "", - "empty": "", - "rule": "", - "user": "" + "title": "違反", + "empty": "最近の違反はありません", + "rule": "ルール", + "user": "ユーザー" }, - "noSectionsEnabled": "", + "noSectionsEnabled": "有効なセクションがありません", "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "Tracearrとの連携が設定されていません", + "internalServerError": "Tracearrデータの取得に失敗しました" } }, "common": { @@ -2147,50 +2192,50 @@ } }, "immich-serverStats": { - "name": "", - "description": "", + "name": "Immich サーバーの統計", + "description": "Immich インスタンスに関する情報", "option": { "showUsers": { - "label": "", - "description": "" + "label": "ユーザを表示", + "description": "インスタンスにユーザー数を表示する" }, "showPhotos": { - "label": "", - "description": "" + "label": "写真を表示", + "description": "インスタンス上の写真数を表示する" }, "showVideos": { - "label": "", - "description": "" + "label": "動画を表示", + "description": "インスタンスに動画の数を表示する" }, "showStorage": { - "label": "", - "description": "" + "label": "ストレージを表示", + "description": "使用されたストレージの合計容量を表示します" } }, - "users": "", - "photos": "", - "videos": "", - "storage": "" + "users": "ユーザー", + "photos": "写真", + "videos": "動画", + "storage": "ストレージ使用量" }, "immich-albumCarousel": { - "name": "", + "name": "Immich アルバム", "option": { "albumId": { - "label": "", - "description": "" + "label": "アルバム ID", + "description": "これはImmichのアルバムを示す固有のIDです。 「a21aca09-9f05-47dc-b1a1-7b53c547226e」など、アルバムを開いてURLから一意の文字列をコピーすることでこのIDを見つけることができます。" }, "rotationIntervalSeconds": { - "label": "", - "description": "" + "label": "間隔 (秒)", + "description": "アルバム内の写真をX秒ごとに回転させます。少なくとも1でなければなりません。3600未満でなければなりません。" }, "showPhotoInfo": { - "label": "", - "description": "" + "label": "写真情報を表示", + "description": "スライドショーの下部に画像の日付と現在の索引を表示します" } }, - "description": "", - "noAlbumSelected": "", - "noPhotos": "" + "description": "Immichアルバムの写真のスライド", + "noAlbumSelected": "アルバムが選択されていない、ウィジェットを編集してアルバムを選択してください", + "noPhotos": "このアルバムには写真がありません" }, "downloads": { "name": "クライアントをダウンロード", @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "詳細を非表示" + }, + "showPosterImage": { + "label": "ポスターの画像を表示" } } }, @@ -2712,6 +2760,45 @@ "noItems": "表示する通知はありません。", "option": {} }, + "speedtestTracker": { + "name": "スピードテストトラッカー", + "description": "Speedtest Trackerインスタンスからスピードテストの結果を表示します。", + "option": { + "showLatestResult": { + "label": "最新の結果を表示" + }, + "showStats": { + "label": "平均を表示" + }, + "showRecentResults": { + "label": "最近の結果を表示" + }, + "showPingGraph": { + "label": "ping グラフを表示" + } + }, + "latestResult": "直近の結果", + "averages": "平均値", + "tests": "{count} 回テスト", + "recentResults": "最近の結果", + "recentResultsSpeed": "スピード", + "recentResultsPing": "Ping", + "download": "ダウンロード", + "upload": "アップロード", + "ping": "Ping", + "status": "ステータス", + "avgDownload": "平均ダウンロード", + "avgUpload": "平均アップロード", + "avgPing": "平均 Ping", + "healthy": "正常", + "unhealthy": "異常", + "ok": "成功", + "fail": "失敗", + "noSectionsEnabled": "ウィジェットオプションで少なくとも1つのセクションを有効にします。", + "error": { + "internalServerError": "スピードテストデータの取得に失敗しました" + } + }, "systemResources": { "name": "システムリソース", "description": "CPU、メモリ、ディスクなどのシステムハードウェアの使用", @@ -2725,6 +2812,7 @@ "option": { "cpu": "CPU", "memory": "メモリ", + "gpu": "GPU", "network": "ネットワーク" } }, @@ -2741,38 +2829,39 @@ "card": { "cpu": "CPU", "memory": "MEM", + "gpu": "GPU", "network": "NET", "up": "UP", "down": "DOWN" } }, "systemDisks": { - "name": "", - "description": "", + "name": "システムディスク", + "description": "システムのディスク使用量", "option": { "showTemperatureIfAvailable": { - "label": "" + "label": "利用可能な場合は温度を表示" }, "displayMode": { - "label": "", + "label": "表示モード", "option": { "percentage": { - "label": "" + "label": "割合 (例 76%)" }, "absolute": { - "label": "" + "label": "絶対値(例:800GB / 1TB)" }, "free": { - "label": "" + "label": "空き領域の割合(例:24%空き)" } } }, "showBackgroundBar": { - "label": "" + "label": "バックグラウンドの使用状況バーを表示" } }, "status": { - "unhealthy": "" + "unhealthy": "異常" } } }, @@ -3406,7 +3495,7 @@ "title": "統計情報", "general": { "title": "匿名の解析を送信", - "text": "Homarr はオープンソースソフトウェア Umami を使用して匿名化された分析情報を送信します。個人情報を一切収集しないため、GDPRとCCPAに完全に準拠しています。分析機能を有効にすると、オープンソースチームが問題を特定し、バックログの優先順位付けを行うのに役立ちますので、ぜひ有効にしてください。" + "text": "Homarrは、オープンソースソフトウェアUmamiを使用して匿名化された分析を送信します。 有効にすると、以下が収集されます。Homarrバージョン、データベースタイプ(MySQL/PostgreSQL/SQLite)、Docker/Kubernetesステータス、認証方法、各機能の数。 すべてのデータは匿名で集計されます。個人情報、URL、名前、または識別可能なデータは収集されません。 これにより、オープンソースチームは利用パターンを理解し、開発に優先順位を付けることができます。" }, "widgetData": { "title": "ウィジェットのデータ", @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "Minecraft サーバーの状態" }, + "timetable": { + "label": "タイムテーブル" + }, "iconsUpdater": { "label": "アイコンアップデータ" }, @@ -3575,7 +3667,7 @@ "label": "天気" }, "tracearr": { - "label": "" + "label": "Tracearr" } }, "interval": { @@ -3698,6 +3790,10 @@ "title": "翻訳者", "subtitle": "{count} の多くの言語で翻訳を行っている" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "ライブラリ", "subtitle": "{count} 個が Homarr のコードで使用されています" diff --git a/packages/translation/src/lang/ko.json b/packages/translation/src/lang/ko.json index c7140e4cd..60d11950f 100644 --- a/packages/translation/src/lang/ko.json +++ b/packages/translation/src/lang/ko.json @@ -1525,6 +1525,17 @@ "offline": "" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "노트북", "description": "", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "", "description": "인터넷에서 콘텐츠를 퍼옵니다. 일부 웹사이트는 액세스를 제한할 수 있습니다.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "지리적 위치 허용" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "" }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "", "description": "", @@ -2725,6 +2812,7 @@ "option": { "cpu": "", "memory": "", + "gpu": "", "network": "" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "", "memory": "", + "gpu": "", "network": "", "up": "", "down": "" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "" }, @@ -3698,6 +3790,10 @@ "title": "", "subtitle": "" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "", "subtitle": "" diff --git a/packages/translation/src/lang/lt.json b/packages/translation/src/lang/lt.json index 9436577ff..a28bed0de 100644 --- a/packages/translation/src/lang/lt.json +++ b/packages/translation/src/lang/lt.json @@ -1525,6 +1525,17 @@ "offline": "" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "Užrašai", "description": "", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "", "description": "Įterpkite bet kokį turinį iš interneto. Kai kuriose svetainėse prieiga gali būti ribojama.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Leisti nustatyti geografinę buvimo vietą" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "" }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "", "description": "", @@ -2725,6 +2812,7 @@ "option": { "cpu": "", "memory": "", + "gpu": "", "network": "" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "", "memory": "", + "gpu": "", "network": "", "up": "", "down": "" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "" }, @@ -3698,6 +3790,10 @@ "title": "", "subtitle": "" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "", "subtitle": "" diff --git a/packages/translation/src/lang/lv.json b/packages/translation/src/lang/lv.json index 05994cbcf..6e06269c1 100644 --- a/packages/translation/src/lang/lv.json +++ b/packages/translation/src/lang/lv.json @@ -1525,6 +1525,17 @@ "offline": "" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "Piezīmes", "description": "", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "", "description": "Iegult jebkuru saturu no interneta. Dažas vietnes var ierobežot piekļuvi.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Atļaut ģeogrāfiskās atrašanās vietas noteikšanu" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "Rādīt atmiņas informāciju" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "" }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "", "description": "", @@ -2725,6 +2812,7 @@ "option": { "cpu": "", "memory": "", + "gpu": "", "network": "" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "", "memory": "", + "gpu": "", "network": "", "up": "", "down": "" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "" }, @@ -3698,6 +3790,10 @@ "title": "", "subtitle": "" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "", "subtitle": "" diff --git a/packages/translation/src/lang/nl.json b/packages/translation/src/lang/nl.json index fc29c0e77..1773a66ac 100644 --- a/packages/translation/src/lang/nl.json +++ b/packages/translation/src/lang/nl.json @@ -764,7 +764,7 @@ "expired": "Het certificaat is verlopen.", "notYetValid": "Het certificaat is nog niet geldig.", "untrusted": "Het certificaat wordt niet vertrouwd.", - "hostnameMismatch": "" + "hostnameMismatch": "Het certificaat hostname komt niet overeen met de URL." }, "alert": { "permission": { @@ -1525,6 +1525,17 @@ "offline": "Offline" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "Notitieboek", "description": "Een eenvoudige notitie widget die markdown ondersteunt", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "iFrame", "description": "Elke inhoud van het internet insluiten. Sommige websites kunnen de toegang beperken.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Geolocatie toestaan" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "Werkgeheugen info weergeven" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "Uptime weergeven" }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "Beschrijving verbergen" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "Geen meldingen om weer te geven.", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "Systeembronnen", "description": "CPU, geheugen, schijf en ander hardwaregebruik van je systeem", @@ -2725,6 +2812,7 @@ "option": { "cpu": "Processor", "memory": "Geheugen", + "gpu": "", "network": "Netwerk" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "CPU", "memory": "MEM", + "gpu": "", "network": "NET", "up": "OMHOOG", "down": "OMLAAG" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "Minecraft server status" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "Icoon updater" }, @@ -3698,6 +3790,10 @@ "title": "Vertalers", "subtitle": "{count} bijdragen aan vertalingen in vele talen" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "Bibliotheken", "subtitle": "{count} gebruikt in de code van Homarr" diff --git a/packages/translation/src/lang/no.json b/packages/translation/src/lang/no.json index 690126ff2..5f7c0c6db 100644 --- a/packages/translation/src/lang/no.json +++ b/packages/translation/src/lang/no.json @@ -1525,6 +1525,17 @@ "offline": "Offline" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "Notisbok", "description": "En enkel notatbok widget som støtter markdown", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "iFrame", "description": "Bygg inn innhold fra Internett. Noen nettsteder kan begrense adgang.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Tillat geolokalisering" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "Vis minneinfo" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "Vis oppetid" }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "Skjul beskrivelse" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "Ingen varsler å vise.", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "Systemressurser", "description": "CPU, minne, disk og annen maskinvarebruk på systemet ditt", @@ -2725,6 +2812,7 @@ "option": { "cpu": "CPU", "memory": "Minne", + "gpu": "", "network": "Nettverk" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "CPU", "memory": "Minne", + "gpu": "", "network": "NETT", "up": "OPP", "down": "NED" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "Minecraft serverstatus" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "Ikon oppdatering" }, @@ -3698,6 +3790,10 @@ "title": "Oversettere", "subtitle": "{count} bidrar med oversettelser på mange språk" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "Biblioteker", "subtitle": "{count} brukt i koden til Homarr" diff --git a/packages/translation/src/lang/pl.json b/packages/translation/src/lang/pl.json index 9fdba5951..e28b2cb19 100644 --- a/packages/translation/src/lang/pl.json +++ b/packages/translation/src/lang/pl.json @@ -1138,9 +1138,9 @@ "dangerZone": "Strefa zagrożenia", "noResults": "Nie znaleziono żadnych wyników", "unsavedChanges": "Masz niezapisane zmiany!", - "servers": "", - "applications": "", - "services": "", + "servers": "Serwery", + "applications": "Aplikacje", + "services": "Usługi", "preview": { "show": "Pokaż podgląd", "hide": "Ukryj podgląd" @@ -1525,6 +1525,17 @@ "offline": "Niedostępny" } }, + "timetable": { + "name": "Rozkład", + "description": "Wyświetla czas odjazdu dla stacji", + "title": "Odjazdy {station}", + "noStation": "Nie wybrano stacji", + "option": { + "station": { + "label": "Stacja" + } + } + }, "notebook": { "name": "Notatnik", "description": "Prosty widżet notatnika obsługujący markdown", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "Notatka z Anchor", + "description": "Wyświetla wybraną notatkę z Anchor", + "option": { + "noteId": { + "label": "Notatka" + }, + "showTitle": { + "label": "Pokaż tytuł" + }, + "showUpdatedAt": { + "label": "Pokaż ostatnią aktualizację" + } + }, + "empty": "Wybierz notatkę do wyświetlenia", + "emptyContent": "Ta notatka nie ma zawartości", + "notFound": "Nie znaleziono notatki", + "noNotes": "Nie znaleziono notatek", + "integrationRequired": "Najpierw wybierz integrację z Anchor", + "updatedAt": "Zaktualizowano {date}", + "untitled": "Bez tytułu", + "edit": "Edytuj", + "save": "Zapisz", + "cancel": "Anuluj", + "readOnlyViewer": "Masz dostęp tylko do odczytu tej notatki. Edycja jest wyłączona.", + "saveForbidden": "Nie masz uprawnień do edycji tej notatki.", + "saveFailed": "Nie udało się zapisać tej notatki. Spróbuj ponownie." + }, "iframe": { "name": "iFrame", "description": "Osadzaj dowolne treści z internetu. Niektóre strony internetowe mogą ograniczać dostęp.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Zezwalaj na geolokalizację" + }, + "allowModals": { + "label": "Zezwól na okna modalne" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "Pokaż informacje o pamięci" }, + "gpu": { + "label": "Pokaż informacje o GPU" + }, "showUptime": { "label": "Pokaż czas pracy" }, @@ -1944,19 +1989,19 @@ "description": "Statystyki Twoich kontenerów (ten widżet można dodać tylko z uprawnieniami administratora)", "option": { "enableRowSorting": { - "label": "" + "label": "Włącz sortowanie elementów" }, "defaultSort": { - "label": "", + "label": "👉 Kolumna używana domyślnie do sortowania", "option": { - "name": "", - "state": "", - "cpuUsage": "", - "memoryUsage": "" + "name": "Nazwa", + "state": "Stan", + "cpuUsage": "Użycie CPU", + "memoryUsage": "Użycie pamięci" } }, "descendingDefaultSort": { - "label": "" + "label": "Odwróć sortowanie" } }, "error": { @@ -1964,91 +2009,91 @@ } }, "coolify": { - "name": "", - "description": "", + "name": "Coolify", + "description": "Przegląd instancji Coolify z serwerami i aplikacjami", "option": { "showServers": { - "label": "" + "label": "Pokaż serwery" }, "showApplications": { - "label": "" + "label": "Pokaż aplikacje" }, "showServices": { - "label": "" + "label": "Pokaż usługi" } }, "empty": { - "servers": "", - "applications": "", - "services": "" + "servers": "Nie znaleziono serwerów", + "applications": "Nie znaleziono aplikacji", + "services": "Nie znaleziono usług" }, "footer": { - "updated": "" + "updated": "Zaktualizowano {when}" }, "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "Brak skonfigurowanej integracji Coolify", + "internalServerError": "Nie udało się pobrać danych z Coolify" }, "server": { - "buildServer": "" + "buildServer": "Build" }, "instances": { - "title": "" + "title": "Instancje" } }, "tracearr": { - "name": "", - "description": "", + "name": "Tracearr", + "description": "Rozszerzone monitorowanie serwera multimediów z szczegółowymi danymi o strumieniach i transkodowaniu", "option": { "showStreams": { - "label": "" + "label": "Pokaż aktywne strumienie" }, "showStats": { - "label": "" + "label": "Pokaż podsumowanie statystyk" }, "showRecentActivity": { - "label": "" + "label": "Pokaż ostatnią aktywność" }, "showViolations": { - "label": "" + "label": "Pokaż naruszenia" } }, "stats": { - "activeStreams": "", - "totalUsers": "", - "transcodes": "", - "bandwidth": "" + "activeStreams": "Aktywne strumienie", + "totalUsers": "Łączna liczba użytkowników", + "transcodes": "Transkodowanie", + "bandwidth": "Przepustowość" }, "streams": { - "empty": "", - "user": "", - "media": "", - "state": "", - "quality": "", - "device": "", - "progress": "", + "empty": "Brak aktywnych strumieni", + "user": "Użytkownik", + "media": "Media", + "state": "Status", + "quality": "Jakość", + "device": "Urządzenie", + "progress": "Postęp", "videoDecision": { - "directPlay": "", - "transcode": "", - "directStream": "" + "directPlay": "Direct Play", + "transcode": "Transkodowanie", + "directStream": "Direct Stream" } }, "recentActivity": { - "title": "", - "empty": "", - "watched": "", - "partial": "" + "title": "Ostatnia aktywność", + "empty": "Brak ostatniej aktywności", + "watched": "Obejrzane", + "partial": "Częściowo" }, "violations": { - "title": "", - "empty": "", - "rule": "", - "user": "" + "title": "Naruszenia", + "empty": "Brak ostatnich naruszeń", + "rule": "Reguła", + "user": "Użytkownik" }, - "noSectionsEnabled": "", + "noSectionsEnabled": "Brak włączonych sekcji", "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "Brak skonfigurowanej integracji Tracearr", + "internalServerError": "Nie udało się pobrać danych z Tracearr" } }, "common": { @@ -2147,50 +2192,50 @@ } }, "immich-serverStats": { - "name": "", - "description": "", + "name": "Statystyki serwera Immich", + "description": "Informacje o Twojej instancji Immich", "option": { "showUsers": { - "label": "", - "description": "" + "label": "Pokaż użytkowników", + "description": "Pokaż liczbę użytkowników w Twojej instancji" }, "showPhotos": { - "label": "", - "description": "" + "label": "Pokaż zdjęcia", + "description": "Pokaż liczbę zdjęć w Twojej instancji" }, "showVideos": { - "label": "", - "description": "" + "label": "Pokaż filmy", + "description": "Pokaż liczbę filmów w Twojej instancji" }, "showStorage": { - "label": "", - "description": "" + "label": "Pokaż wykorzystanie pamięci", + "description": "Pokaż całkowite wykorzystanie pamięci" } }, - "users": "", - "photos": "", - "videos": "", - "storage": "" + "users": "Użytkownicy", + "photos": "Zdjęcia", + "videos": "Filmy", + "storage": "Wykorzystana przestrzeń" }, "immich-albumCarousel": { - "name": "", + "name": "Album Immich", "option": { "albumId": { - "label": "", - "description": "" + "label": "ID albumu", + "description": "To unikalny identyfikator odnoszący się do Twojego albumu w Immich. Możesz go znaleźć, otwierając album i kopiując unikalny ciąg znaków z adresu URL, np. „a21aca09-9f05-47dc-b1a1-7b53c547226e”." }, "rotationIntervalSeconds": { - "label": "", - "description": "" + "label": "Interwał w sekundach", + "description": "Zmieniaj zdjęcia w albumie co X sekund. Wartość musi wynosić co najmniej 1 i mniej niż 3600." }, "showPhotoInfo": { - "label": "", - "description": "" + "label": "Pokaż informacje o zdjęciu", + "description": "Wyświetl datę zdjęcia oraz bieżący indeks na dole pokazu slajdów" } }, - "description": "", - "noAlbumSelected": "", - "noPhotos": "" + "description": "Pokaz slajdów zdjęć z Twojego albumu w Immich", + "noAlbumSelected": "Nie wybrano albumu. Edytuj widget i wybierz album", + "noPhotos": "Brak zdjęć w tym albumie" }, "downloads": { "name": "Klient pobierania", @@ -2443,8 +2488,8 @@ "title": "Ocena stanu zdrowia", "queued": "W kolejce", "status": { - "healthy": "Zdrowy", - "unhealthy": "Niezdrowy" + "healthy": "Dobry", + "unhealthy": "Zły" } }, "panel": { @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "Ukryj opis" + }, + "showPosterImage": { + "label": "Pokaż obraz okładki" } } }, @@ -2712,6 +2760,45 @@ "noItems": "Brak powiadomień do wyświetlenia.", "option": {} }, + "speedtestTracker": { + "name": "Speedtest Tracker", + "description": "Wyświetla wyniki testów prędkości z Twojej instancji Speedtest Tracker", + "option": { + "showLatestResult": { + "label": "Pokaż ostatni wynik" + }, + "showStats": { + "label": "Pokaż średnie" + }, + "showRecentResults": { + "label": "Pokaż ostatnie wyniki" + }, + "showPingGraph": { + "label": "Pokaż wykres pingu" + } + }, + "latestResult": "Najnowszy wynik", + "averages": "Średnie", + "tests": "{count} testów", + "recentResults": "Ostatnie wyniki", + "recentResultsSpeed": "Prędkość", + "recentResultsPing": "Ping", + "download": "Pobieranie", + "upload": "Wysyłanie", + "ping": "Ping", + "status": "Status", + "avgDownload": "Średnie pobieranie", + "avgUpload": "Średnie wysyłanie", + "avgPing": "Średni ping", + "healthy": "Dobry", + "unhealthy": "Zły", + "ok": "Ok", + "fail": "Błąd", + "noSectionsEnabled": "Włącz co najmniej jedną sekcję w opcjach widgetu", + "error": { + "internalServerError": "Nie udało się pobrać danych testu prędkości" + } + }, "systemResources": { "name": "Zasoby systemowe", "description": "Wykorzystanie CPU, pamięci, dysku i innych zasobów sprzętowych system", @@ -2725,6 +2812,7 @@ "option": { "cpu": "Procesor", "memory": "Pamięć", + "gpu": "GPU", "network": "Sieć" } }, @@ -2741,38 +2829,39 @@ "card": { "cpu": "Procesor", "memory": "Pamięć", + "gpu": "GPU", "network": "Sieć", "up": "Aktywny", "down": "Nieaktywny" } }, "systemDisks": { - "name": "", - "description": "", + "name": "Dyski systemowe", + "description": "Wykorzystanie dysku w Twoim systemie", "option": { "showTemperatureIfAvailable": { - "label": "" + "label": "Pokaż temperaturę, jeśli jest dostępna" }, "displayMode": { - "label": "", + "label": "Tryb wyświetlania", "option": { "percentage": { - "label": "" + "label": "Procentowo (np. 76%)" }, "absolute": { - "label": "" + "label": "Wartości bezwzględne (np. 800 GB / 1 TB)" }, "free": { - "label": "" + "label": "Procent wolnego miejsca (np. 24% wolne)" } } }, "showBackgroundBar": { - "label": "" + "label": "Pokaż pasek wykorzystania w tle" } }, "status": { - "unhealthy": "" + "unhealthy": "Zły" } } }, @@ -3461,10 +3550,10 @@ } }, "user": { - "title": "", + "title": "Użytkownicy", "enableGravatar": { - "label": "", - "description": "" + "label": "Włącz Gravatar", + "description": "Używa awatarów z Libravatar/Gravatar, gdy nie ustawiono własnego awatara i skonfigurowano adres e-mail" } }, "search": { @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "Status serwera Minecraft" }, + "timetable": { + "label": "Harmonogram" + }, "iconsUpdater": { "label": "Aktualizator ikon" }, @@ -3575,7 +3667,7 @@ "label": "Pogoda" }, "tracearr": { - "label": "" + "label": "Tracearr" } }, "interval": { @@ -3698,6 +3790,10 @@ "title": "Tłumacze", "subtitle": "{count} współtworzy tłumaczenia w wielu językach" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "Biblioteki", "subtitle": "{count} używanych w kodzie Homarr" diff --git a/packages/translation/src/lang/pt.json b/packages/translation/src/lang/pt.json index 6c47bc477..4862a07cb 100644 --- a/packages/translation/src/lang/pt.json +++ b/packages/translation/src/lang/pt.json @@ -7,15 +7,15 @@ "description": "Para começar, por favor selecione como você deseja configurar sua instância Homarr.", "action": { "scratch": "Começar do zero", - "importOldmarr": "Importe de uma instância Homarr anterior a 1.0" + "importOldmarr": "Importe de uma instância do Homarr anterior a 1.0" } }, "import": { "title": "Importar dados", "subtitle": "Você pode importar dados de uma instância existente do Homarr.", "dropzone": { - "title": "Arraste o arquivo zip aqui ou clique para procurar", - "description": "O arquivo zip enviado será processado e você poderá selecionar o que deseja importar" + "title": "Arraste o arquivo ZIP aqui ou clique para procurar", + "description": "O arquivo ZIP enviado será processado e você poderá selecionar o que deseja importar" }, "fileInfo": { "action": { @@ -36,13 +36,13 @@ }, "summary": { "title": "Resumo da importação", - "description": "No resumo abaixo, você pode ver o que será importado", + "description": "No resumo abaixo você pode ver o que será importado", "action": { "import": "Confirmar a importação e continuar" }, "entities": { "apps": "Aplicativos", - "boards": "Placas", + "boards": "Painéis", "integrations": "Integrações", "credentialUsers": "Usuários credenciados" } @@ -164,7 +164,7 @@ }, "action": { "login": { - "label": "“Login”", + "label": "Login", "labelWith": "Iniciar sessão com {provider}", "notification": { "success": { @@ -1525,6 +1525,17 @@ "offline": "Offline" } }, + "timetable": { + "name": "Calendário", + "description": "Mostra os horários de partida de uma estação", + "title": "Partidas {station}", + "noStation": "Nenhuma estação selecionada", + "option": { + "station": { + "label": "Estação" + } + } + }, "notebook": { "name": "Caderno de anotações", "description": "Um widget de bloco de notas simples que suporta markdown", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "Nota do Anchor", + "description": "Exibe a nota selecionada do Anchor", + "option": { + "noteId": { + "label": "Nota" + }, + "showTitle": { + "label": "Mostrar título" + }, + "showUpdatedAt": { + "label": "Exibir última atualização" + } + }, + "empty": "Selecione uma nota para exibir", + "emptyContent": "Essa nota esta vazia", + "notFound": "Nenhuma nota encontrada", + "noNotes": "Nenhuma nota encontrada", + "integrationRequired": "Selecione primeiro uma integração do Anchor", + "updatedAt": "Atualizado em {date}", + "untitled": "Sem título", + "edit": "Editar", + "save": "Salvar", + "cancel": "Cancelar", + "readOnlyViewer": "Você tem acesso de visualização a esta nota. A edição está desativada.", + "saveForbidden": "Você não tem permissão para editar essa nota.", + "saveFailed": "Não foi possível salvar a nota. Tente novamente." + }, "iframe": { "name": "iFrame", "description": "Incorporar qualquer conteúdo da internet. Alguns sites podem restringir o acesso.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Permitir geolocalização" + }, + "allowModals": { + "label": "Permitir modais" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "Mostrar informações da memória" }, + "gpu": { + "label": "Mostrar informações da GPU" + }, "showUptime": { "label": "Exibir tempo de atividade" }, @@ -1997,58 +2042,58 @@ } }, "tracearr": { - "name": "", - "description": "", + "name": "Tracearr", + "description": "Monitoramento avançado de servidor de mídia com dados detalhados de transmissão e transcodificação\n", "option": { "showStreams": { - "label": "" + "label": "Exibir transmissões ativas" }, "showStats": { - "label": "" + "label": "Exibir resumo de estatísticas" }, "showRecentActivity": { - "label": "" + "label": "Exibir Atividade Recente" }, "showViolations": { - "label": "" + "label": "Mostrar Violações" } }, "stats": { - "activeStreams": "", - "totalUsers": "", - "transcodes": "", - "bandwidth": "" + "activeStreams": "Streams Ativas", + "totalUsers": "Total de usuários", + "transcodes": "Transcodificações", + "bandwidth": "Largura da banda" }, "streams": { - "empty": "", - "user": "", - "media": "", - "state": "", - "quality": "", - "device": "", - "progress": "", + "empty": "Sem transmissões ativas", + "user": "Usuário", + "media": "Mídia", + "state": "Estado", + "quality": "Qualidade", + "device": "Dispositivo", + "progress": "Progresso", "videoDecision": { - "directPlay": "", - "transcode": "", - "directStream": "" + "directPlay": "Reprodução direta", + "transcode": "Transcodificação", + "directStream": "Transmissão direta" } }, "recentActivity": { - "title": "", - "empty": "", - "watched": "", - "partial": "" + "title": "Atividade recente", + "empty": "Nenhuma atividade recente", + "watched": "Assistido", + "partial": "Parcial" }, "violations": { - "title": "", - "empty": "", - "rule": "", - "user": "" + "title": "Violações", + "empty": "Não há violações recentes", + "rule": "Regra", + "user": "Usuário" }, - "noSectionsEnabled": "", + "noSectionsEnabled": "Nenhuma seção habilitada", "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "Nenhuma integração Coolify configurada", + "internalServerError": "Falha ao buscar dados do Tracearr" } }, "common": { @@ -2147,50 +2192,50 @@ } }, "immich-serverStats": { - "name": "", - "description": "", + "name": "Estatísticas do Servidor Immich", + "description": "Informações sobre sua instância do Immich", "option": { "showUsers": { - "label": "", - "description": "" + "label": "Mostrar usuários", + "description": "Mostrar a contagem de usuários na sua instância" }, "showPhotos": { - "label": "", - "description": "" + "label": "Mostrar Fotos", + "description": "Mostrar a contagem de fotos na sua instância" }, "showVideos": { - "label": "", - "description": "" + "label": "Mostrar vídeos", + "description": "Mostrar contagem de vídeos na sua instância" }, "showStorage": { - "label": "", - "description": "" + "label": "Mostrar armazenamento", + "description": "Mostrar a quantidade total de armazenamento utilizado" } }, - "users": "", - "photos": "", - "videos": "", - "storage": "" + "users": "Usuários", + "photos": "Fotos", + "videos": "Vídeos", + "storage": "Armazenamento Utilizado" }, "immich-albumCarousel": { - "name": "", + "name": "Álbum do Immich", "option": { "albumId": { - "label": "", - "description": "" + "label": "ID do Álbum", + "description": "Esta é uma identificação única que se refere ao seu álbum Immich. Você pode encontrar essa identificação abrindo um álbum e copiando a string única da URL, por exemplo 'a21aca09-9f05-47dc-b1a1-7b53c547226e'" }, "rotationIntervalSeconds": { - "label": "", - "description": "" + "label": "Intervalo em segundos", + "description": "Girar entre as imagens no álbum a cada X segundos. Deve ser pelo menos 1. Deve estar abaixo de 3600." }, "showPhotoInfo": { - "label": "", - "description": "" + "label": "Mostrar informações da foto", + "description": "Exibir a data da imagem e o índice atual na parte inferior da apresentação" } }, - "description": "", - "noAlbumSelected": "", - "noPhotos": "" + "description": "Apresentação de imagens em seu álbum Imich", + "noAlbumSelected": "Nenhum álbum selecionado, edite o widget e escolha um álbum", + "noPhotos": "Nenhuma foto neste álbum" }, "downloads": { "name": "Cliente de Download", @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "Ocultar descrição" + }, + "showPosterImage": { + "label": "Exibir pôster" } } }, @@ -2712,6 +2760,45 @@ "noItems": "Nenhuma notificação para exibir.", "option": {} }, + "speedtestTracker": { + "name": "Speedtest Tracker", + "description": "Exibe os resultados do teste de velocidade da sua instância do Speedtest Tracker.", + "option": { + "showLatestResult": { + "label": "Mostrar último resultado" + }, + "showStats": { + "label": "Exibir médias" + }, + "showRecentResults": { + "label": "Mostrar resultados recentes" + }, + "showPingGraph": { + "label": "Exibir gráfico de ping" + } + }, + "latestResult": "Último resultado", + "averages": "Médias", + "tests": "Testes", + "recentResults": "Resultados recentes", + "recentResultsSpeed": "Velocidade", + "recentResultsPing": "Ping", + "download": "Download", + "upload": "Upload", + "ping": "Ping", + "status": "Status", + "avgDownload": "Download médio", + "avgUpload": "Upload médio", + "avgPing": "Ping médio", + "healthy": "Saudável", + "unhealthy": "Com problemas", + "ok": "Ok", + "fail": "Falhou", + "noSectionsEnabled": "Habilite ao menos uma seção nas opções do widget.", + "error": { + "internalServerError": "Falha ao obter dados do Speedtest" + } + }, "systemResources": { "name": "Recursos do Sistema", "description": "Utilização da CPU, Memória, Disco e outro hardware do seu sistema", @@ -2725,6 +2812,7 @@ "option": { "cpu": "CPU", "memory": "Memória", + "gpu": "GPU", "network": "Rede" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "CPU", "memory": "MEM", + "gpu": "GPU", "network": "REDE", "up": "ENVIO", "down": "RECEBIDO" @@ -3017,7 +3106,7 @@ } }, "background": { - "title": "Antecedentes" + "title": "Imagem de fundo" }, "appearance": { "title": "Aparência" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "Status do servidor Minecraft" }, + "timetable": { + "label": "Horários" + }, "iconsUpdater": { "label": "Atualizador de Ícones" }, @@ -3575,7 +3667,7 @@ "label": "Clima" }, "tracearr": { - "label": "" + "label": "Tracearr" } }, "interval": { @@ -3698,6 +3790,10 @@ "title": "Tradutores", "subtitle": "{count} traduções contribuídas em vários idiomas" }, + "sponsors": { + "title": "Apoiadores", + "subtitle": "{count} apoiando o projeto financeiramente" + }, "libraries": { "title": "Bibliotecas", "subtitle": "{count} usadas no código do Homarr" diff --git a/packages/translation/src/lang/ro.json b/packages/translation/src/lang/ro.json index c97064d78..636db5678 100644 --- a/packages/translation/src/lang/ro.json +++ b/packages/translation/src/lang/ro.json @@ -1525,6 +1525,17 @@ "offline": "" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "Agendă", "description": "", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "", "description": "Încorporați orice conținut de pe internet. Unele site-uri web pot restricționa accesul.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Permiteți geolocalizarea" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "Afișare informații memorie" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "" }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "", "description": "", @@ -2725,6 +2812,7 @@ "option": { "cpu": "", "memory": "", + "gpu": "", "network": "" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "", "memory": "", + "gpu": "", "network": "", "up": "", "down": "" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "" }, @@ -3698,6 +3790,10 @@ "title": "", "subtitle": "" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "", "subtitle": "" diff --git a/packages/translation/src/lang/ru.json b/packages/translation/src/lang/ru.json index 1639b85c4..c2f1203c5 100644 --- a/packages/translation/src/lang/ru.json +++ b/packages/translation/src/lang/ru.json @@ -1525,6 +1525,17 @@ "offline": "Не в сети" } }, + "timetable": { + "name": "Расписание", + "description": "Отображает время отправления со станции", + "title": "Отправления {station}", + "noStation": "Станция не выбрана", + "option": { + "station": { + "label": "Станция" + } + } + }, "notebook": { "name": "Блокнот", "description": "Простой виджет заметок с поддержкой markdown", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "iFrame", "description": "Встраивает любой контент из интернета. Некоторые сайты могут ограничивать доступ.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Разрешить геолокацию" + }, + "allowModals": { + "label": "Разрешить модальные окна" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "Показать информацию о памяти" }, + "gpu": { + "label": "Показать информацию о GPU" + }, "showUptime": { "label": "Показывать время работы" }, @@ -1997,58 +2042,58 @@ } }, "tracearr": { - "name": "", - "description": "", + "name": "Tracearr", + "description": "Мониторинг медиасервера с детальной информацией о потоках и транскодировании", "option": { "showStreams": { - "label": "" + "label": "Показать активные потоки" }, "showStats": { - "label": "" + "label": "Показать сводку статистики" }, "showRecentActivity": { - "label": "" + "label": "Показать недавнюю активность" }, "showViolations": { - "label": "" + "label": "Показать нарушения" } }, "stats": { - "activeStreams": "", - "totalUsers": "", - "transcodes": "", - "bandwidth": "" + "activeStreams": "Активные потоки", + "totalUsers": "Всего пользователей", + "transcodes": "Транскодирования", + "bandwidth": "Пропускная способность" }, "streams": { - "empty": "", - "user": "", - "media": "", - "state": "", - "quality": "", - "device": "", - "progress": "", + "empty": "Нет активных потоков", + "user": "Пользователь", + "media": "Медиа", + "state": "Состояние", + "quality": "Качество", + "device": "Устройство", + "progress": "Прогресс", "videoDecision": { - "directPlay": "", - "transcode": "", - "directStream": "" + "directPlay": "Прямое воспроизведение", + "transcode": "Транскодирование", + "directStream": "Прямой поток" } }, "recentActivity": { - "title": "", - "empty": "", - "watched": "", - "partial": "" + "title": "Недавняя активность", + "empty": "Нет недавней активности", + "watched": "Просмотрено", + "partial": "Частично" }, "violations": { - "title": "", - "empty": "", - "rule": "", - "user": "" + "title": "Нарушения", + "empty": "Нет недавних нарушений", + "rule": "Правило", + "user": "Пользователь" }, - "noSectionsEnabled": "", + "noSectionsEnabled": "Секции не включены", "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "Интеграция Tracearr не настроена", + "internalServerError": "Не удалось получить данные Tracearr" } }, "common": { @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "Скрыть описание" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "Нет уведомлений для отображения.", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "Системные ресурсы", "description": "Использование ЦП, памяти, сети и другого оборудования вашей системы", @@ -2725,6 +2812,7 @@ "option": { "cpu": "ЦП", "memory": "Память", + "gpu": "GPU", "network": "Сеть" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "ЦП", "memory": "ОЗУ", + "gpu": "GPU", "network": "Сеть", "up": "Исх.", "down": "Вх." @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "Статус сервера Minecraft" }, + "timetable": { + "label": "Расписание" + }, "iconsUpdater": { "label": "Обновление иконок" }, @@ -3575,7 +3667,7 @@ "label": "Погода" }, "tracearr": { - "label": "" + "label": "Tracearr" } }, "interval": { @@ -3698,6 +3790,10 @@ "title": "Переводчики", "subtitle": "{count} помогают с переводами на разные языки" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "Библиотеки", "subtitle": "{count} используются в коде Homarr" diff --git a/packages/translation/src/lang/sk.json b/packages/translation/src/lang/sk.json index 207429c4d..e32d45860 100644 --- a/packages/translation/src/lang/sk.json +++ b/packages/translation/src/lang/sk.json @@ -1525,6 +1525,17 @@ "offline": "Odpojené" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "Poznámkový blok", "description": "Jednoduchý widget poznámkového bloku, ktorý podporuje markdown", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "iFrame", "description": "Vložte akýkoľvek obsah z internetu. Niektoré webové stránky môžu obmedziť prístup.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Povolenie geografickej lokalizácie" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "Zobraziť informácie o pamäti" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "Zobraziť Uptime" }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "", "description": "", @@ -2725,6 +2812,7 @@ "option": { "cpu": "", "memory": "", + "gpu": "", "network": "" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "", "memory": "", + "gpu": "", "network": "", "up": "", "down": "" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "Minecraft Server Stav" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "Aktualizátor ikon" }, @@ -3698,6 +3790,10 @@ "title": "Prekladatelia", "subtitle": "{count} prispievanie prekladmi do mnohých jazykov" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "Knižnice", "subtitle": "{count} používané v Homarrskom kódexe" diff --git a/packages/translation/src/lang/sl.json b/packages/translation/src/lang/sl.json index c98da18f2..b156df881 100644 --- a/packages/translation/src/lang/sl.json +++ b/packages/translation/src/lang/sl.json @@ -1525,6 +1525,17 @@ "offline": "" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "Beležnica", "description": "", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "", "description": "Vstavite katero koli vsebino iz interneta. Nekatera spletna mesta lahko omejijo dostop.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Omogočanje zemljepisne lokacije" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "" }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "", "description": "", @@ -2725,6 +2812,7 @@ "option": { "cpu": "", "memory": "", + "gpu": "", "network": "" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "", "memory": "", + "gpu": "", "network": "", "up": "", "down": "" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "" }, @@ -3698,6 +3790,10 @@ "title": "", "subtitle": "" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "", "subtitle": "" diff --git a/packages/translation/src/lang/sv.json b/packages/translation/src/lang/sv.json index 38ac40bd7..0bd7991bb 100644 --- a/packages/translation/src/lang/sv.json +++ b/packages/translation/src/lang/sv.json @@ -1525,6 +1525,17 @@ "offline": "" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "Anteckningsbok", "description": "", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "", "description": "Infoga valfritt innehåll från internet. Vissa webbplatser kan ha begränsad åtkomst.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Tillåt geografisk lokalisering" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "Visa minnesinformation" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "" }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "", "description": "", @@ -2725,6 +2812,7 @@ "option": { "cpu": "", "memory": "", + "gpu": "", "network": "" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "", "memory": "", + "gpu": "", "network": "", "up": "", "down": "" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "" }, @@ -3698,6 +3790,10 @@ "title": "Översättare", "subtitle": "{count} bidrar med översättningar på flera olika språk" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "", "subtitle": "" diff --git a/packages/translation/src/lang/tr.json b/packages/translation/src/lang/tr.json index 732858cd4..2f14b98d3 100644 --- a/packages/translation/src/lang/tr.json +++ b/packages/translation/src/lang/tr.json @@ -678,7 +678,7 @@ "action": { "add": "Bir uygulamayı bağla", "remove": "Bağlantıyı kaldır", - "select": "" + "select": "Bağlantı kurmak istediğiniz uygulamayı seçin" } } }, @@ -709,7 +709,7 @@ "description": "\"{kind}\" entegrasyonu arama motorlarıyla kullanılabilir. Arama motorunu otomatik olarak yapılandırmak için bunu işaretleyin." }, "app": { - "sectionTitle": "" + "sectionTitle": "Bağlı Uygulama" }, "createApp": { "label": "Uygulama oluştur", @@ -1051,7 +1051,7 @@ "add": "Ekle", "apply": "Uygula", "backToOverview": "Genel bakışa dön", - "change": "", + "change": "Değiştir", "create": "Oluştur", "createAnother": "Kaydet ve Yeni Oluştur", "edit": "Düzenle", @@ -1138,9 +1138,9 @@ "dangerZone": "Tehlikeli Bölge", "noResults": "Sonuç bulunamadı", "unsavedChanges": "Kaydedilmemiş değişiklikleriniz var!", - "servers": "", - "applications": "", - "services": "", + "servers": "Sunucular", + "applications": "Uygulamalar", + "services": "Hizmetler", "preview": { "show": "Ara Renkleri Göster", "hide": "Ara Renkleri Gizle" @@ -1177,8 +1177,8 @@ }, "unit": { "speed": { - "kilometersPerHour": "", - "milesPerHour": "" + "kilometersPerHour": "km/h", + "milesPerHour": "mph" } } }, @@ -1193,7 +1193,7 @@ "label": "Başlık" }, "customCssClasses": { - "label": "" + "label": "Özel CSS sınıfları" }, "borderColor": { "label": "Kenarlık rengi" @@ -1525,6 +1525,17 @@ "offline": "Çevrimdışı" } }, + "timetable": { + "name": "Zaman Çizelgesi", + "description": "Bir istasyon için kalkış saatlerini görüntüler", + "title": "{station} kalkışları", + "noStation": "İstasyon seçilmedi", + "option": { + "station": { + "label": "İstasyon" + } + } + }, "notebook": { "name": "Not Defteri", "description": "Markdown'ı destekleyen basit bir not defteri bileşeni", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "Anchor Notu", + "description": "Anchor'dan seçilen bir notu görüntüler", + "option": { + "noteId": { + "label": "Not" + }, + "showTitle": { + "label": "Başlığı göster" + }, + "showUpdatedAt": { + "label": "Son güncellenmeyi göster" + } + }, + "empty": "Görüntülenecek bir not seçin", + "emptyContent": "Bu notun içeriği yok", + "notFound": "Not bulunamadı", + "noNotes": "Not bulunamadı", + "integrationRequired": "Önce bir Anchor entegrasyonu seçin", + "updatedAt": "Güncellendi: {date}", + "untitled": "Başlıksız", + "edit": "Düzenle", + "save": "Kaydet", + "cancel": "İptal", + "readOnlyViewer": "Bu nota görüntüleyici erişiminiz var. Düzenleme devre dışı bırakıldı.", + "saveForbidden": "Bu notu düzenleme izniniz yok.", + "saveFailed": "Not kaydedilemedi. Lütfen tekrar deneyin." + }, "iframe": { "name": "iFrame", "description": "İnternetten herhangi bir içeriği yerleştirin. Bazı web siteleri erişimi kısıtlayabilir.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Coğrafi konuma izin ver (geolocation)" + }, + "allowModals": { + "label": "Allow modals" } }, "error": { @@ -1783,7 +1825,7 @@ "description": "Yalnızca mevcut hava durumunda" }, "useImperialSpeed": { - "label": "" + "label": "Use mph for windspeed" }, "location": { "label": "Hava durumu konumu" @@ -1858,6 +1900,9 @@ "memory": { "label": "Bellek Bilgilerini Göster" }, + "gpu": { + "label": "Show GPU Info" + }, "showUptime": { "label": "Çalışma Süresini Göster" }, @@ -1944,19 +1989,19 @@ "description": "Konteynerlerinizin istatistikleri (Bu widget yalnızca yönetici ayrıcalıklarıyla eklenebilir)", "option": { "enableRowSorting": { - "label": "" + "label": "Enable items sorting" }, "defaultSort": { - "label": "", + "label": "Column used for sorting by default", "option": { - "name": "", - "state": "", - "cpuUsage": "", - "memoryUsage": "" + "name": "Name", + "state": "State", + "cpuUsage": "CPU usage", + "memoryUsage": "Memory usage" } }, "descendingDefaultSort": { - "label": "" + "label": "Invert sorting" } }, "error": { @@ -1964,91 +2009,91 @@ } }, "coolify": { - "name": "", - "description": "", + "name": "Coolify", + "description": "Overview of your Coolify instance with servers and applications", "option": { "showServers": { - "label": "" + "label": "Show servers" }, "showApplications": { - "label": "" + "label": "Show applications" }, "showServices": { - "label": "" + "label": "Show services" } }, "empty": { - "servers": "", - "applications": "", - "services": "" + "servers": "No servers found", + "applications": "No applications found", + "services": "No services found" }, "footer": { - "updated": "" + "updated": "Updated {when}" }, "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "No Coolify integration configured", + "internalServerError": "Failed to fetch Coolify data" }, "server": { - "buildServer": "" + "buildServer": "Build" }, "instances": { - "title": "" + "title": "Instances" } }, "tracearr": { - "name": "", - "description": "", + "name": "Tracearr", + "description": "Enhanced media server monitoring with detailed stream and transcoding data", "option": { "showStreams": { - "label": "" + "label": "Show active streams" }, "showStats": { - "label": "" + "label": "Show stats summary" }, "showRecentActivity": { - "label": "" + "label": "Show recent activity" }, "showViolations": { - "label": "" + "label": "Show violations" } }, "stats": { - "activeStreams": "", - "totalUsers": "", - "transcodes": "", - "bandwidth": "" + "activeStreams": "Active Streams", + "totalUsers": "Total Users", + "transcodes": "Transcodes", + "bandwidth": "Bandwidth" }, "streams": { - "empty": "", - "user": "", - "media": "", - "state": "", - "quality": "", - "device": "", - "progress": "", + "empty": "No active streams", + "user": "User", + "media": "Media", + "state": "State", + "quality": "Quality", + "device": "Device", + "progress": "Progress", "videoDecision": { - "directPlay": "", - "transcode": "", - "directStream": "" + "directPlay": "Direct Play", + "transcode": "Transcode", + "directStream": "Direct Stream" } }, "recentActivity": { - "title": "", - "empty": "", - "watched": "", - "partial": "" + "title": "Recent Activity", + "empty": "No recent activity", + "watched": "Watched", + "partial": "Partial" }, "violations": { - "title": "", - "empty": "", - "rule": "", - "user": "" + "title": "Violations", + "empty": "No recent violations", + "rule": "Rule", + "user": "User" }, - "noSectionsEnabled": "", + "noSectionsEnabled": "No sections enabled", "error": { - "noIntegration": "", - "internalServerError": "" + "noIntegration": "No Tracearr integration configured", + "internalServerError": "Failed to fetch Tracearr data" } }, "common": { @@ -2147,50 +2192,50 @@ } }, "immich-serverStats": { - "name": "", - "description": "", + "name": "Immich Server Stats", + "description": "Information about your Immich instance", "option": { "showUsers": { - "label": "", - "description": "" + "label": "Show users", + "description": "Show count of users on your instance" }, "showPhotos": { - "label": "", - "description": "" + "label": "Show photos", + "description": "Show count of photos on your instance" }, "showVideos": { - "label": "", - "description": "" + "label": "Show videos", + "description": "Show count of videos on your instance" }, "showStorage": { - "label": "", - "description": "" + "label": "Show storage", + "description": "Show the total amount of storage used" } }, - "users": "", - "photos": "", - "videos": "", - "storage": "" + "users": "Users", + "photos": "Photos", + "videos": "Videos", + "storage": "Used Storage" }, "immich-albumCarousel": { - "name": "", + "name": "Immich Album", "option": { "albumId": { - "label": "", - "description": "" + "label": "Album ID", + "description": "This is a unique ID which refers to your Immich album. You can find this id by opening an album and copying the unique string from the URL, for example 'a21aca09-9f05-47dc-b1a1-7b53c547226e'" }, "rotationIntervalSeconds": { - "label": "", - "description": "" + "label": "Interval in seconds", + "description": "Rotate between pictures in the album every X seconds. Must be at least 1. Must be below 3600." }, "showPhotoInfo": { - "label": "", - "description": "" + "label": "Show photo info", + "description": "Display date of the picture and the current index at the bottom of the slideshow" } }, - "description": "", - "noAlbumSelected": "", - "noPhotos": "" + "description": "Slideshow of pictures in your Immich album", + "noAlbumSelected": "No album selected, edit widget and choose an album", + "noPhotos": "No photos in this album" }, "downloads": { "name": "İndirme İstemcisi", @@ -2385,7 +2430,7 @@ "unknown": "Bilinmeyen", "pending": "Bekleyen", "processing": "İşlemde", - "requested": "", + "requested": "Requested", "partiallyAvailable": "Kısmi", "available": "Mevcut", "blacklisted": "Engellenenler", @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "Açıklamayı gizle" + }, + "showPosterImage": { + "label": "Show poster image" } } }, @@ -2712,6 +2760,45 @@ "noItems": "Görüntülenecek bildirim yok.", "option": {} }, + "speedtestTracker": { + "name": "Speedtest Tracker", + "description": "Displays speed test results from your Speedtest Tracker instance.", + "option": { + "showLatestResult": { + "label": "Show latest result" + }, + "showStats": { + "label": "Show averages" + }, + "showRecentResults": { + "label": "Show recent results" + }, + "showPingGraph": { + "label": "Show ping graph" + } + }, + "latestResult": "Latest Result", + "averages": "Averages", + "tests": "{count} tests", + "recentResults": "Recent Results", + "recentResultsSpeed": "Speed", + "recentResultsPing": "Ping", + "download": "Download", + "upload": "Upload", + "ping": "Ping", + "status": "Status", + "avgDownload": "Avg Download", + "avgUpload": "Avg Upload", + "avgPing": "Avg Ping", + "healthy": "Healthy", + "unhealthy": "Unhealthy", + "ok": "OK", + "fail": "Fail", + "noSectionsEnabled": "Enable at least one section in widget options.", + "error": { + "internalServerError": "Failed to fetch speedtest data" + } + }, "systemResources": { "name": "Sistem kaynakları", "description": "Sisteminizin CPU, Bellek, Disk ve diğer donanım kullanımları", @@ -2725,6 +2812,7 @@ "option": { "cpu": "İşlemci", "memory": "Bellek", + "gpu": "GPU", "network": "Ağ" } }, @@ -2741,38 +2829,39 @@ "card": { "cpu": "İşlemci", "memory": "BELLEK", + "gpu": "GPU", "network": "AĞ", "up": "YÜKLEME", "down": "İNDİRME" } }, "systemDisks": { - "name": "", - "description": "", + "name": "System disks", + "description": "Disk usage of your system", "option": { "showTemperatureIfAvailable": { - "label": "" + "label": "Show temperature if available" }, "displayMode": { - "label": "", + "label": "Display mode", "option": { "percentage": { - "label": "" + "label": "Percentage (e.g., 76%)" }, "absolute": { - "label": "" + "label": "Absolute values (e.g., 800GB / 1TB)" }, "free": { - "label": "" + "label": "Free space percentage (e.g., 24% free)" } } }, "showBackgroundBar": { - "label": "" + "label": "Show background usage bar" } }, "status": { - "unhealthy": "" + "unhealthy": "Unhealthy" } } }, @@ -3196,8 +3285,8 @@ "integration": "Entegrasyonlar", "app": "Uygulamalar", "group": "Gruplar", - "searchEngine": "", - "media": "" + "searchEngine": "Search engines", + "media": "Medias" }, "statisticLabel": { "boards": "Paneller", @@ -3206,8 +3295,8 @@ "authorization": "Yetkilendirme" }, "heroBanner": { - "title": "", - "subtitle": "" + "title": "Welcome back to your", + "subtitle": "{app} Board" } }, "board": { @@ -3461,10 +3550,10 @@ } }, "user": { - "title": "", + "title": "Kullanıcılar", "enableGravatar": { - "label": "", - "description": "" + "label": "Gravatar'ı etkinleştir", + "description": "Özel avatar ayarlanmadığında ve bir e-posta adresi tanımlandığında Libravatar/Gravatar kullanıcı avatarları kullanılır" } }, "search": { @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "Minecraft sunucu durumu" }, + "timetable": { + "label": "Zaman Çizelgesi" + }, "iconsUpdater": { "label": "Simge Güncelleme" }, @@ -3575,7 +3667,7 @@ "label": "Hava Durumu" }, "tracearr": { - "label": "" + "label": "Tracearr" } }, "interval": { @@ -3698,6 +3790,10 @@ "title": "Çevirmenler", "subtitle": "Birçok kişi Homarr'ın {count} dile çevrilmesine katkı sağlıyor" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "Kütüphaneler", "subtitle": "Homarr kodlamasında {count} kütüphane kullanılıyor" diff --git a/packages/translation/src/lang/uk.json b/packages/translation/src/lang/uk.json index 22c8bac56..d0466bbda 100644 --- a/packages/translation/src/lang/uk.json +++ b/packages/translation/src/lang/uk.json @@ -1525,6 +1525,17 @@ "offline": "Офлайн" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "Блокнот", "description": "", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "iFrame", "description": "Вставити будь-який контент з інтернету. Деякі вебсайти можуть обмежувати доступ.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Дозволити геолокацію" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "Показати інформацію про пам'ять" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "" }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "", "description": "", @@ -2725,6 +2812,7 @@ "option": { "cpu": "", "memory": "", + "gpu": "", "network": "" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "", "memory": "", + "gpu": "", "network": "", "up": "", "down": "" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "Статус сервера Minecraft" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "" }, @@ -3698,6 +3790,10 @@ "title": "Перекладачі", "subtitle": "{count} - стільки людей допомагають перекладати багатьма мовами" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "Бібліотеки", "subtitle": "{count} - стільки бібліотек використано в коді Homarr" diff --git a/packages/translation/src/lang/vi.json b/packages/translation/src/lang/vi.json index 2a59c0256..fc3c85549 100644 --- a/packages/translation/src/lang/vi.json +++ b/packages/translation/src/lang/vi.json @@ -1525,6 +1525,17 @@ "offline": "" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "Ghi chú", "description": "", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "", "description": "Nhúng bất kỳ nội dung nào từ internet. Một số trang web có thể hạn chế quyền truy cập.", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "Cho phép định vị" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "" }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "", "description": "", @@ -2725,6 +2812,7 @@ "option": { "cpu": "", "memory": "", + "gpu": "", "network": "" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "", "memory": "", + "gpu": "", "network": "", "up": "", "down": "" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "" }, @@ -3698,6 +3790,10 @@ "title": "", "subtitle": "" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "", "subtitle": "" diff --git a/packages/translation/src/lang/zh.json b/packages/translation/src/lang/zh.json index 97bfe3b04..3d6260c86 100644 --- a/packages/translation/src/lang/zh.json +++ b/packages/translation/src/lang/zh.json @@ -1525,6 +1525,17 @@ "offline": "離線" } }, + "timetable": { + "name": "", + "description": "", + "title": "", + "noStation": "", + "option": { + "station": { + "label": "" + } + } + }, "notebook": { "name": "筆記", "description": "支持 Markdown 的簡單筆記小工具", @@ -1595,6 +1606,34 @@ } } }, + "anchorNote": { + "name": "", + "description": "", + "option": { + "noteId": { + "label": "" + }, + "showTitle": { + "label": "" + }, + "showUpdatedAt": { + "label": "" + } + }, + "empty": "", + "emptyContent": "", + "notFound": "", + "noNotes": "", + "integrationRequired": "", + "updatedAt": "", + "untitled": "", + "edit": "", + "save": "", + "cancel": "", + "readOnlyViewer": "", + "saveForbidden": "", + "saveFailed": "" + }, "iframe": { "name": "iFrame", "description": "崁入網路上的任何內容,某些網站可能限制訪問", @@ -1625,6 +1664,9 @@ }, "allowGeolocation": { "label": "允許地址位置" + }, + "allowModals": { + "label": "" } }, "error": { @@ -1858,6 +1900,9 @@ "memory": { "label": "顯示記憶體訊息" }, + "gpu": { + "label": "" + }, "showUptime": { "label": "" }, @@ -2499,6 +2544,9 @@ }, "hideDescription": { "label": "" + }, + "showPosterImage": { + "label": "" } } }, @@ -2712,6 +2760,45 @@ "noItems": "", "option": {} }, + "speedtestTracker": { + "name": "", + "description": "", + "option": { + "showLatestResult": { + "label": "" + }, + "showStats": { + "label": "" + }, + "showRecentResults": { + "label": "" + }, + "showPingGraph": { + "label": "" + } + }, + "latestResult": "", + "averages": "", + "tests": "", + "recentResults": "", + "recentResultsSpeed": "", + "recentResultsPing": "", + "download": "", + "upload": "", + "ping": "", + "status": "", + "avgDownload": "", + "avgUpload": "", + "avgPing": "", + "healthy": "", + "unhealthy": "", + "ok": "", + "fail": "", + "noSectionsEnabled": "", + "error": { + "internalServerError": "" + } + }, "systemResources": { "name": "", "description": "", @@ -2725,6 +2812,7 @@ "option": { "cpu": "", "memory": "", + "gpu": "", "network": "" } }, @@ -2741,6 +2829,7 @@ "card": { "cpu": "", "memory": "", + "gpu": "", "network": "", "up": "", "down": "" @@ -3505,6 +3594,9 @@ "minecraftServerStatus": { "label": "Minecraft 伺服器狀態" }, + "timetable": { + "label": "" + }, "iconsUpdater": { "label": "icon 上傳器" }, @@ -3698,6 +3790,10 @@ "title": "翻譯人員", "subtitle": "{count} 翻譯了許多語言" }, + "sponsors": { + "title": "", + "subtitle": "" + }, "libraries": { "title": "資料庫", "subtitle": "{count} 於 Homarr 待碼中使用" diff --git a/packages/ui/package.json b/packages/ui/package.json index 512478be4..a781debfd 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -30,24 +30,24 @@ "@homarr/settings": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", - "@mantine/core": "^8.3.16", - "@mantine/dates": "^8.3.16", - "@mantine/hooks": "^8.3.16", - "@tabler/icons-react": "^3.40.0", - "crypto-js": "^4.2.0", - "mantine-react-table": "2.0.0-beta.9", - "next": "16.1.6", - "react": "19.2.4", - "react-dom": "19.2.4", - "svgson": "^5.3.1" + "@mantine/core": "catalog:", + "@mantine/dates": "catalog:", + "@mantine/hooks": "catalog:", + "@tabler/icons-react": "catalog:", + "crypto-js": "catalog:", + "mantine-react-table": "catalog:", + "next": "catalog:", + "react": "catalog:", + "react-dom": "catalog:", + "svgson": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "@types/crypto-js": "^4.2.2", - "@types/css-modules": "^1.0.5", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "@types/crypto-js": "catalog:", + "@types/css-modules": "catalog:", + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/validation/package.json b/packages/validation/package.json index 7b91a5d3e..8cde9c838 100644 --- a/packages/validation/package.json +++ b/packages/validation/package.json @@ -24,14 +24,14 @@ "dependencies": { "@homarr/definitions": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0", - "zod": "^4.2.1", - "zod-form-data": "^3.0.1" + "zod": "catalog:", + "zod-form-data": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/validation/src/redirection-url.ts b/packages/validation/src/redirection-url.ts new file mode 100644 index 000000000..3121f6726 --- /dev/null +++ b/packages/validation/src/redirection-url.ts @@ -0,0 +1,14 @@ +/** + * Sanitizes the URL from malicious payloads. + * Prevents open redirects such as //example.com/path + * and prevents XSS such as javascript:(). + * Returns / as a default or when unsafe. + * @param url The URL to sanitize + */ +export const sanitizeRedirectionUrl = (url?: string) => { + if (url && url.startsWith("/") && !url.startsWith("//")) { + return url; + } else { + return "/"; // Safe default + } +}; diff --git a/packages/validation/src/user.ts b/packages/validation/src/user.ts index c00d9226d..4d5bd1e77 100644 --- a/packages/validation/src/user.ts +++ b/packages/validation/src/user.ts @@ -57,12 +57,13 @@ export const userBaseCreateSchema = z.object({ password: userPasswordSchema, confirmPassword: z.string(), email: z.string().email().or(z.string().length(0)).optional(), - groupIds: z.array(z.string()), }); -export const userCreateSchema = addConfirmPasswordRefinement(userBaseCreateSchema); +export const userCreateSchema = addConfirmPasswordRefinement(userBaseCreateSchema).and( + z.object({ groupIds: z.array(z.string()) }), +); -export const userInitSchema = addConfirmPasswordRefinement(userBaseCreateSchema.omit({ groupIds: true })); +export const userInitSchema = addConfirmPasswordRefinement(userBaseCreateSchema); export const userSignInSchema = z.object({ name: z.string().min(1), @@ -111,12 +112,15 @@ const baseChangePasswordSchema = z.object({ previousPassword: z.string().min(1), password: userPasswordSchema, confirmPassword: z.string(), - userId: z.string(), }); -export const userChangePasswordSchema = addConfirmPasswordRefinement(baseChangePasswordSchema.omit({ userId: true })); +export const userChangePasswordSchema = addConfirmPasswordRefinement(baseChangePasswordSchema); -export const userChangePasswordApiSchema = addConfirmPasswordRefinement(baseChangePasswordSchema); +export const userChangePasswordApiSchema = addConfirmPasswordRefinement(baseChangePasswordSchema).and( + z.object({ + userId: z.string(), + }), +); export const userChangeHomeBoardsSchema = z.object({ homeBoardId: z.string().nullable(), @@ -134,14 +138,10 @@ export const userChangeColorSchemeSchema = z.object({ export const userFirstDayOfWeekSchema = z.object({ firstDayOfWeek: z - .custom((value) => z.number().min(0).max(6).safeParse(value).success) - .meta({ - override: { - type: "integer", - minimum: 0, - maximum: 6, - }, - }), + .number() + .min(0) + .max(6) + .transform((value) => value as DayOfWeek), }); export const userPingIconsEnabledSchema = z.object({ diff --git a/packages/widgets/package.json b/packages/widgets/package.json index 470ef406a..4ee4834f8 100644 --- a/packages/widgets/package.json +++ b/packages/widgets/package.json @@ -25,8 +25,8 @@ }, "prettier": "@homarr/prettier-config", "dependencies": { - "@dnd-kit/core": "^6.3.1", - "@dnd-kit/sortable": "^10.0.0", + "@dnd-kit/core": "catalog:", + "@dnd-kit/sortable": "catalog:", "@homarr/api": "workspace:^0.1.0", "@homarr/auth": "workspace:^0.1.0", "@homarr/boards": "workspace:^0.1.0", @@ -48,44 +48,45 @@ "@homarr/translation": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", - "@mantine/charts": "^8.3.16", - "@mantine/core": "^8.3.16", - "@mantine/hooks": "^8.3.16", - "@tabler/icons-react": "^3.40.0", - "@tiptap/extension-color": "3.20.1", - "@tiptap/extension-highlight": "3.20.1", - "@tiptap/extension-image": "3.20.1", - "@tiptap/extension-link": "^3.20.1", - "@tiptap/extension-placeholder": "^3.20.1", - "@tiptap/extension-table": "3.20.1", - "@tiptap/extension-table-cell": "3.20.1", - "@tiptap/extension-table-header": "3.20.1", - "@tiptap/extension-table-row": "3.20.1", - "@tiptap/extension-task-item": "3.20.1", - "@tiptap/extension-task-list": "3.20.1", - "@tiptap/extension-text-align": "3.20.1", - "@tiptap/extension-text-style": "3.20.1", - "@tiptap/extension-underline": "3.20.1", - "@tiptap/react": "^3.20.1", - "@tiptap/starter-kit": "^3.20.1", - "clsx": "^2.1.1", - "dayjs": "^1.11.19", - "mantine-form-zod-resolver": "^1.3.0", - "mantine-react-table": "2.0.0-beta.9", - "next": "16.1.6", - "react": "19.2.4", - "react-dom": "19.2.4", - "react-markdown": "^10.1.0", - "recharts": "^2.15.4", - "video.js": "^8.23.7", - "zod": "^4.2.1" + "@mantine/charts": "catalog:", + "@mantine/core": "catalog:", + "@mantine/hooks": "catalog:", + "@tabler/icons-react": "catalog:", + "@tiptap/extension-color": "catalog:", + "@tiptap/extension-highlight": "catalog:", + "@tiptap/extension-image": "catalog:", + "@tiptap/extension-link": "catalog:", + "@tiptap/extension-placeholder": "catalog:", + "@tiptap/extension-table": "catalog:", + "@tiptap/extension-table-cell": "catalog:", + "@tiptap/extension-table-header": "catalog:", + "@tiptap/extension-table-row": "catalog:", + "@tiptap/extension-task-item": "catalog:", + "@tiptap/extension-task-list": "catalog:", + "@tiptap/extension-text-align": "catalog:", + "@tiptap/extension-text-style": "catalog:", + "@tiptap/extension-underline": "catalog:", + "@tiptap/react": "catalog:", + "@tiptap/starter-kit": "catalog:", + "clsx": "catalog:", + "dayjs": "catalog:", + "mantine-form-zod-resolver": "catalog:", + "mantine-react-table": "catalog:", + "next": "catalog:", + "react": "catalog:", + "react-dom": "catalog:", + "react-markdown": "catalog:", + "react-quill-new": "catalog:", + "recharts": "catalog:", + "video.js": "catalog:", + "zod": "catalog:" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "@types/video.js": "^7.3.58", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "@types/video.js": "catalog:", + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/widgets/src/_inputs/index.ts b/packages/widgets/src/_inputs/index.ts index b19ab8c9c..8917664de 100644 --- a/packages/widgets/src/_inputs/index.ts +++ b/packages/widgets/src/_inputs/index.ts @@ -1,5 +1,7 @@ import type { WidgetOptionType } from "../options"; +import { WidgetAnchorNoteInput } from "./widget-anchor-note-input"; import { WidgetAppInput } from "./widget-app-input"; +import { WidgetDynamicSelectInput } from "./widget-dynamic-select-input"; import { WidgetLocationInput } from "./widget-location-input"; import { WidgetMultiTextInput } from "./widget-multi-text-input"; import { WidgetMultiReleasesRepositoriesInput } from "./widget-multiReleasesRepositories-input"; @@ -12,6 +14,7 @@ import { WidgetSwitchInput } from "./widget-switch-input"; import { WidgetTextInput } from "./widget-text-input"; const mapping = { + anchorNote: WidgetAnchorNoteInput, text: WidgetTextInput, location: WidgetLocationInput, multiSelect: WidgetMultiSelectInput, @@ -23,6 +26,7 @@ const mapping = { app: WidgetAppInput, sortableItemList: WidgetSortedItemListInput, multiReleasesRepositories: WidgetMultiReleasesRepositoriesInput, + dynamicSelect: WidgetDynamicSelectInput, } satisfies Record; export const getInputForType = (type: TType) => { diff --git a/packages/widgets/src/_inputs/widget-anchor-note-input.tsx b/packages/widgets/src/_inputs/widget-anchor-note-input.tsx new file mode 100644 index 000000000..e045e7df0 --- /dev/null +++ b/packages/widgets/src/_inputs/widget-anchor-note-input.tsx @@ -0,0 +1,63 @@ +"use client"; + +import { useMemo, useState } from "react"; +import { Loader, Select } from "@mantine/core"; +import { useDebouncedValue } from "@mantine/hooks"; + +import { clientApi } from "@homarr/api/client"; +import { useI18n, useScopedI18n } from "@homarr/translation/client"; + +import type { CommonWidgetInputProps } from "./common"; +import { useWidgetInputTranslation } from "./common"; +import { useFormContext } from "./form"; + +export const WidgetAnchorNoteInput = ({ property, kind, options }: CommonWidgetInputProps<"anchorNote">) => { + const t = useI18n(); + const tWidget = useWidgetInputTranslation(kind, property); + const tAnchor = useScopedI18n("widget.anchorNote"); + const form = useFormContext(); + + const integrationId = form.values.integrationIds[0]; + const [search, setSearch] = useState(""); + const [debouncedSearch] = useDebouncedValue(search, 250); + + const { data: notes, isPending } = clientApi.widget.anchorNotes.listNotes.useQuery( + { + integrationId: integrationId ?? "", + search: debouncedSearch.trim() ? debouncedSearch : undefined, + limit: 200, + }, + { + enabled: Boolean(integrationId), + refetchOnMount: false, + refetchOnWindowFocus: false, + refetchOnReconnect: false, + retry: false, + }, + ); + + const noteOptions = useMemo( + () => + notes?.map((note) => ({ + value: note.id, + label: note.title || tAnchor("untitled"), + })) ?? [], + [notes, tAnchor], + ); + + return ( + + typeof option === "string" + ? option + : { + value: option.value, + label: translateIfNecessary(t, option.label) ?? option.value, + }, + ) + .concat( + typeof value === "object" && + value !== null && + !selectOptions.some((option) => + typeof option === "string" ? option === value.value : option.value === value.value, + ) + ? { + value: value.value, + label: value.label, + } + : [], + )} + searchValue={search} + onSearchChange={setSearch} + leftSection={isPending && } + renderOption={({ option, checked }) => { + return ( + + {option.label} + {checked && ( + + )} + + ); + }} + description={options.withDescription ? tWidget("description") : undefined} + searchable + {...inputProps} + value={value?.value ?? null} + onChange={(value) => + onChange( + value + ? { + value, + label: + selectOptions.filter((option) => typeof option === "object").find((option) => option.value === value) + ?.label ?? value, + } + : null, + ) + } + /> + ); +}; diff --git a/packages/widgets/src/anchor-note/anchor-note.css b/packages/widgets/src/anchor-note/anchor-note.css new file mode 100644 index 000000000..c28655e87 --- /dev/null +++ b/packages/widgets/src/anchor-note/anchor-note.css @@ -0,0 +1,115 @@ +.homarr-anchor-quill { + display: flex; + flex-direction: column; + height: 100%; +} + +.homarr-anchor-quill .ql-toolbar.ql-snow, +.homarr-anchor-quill .ql-container.ql-snow { + border: 0; +} + +.homarr-anchor-quill .ql-toolbar.ql-snow { + background: transparent; + border-radius: 0; +} + +.homarr-anchor-quill .ql-container.ql-snow { + background: transparent; + border-radius: 0; + flex: 1; + display: flex; + flex-direction: column; +} + +.homarr-anchor-quill .ql-editor { + min-height: 160px; + flex: 1; + padding: 0; + color: var(--mantine-color-text); + font-size: var(--mantine-font-size-sm, 0.95rem); + line-height: 1.6; +} + +.homarr-anchor-quill .ql-editor.ql-blank::before { + color: var(--mantine-color-dimmed); +} + +.homarr-anchor-quill .ql-editor ol, +.homarr-anchor-quill .ql-editor ul { + padding-left: 1.5rem; +} + +.homarr-anchor-quill .ql-editor li { + margin: 0.25rem 0; +} + +.homarr-anchor-quill .ql-editor li[data-list="unchecked"], +.homarr-anchor-quill .ql-editor li[data-list="checked"] { + padding-left: 28px !important; + list-style: none; + position: relative; +} + +.homarr-anchor-quill .ql-editor li[data-list="checked"] > .ql-ui, +.homarr-anchor-quill .ql-editor li[data-list="unchecked"] > .ql-ui { + position: absolute; + left: 0; + top: 0.35em; + width: 18px !important; + height: 18px !important; + border-radius: 5px; + box-sizing: border-box; + transition: all 150ms ease; + background: transparent; + padding: 0 !important; + margin: 0 !important; +} + +.homarr-anchor-quill .ql-editor li[data-list="checked"] > .ql-ui::before, +.homarr-anchor-quill .ql-editor li[data-list="unchecked"] > .ql-ui::before { + content: "" !important; + display: none !important; +} + +.homarr-anchor-quill .ql-editor li[data-list="unchecked"] > .ql-ui { + border: 2px solid var(--mantine-color-dimmed); + opacity: 0.7; +} + +.homarr-anchor-quill .ql-editor li[data-list="unchecked"]:hover > .ql-ui { + border-color: var(--mantine-primary-color-filled); + opacity: 1; +} + +.homarr-anchor-quill .ql-editor li[data-list="checked"] > .ql-ui { + border: 2px solid var(--mantine-primary-color-filled); + background: var(--mantine-primary-color-filled); +} + +.homarr-anchor-quill .ql-editor li[data-list="checked"] > .ql-ui::after { + content: ""; + display: block; + position: absolute; + left: 50%; + top: 45%; + width: 5px; + height: 9px; + border: solid var(--mantine-color-white, #fff); + border-width: 0 2px 2px 0; + transform: translate(-50%, -50%) rotate(45deg); +} + +.homarr-anchor-quill .ql-editor li[data-list="checked"] { + color: var(--mantine-color-dimmed); + text-decoration: line-through; + text-decoration-color: var(--mantine-color-dimmed); +} + +.homarr-anchor-quill--readonly .ql-toolbar.ql-snow { + display: none; +} + +.homarr-anchor-quill--readonly .ql-container.ql-snow { + border-radius: 0; +} diff --git a/packages/widgets/src/anchor-note/component.tsx b/packages/widgets/src/anchor-note/component.tsx new file mode 100644 index 000000000..f3fde1f97 --- /dev/null +++ b/packages/widgets/src/anchor-note/component.tsx @@ -0,0 +1,320 @@ +"use client"; + +import { startTransition, useCallback, useEffect, useMemo, useState } from "react"; +import type { ComponentProps } from "react"; +import dynamic from "next/dynamic"; +import { Button, Center, Group, Stack, Text, TextInput } from "@mantine/core"; +import { Quill } from "react-quill-new"; +import type { DeltaStatic } from "react-quill-new"; +import type ReactQuillComponent from "react-quill-new"; +import { z } from "zod/v4"; + +import { clientApi } from "@homarr/api/client"; +import { useTimeAgo } from "@homarr/common"; +import type { AnchorNotePermission } from "@homarr/integrations"; +import { useScopedI18n } from "@homarr/translation/client"; + +import type { WidgetComponentProps } from "../definition"; + +import "react-quill-new/dist/quill.snow.css"; +import "./anchor-note.css"; + +type ReactQuillProps = ComponentProps; +type ReactQuillOnChange = NonNullable; + +const ReactQuill = dynamic(() => import("react-quill-new"), { ssr: false }); + +const quillDeltaOperationSchema = z.object({ + insert: z.unknown().optional(), + attributes: z.record(z.string(), z.unknown()).optional(), +}); + +const quillDeltaSchema = z.object({ + ops: z.array(quillDeltaOperationSchema), +}); + +type QuillDelta = z.infer; + +const DeltaConstructor = Quill.import("delta") as new ( + ops?: QuillDelta["ops"] | { ops: QuillDelta["ops"] }, +) => DeltaStatic; + +const quillModules = { + toolbar: [ + ["bold", "italic", "underline", "strike"], + [{ header: [1, 2, 3, 4, false] }], + [{ align: [] }], + [{ list: "ordered" }, { list: "bullet" }, { list: "check" }], + [{ indent: "-1" }, { indent: "+1" }], + ["blockquote", "code-block"], + ["link"], + ["clean"], + ], + history: { + delay: 1000, + maxStack: 200, + userOnly: true, + }, +}; + +const readOnlyModules = { + toolbar: false, +}; + +const quillFormats = [ + "bold", + "italic", + "underline", + "strike", + "header", + "align", + "list", + "indent", + "blockquote", + "code-block", + "link", +]; + +const emptyDelta = (): DeltaStatic => new DeltaConstructor([{ insert: "\n" }]); + +const toPlainTextDelta = (value: string): DeltaStatic => { + const normalized = value.endsWith("\n") ? value : `${value}\n`; + return new DeltaConstructor([{ insert: normalized }]); +}; + +const parseStoredContent = (content?: string | null): DeltaStatic => { + if (!content) return emptyDelta(); + + try { + const parsedDelta = quillDeltaSchema.safeParse(JSON.parse(content)); + if (parsedDelta.success) { + return new DeltaConstructor(parsedDelta.data.ops); + } + } catch { + return toPlainTextDelta(content); + } + + return toPlainTextDelta(content); +}; + +const stringifyDelta = (delta: unknown): string => { + const parsedDelta = quillDeltaSchema.safeParse(delta); + if (parsedDelta.success) { + return JSON.stringify(parsedDelta.data); + } + return JSON.stringify(emptyDelta()); +}; + +const canEditPermission = (permission: AnchorNotePermission) => { + return permission === "owner" || permission === "editor"; +}; + +const isForbiddenError = (error: unknown): boolean => { + if (typeof error !== "object" || error === null) return false; + + const data = (error as { data?: unknown }).data; + if (typeof data !== "object" || data === null) return false; + + return (data as { code?: unknown }).code === "FORBIDDEN"; +}; + +export default function AnchorNoteWidget({ options, integrationIds }: WidgetComponentProps<"anchorNote">) { + const t = useScopedI18n("widget.anchorNote"); + const noteId = options.noteId.trim(); + if (!noteId) { + return ( +
+ {t("empty")} +
+ ); + } + + // It will always have at least one integration as otherwise the NoIntegrationSelectedError would be thrown in item-content.tsx + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const integrationId = integrationIds[0]!; + + return ; +} + +interface AnchorNoteWidgetContentProps { + options: WidgetComponentProps<"anchorNote">["options"]; + integrationId: string; + noteId: string; +} + +const AnchorNoteWidgetContent = ({ options, integrationId, noteId }: AnchorNoteWidgetContentProps) => { + const t = useScopedI18n("widget.anchorNote"); + const [note, { refetch }] = clientApi.widget.anchorNotes.getNote.useSuspenseQuery( + { + integrationId, + noteId, + }, + { + refetchOnMount: false, + refetchOnWindowFocus: false, + refetchOnReconnect: false, + retry: false, + }, + ); + const { mutateAsync: updateNoteAsync, isPending: isUpdating } = clientApi.widget.anchorNotes.updateNote.useMutation(); + + const [isEditing, setIsEditing] = useState(false); + const [draftTitle, setDraftTitle] = useState(note.title); + const [draftContent, setDraftContent] = useState(note.content ?? ""); + const [saveError, setSaveError] = useState(null); + + useEffect(() => { + if (isEditing) return; + + startTransition(() => { + setDraftTitle(note.title); + setDraftContent(note.content ?? ""); + }); + }, [isEditing, note.content, note.title]); + + const canEdit = canEditPermission(note.permission); + const isViewer = note.permission === "viewer"; + const updatedAt = useMemo(() => new Date(note.updatedAt), [note.updatedAt]); + const updatedAtRelative = useTimeAgo(updatedAt, 30000); + + const hasChanges = useMemo(() => { + const normalizedTitle = draftTitle.trim() || note.title; + return normalizedTitle !== note.title || draftContent !== (note.content ?? ""); + }, [draftContent, draftTitle, note.content, note.title]); + + const editorValue = useMemo(() => parseStoredContent(draftContent), [draftContent]); + const readOnlyValue = useMemo(() => parseStoredContent(note.content), [note.content]); + const handleEditorChange = useCallback( + (_html, _delta, source, editor) => { + if (!isEditing || source !== "user") return; + const next = stringifyDelta(editor.getContents()); + setDraftContent(next); + }, + [isEditing], + ); + + const handleEdit = useCallback(() => { + if (!canEdit) return; + startTransition(() => { + setDraftTitle(note.title); + setDraftContent(note.content ?? ""); + setSaveError(null); + setIsEditing(true); + }); + }, [canEdit, note.content, note.title]); + + const handleCancel = useCallback(() => { + startTransition(() => { + setDraftTitle(note.title); + setDraftContent(note.content ?? ""); + setSaveError(null); + setIsEditing(false); + }); + }, [note.content, note.title]); + + const handleSave = useCallback(async () => { + if (!canEdit) return; + + const normalizedTitle = draftTitle.trim() || note.title || t("untitled"); + + if (!hasChanges) { + startTransition(() => { + setSaveError(null); + setIsEditing(false); + }); + return; + } + + await updateNoteAsync( + { + integrationId, + noteId, + title: normalizedTitle, + content: draftContent, + }, + { + onSuccess() { + void (async () => { + await refetch(); + startTransition(() => { + setSaveError(null); + setIsEditing(false); + }); + })(); + }, + onError(error) { + if (isForbiddenError(error)) { + void (async () => { + await refetch(); + startTransition(() => { + setSaveError(t("saveForbidden")); + setIsEditing(false); + }); + })(); + return; + } + + startTransition(() => { + setSaveError(t("saveFailed")); + }); + }, + }, + ); + }, [canEdit, draftContent, draftTitle, hasChanges, integrationId, note.title, noteId, refetch, t, updateNoteAsync]); + + return ( + + + + {isEditing ? ( + setDraftTitle(event.currentTarget.value)} size="sm" /> + ) : ( + options.showTitle && {note.title || t("untitled")} + )} + {!isEditing && options.showUpdatedAt && ( + + {t("updatedAt", { date: updatedAtRelative })} + + )} + {!isEditing && isViewer && ( + + {t("readOnlyViewer")} + + )} + {saveError && ( + + {saveError} + + )} + + + {isEditing ? ( + <> + + + + ) : ( + + )} + + +
+ +
+
+ ); +}; diff --git a/packages/widgets/src/anchor-note/index.ts b/packages/widgets/src/anchor-note/index.ts new file mode 100644 index 000000000..a54aada3f --- /dev/null +++ b/packages/widgets/src/anchor-note/index.ts @@ -0,0 +1,20 @@ +import { IconNotes } from "@tabler/icons-react"; + +import { createWidgetDefinition } from "../definition"; +import { optionsBuilder } from "../options"; + +export const { definition, componentLoader } = createWidgetDefinition("anchorNote", { + icon: IconNotes, + supportedIntegrations: ["anchor"], + createOptions() { + return optionsBuilder.from((factory) => ({ + noteId: factory.anchorNote(), + showTitle: factory.switch({ + defaultValue: true, + }), + showUpdatedAt: factory.switch({ + defaultValue: true, + }), + })); + }, +}).withDynamicImport(() => import("./component")); diff --git a/packages/widgets/src/health-monitoring/index.ts b/packages/widgets/src/health-monitoring/index.ts index 8ed669750..698446c28 100644 --- a/packages/widgets/src/health-monitoring/index.ts +++ b/packages/widgets/src/health-monitoring/index.ts @@ -19,6 +19,9 @@ export const { definition, componentLoader } = createWidgetDefinition("healthMon memory: factory.switch({ defaultValue: true, }), + gpu: factory.switch({ + defaultValue: true, + }), showUptime: factory.switch({ defaultValue: true, }), diff --git a/packages/widgets/src/health-monitoring/rings/gpu-ring.tsx b/packages/widgets/src/health-monitoring/rings/gpu-ring.tsx new file mode 100644 index 000000000..6cee021b9 --- /dev/null +++ b/packages/widgets/src/health-monitoring/rings/gpu-ring.tsx @@ -0,0 +1,64 @@ +import { Center, RingProgress, Stack, Text, Tooltip } from "@mantine/core"; +import { IconDeviceDesktop } from "@tabler/icons-react"; + +import { progressColor } from "../system-health"; + +interface GpuRingProps { + gpu: { + gpuId: string; + name: string; + memoryUtilization: number; + processorUtilization: number; + temperature: number | null; + fanSpeed: number | null; + }; + isTiny: boolean; + fahrenheit: boolean; +} + +export const GpuRing = ({ gpu, isTiny, fahrenheit }: GpuRingProps) => { + const tempDisplay = + gpu.temperature != null + ? fahrenheit + ? `${(gpu.temperature * 1.8 + 32).toFixed(0)}°F` + : `${gpu.temperature}°C` + : null; + + return ( + + + {gpu.name} + + VRAM: {gpu.memoryUtilization.toFixed(1)}% + {tempDisplay && Temp: {tempDisplay}} + {gpu.fanSpeed != null && Fan: {gpu.fanSpeed} RPM} + + } + multiline + > + + {`${gpu.processorUtilization.toFixed(0)}%`} + + + } + sections={[ + { + value: Number(gpu.processorUtilization.toFixed(2)), + color: progressColor(Number(gpu.processorUtilization.toFixed(2))), + }, + ]} + /> + + ); +}; diff --git a/packages/widgets/src/health-monitoring/system-health.tsx b/packages/widgets/src/health-monitoring/system-health.tsx index 7a5d4e9d6..6e7d2965c 100644 --- a/packages/widgets/src/health-monitoring/system-health.tsx +++ b/packages/widgets/src/health-monitoring/system-health.tsx @@ -39,6 +39,7 @@ import { useI18n } from "@homarr/translation/client"; import type { WidgetComponentProps } from "../definition"; import { CpuRing } from "./rings/cpu-ring"; import { CpuTempRing } from "./rings/cpu-temp-ring"; +import { GpuRing } from "./rings/gpu-ring"; import { formatMemoryUsage, MemoryRing } from "./rings/memory-ring"; import classes from "./system-health.module.css"; @@ -187,6 +188,10 @@ export const SystemHealthMonitoring = ({ isTiny={isTiny} /> )} + {options.gpu && + healthInfo.gpu.map((gpu) => ( + + ))} { diff --git a/packages/widgets/src/iframe/component.tsx b/packages/widgets/src/iframe/component.tsx index 67fa73536..ac794a631 100644 --- a/packages/widgets/src/iframe/component.tsx +++ b/packages/widgets/src/iframe/component.tsx @@ -105,6 +105,10 @@ const getSandboxFlags = ( baseSandbox.push("allow-popups-to-escape-sandbox"); } + if (permissions.allowModals) { + baseSandbox.push("allow-modals"); + } + return baseSandbox; }; @@ -115,4 +119,5 @@ const permissionMapping = { allowGeolocation: "geolocation", allowMicrophone: "microphone", allowPayment: "payment", + allowModals: "allow-modals", } satisfies Record["options"], "embedUrl" | "allowScrolling">, string>; diff --git a/packages/widgets/src/iframe/index.ts b/packages/widgets/src/iframe/index.ts index 9e6cc06e1..d4313aebe 100644 --- a/packages/widgets/src/iframe/index.ts +++ b/packages/widgets/src/iframe/index.ts @@ -17,6 +17,7 @@ export const { definition, componentLoader } = createWidgetDefinition("iframe", allowMicrophone: factory.switch(), allowCamera: factory.switch(), allowGeolocation: factory.switch(), + allowModals: factory.switch(), })); }, }).withDynamicImport(() => import("./component")); diff --git a/packages/widgets/src/index.tsx b/packages/widgets/src/index.tsx index 6f5f2b03d..a59f93f42 100644 --- a/packages/widgets/src/index.tsx +++ b/packages/widgets/src/index.tsx @@ -7,6 +7,7 @@ import { objectEntries } from "@homarr/common"; import type { IntegrationKind, WidgetKind } from "@homarr/definitions"; import type { SettingsContextProps } from "@homarr/settings/creator"; +import * as anchorNote from "./anchor-note"; import * as app from "./app"; import * as bookmarks from "./bookmarks"; import * as calendar from "./calendar"; @@ -39,9 +40,11 @@ import * as releases from "./releases"; import * as rssFeed from "./rssFeed"; import * as smartHomeEntityState from "./smart-home/entity-state"; import * as smartHomeExecuteAutomation from "./smart-home/execute-automation"; +import * as speedtestTracker from "./speedtest-tracker"; import * as stockPrice from "./stocks"; import * as systemDisks from "./system-disks"; import * as systemResources from "./system-resources"; +import * as timetable from "./timetable"; import * as tracearr from "./tracearr"; import * as video from "./video"; import * as weather from "./weather"; @@ -53,6 +56,7 @@ export const widgetImports = { clock, weather, app, + anchorNote, notebook, iframe, video, @@ -82,9 +86,11 @@ export const widgetImports = { systemResources, coolify, systemDisks, + timetable, "immich-serverStats": immichServerStats, "immich-albumCarousel": immichAlbumCarousel, tracearr, + speedtestTracker, } satisfies WidgetImportRecord; export type WidgetImports = typeof widgetImports; diff --git a/packages/widgets/src/options.ts b/packages/widgets/src/options.ts index 2aa93b2cf..bc207db83 100644 --- a/packages/widgets/src/options.ts +++ b/packages/widgets/src/options.ts @@ -6,6 +6,7 @@ import type { ZodType } from "zod/v4"; import type { IntegrationKind } from "@homarr/definitions"; +import type { DynamicSelectOption } from "./_inputs/widget-dynamic-select-input"; import type { inferSelectOptionValue, SelectOption } from "./_inputs/widget-select-input"; import type { ReleasesRepository } from "./releases/releases-repository"; @@ -18,6 +19,8 @@ interface TextInput extends CommonInput { validate?: z.ZodType; } +type AnchorNoteInput = CommonInput; + interface MultiSelectInput extends CommonInput< inferSelectOptionValue[] > { @@ -47,6 +50,16 @@ interface SelectInput extends CommonIn searchable?: boolean; } +interface DynamicSelectInput extends CommonInput { + useOptions: ( + query: string, + integrationIds: string[], + ) => { + isPending: boolean; + options: DynamicSelectOption[]; + }; +} + interface NumberInput extends CommonInput { validate: z.ZodNumber; step?: number; @@ -75,6 +88,11 @@ const optionsFactory = { withDescription: input?.withDescription ?? false, validate: input?.validate, }), + anchorNote: (input?: AnchorNoteInput) => ({ + type: "anchorNote" as const, + defaultValue: input?.defaultValue ?? "", + withDescription: input?.withDescription ?? false, + }), multiSelect: (input: MultiSelectInput) => ({ type: "multiSelect" as const, defaultValue: input.defaultValue ?? [], @@ -82,6 +100,12 @@ const optionsFactory = { searchable: input.searchable ?? false, withDescription: input.withDescription ?? false, }), + dynamicSelect: (input: DynamicSelectInput) => ({ + type: "dynamicSelect" as const, + defaultValue: input.defaultValue ?? null, + useOptions: input.useOptions, + withDescription: input.withDescription ?? false, + }), select: (input: SelectInput) => ({ type: "select" as const, defaultValue: (input.defaultValue ?? input.options[0]) as inferSelectOptionValue, diff --git a/packages/widgets/src/rssFeed/component.tsx b/packages/widgets/src/rssFeed/component.tsx index ee781fb34..f219cd2e4 100644 --- a/packages/widgets/src/rssFeed/component.tsx +++ b/packages/widgets/src/rssFeed/component.tsx @@ -4,29 +4,53 @@ import { Card, Flex, Group, Image, ScrollArea, Stack, Text } from "@mantine/core import { IconClock } from "@tabler/icons-react"; import dayjs from "dayjs"; +import type { RouterInputs } from "@homarr/api"; import { clientApi } from "@homarr/api/client"; import { useRequiredBoard } from "@homarr/boards/context"; import type { WidgetComponentProps } from "../definition"; import classes from "./component.module.scss"; -export default function RssFeed({ options }: WidgetComponentProps<"rssFeed">) { - const [feedEntries] = clientApi.widget.rssFeed.getFeeds.useSuspenseQuery( - { - urls: options.feedUrls, - maximumAmountPosts: typeof options.maximumAmountPosts === "number" ? options.maximumAmountPosts : 100, +const useLiveFeedEntries = (input: RouterInputs["widget"]["rssFeed"]["getFeeds"]) => { + const [feedEntries] = clientApi.widget.rssFeed.getFeeds.useSuspenseQuery(input, { + refetchOnMount: false, + refetchOnWindowFocus: false, + refetchOnReconnect: false, + retry: false, + }); + const utils = clientApi.useUtils(); + + clientApi.widget.rssFeed.subscribeFeeds.useSubscription(input, { + onData(updatedData) { + utils.widget.rssFeed.getFeeds.setData(input, (oldData) => { + return oldData + ?.filter((entry) => entry.feedUrl !== updatedData.url) + .concat(updatedData.entries) + .sort((entryA, entryB) => { + return entryA.published && entryB.published + ? new Date(entryB.published).getTime() - new Date(entryA.published).getTime() + : 0; + }) + .slice(0, input.maximumAmountPosts); + }); }, - { - refetchOnMount: false, - refetchOnWindowFocus: false, - refetchOnReconnect: false, - retry: false, - }, - ); + }); + + return feedEntries; +}; + +export default function RssFeed({ options, width }: WidgetComponentProps<"rssFeed">) { + const feedEntries = useLiveFeedEntries({ + urls: options.feedUrls, + maximumAmountPosts: typeof options.maximumAmountPosts === "number" ? options.maximumAmountPosts : 100, + }); + const board = useRequiredBoard(); const languageDir = options.enableRtl ? "RTL" : "LTR"; + const isNarrow = width < 128 * 3; + return ( @@ -41,27 +65,33 @@ export default function RssFeed({ options }: WidgetComponentProps<"rssFeed">) { w="100%" p="sm" > - {feedEntry.enclosure && ( + {feedEntry.enclosure !== undefined && ( backdrop )} - - - {feedEntry.title} - - {!options.hideDescription && feedEntry.description && ( - + + {feedEntry.enclosure !== undefined && options.showPosterImage && !isNarrow && ( + {feedEntry.title} )} - {feedEntry.published && } - + + + {feedEntry.title} + + {!options.hideDescription && feedEntry.description && ( + + )} + + {feedEntry.published && } + + ))} diff --git a/packages/widgets/src/rssFeed/index.ts b/packages/widgets/src/rssFeed/index.ts index 4f754d602..079c761a9 100644 --- a/packages/widgets/src/rssFeed/index.ts +++ b/packages/widgets/src/rssFeed/index.ts @@ -32,6 +32,9 @@ export const { definition, componentLoader } = createWidgetDefinition("rssFeed", hideDescription: factory.switch({ defaultValue: false, }), + showPosterImage: factory.switch({ + defaultValue: false, + }), })); }, }).withDynamicImport(() => import("./component")); diff --git a/packages/widgets/src/speedtest-tracker/averages.tsx b/packages/widgets/src/speedtest-tracker/averages.tsx new file mode 100644 index 000000000..41b116d56 --- /dev/null +++ b/packages/widgets/src/speedtest-tracker/averages.tsx @@ -0,0 +1,46 @@ +"use client"; + +import { SimpleGrid, Stack } from "@mantine/core"; +import { IconArrowDown, IconArrowUp, IconWaveSine } from "@tabler/icons-react"; + +import type { SpeedtestTrackerStats } from "@homarr/integrations/types"; +import { useScopedI18n } from "@homarr/translation/client"; + +import { formatStatsSpeed } from "./helpers"; +import { SectionLabel } from "./section-label"; +import { SpeedStatCard } from "./speed-stat-card"; + +export function AveragesSection({ stats }: { stats: SpeedtestTrackerStats }) { + const t = useScopedI18n("widget.speedtestTracker"); + + return ( + + + {t("averages")} · {t("tests", { count: stats.total_results.toString() })} + + + + + + + + ); +} diff --git a/packages/widgets/src/speedtest-tracker/component.tsx b/packages/widgets/src/speedtest-tracker/component.tsx new file mode 100644 index 000000000..699b354a9 --- /dev/null +++ b/packages/widgets/src/speedtest-tracker/component.tsx @@ -0,0 +1,91 @@ +"use client"; + +import { useMemo } from "react"; +import { Stack, Text } from "@mantine/core"; + +import { clientApi } from "@homarr/api/client"; +import type { SpeedtestTrackerDashboardData } from "@homarr/integrations/types"; +import { useScopedI18n } from "@homarr/translation/client"; + +import type { WidgetComponentProps } from "../definition"; +import { AveragesSection } from "./averages"; +import { mergeStats } from "./helpers"; +import { LatestResultSection } from "./latest-result"; +import { RecentResultsSection } from "./recent-results"; + +export default function SpeedtestTrackerWidget({ + options, + integrationIds, + isEditMode, +}: WidgetComponentProps<"speedtestTracker">) { + const t = useScopedI18n("widget.speedtestTracker"); + const [dashboardData] = clientApi.widget.speedtestTracker.getDashboard.useSuspenseQuery({ integrationIds }); + + const utils = clientApi.useUtils(); + clientApi.widget.speedtestTracker.subscribeToDashboard.useSubscription( + { integrationIds }, + { + enabled: !isEditMode, + onData(newData) { + utils.widget.speedtestTracker.getDashboard.setData({ integrationIds }, (prevData) => { + if (!prevData) return prevData; + return prevData.map((instance) => + instance.integrationId === newData.integrationId + ? { ...instance, dashboard: newData.dashboard, updatedAt: newData.timestamp } + : instance, + ); + }); + }, + }, + ); + + const combined = useMemo( + () => + dashboardData.reduce( + (acc, item) => ({ + latestResult: item.dashboard.latestResult ?? acc.latestResult, + stats: mergeStats(acc.stats, item.dashboard.stats), + recentResults: [...acc.recentResults, ...item.dashboard.recentResults], + }), + { latestResult: null, stats: null, recentResults: [] }, + ), + [dashboardData], + ); + + const twelveHoursAgo = Date.now() - 12 * 60 * 60 * 1000; + const recentFiltered = combined.recentResults.filter((result) => result.created_at.getTime() > twelveHoursAgo); + + const hasStatSection = + (options.showLatestResult && combined.latestResult !== null) || (options.showStats && combined.stats !== null); + const hasChart = options.showRecentResults && recentFiltered.length > 0; + const noSectionsEnabled = !options.showLatestResult && !options.showStats && !options.showRecentResults; + + return ( + + {hasStatSection && ( + + {options.showLatestResult && combined.latestResult && ( +
+ +
+ )} + {options.showStats && combined.stats && ( +
+ +
+ )} +
+ )} + {hasChart && ( +
+ +
+ )} + {noSectionsEnabled && ( + + {t("noSectionsEnabled")} + + )} +
+ ); +} diff --git a/packages/widgets/src/speedtest-tracker/helpers.ts b/packages/widgets/src/speedtest-tracker/helpers.ts new file mode 100644 index 000000000..075fdb90c --- /dev/null +++ b/packages/widgets/src/speedtest-tracker/helpers.ts @@ -0,0 +1,53 @@ +import { formatNumber } from "@homarr/common"; +import type { + SpeedtestTrackerDashboardData, + SpeedtestTrackerResult, + SpeedtestTrackerStats, +} from "@homarr/integrations/types"; + +export const mergeStats = ( + statsA: SpeedtestTrackerDashboardData["stats"], + statsB: SpeedtestTrackerDashboardData["stats"], +): SpeedtestTrackerDashboardData["stats"] => { + if (!statsB) return statsA; + if (!statsA) return statsB; + return { + ping: { + avg: (statsA.ping.avg + statsB.ping.avg) / 2, + min: Math.min(statsA.ping.min, statsB.ping.min), + max: Math.max(statsA.ping.max, statsB.ping.max), + }, + download: { + avg: (statsA.download.avg + statsB.download.avg) / 2, + avg_bits: + statsA.download.avg_bits !== undefined && statsB.download.avg_bits !== undefined + ? (statsA.download.avg_bits + statsB.download.avg_bits) / 2 + : (statsA.download.avg_bits ?? statsB.download.avg_bits), + min: Math.min(statsA.download.min, statsB.download.min), + max: Math.max(statsA.download.max, statsB.download.max), + }, + upload: { + avg: (statsA.upload.avg + statsB.upload.avg) / 2, + avg_bits: + statsA.upload.avg_bits !== undefined && statsB.upload.avg_bits !== undefined + ? (statsA.upload.avg_bits + statsB.upload.avg_bits) / 2 + : (statsA.upload.avg_bits ?? statsB.upload.avg_bits), + min: Math.min(statsA.upload.min, statsB.upload.min), + max: Math.max(statsA.upload.max, statsB.upload.max), + }, + total_results: statsA.total_results + statsB.total_results, + }; +}; + +export const formatBitsPerSec = (bps: number): string => `${formatNumber(bps, 2)}bps`; + +export const formatResultSpeed = (result: SpeedtestTrackerResult, dir: "download" | "upload"): string => { + const bits = dir === "download" ? result.download_bits : result.upload_bits; + if (bits != null) return formatBitsPerSec(bits); + return "—"; +}; + +export const formatStatsSpeed = (band: SpeedtestTrackerStats["download"]): string => { + if (band.avg_bits != null) return formatBitsPerSec(band.avg_bits); + return formatBitsPerSec(band.avg * 8); +}; diff --git a/packages/widgets/src/speedtest-tracker/index.ts b/packages/widgets/src/speedtest-tracker/index.ts new file mode 100644 index 000000000..ea3c0c5d2 --- /dev/null +++ b/packages/widgets/src/speedtest-tracker/index.ts @@ -0,0 +1,38 @@ +import { IconServerOff, IconSpeedboat } from "@tabler/icons-react"; + +import { createWidgetDefinition } from "../definition"; +import { optionsBuilder } from "../options"; + +export const { definition, componentLoader } = createWidgetDefinition("speedtestTracker", { + icon: IconSpeedboat, + createOptions() { + return optionsBuilder.from( + (factory) => ({ + showLatestResult: factory.switch({ + defaultValue: true, + }), + showStats: factory.switch({ + defaultValue: true, + }), + showRecentResults: factory.switch({ + defaultValue: true, + }), + showPingGraph: factory.switch({ + defaultValue: true, + }), + }), + { + showPingGraph: { + shouldHide: (options) => !options.showRecentResults, + }, + }, + ); + }, + supportedIntegrations: ["speedtestTracker"], + errors: { + INTERNAL_SERVER_ERROR: { + icon: IconServerOff, + message: (t) => t("widget.speedtestTracker.error.internalServerError"), + }, + }, +}).withDynamicImport(() => import("./component")); diff --git a/packages/widgets/src/speedtest-tracker/latest-result.tsx b/packages/widgets/src/speedtest-tracker/latest-result.tsx new file mode 100644 index 000000000..fcc6136cf --- /dev/null +++ b/packages/widgets/src/speedtest-tracker/latest-result.tsx @@ -0,0 +1,62 @@ +"use client"; + +import { Group, SimpleGrid, Stack, Text } from "@mantine/core"; +import { IconArrowDown, IconArrowUp, IconCircleCheck, IconCircleX, IconWaveSine } from "@tabler/icons-react"; + +import type { SpeedtestTrackerResult } from "@homarr/integrations/types"; +import { useCurrentLocale, useScopedI18n } from "@homarr/translation/client"; + +import { formatResultSpeed } from "./helpers"; +import { SectionLabel } from "./section-label"; +import { SpeedStatCard } from "./speed-stat-card"; + +export function LatestResultSection({ result }: { result: SpeedtestTrackerResult }) { + const t = useScopedI18n("widget.speedtestTracker"); + const locale = useCurrentLocale(); + const timestamp = Intl.DateTimeFormat(locale, { + month: "short", + day: "numeric", + hour: "2-digit", + minute: "2-digit", + }).format(result.created_at); + const cols = result.healthy !== null ? 4 : 3; + + return ( + + + {t("latestResult")} + + {timestamp} + + + + + + + {result.healthy !== null && ( + + )} + + + ); +} diff --git a/packages/widgets/src/speedtest-tracker/recent-results.tsx b/packages/widgets/src/speedtest-tracker/recent-results.tsx new file mode 100644 index 000000000..286baffc6 --- /dev/null +++ b/packages/widgets/src/speedtest-tracker/recent-results.tsx @@ -0,0 +1,359 @@ +"use client"; + +import { useMemo } from "react"; +import { AreaChart, ChartTooltip } from "@mantine/charts"; +import { Stack, useMantineTheme } from "@mantine/core"; +import { useElementSize } from "@mantine/hooks"; +import { ReferenceLine, XAxis } from "recharts"; + +import { useRequiredBoard } from "@homarr/boards/context"; +import type { SpeedtestTrackerResult } from "@homarr/integrations/types"; +import { useScopedI18n } from "@homarr/translation/client"; + +import { SectionLabel } from "./section-label"; + +interface XAxisTicks { + midnightTs: number | null; + xTicks: number[]; + topDateTicks: number[]; +} + +function buildXAxisTicks(data: { ts: number }[]): XAxisTicks { + if (data.length === 0) return { midnightTs: null, xTicks: [], topDateTicks: [] }; + + const first = data[0]?.ts ?? 0; + const last = data.at(-1)?.ts ?? 0; + + const twoHourMs = 2 * 60 * 60 * 1000; + const startTick = Math.ceil(first / twoHourMs) * twoHourMs; + const tickSet = new Set(); + for (let t = startTick; t <= last; t += twoHourMs) tickSet.add(t); + + const midnightDate = new Date(first); + midnightDate.setHours(24, 0, 0, 0); + const mTs = midnightDate.getTime(); + const foundMidnight = mTs > first && mTs < last ? mTs : null; + if (foundMidnight) tickSet.add(foundMidnight); + + const topTicks: number[] = [first]; + if (foundMidnight) topTicks.push(foundMidnight); + + return { + midnightTs: foundMidnight, + xTicks: Array.from(tickSet).sort((tsA, tsB) => tsA - tsB), + topDateTicks: topTicks, + }; +} + +function makeXTickRenderer(midnightTs: number | null) { + return ({ x, y, payload }: { x: number; y: number; payload: { value: number } }) => { + const date = new Date(payload.value); + const timeStr = date.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }); + const isMidnight = midnightTs !== null && payload.value === midnightTs; + const dateStr = isMidnight ? date.toLocaleDateString([], { month: "short", day: "numeric" }) : null; + + return ( + + + {timeStr} + + {dateStr && ( + + {dateStr} + + )} + + ); + }; +} + +function renderTopDateTick(props: { x: number; y: number; payload: { value: number }; index: number }) { + const { x, y, payload, index } = props; + const date = new Date(payload.value); + const dateStr = date.toLocaleDateString([], { weekday: "short", month: "short", day: "numeric" }); + const anchor = index === 0 ? "start" : "middle"; + return ( + + + {dateStr} + + + ); +} + +function buildYAxisConfig(maxVal: number, stepOptions: { threshold: number; step: number }[]) { + const step = (stepOptions.find((opt) => maxVal <= opt.threshold) ?? stepOptions.at(-1))?.step ?? 1; + const roundedMax = Math.ceil(maxVal / step) * step || step; + const ticks: number[] = []; + for (let val = 0; val <= roundedMax; val += step) ticks.push(val); + return { ticks, domain: [0, roundedMax] as [number, number] }; +} + +function formatTooltipDate(label: number | string | undefined): string { + const timestamp = typeof label === "number" ? label : Number(label); + if (Number.isNaN(timestamp)) return ""; + return new Date(timestamp).toLocaleString([], { + month: "short", + day: "numeric", + hour: "2-digit", + minute: "2-digit", + }); +} + +export function RecentResultsSection({ + results, + showPingGraph, +}: { + results: SpeedtestTrackerResult[]; + showPingGraph: boolean; +}) { + const t = useScopedI18n("widget.speedtestTracker"); + + return ( + + {t("recentResults")} +
+ + {showPingGraph && } +
+
+ ); +} + +function SpeedSubChart({ results, showLabel }: { results: SpeedtestTrackerResult[]; showLabel: boolean }) { + const t = useScopedI18n("widget.speedtestTracker"); + const { ref, height } = useElementSize(); + + return ( +
+ {showLabel && {t("recentResultsSpeed")}} +
+ {height > 0 && } +
+
+ ); +} + +function PingSubChart({ results }: { results: SpeedtestTrackerResult[] }) { + const t = useScopedI18n("widget.speedtestTracker"); + const { ref, height } = useElementSize(); + + return ( +
+ {t("recentResultsPing")} +
+ {height > 0 && } +
+
+ ); +} + +function SpeedHistoryChart({ results, height }: { results: SpeedtestTrackerResult[]; height: number }) { + const board = useRequiredBoard(); + const theme = useMantineTheme(); + const t = useScopedI18n("widget.speedtestTracker"); + + const data = useMemo( + () => + [...results] + .sort((resultA, resultB) => resultA.created_at.getTime() - resultB.created_at.getTime()) + .filter((result) => (result.download_bits ?? 0) > 0) + .map((result) => ({ + ts: result.created_at.getTime(), + Download: parseFloat(((result.download_bits ?? 0) / 1_000_000).toFixed(2)), + Upload: + result.upload_bits != null && result.upload_bits > 0 + ? parseFloat((result.upload_bits / 1_000_000).toFixed(2)) + : 0, + })), + [results], + ); + + const yConfig = useMemo( + () => + buildYAxisConfig(Math.max(...data.map((item) => Math.max(item.Download, item.Upload)), 0), [ + { threshold: 400, step: 100 }, + { threshold: Infinity, step: 200 }, + ]), + [data], + ); + + const { midnightTs, xTicks, topDateTicks } = useMemo(() => buildXAxisTicks(data), [data]); + const renderXTick = useMemo(() => makeXTickRenderer(midnightTs), [midnightTs]); + + if (data.length === 0) return null; + + return ( + `${val} Mbps`} + xAxisProps={{ + type: "number", + domain: ["dataMin", "dataMax"], + ticks: xTicks, + tick: renderXTick, + interval: 0, + height: midnightTs !== null ? 38 : 28, + }} + yAxisProps={{ + ticks: yConfig.ticks, + domain: yConfig.domain, + tickFormatter: (val: number) => `${val}`, + width: 50, + tick: { fontSize: 10 }, + }} + tooltipProps={{ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + content: (props: any) => { + const { label, payload, active } = props as { + label?: number | string; + payload?: Record[]; + active?: boolean; + }; + if (!active || !payload?.length) return null; + return ( + `${val} Mbps`} + /> + ); + }, + }} + > + + {xTicks.map((tickTs) => ( + + ))} + + ); +} + +function PingHistoryChart({ results, height }: { results: SpeedtestTrackerResult[]; height: number }) { + const board = useRequiredBoard(); + const theme = useMantineTheme(); + const t = useScopedI18n("widget.speedtestTracker"); + + const data = useMemo( + () => + [...results] + .sort((resultA, resultB) => resultA.created_at.getTime() - resultB.created_at.getTime()) + .map((result) => + result.ping === null + ? null + : { + ts: result.created_at.getTime(), + Ping: result.ping, + }, + ) + .filter((result) => result !== null), + [results], + ); + + const yConfig = useMemo( + () => + buildYAxisConfig(Math.max(...data.map((item) => item.Ping), 0), [ + { threshold: 10, step: 2 }, + { threshold: 50, step: 10 }, + { threshold: 200, step: 50 }, + { threshold: Infinity, step: 100 }, + ]), + [data], + ); + + const { midnightTs, xTicks } = useMemo(() => buildXAxisTicks(data), [data]); + const renderXTick = useMemo(() => makeXTickRenderer(midnightTs), [midnightTs]); + + if (data.length === 0) return null; + + return ( + `${val} ms`} + xAxisProps={{ + type: "number", + domain: ["dataMin", "dataMax"], + ticks: xTicks, + tick: renderXTick, + interval: 0, + height: midnightTs !== null ? 38 : 28, + }} + yAxisProps={{ + ticks: yConfig.ticks, + domain: yConfig.domain, + tickFormatter: (val: number) => `${val}`, + width: 50, + tick: { fontSize: 10 }, + }} + tooltipProps={{ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + content: (props: any) => { + const { label, payload, active } = props as { + label?: number | string; + payload?: Record[]; + active?: boolean; + }; + if (!active || !payload?.length) return null; + return ( + `${val} ms`} + /> + ); + }, + }} + > + {xTicks.map((tickTs) => ( + + ))} + + ); +} diff --git a/packages/widgets/src/speedtest-tracker/section-label.tsx b/packages/widgets/src/speedtest-tracker/section-label.tsx new file mode 100644 index 000000000..255e05113 --- /dev/null +++ b/packages/widgets/src/speedtest-tracker/section-label.tsx @@ -0,0 +1,10 @@ +import type { ReactNode } from "react"; +import { Text } from "@mantine/core"; + +export function SectionLabel({ children }: { children: ReactNode }) { + return ( + + {children} + + ); +} diff --git a/packages/widgets/src/speedtest-tracker/speed-stat-card.tsx b/packages/widgets/src/speedtest-tracker/speed-stat-card.tsx new file mode 100644 index 000000000..0817d07f4 --- /dev/null +++ b/packages/widgets/src/speedtest-tracker/speed-stat-card.tsx @@ -0,0 +1,54 @@ +"use client"; + +import { Card, Flex, Text } from "@mantine/core"; +import { useElementSize } from "@mantine/hooks"; + +import { useRequiredBoard } from "@homarr/boards/context"; +import type { TablerIcon } from "@homarr/ui"; + +export interface SpeedStatCardProps { + icon: TablerIcon; + color: string; + value: string; + label: string; + compact?: boolean; +} + +export function SpeedStatCard({ icon: Icon, color, value, label, compact = false }: SpeedStatCardProps) { + const { ref, height, width } = useElementSize(); + const board = useRequiredBoard(); + const isWide = width > height + 20; + const hideLabel = height > 0 && height <= 38; + + return ( + + + + + + {value} + + {!hideLabel && ( + + {label} + + )} + + + + ); +} diff --git a/packages/widgets/src/system-resources/chart/gpu-chart.tsx b/packages/widgets/src/system-resources/chart/gpu-chart.tsx new file mode 100644 index 000000000..e1f7daa2c --- /dev/null +++ b/packages/widgets/src/system-resources/chart/gpu-chart.tsx @@ -0,0 +1,52 @@ +import { Paper, Text } from "@mantine/core"; +import { IconDeviceDesktop } from "@tabler/icons-react"; + +import { useScopedI18n } from "@homarr/translation/client"; + +import type { LabelDisplayModeOption } from ".."; +import { CommonChart } from "./common-chart"; + +export const SystemResourceGPUChart = ({ + gpuUsageOverTime, + hasShadow, + labelDisplayMode, +}: { + gpuUsageOverTime: number[]; + hasShadow: boolean; + labelDisplayMode: LabelDisplayModeOption; +}) => { + const chartData = gpuUsageOverTime.map((usage, index) => ({ index, usage })); + const t = useScopedI18n("widget.systemResources.card"); + + return ( + 0 ? `${Math.round(gpuUsageOverTime[gpuUsageOverTime.length - 1]!)}%` : undefined + } + chartType={hasShadow ? "area" : "line"} + yAxisProps={{ domain: [0, 100] }} + labelDisplayMode={labelDisplayMode} + tooltipProps={{ + content: ({ payload }) => { + if (!payload) { + return null; + } + const value = payload[0] ? Number(payload[0].value) : 0; + return ( + + + {value.toFixed(0)}% + + + ); + }, + }} + /> + ); +}; diff --git a/packages/widgets/src/system-resources/component.tsx b/packages/widgets/src/system-resources/component.tsx index 46237a27c..d1d54ff85 100644 --- a/packages/widgets/src/system-resources/component.tsx +++ b/packages/widgets/src/system-resources/component.tsx @@ -9,6 +9,7 @@ import { clientApi } from "@homarr/api/client"; import type { WidgetComponentProps } from "../definition"; import { CombinedNetworkTrafficChart } from "./chart/combined-network-traffic"; import { SystemResourceCPUChart } from "./chart/cpu-chart"; +import { SystemResourceGPUChart } from "./chart/gpu-chart"; import { SystemResourceMemoryChart } from "./chart/memory-chart"; import { NetworkTrafficChart } from "./chart/network-traffic"; @@ -23,10 +24,16 @@ export default function SystemResources({ integrationIds, options }: WidgetCompo const memoryCapacityInBytes = (data[0]?.healthInfo.memAvailableInBytes ?? 0) + (data[0]?.healthInfo.memUsedInBytes ?? 0); - const [items, setItems] = useState<{ cpu: number; memory: number; network: { up: number; down: number } | null }[]>( + const [items, setItems] = useState< + { cpu: number; memory: number; gpu: number; network: { up: number; down: number } | null }[] + >( data.map((item) => ({ cpu: item.healthInfo.cpuUtilization, memory: item.healthInfo.memUsedInBytes, + gpu: + item.healthInfo.gpu.length > 0 + ? item.healthInfo.gpu.reduce((acc, g) => acc + g.processorUtilization, 0) / item.healthInfo.gpu.length + : 0, network: item.healthInfo.network, })), ); @@ -41,6 +48,10 @@ export default function SystemResources({ integrationIds, options }: WidgetCompo const next = { cpu: data.healthInfo.cpuUtilization, memory: data.healthInfo.memUsedInBytes, + gpu: + data.healthInfo.gpu.length > 0 + ? data.healthInfo.gpu.reduce((acc, g) => acc + g.processorUtilization, 0) / data.healthInfo.gpu.length + : 0, network: data.healthInfo.network, }; @@ -75,6 +86,15 @@ export default function SystemResources({ integrationIds, options }: WidgetCompo /> )} + {options.visibleCharts.includes("gpu") && ( + + item.gpu)} + hasShadow={options.hasShadow} + labelDisplayMode={options.labelDisplayMode} + /> + + )} {showNetwork && (width > 256 ? ( diff --git a/packages/widgets/src/system-resources/index.ts b/packages/widgets/src/system-resources/index.ts index 8f7ade4c4..68fffd4ed 100644 --- a/packages/widgets/src/system-resources/index.ts +++ b/packages/widgets/src/system-resources/index.ts @@ -19,7 +19,7 @@ export const { definition, componentLoader } = createWidgetDefinition("systemRes return optionsBuilder.from((factory) => ({ hasShadow: factory.switch({ defaultValue: true }), visibleCharts: factory.multiSelect({ - options: (["cpu", "memory", "network"] as const).map((key) => ({ + options: (["cpu", "memory", "gpu", "network"] as const).map((key) => ({ value: key, label: (t) => t(`widget.systemResources.option.visibleCharts.option.${key}`), })), diff --git a/packages/widgets/src/timetable/component.tsx b/packages/widgets/src/timetable/component.tsx new file mode 100644 index 000000000..ceaf9e41d --- /dev/null +++ b/packages/widgets/src/timetable/component.tsx @@ -0,0 +1,75 @@ +import { Badge, Center, Group, Stack, Text } from "@mantine/core"; +import dayjs from "dayjs"; + +import { clientApi } from "@homarr/api/client"; +import { useScopedI18n } from "@homarr/translation/client"; + +import type { DynamicSelectOption } from "../_inputs/widget-dynamic-select-input"; +import type { WidgetComponentProps } from "../definition"; + +export default function TimetableWidget({ options, integrationIds }: WidgetComponentProps<"timetable">) { + // It will always have at least one integration as otherwise the NoIntegrationSelectedError would be thrown in item-content.tsx + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const integrationId = integrationIds[0]!; + const t = useScopedI18n("widget.timetable"); + + if (!options.station) { + return
{t("noStation")}
; + } + + return ; +} + +interface TimetableWidgetInnerProps { + station: DynamicSelectOption; + integrationId: string; +} + +const TimetableWidgetInner = ({ station, integrationId }: TimetableWidgetInnerProps) => { + const [timetable] = clientApi.widget.timetable.getTimetable.useSuspenseQuery({ + integrationId, + stationId: station.value, + limit: 10, + }); + const t = useScopedI18n("widget.timetable"); + + return ( + + {t("title", { station: station.label })} + {timetable.entries.map((entry) => ( + + + {entry.line && ( + + {entry.line.name} + + )} + + {dayjs(entry.timestamp).format("HH:mm")}{" "} + {entry.delay >= 1 && ( + + +{entry.delay}' + + )} + + + {entry.location} + + + {entry.platform && ( + + {entry.platform.name} + + )} + + ))} + + ); +}; diff --git a/packages/widgets/src/timetable/index.ts b/packages/widgets/src/timetable/index.ts new file mode 100644 index 000000000..f303b8c62 --- /dev/null +++ b/packages/widgets/src/timetable/index.ts @@ -0,0 +1,37 @@ +import { IconBusStop } from "@tabler/icons-react"; + +import { clientApi } from "@homarr/api/client"; + +import { createWidgetDefinition } from "../definition"; +import { optionsBuilder } from "../options"; + +export const { componentLoader, definition } = createWidgetDefinition("timetable", { + icon: IconBusStop, + supportedIntegrations: ["searchCh"], + createOptions() { + return optionsBuilder.from((factory) => ({ + station: factory.dynamicSelect({ + useOptions(query, integrationIds) { + const { data: stations, isPending } = clientApi.widget.timetable.searchStations.useQuery( + { + integrationId: integrationIds[0] ?? "", + query, + }, + { + enabled: integrationIds.length > 0, + }, + ); + + return { + isPending, + options: + stations?.map((station) => ({ + label: station.name, + value: station.id, + })) ?? [], + }; + }, + }), + })); + }, +}).withDynamicImport(() => import("./component")); diff --git a/packages/widgets/src/video/component.tsx b/packages/widgets/src/video/component.tsx index 68038744e..12b6bbde0 100644 --- a/packages/widgets/src/video/component.tsx +++ b/packages/widgets/src/video/component.tsx @@ -79,7 +79,6 @@ const Feed = ({ options }: Pick, "options">) => { ], }); // All other properties are updated with other useEffect - // eslint-disable-next-line react-hooks/exhaustive-deps }, [videoRef]); useEffect(() => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 932cd93e8..3541ee930 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,26 +4,584 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +catalogs: + default: + '@auth/core': + specifier: ^0.41.2 + version: 0.41.2 + '@auth/drizzle-adapter': + specifier: ^1.11.2 + version: 1.11.2 + '@ctrl/deluge': + specifier: ^8.0.0 + version: 8.0.0 + '@ctrl/qbittorrent': + specifier: ^9.11.2 + version: 9.11.2 + '@ctrl/transmission': + specifier: ^7.4.0 + version: 7.4.0 + '@dnd-kit/core': + specifier: ^6.3.1 + version: 6.3.1 + '@dnd-kit/modifiers': + specifier: ^9.0.0 + version: 9.0.0 + '@dnd-kit/sortable': + specifier: ^10.0.0 + version: 10.0.0 + '@dnd-kit/utilities': + specifier: ^3.2.2 + version: 3.2.2 + '@drizzle-team/brocli': + specifier: ^0.12.0 + version: 0.12.0 + '@extractus/feed-extractor': + specifier: 7.1.7 + version: 7.1.7 + '@gitbeaker/rest': + specifier: ^43.8.0 + version: 43.8.0 + '@homarr/gridstack': + specifier: ^1.12.0 + version: 1.12.0 + '@homarr/node-unifi': + specifier: ^2.6.0 + version: 2.6.0 + '@ianvs/prettier-plugin-sort-imports': + specifier: ^4.7.1 + version: 4.7.1 + '@immich/sdk': + specifier: ^2.7.5 + version: 2.7.5 + '@jellyfin/sdk': + specifier: ^0.13.0 + version: 0.13.0 + '@kubernetes/client-node': + specifier: ^1.4.0 + version: 1.4.0 + '@mantine/charts': + specifier: ^8.3.18 + version: 8.3.18 + '@mantine/colors-generator': + specifier: ^8.3.18 + version: 8.3.18 + '@mantine/core': + specifier: ^8.3.18 + version: 8.3.18 + '@mantine/dates': + specifier: ^8.3.18 + version: 8.3.18 + '@mantine/dropzone': + specifier: ^8.3.18 + version: 8.3.18 + '@mantine/form': + specifier: ^8.3.18 + version: 8.3.18 + '@mantine/hooks': + specifier: ^8.3.18 + version: 8.3.18 + '@mantine/modals': + specifier: ^8.3.18 + version: 8.3.18 + '@mantine/notifications': + specifier: ^8.3.18 + version: 8.3.18 + '@mantine/spotlight': + specifier: ^8.3.18 + version: 8.3.18 + '@mantine/tiptap': + specifier: ^8.3.18 + version: 8.3.18 + '@million/lint': + specifier: 1.0.14 + version: 1.0.14 + '@next/eslint-plugin-next': + specifier: 16.2.4 + version: 16.2.4 + '@octokit/auth-app': + specifier: ^8.2.0 + version: 8.2.0 + '@paralleldrive/cuid2': + specifier: ^3.3.0 + version: 3.3.0 + '@semantic-release/changelog': + specifier: ^6.0.3 + version: 6.0.3 + '@semantic-release/commit-analyzer': + specifier: ^13.0.1 + version: 13.0.1 + '@semantic-release/git': + specifier: ^10.0.1 + version: 10.0.1 + '@semantic-release/github': + specifier: ^12.0.6 + version: 12.0.6 + '@semantic-release/npm': + specifier: ^13.1.5 + version: 13.1.5 + '@semantic-release/release-notes-generator': + specifier: ^14.1.0 + version: 14.1.0 + '@t3-oss/env-nextjs': + specifier: ^0.13.11 + version: 0.13.11 + '@tabler/icons-react': + specifier: ^3.41.1 + version: 3.41.1 + '@tanstack/react-query': + specifier: ^5.100.5 + version: 5.100.5 + '@tanstack/react-query-devtools': + specifier: ^5.100.5 + version: 5.100.5 + '@tanstack/react-query-next-experimental': + specifier: ^5.100.5 + version: 5.100.5 + '@testcontainers/mysql': + specifier: ^11.14.0 + version: 11.14.0 + '@testcontainers/postgresql': + specifier: ^11.14.0 + version: 11.14.0 + '@testcontainers/redis': + specifier: ^11.14.0 + version: 11.14.0 + '@tiptap/extension-color': + specifier: 3.22.4 + version: 3.22.4 + '@tiptap/extension-highlight': + specifier: 3.22.4 + version: 3.22.4 + '@tiptap/extension-image': + specifier: 3.22.4 + version: 3.22.4 + '@tiptap/extension-link': + specifier: ^3.22.4 + version: 3.22.4 + '@tiptap/extension-placeholder': + specifier: ^3.22.4 + version: 3.22.4 + '@tiptap/extension-table': + specifier: 3.22.4 + version: 3.22.4 + '@tiptap/extension-table-cell': + specifier: 3.22.4 + version: 3.22.4 + '@tiptap/extension-table-header': + specifier: 3.22.4 + version: 3.22.4 + '@tiptap/extension-table-row': + specifier: 3.22.4 + version: 3.22.4 + '@tiptap/extension-task-item': + specifier: 3.22.4 + version: 3.22.4 + '@tiptap/extension-task-list': + specifier: 3.22.4 + version: 3.22.4 + '@tiptap/extension-text-align': + specifier: 3.22.4 + version: 3.22.4 + '@tiptap/extension-text-style': + specifier: 3.22.4 + version: 3.22.4 + '@tiptap/extension-underline': + specifier: 3.22.4 + version: 3.22.4 + '@tiptap/react': + specifier: ^3.22.4 + version: 3.22.4 + '@tiptap/starter-kit': + specifier: ^3.22.4 + version: 3.22.4 + '@trpc/client': + specifier: ^11.16.0 + version: 11.16.0 + '@trpc/next': + specifier: ^11.16.0 + version: 11.16.0 + '@trpc/react-query': + specifier: ^11.16.0 + version: 11.16.0 + '@trpc/server': + specifier: ^11.16.0 + version: 11.16.0 + '@trpc/tanstack-react-query': + specifier: ^11.16.0 + version: 11.16.0 + '@turbo/gen': + specifier: ^2.9.6 + version: 2.9.6 + '@types/adm-zip': + specifier: 0.5.8 + version: 0.5.8 + '@types/bcrypt': + specifier: 6.0.0 + version: 6.0.0 + '@types/better-sqlite3': + specifier: 7.6.13 + version: 7.6.13 + '@types/chroma-js': + specifier: 3.1.2 + version: 3.1.2 + '@types/cookies': + specifier: 0.9.2 + version: 0.9.2 + '@types/crypto-js': + specifier: ^4.2.2 + version: 4.2.2 + '@types/css-modules': + specifier: ^1.0.5 + version: 1.0.5 + '@types/dockerode': + specifier: ^4.0.1 + version: 4.0.1 + '@types/node': + specifier: ^24.12.2 + version: 24.12.2 + '@types/node-cron': + specifier: ^3.0.11 + version: 3.0.11 + '@types/node-unifi': + specifier: ^2.5.1 + version: 2.5.1 + '@types/pg': + specifier: ^8.20.0 + version: 8.20.0 + '@types/prismjs': + specifier: ^1.26.6 + version: 1.26.6 + '@types/react': + specifier: 19.2.14 + version: 19.2.14 + '@types/react-dom': + specifier: 19.2.3 + version: 19.2.3 + '@types/swagger-ui-react': + specifier: ^5.18.0 + version: 5.18.0 + '@types/video.js': + specifier: ^7.3.58 + version: 7.3.58 + '@types/ws': + specifier: ^8.18.1 + version: 8.18.1 + '@types/xml2js': + specifier: ^0.4.14 + version: 0.4.14 + '@umami/node': + specifier: ^0.4.0 + version: 0.4.0 + '@vitejs/plugin-react': + specifier: ^5.2.0 + version: 5.2.0 + '@vitest/coverage-v8': + specifier: ^4.1.5 + version: 4.1.5 + '@vitest/ui': + specifier: ^4.1.5 + version: 4.1.5 + '@xterm/addon-canvas': + specifier: ^0.7.0 + version: 0.7.0 + '@xterm/addon-fit': + specifier: 0.11.0 + version: 0.11.0 + '@xterm/xterm': + specifier: ^6.0.0 + version: 6.0.0 + adm-zip: + specifier: 0.5.17 + version: 0.5.17 + babel-plugin-react-compiler: + specifier: ^1.0.0 + version: 1.0.0 + bcrypt: + specifier: ^6.0.0 + version: 6.0.0 + better-sqlite3: + specifier: ^12.9.0 + version: 12.9.0 + chroma-js: + specifier: ^3.2.0 + version: 3.2.0 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + concurrently: + specifier: ^9.2.1 + version: 9.2.1 + conventional-changelog-conventionalcommits: + specifier: ^9.3.1 + version: 9.3.1 + cookie: + specifier: 1.1.1 + version: 1.1.1 + cookies: + specifier: ^0.9.1 + version: 0.9.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + crypto-js: + specifier: ^4.2.0 + version: 4.2.0 + dayjs: + specifier: ^1.11.20 + version: 1.11.20 + deepmerge: + specifier: 4.3.1 + version: 4.3.1 + dns-caching: + specifier: ^0.2.9 + version: 0.2.9 + dockerode: + specifier: ^5.0.0 + version: 5.0.0 + dotenv: + specifier: ^17.4.2 + version: 17.4.2 + dotenv-cli: + specifier: ^11.0.0 + version: 11.0.0 + drizzle-kit: + specifier: ^0.31.10 + version: 0.31.10 + drizzle-orm: + specifier: ^0.45.2 + version: 0.45.2 + drizzle-zod: + specifier: ^0.8.3 + version: 0.8.3 + esbuild: + specifier: ^0.28.0 + version: 0.28.0 + eslint: + specifier: ^9.39.4 + version: 9.39.4 + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8 + eslint-config-turbo: + specifier: ^2.9.6 + version: 2.9.6 + eslint-plugin-import: + specifier: ^2.32.0 + version: 2.32.0 + eslint-plugin-jsx-a11y: + specifier: ^6.10.2 + version: 6.10.2 + eslint-plugin-react: + specifier: ^7.37.5 + version: 7.37.5 + eslint-plugin-react-hooks: + specifier: ^6.1.1 + version: 6.1.1 + fast-xml-parser: + specifier: ^5.7.2 + version: 5.7.2 + fastify: + specifier: ^5.8.5 + version: 5.8.5 + flag-icons: + specifier: ^7.5.0 + version: 7.5.0 + glob: + specifier: ^13.0.6 + version: 13.0.6 + ical.js: + specifier: ^2.2.1 + version: 2.2.1 + ioredis: + specifier: 5.10.1 + version: 5.10.1 + isomorphic-dompurify: + specifier: ^3.10.0 + version: 3.10.0 + jotai: + specifier: ^2.19.1 + version: 2.19.1 + jsdom: + specifier: ^29.0.2 + version: 29.0.2 + json5: + specifier: ^2.2.3 + version: 2.2.3 + ldapts: + specifier: 8.1.7 + version: 8.1.7 + lodash.clonedeep: + specifier: ^4.5.0 + version: 4.5.0 + mantine-form-zod-resolver: + specifier: ^1.3.0 + version: 1.3.0 + mantine-react-table: + specifier: 2.0.0-beta.9 + version: 2.0.0-beta.9 + maria2: + specifier: ^0.4.1 + version: 0.4.1 + mysql2: + specifier: 3.22.2 + version: 3.22.2 + next: + specifier: 16.2.4 + version: 16.2.4 + next-auth: + specifier: 5.0.0-beta.31 + version: 5.0.0-beta.31 + next-intl: + specifier: 4.9.1 + version: 4.9.1 + node-cron: + specifier: ^4.2.1 + version: 4.2.1 + node-loader: + specifier: ^2.1.0 + version: 2.1.0 + octokit: + specifier: ^5.0.5 + version: 5.0.5 + pg: + specifier: ^8.20.0 + version: 8.20.0 + postcss-preset-mantine: + specifier: ^1.18.0 + version: 1.18.0 + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-packagejson: + specifier: ^3.0.2 + version: 3.0.2 + prismjs: + specifier: ^1.30.0 + version: 1.30.0 + proxmox-api: + specifier: 1.1.1 + version: 1.1.1 + react: + specifier: 19.2.5 + version: 19.2.5 + react-dom: + specifier: 19.2.5 + version: 19.2.5 + react-error-boundary: + specifier: ^6.1.1 + version: 6.1.1 + react-markdown: + specifier: ^10.1.0 + version: 10.1.0 + react-quill-new: + specifier: ^3.8.3 + version: 3.8.3 + react-simple-code-editor: + specifier: ^0.14.1 + version: 0.14.1 + recharts: + specifier: ^2.15.4 + version: 2.15.4 + sass: + specifier: ^1.99.0 + version: 1.99.0 + semantic-release: + specifier: ^25.0.3 + version: 25.0.3 + semver-parser: + specifier: ^4.1.8 + version: 4.1.8 + superjson: + specifier: 2.2.6 + version: 2.2.6 + svgson: + specifier: ^5.3.1 + version: 5.3.1 + swagger-ui-react: + specifier: ^5.32.4 + version: 5.32.4 + testcontainers: + specifier: ^11.14.0 + version: 11.14.0 + timezones-ical-library: + specifier: ^2.1.3 + version: 2.1.3 + trpc-to-openapi: + specifier: ^3.2.0 + version: 3.2.0 + tsdav: + specifier: ^2.1.8 + version: 2.1.8 + tsx: + specifier: 4.20.4 + version: 4.20.4 + turbo: + specifier: ^2.9.6 + version: 2.9.6 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + typescript-eslint: + specifier: ^8.58.2 + version: 8.58.2 + undici: + specifier: 7.24.6 + version: 7.24.6 + use-deep-compare-effect: + specifier: ^1.8.1 + version: 1.8.1 + video.js: + specifier: ^8.23.7 + version: 8.23.7 + vite-tsconfig-paths: + specifier: ^6.1.1 + version: 6.1.1 + vitest: + specifier: ^4.1.5 + version: 4.1.5 + winston: + specifier: 3.19.0 + version: 3.19.0 + ws: + specifier: ^8.20.0 + version: 8.20.0 + xml2js: + specifier: ^0.6.2 + version: 0.6.2 + yaml: + specifier: 2.8.3 + version: 2.8.3 + zod: + specifier: ^4.3.6 + version: 4.3.6 + zod-form-data: + specifier: ^3.0.1 + version: 3.0.1 + zod-validation-error: + specifier: ^5.0.0 + version: 5.0.0 + overrides: - '@babel/helpers@<7.26.10': '>=7.28.6' - '@babel/runtime@<7.26.10': '>=7.28.6' - axios@>=1.0.0 <1.8.2: '>=1.13.6' - brace-expansion@>=2.0.0 <=2.0.1: '>=5.0.4' - brace-expansion@>=1.0.0 <=1.1.11: '>=5.0.4' - esbuild@<=0.24.2: '>=0.27.3' + '@babel/helpers@<7.26.10': '>=7.29.2' + '@babel/runtime@<7.26.10': '>=7.29.2' + axios@>=1.0.0 <1.8.2: '>=1.15.2' + brace-expansion@>=2.0.0 <=2.0.1: '>=5.0.5' + brace-expansion@>=1.0.0 <=1.1.11: '>=5.0.5' + esbuild@<=0.24.2: '>=0.28.0' form-data@>=4.0.0 <4.0.4: '>=4.0.5' - hono@<4.6.5: '>=4.12.7' + hono@<4.6.5: '>=4.12.15' linkifyjs@<4.3.2: '>=4.3.2' - nanoid@>=4.0.0 <5.0.9: '>=5.1.6' + nanoid@>=4.0.0 <5.0.9: '>=5.1.9' prismjs@<1.30.0: '>=1.30.0' - proxmox-api>undici: 7.19.2 - react-is: ^19.2.4 - rollup@>=4.0.0 <4.22.4: '>=4.59.0' + proxmox-api>undici: 7.24.6 + react-is: ^19.2.5 + rollup@>=4.0.0 <4.22.4: '>=4.60.2' sha.js@<=2.4.11: '>=2.4.12' tar-fs@>=3.0.0 <3.0.9: '>=3.1.2' tar-fs@>=2.0.0 <2.1.3: '>=3.1.2' tmp@<=0.2.3: '>=0.2.5' - vite@>=5.0.0 <=5.4.18: '>=7.3.1' + vite@>=5.0.0 <=5.4.18: '>=8.0.10' patchedDependencies: '@types/node-unifi': @@ -41,86 +599,86 @@ importers: specifier: workspace:^0.1.0 version: link:tooling/prettier '@semantic-release/changelog': - specifier: ^6.0.3 + specifier: 'catalog:' version: 6.0.3(semantic-release@25.0.3(typescript@5.9.3)) '@semantic-release/commit-analyzer': - specifier: ^13.0.1 + specifier: 'catalog:' version: 13.0.1(semantic-release@25.0.3(typescript@5.9.3)) '@semantic-release/git': - specifier: ^10.0.1 + specifier: 'catalog:' version: 10.0.1(semantic-release@25.0.3(typescript@5.9.3)) '@semantic-release/github': - specifier: ^12.0.6 + specifier: 'catalog:' version: 12.0.6(semantic-release@25.0.3(typescript@5.9.3)) '@semantic-release/npm': - specifier: ^13.1.5 + specifier: 'catalog:' version: 13.1.5(semantic-release@25.0.3(typescript@5.9.3)) '@semantic-release/release-notes-generator': - specifier: ^14.1.0 + specifier: 'catalog:' version: 14.1.0(semantic-release@25.0.3(typescript@5.9.3)) '@testcontainers/redis': - specifier: ^11.12.0 - version: 11.12.0 + specifier: 'catalog:' + version: 11.14.0 '@turbo/gen': - specifier: ^2.8.15 - version: 2.8.16(@types/node@24.12.0) + specifier: 'catalog:' + version: 2.9.6(@types/node@24.12.2) '@vitejs/plugin-react': - specifier: ^5.1.4 - version: 5.1.4(vite@7.1.12(@types/node@24.12.0)(sass@1.97.3)(sugarss@5.0.0(postcss@8.5.6))(terser@5.46.0)(tsx@4.21.0)(yaml@2.5.1)) + specifier: 'catalog:' + version: 5.2.0(vite@7.1.12(@types/node@24.12.2)(sass@1.99.0)(sugarss@5.0.0(postcss@8.5.8))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/coverage-v8': - specifier: ^4.0.18 - version: 4.0.18(vitest@4.0.18) + specifier: 'catalog:' + version: 4.1.5(vitest@4.1.5) '@vitest/ui': - specifier: ^4.0.18 - version: 4.0.18(vitest@4.0.18) + specifier: 'catalog:' + version: 4.1.5(vitest@4.1.5) conventional-changelog-conventionalcommits: - specifier: ^9.3.0 - version: 9.3.0 + specifier: 'catalog:' + version: 9.3.1 cross-env: - specifier: ^10.1.0 + specifier: 'catalog:' version: 10.1.0 jsdom: - specifier: ^28.1.0 - version: 28.1.0(@noble/hashes@2.0.1) + specifier: 'catalog:' + version: 29.0.2(@noble/hashes@2.0.1) json5: - specifier: ^2.2.3 + specifier: 'catalog:' version: 2.2.3 prettier: - specifier: ^3.8.1 - version: 3.8.1 + specifier: 'catalog:' + version: 3.8.3 semantic-release: - specifier: ^25.0.3 + specifier: 'catalog:' version: 25.0.3(typescript@5.9.3) testcontainers: - specifier: ^11.12.0 - version: 11.12.0 + specifier: 'catalog:' + version: 11.14.0 turbo: - specifier: ^2.8.15 - version: 2.8.16 + specifier: 'catalog:' + version: 2.9.6 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 vite-tsconfig-paths: - specifier: ^6.1.1 - version: 6.1.1(typescript@5.9.3)(vite@7.1.12(@types/node@24.12.0)(sass@1.97.3)(sugarss@5.0.0(postcss@8.5.6))(terser@5.46.0)(tsx@4.21.0)(yaml@2.5.1)) + specifier: 'catalog:' + version: 6.1.1(typescript@5.9.3)(vite@7.1.12(@types/node@24.12.2)(sass@1.99.0)(sugarss@5.0.0(postcss@8.5.8))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) vitest: - specifier: ^4.0.18 - version: 4.0.18(@types/node@24.12.0)(@vitest/ui@4.0.18)(jsdom@28.1.0(@noble/hashes@2.0.1))(sass@1.97.3)(sugarss@5.0.0(postcss@8.5.6))(terser@5.46.0)(tsx@4.21.0)(yaml@2.5.1) + specifier: 'catalog:' + version: 4.1.5(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@29.0.2(@noble/hashes@2.0.1))(vite@7.1.12(@types/node@24.12.2)(sass@1.99.0)(sugarss@5.0.0(postcss@8.5.8))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) apps/nextjs: dependencies: '@dnd-kit/core': - specifier: ^6.3.1 - version: 6.3.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 6.3.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@dnd-kit/modifiers': - specifier: ^9.0.0 - version: 9.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 9.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5) '@dnd-kit/sortable': - specifier: ^10.0.0 - version: 10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5) '@dnd-kit/utilities': - specifier: ^3.2.2 - version: 3.2.2(react@19.2.4) + specifier: 'catalog:' + version: 3.2.2(react@19.2.5) '@homarr/analytics': specifier: workspace:^0.1.0 version: link:../../packages/analytics @@ -158,7 +716,7 @@ importers: specifier: workspace:^0.1.0 version: link:../../packages/forms-collection '@homarr/gridstack': - specifier: ^1.12.0 + specifier: 'catalog:' version: 1.12.0 '@homarr/icons': specifier: workspace:^0.1.0 @@ -209,128 +767,128 @@ importers: specifier: workspace:^0.1.0 version: link:../../packages/widgets '@mantine/colors-generator': - specifier: ^8.3.16 - version: 8.3.16(chroma-js@3.2.0) + specifier: 'catalog:' + version: 8.3.18(chroma-js@3.2.0) '@mantine/core': - specifier: ^8.3.16 - version: 8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@mantine/dropzone': - specifier: ^8.3.16 - version: 8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@mantine/hooks': - specifier: ^8.3.16 - version: 8.3.16(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(react@19.2.5) '@mantine/modals': - specifier: ^8.3.16 - version: 8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@mantine/tiptap': - specifier: ^8.3.16 - version: 8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(@tiptap/extension-link@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))(@tiptap/react@3.20.1(@floating-ui/dom@1.7.4)(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(@tiptap/extension-link@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/react@3.22.4(@floating-ui/dom@1.7.4)(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@million/lint': - specifier: 1.0.14 + specifier: 'catalog:' version: 1.0.14(webpack-sources@3.3.4) '@tabler/icons-react': - specifier: ^3.36.1 - version: 3.36.1(react@19.2.3) - '@tanstack/react-form': - specifier: ^1.27.7 - version: 1.27.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: 'catalog:' + version: 3.41.1(react@19.2.5) '@tanstack/react-query': - specifier: ^5.90.21 - version: 5.90.21(react@19.2.4) + specifier: 'catalog:' + version: 5.100.5(react@19.2.5) '@tanstack/react-query-devtools': - specifier: ^5.91.3 - version: 5.91.3(@tanstack/react-query@5.90.21(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 5.100.5(@tanstack/react-query@5.100.5(react@19.2.5))(react@19.2.5) '@tanstack/react-query-next-experimental': - specifier: ^5.91.0 - version: 5.91.0(@tanstack/react-query@5.90.21(react@19.2.4))(next@16.1.6(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react@19.2.4) + specifier: 'catalog:' + version: 5.100.5(@tanstack/react-query@5.100.5(react@19.2.5))(next@16.2.4(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0))(react@19.2.5) '@trpc/client': - specifier: ^11.12.0 - version: 11.12.0(@trpc/server@11.12.0(typescript@5.9.3))(typescript@5.9.3) + specifier: 'catalog:' + version: 11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3) '@trpc/next': - specifier: ^11.12.0 - version: 11.12.0(@tanstack/react-query@5.90.21(react@19.2.4))(@trpc/client@11.12.0(@trpc/server@11.12.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/react-query@11.12.0(@tanstack/react-query@5.90.21(react@19.2.4))(@trpc/client@11.12.0(@trpc/server@11.12.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.12.0(typescript@5.9.3))(react@19.2.4)(typescript@5.9.3))(@trpc/server@11.12.0(typescript@5.9.3))(next@16.1.6(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + specifier: 'catalog:' + version: 11.16.0(@tanstack/react-query@5.100.5(react@19.2.5))(@trpc/client@11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/react-query@11.16.0(@tanstack/react-query@5.100.5(react@19.2.5))(@trpc/client@11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.16.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3))(@trpc/server@11.16.0(typescript@5.9.3))(next@16.2.4(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3) '@trpc/react-query': - specifier: ^11.12.0 - version: 11.12.0(@tanstack/react-query@5.90.21(react@19.2.4))(@trpc/client@11.12.0(@trpc/server@11.12.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.12.0(typescript@5.9.3))(react@19.2.4)(typescript@5.9.3) + specifier: 'catalog:' + version: 11.16.0(@tanstack/react-query@5.100.5(react@19.2.5))(@trpc/client@11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.16.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3) '@trpc/server': - specifier: ^11.12.0 - version: 11.12.0(typescript@5.9.3) + specifier: 'catalog:' + version: 11.16.0(typescript@5.9.3) '@xterm/addon-canvas': - specifier: ^0.7.0 + specifier: 'catalog:' version: 0.7.0(@xterm/xterm@6.0.0) '@xterm/addon-fit': - specifier: 0.11.0 + specifier: 'catalog:' version: 0.11.0 '@xterm/xterm': - specifier: ^6.0.0 + specifier: 'catalog:' version: 6.0.0 babel-plugin-react-compiler: - specifier: ^1.0.0 + specifier: 'catalog:' version: 1.0.0 chroma-js: - specifier: ^3.2.0 + specifier: 'catalog:' version: 3.2.0 clsx: - specifier: ^2.1.1 + specifier: 'catalog:' version: 2.1.1 dayjs: - specifier: ^1.11.19 - version: 1.11.19 + specifier: 'catalog:' + version: 1.11.20 dotenv: - specifier: ^17.3.1 - version: 17.3.1 + specifier: 'catalog:' + version: 17.4.2 flag-icons: - specifier: ^7.5.0 + specifier: 'catalog:' version: 7.5.0 glob: - specifier: ^13.0.6 + specifier: 'catalog:' version: 13.0.6 isomorphic-dompurify: - specifier: ^3.1.0 - version: 3.1.0(@noble/hashes@2.0.1) + specifier: 'catalog:' + version: 3.10.0(@noble/hashes@2.0.1) jotai: - specifier: ^2.18.1 - version: 2.18.1(@babel/core@7.26.0)(@babel/template@7.28.6)(@types/react@19.2.14)(react@19.2.4) + specifier: 'catalog:' + version: 2.19.1(@babel/core@7.26.0)(@babel/template@7.28.6)(@types/react@19.2.14)(react@19.2.5) mantine-react-table: - specifier: 2.0.0-beta.9 - version: 2.0.0-beta.9(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/dates@8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(dayjs@1.11.19)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(@tabler/icons-react@3.40.0(react@19.2.4))(clsx@2.1.1)(dayjs@1.11.19)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 2.0.0-beta.9(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/dates@8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(dayjs@1.11.20)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(@tabler/icons-react@3.41.1(react@19.2.5))(clsx@2.1.1)(dayjs@1.11.20)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) next: - specifier: 16.1.6 - version: 16.1.6(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) + specifier: 'catalog:' + version: 16.2.4(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) postcss-preset-mantine: - specifier: ^1.18.0 - version: 1.18.0(postcss@8.5.6) + specifier: 'catalog:' + version: 1.18.0(postcss@8.5.8) prismjs: - specifier: ^1.30.0 + specifier: 'catalog:' version: 1.30.0 react: - specifier: 19.2.4 - version: 19.2.4 + specifier: 'catalog:' + version: 19.2.5 react-dom: - specifier: 19.2.4 - version: 19.2.4(react@19.2.4) + specifier: 'catalog:' + version: 19.2.5(react@19.2.5) react-error-boundary: - specifier: ^6.1.1 - version: 6.1.1(react@19.2.4) + specifier: 'catalog:' + version: 6.1.1(react@19.2.5) react-simple-code-editor: - specifier: ^0.14.1 - version: 0.14.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 0.14.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) sass: - specifier: ^1.97.3 - version: 1.97.3 + specifier: 'catalog:' + version: 1.99.0 superjson: - specifier: 2.2.6 + specifier: 'catalog:' version: 2.2.6 swagger-ui-react: - specifier: ^5.32.0 - version: 5.32.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 5.32.4(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) use-deep-compare-effect: - specifier: ^1.8.1 - version: 1.8.1(react@19.2.4) + specifier: 'catalog:' + version: 1.8.1(react@19.2.5) + yaml: + specifier: 'catalog:' + version: 2.8.3 zod: - specifier: ^4.2.1 - version: 4.2.1 + specifier: 'catalog:' + version: 4.3.6 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -342,37 +900,37 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript '@types/chroma-js': - specifier: 3.1.2 + specifier: 'catalog:' version: 3.1.2 '@types/node': - specifier: ^24.12.0 - version: 24.12.0 + specifier: 'catalog:' + version: 24.12.2 '@types/prismjs': - specifier: ^1.26.6 + specifier: 'catalog:' version: 1.26.6 '@types/react': - specifier: 19.2.14 + specifier: 'catalog:' version: 19.2.14 '@types/react-dom': - specifier: 19.2.3 + specifier: 'catalog:' version: 19.2.3(@types/react@19.2.14) '@types/swagger-ui-react': - specifier: ^5.18.0 + specifier: 'catalog:' version: 5.18.0 concurrently: - specifier: ^9.2.1 + specifier: 'catalog:' version: 9.2.1 eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 node-loader: - specifier: ^2.1.0 + specifier: 'catalog:' version: 2.1.0(webpack@5.94.0) prettier: - specifier: ^3.8.1 - version: 3.8.1 + specifier: 'catalog:' + version: 3.8.3 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 apps/tasks: @@ -429,20 +987,20 @@ importers: specifier: workspace:^0.1.0 version: link:../../packages/widgets dayjs: - specifier: ^1.11.19 - version: 1.11.19 + specifier: 'catalog:' + version: 1.11.20 dotenv: - specifier: ^17.3.1 - version: 17.3.1 + specifier: 'catalog:' + version: 17.4.2 fastify: - specifier: ^5.8.2 - version: 5.8.2 + specifier: 'catalog:' + version: 5.8.5 superjson: - specifier: 2.2.6 + specifier: 'catalog:' version: 2.2.6 undici: - specifier: 7.18.2 - version: 7.18.2 + specifier: 'catalog:' + version: 7.24.6 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -454,25 +1012,25 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript '@types/node': - specifier: ^24.12.0 - version: 24.12.0 + specifier: 'catalog:' + version: 24.12.2 dotenv-cli: - specifier: ^11.0.0 + specifier: 'catalog:' version: 11.0.0 esbuild: - specifier: ^0.27.3 - version: 0.27.3 + specifier: 'catalog:' + version: 0.28.0 eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 prettier: - specifier: ^3.8.1 - version: 3.8.1 + specifier: 'catalog:' + version: 3.8.3 tsx: - specifier: 4.20.4 + specifier: 'catalog:' version: 4.20.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 apps/websocket: @@ -502,14 +1060,14 @@ importers: specifier: workspace:^0.1.0 version: link:../../packages/validation dotenv: - specifier: ^17.3.1 - version: 17.3.1 + specifier: 'catalog:' + version: 17.4.2 tsx: - specifier: 4.20.4 + specifier: 'catalog:' version: 4.20.4 ws: - specifier: ^8.19.0 - version: 8.19.0 + specifier: 'catalog:' + version: 8.20.0 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -521,19 +1079,19 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript '@types/ws': - specifier: ^8.18.1 + specifier: 'catalog:' version: 8.18.1 esbuild: - specifier: ^0.27.3 - version: 0.27.3 + specifier: 'catalog:' + version: 0.28.0 eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 prettier: - specifier: ^3.8.1 - version: 3.8.1 + specifier: 'catalog:' + version: 3.8.3 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/analytics: @@ -557,10 +1115,10 @@ importers: specifier: workspace:^0.1.0 version: link:../server-settings '@umami/node': - specifier: ^0.4.0 + specifier: 'catalog:' version: 0.4.0 superjson: - specifier: 2.2.6 + specifier: 'catalog:' version: 2.2.6 devDependencies: '@homarr/eslint-config': @@ -573,10 +1131,10 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/api: @@ -639,44 +1197,44 @@ importers: specifier: workspace:^0.1.0 version: link:../validation '@kubernetes/client-node': - specifier: ^1.4.0 + specifier: 'catalog:' version: 1.4.0 '@tanstack/react-query': - specifier: ^5.90.21 - version: 5.90.21(react@19.2.4) + specifier: 'catalog:' + version: 5.100.5(react@19.2.5) '@trpc/client': - specifier: ^11.12.0 - version: 11.12.0(@trpc/server@11.12.0(typescript@5.9.3))(typescript@5.9.3) + specifier: 'catalog:' + version: 11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3) '@trpc/react-query': - specifier: ^11.12.0 - version: 11.12.0(@tanstack/react-query@5.90.21(react@19.2.4))(@trpc/client@11.12.0(@trpc/server@11.12.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.12.0(typescript@5.9.3))(react@19.2.4)(typescript@5.9.3) + specifier: 'catalog:' + version: 11.16.0(@tanstack/react-query@5.100.5(react@19.2.5))(@trpc/client@11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.16.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3) '@trpc/server': - specifier: ^11.12.0 - version: 11.12.0(typescript@5.9.3) + specifier: 'catalog:' + version: 11.16.0(typescript@5.9.3) '@trpc/tanstack-react-query': - specifier: ^11.12.0 - version: 11.12.0(@tanstack/react-query@5.90.21(react@19.2.4))(@trpc/client@11.12.0(@trpc/server@11.12.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.12.0(typescript@5.9.3))(react@19.2.4)(typescript@5.9.3) + specifier: 'catalog:' + version: 11.16.0(@tanstack/react-query@5.100.5(react@19.2.5))(@trpc/client@11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.16.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3) lodash.clonedeep: - specifier: ^4.5.0 + specifier: 'catalog:' version: 4.5.0 next: - specifier: 16.1.6 - version: 16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) + specifier: 'catalog:' + version: 16.2.4(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) react: - specifier: 19.2.4 - version: 19.2.4 + specifier: 'catalog:' + version: 19.2.5 react-dom: - specifier: 19.2.4 - version: 19.2.4(react@19.2.4) + specifier: 'catalog:' + version: 19.2.5(react@19.2.5) superjson: - specifier: 2.2.6 + specifier: 'catalog:' version: 2.2.6 trpc-to-openapi: - specifier: ^3.1.0 - version: 3.1.0(patch_hash=2ca3c16af0fcca0c736697ad4fe553a14f794524fa9ce0d5c3e8ee4aea76090c)(@trpc/server@11.12.0(typescript@5.9.3))(zod-openapi@5.3.0(zod@4.2.1))(zod@4.2.1) + specifier: 'catalog:' + version: 3.2.0(patch_hash=2ca3c16af0fcca0c736697ad4fe553a14f794524fa9ce0d5c3e8ee4aea76090c)(@trpc/server@11.16.0(typescript@5.9.3))(zod-openapi@5.3.0(zod@4.3.6))(zod@4.3.6) zod: - specifier: ^4.2.1 - version: 4.2.1 + specifier: 'catalog:' + version: 4.3.6 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -688,23 +1246,23 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 prettier: - specifier: ^3.8.1 - version: 3.8.1 + specifier: 'catalog:' + version: 3.8.3 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/auth: dependencies: '@auth/core': - specifier: ^0.41.1 - version: 0.41.1 + specifier: 'catalog:' + version: 0.41.2 '@auth/drizzle-adapter': - specifier: ^1.11.1 - version: 1.11.1 + specifier: 'catalog:' + version: 1.11.2 '@homarr/common': specifier: workspace:^0.1.0 version: link:../common @@ -721,29 +1279,29 @@ importers: specifier: workspace:^0.1.0 version: link:../validation bcrypt: - specifier: ^6.0.0 + specifier: 'catalog:' version: 6.0.0 cookies: - specifier: ^0.9.1 + specifier: 'catalog:' version: 0.9.1 ldapts: - specifier: 8.1.7 + specifier: 'catalog:' version: 8.1.7 next: - specifier: 16.1.6 - version: 16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) + specifier: 'catalog:' + version: 16.2.4(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) next-auth: - specifier: 5.0.0-beta.30 - version: 5.0.0-beta.30(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react@19.2.4) + specifier: 'catalog:' + version: 5.0.0-beta.31(next@16.2.4(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0))(react@19.2.5) react: - specifier: 19.2.4 - version: 19.2.4 + specifier: 'catalog:' + version: 19.2.5 react-dom: - specifier: 19.2.4 - version: 19.2.4(react@19.2.4) + specifier: 'catalog:' + version: 19.2.5(react@19.2.5) zod: - specifier: ^4.2.1 - version: 4.2.1 + specifier: 'catalog:' + version: 4.3.6 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -755,19 +1313,19 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript '@types/bcrypt': - specifier: 6.0.0 + specifier: 'catalog:' version: 6.0.0 '@types/cookies': - specifier: 0.9.2 + specifier: 'catalog:' version: 0.9.2 eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 prettier: - specifier: ^3.8.1 - version: 3.8.1 + specifier: 'catalog:' + version: 3.8.3 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/boards: @@ -776,11 +1334,11 @@ importers: specifier: workspace:^0.1.0 version: link:../api react: - specifier: 19.2.4 - version: 19.2.4 + specifier: 'catalog:' + version: 19.2.5 react-dom: - specifier: 19.2.4 - version: 19.2.4(react@19.2.4) + specifier: 'catalog:' + version: 19.2.5(react@19.2.5) devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -792,17 +1350,17 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/cli: dependencies: '@drizzle-team/brocli': - specifier: ^0.11.0 - version: 0.11.0 + specifier: 'catalog:' + version: 0.12.0 '@homarr/auth': specifier: workspace:^0.1.0 version: link:../auth @@ -816,8 +1374,8 @@ importers: specifier: workspace:^0.1.0 version: link:../validation dotenv: - specifier: ^17.3.1 - version: 17.3.1 + specifier: 'catalog:' + version: 17.4.2 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -829,13 +1387,13 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript esbuild: - specifier: ^0.27.3 - version: 0.27.3 + specifier: 'catalog:' + version: 0.28.0 eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/common: @@ -844,35 +1402,35 @@ importers: specifier: workspace:^0.1.0 version: link:../core '@paralleldrive/cuid2': - specifier: ^3.3.0 + specifier: 'catalog:' version: 3.3.0 cookie: - specifier: 1.1.1 + specifier: 'catalog:' version: 1.1.1 dayjs: - specifier: ^1.11.19 - version: 1.11.19 + specifier: 'catalog:' + version: 1.11.20 next: - specifier: 16.1.6 - version: 16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) + specifier: 'catalog:' + version: 16.2.4(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) octokit: - specifier: ^5.0.5 + specifier: 'catalog:' version: 5.0.5 react: - specifier: 19.2.4 - version: 19.2.4 + specifier: 'catalog:' + version: 19.2.5 react-dom: - specifier: 19.2.4 - version: 19.2.4(react@19.2.4) + specifier: 'catalog:' + version: 19.2.5(react@19.2.5) undici: - specifier: 7.18.2 - version: 7.18.2 + specifier: 'catalog:' + version: 7.24.6 zod: - specifier: ^4.2.1 - version: 4.2.1 + specifier: 'catalog:' + version: 4.3.6 zod-validation-error: - specifier: ^5.0.0 - version: 5.0.0(zod@4.2.1) + specifier: 'catalog:' + version: 5.0.0(zod@4.3.6) devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -884,44 +1442,44 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/core: dependencies: '@t3-oss/env-nextjs': - specifier: ^0.13.10 - version: 0.13.10(arktype@2.1.20)(typescript@5.9.3)(zod@4.2.1) + specifier: 'catalog:' + version: 0.13.11(arktype@2.1.20)(typescript@5.9.3)(zod@4.3.6) better-sqlite3: - specifier: ^12.6.2 - version: 12.6.2 + specifier: 'catalog:' + version: 12.9.0 dns-caching: - specifier: ^0.2.9 + specifier: 'catalog:' version: 0.2.9 drizzle-orm: - specifier: ^0.45.1 - version: 0.45.1(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.18.0)(better-sqlite3@12.6.2)(gel@2.0.0)(mysql2@3.19.1(@types/node@24.12.0))(pg@8.20.0) + specifier: 'catalog:' + version: 0.45.2(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.9.0)(gel@2.0.0)(mysql2@3.22.2(@types/node@24.12.2))(pg@8.20.0) ioredis: - specifier: 5.10.0 - version: 5.10.0 + specifier: 'catalog:' + version: 5.10.1 mysql2: - specifier: 3.19.1 - version: 3.19.1(@types/node@24.12.0) + specifier: 'catalog:' + version: 3.22.2(@types/node@24.12.2) pg: - specifier: ^8.20.0 + specifier: 'catalog:' version: 8.20.0 superjson: - specifier: 2.2.6 + specifier: 'catalog:' version: 2.2.6 winston: - specifier: 3.19.0 + specifier: 'catalog:' version: 3.19.0 zod: - specifier: ^4.2.1 - version: 4.2.1 + specifier: 'catalog:' + version: 4.3.6 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -933,16 +1491,16 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript '@types/better-sqlite3': - specifier: 7.6.13 + specifier: 'catalog:' version: 7.6.13 '@types/pg': - specifier: ^8.18.0 - version: 8.18.0 + specifier: 'catalog:' + version: 8.20.0 eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/cron-job-api: @@ -957,26 +1515,26 @@ importers: specifier: workspace:^0.1.0 version: link:../cron-jobs '@tanstack/react-query': - specifier: ^5.90.21 - version: 5.90.21(react@19.2.4) + specifier: 'catalog:' + version: 5.100.5(react@19.2.5) '@trpc/client': - specifier: ^11.12.0 - version: 11.12.0(@trpc/server@11.12.0(typescript@5.9.3))(typescript@5.9.3) + specifier: 'catalog:' + version: 11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3) '@trpc/server': - specifier: ^11.12.0 - version: 11.12.0(typescript@5.9.3) + specifier: 'catalog:' + version: 11.16.0(typescript@5.9.3) '@trpc/tanstack-react-query': - specifier: ^11.12.0 - version: 11.12.0(@tanstack/react-query@5.90.21(react@19.2.4))(@trpc/client@11.12.0(@trpc/server@11.12.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.12.0(typescript@5.9.3))(react@19.2.4)(typescript@5.9.3) + specifier: 'catalog:' + version: 11.16.0(@tanstack/react-query@5.100.5(react@19.2.5))(@trpc/client@11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.16.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3) node-cron: - specifier: ^4.2.1 + specifier: 'catalog:' version: 4.2.1 react: - specifier: 19.2.4 - version: 19.2.4 + specifier: 'catalog:' + version: 19.2.5 zod: - specifier: ^4.2.1 - version: 4.2.1 + specifier: 'catalog:' + version: 4.3.6 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -988,16 +1546,16 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript '@types/node-cron': - specifier: ^3.0.11 + specifier: 'catalog:' version: 3.0.11 '@types/react': - specifier: 19.2.14 + specifier: 'catalog:' version: 19.2.14 eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/cron-job-status: @@ -1016,10 +1574,10 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/cron-jobs: @@ -1073,7 +1631,7 @@ importers: specifier: workspace:^0.1.0 version: link:../validation semver-parser: - specifier: ^4.1.8 + specifier: 'catalog:' version: 4.1.8 devDependencies: '@homarr/eslint-config': @@ -1086,10 +1644,10 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/cron-jobs-core: @@ -1104,7 +1662,7 @@ importers: specifier: workspace:^0.1.0 version: link:../db node-cron: - specifier: ^4.2.1 + specifier: 'catalog:' version: 4.2.1 devDependencies: '@homarr/eslint-config': @@ -1117,20 +1675,20 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript '@types/node-cron': - specifier: ^3.0.11 + specifier: 'catalog:' version: 3.0.11 eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/db: dependencies: '@auth/core': - specifier: ^0.41.1 - version: 0.41.1 + specifier: 'catalog:' + version: 0.41.2 '@homarr/common': specifier: workspace:^0.1.0 version: link:../common @@ -1144,40 +1702,40 @@ importers: specifier: workspace:^0.1.0 version: link:../server-settings '@mantine/core': - specifier: ^8.3.16 - version: 8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@paralleldrive/cuid2': - specifier: ^3.3.0 + specifier: 'catalog:' version: 3.3.0 '@testcontainers/mysql': - specifier: ^11.12.0 - version: 11.12.0 + specifier: 'catalog:' + version: 11.14.0 '@testcontainers/postgresql': - specifier: ^11.12.0 - version: 11.12.0 + specifier: 'catalog:' + version: 11.14.0 better-sqlite3: - specifier: ^12.6.2 - version: 12.6.2 + specifier: 'catalog:' + version: 12.9.0 dotenv: - specifier: ^17.3.1 - version: 17.3.1 + specifier: 'catalog:' + version: 17.4.2 drizzle-kit: - specifier: ^0.31.9 - version: 0.31.9 + specifier: 'catalog:' + version: 0.31.10 drizzle-orm: - specifier: ^0.45.1 - version: 0.45.1(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.18.0)(better-sqlite3@12.6.2)(gel@2.0.0)(mysql2@3.19.1(@types/node@24.12.0))(pg@8.20.0) + specifier: 'catalog:' + version: 0.45.2(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.9.0)(gel@2.0.0)(mysql2@3.22.2(@types/node@24.12.2))(pg@8.20.0) drizzle-zod: - specifier: ^0.8.3 - version: 0.8.3(drizzle-orm@0.45.1(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.18.0)(better-sqlite3@12.6.2)(gel@2.0.0)(mysql2@3.19.1(@types/node@24.12.0))(pg@8.20.0))(zod@4.2.1) + specifier: 'catalog:' + version: 0.8.3(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.9.0)(gel@2.0.0)(mysql2@3.22.2(@types/node@24.12.2))(pg@8.20.0))(zod@4.3.6) mysql2: - specifier: 3.19.1 - version: 3.19.1(@types/node@24.12.0) + specifier: 'catalog:' + version: 3.22.2(@types/node@24.12.2) pg: - specifier: ^8.20.0 + specifier: 'catalog:' version: 8.20.0 superjson: - specifier: 2.2.6 + specifier: 'catalog:' version: 2.2.6 devDependencies: '@homarr/eslint-config': @@ -1190,28 +1748,28 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript '@types/better-sqlite3': - specifier: 7.6.13 + specifier: 'catalog:' version: 7.6.13 '@types/pg': - specifier: ^8.18.0 - version: 8.18.0 + specifier: 'catalog:' + version: 8.20.0 dotenv-cli: - specifier: ^11.0.0 + specifier: 'catalog:' version: 11.0.0 esbuild: - specifier: ^0.27.3 - version: 0.27.3 + specifier: 'catalog:' + version: 0.28.0 eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 prettier: - specifier: ^3.8.1 - version: 3.8.1 + specifier: 'catalog:' + version: 3.8.3 tsx: - specifier: 4.20.4 + specifier: 'catalog:' version: 4.20.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/definitions: @@ -1220,11 +1778,11 @@ importers: specifier: workspace:^0.1.0 version: link:../common fast-xml-parser: - specifier: ^5.4.2 - version: 5.4.2 + specifier: 'catalog:' + version: 5.7.2 zod: - specifier: ^4.2.1 - version: 4.2.1 + specifier: 'catalog:' + version: 4.3.6 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -1236,13 +1794,13 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 tsx: - specifier: 4.20.4 + specifier: 'catalog:' version: 4.20.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/docker: @@ -1254,8 +1812,8 @@ importers: specifier: workspace:^0.1.0 version: link:../core dockerode: - specifier: ^4.0.9 - version: 4.0.9 + specifier: 'catalog:' + version: 5.0.0 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -1267,13 +1825,13 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript '@types/dockerode': - specifier: ^4.0.1 + specifier: 'catalog:' version: 4.0.1 eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/form: @@ -1288,14 +1846,14 @@ importers: specifier: workspace:^0.1.0 version: link:../validation '@mantine/form': - specifier: ^8.3.16 - version: 8.3.16(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(react@19.2.5) mantine-form-zod-resolver: - specifier: ^1.3.0 - version: 1.3.0(@mantine/form@8.3.16(react@19.2.4))(zod@4.2.1) + specifier: 'catalog:' + version: 1.3.0(@mantine/form@8.3.18(react@19.2.5))(zod@4.3.6) zod: - specifier: ^4.2.1 - version: 4.2.1 + specifier: 'catalog:' + version: 4.3.6 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -1307,10 +1865,10 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/forms-collection: @@ -1340,14 +1898,14 @@ importers: specifier: workspace:^0.1.0 version: link:../validation '@mantine/core': - specifier: ^8.3.16 - version: 8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) react: - specifier: 19.2.4 - version: 19.2.4 + specifier: 'catalog:' + version: 19.2.5 zod: - specifier: ^4.2.1 - version: 4.2.1 + specifier: 'catalog:' + version: 4.3.6 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -1359,10 +1917,10 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/icons: @@ -1387,10 +1945,10 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/image-proxy: @@ -1405,7 +1963,7 @@ importers: specifier: workspace:^0.1.0 version: link:../redis bcrypt: - specifier: ^6.0.0 + specifier: 'catalog:' version: 6.0.0 devDependencies: '@homarr/eslint-config': @@ -1418,28 +1976,28 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript '@types/bcrypt': - specifier: 6.0.0 + specifier: 'catalog:' version: 6.0.0 eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/integrations: dependencies: '@ctrl/deluge': - specifier: ^7.5.2 - version: 7.5.2 + specifier: 'catalog:' + version: 8.0.0 '@ctrl/qbittorrent': - specifier: ^9.11.2 + specifier: 'catalog:' version: 9.11.2 '@ctrl/transmission': - specifier: ^7.4.0 + specifier: 'catalog:' version: 7.4.0 '@gitbeaker/rest': - specifier: ^43.8.0 + specifier: 'catalog:' version: 43.8.0 '@homarr/common': specifier: workspace:^0.1.0 @@ -1457,8 +2015,8 @@ importers: specifier: workspace:^0.1.0 version: link:../image-proxy '@homarr/node-unifi': - specifier: ^2.6.0 - version: 2.6.0(undici@7.18.2) + specifier: 'catalog:' + version: 2.6.0(undici@7.24.6) '@homarr/redis': specifier: workspace:^0.1.0 version: link:../redis @@ -1469,41 +2027,41 @@ importers: specifier: workspace:^0.1.0 version: link:../validation '@immich/sdk': - specifier: ^2.5.6 - version: 2.5.6 + specifier: 'catalog:' + version: 2.7.5 '@jellyfin/sdk': - specifier: ^0.13.0 - version: 0.13.0(axios@1.12.2) + specifier: 'catalog:' + version: 0.13.0(axios@1.15.0) '@octokit/auth-app': - specifier: ^8.2.0 + specifier: 'catalog:' version: 8.2.0 ical.js: - specifier: ^2.2.1 + specifier: 'catalog:' version: 2.2.1 maria2: - specifier: ^0.4.1 + specifier: 'catalog:' version: 0.4.1 - node-ical: - specifier: ^0.22.1 - version: 0.22.1 octokit: - specifier: ^5.0.5 + specifier: 'catalog:' version: 5.0.5 proxmox-api: - specifier: 1.1.1 + specifier: 'catalog:' version: 1.1.1 + timezones-ical-library: + specifier: 'catalog:' + version: 2.1.3 tsdav: - specifier: ^2.1.8 + specifier: 'catalog:' version: 2.1.8 undici: - specifier: 7.18.2 - version: 7.18.2 + specifier: 'catalog:' + version: 7.24.6 xml2js: - specifier: ^0.6.2 + specifier: 'catalog:' version: 0.6.2 zod: - specifier: ^4.2.1 - version: 4.2.1 + specifier: 'catalog:' + version: 4.3.6 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -1515,16 +2073,16 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript '@types/node-unifi': - specifier: ^2.5.1 + specifier: 'catalog:' version: 2.5.1(patch_hash=5e6ae51e2a17a7f9729bfa30b0eb3d0842a5810ac6db47603ab4a6efa1ed84c5) '@types/xml2js': - specifier: ^0.4.14 + specifier: 'catalog:' version: 0.4.14 eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/modals: @@ -1536,14 +2094,14 @@ importers: specifier: workspace:^0.1.0 version: link:../ui '@mantine/core': - specifier: ^8.3.16 - version: 8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@mantine/hooks': - specifier: ^8.3.16 - version: 8.3.16(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(react@19.2.5) react: - specifier: 19.2.4 - version: 19.2.4 + specifier: 'catalog:' + version: 19.2.5 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -1555,10 +2113,10 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/modals-collection: @@ -1597,26 +2155,26 @@ importers: specifier: workspace:^0.1.0 version: link:../validation '@mantine/core': - specifier: ^8.3.16 - version: 8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tabler/icons-react': - specifier: ^3.40.0 - version: 3.40.0(react@19.2.4) + specifier: 'catalog:' + version: 3.41.1(react@19.2.5) dayjs: - specifier: ^1.11.19 - version: 1.11.19 + specifier: 'catalog:' + version: 1.11.20 next: - specifier: 16.1.6 - version: 16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) + specifier: 'catalog:' + version: 16.2.4(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) react: - specifier: 19.2.4 - version: 19.2.4 + specifier: 'catalog:' + version: 19.2.5 react-dom: - specifier: 19.2.4 - version: 19.2.4(react@19.2.4) + specifier: 'catalog:' + version: 19.2.5(react@19.2.5) zod: - specifier: ^4.2.1 - version: 4.2.1 + specifier: 'catalog:' + version: 4.3.6 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -1628,10 +2186,10 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/notifications: @@ -1640,11 +2198,11 @@ importers: specifier: workspace:^0.1.0 version: link:../ui '@mantine/notifications': - specifier: ^8.3.16 - version: 8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tabler/icons-react': - specifier: ^3.40.0 - version: 3.40.0(react@19.2.4) + specifier: 'catalog:' + version: 3.41.1(react@19.2.5) devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -1656,10 +2214,10 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/old-import: @@ -1698,32 +2256,32 @@ importers: specifier: workspace:^0.1.0 version: link:../validation '@mantine/core': - specifier: ^8.3.16 - version: 8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@mantine/hooks': - specifier: ^8.3.16 - version: 8.3.16(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(react@19.2.5) adm-zip: - specifier: 0.5.16 - version: 0.5.16 + specifier: 'catalog:' + version: 0.5.17 next: - specifier: 16.1.6 - version: 16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) + specifier: 'catalog:' + version: 16.2.4(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) react: - specifier: 19.2.4 - version: 19.2.4 + specifier: 'catalog:' + version: 19.2.5 react-dom: - specifier: 19.2.4 - version: 19.2.4(react@19.2.4) + specifier: 'catalog:' + version: 19.2.5(react@19.2.5) superjson: - specifier: 2.2.6 + specifier: 'catalog:' version: 2.2.6 zod: - specifier: ^4.2.1 - version: 4.2.1 + specifier: 'catalog:' + version: 4.3.6 zod-form-data: - specifier: ^3.0.1 - version: 3.0.1(zod@4.2.1) + specifier: 'catalog:' + version: 3.0.1(zod@4.3.6) devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -1735,13 +2293,13 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript '@types/adm-zip': - specifier: 0.5.7 - version: 0.5.7 + specifier: 'catalog:' + version: 0.5.8 eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/old-schema: @@ -1750,8 +2308,8 @@ importers: specifier: workspace:^0.1.0 version: link:../common zod: - specifier: ^4.2.1 - version: 4.2.1 + specifier: 'catalog:' + version: 4.3.6 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -1763,10 +2321,10 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/ping: @@ -1788,10 +2346,10 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/redis: @@ -1809,10 +2367,10 @@ importers: specifier: workspace:^ version: link:../definitions ioredis: - specifier: 5.10.0 - version: 5.10.0 + specifier: 'catalog:' + version: 5.10.1 superjson: - specifier: 2.2.6 + specifier: 'catalog:' version: 2.2.6 devDependencies: '@homarr/eslint-config': @@ -1825,16 +2383,16 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/request-handler: dependencies: '@extractus/feed-extractor': - specifier: 7.1.7 + specifier: 'catalog:' version: 7.1.7 '@homarr/common': specifier: workspace:^0.1.0 @@ -1858,20 +2416,20 @@ importers: specifier: workspace:^0.1.0 version: link:../redis dayjs: - specifier: ^1.11.19 - version: 1.11.19 + specifier: 'catalog:' + version: 1.11.20 octokit: - specifier: ^5.0.5 + specifier: 'catalog:' version: 5.0.5 superjson: - specifier: 2.2.6 + specifier: 'catalog:' version: 2.2.6 undici: - specifier: 7.18.2 - version: 7.18.2 + specifier: 'catalog:' + version: 7.24.6 zod: - specifier: ^4.2.1 - version: 4.2.1 + specifier: 'catalog:' + version: 4.3.6 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -1883,10 +2441,10 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/server-settings: @@ -1908,10 +2466,10 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/settings: @@ -1923,17 +2481,17 @@ importers: specifier: workspace:^0.1.0 version: link:../server-settings '@mantine/dates': - specifier: ^8.3.16 - version: 8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(dayjs@1.11.19)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(dayjs@1.11.20)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) next: - specifier: 16.1.6 - version: 16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) + specifier: 'catalog:' + version: 16.2.4(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) react: - specifier: 19.2.4 - version: 19.2.4 + specifier: 'catalog:' + version: 19.2.5 react-dom: - specifier: 19.2.4 - version: 19.2.4(react@19.2.4) + specifier: 'catalog:' + version: 19.2.5(react@19.2.5) devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -1945,10 +2503,10 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/spotlight: @@ -1984,32 +2542,32 @@ importers: specifier: workspace:^0.1.0 version: link:../ui '@mantine/core': - specifier: ^8.3.16 - version: 8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@mantine/hooks': - specifier: ^8.3.16 - version: 8.3.16(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(react@19.2.5) '@mantine/spotlight': - specifier: ^8.3.16 - version: 8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tabler/icons-react': - specifier: ^3.40.0 - version: 3.40.0(react@19.2.4) + specifier: 'catalog:' + version: 3.41.1(react@19.2.5) jotai: - specifier: ^2.18.1 - version: 2.18.1(@babel/core@7.29.0)(@babel/template@7.28.6)(@types/react@19.2.14)(react@19.2.4) + specifier: 'catalog:' + version: 2.19.1(@babel/core@7.29.0)(@babel/template@7.28.6)(@types/react@19.2.14)(react@19.2.5) next: - specifier: 16.1.6 - version: 16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) + specifier: 'catalog:' + version: 16.2.4(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) react: - specifier: 19.2.4 - version: 19.2.4 + specifier: 'catalog:' + version: 19.2.5 react-dom: - specifier: 19.2.4 - version: 19.2.4(react@19.2.4) + specifier: 'catalog:' + version: 19.2.5(react@19.2.5) use-deep-compare-effect: - specifier: ^1.8.1 - version: 1.8.1(react@19.2.4) + specifier: 'catalog:' + version: 1.8.1(react@19.2.5) devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -2021,10 +2579,10 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/translation: @@ -2036,26 +2594,26 @@ importers: specifier: workspace:^0.1.0 version: link:../definitions dayjs: - specifier: ^1.11.19 - version: 1.11.19 + specifier: 'catalog:' + version: 1.11.20 deepmerge: - specifier: 4.3.1 + specifier: 'catalog:' version: 4.3.1 mantine-react-table: - specifier: 2.0.0-beta.9 - version: 2.0.0-beta.9(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/dates@8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(dayjs@1.11.19)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(@tabler/icons-react@3.40.0(react@19.2.4))(clsx@2.1.1)(dayjs@1.11.19)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 2.0.0-beta.9(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/dates@8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(dayjs@1.11.20)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(@tabler/icons-react@3.41.1(react@19.2.5))(clsx@2.1.1)(dayjs@1.11.20)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) next: - specifier: 16.1.6 - version: 16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) + specifier: 'catalog:' + version: 16.2.4(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) next-intl: - specifier: 4.8.3 - version: 4.8.3(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react@19.2.4)(typescript@5.9.3) + specifier: 'catalog:' + version: 4.9.1(next@16.2.4(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0))(react@19.2.5)(typescript@5.9.3) react: - specifier: 19.2.4 - version: 19.2.4 + specifier: 'catalog:' + version: 19.2.5 react-dom: - specifier: 19.2.4 - version: 19.2.4(react@19.2.4) + specifier: 'catalog:' + version: 19.2.5(react@19.2.5) devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -2067,10 +2625,10 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/ui: @@ -2091,34 +2649,34 @@ importers: specifier: workspace:^0.1.0 version: link:../validation '@mantine/core': - specifier: ^8.3.16 - version: 8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@mantine/dates': - specifier: ^8.3.16 - version: 8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(dayjs@1.11.19)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(dayjs@1.11.20)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@mantine/hooks': - specifier: ^8.3.16 - version: 8.3.16(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(react@19.2.5) '@tabler/icons-react': - specifier: ^3.40.0 - version: 3.40.0(react@19.2.4) + specifier: 'catalog:' + version: 3.41.1(react@19.2.5) crypto-js: - specifier: ^4.2.0 + specifier: 'catalog:' version: 4.2.0 mantine-react-table: - specifier: 2.0.0-beta.9 - version: 2.0.0-beta.9(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/dates@8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(dayjs@1.11.19)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(@tabler/icons-react@3.40.0(react@19.2.4))(clsx@2.1.1)(dayjs@1.11.19)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 2.0.0-beta.9(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/dates@8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(dayjs@1.11.20)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(@tabler/icons-react@3.41.1(react@19.2.5))(clsx@2.1.1)(dayjs@1.11.20)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) next: - specifier: 16.1.6 - version: 16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) + specifier: 'catalog:' + version: 16.2.4(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) react: - specifier: 19.2.4 - version: 19.2.4 + specifier: 'catalog:' + version: 19.2.5 react-dom: - specifier: 19.2.4 - version: 19.2.4(react@19.2.4) + specifier: 'catalog:' + version: 19.2.5(react@19.2.5) svgson: - specifier: ^5.3.1 + specifier: 'catalog:' version: 5.3.1 devDependencies: '@homarr/eslint-config': @@ -2131,16 +2689,16 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript '@types/crypto-js': - specifier: ^4.2.2 + specifier: 'catalog:' version: 4.2.2 '@types/css-modules': - specifier: ^1.0.5 + specifier: 'catalog:' version: 1.0.5 eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/validation: @@ -2152,11 +2710,11 @@ importers: specifier: workspace:^0.1.0 version: link:../translation zod: - specifier: ^4.2.1 - version: 4.2.1 + specifier: 'catalog:' + version: 4.3.6 zod-form-data: - specifier: ^3.0.1 - version: 3.0.1(zod@4.2.1) + specifier: 'catalog:' + version: 3.0.1(zod@4.3.6) devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -2168,20 +2726,20 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 packages/widgets: dependencies: '@dnd-kit/core': - specifier: ^6.3.1 - version: 6.3.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 6.3.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@dnd-kit/sortable': - specifier: ^10.0.0 - version: 10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5) '@homarr/api': specifier: workspace:^0.1.0 version: link:../api @@ -2246,98 +2804,101 @@ importers: specifier: workspace:^0.1.0 version: link:../validation '@mantine/charts': - specifier: ^8.3.16 - version: 8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(recharts@2.15.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) + specifier: 'catalog:' + version: 8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(recharts@2.15.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5)) '@mantine/core': - specifier: ^8.3.16 - version: 8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@mantine/hooks': - specifier: ^8.3.16 - version: 8.3.16(react@19.2.4) + specifier: 'catalog:' + version: 8.3.18(react@19.2.5) '@tabler/icons-react': - specifier: ^3.40.0 - version: 3.40.0(react@19.2.4) + specifier: 'catalog:' + version: 3.41.1(react@19.2.5) '@tiptap/extension-color': - specifier: 3.20.1 - version: 3.20.1(@tiptap/extension-text-style@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))) + specifier: 'catalog:' + version: 3.22.4(@tiptap/extension-text-style@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))) '@tiptap/extension-highlight': - specifier: 3.20.1 - version: 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1)) + specifier: 'catalog:' + version: 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4)) '@tiptap/extension-image': - specifier: 3.20.1 - version: 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1)) + specifier: 'catalog:' + version: 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4)) '@tiptap/extension-link': - specifier: ^3.20.1 - version: 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) + specifier: 'catalog:' + version: 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) '@tiptap/extension-placeholder': - specifier: ^3.20.1 - version: 3.20.1(@tiptap/extensions@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)) + specifier: 'catalog:' + version: 3.22.4(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)) '@tiptap/extension-table': - specifier: 3.20.1 - version: 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) + specifier: 'catalog:' + version: 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) '@tiptap/extension-table-cell': - specifier: 3.20.1 - version: 3.20.1(@tiptap/extension-table@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)) + specifier: 'catalog:' + version: 3.22.4(@tiptap/extension-table@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)) '@tiptap/extension-table-header': - specifier: 3.20.1 - version: 3.20.1(@tiptap/extension-table@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)) + specifier: 'catalog:' + version: 3.22.4(@tiptap/extension-table@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)) '@tiptap/extension-table-row': - specifier: 3.20.1 - version: 3.20.1(@tiptap/extension-table@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)) + specifier: 'catalog:' + version: 3.22.4(@tiptap/extension-table@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)) '@tiptap/extension-task-item': - specifier: 3.20.1 - version: 3.20.1(@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)) + specifier: 'catalog:' + version: 3.22.4(@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)) '@tiptap/extension-task-list': - specifier: 3.20.1 - version: 3.20.1(@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)) + specifier: 'catalog:' + version: 3.22.4(@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)) '@tiptap/extension-text-align': - specifier: 3.20.1 - version: 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1)) + specifier: 'catalog:' + version: 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4)) '@tiptap/extension-text-style': - specifier: 3.20.1 - version: 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1)) + specifier: 'catalog:' + version: 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4)) '@tiptap/extension-underline': - specifier: 3.20.1 - version: 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1)) + specifier: 'catalog:' + version: 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4)) '@tiptap/react': - specifier: ^3.20.1 - version: 3.20.1(@floating-ui/dom@1.7.4)(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 3.22.4(@floating-ui/dom@1.7.4)(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tiptap/starter-kit': - specifier: ^3.20.1 - version: 3.20.1 + specifier: 'catalog:' + version: 3.22.4 clsx: - specifier: ^2.1.1 + specifier: 'catalog:' version: 2.1.1 dayjs: - specifier: ^1.11.19 - version: 1.11.19 + specifier: 'catalog:' + version: 1.11.20 mantine-form-zod-resolver: - specifier: ^1.3.0 - version: 1.3.0(@mantine/form@8.3.16(react@19.2.4))(zod@4.2.1) + specifier: 'catalog:' + version: 1.3.0(@mantine/form@8.3.18(react@19.2.5))(zod@4.3.6) mantine-react-table: - specifier: 2.0.0-beta.9 - version: 2.0.0-beta.9(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/dates@8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(dayjs@1.11.19)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(@tabler/icons-react@3.40.0(react@19.2.4))(clsx@2.1.1)(dayjs@1.11.19)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 2.0.0-beta.9(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/dates@8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(dayjs@1.11.20)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(@tabler/icons-react@3.41.1(react@19.2.5))(clsx@2.1.1)(dayjs@1.11.20)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) next: - specifier: 16.1.6 - version: 16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) + specifier: 'catalog:' + version: 16.2.4(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) react: - specifier: 19.2.4 - version: 19.2.4 + specifier: 'catalog:' + version: 19.2.5 react-dom: - specifier: 19.2.4 - version: 19.2.4(react@19.2.4) + specifier: 'catalog:' + version: 19.2.5(react@19.2.5) react-markdown: - specifier: ^10.1.0 - version: 10.1.0(@types/react@19.2.14)(react@19.2.4) + specifier: 'catalog:' + version: 10.1.0(@types/react@19.2.14)(react@19.2.5) + react-quill-new: + specifier: 'catalog:' + version: 3.8.3(quill-delta@5.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) recharts: - specifier: ^2.15.4 - version: 2.15.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 'catalog:' + version: 2.15.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5) video.js: - specifier: ^8.23.7 + specifier: 'catalog:' version: 8.23.7 zod: - specifier: ^4.2.1 - version: 4.2.1 + specifier: 'catalog:' + version: 4.3.6 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -2349,41 +2910,41 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript '@types/video.js': - specifier: ^7.3.58 + specifier: 'catalog:' version: 7.3.58 eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 tooling/eslint: dependencies: '@next/eslint-plugin-next': - specifier: 16.1.6 - version: 16.1.6 + specifier: 'catalog:' + version: 16.2.4 eslint-config-prettier: - specifier: ^10.1.8 + specifier: 'catalog:' version: 10.1.8(eslint@9.39.4) eslint-config-turbo: - specifier: ^2.8.15 - version: 2.8.16(eslint@9.39.4)(turbo@2.8.16) + specifier: 'catalog:' + version: 2.9.6(eslint@9.39.4)(turbo@2.9.6) eslint-plugin-import: - specifier: ^2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.57.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4) + specifier: 'catalog:' + version: 2.32.0(@typescript-eslint/parser@8.58.2(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4) eslint-plugin-jsx-a11y: - specifier: ^6.10.2 + specifier: 'catalog:' version: 6.10.2(eslint@9.39.4) eslint-plugin-react: - specifier: ^7.37.5 + specifier: 'catalog:' version: 7.37.5(eslint@9.39.4) eslint-plugin-react-hooks: - specifier: ^6.1.1 + specifier: 'catalog:' version: 6.1.1(eslint@9.39.4) typescript-eslint: - specifier: ^8.57.0 - version: 8.57.0(eslint@9.39.4)(typescript@5.9.3) + specifier: 'catalog:' + version: 8.58.2(eslint@9.39.4)(typescript@5.9.3) devDependencies: '@homarr/prettier-config': specifier: workspace:^0.1.0 @@ -2392,10 +2953,10 @@ importers: specifier: workspace:^0.1.0 version: link:../typescript eslint: - specifier: ^9.39.4 + specifier: 'catalog:' version: 9.39.4 typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 tooling/github: {} @@ -2403,29 +2964,26 @@ importers: tooling/prettier: dependencies: '@ianvs/prettier-plugin-sort-imports': - specifier: ^4.7.1 - version: 4.7.1(prettier@3.8.1) + specifier: 'catalog:' + version: 4.7.1(prettier@3.8.3) prettier: - specifier: ^3.8.1 - version: 3.8.1 + specifier: 'catalog:' + version: 3.8.3 devDependencies: '@homarr/tsconfig': specifier: workspace:^0.1.0 version: link:../typescript prettier-plugin-packagejson: - specifier: ^3.0.2 - version: 3.0.2(prettier@3.8.1) + specifier: 'catalog:' + version: 3.0.2(prettier@3.8.3) typescript: - specifier: ^5.9.3 + specifier: 'catalog:' version: 5.9.3 tooling/typescript: {} packages: - '@acemir/cssom@0.9.31': - resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==} - '@actions/core@3.0.0': resolution: {integrity: sha512-zYt6cz+ivnTmiT/ksRVriMBOiuoUpDCJJlZ5KPl2/FRdvwU3f7MPh9qftvbkXJThragzUZieit2nyHUyw53Seg==} @@ -2452,31 +3010,19 @@ packages: '@ark/util@0.46.0': resolution: {integrity: sha512-JPy/NGWn/lvf1WmGCPw2VGpBg5utZraE84I7wli18EDF3p3zc/e9WolT35tINeZO3l7C77SjqRJeAUoT0CvMRg==} - '@asamuzakjp/css-color@4.1.2': - resolution: {integrity: sha512-NfBUvBaYgKIuq6E/RBLY1m0IohzNHAYyaJGuTK79Z23uNwmz2jl1mPsC5ZxCCxylinKhT1Amn5oNTlx1wN8cQg==} + '@asamuzakjp/css-color@5.1.8': + resolution: {integrity: sha512-OISPR9c2uPo23rUdvfEQiLPjoMLOpEeLNnP5iGkxr6tDDxJd3NjD+6fxY0mdaMbIPUjFGL4HFOJqLvow5q4aqQ==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - '@asamuzakjp/dom-selector@6.8.1': - resolution: {integrity: sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==} + '@asamuzakjp/dom-selector@7.0.8': + resolution: {integrity: sha512-erMO6FgtM02dC24NGm0xufMzWz5OF0wXKR7BpvGD973bq/GbmR8/DbxNZbj0YevQ5hlToJaWSVK/G9/NDgGEVw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} '@asamuzakjp/nwsapi@2.3.9': resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} - '@auth/core@0.41.0': - resolution: {integrity: sha512-Wd7mHPQ/8zy6Qj7f4T46vg3aoor8fskJm6g2Zyj064oQ3+p0xNZXAV60ww0hY+MbTesfu29kK14Zk5d5JTazXQ==} - peerDependencies: - '@simplewebauthn/browser': ^9.0.1 - '@simplewebauthn/server': ^9.0.2 - nodemailer: ^6.8.0 - peerDependenciesMeta: - '@simplewebauthn/browser': - optional: true - '@simplewebauthn/server': - optional: true - nodemailer: - optional: true - - '@auth/core@0.41.1': - resolution: {integrity: sha512-t9cJ2zNYAdWMacGRMT6+r4xr1uybIdmYa49calBPeTqwgAFPV/88ac9TEvCR85pvATiSPt8VaNf+Gt24JIT/uw==} + '@auth/core@0.41.2': + resolution: {integrity: sha512-Hx5MNBxN2fJTbJKGUKAA0wca43D0Akl3TvufY54Gn8lop7F+34vU1zA1pn0vQfIoVuLIrpfc2nkyjwIaPJMW7w==} peerDependencies: '@simplewebauthn/browser': ^9.0.1 '@simplewebauthn/server': ^9.0.2 @@ -2489,33 +3035,17 @@ packages: nodemailer: optional: true - '@auth/drizzle-adapter@1.11.1': - resolution: {integrity: sha512-cQTvDZqsyF7RPhDm/B6SvqdVP9EzQhy3oM4Muu7fjjmSYFLbSR203E6dH631ZHSKDn2b4WZkfMnjPDzRsPSAeA==} + '@auth/drizzle-adapter@1.11.2': + resolution: {integrity: sha512-VOuj7REI8jfJjpSbsYwDM/Zrn55T6lS9Yc+29V+EXMcel8eqG7x+7LodNfd1WHjakfkLYi+qsbYUHB3E6aDA4w==} '@axiomhq/js@1.0.0-rc.3': resolution: {integrity: sha512-Zm10TczcMLounWqC42nMkXQ7XKLqjzLrd5ia022oBKDUZqAFVg2y9d1quQVNV4FlXyg9MKDdfMjpKQRmzEGaog==} engines: {node: '>=16'} - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} - engines: {node: '>=6.9.0'} - - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} - engines: {node: '>=6.9.0'} - '@babel/code-frame@7.29.0': resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.2': - resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.27.5': - resolution: {integrity: sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==} - engines: {node: '>=6.9.0'} - '@babel/compat-data@7.29.0': resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} engines: {node: '>=6.9.0'} @@ -2524,10 +3054,6 @@ packages: resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.4': - resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} - engines: {node: '>=6.9.0'} - '@babel/core@7.29.0': resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} engines: {node: '>=6.9.0'} @@ -2536,14 +3062,6 @@ packages: resolution: {integrity: sha512-vSH118/wwM/pLR38g/Sgk05sNtro6TlTJKuiMXDaZqPUfjTFcudpCOt00IhOfj+1BFAX+UFAlzCU+6WXr3GLFQ==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.25.9': - resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.27.2': - resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.28.6': resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} engines: {node: '>=6.9.0'} @@ -2552,30 +3070,10 @@ packages: resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.25.9': - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.27.1': - resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} - engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.28.6': resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-module-transforms@7.28.3': - resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-module-transforms@7.28.6': resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} engines: {node: '>=6.9.0'} @@ -2586,49 +3084,24 @@ packages: resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.25.9': - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.27.1': resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.4': - resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} + '@babel/helpers@7.29.2': + resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.6': - resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.28.4': - resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/parser@7.29.0': - resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} engines: {node: '>=6.0.0'} hasBin: true @@ -2648,16 +3121,8 @@ packages: resolution: {integrity: sha512-909rVuj3phpjW6y0MCXAZ5iNeORePa6ldJvp2baWGcTjwqbBDDz6xoS5JHJ7lS88NlwLYj07ImL/8IUMtDZzTA==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.28.6': - resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.25.9': - resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.27.2': - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} engines: {node: '>=6.9.0'} '@babel/template@7.28.6': @@ -2672,10 +3137,6 @@ packages: resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.4': - resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} - engines: {node: '>=6.9.0'} - '@babel/types@7.29.0': resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} @@ -2710,19 +3171,19 @@ packages: resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} engines: {node: '>=0.1.90'} - '@csstools/color-helpers@6.0.1': - resolution: {integrity: sha512-NmXRccUJMk2AWA5A7e5a//3bCIMyOu2hAtdRYrhPPHjDxINuCwX1w6rnIZ4xjLcp0ayv6h8Pc3X0eJUGiAAXHQ==} + '@csstools/color-helpers@6.0.2': + resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} engines: {node: '>=20.19.0'} - '@csstools/css-calc@3.0.0': - resolution: {integrity: sha512-q4d82GTl8BIlh/dTnVsWmxnbWJeb3kiU8eUH71UxlxnS+WIaALmtzTL8gR15PkYOexMQYVk0CO4qIG93C1IvPA==} + '@csstools/css-calc@3.1.1': + resolution: {integrity: sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-parser-algorithms': ^4.0.0 '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-color-parser@4.0.1': - resolution: {integrity: sha512-vYwO15eRBEkeF6xjAno/KQ61HacNhfQuuU/eGwH67DplL0zD5ZixUa563phQvUelA07yDczIXdtmYojCphKJcw==} + '@csstools/css-color-parser@4.0.2': + resolution: {integrity: sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-parser-algorithms': ^4.0.0 @@ -2734,19 +3195,20 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.0.26': - resolution: {integrity: sha512-6boXK0KkzT5u5xOgF6TKB+CLq9SOpEGmkZw0g5n9/7yg85wab3UzSxB8TxhLJ31L4SGJ6BCFRw/iftTha1CJXA==} + '@csstools/css-syntax-patches-for-csstree@1.1.1': + resolution: {integrity: sha512-BvqN0AMWNAnLk9G8jnUT77D+mUbY/H2b3uDTvg2isJkHaOufUE2R3AOwxWo7VBQKT1lOdwdvorddo2B/lk64+w==} + peerDependencies: + css-tree: ^3.2.1 + peerDependenciesMeta: + css-tree: + optional: true '@csstools/css-tokenizer@4.0.0': resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} engines: {node: '>=20.19.0'} - '@ctrl/deluge@7.5.2': - resolution: {integrity: sha512-ceejra4uSIwtui4fNvqxRhX8965yNlIc7kSUWSuSjV3qWA3wIf5tu/cqAXr5dHATxBOdzy/5gte2PHlk7XoVQA==} - engines: {node: '>=18'} - - '@ctrl/magnet-link@4.0.2': - resolution: {integrity: sha512-wENP7LH4BmCjz+gXVq7Nzz20zMjY/huuG7aDk/yu/LhFdC84e/l8222rCIAo0lwhU451lFcJKLcOmtG6TNrBAQ==} + '@ctrl/deluge@8.0.0': + resolution: {integrity: sha512-KKDJpB9gLCwjNsJCbUS0bn9SHMzDILyHrqM2i2ieQjTlVaSjTUDB/cn2RSdSXwy4DLug40yalFRnxoAv1+Tj+Q==} engines: {node: '>=18'} '@ctrl/magnet-link@4.3.0': @@ -2757,12 +3219,6 @@ packages: resolution: {integrity: sha512-ZIayGA72R4rzXaCcEYrxBwOMYZ1iT0EABJPwjTkwaO3VYRBBltwHSAxNfMWaz4GVmqLA12/WCfx+IPXBN9Gtxg==} engines: {node: '>=18'} - '@ctrl/shared-torrent@6.3.0': - resolution: {integrity: sha512-rhgN/tXQFIh6ujFE5wXVj1hBftb2tLmAYt5CVfxncKtS38AlPAqyiwg2VOWrWpq/gL+eRlP0uWTyt5yEohxIzw==} - engines: {node: '>=18'} - peerDependencies: - ofetch: ^1.4.1 - '@ctrl/shared-torrent@6.5.1': resolution: {integrity: sha512-ZdItYUwzHOu+8s416oRIEwvqDUC3aON4Lv/Ev4H5KxEkbjfkQiaONS/7+jos2+yJWleiXlRdBsoIpZR5Cd1UHQ==} engines: {node: '>20'} @@ -2811,11 +3267,11 @@ packages: '@drizzle-team/brocli@0.10.2': resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} - '@drizzle-team/brocli@0.11.0': - resolution: {integrity: sha512-hD3pekGiPg0WPCCGAZmusBBJsDqGUR66Y452YgQsZOnkdQ7ViEPKuyP4huUGEZQefp8g34RRodXYmJ2TbCH+tg==} + '@drizzle-team/brocli@0.12.0': + resolution: {integrity: sha512-mlUE+rZ8CatQekLhnaiN91Iemdd+e2gFKooGlnRB3oPTL3VghLfX24dx7HrzMNeC1JrIB/0kpsfyty3f5HNfxQ==} - '@emnapi/runtime@1.6.0': - resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==} + '@emnapi/runtime@1.9.1': + resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} '@epic-web/invariant@1.0.0': resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==} @@ -2834,8 +3290,14 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.27.3': - resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} + '@esbuild/aix-ppc64@0.27.7': + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.28.0': + resolution: {integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -2846,8 +3308,14 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.27.3': - resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} + '@esbuild/android-arm64@0.27.7': + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.28.0': + resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -2858,8 +3326,14 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.27.3': - resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + '@esbuild/android-arm@0.27.7': + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.28.0': + resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -2870,8 +3344,14 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.27.3': - resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} + '@esbuild/android-x64@0.27.7': + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.28.0': + resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -2882,8 +3362,14 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.27.3': - resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} + '@esbuild/darwin-arm64@0.27.7': + resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.28.0': + resolution: {integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -2894,8 +3380,14 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.27.3': - resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} + '@esbuild/darwin-x64@0.27.7': + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.28.0': + resolution: {integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -2906,8 +3398,14 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.27.3': - resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + '@esbuild/freebsd-arm64@0.27.7': + resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.28.0': + resolution: {integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -2918,8 +3416,14 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.3': - resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} + '@esbuild/freebsd-x64@0.27.7': + resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.28.0': + resolution: {integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -2930,8 +3434,14 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.27.3': - resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} + '@esbuild/linux-arm64@0.27.7': + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.28.0': + resolution: {integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -2942,8 +3452,14 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.27.3': - resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + '@esbuild/linux-arm@0.27.7': + resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.28.0': + resolution: {integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -2954,8 +3470,14 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.27.3': - resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + '@esbuild/linux-ia32@0.27.7': + resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.28.0': + resolution: {integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -2966,8 +3488,14 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.27.3': - resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} + '@esbuild/linux-loong64@0.27.7': + resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.28.0': + resolution: {integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -2978,8 +3506,14 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.27.3': - resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + '@esbuild/linux-mips64el@0.27.7': + resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.28.0': + resolution: {integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -2990,8 +3524,14 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.27.3': - resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + '@esbuild/linux-ppc64@0.27.7': + resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.28.0': + resolution: {integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -3002,8 +3542,14 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.27.3': - resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + '@esbuild/linux-riscv64@0.27.7': + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.28.0': + resolution: {integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -3014,8 +3560,14 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.27.3': - resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} + '@esbuild/linux-s390x@0.27.7': + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.28.0': + resolution: {integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -3026,8 +3578,14 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.27.3': - resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + '@esbuild/linux-x64@0.27.7': + resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.28.0': + resolution: {integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -3038,8 +3596,14 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.27.3': - resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} + '@esbuild/netbsd-arm64@0.27.7': + resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-arm64@0.28.0': + resolution: {integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -3050,8 +3614,14 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.3': - resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + '@esbuild/netbsd-x64@0.27.7': + resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.28.0': + resolution: {integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -3062,8 +3632,14 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.27.3': - resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} + '@esbuild/openbsd-arm64@0.27.7': + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-arm64@0.28.0': + resolution: {integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -3074,8 +3650,14 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.3': - resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} + '@esbuild/openbsd-x64@0.27.7': + resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.28.0': + resolution: {integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -3086,8 +3668,14 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/openharmony-arm64@0.27.3': - resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + '@esbuild/openharmony-arm64@0.27.7': + resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/openharmony-arm64@0.28.0': + resolution: {integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -3098,8 +3686,14 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.27.3': - resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} + '@esbuild/sunos-x64@0.27.7': + resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.28.0': + resolution: {integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -3110,8 +3704,14 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.27.3': - resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} + '@esbuild/win32-arm64@0.27.7': + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.28.0': + resolution: {integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -3122,8 +3722,14 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.27.3': - resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + '@esbuild/win32-ia32@0.27.7': + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.28.0': + resolution: {integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -3134,8 +3740,14 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.27.3': - resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + '@esbuild/win32-x64@0.27.7': + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.28.0': + resolution: {integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -3178,8 +3790,8 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@exodus/bytes@1.11.0': - resolution: {integrity: sha512-wO3vd8nsEHdumsXrjGO/v4p6irbg7hy9kvIeR6i2AwylZSk4HJdWgL0FNaVquW1+AweJcdvU1IEpuIWk/WaPnA==} + '@exodus/bytes@1.15.0': + resolution: {integrity: sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: '@noble/hashes': ^1.8.0 || ^2.0.0 @@ -3283,7 +3895,7 @@ packages: resolution: {integrity: sha512-kz323qIQkNQElEGroo/E9MKPDuIR5pkuk/XEWd50K+cSEKdmdiYx0PKWUdaNY2ecJYngtF+njDMsMKplL6zfEg==} engines: {node: '>=18.14.1'} peerDependencies: - hono: '>=4.12.7' + hono: '>=4.12.15' '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} @@ -3327,144 +3939,157 @@ packages: resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} engines: {node: '>=18'} - '@img/sharp-darwin-arm64@0.34.4': - resolution: {integrity: sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==} + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.34.4': - resolution: {integrity: sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==} + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.2.3': - resolution: {integrity: sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==} + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.2.3': - resolution: {integrity: sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==} + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.2.3': - resolution: {integrity: sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==} + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-arm@1.2.3': - resolution: {integrity: sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==} + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-ppc64@1.2.3': - resolution: {integrity: sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==} + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-s390x@1.2.3': - resolution: {integrity: sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==} + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-x64@1.2.3': - resolution: {integrity: sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==} + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linuxmusl-arm64@1.2.3': - resolution: {integrity: sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==} + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] libc: [musl] - '@img/sharp-libvips-linuxmusl-x64@1.2.3': - resolution: {integrity: sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==} + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] libc: [musl] - '@img/sharp-linux-arm64@0.34.4': - resolution: {integrity: sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==} + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] libc: [glibc] - '@img/sharp-linux-arm@0.34.4': - resolution: {integrity: sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==} + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] libc: [glibc] - '@img/sharp-linux-ppc64@0.34.4': - resolution: {integrity: sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==} + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@img/sharp-linux-s390x@0.34.4': - resolution: {integrity: sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==} + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] libc: [glibc] - '@img/sharp-linux-x64@0.34.4': - resolution: {integrity: sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==} + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] libc: [glibc] - '@img/sharp-linuxmusl-arm64@0.34.4': - resolution: {integrity: sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==} + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] libc: [musl] - '@img/sharp-linuxmusl-x64@0.34.4': - resolution: {integrity: sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==} + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] libc: [musl] - '@img/sharp-wasm32@0.34.4': - resolution: {integrity: sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==} + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-arm64@0.34.4': - resolution: {integrity: sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==} + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [win32] - '@img/sharp-win32-ia32@0.34.4': - resolution: {integrity: sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==} + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.34.4': - resolution: {integrity: sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==} + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] - '@immich/sdk@2.5.6': - resolution: {integrity: sha512-u6o0rNBsTbAkl/6vz3Z63A/yNkLYeuKiHKoJgLuvRqTpPahgxAFcfDeN8rLd0Ya1kM5I2c610/VDcvItzzVcWg==} + '@immich/sdk@2.7.5': + resolution: {integrity: sha512-gCTpFAWlFF+1Sx0jbqPVmwN+0JD+eZEHzhf3q+BbxuQF+ORpNqT0D453mOyonogvy17nJF1jGA2PtT6vOQiSnA==} '@inquirer/ansi@1.0.2': resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} @@ -3664,88 +4289,88 @@ packages: '@libsql/core@0.14.0': resolution: {integrity: sha512-nhbuXf7GP3PSZgdCY2Ecj8vz187ptHlZQ0VRc751oB2C1W8jQUXKKklvt7t1LJiUTQBVJuadF628eUk+3cRi4Q==} - '@mantine/charts@8.3.16': - resolution: {integrity: sha512-co/bnQ8/JwRypDnIYlPs9dybme6TGpw3Rf2T93ssegZcVrk37FFUExcQmIyVE9ga/WIST5M8OZWPyqaJtGozvQ==} + '@mantine/charts@8.3.18': + resolution: {integrity: sha512-oudif3EUH7Nb9DPm0abAPxpFYDWWjR3k2S5ll0/CcB+pJzlhwaBG19QwpOJaRA6VAvAXDDKOXCO4mi9XCEN78g==} peerDependencies: - '@mantine/core': 8.3.16 - '@mantine/hooks': 8.3.16 + '@mantine/core': 8.3.18 + '@mantine/hooks': 8.3.18 react: ^18.x || ^19.x react-dom: ^18.x || ^19.x recharts: '>=2.13.3' - '@mantine/colors-generator@8.3.16': - resolution: {integrity: sha512-nh5PA7H2IC0Mf5bVJ3FNx0HaNadj2NUx5NaMnXnVpbSKJ84VlszrqmN6+menjWmfWwSKsjjTlf/7W54wZopxgQ==} + '@mantine/colors-generator@8.3.18': + resolution: {integrity: sha512-u7gNAuVD/WPvB49uNszfkn7lQr85OXTI0Ijkbutcymhv0/utqlapQvZlQAYHwdrrWpQgqPNLsDBt3VSheVe9jw==} peerDependencies: chroma-js: '>=2.4.2' - '@mantine/core@8.3.16': - resolution: {integrity: sha512-YgmoYrb0I9UUDYfs9OVLvBUTgkA5vn5KZTfxlOaOSFxzhyYjrtwMQK+P7fvEIkenNQbbikhelj/IRcC2yNQyFQ==} + '@mantine/core@8.3.18': + resolution: {integrity: sha512-9tph1lTVogKPjTx02eUxDUOdXacPzK62UuSqb4TdGliI54/Xgxftq0Dfqu6XuhCxn9J5MDJaNiLDvL/1KRkYqA==} peerDependencies: - '@mantine/hooks': 8.3.16 + '@mantine/hooks': 8.3.18 react: ^18.x || ^19.x react-dom: ^18.x || ^19.x - '@mantine/dates@8.3.16': - resolution: {integrity: sha512-oZhOS4j5cMsyY3rZtkfCgKxu67Aptkav6Z7Tqa1hHpAdJ2XNse/Bl7hgqsdaTaUY8L5zpeTWaptBe1053Zgj8A==} + '@mantine/dates@8.3.18': + resolution: {integrity: sha512-FHx5teJOhupI0gO2o5evtVYQEdqOjayOkLRhEQfB5Nc5DvcysfPfmNILGkc1Nrp9ZQeQWKLT9qr+CkcCXwHOaw==} peerDependencies: - '@mantine/core': 8.3.16 - '@mantine/hooks': 8.3.16 + '@mantine/core': 8.3.18 + '@mantine/hooks': 8.3.18 dayjs: '>=1.0.0' react: ^18.x || ^19.x react-dom: ^18.x || ^19.x - '@mantine/dropzone@8.3.16': - resolution: {integrity: sha512-HFxt+DLlJKFpPPitfayiz+ZhtaXbiGgdmxBLmVe/ybEOXRS5St5xTlHQE6Iw67CGd4LuAv1CvDqyiQJw/fC9VQ==} + '@mantine/dropzone@8.3.18': + resolution: {integrity: sha512-GaYUUl/382R7hl1g6heTCZ5a6T5x6qYPg0oID6ik/J0j7e5+XMZyTH5ITpaqpsBQ09GKKsF5y3iNehpSby8Kew==} peerDependencies: - '@mantine/core': 8.3.16 - '@mantine/hooks': 8.3.16 + '@mantine/core': 8.3.18 + '@mantine/hooks': 8.3.18 react: ^18.x || ^19.x react-dom: ^18.x || ^19.x - '@mantine/form@8.3.16': - resolution: {integrity: sha512-yx7HXXdbS/Qmps7NmVGHtmnqembCcDg7W1ijxG6w4kQLntD//Co20B3DSrMXmQ3o14p779ayzTmHkMd+dP4QbA==} + '@mantine/form@8.3.18': + resolution: {integrity: sha512-r5OGLJWTkmIruFjRZRZy9oA7maNYlyt50jB4Pmd2X5360WOmJLd4KH8MFhHZQC7vN+z8/rmBl3t3XGAR2I8xig==} peerDependencies: react: ^18.x || ^19.x - '@mantine/hooks@8.3.16': - resolution: {integrity: sha512-DthR8/KDCLIip3KoXyn370HEiKxiOwH+ZeXs1UoSv/e58xR88OE85Slyb5b5pRsDa4ndYnES+j9wyRyrRXLWfg==} + '@mantine/hooks@8.3.18': + resolution: {integrity: sha512-QoWr9+S8gg5050TQ06aTSxtlpGjYOpIllRbjYYXlRvZeTsUqiTbVfvQROLexu4rEaK+yy9Wwriwl9PMRgbLqPw==} peerDependencies: react: ^18.x || ^19.x - '@mantine/modals@8.3.16': - resolution: {integrity: sha512-5wRlcoIdMtxOyHPjwa/ibPndv+PwotdaX6T0W9gqEST3vOSndGD6+FwKJj8kNomyeeDISiMMWBV5QQGwC7QvTA==} + '@mantine/modals@8.3.18': + resolution: {integrity: sha512-JfPDS4549L314SxFPC1x6CbKwzh82OdnIzwgMxPCVNsWLKV2vEHHUH/fzUYj4Wli6IBrsW4cufjMj9BTj3hm3Q==} peerDependencies: - '@mantine/core': 8.3.16 - '@mantine/hooks': 8.3.16 + '@mantine/core': 8.3.18 + '@mantine/hooks': 8.3.18 react: ^18.x || ^19.x react-dom: ^18.x || ^19.x - '@mantine/notifications@8.3.16': - resolution: {integrity: sha512-FqUgWYlBGwpwDAh4q5K6xO/cGQpU+jqdPpQOVy12881vZaJsCk4XWmDzL7BwY6cS15nxU26DBokixZSrUKPTng==} + '@mantine/notifications@8.3.18': + resolution: {integrity: sha512-IpQ0lmwbigTBbZCR6iSYWqIOKEx1tlcd7PcEJ5M5X1qeVSY/N3mmDQt1eJmObvcyDeL5cTJMbSA9UPqhRqo9jw==} peerDependencies: - '@mantine/core': 8.3.16 - '@mantine/hooks': 8.3.16 + '@mantine/core': 8.3.18 + '@mantine/hooks': 8.3.18 react: ^18.x || ^19.x react-dom: ^18.x || ^19.x - '@mantine/spotlight@8.3.16': - resolution: {integrity: sha512-kS384mqm8VjLkB19FEjsEgo3IHQOCfhzcek9o6mSA5Xlc2K9Piy2pQ81eV+RoTQIIAlIqmQRAbo6x7IEFYLh9A==} + '@mantine/spotlight@8.3.18': + resolution: {integrity: sha512-yFoEYG0wKduxbnv6+1CUOXc91lmQ5DN4QvEShYO2ftDm0kXhxeOvJFtGOBYK80tpmSCsaT253p9E3J3DcaOt2w==} peerDependencies: - '@mantine/core': 8.3.16 - '@mantine/hooks': 8.3.16 + '@mantine/core': 8.3.18 + '@mantine/hooks': 8.3.18 react: ^18.x || ^19.x react-dom: ^18.x || ^19.x - '@mantine/store@8.3.16': - resolution: {integrity: sha512-BLbAw5z3aAxO82LwICw6FEHq53dgn7CqKYYiwr+Gm2nHYlyvwg15q9ByfM44LiKY7R0YpDPHfCJcJP37MHHDSQ==} + '@mantine/store@8.3.18': + resolution: {integrity: sha512-i+QRTLmZzLldea0egtUVnGALd6UMIu8jd44nrNWBSNIXJU/8B6rMlC6gyX+l4szopZSuOaaNJIXkqRdC1gQsVg==} peerDependencies: react: ^18.x || ^19.x - '@mantine/tiptap@8.3.16': - resolution: {integrity: sha512-CA8LSAnBa+yXlhBrc6wL/Uh+VnO4Wg9taRorWG8MbzkksTy1iA8Yg+Tny33hgPJaqwHZivmjIGpDZmzKVtzTJg==} + '@mantine/tiptap@8.3.18': + resolution: {integrity: sha512-CrV5E0ELJmegyq+iF4g6PkEeC95wGY9QjWjb+JS1KE4UbxJONxRxGhpjQMp1t/Ir2aFVu9Gbf/fQ0qSnD6Lmqw==} peerDependencies: - '@mantine/core': 8.3.16 - '@mantine/hooks': 8.3.16 + '@mantine/core': 8.3.18 + '@mantine/hooks': 8.3.18 '@tiptap/extension-link': '>=2.1.12' '@tiptap/react': '>=2.1.12' react: ^18.x || ^19.x @@ -3753,69 +4378,71 @@ packages: '@million/install@1.0.14': resolution: {integrity: sha512-xZvj4AEHc5hyn8RCiLl9dYNqggj2fa0lgNvUkCiJyhRJPNE2hZrUa/Ka0Weu82VpBaO//zujG0YErk7osjNXPA==} + deprecated: This package is no longer maintained hasBin: true '@million/lint@1.0.14': resolution: {integrity: sha512-u6/kglVwZRu5+GMmtkNlGLqJVkgTl0TtM+hLa9rBg7pldx+5NG5bk45NvL37uZmAr2Xfa1C6qHb7GrFwfP372g==} + deprecated: This package is no longer maintained hasBin: true '@ndaidong/bellajs@12.0.1': resolution: {integrity: sha512-1iY42uiHz0cxNMbde7O3zVN+ZX1viOOUOBRt6ht6lkRZbSjwOnFV34Zv4URp3hGzEe6L9Byk7BOq/41H0PzAOQ==} - '@next/env@16.1.6': - resolution: {integrity: sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==} + '@next/env@16.2.4': + resolution: {integrity: sha512-dKkkOzOSwFYe5RX6y26fZgkSpVAlIOJKQHIiydQcrWH6y/97+RceSOAdjZ14Qa3zLduVUy0TXcn+EiM6t4rPgw==} - '@next/eslint-plugin-next@16.1.6': - resolution: {integrity: sha512-/Qq3PTagA6+nYVfryAtQ7/9FEr/6YVyvOtl6rZnGsbReGLf0jZU6gkpr1FuChAQpvV46a78p4cmHOVP8mbfSMQ==} + '@next/eslint-plugin-next@16.2.4': + resolution: {integrity: sha512-tOX826JJ96gYK/go18sPUgMq9FK1tqxBFfUCEufJb5XIkWFFmpgU7mahJANKGkHs7F41ir3tReJ3Lv5La0RvhA==} - '@next/swc-darwin-arm64@16.1.6': - resolution: {integrity: sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw==} + '@next/swc-darwin-arm64@16.2.4': + resolution: {integrity: sha512-OXTFFox5EKN1Ym08vfrz+OXxmCcEjT4SFMbNRsWZE99dMqt2Kcusl5MqPXcW232RYkMLQTy0hqgAMEsfEd/l2A==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@16.1.6': - resolution: {integrity: sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ==} + '@next/swc-darwin-x64@16.2.4': + resolution: {integrity: sha512-XhpVnUfmYWvD3YrXu55XdcAkQtOnvaI6wtQa8fuF5fGoKoxIUZ0kWPtcOfqJEWngFF/lOS9l3+O9CcownhiQxQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@16.1.6': - resolution: {integrity: sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw==} + '@next/swc-linux-arm64-gnu@16.2.4': + resolution: {integrity: sha512-Mx/tjlNA3G8kg14QvuGAJ4xBwPk1tUHq56JxZ8CXnZwz1Etz714soCEzGQQzVMz4bEnGPowzkV6Xrp6wAkEWOQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - '@next/swc-linux-arm64-musl@16.1.6': - resolution: {integrity: sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ==} + '@next/swc-linux-arm64-musl@16.2.4': + resolution: {integrity: sha512-iVMMp14514u7Nup2umQS03nT/bN9HurK8ufylC3FZNykrwjtx7V1A7+4kvhbDSCeonTVqV3Txnv0Lu+m2oDXNg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - '@next/swc-linux-x64-gnu@16.1.6': - resolution: {integrity: sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ==} + '@next/swc-linux-x64-gnu@16.2.4': + resolution: {integrity: sha512-EZOvm1aQWgnI/N/xcWOlnS3RQBk0VtVav5Zo7n4p0A7UKyTDx047k8opDbXgBpHl4CulRqRfbw3QrX2w5UOXMQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - '@next/swc-linux-x64-musl@16.1.6': - resolution: {integrity: sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg==} + '@next/swc-linux-x64-musl@16.2.4': + resolution: {integrity: sha512-h9FxsngCm9cTBf71AR4fGznDEDx1hS7+kSEiIRjq5kO1oXWm07DxVGZjCvk0SGx7TSjlUqhI8oOyz7NfwAdPoA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - '@next/swc-win32-arm64-msvc@16.1.6': - resolution: {integrity: sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw==} + '@next/swc-win32-arm64-msvc@16.2.4': + resolution: {integrity: sha512-3NdJV5OXMSOeJYijX+bjaLge3mJBlh4ybydbT4GFoB/2hAojWHtMhl3CYlYoMrjPuodp0nzFVi4Tj2+WaMg+Ow==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@16.1.6': - resolution: {integrity: sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A==} + '@next/swc-win32-x64-msvc@16.2.4': + resolution: {integrity: sha512-kMVGgsqhO5YTYODD9IPGGhA6iprWidQckK3LmPeW08PIFENRmgfb4MjXHO+p//d+ts2rpjvK5gXWzXSMrPl9cw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -3824,6 +4451,9 @@ packages: resolution: {integrity: sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==} engines: {node: '>= 20.19.0'} + '@nodable/entities@2.1.0': + resolution: {integrity: sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -3863,10 +4493,6 @@ packages: resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==} engines: {node: '>= 20'} - '@octokit/auth-unauthenticated@7.0.2': - resolution: {integrity: sha512-vjcPRP1xsKWdYKiyKmHkLFCxeH4QvVTv05VJlZxwNToslBFcHRJlsWRaoI2+2JGCf9tIM99x8cN0b1rlAHJiQw==} - engines: {node: '>= 20'} - '@octokit/auth-unauthenticated@7.0.3': resolution: {integrity: sha512-8Jb1mtUdmBHL7lGmop9mU9ArMRUTRhg8vp0T1VtZ4yd9vEm3zcLwmjQkhNEduKawOOORie61xhtYIhTDN+ZQ3g==} engines: {node: '>= 20'} @@ -3895,9 +4521,6 @@ packages: resolution: {integrity: sha512-HiNOO3MqLxlt5Da5bZbLV8Zarnphi4y9XehrbaFMkcoJ+FL7sMxH/UlUsCVxpddVu4qvNDrBdaTVE2o4ITK8ng==} engines: {node: '>= 20'} - '@octokit/openapi-types@26.0.0': - resolution: {integrity: sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA==} - '@octokit/openapi-types@27.0.0': resolution: {integrity: sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==} @@ -3942,9 +4565,6 @@ packages: resolution: {integrity: sha512-FO+UgZCUu+pPnZAR+iKdUt64kPE7QW7ciqpldaMXaNzixz5Jld8dJ31LAUewk0cfSRkNSRKyqG438ba9c/qDlQ==} engines: {node: '>= 20'} - '@octokit/types@15.0.1': - resolution: {integrity: sha512-sdiirM93IYJ9ODDCBgmRPIboLbSkpLa5i+WLuXH8b8Atg+YMLAyLvDDhNWLV4OYd08tlvYfVm/dw88cqHWtw1Q==} - '@octokit/types@16.0.0': resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} @@ -4099,9 +4719,6 @@ packages: '@protobufjs/utf8@1.1.0': resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - '@remirror/core-constants@3.0.0': - resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==} - '@rolldown/pluginutils@1.0.0-rc.3': resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} @@ -4109,125 +4726,152 @@ packages: resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: '>=4.59.0' + rollup: '>=4.60.2' peerDependenciesMeta: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.48.1': - resolution: {integrity: sha512-rGmb8qoG/zdmKoYELCBwu7vt+9HxZ7Koos3pD0+sH5fR3u3Wb/jGcpnqxcnWsPEKDUyzeLSqksN8LJtgXjqBYw==} + '@rollup/rollup-android-arm-eabi@4.60.0': + resolution: {integrity: sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.48.1': - resolution: {integrity: sha512-4e9WtTxrk3gu1DFE+imNJr4WsL13nWbD/Y6wQcyku5qadlKHY3OQ3LJ/INrrjngv2BJIHnIzbqMk1GTAC2P8yQ==} + '@rollup/rollup-android-arm64@4.60.0': + resolution: {integrity: sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.48.1': - resolution: {integrity: sha512-+XjmyChHfc4TSs6WUQGmVf7Hkg8ferMAE2aNYYWjiLzAS/T62uOsdfnqv+GHRjq7rKRnYh4mwWb4Hz7h/alp8A==} + '@rollup/rollup-darwin-arm64@4.60.0': + resolution: {integrity: sha512-qEF7CsKKzSRc20Ciu2Zw1wRrBz4g56F7r/vRwY430UPp/nt1x21Q/fpJ9N5l47WWvJlkNCPJz3QRVw008fi7yA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.48.1': - resolution: {integrity: sha512-upGEY7Ftw8M6BAJyGwnwMw91rSqXTcOKZnnveKrVWsMTF8/k5mleKSuh7D4v4IV1pLxKAk3Tbs0Lo9qYmii5mQ==} + '@rollup/rollup-darwin-x64@4.60.0': + resolution: {integrity: sha512-WADYozJ4QCnXCH4wPB+3FuGmDPoFseVCUrANmA5LWwGmC6FL14BWC7pcq+FstOZv3baGX65tZ378uT6WG8ynTw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.48.1': - resolution: {integrity: sha512-P9ViWakdoynYFUOZhqq97vBrhuvRLAbN/p2tAVJvhLb8SvN7rbBnJQcBu8e/rQts42pXGLVhfsAP0k9KXWa3nQ==} + '@rollup/rollup-freebsd-arm64@4.60.0': + resolution: {integrity: sha512-6b8wGHJlDrGeSE3aH5mGNHBjA0TTkxdoNHik5EkvPHCt351XnigA4pS7Wsj/Eo9Y8RBU6f35cjN9SYmCFBtzxw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.48.1': - resolution: {integrity: sha512-VLKIwIpnBya5/saccM8JshpbxfyJt0Dsli0PjXozHwbSVaHTvWXJH1bbCwPXxnMzU4zVEfgD1HpW3VQHomi2AQ==} + '@rollup/rollup-freebsd-x64@4.60.0': + resolution: {integrity: sha512-h25Ga0t4jaylMB8M/JKAyrvvfxGRjnPQIR8lnCayyzEjEOx2EJIlIiMbhpWxDRKGKF8jbNH01NnN663dH638mA==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.48.1': - resolution: {integrity: sha512-3zEuZsXfKaw8n/yF7t8N6NNdhyFw3s8xJTqjbTDXlipwrEHo4GtIKcMJr5Ed29leLpB9AugtAQpAHW0jvtKKaQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.60.0': + resolution: {integrity: sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.48.1': - resolution: {integrity: sha512-leo9tOIlKrcBmmEypzunV/2w946JeLbTdDlwEZ7OnnsUyelZ72NMnT4B2vsikSgwQifjnJUbdXzuW4ToN1wV+Q==} + '@rollup/rollup-linux-arm-musleabihf@4.60.0': + resolution: {integrity: sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.48.1': - resolution: {integrity: sha512-Vy/WS4z4jEyvnJm+CnPfExIv5sSKqZrUr98h03hpAMbE2aI0aD2wvK6GiSe8Gx2wGp3eD81cYDpLLBqNb2ydwQ==} + '@rollup/rollup-linux-arm64-gnu@4.60.0': + resolution: {integrity: sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.48.1': - resolution: {integrity: sha512-x5Kzn7XTwIssU9UYqWDB9VpLpfHYuXw5c6bJr4Mzv9kIv242vmJHbI5PJJEnmBYitUIfoMCODDhR7KoZLot2VQ==} + '@rollup/rollup-linux-arm64-musl@4.60.0': + resolution: {integrity: sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loongarch64-gnu@4.48.1': - resolution: {integrity: sha512-yzCaBbwkkWt/EcgJOKDUdUpMHjhiZT/eDktOPWvSRpqrVE04p0Nd6EGV4/g7MARXXeOqstflqsKuXVM3H9wOIQ==} + '@rollup/rollup-linux-loong64-gnu@4.60.0': + resolution: {integrity: sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-gnu@4.48.1': - resolution: {integrity: sha512-UK0WzWUjMAJccHIeOpPhPcKBqax7QFg47hwZTp6kiMhQHeOYJeaMwzeRZe1q5IiTKsaLnHu9s6toSYVUlZ2QtQ==} + '@rollup/rollup-linux-loong64-musl@4.60.0': + resolution: {integrity: sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-ppc64-gnu@4.60.0': + resolution: {integrity: sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-gnu@4.48.1': - resolution: {integrity: sha512-3NADEIlt+aCdCbWVZ7D3tBjBX1lHpXxcvrLt/kdXTiBrOds8APTdtk2yRL2GgmnSVeX4YS1JIf0imFujg78vpw==} + '@rollup/rollup-linux-ppc64-musl@4.60.0': + resolution: {integrity: sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg==} + cpu: [ppc64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.60.0': + resolution: {integrity: sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.48.1': - resolution: {integrity: sha512-euuwm/QTXAMOcyiFCcrx0/S2jGvFlKJ2Iro8rsmYL53dlblp3LkUQVFzEidHhvIPPvcIsxDhl2wkBE+I6YVGzA==} + '@rollup/rollup-linux-riscv64-musl@4.60.0': + resolution: {integrity: sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.48.1': - resolution: {integrity: sha512-w8mULUjmPdWLJgmTYJx/W6Qhln1a+yqvgwmGXcQl2vFBkWsKGUBRbtLRuKJUln8Uaimf07zgJNxOhHOvjSQmBQ==} + '@rollup/rollup-linux-s390x-gnu@4.60.0': + resolution: {integrity: sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.48.1': - resolution: {integrity: sha512-90taWXCWxTbClWuMZD0DKYohY1EovA+W5iytpE89oUPmT5O1HFdf8cuuVIylE6vCbrGdIGv85lVRzTcpTRZ+kA==} - cpu: [x64] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.6.1': resolution: {integrity: sha512-DNGZvZDO5YF7jN5fX8ZqmGLjZEXIJRdJEdTFMhiyXqyXubBa0WVLDWSNlQ5JR2PNgDbEV1VQowhVRUh+74D+RA==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.48.1': - resolution: {integrity: sha512-2Gu29SkFh1FfTRuN1GR1afMuND2GKzlORQUP3mNMJbqdndOg7gNsa81JnORctazHRokiDzQ5+MLE5XYmZW5VWg==} + '@rollup/rollup-linux-x64-gnu@4.60.0': + resolution: {integrity: sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.60.0': + resolution: {integrity: sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-win32-arm64-msvc@4.48.1': - resolution: {integrity: sha512-6kQFR1WuAO50bxkIlAVeIYsz3RUx+xymwhTo9j94dJ+kmHe9ly7muH23sdfWduD0BA8pD9/yhonUvAjxGh34jQ==} + '@rollup/rollup-openbsd-x64@4.60.0': + resolution: {integrity: sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.60.0': + resolution: {integrity: sha512-pESDkos/PDzYwtyzB5p/UoNU/8fJo68vcXM9ZW2V0kjYayj1KaaUfi1NmTUTUpMn4UhU4gTuK8gIaFO4UGuMbA==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.60.0': + resolution: {integrity: sha512-hj1wFStD7B1YBeYmvY+lWXZ7ey73YGPcViMShYikqKT1GtstIKQAtfUI6yrzPjAy/O7pO0VLXGmUVWXQMaYgTQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.48.1': - resolution: {integrity: sha512-RUyZZ/mga88lMI3RlXFs4WQ7n3VyU07sPXmMG7/C1NOi8qisUg57Y7LRarqoGoAiopmGmChUhSwfpvQ3H5iGSQ==} + '@rollup/rollup-win32-ia32-msvc@4.60.0': + resolution: {integrity: sha512-SyaIPFoxmUPlNDq5EHkTbiKzmSEmq/gOYFI/3HHJ8iS/v1mbugVa7dXUzcJGQfoytp9DJFLhHH4U3/eTy2Bq4w==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.48.1': - resolution: {integrity: sha512-8a/caCUN4vkTChxkaIJcMtwIVcBhi4X2PQRoT+yCK3qRYaZ7cURrmJFL5Ux9H9RaMIXj9RuihckdmkBX3zZsgg==} + '@rollup/rollup-win32-x64-gnu@4.60.0': + resolution: {integrity: sha512-RdcryEfzZr+lAr5kRm2ucN9aVlCCa2QNq4hXelZxb8GG0NJSazq44Z3PCCc8wISRuCVnGs0lQJVX5Vp6fKA+IA==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.60.0': + resolution: {integrity: sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w==} cpu: [x64] os: [win32] @@ -4310,113 +4954,113 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@swagger-api/apidom-ast@1.6.0': - resolution: {integrity: sha512-ez1KnBdAzoh5a6ijDXzu5nADkVZXlnL1RkLl8n2u2tjiNg9597xxmFdEHLVa31Vxr1yYj0WtYGLA5e2Kp0KNrQ==} + '@swagger-api/apidom-ast@1.10.2': + resolution: {integrity: sha512-vTl8gWyeZaj887/NSWYs3as4K8wXHar5wY/606XRBjR2UgmJBokBgKjq7S23LW9tsYjsT4MjQKC8idjgw17xvg==} - '@swagger-api/apidom-core@1.6.0': - resolution: {integrity: sha512-gA1MVoXe19sjFLKGkWxp5VvSw3Tk0CSChfItJjFeFHpLSGrfm+LlXp37TmNSns53Ky0F7x7TB/5kAX5I/TO4xw==} + '@swagger-api/apidom-core@1.10.2': + resolution: {integrity: sha512-qryNBGHNWDvSRyK1w5rox0UOrHrVBjZOHgeXFpGHF+oBO7ntSc/H7BSiYMDR+KQESkzMcAxn4tZMLYItaBt06w==} - '@swagger-api/apidom-error@1.6.0': - resolution: {integrity: sha512-xp/cQ1xQ/4Vd/hhQfONK7ea9oVc3JUXAYyfRzvDR0lxISly/SyD2jMcqXzHtrylBAnv7V2HSsbC1BWo7ZJDLSQ==} + '@swagger-api/apidom-error@1.10.2': + resolution: {integrity: sha512-SWyPyL5xwTUsDzPi0A5zwTFwqPezvlwj4opEqruqjESNTYupUA7+vt4Mdj7IlDaRYRG1qyCWQgKhIBXznVUD4w==} - '@swagger-api/apidom-json-pointer@1.6.0': - resolution: {integrity: sha512-RO6P5Gt64AnthGXKeqIFjQCLVFbAJvLYAb67TkvRQ9US4lNixFtFsYJnhLCC4ymz4dTT1hacG0cmTRGcEHF9ig==} + '@swagger-api/apidom-json-pointer@1.10.2': + resolution: {integrity: sha512-zySHPqIXF4HZ3VWbHwTxO+H1e9dJw7mGHzoX+tZjx5wVyLQO3kZDCAAXzz3c3/TIY21Y2Zkpkez3q9hjFyuLvQ==} - '@swagger-api/apidom-ns-api-design-systems@1.6.0': - resolution: {integrity: sha512-EYJfQ4JYuUo2J4QiiLnA/8LmM1k7AQcf1XVE+NrIpZ1160GIzqE+W5uOXkhAOImkP2Cb7EZZdE2cFE/tMYxNvw==} + '@swagger-api/apidom-ns-api-design-systems@1.10.2': + resolution: {integrity: sha512-MsZ4GWmWN7wkWv7G9Pwk8sHU1j0bwk7xoGeaZmNCylbTfYvGkg6jJGMHdAdQNCQXbbpfLeKt1O+3YCN//JUQ7w==} - '@swagger-api/apidom-ns-arazzo-1@1.6.0': - resolution: {integrity: sha512-5rF8PyBiIHh6NfC5Y0WypW11X6hQIWr88EKNOQbBuT/nnzAsOznrUCfQ99FYGLucwdOHaMIBn/b/n4ejGBto/A==} + '@swagger-api/apidom-ns-arazzo-1@1.10.2': + resolution: {integrity: sha512-fQSwDlIR85tbnLXAjtV/ypSGUBfrzFcZ4NbH6BL1DSTR4uEunVxAULdD4wlhCt9gGNDl/zxZD3vQtlYDkXDFmw==} - '@swagger-api/apidom-ns-asyncapi-2@1.6.0': - resolution: {integrity: sha512-tOodfX+o7lonEAnSAxet7nCayW+EqtKPegT06WXt7Llq1LS9eYZ9YzXdFgIwCm8UzfEpZdVLqtxbdLX9vuUtSg==} + '@swagger-api/apidom-ns-asyncapi-2@1.10.2': + resolution: {integrity: sha512-obWHe3pyAj65Nf9ISwnbtJ4C5mZ15C6mtQXxzHVW5maVZqlqt3s/YbPY87EqK9ArdNOwOZHkQt2Uth02GMmjxA==} - '@swagger-api/apidom-ns-asyncapi-3@1.6.0': - resolution: {integrity: sha512-lRMvwTdtuPcwJEYLTX/UGtECpHi9UNYeT9rmWMw3LiKZrZzYc2L8q4ipPbpWwH8t7QfsF2u0iggCODU99lXCnw==} + '@swagger-api/apidom-ns-asyncapi-3@1.10.2': + resolution: {integrity: sha512-yqNmXeObF2OLAusgGEapXz2CrGjXwkcfG3DYcQDtOvgRytvGZxC2EkCUR+wEXCVNYhoJ7QpVzzTJOHs3jOvptg==} - '@swagger-api/apidom-ns-json-schema-2019-09@1.6.0': - resolution: {integrity: sha512-dee1i8wcAFgDEOzTsyoCzQhFLZ2JKzkK5KkRuryabvwS0hG2mKlogToFc8cO2MkkiLSpERm7DREALwSTFVHa0w==} + '@swagger-api/apidom-ns-json-schema-2019-09@1.10.2': + resolution: {integrity: sha512-I1FaBoDFMjybF4QVsesIYl8OilkwycZ0mQ0jf1P++zfTRG27uIePB8M+Iuj6iqMsE3qpkjjJJ6ZLnrLPdKvmRw==} - '@swagger-api/apidom-ns-json-schema-2020-12@1.6.0': - resolution: {integrity: sha512-ldTxSnnIXskwpN6yCJkasqs32pJXwoXyad95crKT0xjZZr4fTrcAXXIyzdjBubiY9tK6elSrQGQxinJcV7ivWw==} + '@swagger-api/apidom-ns-json-schema-2020-12@1.10.2': + resolution: {integrity: sha512-lg9XfRlJRNoBa2EDGpEFc7HvFV39G6RG0/SbjQY0BE/WZer10wmfTCU7l3RUNJXRFGKH6/O/nsYgP7AFjTanXQ==} - '@swagger-api/apidom-ns-json-schema-draft-4@1.6.0': - resolution: {integrity: sha512-t9HvHwrevEG7usosO6AdXmC8oYqje5nxHpUmODr72tUtCeAeGEGEb9lgqx7fBhjc3BYsRzOL1hX56m1gjEyCog==} + '@swagger-api/apidom-ns-json-schema-draft-4@1.10.2': + resolution: {integrity: sha512-C50KnSKynrmHky/oOB6+hHyZVpwng78Fz5aZjay3h8X5C/PJHmm3sDJFvF3/9wkYHO3N9sPp7cpu4Xm9VJ4/wQ==} - '@swagger-api/apidom-ns-json-schema-draft-6@1.6.0': - resolution: {integrity: sha512-aoyvQWgAOcZGTe5OfJ3r24DvXHHbrkKtAnxTOEdZzV/uOm6/cbuT8m02+aMOqWPxei1naC3ZHW9iHrETtfgV3w==} + '@swagger-api/apidom-ns-json-schema-draft-6@1.10.2': + resolution: {integrity: sha512-/wiP8+2lF8UJRrkoQ9HvKnMbnqijk2uY/hAg+/Bo73T9NGKkEa29jYVUKYNYj7gJBw4hhkUHfHFWuZUpxPC4ZA==} - '@swagger-api/apidom-ns-json-schema-draft-7@1.6.0': - resolution: {integrity: sha512-GjmC4+AHQh22fRZOmV+jSYMJTXh243XvdACfIQ//39kQu7gQsimF4PVSY2IgWSvS/I1ukWdPBYmDvOKryBPGrw==} + '@swagger-api/apidom-ns-json-schema-draft-7@1.10.2': + resolution: {integrity: sha512-firN/uvnVxQgACqcyzV3NU9qjbMvNMJkpmm3wOat3URmaFMaFBT3qjbU1pFHBGbnXI3+I9pQJZHmJSwqNzfUbQ==} - '@swagger-api/apidom-ns-openapi-2@1.6.0': - resolution: {integrity: sha512-xbmYzagnB8rO7sYwNGVyxYbNBkjCWnMhlnMrxkPtfQ/2u2ANAmTnCB/S/cMswX5XofiRJbznKAjLDSKBS+mLpQ==} + '@swagger-api/apidom-ns-openapi-2@1.10.2': + resolution: {integrity: sha512-FK5kYvo/1uwAByumRVRsynBlnKxUUImfsjPEFgRCW6yhbCGRqN47NaZ7GYFHpbhjC3OmMN5/etYj6B0jnZx7Gg==} - '@swagger-api/apidom-ns-openapi-3-0@1.6.0': - resolution: {integrity: sha512-AOvW7a2H27inepcTBAWaBMjJLrCh5IPWD4nTU+gysULC7IW6gphO8hj3iUuTmFBcGh9be89GBbvv2y/EGAfx9w==} + '@swagger-api/apidom-ns-openapi-3-0@1.10.2': + resolution: {integrity: sha512-ziyv85QbJYHRdc9oTEFBy3pxwxg7BW/a9GrwH01/SmuXVQPjLjwzRb+SjCxLogJppm0yjxOkDFI2VWPp2RADFg==} - '@swagger-api/apidom-ns-openapi-3-1@1.6.0': - resolution: {integrity: sha512-jCVypc8503zDSxAQlyV8j1vzwc75VBdWHtE2O0F+q5j9qNtGxw/ekbDkgrydYRaGBl92mf16dtPjtp5LwJD0Hw==} + '@swagger-api/apidom-ns-openapi-3-1@1.10.2': + resolution: {integrity: sha512-ngcmO4dH77JT5hZB04OJdyTzgKnt2lNhAZQ+4wXjum/xhszjUmDhOeYfXdHw3Lm7MxsEsTesWzLYQ5LKADc41A==} - '@swagger-api/apidom-ns-openapi-3-2@1.6.0': - resolution: {integrity: sha512-QcFAUucaPaWiOKOEaaGqSfK3OtjeGJodWZLsuBQ0vrHaHkWyQ7jwsM1DJbc1Y8geOBeD2wIwdrdRjoulmqU1SA==} + '@swagger-api/apidom-ns-openapi-3-2@1.10.2': + resolution: {integrity: sha512-3SWJ5ipWwn+w11HTUESWex/522jy2aGLzBqqMgH36sy+Wdwx+9Mw2bgSDqkxmNC5+jpzOGUOIWoQAMuCpS/Gzg==} - '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.6.0': - resolution: {integrity: sha512-vz/9k0X/kh6mLm+Fi+LGNk/yyFq28wxI29ZVLW+b7ulcODikv+NaDnyN2n2kLKCvIchPATzAEvqMvVMuuQwWlg==} + '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.10.2': + resolution: {integrity: sha512-kzhJUGzsJ38Uohj5xRQDkQC08rqNhatbqgD30LZ0/UWryJ9nAsjqK2ovuP9t+5WKcDE4iwcYeGSt1NA2XgEZwg==} - '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.6.0': - resolution: {integrity: sha512-QAq4H6YzRtysSpvLtlJ8WZ22/1Mht+/iarrUOijxDZQPAGfYeUoIicnCqxkVZYSea85sQl+3kiCCB3nhSH+L0g==} + '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.10.2': + resolution: {integrity: sha512-i3CmSxJ/iG67ybRDAJ9xpuMrOMFvC/obX2lI36E0VZzBTb+llw4Zd5qFmBqNnImLpwdmk11Z1V7i+5HM+J7ijQ==} - '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.6.0': - resolution: {integrity: sha512-syKPG3a9IGRvlGhXIEUzWhwbEuFbj+UwwtqaKu8zu771V+DRtH+wxyOkX54vKAIlApz/FgeUbmlWA1ZtYBlSIQ==} + '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.10.2': + resolution: {integrity: sha512-HwiUkwvo5i2hV2SS6KWrdj62BdceZGfhuXhr1il8akWekpU4jXPtr5pv4gOnKKJN7VgjAmwt/DlcCSRo1+9jVA==} - '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.6.0': - resolution: {integrity: sha512-IVVLn+a8Q1iQcQsm4tXiAPghHJuJSB1rhIlDyHe3tSQgt9HOSiVpbnJDpwE/JBxxDxSAkeT6Ovo+fi2T5AmHYg==} + '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.10.2': + resolution: {integrity: sha512-w8VTVuE7GPbRqWxvMgRoTb726JRsMhFPMfTBf8+MJ4pQThjk78dSXPV2Zlse71b2DWBuQy2sr6zGyLUNs/3ePQ==} - '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.6.0': - resolution: {integrity: sha512-aSUi22ELTDvdCLA3nIUOehuNBcHSeCqU7S7YNiHP/mwE4Q07pwQrYXijH2PROfCdjlZNNN34m6Ptakd92jliJQ==} + '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.10.2': + resolution: {integrity: sha512-FDNjqmn2vV1jFoVVwQDO0XPPm8R5xzmcyY/6yBLFmKZADin3smSKVZ+njYHmfRjpspXwN0AwI0drdvuH0FZLJg==} - '@swagger-api/apidom-parser-adapter-asyncapi-json-3@1.6.0': - resolution: {integrity: sha512-Ic53vcFF9zniDyCXOGSwwuAdEBUn5lFEAa0m2i30R36cQFHBCCuvbzbMQjWdr+oML0Aw4XoqOwZCQgkJJICpPA==} + '@swagger-api/apidom-parser-adapter-asyncapi-json-3@1.10.2': + resolution: {integrity: sha512-x/0vM2nDDzYzFnXr69+so/KSH+2py2TiZd1K49pWcX8cHsPV1Y4Ppih7GVOMymd8m/IOCjLYlV7qt4eWDwdldg==} - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.6.0': - resolution: {integrity: sha512-d/w7X+T4vT+KPqb+8xUm6n4pbHsGB28jdxE9rNVbxhu6D3owny2uxfglwaFh4fJG6FQMavCwl/QzfB4newdoKQ==} + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.10.2': + resolution: {integrity: sha512-2bVACmU9ZmAVVnqQWSc3Bs+xG0HHLU1tfZbYL8xNgSi8kw4HcnejF5mWtN+MLFzTaBmWCi2In7P7BYNR8+2Dyg==} - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3@1.6.0': - resolution: {integrity: sha512-Wmf0LY59TZxQhqrJU2pcnUikcChVB4IqGPgjtOFLUoqPpz8FSwYbJ/SPnSMSl+QuncxROheSFsgZ6Tupv0sPHw==} + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3@1.10.2': + resolution: {integrity: sha512-oHpbf+iqBcDS3qtsipMpgCwAeckKMxg0qFKYTCRZyJdctRgupJTxVeir6t/SGo0Ny0a1iknt2LN0u5frEen0kg==} - '@swagger-api/apidom-parser-adapter-json@1.6.0': - resolution: {integrity: sha512-WdAS+dBAB2t18HuUgSZy5b8JM7uXfn1RlPymJNRMUsrKYCTtPrQ/0q3YfnBjPhtjSSNCp+p1wajxHAFS7cj2VA==} + '@swagger-api/apidom-parser-adapter-json@1.10.2': + resolution: {integrity: sha512-VnwEkarKfsJYRF0zCI9AGiSIyBUXqS2d32KQuhVCt/HeuF1XO9sjeLjGiosA/24YVOnO0ul5TpiNFQn0pw89mA==} - '@swagger-api/apidom-parser-adapter-openapi-json-2@1.6.0': - resolution: {integrity: sha512-Q36W1FzdVaY7Oh98533dzCUghwb8k3ZMdlnV37V1H13FlUkj3tVZiWaeaCLwIakzQ7XXYaQTOP+VrRhDRjzhUA==} + '@swagger-api/apidom-parser-adapter-openapi-json-2@1.10.2': + resolution: {integrity: sha512-+d/o/8TrNBjvFzgPb0RQhrCc8gOWnrHZF+xvCO5gwp+4MUr1XP1AJIox1e6t1SO+j7IQjiF2ocx2r7eFE5QC7w==} - '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.6.0': - resolution: {integrity: sha512-UY+obOLTPHJvnXscdMY9XwZyuqcnBe6cu9TURjJgkO/QpOpPDqqZoRyurKZgRrX0Pv9B1zR3EIzhl01u/jeUaw==} + '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.10.2': + resolution: {integrity: sha512-3ieUeX8/WywkUzdOO1U1QKQDNmpZFfOeTAeb4ISDd/PKOVwuEx/b0w5I8EuOu97tKAe3UUesEdii+pJlkcFlFw==} - '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.6.0': - resolution: {integrity: sha512-4ch04/96lYMXQu6odqa6H0aJmV8UefnBJKX1CPuL4qcPSPMFCurcXHGpPHrwMu1p/4Q9H+yRVlYeNQV10xvM0w==} + '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.10.2': + resolution: {integrity: sha512-z0c7IgMPLSDhE+ldTb54Xlhq+yPF0w/8LHXyeHX4V6BS1VG3Utb+mM/qTVfy1Eo+p1KGNlwNDEPsBp6jIaVb5Q==} - '@swagger-api/apidom-parser-adapter-openapi-json-3-2@1.6.0': - resolution: {integrity: sha512-fWR2gjMQg00QIimcXQMSVeLnCH/2iuDD/Dx8TzVHmKV/IKlu+TnmIVosdlDfRmOB+4duwU6/yfoA79IEhFeZdw==} + '@swagger-api/apidom-parser-adapter-openapi-json-3-2@1.10.2': + resolution: {integrity: sha512-bx/kEIXWtpHu+4LEiyNdt0v8ER5EVwPjhQdlpOaC5qghnRH9aUYOTawZtVHsNHAQWTIMNn9DdPKYQgttQKD0Pw==} - '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.6.0': - resolution: {integrity: sha512-dkEh1Rw9uvuIAOTfKjWRX2rLWP+xJ/Eqdkqeo0I0BWFKXX49YcDpHJV4XHpmd5FbsjJ9vBYr0hAmkbl32TtR4g==} + '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.10.2': + resolution: {integrity: sha512-e86JUXHGGEVsO4/xpy/GRSvYXGN30hLt1lMUhjzCFuE95N6/K3hmQHE3rA/H7ot1ajCWUhzukW5rGQac79NIjA==} - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.6.0': - resolution: {integrity: sha512-6azq5YonWdzHcO9llK9zn1a+rGxlTz2Uf8p8NWDQnl2AZ56neDLYEL3mNDlrMXAy8dSJIHw+u9VF1OOzdslIHQ==} + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.10.2': + resolution: {integrity: sha512-ucfc13Ai31tJ0ruAm1YiHhqENgcBuiOXL00OhoICWA56ggAcnA5WfWmvtsXVMlZsTHVbhZP3XpsH5rui2N8u5w==} - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.6.0': - resolution: {integrity: sha512-g2tGCXyIAC0IA6JjA0HVxHWyCovyfAxDQ+pMAJ6qm4PfrZHB+oXKWKZHNNmQaFiKdc/SVdMQq6Up0mXOQs7IOQ==} + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.10.2': + resolution: {integrity: sha512-7o8j93qgf9yYAaaJ/GpH+5sB3fC9EmvmjTCqlw5YWXp+cRgCn9q7f80Sv4+NjbracUafB6qL4i9F/m+Xs0XZaQ==} - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-2@1.6.0': - resolution: {integrity: sha512-NGkdG9X5Svi89ZBluNseyUBNdgB9MkbTTNmerVKKOmCCHaVbzIb6UFPXf1MifSFyT+wTeGZk6WZLgRIDsTAZ5Q==} + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-2@1.10.2': + resolution: {integrity: sha512-blDIeVmo8bpXYV/C+b6PYi54yS+5jPEZTFsK5jQ2NzpCPrkBPacp/KTuHBUBzJsYj4bj/ivRL3+JXGw4YovUHw==} - '@swagger-api/apidom-parser-adapter-yaml-1-2@1.6.0': - resolution: {integrity: sha512-UwSE5pPUJ+ag7ZCbesgx/SJ8zUD3Sx+2U4AD3/1G1EJ+0gb7FMYgihuOT8ujmBfZVGGm3HMIEIa1w3zha08v2g==} + '@swagger-api/apidom-parser-adapter-yaml-1-2@1.10.2': + resolution: {integrity: sha512-I5eCls8XS3SVEwH/cuL6T3iar1TPaFYh3gXwS/2rzP1aZQNKSHDP3y3ney7nAomKG4dFvE8Q248FL36arG7T/w==} - '@swagger-api/apidom-reference@1.6.0': - resolution: {integrity: sha512-gYTDfWQM1heqrCCrCsZH+EWDyAkIGqEJnSJcVWKngwOkXJKeUwat8p1TOW4q3rkaTT+fBaYbrjTr9SkFtVbdMg==} + '@swagger-api/apidom-reference@1.10.2': + resolution: {integrity: sha512-H5UqOmae9CXdiLJbbh1j+/hwvcECmr6ci2XtUKTQpFviemvsIDZmPV1DKUAxCfzGr2iOkDO6SZc+/OEWlETqiQ==} '@swaggerexpert/cookie@2.0.2': resolution: {integrity: sha512-DPI8YJ0Vznk4CT+ekn3rcFNq1uQwvUHZhH6WvTSPD0YKBIlMS9ur2RYKghXuxxOiqOam/i4lHJH4xTIiTgs3Mg==} @@ -4508,8 +5152,8 @@ packages: '@swc/types@0.1.25': resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} - '@t3-oss/env-core@0.13.10': - resolution: {integrity: sha512-NNFfdlJ+HmPHkLi2HKy7nwuat9SIYOxei9K10lO2YlcSObDILY7mHZNSHsieIM3A0/5OOzw/P/b+yLvPdaG52g==} + '@t3-oss/env-core@0.13.11': + resolution: {integrity: sha512-sM7GYY+KL7H/Hl0BE0inWfk3nRHZOLhmVn7sHGxaZt9FAR6KqREXAE+6TqKfiavfXmpRxO/OZ2QgKRd+oiBYRQ==} peerDependencies: arktype: ^2.1.0 typescript: '>=5.0.0' @@ -4525,8 +5169,8 @@ packages: zod: optional: true - '@t3-oss/env-nextjs@0.13.10': - resolution: {integrity: sha512-JfSA2WXOnvcc/uMdp31paMsfbYhhdvLLRxlwvrnlPE9bwM/n0Z+Qb9xRv48nPpvfMhOrkrTYw1I5Yc06WIKBJQ==} + '@t3-oss/env-nextjs@0.13.11': + resolution: {integrity: sha512-NC+3j7YWgpzdFu1t5y/8wqibTK0lm5RS4bjXA1n8uwik3wIR4iZM4Fa+U2BaMa5k3Qk8RZiYhoAIX0WogmGkzg==} peerDependencies: arktype: ^2.1.0 typescript: '>=5.0.0' @@ -4542,13 +5186,13 @@ packages: zod: optional: true - '@tabler/icons-react@3.40.0': - resolution: {integrity: sha512-oO5+6QCnna4a//mYubx4euZfECtzQZFDGsDMIdzZUhbdyBCT+3bRVFBPueGIcemWld4Vb/0UQ39C/cmGfGylAg==} + '@tabler/icons-react@3.41.1': + resolution: {integrity: sha512-kUgweE+DJtAlMZVIns1FTDdcbpRVnkK7ZpUOXmoxy3JAF0rSHj0TcP4VHF14+gMJGnF+psH2Zt26BLT6owetBA==} peerDependencies: react: '>= 16' - '@tabler/icons@3.40.0': - resolution: {integrity: sha512-V/Q4VgNPKubRTiLdmWjV/zscYcj5IIk+euicUtaVVqF6luSC9rDngYWgST5/yh3Mrg/mYUwRv1YVTk71Jp0twQ==} + '@tabler/icons@3.41.1': + resolution: {integrity: sha512-OaRnVbRmH2nHtFeg+RmMJ/7m2oBIF9XCJAUD5gQnMrpK9f05ydj8MZrAf3NZQqOXyxGN1UBL0D5IKLLEUfr74Q==} '@tanstack/devtools-event-client@0.4.0': resolution: {integrity: sha512-RPfGuk2bDZgcu9bAJodvO2lnZeHuz4/71HjZ0bGb/SPg8+lyTA+RLSKQvo7fSmPSi8/vcH3aKQ8EM9ywf1olaw==} @@ -4561,40 +5205,27 @@ packages: resolution: {integrity: sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==} engines: {node: '>=12'} - '@tanstack/pacer-lite@0.1.1': - resolution: {integrity: sha512-y/xtNPNt/YeyoVxE/JCx+T7yjEzpezmbb+toK8DDD1P4m7Kzs5YR956+7OKexG3f8aXgC3rLZl7b1V+yNUSy5w==} - engines: {node: '>=18'} + '@tanstack/query-core@5.100.5': + resolution: {integrity: sha512-t20KrhKkf0HXzqQkPbJ5erhFesup68BAbwFgYmTrS7bxMF7O5MdmL8jUkik4thsG7Hg00fblz30h6yF1d5TxGg==} - '@tanstack/query-core@5.90.19': - resolution: {integrity: sha512-GLW5sjPVIvH491VV1ufddnfldyVB+teCnpPIvweEfkpRx7CfUmUGhoh9cdcUKBh/KwVxk22aNEDxeTsvmyB/WA==} + '@tanstack/query-devtools@5.100.5': + resolution: {integrity: sha512-SuCkVCqqliRYJvm+LEL2U/TcFv92zTnHj6OGrJFHp1v/RsiwamI+ZDgQzbeUrLsJb8/Nj/52aIw0NyDMcVHl4A==} - '@tanstack/query-devtools@5.93.0': - resolution: {integrity: sha512-+kpsx1NQnOFTZsw6HAFCW3HkKg0+2cepGtAWXjiiSOJJ1CtQpt72EE2nyZb+AjAbLRPoeRmPJ8MtQd8r8gsPdg==} - - '@tanstack/react-form@1.27.7': - resolution: {integrity: sha512-xTg4qrUY0fuLaSnkATLZcK3BWlnwLp7IuAb6UTbZKngiDEvvDCNTvVvHgPlgef1O2qN4klZxInRyRY6oEkXZ2A==} + '@tanstack/react-query-devtools@5.100.5': + resolution: {integrity: sha512-bItQERx7dJoiI0WEoS4tIrvNnmk4kUYsaQLdIpm4o9Kttmsi5B6xlY6JBDkavstR3hH/R2+VT5dr3L5LBFPW4g==} peerDependencies: - '@tanstack/react-start': '*' - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@tanstack/react-start': - optional: true - - '@tanstack/react-query-devtools@5.91.2': - resolution: {integrity: sha512-ZJ1503ay5fFeEYFUdo7LMNFzZryi6B0Cacrgr2h1JRkvikK1khgIq6Nq2EcblqEdIlgB/r7XDW8f8DQ89RuUgg==} - peerDependencies: - '@tanstack/react-query': ^5.90.20 + '@tanstack/react-query': ^5.100.5 react: ^18 || ^19 - '@tanstack/react-query-next-experimental@5.91.0': - resolution: {integrity: sha512-/EbUnRBYInqoyXbPq/25fPko9JsY5r/DQVry8oR2CCU4z4hbb9ABGAOZ9jVt11OaOKxN5SGC8LE0XDSMNZCrKg==} + '@tanstack/react-query-next-experimental@5.100.5': + resolution: {integrity: sha512-v6XsDcwHQFIMVqwUx9qvuhTnTEN10mvKm9Yfojfo5C1aOUx9dKZGDeL5NM+63GHlR589/Oeba7cCyEQi97nwYQ==} peerDependencies: - '@tanstack/react-query': ^5.90.8 + '@tanstack/react-query': ^5.100.5 next: ^13 || ^14 || ^15 || ^16 react: ^18 || ^19 - '@tanstack/react-query@5.90.21': - resolution: {integrity: sha512-0Lu6y5t+tvlTJMTO7oh5NSpJfpg/5D41LlThfepTixPYkJ0sE2Jj0m0f6yYqujBwIXlId87e234+MxG3D3g7kg==} + '@tanstack/react-query@5.100.5': + resolution: {integrity: sha512-aNwj1mi2v2bQ9IxkyR1grLOUkv3BYWoykHy9KDyLNbjC3tsahbOHJibK+Wjtr1wRhG59/AvJhiJG5OlthaCgJA==} peerDependencies: react: ^18 || ^19 @@ -4630,224 +5261,224 @@ packages: '@tanstack/virtual-core@3.11.2': resolution: {integrity: sha512-vTtpNt7mKCiZ1pwU9hfKPhpdVO2sVzFQsxoVBGtOSHxlrRRzYr8iQ2TlwbAcRYCcEiZ9ECAM8kBzH0v2+VzfKw==} - '@testcontainers/mysql@11.12.0': - resolution: {integrity: sha512-E43y5Xdx8ORPdvdd1eIJb4uM8sGHkZenvHURJ6lUc+3KtS3DmTSTsBbcLC+HwTg92IqAzuIq01hYF7J/qmMrOw==} + '@testcontainers/mysql@11.14.0': + resolution: {integrity: sha512-0/OKd1gOvnl0qS+RIpmT6J0XKWpjkVyIbOtS3cFTVR8t6Ps7W9TV0U+zp7FPxCmitWuWYPXwH/+RQXF+1jZuZQ==} - '@testcontainers/postgresql@11.12.0': - resolution: {integrity: sha512-w4ZK0H+WIYBUBk57H9wCSxPMSMZUNsFpx2MZAX4iru0Aevz9HFWDfAhFLAu+/SwsHtEJUD7XfWUDlqBGC3OF0Q==} + '@testcontainers/postgresql@11.14.0': + resolution: {integrity: sha512-wYbJn8GRTj8qfqzfVubxioYWlHJU/ImIjuzPwyy9C5Qfo6g3GLduPZAj+BifvqTZjgT3gd4gFVLCPhBji7dc1w==} - '@testcontainers/redis@11.12.0': - resolution: {integrity: sha512-2qCoevN0t+6yFFdmLUywFiL0n+EwTvYXDdc3lYXkKiIpTt1t4mqyWGXmV5dfWyCNYAWbV+PWmVvwnP1GDMoxrA==} + '@testcontainers/redis@11.14.0': + resolution: {integrity: sha512-WX005slz2JMQPw2avbSjf5awVjpmFhOs5xCxeGSYLcV5ia4W1edv/P6MdOw4dZnvDQDuN5LfqNoV/ut3XGb2pA==} - '@tiptap/core@3.20.1': - resolution: {integrity: sha512-SwkPEWIfaDEZjC8SEIi4kZjqIYUbRgLUHUuQezo5GbphUNC8kM1pi3C3EtoOPtxXrEbY6e4pWEzW54Pcrd+rVA==} + '@tiptap/core@3.22.4': + resolution: {integrity: sha512-vGIGm/HpqLg8EAAQXQ+koV+/S828OEpzocfWcPOwo1u2QUVf9dQG47Yy6JJ8zFFaJwfv4dBcOXli+7BrJwsxDQ==} peerDependencies: - '@tiptap/pm': ^3.20.1 + '@tiptap/pm': 3.22.4 - '@tiptap/extension-blockquote@3.20.1': - resolution: {integrity: sha512-WzNXk/63PQI2fav4Ta6P0GmYRyu8Gap1pV3VUqaVK829iJ6Zt1T21xayATHEHWMK27VT1GLPJkx9Ycr2jfDyQw==} + '@tiptap/extension-blockquote@3.22.4': + resolution: {integrity: sha512-7/61kNPbGFhMgM//zMknD0pSb69rGdRIkpulXOWS1JBrFHkH6hjZDfrOETNzgKkO+NlmzVl9rXSTv0xauS3lzA==} peerDependencies: - '@tiptap/core': ^3.20.1 + '@tiptap/core': 3.22.4 - '@tiptap/extension-bold@3.20.1': - resolution: {integrity: sha512-fz++Qv6Rk/Hov0IYG/r7TJ1Y4zWkuGONe0UN5g0KY32NIMg3HeOHicbi4xsNWTm9uAOl3eawWDkezEMrleObMw==} + '@tiptap/extension-bold@3.22.4': + resolution: {integrity: sha512-jIaPKfNOQu2lhpbLDvtwlQqM+mjF+Kk+auHpzYjBnsuwUli1Cl5ZOau7RH+rru/SQvZe1DtpQlANujDywugZAA==} peerDependencies: - '@tiptap/core': ^3.20.1 + '@tiptap/core': 3.22.4 - '@tiptap/extension-bubble-menu@3.20.1': - resolution: {integrity: sha512-XaPvO6aCoWdFnCBus0s88lnj17NR/OopV79i8Qhgz3WMR0vrsL5zsd45l0lZuu9pSvm5VW47SoxakkJiZC1suw==} + '@tiptap/extension-bubble-menu@3.22.4': + resolution: {integrity: sha512-v4pux5Ql3THAEjaLMY4ldtdy/Xy2qU7PJLBkq8ugLp8qicaKC+tpqxp6sGif4vLIjz7Ap5hurRbTNbXzszyyHA==} peerDependencies: - '@tiptap/core': ^3.20.1 - '@tiptap/pm': ^3.20.1 + '@tiptap/core': 3.22.4 + '@tiptap/pm': 3.22.4 - '@tiptap/extension-bullet-list@3.20.1': - resolution: {integrity: sha512-mbrlvOZo5OF3vLhp+3fk9KuL/6J/wsN0QxF6ZFRAHzQ9NkJdtdfARcBeBnkWXGN8inB6YxbTGY1/E4lmBkOpOw==} + '@tiptap/extension-bullet-list@3.22.4': + resolution: {integrity: sha512-TB+d3fGcTixYjO7coKqTr1mGTJuqr8hjDCPUFgzuvKyJnBhqWITmBzQ/8CLq4rr6mihgGURbD3N+xkQuPAKFiw==} peerDependencies: - '@tiptap/extension-list': ^3.20.1 + '@tiptap/extension-list': 3.22.4 - '@tiptap/extension-code-block@3.20.1': - resolution: {integrity: sha512-vKejwBq+Nlj4Ybd3qOyDxIQKzYymdNH+8eXkKwGShk2nfLJIxq69DCyGvmuHgipIO1qcYPJ149UNpGN+YGcdmA==} + '@tiptap/extension-code-block@3.22.4': + resolution: {integrity: sha512-MEurzNXfMET3rhjpoPJYUgMfxTdTqbzT9+ToFrqNGAHocdXVm6m1hhO2frVC7fEtHPnxXKsn0Z3NUbCRkRTLuA==} peerDependencies: - '@tiptap/core': ^3.20.1 - '@tiptap/pm': ^3.20.1 + '@tiptap/core': 3.22.4 + '@tiptap/pm': 3.22.4 - '@tiptap/extension-code@3.20.1': - resolution: {integrity: sha512-509DHINIA/Gg+eTG7TEkfsS8RUiPLH5xZNyLRT0A1oaoaJmECKfrV6aAm05IdfTyqDqz6LW5pbnX6DdUC4keug==} + '@tiptap/extension-code@3.22.4': + resolution: {integrity: sha512-cnbxmVhAcc7X3G81QUYEmKP0ve2hRmvAiFXBuuv9RUtQlBiRnzmhHoJOMgkX0CsMR7+8kMRpTfeDUYq2xp5s5w==} peerDependencies: - '@tiptap/core': ^3.20.1 + '@tiptap/core': 3.22.4 - '@tiptap/extension-color@3.20.1': - resolution: {integrity: sha512-WpYGG+9zDQXFWdhZ/SPahcVR1aMMXubRSHEBaaLs0SEQ2dThEOYo5xXlVP0Cwat9OiQ+nqWnCFwBmc6mgIAiUA==} + '@tiptap/extension-color@3.22.4': + resolution: {integrity: sha512-1vDuVsrOETshe4j4nZhWalbKYcWfNybRCe30h829ExX06XwFryUYLb/LgTIaGCr9beWZUldsK+vOkBWdDTGMTw==} peerDependencies: - '@tiptap/extension-text-style': ^3.20.1 + '@tiptap/extension-text-style': 3.22.4 - '@tiptap/extension-document@3.20.1': - resolution: {integrity: sha512-9vrqdGmRV7bQCSY3NLgu7UhIwgOCDp4sKqMNsoNRX0aZ021QQMTvBQDPkiRkCf7MNsnWrNNnr52PVnULEn3vFQ==} + '@tiptap/extension-document@3.22.4': + resolution: {integrity: sha512-XQKla1+703FqQJC48tPDVgt9ucGiFbIEmQdOg5L5o07z9a6/NzuaZAc+1zJ7NxcUZzy+z6wBn1PrVMTiqiSXlw==} peerDependencies: - '@tiptap/core': ^3.20.1 + '@tiptap/core': 3.22.4 - '@tiptap/extension-dropcursor@3.20.1': - resolution: {integrity: sha512-K18L9FX4znn+ViPSIbTLOGcIaXMx/gLNwAPE8wPLwswbHhQqdiY1zzdBw6drgOc1Hicvebo2dIoUlSXOZsOEcw==} + '@tiptap/extension-dropcursor@3.22.4': + resolution: {integrity: sha512-N9/yMDC35jJp0V/naL0+6gi4gUDUIcPpWEzFdCDWUSYBA8mt41c1kI1ZU7UTKYIBzTClenhYHRc2XKZxxx0+LQ==} peerDependencies: - '@tiptap/extensions': ^3.20.1 + '@tiptap/extensions': 3.22.4 - '@tiptap/extension-floating-menu@3.20.1': - resolution: {integrity: sha512-BeDC6nfOesIMn5pFuUnkEjOxGv80sOJ8uk1mdt9/3Fkvra8cB9NIYYCVtd6PU8oQFmJ8vFqPrRkUWrG5tbqnOg==} + '@tiptap/extension-floating-menu@3.22.4': + resolution: {integrity: sha512-DFuyYxgaZPgxum5z1yvJPbfYCvDdO8geXsdyqt0qYYdiat3aGE4ncJhiLRIFDhSHBhaZg5eCgu/YPYAN6jZnrA==} peerDependencies: '@floating-ui/dom': ^1.0.0 - '@tiptap/core': ^3.20.1 - '@tiptap/pm': ^3.20.1 + '@tiptap/core': 3.22.4 + '@tiptap/pm': 3.22.4 - '@tiptap/extension-gapcursor@3.20.1': - resolution: {integrity: sha512-kZOtttV6Ai8VUAgEng3h4WKFbtdSNJ6ps7r0cRPY+FctWhVmgNb/JJwwyC+vSilR7nRENAhrA/Cv/RxVlvLw+g==} + '@tiptap/extension-gapcursor@3.22.4': + resolution: {integrity: sha512-UYBEUj3SFpKINIE7AdzcyeS3xICK+ee+YLBbuqNXyHStYChjJOohzJehqiqhjR16A88KQQ+ZjgyDcItKGygSog==} peerDependencies: - '@tiptap/extensions': ^3.20.1 + '@tiptap/extensions': 3.22.4 - '@tiptap/extension-hard-break@3.20.1': - resolution: {integrity: sha512-9sKpmg/IIdlLXimYWUZ3PplIRcehv4Oc7V1miTqlnAthMzjMqigDkjjgte4JZV67RdnDJTQkRw8TklCAU28Emg==} + '@tiptap/extension-hard-break@3.22.4': + resolution: {integrity: sha512-xq+a4dE7T6VwApCkh/yU3p30gn3F8g8Arb9CyEZm58/WIJUIGvHSTjDdHmvU16+kiWSBg+wOOsaFHhYjJjxcKA==} peerDependencies: - '@tiptap/core': ^3.20.1 + '@tiptap/core': 3.22.4 - '@tiptap/extension-heading@3.20.1': - resolution: {integrity: sha512-unudyfQP6FxnyWinxvPqe/51DG91J6AaJm666RnAubgYMCgym+33kBftx4j4A6qf+ddWYbD00thMNKOnVLjAEQ==} + '@tiptap/extension-heading@3.22.4': + resolution: {integrity: sha512-TUaj5f0Ir5qy9HKKt2ocnwfXKpZDYeHgbbP9gshKFzdq5PLe1RbIgkjfy6bnoI865cYjmPYWRjcT7XsKyIcb9Q==} peerDependencies: - '@tiptap/core': ^3.20.1 + '@tiptap/core': 3.22.4 - '@tiptap/extension-highlight@3.20.1': - resolution: {integrity: sha512-Ufv1eNsQBR7NNSxQIvHaI9Bm3/MS8GW9uCXR/20WJ2r0GhDA6vwnS5MHAhP5JUXK6KOsd0Rvz2cfvYB7f3okbQ==} + '@tiptap/extension-highlight@3.22.4': + resolution: {integrity: sha512-QItbgkWqGZ04rOdYfjrn1TaUTv9XLKQE9VVJm9f6bxCpacPREJpz4lzkdea6zISHBZjEXJzlkjRWZP0zQLXXFA==} peerDependencies: - '@tiptap/core': ^3.20.1 + '@tiptap/core': 3.22.4 - '@tiptap/extension-horizontal-rule@3.20.1': - resolution: {integrity: sha512-rjFKFXNntdl0jay8oIGFvvykHlpyQTLmrH3Ag2fj3i8yh6MVvqhtaDomYQbw5sxECd5hBkL+T4n2d2DRuVw/QQ==} + '@tiptap/extension-horizontal-rule@3.22.4': + resolution: {integrity: sha512-cCI1HekGQwhY/MbgaKQ0R/7HcH5ZM1oFAyI/J72QGLC0XnF403S/OXoHMuBWr1mCu8hNiQWCzeNRJUty0iytNw==} peerDependencies: - '@tiptap/core': ^3.20.1 - '@tiptap/pm': ^3.20.1 + '@tiptap/core': 3.22.4 + '@tiptap/pm': 3.22.4 - '@tiptap/extension-image@3.20.1': - resolution: {integrity: sha512-/GPFSLNdYSZQ0E6VBXSAk0UFtDdn98HT1Aa2tO+STELqc5jAdFB42dfFnTC6KQzTvcUOUYkE2S1Q22YC5H2XNQ==} + '@tiptap/extension-image@3.22.4': + resolution: {integrity: sha512-ZDc+fLaratTQ4IgnKcJJwfUgUgpcHjbZSBi6UQAILJwkflMy1Zxj8mpbma5P934nLSI+uDnR5ret6ZZLNITKhA==} peerDependencies: - '@tiptap/core': ^3.20.1 + '@tiptap/core': 3.22.4 - '@tiptap/extension-italic@3.20.1': - resolution: {integrity: sha512-ZYRX13Kt8tR8JOzSXirH3pRpi8x30o7LHxZY58uXBdUvr3tFzOkh03qbN523+diidSVeHP/aMd/+IrplHRkQug==} + '@tiptap/extension-italic@3.22.4': + resolution: {integrity: sha512-fVSDx5AYXgDI3v2zZIqb7V8EewthwM2NJ/ZCX+XaxRsqNEpnjVhgHs7UlvDqK1wj2OJ6zmUNjPtVlAFRxwT+HQ==} peerDependencies: - '@tiptap/core': ^3.20.1 + '@tiptap/core': 3.22.4 - '@tiptap/extension-link@3.20.1': - resolution: {integrity: sha512-oYTTIgsQMqpkSnJAuAc+UtIKMuI4lv9e1y4LfI1iYm6NkEUHhONppU59smhxHLzb3Ww7YpDffbp5IgDTAiJztA==} + '@tiptap/extension-link@3.22.4': + resolution: {integrity: sha512-uoP3yus02uwGPVzW2QaEPJWVIrUb/r5nKm6c8DiJv9fNSX1+gykZZMg42c6GwRFLZ/vyfWjVCbAE03VMUqafgA==} peerDependencies: - '@tiptap/core': ^3.20.1 - '@tiptap/pm': ^3.20.1 + '@tiptap/core': 3.22.4 + '@tiptap/pm': 3.22.4 - '@tiptap/extension-list-item@3.20.1': - resolution: {integrity: sha512-tzgnyTW82lYJkUnadYbatwkI9dLz/OWRSWuFpQPRje/ItmFMWuQ9c9NDD8qLbXPdEYnvrgSAA+ipCD/1G0qA0Q==} + '@tiptap/extension-list-item@3.22.4': + resolution: {integrity: sha512-H659KXTvggSypIDWSOJBZ37jh9pKjQriDDvYPYvOZCdfij0D0hsDXN/wXoypArneUkoBdgruHfTtMkFOaQlgkw==} peerDependencies: - '@tiptap/extension-list': ^3.20.1 + '@tiptap/extension-list': 3.22.4 - '@tiptap/extension-list-keymap@3.20.1': - resolution: {integrity: sha512-Dr0xsQKx0XPOgDg7xqoWwfv7FFwZ3WeF3eOjqh3rDXlNHMj1v+UW5cj1HLphrsAZHTrVTn2C+VWPJkMZrSbpvQ==} + '@tiptap/extension-list-keymap@3.22.4': + resolution: {integrity: sha512-t/zhker4oIS78AIGYDdFFfZC6zSBlszfD7z/zqFLGCg5PHNNgkZK5hKj6Vyix6D2SapRn/ajnx+8mhbKIUH5eA==} peerDependencies: - '@tiptap/extension-list': ^3.20.1 + '@tiptap/extension-list': 3.22.4 - '@tiptap/extension-list@3.20.1': - resolution: {integrity: sha512-euBRAn0mkV7R2VEE+AuOt3R0j9RHEMFXamPFmtvTo8IInxDClusrm6mJoDjS8gCGAXsQCRiAe1SCQBPgGbOOwg==} + '@tiptap/extension-list@3.22.4': + resolution: {integrity: sha512-Xe8UFvvHmyp/c/TJsFwlwU9CWACYbBirNsluJ3U1+H8BTu1wqdrT/AXR5uIXeyCl5kiWKgX5q71eHWbYFOrqrg==} peerDependencies: - '@tiptap/core': ^3.20.1 - '@tiptap/pm': ^3.20.1 + '@tiptap/core': 3.22.4 + '@tiptap/pm': 3.22.4 - '@tiptap/extension-ordered-list@3.20.1': - resolution: {integrity: sha512-Y+3Ad7OwAdagqdYwCnbqf7/to5ypD4NnUNHA0TXRCs7cAHRA8AdgPoIcGFpaaSpV86oosNU3yfeJouYeroffog==} + '@tiptap/extension-ordered-list@3.22.4': + resolution: {integrity: sha512-w77hPVf7pcHt97vfrybg/l0t5CimCd4y75OJKuHuo3CfgM5xbUP/gaPNMDyLLe7MYole/UHi/XvG3XjgzqTzAw==} peerDependencies: - '@tiptap/extension-list': ^3.20.1 + '@tiptap/extension-list': 3.22.4 - '@tiptap/extension-paragraph@3.20.1': - resolution: {integrity: sha512-QFrAtXNyv7JSnomMQc1nx5AnG9mMznfbYJAbdOQYVdbLtAzTfiTuNPNbQrufy5ZGtGaHxDCoaygu2QEfzaKG+Q==} + '@tiptap/extension-paragraph@3.22.4': + resolution: {integrity: sha512-de6dFkIhigiENESY6rNJ3yTVS/337ybfP30dNPudTwGe9oAu9ZCS+04j6QCvXSjhlI3ULiv7wiSHqrP26Gd+Hw==} peerDependencies: - '@tiptap/core': ^3.20.1 + '@tiptap/core': 3.22.4 - '@tiptap/extension-placeholder@3.20.1': - resolution: {integrity: sha512-k+jfbCugYGuIFBdojukgEopGazIMOgHrw46FnyN2X/6ICOIjQP2rh2ObslrsUOsJYoEevxCsNF9hZl1HvWX66g==} + '@tiptap/extension-placeholder@3.22.4': + resolution: {integrity: sha512-Z3wtWL+KufwkC7CkJge5enAxx4q8C3oOYixme02snY9zfjX3V/1pjAmEfP4wxScgM5GIuTEJ83B9Yz3wRzPA6Q==} peerDependencies: - '@tiptap/extensions': ^3.20.1 + '@tiptap/extensions': 3.22.4 - '@tiptap/extension-strike@3.20.1': - resolution: {integrity: sha512-EYgyma10lpsY+rwbVQL9u+gA7hBlKLSMFH7Zgd37FSxukOjr+HE8iKPQQ+SwbGejyDsPlLT8Z5Jnuxo5Ng90Pg==} + '@tiptap/extension-strike@3.22.4': + resolution: {integrity: sha512-aRHWQj42HiailXSC9LkKYM3jWMcSeGwOjbqM4PiuxQZmHVDRFmeHkfJItOdn2cSHaO0vuEVK+TvrWUWsBFi3pg==} peerDependencies: - '@tiptap/core': ^3.20.1 + '@tiptap/core': 3.22.4 - '@tiptap/extension-table-cell@3.20.1': - resolution: {integrity: sha512-nSeboFey+MJqZuCQSbVUajQVaGiypeoUPiGd0CJdyfc0oPsBGGqp7XFJtw5HHEbDqEvSHvGNDoZDFsUTAxUyIg==} + '@tiptap/extension-table-cell@3.22.4': + resolution: {integrity: sha512-uvFegCc1UQYK2nfIV2sIHg+hzLIMroJJm00XomzBgC1w/eSO7Ui8APiDh/baBcTPpCSU3SLiQLTgx7AU7oE3pg==} peerDependencies: - '@tiptap/extension-table': ^3.20.1 + '@tiptap/extension-table': 3.22.4 - '@tiptap/extension-table-header@3.20.1': - resolution: {integrity: sha512-Xsdgik3Bh5xWSkLaPR/6NDLZR5lgUDIN/yiZ7bLtfTsyGxqEvuW2Y9/j/XP3AfsZzGy2/SuA9bM9zxPcFQxwFA==} + '@tiptap/extension-table-header@3.22.4': + resolution: {integrity: sha512-V4kLLWeRdc/I+IXiXZZhLAjsaHHiJWuLXTuOtZRDrCxQUiFLi4AgNg1DPQ09JAANkEWDhXq3x6BoUXaFwumbEw==} peerDependencies: - '@tiptap/extension-table': ^3.20.1 + '@tiptap/extension-table': 3.22.4 - '@tiptap/extension-table-row@3.20.1': - resolution: {integrity: sha512-uYE0SdY4J81wn/fg8Gum0TVSTTBekQhRGeSwDnRfBBd9JILBsLotBTt4ucM7JOUjrP9BjS+QFCT9EstAchPHfQ==} + '@tiptap/extension-table-row@3.22.4': + resolution: {integrity: sha512-9tdS6jgS6DqUu5TpEmNrRoo/DL5Xam0PyrQaUEXUC+ssci+bMRCJ8PAWMcunNsI9NKf/Tb3wYrv6hGFChaT9uA==} peerDependencies: - '@tiptap/extension-table': ^3.20.1 + '@tiptap/extension-table': 3.22.4 - '@tiptap/extension-table@3.20.1': - resolution: {integrity: sha512-y2o1De3P/FH80nst1D9pYSwtRvxF87WkNAYGurqCkZ6SjwFq1Ifeh9eY+o79R6SCwcfpvQRytCYd+Yw9o5XAtA==} + '@tiptap/extension-table@3.22.4': + resolution: {integrity: sha512-kjvLv3Z4JI+1tLDqZKa+bKU8VcxY+ZOyMCKWQA7wYmy8nKWkLJ60W+xy8AcXXpHB2goCIgSFLhsTyswx0GXH4w==} peerDependencies: - '@tiptap/core': ^3.20.1 - '@tiptap/pm': ^3.20.1 + '@tiptap/core': 3.22.4 + '@tiptap/pm': 3.22.4 - '@tiptap/extension-task-item@3.20.1': - resolution: {integrity: sha512-ZdQld5Jzw/b/zl9TSA3KNkucmQhW5lHS/0YEKb+eFvxMwdHTKSpsTQzrfzbJixcdSqsuKJB+uUCwDDB+l0CRlA==} + '@tiptap/extension-task-item@3.22.4': + resolution: {integrity: sha512-PhoiOMatdRXJU1HJz0fMP5N7wv0eYAz/Id/gphby/gdxjYQaMhJ7vQiLTR28EkVBkdntTUb1bwZ4XQn9thFtpw==} peerDependencies: - '@tiptap/extension-list': ^3.20.1 + '@tiptap/extension-list': 3.22.4 - '@tiptap/extension-task-list@3.20.1': - resolution: {integrity: sha512-fbWsbp2ybWZUn9zcdgvFIcVya7v8kISuy91SULM1lhLwIsjNC15IPqp/ZEFJJJDKWBVr0o6bvLMsXwph/azO+w==} + '@tiptap/extension-task-list@3.22.4': + resolution: {integrity: sha512-5M3XiZMZJ2mwWSUKPG4mb90g86rpgYw7yf8lBEkaCgke9XxsLg8mXmYRpCc6n/v1TQXryB+WDKuenCzJTx/4/A==} peerDependencies: - '@tiptap/extension-list': ^3.20.1 + '@tiptap/extension-list': 3.22.4 - '@tiptap/extension-text-align@3.20.1': - resolution: {integrity: sha512-9816EFiTO7BvACGomYNI0pZIu5EOBVHrgqO33+sFjseQCvq+5FD6OPNLdHSkPzAmRrE0LUBvFZ93sjO4N+kJPg==} + '@tiptap/extension-text-align@3.22.4': + resolution: {integrity: sha512-W7TnXWSyfDXSatGXp5y/CahE8G4btrQPb0/sy+eG+42FxdzYsqvh1ys3OE9j2XSuTrZ1q/tZA/NLPUkc7vw6Kw==} peerDependencies: - '@tiptap/core': ^3.20.1 + '@tiptap/core': 3.22.4 - '@tiptap/extension-text-style@3.20.1': - resolution: {integrity: sha512-3LQU92zX6tzl47EBskkAKeJXd6EWwYmBDE7jbd7InJqnt9NMAcj4DtXtXpI+e6Un5+8yzNjVA+fI5+5cFS3dSg==} + '@tiptap/extension-text-style@3.22.4': + resolution: {integrity: sha512-24DVBdySNKq3ovY+v9ERVxAyHStDa6ftUlyoHuZv0YXQ2amjUNOmqQtGEHBIULpCbBb1jZ+atHhv9MBZ0Ia9Pw==} peerDependencies: - '@tiptap/core': ^3.20.1 + '@tiptap/core': 3.22.4 - '@tiptap/extension-text@3.20.1': - resolution: {integrity: sha512-7PlIbYW8UenV6NPOXHmv8IcmPGlGx6HFq66RmkJAOJRPXPkTLAiX0N8rQtzUJ6jDEHqoJpaHFEHJw0xzW1yF+A==} + '@tiptap/extension-text@3.22.4': + resolution: {integrity: sha512-mM69uUW5cSxIhyEpWXi/YcfyupcJMDLCPEfYi62awH0iOP/LRoCv/nHjJq4Hyj/KxRJbe8HKwIUnqaCUf7m5Pg==} peerDependencies: - '@tiptap/core': ^3.20.1 + '@tiptap/core': 3.22.4 - '@tiptap/extension-underline@3.20.1': - resolution: {integrity: sha512-fmHvDKzwCgnZUwRreq8tYkb1YyEwgzZ6QQkAQ0CsCRtvRMqzerr3Duz0Als4i8voZTuGDEL3VR6nAJbLAb/wPg==} + '@tiptap/extension-underline@3.22.4': + resolution: {integrity: sha512-08kGdbhIrA6h10GWXqOkqIveaBj5tmxclK208/nUIAlonI9hPd739vu7fmVtpnmqCnSSNpoRtU4u6Gj5at0ZpA==} peerDependencies: - '@tiptap/core': ^3.20.1 + '@tiptap/core': 3.22.4 - '@tiptap/extensions@3.20.1': - resolution: {integrity: sha512-JRc/v+OBH0qLTdvQ7HvHWTxGJH73QOf1MC0R8NhOX2QnAbg2mPFv1h+FjGa2gfLGuCXBdWQomjekWkUKbC4e5A==} + '@tiptap/extensions@3.22.4': + resolution: {integrity: sha512-fOe8VptJvLPs32bNdUYo8SRyljwqKNQVXWW056VoXIc5en/59OdJlJQVeHI0jRRciH3MtrqODi/gfJR0VHNZ8A==} peerDependencies: - '@tiptap/core': ^3.20.1 - '@tiptap/pm': ^3.20.1 + '@tiptap/core': 3.22.4 + '@tiptap/pm': 3.22.4 - '@tiptap/pm@3.20.1': - resolution: {integrity: sha512-6kCiGLvpES4AxcEuOhb7HR7/xIeJWMjZlb6J7e8zpiIh5BoQc7NoRdctsnmFEjZvC19bIasccshHQ7H2zchWqw==} + '@tiptap/pm@3.22.4': + resolution: {integrity: sha512-hj8Qka6WcHRllHUdeSjDnq2XaisUo4KsoGJc1WcFpoa1Yd+OeD861zUMnV7DFVGdZRy45Obht0CUYJpXQ4yA4w==} - '@tiptap/react@3.20.1': - resolution: {integrity: sha512-UH1NpVpCaZBGB3Yr5N6aTS+rsCMDl9wHfrt/w+6+Gz4KHFZ2OILA82hELxZzhNc1Lmjz8vgCArKcsYql9gbzJA==} + '@tiptap/react@3.22.4': + resolution: {integrity: sha512-XIQZPwLakR1t8+Q1UeCpr+kUHDWxpJzGy9r2xUi3mpPd6Wh8dtNltScBkUlCcr0sqc6J1GF6Is02JJVQGmCZMA==} peerDependencies: - '@tiptap/core': ^3.20.1 - '@tiptap/pm': ^3.20.1 + '@tiptap/core': 3.22.4 + '@tiptap/pm': 3.22.4 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 '@types/react-dom': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tiptap/starter-kit@3.20.1': - resolution: {integrity: sha512-opqWxL/4OTEiqmVC0wsU4o3JhAf6LycJ2G/gRIZVAIFLljI9uHfpPMTFGxZ5w9IVVJaP5PJysfwW/635kKqkrw==} + '@tiptap/starter-kit@3.22.4': + resolution: {integrity: sha512-qWjw+vfdin1rzMRpRU4cC5tLTwMJtUpXeQukv+6mOqqvhptuwuZBjUHImVEJaSPoHXS7+1ut+nTnrLyWyEuE5Q==} '@tree-sitter-grammars/tree-sitter-yaml@0.7.1': resolution: {integrity: sha512-AynBwkIoQCTgjDR33bDUp9Mqq+YTco0is3n5hRApMqG9of/6A4eQsfC1/uSEeHSUyMQSYawcAWamsexnVpIP4Q==} @@ -4857,19 +5488,21 @@ packages: tree-sitter: optional: true - '@trpc/client@11.12.0': - resolution: {integrity: sha512-zTwFKQdE99pvNm7kXFdHo5xIQpGqpQJHtqVkT9o+i8h/0fbDOUBEEbFVICiMsNA+GiXskoaDRX2l+z6ir+Ug3w==} + '@trpc/client@11.16.0': + resolution: {integrity: sha512-TxIzm7OoK3baKZ0XCbuMUbI3GhgjcbKHIc4nWVKaRpCRnbSh0T31BT6fTPYwtnA/Nur8pBCGqC2B4J5hEPiPFQ==} + hasBin: true peerDependencies: - '@trpc/server': 11.12.0 + '@trpc/server': 11.16.0 typescript: '>=5.7.2' - '@trpc/next@11.12.0': - resolution: {integrity: sha512-e1EQoA2Jyzag77XVdiD+iv7WjDnT8FFIPzpshaU5PNTaj/OX/ELlP8VqERxnI6qnNI6LLBcbabfXGukmi5byug==} + '@trpc/next@11.16.0': + resolution: {integrity: sha512-6KyedRnGd7wZ44crr7oZ/fHxVDPkyItvg2PS6kfhM5Y6yLlBcEsMOhqxqKQNQZHBjAtnQzZjPuCslP05gZ6BSA==} + hasBin: true peerDependencies: '@tanstack/react-query': ^5.59.15 - '@trpc/client': 11.12.0 - '@trpc/react-query': 11.12.0 - '@trpc/server': 11.12.0 + '@trpc/client': 11.16.0 + '@trpc/react-query': 11.16.0 + '@trpc/server': 11.16.0 next: '*' react: '>=16.8.0' react-dom: '>=16.8.0' @@ -4880,63 +5513,70 @@ packages: '@trpc/react-query': optional: true - '@trpc/react-query@11.12.0': - resolution: {integrity: sha512-SLJLlQw0XVc+oVD5RITLl0G7cAFJ4oSJXUcblTS8CKUET+J4r/Ot2hKfX+qhENcFM1ChllbwMrCbUHNOH7qU1A==} + '@trpc/react-query@11.16.0': + resolution: {integrity: sha512-ah6ULOu4k7lCEFAEoEgqg14YPVu1lnCVVYcz8TP7avPPKwtcB0CbFKYve3ElRP+V5DoBT75Q+G66bRdR+rQ5fg==} peerDependencies: '@tanstack/react-query': ^5.80.3 - '@trpc/client': 11.12.0 - '@trpc/server': 11.12.0 + '@trpc/client': 11.16.0 + '@trpc/server': 11.16.0 react: '>=18.2.0' typescript: '>=5.7.2' - '@trpc/server@11.12.0': - resolution: {integrity: sha512-rpZnf5FUjNndE/AjGIy+FvEHR52iBd0u0wySqWCwXj67wraj3qCuBr5Opcf0Te/g67C/YztqceFkLoG0r4mp4Q==} + '@trpc/server@11.16.0': + resolution: {integrity: sha512-XgGuUMddrUTd04+za/WE5GFuZ1/YU9XQG0t3VL5WOIu2JspkOlq6k4RYEiqS6HSJt+S0RXaPdIoE2anIP/BBRQ==} + hasBin: true peerDependencies: typescript: '>=5.7.2' - '@trpc/tanstack-react-query@11.12.0': - resolution: {integrity: sha512-CIOR3shjVgvTcsbsqb4X2pQCbJ1I2+2j6tqDX4aFKLdqz0S32Y+iPH3ArDowrlS0npWycfkgsEEX3qwgP0j0vg==} + '@trpc/tanstack-react-query@11.16.0': + resolution: {integrity: sha512-kfNYJ5NCk67tmRCO/QWCycJmRamuEKmZf1HRG8yCBl8aTJdTwVq7l6AffFIMab3Q+NmQzwP8XXkAEK/EelKYOA==} + hasBin: true peerDependencies: '@tanstack/react-query': ^5.80.3 - '@trpc/client': 11.12.0 - '@trpc/server': 11.12.0 + '@trpc/client': 11.16.0 + '@trpc/server': 11.16.0 react: '>=18.2.0' typescript: '>=5.7.2' '@tsconfig/svelte@1.0.13': resolution: {integrity: sha512-5lYJP45Xllo4yE/RUBccBT32eBlRDbqN8r1/MIvQbKxW3aFqaYPCNgm8D5V20X4ShHcwvYWNlKg3liDh1MlBoA==} - '@turbo/gen-darwin-64@2.8.16': - resolution: {integrity: sha512-WhRCknwFe4/1UAd24i+gUqGK8Hko06gaRVT0eL7H+cMO8ucBBueyvSx/zBiYvI6mnTkiVvf9frAhEKczJNdfaw==} + '@turbo/darwin-64@2.9.6': + resolution: {integrity: sha512-X/56SnVXIQZBLKwniGTwEQTGmtE5brSACnKMBWpY3YafuxVYefrC2acamfjgxP7BG5w3I+6jf0UrLoSzgPcSJg==} cpu: [x64] os: [darwin] - '@turbo/gen-darwin-arm64@2.8.16': - resolution: {integrity: sha512-AZOzR0Q8LP11EXR4PzmS0hawWVfNn5cMKaE7tIcej0JhX15tdCtYyPRy3mvyiukairhT18E0M5gxn+I6sbG5uQ==} + '@turbo/darwin-arm64@2.9.6': + resolution: {integrity: sha512-aalBeSl4agT/QtYGDyf/XLajedWzUC9Vg/pm/YO6QQ93vkQ91Vz5uK1ta5RbVRDozQSz4njxUNqRNmOXDzW+qw==} cpu: [arm64] os: [darwin] - '@turbo/gen-linux-64@2.8.16': - resolution: {integrity: sha512-zS3Tg3kZffCFkRr41Tly7CHJffYrjCEGwCPMzguUpsnsqA6SRQuzrvQPzamZ/RLXwKDLBY2UtUr5NqQhtJA3fA==} + '@turbo/gen@2.9.6': + resolution: {integrity: sha512-94E/WMvxidupdafLgh6zmlgeWXx1NAkw0d5Q508xDkrPzUNZEPdweK90Gbs3gNDgNFQ7XntZQqvrsCGggeid5A==} + hasBin: true + + '@turbo/linux-64@2.9.6': + resolution: {integrity: sha512-YKi05jnNHaD7vevgYwahpzGwbsNNTwzU2c7VZdmdFm7+cGDP4oREUWSsainiMfRqjRuolQxBwRn8wf1jmu+YZA==} cpu: [x64] os: [linux] - '@turbo/gen-linux-arm64@2.8.16': - resolution: {integrity: sha512-+SLJP0oG1jDj1It8IuW00dXREqL2kNY110DRZZzkVcLvcvbrCNGLYpjUhKfqjV0MapmLlb7++1lbNNNCPQ7h0g==} + '@turbo/linux-arm64@2.9.6': + resolution: {integrity: sha512-02o/ZS69cOYEDczXvOB2xmyrtzjQ2hVFtWZK1iqxXUfzMmTjZK4UumrfNnjckSg+gqeBfnPRHa0NstA173Ik3g==} cpu: [arm64] os: [linux] - '@turbo/gen-windows-64@2.8.16': - resolution: {integrity: sha512-a5+vw5XfGeBqX54mfYRvLb/rq5Z6Ys5cihNAre0+NZaSNufjj+uWnK4NeMNLXcihJZhOvbAwphPvJuPgKW5hCg==} + '@turbo/windows-64@2.9.6': + resolution: {integrity: sha512-wVdQjvnBI15wB6JrA+43CtUtagjIMmX6XYO758oZHAsCNSxqRlJtdyujih0D8OCnwCRWiGWGI63zAxR0hO6s9g==} cpu: [x64] os: [win32] - '@turbo/gen@2.8.16': - resolution: {integrity: sha512-17IFXcVnQ8qaC8kMtRKqFXZKerSpXunIu1E3F9eHSeBIVm2jr4x9KpQdgbXSgLZuLfPCb099JJdgpgPI7tJxNw==} - hasBin: true + '@turbo/windows-arm64@2.9.6': + resolution: {integrity: sha512-1XUUyWW0W6FTSqGEhU8RHVqb2wP1SPkr7hIvBlMEwH9jr+sJQK5kqeosLJ/QaUv4ecSAd1ZhIrLoW7qslAzT4A==} + cpu: [arm64] + os: [win32] - '@types/adm-zip@0.5.7': - resolution: {integrity: sha512-DNEs/QvmyRLurdQPChqq0Md4zGvPwHerAJYWk9l2jCbD1VPpnzRJorOdiq4zsw09NFbYnhfsoEhWtxIzXpn2yw==} + '@types/adm-zip@0.5.8': + resolution: {integrity: sha512-RVVH7QvZYbN+ihqZ4kX/dMiowf6o+Jk1fNwiSdx0NahBJLU787zkULhGhJM8mf/obmLGmgdMM0bXsQTmyfbR7Q==} '@types/aws-lambda@8.10.146': resolution: {integrity: sha512-3BaDXYTh0e6UCJYL/jwV/3+GRslSc08toAiZSmleYtkAUyV5rtvdPYxrG/88uqvTuT6sb27WE9OS90ZNTIuQ0g==} @@ -5046,9 +5686,6 @@ packages: '@types/http-errors@2.0.4': resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - '@types/inquirer@9.0.9': - resolution: {integrity: sha512-/mWx5136gts2Z2e5izdoRCo46lPp5TMs9R15GTSsgg/XnZyxDWVqoVU3R9lWnccKpqwsJLvRoxbCjoJtZB7DSw==} - '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} @@ -5061,18 +5698,9 @@ packages: '@types/keygrip@1.0.6': resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==} - '@types/linkify-it@5.0.0': - resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} - - '@types/markdown-it@14.1.2': - resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} - '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - '@types/mdurl@2.0.0': - resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} - '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} @@ -5091,17 +5719,14 @@ packages: '@types/node@18.19.50': resolution: {integrity: sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==} - '@types/node@24.12.0': - resolution: {integrity: sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==} + '@types/node@24.12.2': + resolution: {integrity: sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/pg@8.18.0': - resolution: {integrity: sha512-gT+oueVQkqnj6ajGJXblFR4iavIXWsGAFCk3dP4Kki5+a9R4NMt0JARdk6s8cUKcfUoqP5dAtDSLU8xYUTFV+Q==} - - '@types/picomatch@4.0.2': - resolution: {integrity: sha512-qHHxQ+P9PysNEGbALT8f8YOSHW0KJu6l2xU8DYY0fu/EmGxXdVnuTLvFUvBgPJMSqXq29SYHveejeAha+4AYgA==} + '@types/pg@8.20.0': + resolution: {integrity: sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow==} '@types/prismjs@1.26.6': resolution: {integrity: sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==} @@ -5147,9 +5772,6 @@ packages: '@types/swagger-ui-react@5.18.0': resolution: {integrity: sha512-c2M9adVG7t28t1pq19K9Jt20VLQf0P/fwJwnfcmsVVsdkwCWhRmbKDu+tIs0/NGwJ/7GY8lBx+iKZxuDI5gDbw==} - '@types/through@0.0.33': - resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} - '@types/triple-beam@1.3.5': resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} @@ -5174,63 +5796,63 @@ packages: '@types/xml2js@0.4.14': resolution: {integrity: sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==} - '@typescript-eslint/eslint-plugin@8.57.0': - resolution: {integrity: sha512-qeu4rTHR3/IaFORbD16gmjq9+rEs9fGKdX0kF6BKSfi+gCuG3RCKLlSBYzn/bGsY9Tj7KE/DAQStbp8AHJGHEQ==} + '@typescript-eslint/eslint-plugin@8.58.2': + resolution: {integrity: sha512-aC2qc5thQahutKjP+cl8cgN9DWe3ZUqVko30CMSZHnFEHyhOYoZSzkGtAI2mcwZ38xeImDucI4dnqsHiOYuuCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.57.0 + '@typescript-eslint/parser': ^8.58.2 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.57.0': - resolution: {integrity: sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==} + '@typescript-eslint/parser@8.58.2': + resolution: {integrity: sha512-/Zb/xaIDfxeJnvishjGdcR4jmr7S+bda8PKNhRGdljDM+elXhlvN0FyPSsMnLmJUrVG9aPO6dof80wjMawsASg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.57.0': - resolution: {integrity: sha512-pR+dK0BlxCLxtWfaKQWtYr7MhKmzqZxuii+ZjuFlZlIGRZm22HnXFqa2eY+90MUz8/i80YJmzFGDUsi8dMOV5w==} + '@typescript-eslint/project-service@8.58.2': + resolution: {integrity: sha512-Cq6UfpZZk15+r87BkIh5rDpi38W4b+Sjnb8wQCPPDDweS/LRCFjCyViEbzHk5Ck3f2QDfgmlxqSa7S7clDtlfg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.57.0': - resolution: {integrity: sha512-nvExQqAHF01lUM66MskSaZulpPL5pgy5hI5RfrxviLgzZVffB5yYzw27uK/ft8QnKXI2X0LBrHJFr1TaZtAibw==} + '@typescript-eslint/scope-manager@8.58.2': + resolution: {integrity: sha512-SgmyvDPexWETQek+qzZnrG6844IaO02UVyOLhI4wpo82dpZJY9+6YZCKAMFzXb7qhx37mFK1QcPQ18tud+vo6Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.57.0': - resolution: {integrity: sha512-LtXRihc5ytjJIQEH+xqjB0+YgsV4/tW35XKX3GTZHpWtcC8SPkT/d4tqdf1cKtesryHm2bgp6l555NYcT2NLvA==} + '@typescript-eslint/tsconfig-utils@8.58.2': + resolution: {integrity: sha512-3SR+RukipDvkkKp/d0jP0dyzuls3DbGmwDpVEc5wqk5f38KFThakqAAO0XMirWAE+kT00oTauTbzMFGPoAzB0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.57.0': - resolution: {integrity: sha512-yjgh7gmDcJ1+TcEg8x3uWQmn8ifvSupnPfjP21twPKrDP/pTHlEQgmKcitzF/rzPSmv7QjJ90vRpN4U+zoUjwQ==} + '@typescript-eslint/type-utils@8.58.2': + resolution: {integrity: sha512-Z7EloNR/B389FvabdGeTo2XMs4W9TjtPiO9DAsmT0yom0bwlPyRjkJ1uCdW1DvrrrYP50AJZ9Xc3sByZA9+dcg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.57.0': - resolution: {integrity: sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==} + '@typescript-eslint/types@8.58.2': + resolution: {integrity: sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.57.0': - resolution: {integrity: sha512-m7faHcyVg0BT3VdYTlX8GdJEM7COexXxS6KqGopxdtkQRvBanK377QDHr4W/vIPAR+ah9+B/RclSW5ldVniO1Q==} + '@typescript-eslint/typescript-estree@8.58.2': + resolution: {integrity: sha512-ELGuoofuhhoCvNbQjFFiobFcGgcDCEm0ThWdmO4Z0UzLqPXS3KFvnEZ+SHewwOYHjM09tkzOWXNTv9u6Gqtyuw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.57.0': - resolution: {integrity: sha512-5iIHvpD3CZe06riAsbNxxreP+MuYgVUsV0n4bwLH//VJmgtt54sQeY2GszntJ4BjYCpMzrfVh2SBnUQTtys2lQ==} + '@typescript-eslint/utils@8.58.2': + resolution: {integrity: sha512-QZfjHNEzPY8+l0+fIXMvuQ2sJlplB4zgDZvA+NmvZsZv3EQwOcc1DuIU1VJUTWZ/RKouBMhDyNaBMx4sWvrzRA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.57.0': - resolution: {integrity: sha512-zm6xx8UT/Xy2oSr2ZXD0pZo7Jx2XsCoID2IUh9YSTFRu7z+WdwYTRk6LhUftm1crwqbuoF6I8zAFeCMw0YjwDg==} + '@typescript-eslint/visitor-keys@8.58.2': + resolution: {integrity: sha512-f1WO2Lx8a9t8DARmcWAUPJbu0G20bJlj8L4z72K00TMeJAoyLr/tHhI/pzYBLrR4dXWkcxO1cWYZEOX8DKHTqA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@umami/node@0.4.0': @@ -5256,54 +5878,54 @@ packages: '@videojs/xhr@2.7.0': resolution: {integrity: sha512-giab+EVRanChIupZK7gXjHy90y3nncA2phIOyG3Ne5fvpiMJzvqYwiTOnEVW2S4CoYcuKJkomat7bMXA/UoUZQ==} - '@vitejs/plugin-react@5.1.4': - resolution: {integrity: sha512-VIcFLdRi/VYRU8OL/puL7QXMYafHmqOnwTZY50U1JPlCNj30PxCMx65c494b1K9be9hX83KVt0+gTEwTWLqToA==} + '@vitejs/plugin-react@5.2.0': + resolution: {integrity: sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: - vite: '>=7.3.1' + vite: '>=8.0.10' - '@vitest/coverage-v8@4.0.18': - resolution: {integrity: sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==} + '@vitest/coverage-v8@4.1.5': + resolution: {integrity: sha512-38C0/Ddb7HcRG0Z4/DUem8x57d2p9jYgp18mkaYswEOQBGsI1CG4f/hjm0ZCeaJfWhSZ4k7jgs29V1Zom7Ki9A==} peerDependencies: - '@vitest/browser': 4.0.18 - vitest: 4.0.18 + '@vitest/browser': 4.1.5 + vitest: 4.1.5 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@4.0.18': - resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==} + '@vitest/expect@4.1.5': + resolution: {integrity: sha512-PWBaRY5JoKuRnHlUHfpV/KohFylaDZTupcXN1H9vYryNLOnitSw60Mw9IAE2r67NbwwzBw/Cc/8q9BK3kIX8Kw==} - '@vitest/mocker@4.0.18': - resolution: {integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==} + '@vitest/mocker@4.1.5': + resolution: {integrity: sha512-/x2EmFC4mT4NNzqvC3fmesuV97w5FC903KPmey4gsnJiMQ3Be1IlDKVaDaG8iqaLFHqJ2FVEkxZk5VmeLjIItw==} peerDependencies: msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0-0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@4.0.18': - resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==} + '@vitest/pretty-format@4.1.5': + resolution: {integrity: sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g==} - '@vitest/runner@4.0.18': - resolution: {integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==} + '@vitest/runner@4.1.5': + resolution: {integrity: sha512-2D+o7Pr82IEO46YPpoA/YU0neeyr6FTerQb5Ro7BUnBuv6NQtT/kmVnczngiMEBhzgqz2UZYl5gArejsyERDSQ==} - '@vitest/snapshot@4.0.18': - resolution: {integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==} + '@vitest/snapshot@4.1.5': + resolution: {integrity: sha512-zypXEt4KH/XgKGPUz4eC2AvErYx0My5hfL8oDb1HzGFpEk1P62bxSohdyOmvz+d9UJwanI68MKwr2EquOaOgMQ==} - '@vitest/spy@4.0.18': - resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==} + '@vitest/spy@4.1.5': + resolution: {integrity: sha512-2lNOsh6+R2Idnf1TCZqSwYlKN2E/iDlD8sgU59kYVl+OMDmvldO1VDk39smRfpUNwYpNRVn3w4YfuC7KfbBnkQ==} - '@vitest/ui@4.0.18': - resolution: {integrity: sha512-CGJ25bc8fRi8Lod/3GHSvXRKi7nBo3kxh0ApW4yCjmrWmRmlT53B5E08XRSZRliygG0aVNxLrBEqPYdz/KcCtQ==} + '@vitest/ui@4.1.5': + resolution: {integrity: sha512-3Z9HNFiV0IF1fk0JPiK+7kE1GcaIPefQQIBYur6PM5yFIq6agys3uqP/0t966e1wXfmjbRCHDe7qW236Xjwnag==} peerDependencies: - vitest: 4.0.18 + vitest: 4.1.5 - '@vitest/utils@4.0.18': - resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} + '@vitest/utils@4.1.5': + resolution: {integrity: sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug==} '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -5353,6 +5975,7 @@ packages: '@xmldom/xmldom@0.8.10': resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} engines: {node: '>=10.0.0'} + deprecated: this version has critical issues, please update to the latest version '@xstate/fsm@1.6.5': resolution: {integrity: sha512-b5o1I6aLNeYlU/3CPlj/Z91ybk1gUsKT+5NAJI+2W4UjvS5KLG28K9v5UvNoFVjHV8PajVZ00RH3vnjyQO7ZAw==} @@ -5395,18 +6018,13 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.16.0: resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} engines: {node: '>=0.4.0'} hasBin: true - adm-zip@0.5.16: - resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} + adm-zip@0.5.17: + resolution: {integrity: sha512-+Ut8d9LLqwEvHHJl1+PIHqoyDxFgVN847JTVM3Izi3xHDWPE4UtzzXysMZQs64DMcrJfBeS/uoEP4AD3HQHnQQ==} engines: {node: '>=12.0'} aes-decrypter@4.0.2: @@ -5459,10 +6077,6 @@ packages: ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - ansi-escapes@7.0.0: resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} engines: {node: '>=18'} @@ -5517,10 +6131,6 @@ packages: arktype@2.1.20: resolution: {integrity: sha512-IZCEEXaJ8g+Ijd59WtSYwtjnqXiwM8sWQ5EjGamcto7+HVN9eK0C4p0zDlCuAwWhpqr6fIBkxPuYDl4/Mcj/+Q==} - array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} - array-buffer-byte-length@1.0.2: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} @@ -5528,10 +6138,6 @@ packages: array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - array-includes@3.1.9: resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} engines: {node: '>= 0.4'} @@ -5544,18 +6150,10 @@ packages: resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} engines: {node: '>= 0.4'} - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - array.prototype.flat@1.3.3: resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} engines: {node: '>= 0.4'} - array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - array.prototype.flatmap@1.3.3: resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} engines: {node: '>= 0.4'} @@ -5564,10 +6162,6 @@ packages: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} engines: {node: '>= 0.4'} - arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} - arraybuffer.prototype.slice@1.0.4: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} @@ -5586,8 +6180,8 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} - ast-v8-to-istanbul@0.3.10: - resolution: {integrity: sha512-p4K7vMz2ZSk3wN8l5o3y2bJAoZXT3VuJI5OLTATY/01CYWumWvwkUw0SqDBnNq6IiTO3qDa1eSQDibAV8g7XOQ==} + ast-v8-to-istanbul@1.0.0: + resolution: {integrity: sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==} async-lock@1.4.1: resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==} @@ -5624,8 +6218,8 @@ packages: resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} engines: {node: '>=4'} - axios@1.12.2: - resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==} + axios@1.15.0: + resolution: {integrity: sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==} axios@1.9.0: resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==} @@ -5694,10 +6288,6 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} - baseline-browser-mapping@2.8.29: - resolution: {integrity: sha512-sXdt2elaVnhpDNRDz+1BDx1JQoJRuNk7oVlAlbGiFkLikHCAQiccexF/9e91zVi6RCgqspl04aP+6Cnl9zRLrA==} - hasBin: true - baseline-browser-mapping@2.9.19: resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} hasBin: true @@ -5712,8 +6302,8 @@ packages: before-after-hook@4.0.0: resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==} - better-sqlite3@12.6.2: - resolution: {integrity: sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA==} + better-sqlite3@12.9.0: + resolution: {integrity: sha512-wqUv4Gm3toFpHDQmaKD4QhZm3g1DjUBI0yzS4UBl6lElUmXFYdTQmmEDpAFa5o8FiFiymURypEnfVHzILKaxqQ==} engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x} bidi-js@1.0.3: @@ -5738,28 +6328,14 @@ packages: resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} engines: {node: '>=10'} - brace-expansion@5.0.2: - resolution: {integrity: sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==} - engines: {node: 20 || >=22} - - brace-expansion@5.0.4: - resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} engines: {node: 18 || 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.24.2: - resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - browserslist@4.24.4: - resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - browserslist@4.28.1: resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -5790,26 +6366,14 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - call-bind-apply-helpers@1.0.1: - resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} - engines: {node: '>= 0.4'} - call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} - call-bind@1.0.8: resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} engines: {node: '>= 0.4'} - call-bound@1.0.3: - resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} - engines: {node: '>= 0.4'} - call-bound@1.0.4: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} @@ -5826,17 +6390,14 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001755: - resolution: {integrity: sha512-44V+Jm6ctPj7R52Na4TLi3Zri4dWUljJd+RDm+j8LtNCc/ihLCT+X1TzoOAkRETEWqjuLnh9581Tl80FvK7jVA==} - caniuse-lite@1.0.30001766: resolution: {integrity: sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@6.2.1: - resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==} + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} chalk@2.4.2: @@ -5851,9 +6412,6 @@ packages: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - change-case@5.4.4: - resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} - char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -5909,10 +6467,6 @@ packages: resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} engines: {node: '>=6'} - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - cli-high@0.4.3: resolution: {integrity: sha512-YbwZhmK0fpwVn3bsbYiYdkseXFcGvSVkX+fl0CY73PAz77Uzkr46X3Ifs4V7NgwfvCqGx+6C5zEi8SL8m9lqtg==} hasBin: true @@ -5922,10 +6476,6 @@ packages: engines: {node: '>=8.0.0', npm: '>=5.0.0'} hasBin: true - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - cli-table3@0.6.5: resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} engines: {node: 10.* || >= 12.*} @@ -5948,10 +6498,6 @@ packages: resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} engines: {node: '>=20'} - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -6026,8 +6572,8 @@ packages: resolution: {integrity: sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==} engines: {node: '>=18'} - conventional-changelog-conventionalcommits@9.3.0: - resolution: {integrity: sha512-kYFx6gAyjSIMwNtASkI3ZE99U1fuVDJr0yTYgVy+I2QG46zNZfl2her+0+eoviG82c5WQvW1jMt1eOQTeJLodA==} + conventional-changelog-conventionalcommits@9.3.1: + resolution: {integrity: sha512-dTYtpIacRpcZgrvBYvBfArMmK2xvIpv2TaxM0/ZI5CBtNUzvF2x0t15HsbRABWprS6UPmvj+PzHVjSx4qAVKyw==} engines: {node: '>=18'} conventional-changelog-writer@8.0.0: @@ -6054,6 +6600,9 @@ packages: cookie-es@1.2.2: resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + cookie-es@3.0.1: + resolution: {integrity: sha512-1HqK6V6Prrm7cHzmjtCzfa370ljqPQoNeWIh5NXYqWwUI2l3DZlzjHHh25ZvJIPfwkiYnCvHykE2MIJkEVD1Rg==} + cookie@0.7.2: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} @@ -6105,9 +6654,6 @@ packages: resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} engines: {node: '>= 14'} - crelt@1.0.6: - resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} - cross-env@10.1.0: resolution: {integrity: sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==} engines: {node: '>=20'} @@ -6134,8 +6680,8 @@ packages: resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} engines: {node: '>=12'} - css-tree@3.1.0: - resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} css.escape@1.5.1: @@ -6146,10 +6692,6 @@ packages: engines: {node: '>=4'} hasBin: true - cssstyle@6.0.1: - resolution: {integrity: sha512-IoJs7La+oFp/AB033wBStxNOJt4+9hHMxsXUPANcoXL2b3W4DZKghlJ2cI/eyeRZIQ9ysvYEorVhjrcYctWbog==} - engines: {node: '>=20'} - csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -6204,32 +6746,20 @@ packages: resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} - data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} - data-view-byte-length@1.0.2: resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} engines: {node: '>= 0.4'} - data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} - data-view-byte-offset@1.0.1: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} - dayjs@1.11.19: - resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==} + dayjs@1.11.20: + resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} @@ -6248,24 +6778,6 @@ packages: supports-color: optional: true - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -6303,9 +6815,6 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -6333,9 +6842,6 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - destr@2.0.3: - resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} - destr@2.0.5: resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} @@ -6370,24 +6876,25 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dns-caching@0.2.9: resolution: {integrity: sha512-FSvmI/dC/HXYIyX2m7MvQt36Yut49GCw3hWaDqaTgLLmKyLs5lmv/jhmNKqWjSF2vRGTgFYL0G3mwcjLlKXj0w==} - docker-compose@1.3.1: - resolution: {integrity: sha512-rF0wH69G3CCcmkN9J1RVMQBaKe8o77LT/3XmqcLIltWWVxcWAzp2TnO7wS3n/umZHN3/EVrlT3exSBMal+Ou1w==} + docker-compose@1.4.2: + resolution: {integrity: sha512-rPHigTKGaEHpkUmfd69QgaOp+Os5vGJwG/Ry8lcr8W/382AmI+z/D7qoa9BybKIkqNppaIbs8RYeHSevdQjWww==} engines: {node: '>= 6.0.0'} - docker-modem@5.0.6: - resolution: {integrity: sha512-ens7BiayssQz/uAxGzH8zGXCtiV24rRWXdjNha5V4zSOcxmAZsfGVm/PPFbwQdqEkDnhG+SyR9E3zSHUbOKXBQ==} + docker-modem@5.0.7: + resolution: {integrity: sha512-XJgGhoR/CLpqshm4d3L7rzH6t8NgDFUIIpztYlLHIApeJjMZKYJMz2zxPsYxnejq5h3ELYSw/RBsi3t5h7gNTA==} engines: {node: '>= 8.0'} - dockerode@4.0.9: - resolution: {integrity: sha512-iND4mcOWhPaCNh54WmK/KoSb35AFqPAUWFMffTQcp52uQt36b5uNwEJTSXntJZBbeGad72Crbi/hvDIv6us/6Q==} + dockerode@4.0.10: + resolution: {integrity: sha512-8L/P9JynLBiG7/coiA4FlQXegHltRqS0a+KqI44P1zgQh8QLHTg7FKOwhkBgSJwZTeHsq30WRoVFLuwkfK0YFg==} engines: {node: '>= 8.0'} + dockerode@5.0.0: + resolution: {integrity: sha512-C52mvJ+7lcyhWNfrzVfFsbTrBfy/ezE9FGEYLpu17FUeBcCkxERk9nN7uDl/478ynDiQ4U+5DbQC2vENHkVEtQ==} + engines: {node: '>= 14.17'} + doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -6398,12 +6905,12 @@ packages: dom-walk@0.1.2: resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} - dompurify@3.2.6: - resolution: {integrity: sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==} - dompurify@3.3.3: resolution: {integrity: sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==} + dompurify@3.4.1: + resolution: {integrity: sha512-JahakDAIg1gyOm7dlgWSDjV4n7Ip2PKR55NIT6jrMfIgLFgWo81vdr1/QGqWtFNRqXP9UV71oVePtjqS2ebnPw==} + dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} @@ -6424,20 +6931,20 @@ packages: resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} - dotenv@17.3.1: - resolution: {integrity: sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==} + dotenv@17.4.2: + resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} engines: {node: '>=12'} drange@1.1.1: resolution: {integrity: sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==} engines: {node: '>=4'} - drizzle-kit@0.31.9: - resolution: {integrity: sha512-GViD3IgsXn7trFyBUUHyTFBpH/FsHTxYJ66qdbVggxef4UBPHRYxQaRzYLTuekYnk9i5FIEL9pbBIwMqX/Uwrg==} + drizzle-kit@0.31.10: + resolution: {integrity: sha512-7OZcmQUrdGI+DUNNsKBn1aW8qSoKuTH7d0mYgSP8bAzdFzKoovxEFnoGQp2dVs82EOJeYycqRtciopszwUf8bw==} hasBin: true - drizzle-orm@0.45.1: - resolution: {integrity: sha512-Te0FOdKIistGNPMq2jscdqngBRfBpC8uMFVwqjf6gtTVJHIQ/dosgV/CLBU2N4ZJBsXL5savCba9b0YJskKdcA==} + drizzle-orm@0.45.2: + resolution: {integrity: sha512-kY0BSaTNYWnoDMVoyY8uxmyHjpJW1geOmBMdSSicKo9CIIWkSxMIj2rkeSR51b8KAPB7m+qysjuHme5nKP+E5Q==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' '@cloudflare/workers-types': '>=4' @@ -6544,18 +7051,12 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - effect@3.19.19: - resolution: {integrity: sha512-Yc8U/SVXo2dHnaP7zNBlAo83h/nzSJpi7vph6Hzyl4ulgMBIgPmz3UzOjb9sBgpFE00gC0iETR244sfXDNLHRg==} - - electron-to-chromium@1.5.114: - resolution: {integrity: sha512-DFptFef3iktoKlFQK/afbo274/XNWD00Am0xa7M8FZUepHlHT8PEuiNBoRfFHbH1okqN58AlhbJ4QTkcnXorjA==} + effect@3.21.0: + resolution: {integrity: sha512-PPN80qRokCd1f015IANNhrwOnLO7GrrMQfk4/lnZRE/8j7UPWrNNjPV0uBrZutI/nHzernbW+J0hdqQysHiSnQ==} electron-to-chromium@1.5.282: resolution: {integrity: sha512-FCPkJtpst28UmFzd903iU7PdeVTfY0KAeJy+Lk0GLZRwgwYHn/irRcaCbQQOmr5Vytc/7rcavsYLvTM8RiHYhQ==} - electron-to-chromium@1.5.55: - resolution: {integrity: sha512-6maZ2ASDOTBtjt9FhqYPRnbvKU5tjG0IN9SztUOWYw2AzNDNpKJYLJmlK0/En4Hs/aiWnB+JZ+gW19PIGszgKg==} - emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -6589,14 +7090,10 @@ packages: resolution: {integrity: sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==} engines: {node: '>=10.2.0'} - enhanced-resolve@5.20.0: - resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==} + enhanced-resolve@5.20.1: + resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} engines: {node: '>=10.13.0'} - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - entities@6.0.1: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} @@ -6623,22 +7120,10 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} - - es-abstract@1.23.7: - resolution: {integrity: sha512-OygGC8kIcDhXX+6yAZRGLqwi2CmEXCbLQixeGUgYeR+Qwlppqmo7DIDr8XibtEBZp+fJcoYpoatp5qwLMEdcqQ==} - engines: {node: '>= 0.4'} - es-abstract@1.24.0: resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} engines: {node: '>= 0.4'} - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -6654,49 +7139,37 @@ packages: es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} + es-module-lexer@2.0.0: + resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - es-set-tostringtag@2.1.0: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - es-shim-unscopables@1.1.0: resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} engines: {node: '>= 0.4'} - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - es-to-primitive@1.3.0: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - esbuild-register@3.6.0: - resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} - peerDependencies: - esbuild: '>=0.27.3' - esbuild@0.25.12: resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} engines: {node: '>=18'} hasBin: true - esbuild@0.27.3: - resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + esbuild@0.27.7: + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.28.0: + resolution: {integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==} engines: {node: '>=18'} hasBin: true @@ -6726,8 +7199,8 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-config-turbo@2.8.16: - resolution: {integrity: sha512-7JY6vlgFZWUH1YlLpxQjgia3bjcIpWxYahDQ/XfXSU5etv2KyEPY/O6jK/8Tg+Z2xjZm8ZQFgqK15K5MLIQAFA==} + eslint-config-turbo@2.9.6: + resolution: {integrity: sha512-yCZ2YcUKU2KtAO7fjqBQLI7bIc/cIH4lF/yk4ntSRDfsQiRpAtWaGTxqqMPVLZj5JpFfSZGceuM6YFHufJD5iA==} peerDependencies: eslint: '>6.6.0' turbo: '>2.0.0' @@ -6784,8 +7257,8 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-plugin-turbo@2.8.16: - resolution: {integrity: sha512-fhvTLe0PnyV72npfBi/IwwVMzkTnUw9MxS2S2Q0Oo1aed7woAtHwSL5DEdTTV6tXZSKbqRHaIbjV6rwx+1iRYA==} + eslint-plugin-turbo@2.9.6: + resolution: {integrity: sha512-mntEkRe71izva2mJHZGxH2ccOdySqXiNJf5tdzRabaxhudLCeonPUdTE6aNGOhgVeL1lclxg5/ibp3C/cpe+kQ==} peerDependencies: eslint: '>6.6.0' turbo: '>2.0.0' @@ -6871,6 +7344,9 @@ packages: eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + eventemitter3@5.0.4: + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -6891,8 +7367,8 @@ packages: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} - expect-type@1.2.2: - resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} extend@3.0.2: @@ -6911,6 +7387,9 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + fast-equals@5.3.3: resolution: {integrity: sha512-/boTcHZeIAQ2r/tL11voclBHDeP9WPxLt+tyAbVSyyXuUFyh0Tne7gJZTqGbxnvj79TjLdCXLOY7UIPhyG5MTw==} engines: {node: '>=6.0.0'} @@ -6940,11 +7419,15 @@ packages: fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fast-xml-builder@1.0.0: - resolution: {integrity: sha512-fpZuDogrAgnyt9oDDz+5DBz0zgPdPZz6D4IR7iESxRXElrlGTRkHJ9eEt+SACRJwT0FNFrt71DFQIUFBJfX/uQ==} + fast-xml-builder@1.1.5: + resolution: {integrity: sha512-4TJn/8FKLeslLAH3dnohXqE3QSoxkhvaMzepOIZytwJXZO69Bfz0HBdDHzOTOon6G59Zrk6VQ2bEiv1t61rfkA==} - fast-xml-parser@5.4.2: - resolution: {integrity: sha512-pw/6pIl4k0CSpElPEJhDppLzaixDEuWui2CUQQBH/ECDf7+y6YwA4Gf7Tyb0Rfe4DIMuZipYj4AEL0nACKglvQ==} + fast-xml-parser@5.7.1: + resolution: {integrity: sha512-8Cc3f8GUGUULg34pBch/KGyPLglS+OFs05deyOlY7fL2MTagYPKrVQNmR1fLF/yJ9PH5ZSTd3YDF6pnmeZU+zA==} + hasBin: true + + fast-xml-parser@5.7.2: + resolution: {integrity: sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w==} hasBin: true faster-babel-types@0.1.0: @@ -6953,8 +7436,8 @@ packages: peerDependencies: '@babel/types': ^7 - fastify@5.8.2: - resolution: {integrity: sha512-lZmt3navvZG915IE+f7/TIVamxIwmBd+OMB+O9WBzcpIwOo6F0LTh0sluoMFk5VkrKTvvrwIaoJPkir4Z+jtAg==} + fastify@5.8.5: + resolution: {integrity: sha512-Yqptv59pQzPgQUSIm87hMqHJmdkb1+GPxdE6vW6FRyVE9G86mt7rOghitiU4JHRaTyDUk9pfeKmDeu70lAwM4Q==} fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -7010,10 +7493,6 @@ packages: resolution: {integrity: sha512-VW2RfnmscZO5KgBY5XVyKREMW5nMZcxDy+buTOsL+zIPnBlbKm+00sgzoQzq1EVh4aALZLfKdwv6atBGcjvjrQ==} engines: {node: '>=20'} - find-up-simple@1.0.0: - resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} - engines: {node: '>=18'} - find-up-simple@1.0.1: resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} engines: {node: '>=18'} @@ -7037,8 +7516,8 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} @@ -7052,8 +7531,14 @@ packages: debug: optional: true - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + follow-redirects@1.16.0: + resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true for-each@0.3.5: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} @@ -7098,10 +7583,6 @@ packages: resolution: {integrity: sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==} engines: {node: '>=18'} - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - function.prototype.name@1.1.8: resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} engines: {node: '>= 0.4'} @@ -7129,14 +7610,6 @@ packages: resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} engines: {node: '>=18'} - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - - get-intrinsic@1.2.6: - resolution: {integrity: sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==} - engines: {node: '>= 0.4'} - get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -7145,8 +7618,8 @@ packages: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} - get-port@7.1.0: - resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} + get-port@7.2.0: + resolution: {integrity: sha512-afP4W205ONCuMoPBqcR6PSXnzX35KTcJygfJfcp+QY+uwm3p20p1YczWXhlICIzGMCxYBQcySEcOgsJcrkyobg==} engines: {node: '>=16'} get-proto@1.0.1: @@ -7169,10 +7642,6 @@ packages: resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} engines: {node: '>=18'} - get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} - get-symbol-description@1.1.0: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} @@ -7180,9 +7649,6 @@ packages: get-tsconfig@4.13.6: resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} - get-tsconfig@4.8.1: - resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} - git-hooks-list@4.1.1: resolution: {integrity: sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==} @@ -7230,9 +7696,6 @@ packages: globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -7265,18 +7728,10 @@ packages: has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - has-proto@1.2.0: resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} engines: {node: '>= 0.4'} - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -7317,8 +7772,8 @@ packages: highlightjs-vue@1.0.0: resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} - hono@4.12.7: - resolution: {integrity: sha512-jq9l1DM0zVIvsm3lv9Nw9nlJnMNPOcAtsbsgiUhWcFzPE99Gvo6yRTlszSLLYacMeQ6quHD6hMfId8crVHvexw==} + hono@4.12.15: + resolution: {integrity: sha512-qM0jDhFEaCBb4TxoW7f53Qrpv9RBiayUHo0S52JudprkhvpjIrGoU1mnnr29Fvd1U335ZFPZQY1wlkqgfGXyLg==} engines: {node: '>=16.9.0'} hook-std@4.0.0: @@ -7395,8 +7850,8 @@ packages: resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} - icu-minify@4.8.3: - resolution: {integrity: sha512-65Av7FLosNk7bPbmQx5z5XG2Y3T2GFppcjiXh4z1idHeVgQxlDpAmkGoYI0eFzAvrOnjpWTL5FmPDhsdfRMPEA==} + icu-minify@4.9.1: + resolution: {integrity: sha512-6NkfF9GHHFouqnz+wuiLjCWQiyxoEyJ5liUv4Jxxo/8wyhV7MY0L0iTEGDAVEa4aAD58WqTxFMa20S5nyMjwNw==} ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -7413,8 +7868,8 @@ packages: resolution: {integrity: sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==} engines: {node: '>=0.10.0'} - immutable@5.0.2: - resolution: {integrity: sha512-1NU7hWZDkV7hJ4PJ9dur9gTNQ4ePNPN4k9/0YhwjzykTi/+3Q5pF93YU5QoVj8BuOnhLgaY8gs0U2pj4kSYVcw==} + immutable@5.1.5: + resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==} import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} @@ -7464,14 +7919,6 @@ packages: inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} - inquirer@9.3.8: - resolution: {integrity: sha512-pFGGdaHrmRKMh4WoDDSowddgjT1Vkl90atobmTeSmcPGdYiwikch/m/Ef5wRaiamHejtw0cUUMMerzDUXCci2w==} - engines: {node: '>=18'} - - internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} - internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -7490,8 +7937,8 @@ packages: invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - ioredis@5.10.0: - resolution: {integrity: sha512-HVBe9OFuqs+Z6n64q09PQvP1/R4Bm+30PAyyD4wIEqssh3v9L21QjCVk4kRLucMBcDokJTcLjsGeVRlq/nH6DA==} + ioredis@5.10.1: + resolution: {integrity: sha512-HuEDBTI70aYdx1v6U97SbNx9F1+svQKBDo30o0b9fw055LMepzpOOd0Ccg9Q6tbqmBSJaMuY0fB7yw9/vjBYCA==} engines: {node: '>=12.22.0'} ip-address@9.0.5: @@ -7511,10 +7958,6 @@ packages: is-alphanumerical@2.0.1: resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} - is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} - is-array-buffer@3.0.5: resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} @@ -7526,17 +7969,10 @@ packages: resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} engines: {node: '>= 0.4'} - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - is-bigint@1.1.0: resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} engines: {node: '>= 0.4'} - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - is-boolean-object@1.2.1: resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==} engines: {node: '>= 0.4'} @@ -7552,26 +7988,14 @@ packages: resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} hasBin: true - is-core-module@2.15.1: - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} - engines: {node: '>= 0.4'} - is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} - is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} - is-data-view@1.0.2: resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} engines: {node: '>= 0.4'} - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - is-date-object@1.1.0: resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} engines: {node: '>= 0.4'} @@ -7609,10 +8033,6 @@ packages: resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} engines: {node: '>=10'} - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} @@ -7625,10 +8045,6 @@ packages: resolution: {integrity: sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==} engines: {node: '>=10'} - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - is-number-object@1.1.1: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} @@ -7655,10 +8071,6 @@ packages: is-property@1.0.2: resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -7667,10 +8079,6 @@ packages: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} - is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} - is-shared-array-buffer@1.0.4: resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} @@ -7687,26 +8095,14 @@ packages: resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} engines: {node: '>=18'} - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - is-string@1.1.1: resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - is-symbol@1.1.1: resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} engines: {node: '>= 0.4'} - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - is-typed-array@1.1.15: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} @@ -7714,10 +8110,6 @@ packages: is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - is-unicode-supported@2.1.0: resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} @@ -7726,13 +8118,6 @@ packages: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - - is-weakref@1.1.0: - resolution: {integrity: sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==} - engines: {node: '>= 0.4'} - is-weakref@1.1.1: resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} engines: {node: '>= 0.4'} @@ -7754,10 +8139,6 @@ packages: isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - isbinaryfile@5.0.7: - resolution: {integrity: sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==} - engines: {node: '>= 18.0.0'} - isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -7765,9 +8146,9 @@ packages: resolution: {integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==} engines: {node: '>=18'} - isomorphic-dompurify@3.1.0: - resolution: {integrity: sha512-mwWh3/+EQPeBvUAfZZDG5Tmyvr/yKxKB8VYSdw6c+3hMfW4FZZ93kxdohpHmtmSRUWX/jOJQtVObeA6cBLvosA==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + isomorphic-dompurify@3.10.0: + resolution: {integrity: sha512-Gj2duy4dACsP/FLPvwJ3+MXTlGtOo+O4yfpA0jdxuz/sZlbZzazGzScajOHRwH7PCy4j3bh5ibLGJY4/Rb5kGQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0} isomorphic-fetch@3.0.0: resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} @@ -7815,8 +8196,8 @@ packages: jose@6.0.8: resolution: {integrity: sha512-EyUPtOKyTYq+iMOszO42eobQllaIjJnwkZ2U93aJzNyPibCy7CEvT9UQnaCVB51IAd49gbNdCew1c0LcLTCB2g==} - jotai@2.18.1: - resolution: {integrity: sha512-e0NOzK+yRFwHo7DOp0DS0Ycq74KMEAObDWFGmfEL28PD9nLqBTt3/Ug7jf9ca72x0gC9LQZG9zH+0ISICmy3iA==} + jotai@2.19.1: + resolution: {integrity: sha512-sqm9lVZiqBHZH8aSRk32DSiZDHY3yUIlulXYn9GQj7/LvoUdYXSMti7ZPJGo+6zjzKFt5a25k/I6iBCi43PJcw==} engines: {node: '>=12.20.0'} peerDependencies: '@babel/core': '>=7.0.0' @@ -7839,16 +8220,12 @@ packages: js-file-download@0.4.12: resolution: {integrity: sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg==} + js-tokens@10.0.0: + resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - js-yaml@4.1.1: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true @@ -7856,9 +8233,9 @@ packages: jsbn@1.1.0: resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - jsdom@28.1.0: - resolution: {integrity: sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + jsdom@29.0.2: + resolution: {integrity: sha512-9VnGEBosc/ZpwyOsJBCQ/3I5p7Q5ngOY14a9bf5btenAORmZfDse1ZEheMiWcJ3h81+Fv7HmJFdS0szo/waF2w==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0} peerDependencies: canvas: ^3.0.0 peerDependenciesMeta: @@ -7919,7 +8296,6 @@ packages: keygrip@1.1.0: resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} engines: {node: '>= 0.6'} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -7964,9 +8340,6 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - linkify-it@5.0.0: - resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - linkifyjs@4.3.2: resolution: {integrity: sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==} @@ -8014,6 +8387,10 @@ packages: lodash.isarguments@3.1.0: resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. + lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} @@ -8026,12 +8403,8 @@ packages: lodash.uniqby@4.7.0: resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} logform@2.7.0: resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} @@ -8053,16 +8426,8 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.2.4: - resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==} - engines: {node: 20 || >=22} - - lru-cache@11.2.5: - resolution: {integrity: sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==} - engines: {node: 20 || >=22} - - lru-cache@11.2.6: - resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} + lru-cache@11.2.7: + resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -8078,8 +8443,8 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magicast@0.5.1: - resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==} + magicast@0.5.2: + resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==} make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} @@ -8113,10 +8478,6 @@ packages: resolution: {integrity: sha512-3lr8UeB+R+BN9c7eOBkeH1GlHf7+0Kzt0pcEgsT9xoXIA5gfXAzjd1niYiYDsvb62v5rLPqCqDiyYxtmmhGJ3g==} engines: {node: '>= 22.5.0'} - markdown-it@14.1.0: - resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} - hasBin: true - marked-terminal@7.3.0: resolution: {integrity: sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==} engines: {node: '>=16.0.0'} @@ -8156,11 +8517,8 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - mdn-data@2.12.2: - resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} - - mdurl@2.0.0: - resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} @@ -8280,9 +8638,6 @@ packages: resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==} engines: {node: 18 || 20 || >=22} - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@3.1.5: resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} @@ -8297,10 +8652,6 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - minipass@7.1.3: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} @@ -8331,10 +8682,6 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mute-stream@1.0.0: - resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - mute-stream@2.0.0: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} @@ -8344,8 +8691,8 @@ packages: engines: {node: '>=8', npm: '>=5'} hasBin: true - mysql2@3.19.1: - resolution: {integrity: sha512-yn4zh+Uxu5J3Zvi6Ao96lJ7BSBRkspHflWQAmOPND+htbpIKDQw99TTvPzgihKO/QyMickZopO4OsnixnpcUwA==} + mysql2@3.22.2: + resolution: {integrity: sha512-snC/L6YoCJPFpozZo3p3hiOlt9ItQ7sCnLSziFLlIttEzsPhrdcPT8g21BiQ7Oqif25W4Xq1IFuBzBvoFYDf0Q==} engines: {node: '>= 8.0'} peerDependencies: '@types/node': '>= 8' @@ -8365,8 +8712,8 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.1.6: - resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==} + nanoid@5.1.9: + resolution: {integrity: sha512-ZUvP7KeBLe3OZ1ypw6dI/TzYJuvHP77IM4Ry73waSQTLn8/g8rpdjfyVAh7t1/+FjBtG4lCP42MEbDxOsRpBMw==} engines: {node: ^18 || >=20} hasBin: true @@ -8394,8 +8741,8 @@ packages: nerf-dart@1.0.0: resolution: {integrity: sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==} - next-auth@5.0.0-beta.30: - resolution: {integrity: sha512-+c51gquM3F6nMVmoAusRJ7RIoY0K4Ts9HCCwyy/BRoe4mp3msZpOzYMyb5LAYc1wSo74PMQkGDcaghIO7W6Xjg==} + next-auth@5.0.0-beta.31: + resolution: {integrity: sha512-1OBgCKPzo+S7UWWMp3xgvGvIJ0OpV7B3vR4ZDRqD9a4Ch+OT6dakLXG9ivhtmIWVa71nTSXattOHyCg8sNi8/Q==} peerDependencies: '@simplewebauthn/browser': ^9.0.1 '@simplewebauthn/server': ^9.0.2 @@ -8410,21 +8757,21 @@ packages: nodemailer: optional: true - next-intl-swc-plugin-extractor@4.8.3: - resolution: {integrity: sha512-YcaT+R9z69XkGhpDarVFWUprrCMbxgIQYPUaXoE6LGVnLjGdo8hu3gL6bramDVjNKViYY8a/pXPy7Bna0mXORg==} + next-intl-swc-plugin-extractor@4.9.1: + resolution: {integrity: sha512-8whJJ6oxJz8JqkHarggmmuEDyXgC7nEnaPhZD91CJwEWW4xp0AST3Mw17YxvHyP2vAF3taWfFbs1maD+WWtz3w==} - next-intl@4.8.3: - resolution: {integrity: sha512-PvdBDWg+Leh7BR7GJUQbCDVVaBRn37GwDBWc9sv0rVQOJDQ5JU1rVzx9EEGuOGYo0DHAl70++9LQ7HxTawdL7w==} + next-intl@4.9.1: + resolution: {integrity: sha512-N7ga0CjtYcdxNvaKNIi6eJ2mmatlHK5hp8rt0YO2Omoc1m0gean242/Ukdj6+gJNiReBVcYIjK0HZeNx7CV1ug==} peerDependencies: next: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0 - typescript: ^5.0.0 + typescript: '*' peerDependenciesMeta: typescript: optional: true - next@16.1.6: - resolution: {integrity: sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==} + next@16.2.4: + resolution: {integrity: sha512-kPvz56wF5frc+FxlHI5qnklCzbq53HTwORaWBGdT0vNoKh1Aya9XC8aPauH4NJxqtzbWsS5mAbctm4cr+EkQ2Q==} engines: {node: '>=20.9.0'} hasBin: true peerDependencies: @@ -8461,10 +8808,6 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-addon-api@8.3.0: - resolution: {integrity: sha512-8VOpLHFrOQlAH+qA0ZzuGRlALRA6/LVh8QJldbrC4DY0hXoMP0l4Acq8TzFC018HztWiRqyCEj2aTWY2UvnJUg==} - engines: {node: ^18 || ^20 || >= 21} - node-addon-api@8.3.1: resolution: {integrity: sha512-lytcDEdxKjGJPTLEfW4mYMigRezMlyJY8W4wxJK8zE533Jlb8L8dRuObJFWg2P+AuOIxoCgKF+2Oq4d4Zd0OUA==} engines: {node: ^18 || ^20 || >= 21} @@ -8502,10 +8845,6 @@ packages: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true - node-ical@0.22.1: - resolution: {integrity: sha512-rMdc5hhJT3ZPtZIWfEXcetRrPl2xeHGpMJX8lq4VwyLKfOzGr+rXVtx0lD8lSf27Hn3mxrbU3MUcMSMXp4rIQA==} - engines: {node: '>=18'} - node-loader@2.1.0: resolution: {integrity: sha512-OwjPkyh8+7jW8DMd/iq71uU1Sspufr/C2+c3t0p08J3CrM9ApZ4U53xuisNrDXOHyGi5OYHgtfmmh+aK9zJA6g==} engines: {node: '>= 10.13.0'} @@ -8515,16 +8854,6 @@ packages: node-mock-http@1.0.2: resolution: {integrity: sha512-zWaamgDUdo9SSLw47we78+zYw/bDr5gH8pH7oRRs8V3KmBtu8GLgGIbV2p/gRPd3LWpEOpjQj7X1FOU3VFMJ8g==} - node-plop@0.32.3: - resolution: {integrity: sha512-tn+OxutdqhvoByKJ7p84FZBSUDfUB76bcvj0ugLBvgE9V52LFcnz8cauCDKi6otnctvFCqa9XkrU35pBY5Baig==} - engines: {node: '>=18'} - - node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} @@ -8634,14 +8963,6 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} - engines: {node: '>= 0.4'} - - object-inspect@1.13.3: - resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} - engines: {node: '>= 0.4'} - object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -8650,10 +8971,6 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - object.assign@4.1.7: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} @@ -8670,10 +8987,6 @@ packages: resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} engines: {node: '>= 0.4'} - object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} - object.values@1.2.1: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} @@ -8685,9 +8998,6 @@ packages: resolution: {integrity: sha512-4+/OFSqOjoyULo7eN7EA97DE0Xydj/PW5aIckxqQIoFjFwqXKuFCvXUJObyJfBF9Khu4RL/jlDRI9FPaMGfPnw==} engines: {node: '>= 20'} - ofetch@1.4.1: - resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} - ofetch@1.5.1: resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} @@ -8730,10 +9040,6 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - orderedmap@2.1.1: resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} @@ -8791,6 +9097,9 @@ packages: pako@2.1.0: resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + parchment@3.0.0: + resolution: {integrity: sha512-HUrJFQ/StvgmXRcQ1ftY6VEZUq3jA2t9ncFN4F84J/vN0/FPpQF+8FKXb3l6fLces6q0uOHj6NJn+2xvZnxO6A==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -8838,6 +9147,10 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-expression-matcher@1.5.0: + resolution: {integrity: sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==} + engines: {node: '>=14.0.0'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -8882,9 +9195,6 @@ packages: peerDependencies: pg: '>=8.0' - pg-protocol@1.12.0: - resolution: {integrity: sha512-uOANXNRACNdElMXJ0tPz6RBM0XQ61nONGAwlt8da5zs/iUOOCLBQOHSXnrC6fMsvtjxbOJrZZl5IScGv+7mpbg==} - pg-protocol@1.13.0: resolution: {integrity: sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==} @@ -8915,8 +9225,8 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} pify@3.0.0: @@ -8998,8 +9308,8 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + postcss@8.5.8: + resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} engines: {node: ^10 || ^12 || >=14} postgres-array@2.0.0: @@ -9044,8 +9354,8 @@ packages: prettier: optional: true - prettier@3.8.1: - resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} + prettier@3.8.3: + resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} engines: {node: '>=14'} hasBin: true @@ -9090,9 +9400,6 @@ packages: prosemirror-changeset@2.3.0: resolution: {integrity: sha512-8wRKhlEwEJ4I13Ju54q2NZR1pVKGTgJ/8XsQ8L5A5uUsQ/YQScQJuEAuh8Bn8i6IwAMjjLRABd9lVli+DlIiVw==} - prosemirror-collab@1.3.1: - resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==} - prosemirror-commands@1.6.2: resolution: {integrity: sha512-0nDHH++qcf/BuPLYvmqZTUUsPJUCPBUXt0J1ErTcDIS369CTp773itzLGIgIXG4LJXOlwYCr44+Mh4ii6MP1QA==} @@ -9105,24 +9412,12 @@ packages: prosemirror-history@1.4.1: resolution: {integrity: sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==} - prosemirror-inputrules@1.4.0: - resolution: {integrity: sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg==} - prosemirror-keymap@1.2.2: resolution: {integrity: sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==} - prosemirror-markdown@1.13.1: - resolution: {integrity: sha512-Sl+oMfMtAjWtlcZoj/5L/Q39MpEnVZ840Xo330WJWUvgyhNmLBLN7MsHn07s53nG/KImevWHSE6fEj4q/GihHw==} - - prosemirror-menu@1.2.4: - resolution: {integrity: sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA==} - prosemirror-model@1.24.1: resolution: {integrity: sha512-YM053N+vTThzlWJ/AtPtF1j0ebO36nvbmDy4U7qA2XQB8JVaQp1FmB9Jhrps8s+z+uxhhVTny4m20ptUvhk0Mg==} - prosemirror-schema-basic@1.2.3: - resolution: {integrity: sha512-h+H0OQwZVqMon1PNn0AG9cTfx513zgIG2DY00eJ00Yvgb3UD+GQ/VlWW5rcaxacpCGT1Yx8nuhwXk4+QbXUfJA==} - prosemirror-schema-list@1.5.1: resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} @@ -9132,13 +9427,6 @@ packages: prosemirror-tables@1.6.4: resolution: {integrity: sha512-TkDY3Gw52gRFRfRn2f4wJv5WOgAOXLJA2CQJYIJ5+kdFbfj3acR4JUW6LX2e1hiEBiUwvEhzH5a3cZ5YSztpIA==} - prosemirror-trailing-node@3.0.0: - resolution: {integrity: sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==} - peerDependencies: - prosemirror-model: ^1.22.1 - prosemirror-state: ^1.4.2 - prosemirror-view: ^1.33.8 - prosemirror-transform@1.10.2: resolution: {integrity: sha512-2iUq0wv2iRoJO/zj5mv8uDUriOHWzXRnOTVgCzSXnktS/2iQRa3UUQwVlkBlYZFtygw6Nh1+X4mGqoYBINn5KQ==} @@ -9158,13 +9446,13 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + proxy-from-env@2.1.0: + resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} + engines: {node: '>=10'} + pump@3.0.2: resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} - punycode.js@2.3.1: - resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} - engines: {node: '>=6'} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -9189,6 +9477,14 @@ packages: quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + quill-delta@5.1.0: + resolution: {integrity: sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==} + engines: {node: '>= 12.0.0'} + + quill@2.0.3: + resolution: {integrity: sha512-xEYQBqfYx/sfb33VJiKnSJp8ehloavImQ2A6564GAbqG55PGw1dAWUn1MUbQB62t0azawUS2CZZhWCjO8gRvTw==} + engines: {npm: '>=8.2.3'} + radix3@1.1.2: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} @@ -9229,10 +9525,10 @@ packages: peerDependencies: react: ^15.3.0 || 16 || 17 || 18 - react-dom@19.2.4: - resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} + react-dom@19.2.5: + resolution: {integrity: sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==} peerDependencies: - react: ^19.2.4 + react: ^19.2.5 react-dropzone@15.0.0: resolution: {integrity: sha512-lGjYV/EoqEjEWPnmiSvH4v5IoIAwQM2W4Z1C0Q/Pw2xD0eVzKPS359BQTUMum+1fa0kH2nrKjuavmTPOGhpLPg==} @@ -9262,8 +9558,8 @@ packages: peerDependencies: react: ^16.8.4 || ^17.0.0 || ^18.0.0 - react-is@19.2.4: - resolution: {integrity: sha512-W+EWGn2v0ApPKgKKCy/7s7WHXkboGcsrXE+2joLyVxkbyVQfO3MUEaUQDHoSmb8TFFrSKYa9mw64WZHNHSDzYA==} + react-is@19.2.5: + resolution: {integrity: sha512-Dn0t8IQhCmeIT3wu+Apm1/YVsJXsGWi6k4sPdnBIdqMVtHtv0IGi6dcpNpNkNac0zB2uUAqNX3MHzN8c+z2rwQ==} react-markdown@10.1.0: resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==} @@ -9277,6 +9573,13 @@ packages: 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 + react-quill-new@3.8.3: + resolution: {integrity: sha512-c96PYqFTo0pI4R3e79B3rH9LUIce1kIQbmTBu/imJQZk8305ogyLyBqKKjG2UoInDlquXqePSzmBo2aVia3ttw==} + peerDependencies: + quill-delta: ^5.1.0 + react: ^16 || ^17 || ^18 || ^19 + react-dom: ^16 || ^17 || ^18 || ^19 + react-redux@9.2.0: resolution: {integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==} peerDependencies: @@ -9357,8 +9660,8 @@ packages: react: '>=16.6.0' react-dom: '>=16.6.0' - react@19.2.4: - resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} + react@19.2.5: + resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==} engines: {node: '>=0.10.0'} read-package-up@11.0.0: @@ -9436,14 +9739,6 @@ packages: refractor@5.0.0: resolution: {integrity: sha512-QXOrHQF5jOpjjLfiNk5GFnWhRXvxjUVnlFxkeDmewR5sXkr3iM46Zo+CnRR8B+MDVqkULW4EcLVcRBNOPXHosw==} - regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} - - regexp.prototype.flags@1.5.3: - resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} - engines: {node: '>= 0.4'} - regexp.prototype.flags@1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} @@ -9503,11 +9798,6 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.11: - resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} - engines: {node: '>= 0.4'} - hasBin: true - resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -9516,10 +9806,6 @@ packages: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - ret@0.2.2: resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} engines: {node: '>=4'} @@ -9542,8 +9828,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup@4.48.1: - resolution: {integrity: sha512-jVG20NvbhTYDkGAty2/Yh7HK6/q3DGSRH4o8ALKGArmMuaauM9kLfoMZ+WliPwA5+JHr2lTn3g557FxBV87ifg==} + rollup@4.60.0: + resolution: {integrity: sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -9553,9 +9839,6 @@ packages: rrdom@0.1.7: resolution: {integrity: sha512-ZLd8f14z9pUy2Hk9y636cNv5Y2BMnNEY99wxzW9tD2BLDfe1xFxtLjB4q/xCBYo6HRe0wofzKzjm4JojmpBfFw==} - rrule@2.8.1: - resolution: {integrity: sha512-hM3dHSBMeaJ0Ktp7W38BJZ7O1zOgaFEsn41PDk+yHoEtfLV+PoJt9E9xAlZiWgf/iqEqionN0ebHFZIDAp+iGw==} - rrweb-player@1.0.0-alpha.4: resolution: {integrity: sha512-Wlmn9GZ5Fdqa37vd3TzsYdLl/JWEvXNUrLCrYpnOwEgmY409HwVIvvA5aIo7k582LoKgdRCsB87N+f0oWAR0Kg==} @@ -9568,20 +9851,12 @@ packages: rrweb@2.0.0-alpha.4: resolution: {integrity: sha512-wEHUILbxDPcNwkM3m4qgPgXAiBJyqCbbOHyVoNEVBJzHszWEFYyTbrZqUdeb1EfmTRC2PsumCIkVcomJ/xcOzA==} - run-async@3.0.0: - resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} - engines: {node: '>=0.12.0'} - run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} - safe-array-concat@1.1.3: resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} @@ -9596,10 +9871,6 @@ packages: resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} engines: {node: '>= 0.4'} - safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} - safe-regex-test@1.1.0: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} @@ -9614,8 +9885,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass@1.97.3: - resolution: {integrity: sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==} + sass@1.99.0: + resolution: {integrity: sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==} engines: {node: '>=14.0.0'} hasBin: true @@ -9660,16 +9931,6 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} - engines: {node: '>=10'} - hasBin: true - - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.4: resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} @@ -9702,8 +9963,8 @@ packages: engines: {node: '>= 0.10'} hasBin: true - sharp@0.34.4: - resolution: {integrity: sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==} + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@2.0.0: @@ -9876,8 +10137,8 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + std-env@4.0.0: + resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} @@ -9923,10 +10184,6 @@ packages: resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} engines: {node: '>= 0.4'} - string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} - string.prototype.trimend@1.0.9: resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} engines: {node: '>= 0.4'} @@ -9976,8 +10233,8 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strnum@2.1.2: - resolution: {integrity: sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==} + strnum@2.2.3: + resolution: {integrity: sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg==} style-to-js@1.1.16: resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==} @@ -10038,11 +10295,11 @@ packages: svgson@5.3.1: resolution: {integrity: sha512-qdPgvUNWb40gWktBJnbJRelWcPzkLed/ShhnRsjbayXz8OtdPOzbil9jtiZdrYvSDumAz/VNQr6JaNfPx/gvPA==} - swagger-client@3.37.0: - resolution: {integrity: sha512-pzU+B+DkUbrSwlj4/E8sGeP1w84/CFgDJAt80fHu650TxnOHbqFLGQjiE6luvpRxTPdfK2zRHJP7I6CgUkI8yA==} + swagger-client@3.37.2: + resolution: {integrity: sha512-KcB8psL1On4GWwv9Ribp1oteh50ygNnAyvQbd5MwiXMGkcB4f53rkZEdvZKPDdJO764mQjgErxQEGDVw6QBUMQ==} - swagger-ui-react@5.32.0: - resolution: {integrity: sha512-2mmrtvfp0EA90pdT8qXTMu26ex03TG2bsjvDAwXhdfCm+9foyadYJN+nEvDHM6/c6/xtXbdAsb6cVxBvbltnpw==} + swagger-ui-react@5.32.4: + resolution: {integrity: sha512-OsTqKCiDT/o8/oqZbt+p1djPkrOk3unKK/7+wGvP1+WY6pOzFoDLM4D39cNFtpIArtlg9uoK6MKIz3W00WX8qw==} peerDependencies: react: '>=16.8.0 <20' react-dom: '>=16.8.0 <20' @@ -10057,16 +10314,13 @@ packages: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} engines: {node: '>=20'} - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + tapable@2.3.2: + resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==} engines: {node: '>=6'} tar-fs@2.1.4: resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} - tar-fs@3.1.1: - resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==} - tar-fs@3.1.2: resolution: {integrity: sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==} @@ -10085,8 +10339,8 @@ packages: resolution: {integrity: sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==} engines: {node: '>=14.16'} - terser-webpack-plugin@5.3.17: - resolution: {integrity: sha512-YR7PtUp6GMU91BgSJmlaX/rS2lGDbAF7D+Wtq7hRO+MiljNmodYvqslzCFiYVAgW+Qoaaia/QUIP4lGXufjdZw==} + terser-webpack-plugin@5.4.0: + resolution: {integrity: sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -10101,13 +10355,13 @@ packages: uglify-js: optional: true - terser@5.46.0: - resolution: {integrity: sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==} + terser@5.46.1: + resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} engines: {node: '>=10'} hasBin: true - testcontainers@11.12.0: - resolution: {integrity: sha512-VWtH+UQejVYYvb53ohEZRbx2naxyDvwO9lQ6A0VgmVE2Oh8r9EF09I+BfmrXpd9N9ntpzhao9di2yNwibSz5KA==} + testcontainers@11.14.0: + resolution: {integrity: sha512-r9pniwv/iwzyHaI7gwAvAm4Y+IvjJg3vBWdjrUCaDMc2AXIr4jKbq7jJO18Mw2ybs73pZy1Aj7p/4RVBGMRWjg==} text-decoder@1.2.0: resolution: {integrity: sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==} @@ -10133,6 +10387,10 @@ packages: resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==} engines: {node: '>=12'} + timezones-ical-library@2.1.3: + resolution: {integrity: sha512-3ihogrr88TefPpa2og2fHw22VsWxlPUN4YDiLZRV9pbRsmguMyDsHhm8i0kkj7ihQYFgERZkj6eVOYY+TSOaOw==} + engines: {node: '>=22.18.0', npm: '>=10.9.3'} + tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} @@ -10147,13 +10405,10 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - tinyrainbow@3.0.3: - resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} - title-case@4.3.2: - resolution: {integrity: sha512-I/nkcBo73mO42Idfv08jhInV61IMb61OdIFxk+B4Gu1oBjWBPOLmhZdsli+oJCVaD+86pYQA93cJfFt224ZFAA==} - tldts-core@6.1.69: resolution: {integrity: sha512-nygxy9n2PBUFQUtAXAc122gGo+04/j5qr5TGQFZTHafTKYvmARVXt2cA5rgero2/dnXUfkdPtiJoKmrd3T+wdA==} @@ -10199,8 +10454,8 @@ packages: resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} engines: {node: '>=16'} - tough-cookie@6.0.0: - resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} + tough-cookie@6.0.1: + resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==} engines: {node: '>=16'} tr46@0.0.3: @@ -10242,15 +10497,15 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - trpc-to-openapi@3.1.0: - resolution: {integrity: sha512-5hKNl8XxE7QZE5UiaxpyKrRQCk6JRNiei4Ddg9I2Tmk2eEzR3/QhTvTElS32COZY+pWwVtqksVTwVWY8dHxLNw==} + trpc-to-openapi@3.2.0: + resolution: {integrity: sha512-nRexppGtL7og73dI4900xnfiGoOAx9PppAi7CVNeh8JfRHXUJ3lDe4JCjHgDAvC3FPHmwJAGDJ0b0BbRll98YA==} peerDependencies: '@trpc/server': ^11.1.0 zod: ^4.0.0 zod-openapi: ^5.0.1 - ts-api-utils@2.4.0: - resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -10302,38 +10557,8 @@ packages: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} - turbo-darwin-64@2.8.16: - resolution: {integrity: sha512-KWa4hUMWrpADC6Q/wIHRkBLw6X6MV9nx6X7hSXbTrrMz0KdaKhmfudUZ3sS76bJFmgArBU25cSc0AUyyrswYxg==} - cpu: [x64] - os: [darwin] - - turbo-darwin-arm64@2.8.16: - resolution: {integrity: sha512-NBgaqBDLQSZlJR4D5XCkQq6noaO0RvIgwm5eYFJYL3bH5dNu8o0UBpq7C5DYnQI8+ybyoHFjT5/icN4LeUYLow==} - cpu: [arm64] - os: [darwin] - - turbo-linux-64@2.8.16: - resolution: {integrity: sha512-VYPdcCRevI9kR/hr1H1xwXy7QQt/jNKiim1e1mjANBXD2E9VZWMkIL74J1Huad5MbU3/jw7voHOqDPLJPC2p6w==} - cpu: [x64] - os: [linux] - - turbo-linux-arm64@2.8.16: - resolution: {integrity: sha512-beq8tgUVI3uwkQkXJMiOr/hfxQRw54M3elpBwqgYFfemiK5LhCjjcwO0DkE8GZZfElBIlk+saMAQOZy3885wNQ==} - cpu: [arm64] - os: [linux] - - turbo-windows-64@2.8.16: - resolution: {integrity: sha512-Ig7b46iUgiOIkea/D3Z7H+zNzvzSnIJcLYFpZLA0RxbUTrbLhv9qIPwv3pT9p/abmu0LXVKHxaOo+p26SuDhzw==} - cpu: [x64] - os: [win32] - - turbo-windows-arm64@2.8.16: - resolution: {integrity: sha512-fOWjbEA2PiE2HEnFQrwNZKYEdjewyPc2no9GmrXklZnTCuMsxeCN39aVlKpKpim03Zq/ykIuvApGwq8ZbfS2Yw==} - cpu: [arm64] - os: [win32] - - turbo@2.8.16: - resolution: {integrity: sha512-u6e9e3cTTpE2adQ1DYm3A3r8y3LAONEx1jYvJx6eIgSY4bMLxIxs0riWzI0Z/IK903ikiUzRPZ2c1Ph5lVLkhA==} + turbo@2.9.6: + resolution: {integrity: sha512-+v2QJey7ZUeUiuigkU+uFfklvNUyPI2VO2vBpMYJA+a1hKFLFiKtUYlRHdb3P9CrAvMzi0upbjI4WT+zKtqkBg==} hasBin: true tweetnacl@0.14.5: @@ -10347,10 +10572,6 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - type-fest@1.4.0: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} @@ -10363,42 +10584,26 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - type-fest@5.4.4: - resolution: {integrity: sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==} + type-fest@5.5.0: + resolution: {integrity: sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==} engines: {node: '>=20'} type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} - typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} - typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - typed-array-byte-length@1.0.3: resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} engines: {node: '>= 0.4'} - typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - typed-array-byte-offset@1.0.4: resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} engines: {node: '>= 0.4'} - typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} - typed-array-length@1.0.7: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} @@ -10409,24 +10614,18 @@ packages: types-ramda@0.30.1: resolution: {integrity: sha512-1HTsf5/QVRmLzcGfldPFvkVsAdi1db1BBKzi7iW3KBUlOICg/nKnFS+jGqDJS3YD8VsWbAh7JiHeBvbsw8RPxA==} - typescript-eslint@8.57.0: - resolution: {integrity: sha512-W8GcigEMEeB07xEZol8oJ26rigm3+bfPHxHvwbYUlu1fUDsGuQ7Hiskx5xGW/xM4USc9Ephe3jtv7ZYPQntHeA==} + typescript-eslint@8.58.2: + resolution: {integrity: sha512-V8iSng9mRbdZjl54VJ9NKr6ZB+dW0J3TzRXRGcSbLIej9jV86ZRtlYeTKDR/QLxXykocJ5icNzbsl2+5TzIvcQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true - uc.micro@2.1.0: - resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - - ufo@1.6.1: - resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} - ufo@1.6.3: resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} @@ -10439,9 +10638,6 @@ packages: resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} engines: {node: '>=18'} - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} @@ -10459,20 +10655,8 @@ packages: resolution: {integrity: sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==} engines: {node: '>=18.17'} - undici@7.18.2: - resolution: {integrity: sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==} - engines: {node: '>=20.18.1'} - - undici@7.19.2: - resolution: {integrity: sha512-4VQSpGEGsWzk0VYxyB/wVX/Q7qf9t5znLRgs0dzszr9w9Fej/8RVNQ+S20vdXSAyra/bJ7ZQfGv6ZMj7UEbzSg==} - engines: {node: '>=20.18.1'} - - undici@7.21.0: - resolution: {integrity: sha512-Hn2tCQpoDt1wv23a68Ctc8Cr/BHpUSfaPYrkajTXOS9IKpxVRx/X5m1K2YkbK2ipgZgxXSgsUinl3x+2YdSSfg==} - engines: {node: '>=20.18.1'} - - undici@7.22.0: - resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==} + undici@7.24.6: + resolution: {integrity: sha512-Xi4agocCbRzt0yYMZGMA6ApD7gvtUFaxm4ZmeacWI4cZxaF6C+8I8QfofC20NAePiB/IcvZmzkJ7XPa471AEtA==} engines: {node: '>=20.18.1'} unicode-emoji-modifier-base@1.0.0: @@ -10539,18 +10723,6 @@ packages: unraw@3.0.0: resolution: {integrity: sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg==} - update-browserslist-db@1.1.1: - resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - update-browserslist-db@1.2.3: resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true @@ -10595,8 +10767,8 @@ packages: peerDependencies: react: '>=16.13' - use-intl@4.8.3: - resolution: {integrity: sha512-nLxlC/RH+le6g3amA508Itnn/00mE+J22ui21QhOWo5V9hCEC43+WtnRAITbJW0ztVZphev5X9gvOf2/Dk9PLA==} + use-intl@4.9.1: + resolution: {integrity: sha512-iGVV/xFYlhe3btafRlL8RPLD2Jsuet4yqn9DR6LWWbMhULsJnXgLonDkzDmsAIBIwFtk02oJuX/Ox2vwHKF+UQ==} peerDependencies: react: ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0 @@ -10643,10 +10815,12 @@ packages: uuid@10.0.0: resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true validate-npm-package-license@3.0.4: @@ -10683,7 +10857,7 @@ packages: vite-tsconfig-paths@6.1.1: resolution: {integrity: sha512-2cihq7zliibCCZ8P9cKJrQBkfgdvcFkOOc3Y02o3GWUDLgqjWsZudaoiuOwO/gzTzy17cS5F7ZPo4bsnS4DGkg==} peerDependencies: - vite: '>=7.3.1' + vite: '>=8.0.10' vite@7.1.12: resolution: {integrity: sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==} @@ -10725,20 +10899,23 @@ packages: yaml: optional: true - vitest@4.0.18: - resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==} + vitest@4.1.5: + resolution: {integrity: sha512-9Xx1v3/ih3m9hN+SbfkUyy0JAs72ap3r7joc87XL6jwF0jGg6mFBvQ1SrwaX+h8BlkX6Hz9shdd1uo6AF+ZGpg==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.18 - '@vitest/browser-preview': 4.0.18 - '@vitest/browser-webdriverio': 4.0.18 - '@vitest/ui': 4.0.18 + '@vitest/browser-playwright': 4.1.5 + '@vitest/browser-preview': 4.1.5 + '@vitest/browser-webdriverio': 4.1.5 + '@vitest/coverage-istanbul': 4.1.5 + '@vitest/coverage-v8': 4.1.5 + '@vitest/ui': 4.1.5 happy-dom: '*' jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -10752,6 +10929,10 @@ packages: optional: true '@vitest/browser-webdriverio': optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true '@vitest/ui': optional: true happy-dom: @@ -10770,9 +10951,6 @@ packages: resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} engines: {node: '>=10.13.0'} - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} @@ -10811,16 +10989,13 @@ packages: resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} engines: {node: '>=20'} - whatwg-url@16.0.0: - resolution: {integrity: sha512-9CcxtEKsf53UFwkSUZjG+9vydAsFO4lFHBpJUtjBcoJOCJpKnSJNwCw813zrYJHpCJ7sgfbtOe0V5Ku7Pa1XMQ==} + whatwg-url@16.0.1: + resolution: {integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -10833,14 +11008,6 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} - which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.18: - resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} - engines: {node: '>= 0.4'} - which-typed-array@1.1.19: resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} engines: {node: '>= 0.4'} @@ -10913,8 +11080,8 @@ packages: utf-8-validate: optional: true - ws@8.19.0: - resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + ws@8.20.0: + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -10981,9 +11148,9 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yaml@2.5.1: - resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} - engines: {node: '>= 14'} + yaml@2.8.3: + resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + engines: {node: '>= 14.6'} hasBin: true yargs-parser@20.2.9: @@ -11052,16 +11219,14 @@ packages: peerDependencies: zod: ^3.25.0 || ^4.0.0 - zod@4.2.1: - resolution: {integrity: sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==} + zod@4.3.6: + resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} snapshots: - '@acemir/cssom@0.9.31': {} - '@actions/core@3.0.0': dependencies: '@actions/exec': 3.0.0 @@ -11093,25 +11258,23 @@ snapshots: '@ark/util@0.46.0': optional: true - '@asamuzakjp/css-color@4.1.2': + '@asamuzakjp/css-color@5.1.8': dependencies: - '@csstools/css-calc': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-color-parser': 4.0.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - lru-cache: 11.2.6 - '@asamuzakjp/dom-selector@6.8.1': + '@asamuzakjp/dom-selector@7.0.8': dependencies: '@asamuzakjp/nwsapi': 2.3.9 bidi-js: 1.0.3 - css-tree: 3.1.0 + css-tree: 3.2.1 is-potential-custom-element-name: 1.0.1 - lru-cache: 11.2.6 '@asamuzakjp/nwsapi@2.3.9': {} - '@auth/core@0.41.0': + '@auth/core@0.41.2': dependencies: '@panva/hkdf': 1.2.1 jose: 6.0.8 @@ -11119,17 +11282,9 @@ snapshots: preact: 10.24.3 preact-render-to-string: 6.5.11(preact@10.24.3) - '@auth/core@0.41.1': + '@auth/drizzle-adapter@1.11.2': dependencies: - '@panva/hkdf': 1.2.1 - jose: 6.0.8 - oauth4webapi: 3.3.0 - preact: 10.24.3 - preact-render-to-string: 6.5.11(preact@10.24.3) - - '@auth/drizzle-adapter@1.11.1': - dependencies: - '@auth/core': 0.41.1 + '@auth/core': 0.41.2 transitivePeerDependencies: - '@simplewebauthn/browser' - '@simplewebauthn/server' @@ -11140,40 +11295,24 @@ snapshots: fetch-retry: 6.0.0 uuid: 8.3.2 - '@babel/code-frame@7.26.2': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/code-frame@7.27.1': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 - '@babel/code-frame@7.29.0': dependencies: '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.26.2': {} - - '@babel/compat-data@7.27.5': {} - '@babel/compat-data@7.29.0': {} '@babel/core@7.26.0': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.0 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helpers': 7.28.6 - '@babel/parser': 7.29.0 - '@babel/template': 7.25.9 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.26.0) + '@babel/helpers': 7.29.2 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 convert-source-map: 2.0.0 @@ -11184,34 +11323,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/core@7.28.4': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.29.0 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) - '@babel/helpers': 7.28.4 - '@babel/parser': 7.29.0 - '@babel/template': 7.27.2 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/core@7.29.0': dependencies: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helpers': 7.28.6 - '@babel/parser': 7.29.0 + '@babel/helpers': 7.29.2 + '@babel/parser': 7.29.2 '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 @@ -11226,28 +11345,12 @@ snapshots: '@babel/generator@7.29.0': dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.0.2 - '@babel/helper-compilation-targets@7.25.9': - dependencies: - '@babel/compat-data': 7.26.2 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.2 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-compilation-targets@7.27.2': - dependencies: - '@babel/compat-data': 7.27.5 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.24.4 - lru-cache: 5.1.1 - semver: 6.3.1 - '@babel/helper-compilation-targets@7.28.6': dependencies: '@babel/compat-data': 7.29.0 @@ -11258,20 +11361,6 @@ snapshots: '@babel/helper-globals@7.28.0': {} - '@babel/helper-module-imports@7.25.9': - dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-imports@7.27.1': - dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - transitivePeerDependencies: - - supports-color - '@babel/helper-module-imports@7.28.6': dependencies: '@babel/traverse': 7.29.0 @@ -11279,19 +11368,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + '@babel/helper-module-transforms@7.28.6(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-imports': 7.27.1 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 '@babel/traverse': 7.29.0 transitivePeerDependencies: @@ -11308,35 +11388,18 @@ snapshots: '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-string-parser@7.25.9': {} - '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.25.9': {} - - '@babel/helper-validator-identifier@7.27.1': {} - '@babel/helper-validator-identifier@7.28.5': {} - '@babel/helper-validator-option@7.25.9': {} - '@babel/helper-validator-option@7.27.1': {} - '@babel/helpers@7.28.4': + '@babel/helpers@7.29.2': dependencies: '@babel/template': 7.28.6 '@babel/types': 7.29.0 - '@babel/helpers@7.28.6': - dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 - - '@babel/parser@7.28.4': - dependencies: - '@babel/types': 7.29.0 - - '@babel/parser@7.29.0': + '@babel/parser@7.29.2': dependencies: '@babel/types': 7.29.0 @@ -11354,24 +11417,12 @@ snapshots: dependencies: core-js-pure: 3.38.1 - '@babel/runtime@7.28.6': {} - - '@babel/template@7.25.9': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.0 - '@babel/types': 7.29.0 - - '@babel/template@7.27.2': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.0 - '@babel/types': 7.29.0 + '@babel/runtime@7.29.2': {} '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@babel/traverse@7.29.0': @@ -11379,7 +11430,7 @@ snapshots: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.0 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/template': 7.28.6 '@babel/types': 7.29.0 debug: 4.4.3 @@ -11387,14 +11438,9 @@ snapshots: - supports-color '@babel/types@7.26.0': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - - '@babel/types@7.28.4': dependencies: '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 '@babel/types@7.29.0': dependencies: @@ -11407,7 +11453,7 @@ snapshots: '@bramus/specificity@2.4.2': dependencies: - css-tree: 3.1.0 + css-tree: 3.2.1 '@clack/core@0.3.5': dependencies: @@ -11431,17 +11477,17 @@ snapshots: '@colors/colors@1.6.0': {} - '@csstools/color-helpers@6.0.1': {} + '@csstools/color-helpers@6.0.2': {} - '@csstools/css-calc@3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-color-parser@4.0.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + '@csstools/css-color-parser@4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: - '@csstools/color-helpers': 6.0.1 - '@csstools/css-calc': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/color-helpers': 6.0.2 + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 @@ -11449,26 +11495,23 @@ snapshots: dependencies: '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.0.26': {} + '@csstools/css-syntax-patches-for-csstree@1.1.1(css-tree@3.2.1)': + optionalDependencies: + css-tree: 3.2.1 '@csstools/css-tokenizer@4.0.0': {} - '@ctrl/deluge@7.5.2': + '@ctrl/deluge@8.0.0': dependencies: '@ctrl/magnet-link': 4.3.0 '@ctrl/shared-torrent': 6.5.1(ofetch@1.5.1) + cookie-es: 3.0.1 node-fetch-native: 1.6.7 ofetch: 1.5.1 - tough-cookie: 6.0.0 - type-fest: 5.4.4 + type-fest: 5.5.0 ufo: 1.6.3 uint8array-extras: 1.5.0 - '@ctrl/magnet-link@4.0.2': - dependencies: - rfc4648: 1.5.4 - uint8array-extras: 1.5.0 - '@ctrl/magnet-link@4.3.0': dependencies: rfc4648: 1.5.4 @@ -11482,14 +11525,10 @@ snapshots: cookie: 1.1.1 node-fetch-native: 1.6.7 ofetch: 1.5.1 - type-fest: 5.4.4 + type-fest: 5.5.0 ufo: 1.6.3 uint8array-extras: 1.5.0 - '@ctrl/shared-torrent@6.3.0(ofetch@1.4.1)': - dependencies: - ofetch: 1.4.1 - '@ctrl/shared-torrent@6.5.1(ofetch@1.5.1)': dependencies: ofetch: 1.5.1 @@ -11498,11 +11537,11 @@ snapshots: '@ctrl/transmission@7.4.0': dependencies: - '@ctrl/magnet-link': 4.0.2 - '@ctrl/shared-torrent': 6.3.0(ofetch@1.4.1) - ofetch: 1.4.1 + '@ctrl/magnet-link': 4.3.0 + '@ctrl/shared-torrent': 6.5.1(ofetch@1.5.1) + ofetch: 1.5.1 type-fest: 4.41.0 - ufo: 1.6.1 + ufo: 1.6.3 uint8array-extras: 1.5.0 '@dabh/diagnostics@2.0.8': @@ -11511,43 +11550,43 @@ snapshots: enabled: 2.0.0 kuler: 2.0.0 - '@dnd-kit/accessibility@3.1.1(react@19.2.4)': + '@dnd-kit/accessibility@3.1.1(react@19.2.5)': dependencies: - react: 19.2.4 + react: 19.2.5 tslib: 2.8.1 - '@dnd-kit/core@6.3.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@dnd-kit/core@6.3.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@dnd-kit/accessibility': 3.1.1(react@19.2.4) - '@dnd-kit/utilities': 3.2.2(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@dnd-kit/accessibility': 3.1.1(react@19.2.5) + '@dnd-kit/utilities': 3.2.2(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) tslib: 2.8.1 - '@dnd-kit/modifiers@9.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)': + '@dnd-kit/modifiers@9.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5)': dependencies: - '@dnd-kit/core': 6.3.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@dnd-kit/utilities': 3.2.2(react@19.2.4) - react: 19.2.4 + '@dnd-kit/core': 6.3.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@dnd-kit/utilities': 3.2.2(react@19.2.5) + react: 19.2.5 tslib: 2.8.1 - '@dnd-kit/sortable@10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)': + '@dnd-kit/sortable@10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5)': dependencies: - '@dnd-kit/core': 6.3.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@dnd-kit/utilities': 3.2.2(react@19.2.4) - react: 19.2.4 + '@dnd-kit/core': 6.3.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@dnd-kit/utilities': 3.2.2(react@19.2.5) + react: 19.2.5 tslib: 2.8.1 - '@dnd-kit/utilities@3.2.2(react@19.2.4)': + '@dnd-kit/utilities@3.2.2(react@19.2.5)': dependencies: - react: 19.2.4 + react: 19.2.5 tslib: 2.8.1 '@drizzle-team/brocli@0.10.2': {} - '@drizzle-team/brocli@0.11.0': {} + '@drizzle-team/brocli@0.12.0': {} - '@emnapi/runtime@1.6.0': + '@emnapi/runtime@1.9.1': dependencies: tslib: 2.8.1 optional: true @@ -11556,7 +11595,7 @@ snapshots: '@esbuild-kit/core-utils@3.3.2': dependencies: - esbuild: 0.27.3 + esbuild: 0.28.0 source-map-support: 0.5.21 '@esbuild-kit/esm-loader@2.6.5': @@ -11567,157 +11606,235 @@ snapshots: '@esbuild/aix-ppc64@0.25.12': optional: true - '@esbuild/aix-ppc64@0.27.3': + '@esbuild/aix-ppc64@0.27.7': + optional: true + + '@esbuild/aix-ppc64@0.28.0': optional: true '@esbuild/android-arm64@0.25.12': optional: true - '@esbuild/android-arm64@0.27.3': + '@esbuild/android-arm64@0.27.7': + optional: true + + '@esbuild/android-arm64@0.28.0': optional: true '@esbuild/android-arm@0.25.12': optional: true - '@esbuild/android-arm@0.27.3': + '@esbuild/android-arm@0.27.7': + optional: true + + '@esbuild/android-arm@0.28.0': optional: true '@esbuild/android-x64@0.25.12': optional: true - '@esbuild/android-x64@0.27.3': + '@esbuild/android-x64@0.27.7': + optional: true + + '@esbuild/android-x64@0.28.0': optional: true '@esbuild/darwin-arm64@0.25.12': optional: true - '@esbuild/darwin-arm64@0.27.3': + '@esbuild/darwin-arm64@0.27.7': + optional: true + + '@esbuild/darwin-arm64@0.28.0': optional: true '@esbuild/darwin-x64@0.25.12': optional: true - '@esbuild/darwin-x64@0.27.3': + '@esbuild/darwin-x64@0.27.7': + optional: true + + '@esbuild/darwin-x64@0.28.0': optional: true '@esbuild/freebsd-arm64@0.25.12': optional: true - '@esbuild/freebsd-arm64@0.27.3': + '@esbuild/freebsd-arm64@0.27.7': + optional: true + + '@esbuild/freebsd-arm64@0.28.0': optional: true '@esbuild/freebsd-x64@0.25.12': optional: true - '@esbuild/freebsd-x64@0.27.3': + '@esbuild/freebsd-x64@0.27.7': + optional: true + + '@esbuild/freebsd-x64@0.28.0': optional: true '@esbuild/linux-arm64@0.25.12': optional: true - '@esbuild/linux-arm64@0.27.3': + '@esbuild/linux-arm64@0.27.7': + optional: true + + '@esbuild/linux-arm64@0.28.0': optional: true '@esbuild/linux-arm@0.25.12': optional: true - '@esbuild/linux-arm@0.27.3': + '@esbuild/linux-arm@0.27.7': + optional: true + + '@esbuild/linux-arm@0.28.0': optional: true '@esbuild/linux-ia32@0.25.12': optional: true - '@esbuild/linux-ia32@0.27.3': + '@esbuild/linux-ia32@0.27.7': + optional: true + + '@esbuild/linux-ia32@0.28.0': optional: true '@esbuild/linux-loong64@0.25.12': optional: true - '@esbuild/linux-loong64@0.27.3': + '@esbuild/linux-loong64@0.27.7': + optional: true + + '@esbuild/linux-loong64@0.28.0': optional: true '@esbuild/linux-mips64el@0.25.12': optional: true - '@esbuild/linux-mips64el@0.27.3': + '@esbuild/linux-mips64el@0.27.7': + optional: true + + '@esbuild/linux-mips64el@0.28.0': optional: true '@esbuild/linux-ppc64@0.25.12': optional: true - '@esbuild/linux-ppc64@0.27.3': + '@esbuild/linux-ppc64@0.27.7': + optional: true + + '@esbuild/linux-ppc64@0.28.0': optional: true '@esbuild/linux-riscv64@0.25.12': optional: true - '@esbuild/linux-riscv64@0.27.3': + '@esbuild/linux-riscv64@0.27.7': + optional: true + + '@esbuild/linux-riscv64@0.28.0': optional: true '@esbuild/linux-s390x@0.25.12': optional: true - '@esbuild/linux-s390x@0.27.3': + '@esbuild/linux-s390x@0.27.7': + optional: true + + '@esbuild/linux-s390x@0.28.0': optional: true '@esbuild/linux-x64@0.25.12': optional: true - '@esbuild/linux-x64@0.27.3': + '@esbuild/linux-x64@0.27.7': + optional: true + + '@esbuild/linux-x64@0.28.0': optional: true '@esbuild/netbsd-arm64@0.25.12': optional: true - '@esbuild/netbsd-arm64@0.27.3': + '@esbuild/netbsd-arm64@0.27.7': + optional: true + + '@esbuild/netbsd-arm64@0.28.0': optional: true '@esbuild/netbsd-x64@0.25.12': optional: true - '@esbuild/netbsd-x64@0.27.3': + '@esbuild/netbsd-x64@0.27.7': + optional: true + + '@esbuild/netbsd-x64@0.28.0': optional: true '@esbuild/openbsd-arm64@0.25.12': optional: true - '@esbuild/openbsd-arm64@0.27.3': + '@esbuild/openbsd-arm64@0.27.7': + optional: true + + '@esbuild/openbsd-arm64@0.28.0': optional: true '@esbuild/openbsd-x64@0.25.12': optional: true - '@esbuild/openbsd-x64@0.27.3': + '@esbuild/openbsd-x64@0.27.7': + optional: true + + '@esbuild/openbsd-x64@0.28.0': optional: true '@esbuild/openharmony-arm64@0.25.12': optional: true - '@esbuild/openharmony-arm64@0.27.3': + '@esbuild/openharmony-arm64@0.27.7': + optional: true + + '@esbuild/openharmony-arm64@0.28.0': optional: true '@esbuild/sunos-x64@0.25.12': optional: true - '@esbuild/sunos-x64@0.27.3': + '@esbuild/sunos-x64@0.27.7': + optional: true + + '@esbuild/sunos-x64@0.28.0': optional: true '@esbuild/win32-arm64@0.25.12': optional: true - '@esbuild/win32-arm64@0.27.3': + '@esbuild/win32-arm64@0.27.7': + optional: true + + '@esbuild/win32-arm64@0.28.0': optional: true '@esbuild/win32-ia32@0.25.12': optional: true - '@esbuild/win32-ia32@0.27.3': + '@esbuild/win32-ia32@0.27.7': + optional: true + + '@esbuild/win32-ia32@0.28.0': optional: true '@esbuild/win32-x64@0.25.12': optional: true - '@esbuild/win32-x64@0.27.3': + '@esbuild/win32-x64@0.27.7': + optional: true + + '@esbuild/win32-x64@0.28.0': optional: true '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4)': @@ -11766,7 +11883,7 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@exodus/bytes@1.11.0(@noble/hashes@2.0.1)': + '@exodus/bytes@1.15.0(@noble/hashes@2.0.1)': optionalDependencies: '@noble/hashes': 2.0.1 @@ -11774,7 +11891,7 @@ snapshots: dependencies: '@ndaidong/bellajs': 12.0.1 cross-fetch: 4.1.0 - fast-xml-parser: 5.4.2 + fast-xml-parser: 5.7.1 html-entities: 2.6.0 transitivePeerDependencies: - encoding @@ -11811,18 +11928,18 @@ snapshots: '@floating-ui/core': 1.7.3 '@floating-ui/utils': 0.2.10 - '@floating-ui/react-dom@2.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@floating-ui/react-dom@2.1.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@floating-ui/dom': 1.7.4 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) - '@floating-ui/react@0.27.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@floating-ui/react@0.27.16(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@floating-ui/react-dom': 2.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@floating-ui/react-dom': 2.1.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@floating-ui/utils': 0.2.10 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) tabbable: 6.2.0 '@floating-ui/utils@0.2.10': {} @@ -11893,22 +12010,22 @@ snapshots: '@homarr/gridstack@1.12.0': {} - '@homarr/node-unifi@2.6.0(undici@7.18.2)': + '@homarr/node-unifi@2.6.0(undici@7.24.6)': dependencies: axios: 1.9.0 eventemitter2: 6.4.9 - http-cookie-agent: 6.0.8(tough-cookie@5.1.2)(undici@7.18.2) + http-cookie-agent: 6.0.8(tough-cookie@5.1.2)(undici@7.24.6) tough-cookie: 5.1.2 - ws: 8.19.0 + ws: 8.20.0 transitivePeerDependencies: - bufferutil - debug - undici - utf-8-validate - '@hono/node-server@1.13.0(hono@4.12.7)': + '@hono/node-server@1.13.0(hono@4.12.15)': dependencies: - hono: 4.12.7 + hono: 4.12.15 '@humanfs/core@0.19.1': {} @@ -11923,234 +12040,242 @@ snapshots: '@humanwhocodes/retry@0.4.2': {} - '@ianvs/prettier-plugin-sort-imports@4.7.1(prettier@3.8.1)': + '@ianvs/prettier-plugin-sort-imports@4.7.1(prettier@3.8.3)': dependencies: '@babel/generator': 7.29.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 - prettier: 3.8.1 - semver: 7.7.3 + prettier: 3.8.3 + semver: 7.7.4 transitivePeerDependencies: - supports-color '@img/colour@1.0.0': optional: true - '@img/sharp-darwin-arm64@0.34.4': + '@img/sharp-darwin-arm64@0.34.5': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.3 + '@img/sharp-libvips-darwin-arm64': 1.2.4 optional: true - '@img/sharp-darwin-x64@0.34.4': + '@img/sharp-darwin-x64@0.34.5': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.3 + '@img/sharp-libvips-darwin-x64': 1.2.4 optional: true - '@img/sharp-libvips-darwin-arm64@1.2.3': + '@img/sharp-libvips-darwin-arm64@1.2.4': optional: true - '@img/sharp-libvips-darwin-x64@1.2.3': + '@img/sharp-libvips-darwin-x64@1.2.4': optional: true - '@img/sharp-libvips-linux-arm64@1.2.3': + '@img/sharp-libvips-linux-arm64@1.2.4': optional: true - '@img/sharp-libvips-linux-arm@1.2.3': + '@img/sharp-libvips-linux-arm@1.2.4': optional: true - '@img/sharp-libvips-linux-ppc64@1.2.3': + '@img/sharp-libvips-linux-ppc64@1.2.4': optional: true - '@img/sharp-libvips-linux-s390x@1.2.3': + '@img/sharp-libvips-linux-riscv64@1.2.4': optional: true - '@img/sharp-libvips-linux-x64@1.2.3': + '@img/sharp-libvips-linux-s390x@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.2.3': + '@img/sharp-libvips-linux-x64@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.2.3': + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': optional: true - '@img/sharp-linux-arm64@0.34.4': + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.3 + '@img/sharp-libvips-linux-arm64': 1.2.4 optional: true - '@img/sharp-linux-arm@0.34.4': + '@img/sharp-linux-arm@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.3 + '@img/sharp-libvips-linux-arm': 1.2.4 optional: true - '@img/sharp-linux-ppc64@0.34.4': + '@img/sharp-linux-ppc64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.3 + '@img/sharp-libvips-linux-ppc64': 1.2.4 optional: true - '@img/sharp-linux-s390x@0.34.4': + '@img/sharp-linux-riscv64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.3 + '@img/sharp-libvips-linux-riscv64': 1.2.4 optional: true - '@img/sharp-linux-x64@0.34.4': + '@img/sharp-linux-s390x@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.3 + '@img/sharp-libvips-linux-s390x': 1.2.4 optional: true - '@img/sharp-linuxmusl-arm64@0.34.4': + '@img/sharp-linux-x64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 + '@img/sharp-libvips-linux-x64': 1.2.4 optional: true - '@img/sharp-linuxmusl-x64@0.34.4': + '@img/sharp-linuxmusl-arm64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.3 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 optional: true - '@img/sharp-wasm32@0.34.4': + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.6.0 + '@emnapi/runtime': 1.9.1 optional: true - '@img/sharp-win32-arm64@0.34.4': + '@img/sharp-win32-arm64@0.34.5': optional: true - '@img/sharp-win32-ia32@0.34.4': + '@img/sharp-win32-ia32@0.34.5': optional: true - '@img/sharp-win32-x64@0.34.4': + '@img/sharp-win32-x64@0.34.5': optional: true - '@immich/sdk@2.5.6': + '@immich/sdk@2.7.5': dependencies: '@oazapfts/runtime': 1.2.0 '@inquirer/ansi@1.0.2': {} - '@inquirer/checkbox@4.3.2(@types/node@24.12.0)': + '@inquirer/checkbox@4.3.2(@types/node@24.12.2)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@24.12.0) + '@inquirer/core': 10.3.2(@types/node@24.12.2) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/type': 3.0.10(@types/node@24.12.2) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/confirm@5.1.21(@types/node@24.12.0)': + '@inquirer/confirm@5.1.21(@types/node@24.12.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.12.0) - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/core': 10.3.2(@types/node@24.12.2) + '@inquirer/type': 3.0.10(@types/node@24.12.2) optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/core@10.3.2(@types/node@24.12.0)': + '@inquirer/core@10.3.2(@types/node@24.12.2)': dependencies: '@inquirer/ansi': 1.0.2 '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/type': 3.0.10(@types/node@24.12.2) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/editor@4.2.23(@types/node@24.12.0)': + '@inquirer/editor@4.2.23(@types/node@24.12.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.12.0) - '@inquirer/external-editor': 1.0.3(@types/node@24.12.0) - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/core': 10.3.2(@types/node@24.12.2) + '@inquirer/external-editor': 1.0.3(@types/node@24.12.2) + '@inquirer/type': 3.0.10(@types/node@24.12.2) optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/expand@4.0.23(@types/node@24.12.0)': + '@inquirer/expand@4.0.23(@types/node@24.12.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.12.0) - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/core': 10.3.2(@types/node@24.12.2) + '@inquirer/type': 3.0.10(@types/node@24.12.2) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/external-editor@1.0.3(@types/node@24.12.0)': + '@inquirer/external-editor@1.0.3(@types/node@24.12.2)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@inquirer/figures@1.0.15': {} - '@inquirer/input@4.3.1(@types/node@24.12.0)': + '@inquirer/input@4.3.1(@types/node@24.12.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.12.0) - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/core': 10.3.2(@types/node@24.12.2) + '@inquirer/type': 3.0.10(@types/node@24.12.2) optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/number@3.0.23(@types/node@24.12.0)': + '@inquirer/number@3.0.23(@types/node@24.12.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.12.0) - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/core': 10.3.2(@types/node@24.12.2) + '@inquirer/type': 3.0.10(@types/node@24.12.2) optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/password@4.0.23(@types/node@24.12.0)': + '@inquirer/password@4.0.23(@types/node@24.12.2)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@24.12.0) - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/core': 10.3.2(@types/node@24.12.2) + '@inquirer/type': 3.0.10(@types/node@24.12.2) optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/prompts@7.10.1(@types/node@24.12.0)': + '@inquirer/prompts@7.10.1(@types/node@24.12.2)': dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@24.12.0) - '@inquirer/confirm': 5.1.21(@types/node@24.12.0) - '@inquirer/editor': 4.2.23(@types/node@24.12.0) - '@inquirer/expand': 4.0.23(@types/node@24.12.0) - '@inquirer/input': 4.3.1(@types/node@24.12.0) - '@inquirer/number': 3.0.23(@types/node@24.12.0) - '@inquirer/password': 4.0.23(@types/node@24.12.0) - '@inquirer/rawlist': 4.1.11(@types/node@24.12.0) - '@inquirer/search': 3.2.2(@types/node@24.12.0) - '@inquirer/select': 4.4.2(@types/node@24.12.0) + '@inquirer/checkbox': 4.3.2(@types/node@24.12.2) + '@inquirer/confirm': 5.1.21(@types/node@24.12.2) + '@inquirer/editor': 4.2.23(@types/node@24.12.2) + '@inquirer/expand': 4.0.23(@types/node@24.12.2) + '@inquirer/input': 4.3.1(@types/node@24.12.2) + '@inquirer/number': 3.0.23(@types/node@24.12.2) + '@inquirer/password': 4.0.23(@types/node@24.12.2) + '@inquirer/rawlist': 4.1.11(@types/node@24.12.2) + '@inquirer/search': 3.2.2(@types/node@24.12.2) + '@inquirer/select': 4.4.2(@types/node@24.12.2) optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/rawlist@4.1.11(@types/node@24.12.0)': + '@inquirer/rawlist@4.1.11(@types/node@24.12.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.12.0) - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/core': 10.3.2(@types/node@24.12.2) + '@inquirer/type': 3.0.10(@types/node@24.12.2) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/search@3.2.2(@types/node@24.12.0)': + '@inquirer/search@3.2.2(@types/node@24.12.2)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.12.0) + '@inquirer/core': 10.3.2(@types/node@24.12.2) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/type': 3.0.10(@types/node@24.12.2) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/select@4.4.2(@types/node@24.12.0)': + '@inquirer/select@4.4.2(@types/node@24.12.2)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@24.12.0) + '@inquirer/core': 10.3.2(@types/node@24.12.2) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.12.0) + '@inquirer/type': 3.0.10(@types/node@24.12.2) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@inquirer/type@3.0.10(@types/node@24.12.0)': + '@inquirer/type@3.0.10(@types/node@24.12.2)': optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@ioredis/commands@1.5.1': {} @@ -12165,9 +12290,9 @@ snapshots: '@isaacs/cliui@9.0.0': {} - '@jellyfin/sdk@0.13.0(axios@1.12.2)': + '@jellyfin/sdk@0.13.0(axios@1.15.0)': dependencies: - axios: 1.12.2 + axios: 1.15.0 '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -12206,21 +12331,21 @@ snapshots: '@kubernetes/client-node@1.4.0': dependencies: '@types/js-yaml': 4.0.9 - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/node-fetch': 2.6.13 '@types/stream-buffers': 3.0.7 form-data: 4.0.5 hpagent: 1.2.0 - isomorphic-ws: 5.0.0(ws@8.19.0) - js-yaml: 4.1.0 + isomorphic-ws: 5.0.0(ws@8.20.0) + js-yaml: 4.1.1 jsonpath-plus: 10.3.0 node-fetch: 2.7.0 openid-client: 6.3.3 rfc4648: 1.5.4 socks-proxy-agent: 8.0.5 stream-buffers: 3.0.3 - tar-fs: 3.1.1 - ws: 8.19.0 + tar-fs: 3.1.2 + ws: 8.20.0 transitivePeerDependencies: - bare-buffer - bufferutil @@ -12245,108 +12370,108 @@ snapshots: js-base64: 3.7.8 optional: true - '@mantine/charts@8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(recharts@2.15.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4))': + '@mantine/charts@8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(recharts@2.15.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5))': dependencies: - '@mantine/core': 8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@mantine/hooks': 8.3.16(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - recharts: 2.15.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@mantine/core': 8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@mantine/hooks': 8.3.18(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + recharts: 2.15.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@mantine/colors-generator@8.3.16(chroma-js@3.2.0)': + '@mantine/colors-generator@8.3.18(chroma-js@3.2.0)': dependencies: chroma-js: 3.2.0 - '@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@floating-ui/react': 0.27.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@mantine/hooks': 8.3.16(react@19.2.4) + '@floating-ui/react': 0.27.16(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@mantine/hooks': 8.3.18(react@19.2.5) clsx: 2.1.1 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react-number-format: 5.4.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react-remove-scroll: 2.7.1(@types/react@19.2.14)(react@19.2.4) - react-textarea-autosize: 8.5.9(@types/react@19.2.14)(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-number-format: 5.4.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react-remove-scroll: 2.7.1(@types/react@19.2.14)(react@19.2.5) + react-textarea-autosize: 8.5.9(@types/react@19.2.14)(react@19.2.5) type-fest: 4.41.0 transitivePeerDependencies: - '@types/react' - '@mantine/dates@8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(dayjs@1.11.19)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@mantine/dates@8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(dayjs@1.11.20)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@mantine/core': 8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@mantine/hooks': 8.3.16(react@19.2.4) + '@mantine/core': 8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@mantine/hooks': 8.3.18(react@19.2.5) clsx: 2.1.1 - dayjs: 1.11.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + dayjs: 1.11.20 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) - '@mantine/dropzone@8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@mantine/dropzone@8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@mantine/core': 8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@mantine/hooks': 8.3.16(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react-dropzone: 15.0.0(react@19.2.4) + '@mantine/core': 8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@mantine/hooks': 8.3.18(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-dropzone: 15.0.0(react@19.2.5) - '@mantine/form@8.3.16(react@19.2.4)': + '@mantine/form@8.3.18(react@19.2.5)': dependencies: fast-deep-equal: 3.1.3 klona: 2.0.6 - react: 19.2.4 + react: 19.2.5 - '@mantine/hooks@8.3.16(react@19.2.4)': + '@mantine/hooks@8.3.18(react@19.2.5)': dependencies: - react: 19.2.4 + react: 19.2.5 - '@mantine/modals@8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@mantine/modals@8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@mantine/core': 8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@mantine/hooks': 8.3.16(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@mantine/core': 8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@mantine/hooks': 8.3.18(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) - '@mantine/notifications@8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@mantine/notifications@8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@mantine/core': 8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@mantine/hooks': 8.3.16(react@19.2.4) - '@mantine/store': 8.3.16(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react-transition-group: 4.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@mantine/core': 8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@mantine/hooks': 8.3.18(react@19.2.5) + '@mantine/store': 8.3.18(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-transition-group: 4.4.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@mantine/spotlight@8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@mantine/spotlight@8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@mantine/core': 8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@mantine/hooks': 8.3.16(react@19.2.4) - '@mantine/store': 8.3.16(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@mantine/core': 8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@mantine/hooks': 8.3.18(react@19.2.5) + '@mantine/store': 8.3.18(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) - '@mantine/store@8.3.16(react@19.2.4)': + '@mantine/store@8.3.18(react@19.2.5)': dependencies: - react: 19.2.4 + react: 19.2.5 - '@mantine/tiptap@8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(@tiptap/extension-link@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))(@tiptap/react@3.20.1(@floating-ui/dom@1.7.4)(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@mantine/tiptap@8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(@tiptap/extension-link@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/react@3.22.4(@floating-ui/dom@1.7.4)(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@mantine/core': 8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@mantine/hooks': 8.3.16(react@19.2.4) - '@tiptap/extension-link': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) - '@tiptap/react': 3.20.1(@floating-ui/dom@1.7.4)(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@mantine/core': 8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@mantine/hooks': 8.3.18(react@19.2.5) + '@tiptap/extension-link': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) + '@tiptap/react': 3.22.4(@floating-ui/dom@1.7.4)(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) '@million/install@1.0.14': dependencies: '@antfu/ni': 0.21.12 '@axiomhq/js': 1.0.0-rc.3 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.26.0 '@clack/prompts': 0.7.0 ast-types: 0.14.2 cli-high: 0.4.3 diff: 5.2.2 - effect: 3.19.19 - nanoid: 5.1.6 + effect: 3.21.0 + nanoid: 5.1.9 recast: 0.23.11 xycolors: 0.1.2 @@ -12355,17 +12480,17 @@ 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.12.7) + '@hono/node-server': 1.13.0(hono@4.12.15) '@million/install': 1.0.14 '@rollup/pluginutils': 5.1.0 '@rrweb/types': 2.0.0-alpha.16 babel-plugin-syntax-hermes-parser: 0.21.1 ci-info: 4.0.0 - esbuild: 0.27.3 + esbuild: 0.28.0 faster-babel-types: 0.1.0(@babel/types@7.26.0) - hono: 4.12.7 + hono: 4.12.15 isomorphic-fetch: 3.0.0 - nanoid: 5.1.6 + nanoid: 5.1.9 ohash: 1.1.4 pako: 2.1.0 pathe: 1.1.2 @@ -12374,7 +12499,7 @@ snapshots: react-scan: 0.0.31 rrweb: 2.0.0-alpha.4 rrweb-player: 1.0.0-alpha.4 - semver: 7.6.3 + semver: 7.7.4 socket.io: 4.8.1 socket.io-client: 4.7.5 tmp: 0.2.5 @@ -12390,38 +12515,40 @@ snapshots: '@ndaidong/bellajs@12.0.1': {} - '@next/env@16.1.6': {} + '@next/env@16.2.4': {} - '@next/eslint-plugin-next@16.1.6': + '@next/eslint-plugin-next@16.2.4': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@16.1.6': + '@next/swc-darwin-arm64@16.2.4': optional: true - '@next/swc-darwin-x64@16.1.6': + '@next/swc-darwin-x64@16.2.4': optional: true - '@next/swc-linux-arm64-gnu@16.1.6': + '@next/swc-linux-arm64-gnu@16.2.4': optional: true - '@next/swc-linux-arm64-musl@16.1.6': + '@next/swc-linux-arm64-musl@16.2.4': optional: true - '@next/swc-linux-x64-gnu@16.1.6': + '@next/swc-linux-x64-gnu@16.2.4': optional: true - '@next/swc-linux-x64-musl@16.1.6': + '@next/swc-linux-x64-musl@16.2.4': optional: true - '@next/swc-win32-arm64-msvc@16.1.6': + '@next/swc-win32-arm64-msvc@16.2.4': optional: true - '@next/swc-win32-x64-msvc@16.1.6': + '@next/swc-win32-x64-msvc@16.2.4': optional: true '@noble/hashes@2.0.1': {} + '@nodable/entities@2.1.0': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -12482,11 +12609,6 @@ snapshots: '@octokit/auth-token@6.0.0': {} - '@octokit/auth-unauthenticated@7.0.2': - dependencies: - '@octokit/request-error': 7.0.2 - '@octokit/types': 15.0.1 - '@octokit/auth-unauthenticated@7.0.3': dependencies: '@octokit/request-error': 7.0.2 @@ -12517,7 +12639,7 @@ snapshots: dependencies: '@octokit/auth-oauth-app': 9.0.3 '@octokit/auth-oauth-user': 6.0.2 - '@octokit/auth-unauthenticated': 7.0.2 + '@octokit/auth-unauthenticated': 7.0.3 '@octokit/core': 7.0.6 '@octokit/oauth-authorization-url': 8.0.0 '@octokit/oauth-methods': 6.0.2 @@ -12533,8 +12655,6 @@ snapshots: '@octokit/request-error': 7.0.2 '@octokit/types': 16.0.0 - '@octokit/openapi-types@26.0.0': {} - '@octokit/openapi-types@27.0.0': {} '@octokit/openapi-webhooks-types@11.0.0': {} @@ -12578,10 +12698,6 @@ snapshots: fast-content-type-parse: 3.0.0 universal-user-agent: 7.0.2 - '@octokit/types@15.0.1': - dependencies: - '@octokit/openapi-types': 26.0.0 - '@octokit/types@16.0.0': dependencies: '@octokit/openapi-types': 27.0.0 @@ -12703,8 +12819,6 @@ snapshots: '@protobufjs/utf8@1.1.0': {} - '@remirror/core-constants@3.0.0': {} - '@rolldown/pluginutils@1.0.0-rc.3': {} '@rollup/pluginutils@5.1.0': @@ -12713,67 +12827,82 @@ snapshots: estree-walker: 2.0.2 picomatch: 2.3.1 - '@rollup/rollup-android-arm-eabi@4.48.1': + '@rollup/rollup-android-arm-eabi@4.60.0': optional: true - '@rollup/rollup-android-arm64@4.48.1': + '@rollup/rollup-android-arm64@4.60.0': optional: true - '@rollup/rollup-darwin-arm64@4.48.1': + '@rollup/rollup-darwin-arm64@4.60.0': optional: true - '@rollup/rollup-darwin-x64@4.48.1': + '@rollup/rollup-darwin-x64@4.60.0': optional: true - '@rollup/rollup-freebsd-arm64@4.48.1': + '@rollup/rollup-freebsd-arm64@4.60.0': optional: true - '@rollup/rollup-freebsd-x64@4.48.1': + '@rollup/rollup-freebsd-x64@4.60.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.48.1': + '@rollup/rollup-linux-arm-gnueabihf@4.60.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.48.1': + '@rollup/rollup-linux-arm-musleabihf@4.60.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.48.1': + '@rollup/rollup-linux-arm64-gnu@4.60.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.48.1': + '@rollup/rollup-linux-arm64-musl@4.60.0': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.48.1': + '@rollup/rollup-linux-loong64-gnu@4.60.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.48.1': + '@rollup/rollup-linux-loong64-musl@4.60.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.48.1': + '@rollup/rollup-linux-ppc64-gnu@4.60.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.48.1': + '@rollup/rollup-linux-ppc64-musl@4.60.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.48.1': + '@rollup/rollup-linux-riscv64-gnu@4.60.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.48.1': + '@rollup/rollup-linux-riscv64-musl@4.60.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.60.0': optional: true '@rollup/rollup-linux-x64-gnu@4.6.1': optional: true - '@rollup/rollup-linux-x64-musl@4.48.1': + '@rollup/rollup-linux-x64-gnu@4.60.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.48.1': + '@rollup/rollup-linux-x64-musl@4.60.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.48.1': + '@rollup/rollup-openbsd-x64@4.60.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.48.1': + '@rollup/rollup-openharmony-arm64@4.60.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.60.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.60.0': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.60.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.60.0': optional: true '@rrweb/types@2.0.0-alpha.16': @@ -12795,7 +12924,7 @@ snapshots: '@semantic-release/error': 3.0.0 aggregate-error: 3.1.0 fs-extra: 11.2.0 - lodash: 4.17.21 + lodash: 4.18.1 semantic-release: 25.0.3(typescript@5.9.3) '@semantic-release/commit-analyzer@13.0.1(semantic-release@25.0.3(typescript@5.9.3))': @@ -12804,7 +12933,7 @@ snapshots: 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.3 import-from-esm: 2.0.0 lodash-es: 4.17.21 micromatch: 4.0.8 @@ -12820,10 +12949,10 @@ snapshots: dependencies: '@semantic-release/error': 3.0.0 aggregate-error: 3.1.0 - debug: 4.3.7 + debug: 4.4.3 dir-glob: 3.0.1 execa: 5.1.1 - lodash: 4.17.21 + lodash: 4.18.1 micromatch: 4.0.8 p-reduce: 2.1.0 semantic-release: 25.0.3(typescript@5.9.3) @@ -12848,7 +12977,7 @@ snapshots: p-filter: 4.1.0 semantic-release: 25.0.3(typescript@5.9.3) tinyglobby: 0.2.15 - undici: 7.18.2 + undici: 7.24.6 url-join: 5.0.0 transitivePeerDependencies: - supports-color @@ -12878,7 +13007,7 @@ snapshots: conventional-changelog-writer: 8.0.0 conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.0.0 - debug: 4.4.1 + debug: 4.4.3 get-stream: 7.0.1 import-from-esm: 2.0.0 into-stream: 7.0.0 @@ -12901,20 +13030,20 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@swagger-api/apidom-ast@1.6.0': + '@swagger-api/apidom-ast@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-error': 1.6.0 + '@swagger-api/apidom-error': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) unraw: 3.0.0 - '@swagger-api/apidom-core@1.6.0': + '@swagger-api/apidom-core@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-ast': 1.6.0 - '@swagger-api/apidom-error': 1.6.0 + '@swagger-api/apidom-ast': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 '@types/ramda': 0.30.2 minim: 0.23.8 ramda: 0.30.1 @@ -12922,260 +13051,260 @@ snapshots: short-unique-id: 5.3.2 ts-mixer: 6.0.4 - '@swagger-api/apidom-error@1.6.0': + '@swagger-api/apidom-error@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-json-pointer@1.6.0': + '@swagger-api/apidom-json-pointer@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-error': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 '@swaggerexpert/json-pointer': 2.10.2 - '@swagger-api/apidom-ns-api-design-systems@1.6.0': + '@swagger-api/apidom-ns-api-design-systems@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-error': 1.6.0 - '@swagger-api/apidom-ns-openapi-3-1': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-1': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-arazzo-1@1.6.0': + '@swagger-api/apidom-ns-arazzo-1@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-ns-json-schema-2020-12': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-json-schema-2020-12': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-asyncapi-2@1.6.0': + '@swagger-api/apidom-ns-asyncapi-2@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-ns-json-schema-draft-7': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-json-schema-draft-7': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-asyncapi-3@1.6.0': + '@swagger-api/apidom-ns-asyncapi-3@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-ns-asyncapi-2': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-asyncapi-2': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-json-schema-2019-09@1.6.0': + '@swagger-api/apidom-ns-json-schema-2019-09@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-error': 1.6.0 - '@swagger-api/apidom-ns-json-schema-draft-7': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 + '@swagger-api/apidom-ns-json-schema-draft-7': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-json-schema-2020-12@1.6.0': + '@swagger-api/apidom-ns-json-schema-2020-12@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-error': 1.6.0 - '@swagger-api/apidom-ns-json-schema-2019-09': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 + '@swagger-api/apidom-ns-json-schema-2019-09': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-json-schema-draft-4@1.6.0': + '@swagger-api/apidom-ns-json-schema-draft-4@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-ast': 1.6.0 - '@swagger-api/apidom-core': 1.6.0 + '@swagger-api/apidom-ast': 1.10.2 + '@swagger-api/apidom-core': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-json-schema-draft-6@1.6.0': + '@swagger-api/apidom-ns-json-schema-draft-6@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-error': 1.6.0 - '@swagger-api/apidom-ns-json-schema-draft-4': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 + '@swagger-api/apidom-ns-json-schema-draft-4': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-json-schema-draft-7@1.6.0': + '@swagger-api/apidom-ns-json-schema-draft-7@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-error': 1.6.0 - '@swagger-api/apidom-ns-json-schema-draft-6': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 + '@swagger-api/apidom-ns-json-schema-draft-6': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-openapi-2@1.6.0': + '@swagger-api/apidom-ns-openapi-2@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-error': 1.6.0 - '@swagger-api/apidom-ns-json-schema-draft-4': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 + '@swagger-api/apidom-ns-json-schema-draft-4': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-openapi-3-0@1.6.0': + '@swagger-api/apidom-ns-openapi-3-0@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-error': 1.6.0 - '@swagger-api/apidom-ns-json-schema-draft-4': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 + '@swagger-api/apidom-ns-json-schema-draft-4': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-openapi-3-1@1.6.0': + '@swagger-api/apidom-ns-openapi-3-1@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-ast': 1.6.0 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-json-pointer': 1.6.0 - '@swagger-api/apidom-ns-json-schema-2020-12': 1.6.0 - '@swagger-api/apidom-ns-openapi-3-0': 1.6.0 + '@swagger-api/apidom-ast': 1.10.2 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-json-pointer': 1.10.2 + '@swagger-api/apidom-ns-json-schema-2020-12': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-0': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-openapi-3-2@1.6.0': + '@swagger-api/apidom-ns-openapi-3-2@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-ast': 1.6.0 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-json-pointer': 1.6.0 - '@swagger-api/apidom-ns-json-schema-2020-12': 1.6.0 - '@swagger-api/apidom-ns-openapi-3-0': 1.6.0 - '@swagger-api/apidom-ns-openapi-3-1': 1.6.0 + '@swagger-api/apidom-ast': 1.10.2 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-json-pointer': 1.10.2 + '@swagger-api/apidom-ns-json-schema-2020-12': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-0': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-1': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.6.0': + '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-ns-api-design-systems': 1.6.0 - '@swagger-api/apidom-parser-adapter-json': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-api-design-systems': 1.10.2 + '@swagger-api/apidom-parser-adapter-json': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.6.0': + '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-ns-api-design-systems': 1.6.0 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-api-design-systems': 1.10.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.6.0': + '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-ns-arazzo-1': 1.6.0 - '@swagger-api/apidom-parser-adapter-json': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-arazzo-1': 1.10.2 + '@swagger-api/apidom-parser-adapter-json': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.6.0': + '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-ns-arazzo-1': 1.6.0 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-arazzo-1': 1.10.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.6.0': + '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-ns-asyncapi-2': 1.6.0 - '@swagger-api/apidom-parser-adapter-json': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-asyncapi-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-json': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-asyncapi-json-3@1.6.0': + '@swagger-api/apidom-parser-adapter-asyncapi-json-3@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-ns-asyncapi-3': 1.6.0 - '@swagger-api/apidom-parser-adapter-json': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-asyncapi-3': 1.10.2 + '@swagger-api/apidom-parser-adapter-json': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.6.0': + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-ns-asyncapi-2': 1.6.0 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-asyncapi-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3@1.6.0': + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-ns-asyncapi-3': 1.6.0 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-asyncapi-3': 1.10.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-json@1.6.0': + '@swagger-api/apidom-parser-adapter-json@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-ast': 1.6.0 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-error': 1.6.0 + '@swagger-api/apidom-ast': 1.10.2 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) @@ -13184,100 +13313,100 @@ snapshots: web-tree-sitter: 0.24.5 optional: true - '@swagger-api/apidom-parser-adapter-openapi-json-2@1.6.0': + '@swagger-api/apidom-parser-adapter-openapi-json-2@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-ns-openapi-2': 1.6.0 - '@swagger-api/apidom-parser-adapter-json': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-openapi-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-json': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.6.0': + '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-ns-openapi-3-0': 1.6.0 - '@swagger-api/apidom-parser-adapter-json': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-0': 1.10.2 + '@swagger-api/apidom-parser-adapter-json': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.6.0': + '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-ns-openapi-3-1': 1.6.0 - '@swagger-api/apidom-parser-adapter-json': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-1': 1.10.2 + '@swagger-api/apidom-parser-adapter-json': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-json-3-2@1.6.0': + '@swagger-api/apidom-parser-adapter-openapi-json-3-2@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-ns-openapi-3-2': 1.6.0 - '@swagger-api/apidom-parser-adapter-json': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-json': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.6.0': + '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-ns-openapi-2': 1.6.0 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-openapi-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.6.0': + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-ns-openapi-3-0': 1.6.0 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-0': 1.10.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.6.0': + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-ns-openapi-3-1': 1.6.0 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-1': 1.10.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-2@1.6.0': + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-2@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-ns-openapi-3-2': 1.6.0 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-yaml-1-2@1.6.0': + '@swagger-api/apidom-parser-adapter-yaml-1-2@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-ast': 1.6.0 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-error': 1.6.0 + '@swagger-api/apidom-ast': 1.10.2 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 '@tree-sitter-grammars/tree-sitter-yaml': 0.7.1(tree-sitter@0.22.4) '@types/ramda': 0.30.2 ramda: 0.30.1 @@ -13286,42 +13415,42 @@ snapshots: web-tree-sitter: 0.24.5 optional: true - '@swagger-api/apidom-reference@1.6.0': + '@swagger-api/apidom-reference@1.10.2': dependencies: '@babel/runtime-corejs3': 7.27.1 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-error': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 '@types/ramda': 0.30.2 - axios: 1.12.2 + axios: 1.15.0 minimatch: 10.2.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optionalDependencies: - '@swagger-api/apidom-json-pointer': 1.6.0 - '@swagger-api/apidom-ns-arazzo-1': 1.6.0 - '@swagger-api/apidom-ns-asyncapi-2': 1.6.0 - '@swagger-api/apidom-ns-openapi-2': 1.6.0 - '@swagger-api/apidom-ns-openapi-3-0': 1.6.0 - '@swagger-api/apidom-ns-openapi-3-1': 1.6.0 - '@swagger-api/apidom-ns-openapi-3-2': 1.6.0 - '@swagger-api/apidom-parser-adapter-api-design-systems-json': 1.6.0 - '@swagger-api/apidom-parser-adapter-api-design-systems-yaml': 1.6.0 - '@swagger-api/apidom-parser-adapter-arazzo-json-1': 1.6.0 - '@swagger-api/apidom-parser-adapter-arazzo-yaml-1': 1.6.0 - '@swagger-api/apidom-parser-adapter-asyncapi-json-2': 1.6.0 - '@swagger-api/apidom-parser-adapter-asyncapi-json-3': 1.6.0 - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2': 1.6.0 - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3': 1.6.0 - '@swagger-api/apidom-parser-adapter-json': 1.6.0 - '@swagger-api/apidom-parser-adapter-openapi-json-2': 1.6.0 - '@swagger-api/apidom-parser-adapter-openapi-json-3-0': 1.6.0 - '@swagger-api/apidom-parser-adapter-openapi-json-3-1': 1.6.0 - '@swagger-api/apidom-parser-adapter-openapi-json-3-2': 1.6.0 - '@swagger-api/apidom-parser-adapter-openapi-yaml-2': 1.6.0 - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0': 1.6.0 - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1': 1.6.0 - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-2': 1.6.0 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.6.0 + '@swagger-api/apidom-json-pointer': 1.10.2 + '@swagger-api/apidom-ns-arazzo-1': 1.10.2 + '@swagger-api/apidom-ns-asyncapi-2': 1.10.2 + '@swagger-api/apidom-ns-openapi-2': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-0': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-1': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-api-design-systems-json': 1.10.2 + '@swagger-api/apidom-parser-adapter-api-design-systems-yaml': 1.10.2 + '@swagger-api/apidom-parser-adapter-arazzo-json-1': 1.10.2 + '@swagger-api/apidom-parser-adapter-arazzo-yaml-1': 1.10.2 + '@swagger-api/apidom-parser-adapter-asyncapi-json-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-asyncapi-json-3': 1.10.2 + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3': 1.10.2 + '@swagger-api/apidom-parser-adapter-json': 1.10.2 + '@swagger-api/apidom-parser-adapter-openapi-json-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-openapi-json-3-0': 1.10.2 + '@swagger-api/apidom-parser-adapter-openapi-json-3-1': 1.10.2 + '@swagger-api/apidom-parser-adapter-openapi-json-3-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-openapi-yaml-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0': 1.10.2 + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1': 1.10.2 + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.2 transitivePeerDependencies: - debug @@ -13389,26 +13518,26 @@ snapshots: dependencies: '@swc/counter': 0.1.3 - '@t3-oss/env-core@0.13.10(arktype@2.1.20)(typescript@5.9.3)(zod@4.2.1)': + '@t3-oss/env-core@0.13.11(arktype@2.1.20)(typescript@5.9.3)(zod@4.3.6)': optionalDependencies: arktype: 2.1.20 typescript: 5.9.3 - zod: 4.2.1 + zod: 4.3.6 - '@t3-oss/env-nextjs@0.13.10(arktype@2.1.20)(typescript@5.9.3)(zod@4.2.1)': + '@t3-oss/env-nextjs@0.13.11(arktype@2.1.20)(typescript@5.9.3)(zod@4.3.6)': dependencies: - '@t3-oss/env-core': 0.13.10(arktype@2.1.20)(typescript@5.9.3)(zod@4.2.1) + '@t3-oss/env-core': 0.13.11(arktype@2.1.20)(typescript@5.9.3)(zod@4.3.6) optionalDependencies: arktype: 2.1.20 typescript: 5.9.3 - zod: 4.2.1 + zod: 4.3.6 - '@tabler/icons-react@3.40.0(react@19.2.4)': + '@tabler/icons-react@3.41.1(react@19.2.5)': dependencies: - '@tabler/icons': 3.40.0 - react: 19.2.4 + '@tabler/icons': 3.41.1 + react: 19.2.5 - '@tabler/icons@3.40.0': {} + '@tabler/icons@3.41.1': {} '@tanstack/devtools-event-client@0.4.0': {} @@ -13422,55 +13551,38 @@ snapshots: dependencies: remove-accents: 0.5.0 - '@tanstack/pacer-lite@0.1.1': {} + '@tanstack/query-core@5.100.5': {} - '@tanstack/query-core@5.90.19': {} + '@tanstack/query-devtools@5.100.5': {} - '@tanstack/query-devtools@5.93.0': {} - - '@tanstack/react-form@1.27.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@tanstack/react-query-devtools@5.100.5(@tanstack/react-query@5.100.5(react@19.2.5))(react@19.2.5)': dependencies: - '@tanstack/form-core': 1.27.7 - '@tanstack/react-store': 0.8.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react: 19.2.3 - transitivePeerDependencies: - - react-dom + '@tanstack/query-devtools': 5.100.5 + '@tanstack/react-query': 5.100.5(react@19.2.5) + react: 19.2.5 - '@tanstack/react-query-devtools@5.91.2(@tanstack/react-query@5.90.19(react@19.2.3))(react@19.2.3)': + '@tanstack/react-query-next-experimental@5.100.5(@tanstack/react-query@5.100.5(react@19.2.5))(next@16.2.4(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0))(react@19.2.5)': dependencies: - '@tanstack/query-devtools': 5.93.0 - '@tanstack/react-query': 5.90.21(react@19.2.4) - react: 19.2.4 + '@tanstack/react-query': 5.100.5(react@19.2.5) + next: 16.2.4(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) + react: 19.2.5 - '@tanstack/react-query-next-experimental@5.91.0(@tanstack/react-query@5.90.21(react@19.2.4))(next@16.1.6(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react@19.2.4)': + '@tanstack/react-query@5.100.5(react@19.2.5)': dependencies: - '@tanstack/react-query': 5.90.21(react@19.2.4) - next: 16.1.6(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) - react: 19.2.4 + '@tanstack/query-core': 5.100.5 + react: 19.2.5 - '@tanstack/react-query@5.90.21(react@19.2.4)': - dependencies: - '@tanstack/query-core': 5.90.20 - react: 19.2.4 - - '@tanstack/react-store@0.8.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@tanstack/store': 0.8.0 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - use-sync-external-store: 1.6.0(react@19.2.3) - - '@tanstack/react-table@8.20.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@tanstack/react-table@8.20.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@tanstack/table-core': 8.20.5 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) - '@tanstack/react-virtual@3.11.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@tanstack/react-virtual@3.11.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@tanstack/virtual-core': 3.11.2 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) '@tanstack/store@0.7.7': {} @@ -13480,252 +13592,246 @@ snapshots: '@tanstack/virtual-core@3.11.2': {} - '@testcontainers/mysql@11.12.0': + '@testcontainers/mysql@11.14.0': dependencies: - testcontainers: 11.12.0 + testcontainers: 11.14.0 transitivePeerDependencies: - bare-buffer - supports-color - '@testcontainers/postgresql@11.12.0': + '@testcontainers/postgresql@11.14.0': dependencies: - testcontainers: 11.12.0 + testcontainers: 11.14.0 transitivePeerDependencies: - bare-buffer - supports-color - '@testcontainers/redis@11.12.0': + '@testcontainers/redis@11.14.0': dependencies: - testcontainers: 11.12.0 + testcontainers: 11.14.0 transitivePeerDependencies: - bare-buffer - supports-color - '@tiptap/core@3.20.1(@tiptap/pm@3.20.1)': + '@tiptap/core@3.22.4(@tiptap/pm@3.22.4)': dependencies: - '@tiptap/pm': 3.20.1 + '@tiptap/pm': 3.22.4 - '@tiptap/extension-blockquote@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))': + '@tiptap/extension-blockquote@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) - '@tiptap/extension-bold@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))': + '@tiptap/extension-bold@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) - '@tiptap/extension-bubble-menu@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)': + '@tiptap/extension-bubble-menu@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)': dependencies: '@floating-ui/dom': 1.7.4 - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) - '@tiptap/pm': 3.20.1 + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) + '@tiptap/pm': 3.22.4 optional: true - '@tiptap/extension-bullet-list@3.20.1(@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))': + '@tiptap/extension-bullet-list@3.22.4(@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/extension-list': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) + '@tiptap/extension-list': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) - '@tiptap/extension-code-block@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)': + '@tiptap/extension-code-block@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) - '@tiptap/pm': 3.20.1 + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) + '@tiptap/pm': 3.22.4 - '@tiptap/extension-code@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))': + '@tiptap/extension-code@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) - '@tiptap/extension-color@3.20.1(@tiptap/extension-text-style@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1)))': + '@tiptap/extension-color@3.22.4(@tiptap/extension-text-style@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4)))': dependencies: - '@tiptap/extension-text-style': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1)) + '@tiptap/extension-text-style': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4)) - '@tiptap/extension-document@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))': + '@tiptap/extension-document@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) - '@tiptap/extension-dropcursor@3.20.1(@tiptap/extensions@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))': + '@tiptap/extension-dropcursor@3.22.4(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/extensions': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) + '@tiptap/extensions': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) - '@tiptap/extension-floating-menu@3.20.1(@floating-ui/dom@1.7.4)(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)': + '@tiptap/extension-floating-menu@3.22.4(@floating-ui/dom@1.7.4)(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)': dependencies: '@floating-ui/dom': 1.7.4 - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) - '@tiptap/pm': 3.20.1 + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) + '@tiptap/pm': 3.22.4 optional: true - '@tiptap/extension-gapcursor@3.20.1(@tiptap/extensions@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))': + '@tiptap/extension-gapcursor@3.22.4(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/extensions': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) + '@tiptap/extensions': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) - '@tiptap/extension-hard-break@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))': + '@tiptap/extension-hard-break@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) - '@tiptap/extension-heading@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))': + '@tiptap/extension-heading@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) - '@tiptap/extension-highlight@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))': + '@tiptap/extension-highlight@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) - '@tiptap/extension-horizontal-rule@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)': + '@tiptap/extension-horizontal-rule@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) - '@tiptap/pm': 3.20.1 + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) + '@tiptap/pm': 3.22.4 - '@tiptap/extension-image@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))': + '@tiptap/extension-image@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) - '@tiptap/extension-italic@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))': + '@tiptap/extension-italic@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) - '@tiptap/extension-link@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)': + '@tiptap/extension-link@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) - '@tiptap/pm': 3.20.1 + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) + '@tiptap/pm': 3.22.4 linkifyjs: 4.3.2 - '@tiptap/extension-list-item@3.20.1(@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))': + '@tiptap/extension-list-item@3.22.4(@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/extension-list': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) + '@tiptap/extension-list': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) - '@tiptap/extension-list-keymap@3.20.1(@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))': + '@tiptap/extension-list-keymap@3.22.4(@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/extension-list': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) + '@tiptap/extension-list': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) - '@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)': + '@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) - '@tiptap/pm': 3.20.1 + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) + '@tiptap/pm': 3.22.4 - '@tiptap/extension-ordered-list@3.20.1(@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))': + '@tiptap/extension-ordered-list@3.22.4(@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/extension-list': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) + '@tiptap/extension-list': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) - '@tiptap/extension-paragraph@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))': + '@tiptap/extension-paragraph@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) - '@tiptap/extension-placeholder@3.20.1(@tiptap/extensions@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))': + '@tiptap/extension-placeholder@3.22.4(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/extensions': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) + '@tiptap/extensions': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) - '@tiptap/extension-strike@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))': + '@tiptap/extension-strike@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) - '@tiptap/extension-table-cell@3.20.1(@tiptap/extension-table@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))': + '@tiptap/extension-table-cell@3.22.4(@tiptap/extension-table@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/extension-table': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) + '@tiptap/extension-table': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) - '@tiptap/extension-table-header@3.20.1(@tiptap/extension-table@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))': + '@tiptap/extension-table-header@3.22.4(@tiptap/extension-table@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/extension-table': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) + '@tiptap/extension-table': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) - '@tiptap/extension-table-row@3.20.1(@tiptap/extension-table@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))': + '@tiptap/extension-table-row@3.22.4(@tiptap/extension-table@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/extension-table': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) + '@tiptap/extension-table': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) - '@tiptap/extension-table@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)': + '@tiptap/extension-table@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) - '@tiptap/pm': 3.20.1 + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) + '@tiptap/pm': 3.22.4 - '@tiptap/extension-task-item@3.20.1(@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))': + '@tiptap/extension-task-item@3.22.4(@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/extension-list': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) + '@tiptap/extension-list': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) - '@tiptap/extension-task-list@3.20.1(@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))': + '@tiptap/extension-task-list@3.22.4(@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/extension-list': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) + '@tiptap/extension-list': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) - '@tiptap/extension-text-align@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))': + '@tiptap/extension-text-align@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) - '@tiptap/extension-text-style@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))': + '@tiptap/extension-text-style@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) - '@tiptap/extension-text@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))': + '@tiptap/extension-text@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) - '@tiptap/extension-underline@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))': + '@tiptap/extension-underline@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) - '@tiptap/extensions@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)': + '@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) - '@tiptap/pm': 3.20.1 + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) + '@tiptap/pm': 3.22.4 - '@tiptap/pm@3.20.1': + '@tiptap/pm@3.22.4': dependencies: prosemirror-changeset: 2.3.0 - prosemirror-collab: 1.3.1 prosemirror-commands: 1.6.2 prosemirror-dropcursor: 1.8.1 prosemirror-gapcursor: 1.3.2 prosemirror-history: 1.4.1 - prosemirror-inputrules: 1.4.0 prosemirror-keymap: 1.2.2 - prosemirror-markdown: 1.13.1 - prosemirror-menu: 1.2.4 prosemirror-model: 1.24.1 - prosemirror-schema-basic: 1.2.3 prosemirror-schema-list: 1.5.1 prosemirror-state: 1.4.3 prosemirror-tables: 1.6.4 - prosemirror-trailing-node: 3.0.0(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-view@1.41.4) prosemirror-transform: 1.10.2 prosemirror-view: 1.41.4 - '@tiptap/react@3.20.1(@floating-ui/dom@1.7.4)(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@tiptap/react@3.22.4(@floating-ui/dom@1.7.4)(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) - '@tiptap/pm': 3.20.1 + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) + '@tiptap/pm': 3.22.4 '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) '@types/use-sync-external-store': 0.0.6 fast-equals: 5.3.3 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - use-sync-external-store: 1.4.0(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + use-sync-external-store: 1.4.0(react@19.2.5) optionalDependencies: - '@tiptap/extension-bubble-menu': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) - '@tiptap/extension-floating-menu': 3.20.1(@floating-ui/dom@1.7.4)(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) + '@tiptap/extension-bubble-menu': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) + '@tiptap/extension-floating-menu': 3.22.4(@floating-ui/dom@1.7.4)(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) transitivePeerDependencies: - '@floating-ui/dom' - '@tiptap/starter-kit@3.20.1': + '@tiptap/starter-kit@3.22.4': dependencies: - '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1) - '@tiptap/extension-blockquote': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1)) - '@tiptap/extension-bold': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1)) - '@tiptap/extension-bullet-list': 3.20.1(@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)) - '@tiptap/extension-code': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1)) - '@tiptap/extension-code-block': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) - '@tiptap/extension-document': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1)) - '@tiptap/extension-dropcursor': 3.20.1(@tiptap/extensions@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)) - '@tiptap/extension-gapcursor': 3.20.1(@tiptap/extensions@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)) - '@tiptap/extension-hard-break': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1)) - '@tiptap/extension-heading': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1)) - '@tiptap/extension-horizontal-rule': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) - '@tiptap/extension-italic': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1)) - '@tiptap/extension-link': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) - '@tiptap/extension-list': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) - '@tiptap/extension-list-item': 3.20.1(@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)) - '@tiptap/extension-list-keymap': 3.20.1(@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)) - '@tiptap/extension-ordered-list': 3.20.1(@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)) - '@tiptap/extension-paragraph': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1)) - '@tiptap/extension-strike': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1)) - '@tiptap/extension-text': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1)) - '@tiptap/extension-underline': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1)) - '@tiptap/extensions': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1) - '@tiptap/pm': 3.20.1 + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) + '@tiptap/extension-blockquote': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4)) + '@tiptap/extension-bold': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4)) + '@tiptap/extension-bullet-list': 3.22.4(@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)) + '@tiptap/extension-code': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4)) + '@tiptap/extension-code-block': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) + '@tiptap/extension-document': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4)) + '@tiptap/extension-dropcursor': 3.22.4(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)) + '@tiptap/extension-gapcursor': 3.22.4(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)) + '@tiptap/extension-hard-break': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4)) + '@tiptap/extension-heading': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4)) + '@tiptap/extension-horizontal-rule': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) + '@tiptap/extension-italic': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4)) + '@tiptap/extension-link': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) + '@tiptap/extension-list': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) + '@tiptap/extension-list-item': 3.22.4(@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)) + '@tiptap/extension-list-keymap': 3.22.4(@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)) + '@tiptap/extension-ordered-list': 3.22.4(@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)) + '@tiptap/extension-paragraph': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4)) + '@tiptap/extension-strike': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4)) + '@tiptap/extension-text': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4)) + '@tiptap/extension-underline': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4)) + '@tiptap/extensions': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) + '@tiptap/pm': 3.22.4 '@tree-sitter-grammars/tree-sitter-yaml@0.7.1(tree-sitter@0.22.4)': dependencies: @@ -13735,82 +13841,79 @@ snapshots: tree-sitter: 0.22.4 optional: true - '@trpc/client@11.12.0(@trpc/server@11.12.0(typescript@5.9.3))(typescript@5.9.3)': + '@trpc/client@11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3)': dependencies: - '@trpc/server': 11.12.0(typescript@5.9.3) + '@trpc/server': 11.16.0(typescript@5.9.3) typescript: 5.9.3 - '@trpc/next@11.12.0(@tanstack/react-query@5.90.21(react@19.2.4))(@trpc/client@11.12.0(@trpc/server@11.12.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/react-query@11.12.0(@tanstack/react-query@5.90.21(react@19.2.4))(@trpc/client@11.12.0(@trpc/server@11.12.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.12.0(typescript@5.9.3))(react@19.2.4)(typescript@5.9.3))(@trpc/server@11.12.0(typescript@5.9.3))(next@16.1.6(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@trpc/next@11.16.0(@tanstack/react-query@5.100.5(react@19.2.5))(@trpc/client@11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/react-query@11.16.0(@tanstack/react-query@5.100.5(react@19.2.5))(@trpc/client@11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.16.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3))(@trpc/server@11.16.0(typescript@5.9.3))(next@16.2.4(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)': dependencies: - '@trpc/client': 11.12.0(@trpc/server@11.12.0(typescript@5.9.3))(typescript@5.9.3) - '@trpc/server': 11.12.0(typescript@5.9.3) - next: 16.1.6(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@trpc/client': 11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3) + '@trpc/server': 11.16.0(typescript@5.9.3) + next: 16.2.4(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) typescript: 5.9.3 optionalDependencies: - '@tanstack/react-query': 5.90.21(react@19.2.4) - '@trpc/react-query': 11.12.0(@tanstack/react-query@5.90.21(react@19.2.4))(@trpc/client@11.12.0(@trpc/server@11.12.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.12.0(typescript@5.9.3))(react@19.2.4)(typescript@5.9.3) + '@tanstack/react-query': 5.100.5(react@19.2.5) + '@trpc/react-query': 11.16.0(@tanstack/react-query@5.100.5(react@19.2.5))(@trpc/client@11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.16.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3) - '@trpc/react-query@11.12.0(@tanstack/react-query@5.90.21(react@19.2.4))(@trpc/client@11.12.0(@trpc/server@11.12.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.12.0(typescript@5.9.3))(react@19.2.4)(typescript@5.9.3)': + '@trpc/react-query@11.16.0(@tanstack/react-query@5.100.5(react@19.2.5))(@trpc/client@11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.16.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3)': dependencies: - '@tanstack/react-query': 5.90.21(react@19.2.4) - '@trpc/client': 11.12.0(@trpc/server@11.12.0(typescript@5.9.3))(typescript@5.9.3) - '@trpc/server': 11.12.0(typescript@5.9.3) - react: 19.2.4 + '@tanstack/react-query': 5.100.5(react@19.2.5) + '@trpc/client': 11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3) + '@trpc/server': 11.16.0(typescript@5.9.3) + react: 19.2.5 typescript: 5.9.3 - '@trpc/server@11.12.0(typescript@5.9.3)': + '@trpc/server@11.16.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@trpc/tanstack-react-query@11.12.0(@tanstack/react-query@5.90.21(react@19.2.4))(@trpc/client@11.12.0(@trpc/server@11.12.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.12.0(typescript@5.9.3))(react@19.2.4)(typescript@5.9.3)': + '@trpc/tanstack-react-query@11.16.0(@tanstack/react-query@5.100.5(react@19.2.5))(@trpc/client@11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.16.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3)': dependencies: - '@tanstack/react-query': 5.90.21(react@19.2.4) - '@trpc/client': 11.12.0(@trpc/server@11.12.0(typescript@5.9.3))(typescript@5.9.3) - '@trpc/server': 11.12.0(typescript@5.9.3) - react: 19.2.4 + '@tanstack/react-query': 5.100.5(react@19.2.5) + '@trpc/client': 11.16.0(@trpc/server@11.16.0(typescript@5.9.3))(typescript@5.9.3) + '@trpc/server': 11.16.0(typescript@5.9.3) + react: 19.2.5 typescript: 5.9.3 '@tsconfig/svelte@1.0.13': {} - '@turbo/gen-darwin-64@2.8.16': + '@turbo/darwin-64@2.9.6': optional: true - '@turbo/gen-darwin-arm64@2.8.16': + '@turbo/darwin-arm64@2.9.6': optional: true - '@turbo/gen-linux-64@2.8.16': - optional: true - - '@turbo/gen-linux-arm64@2.8.16': - optional: true - - '@turbo/gen-windows-64@2.8.16': - optional: true - - '@turbo/gen@2.8.16(@types/node@24.12.0)': + '@turbo/gen@2.9.6(@types/node@24.12.2)': dependencies: - '@inquirer/prompts': 7.10.1(@types/node@24.12.0) - node-plop: 0.32.3(@types/node@24.12.0) - optionalDependencies: - '@turbo/gen-darwin-64': 2.8.16 - '@turbo/gen-darwin-arm64': 2.8.16 - '@turbo/gen-linux-64': 2.8.16 - '@turbo/gen-linux-arm64': 2.8.16 - '@turbo/gen-windows-64': 2.8.16 + '@inquirer/prompts': 7.10.1(@types/node@24.12.2) + esbuild: 0.25.12 transitivePeerDependencies: - '@types/node' - '@types/adm-zip@0.5.7': + '@turbo/linux-64@2.9.6': + optional: true + + '@turbo/linux-arm64@2.9.6': + optional: true + + '@turbo/windows-64@2.9.6': + optional: true + + '@turbo/windows-arm64@2.9.6': + optional: true + + '@types/adm-zip@0.5.8': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/aws-lambda@8.10.146': {} '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 @@ -13822,7 +13925,7 @@ snapshots: '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@types/babel__traverse@7.20.6': @@ -13831,16 +13934,16 @@ snapshots: '@types/bcrypt@6.0.0': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/better-sqlite3@7.6.13': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/chai@5.2.2': dependencies: @@ -13850,7 +13953,7 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/cookie@0.4.1': {} @@ -13859,11 +13962,11 @@ snapshots: '@types/connect': 3.4.38 '@types/express': 4.17.21 '@types/keygrip': 1.0.6 - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/cors@2.8.17': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/crypto-js@4.2.2': {} @@ -13903,13 +14006,13 @@ snapshots: '@types/docker-modem@3.0.6': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/ssh2': 1.15.1 '@types/dockerode@4.0.1': dependencies: '@types/docker-modem': 3.0.6 - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/ssh2': 1.15.1 '@types/estree-jsx@1.0.5': @@ -13920,7 +14023,7 @@ snapshots: '@types/express-serve-static-core@4.19.5': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/qs': 6.9.16 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -13934,15 +14037,10 @@ snapshots: '@types/hast@3.0.4': dependencies: - '@types/unist': 2.0.11 + '@types/unist': 3.0.3 '@types/http-errors@2.0.4': {} - '@types/inquirer@9.0.9': - dependencies: - '@types/through': 0.0.33 - rxjs: 7.8.2 - '@types/js-yaml@4.0.9': {} '@types/json-schema@7.0.15': {} @@ -13951,18 +14049,9 @@ snapshots: '@types/keygrip@1.0.6': {} - '@types/linkify-it@5.0.0': {} - - '@types/markdown-it@14.1.2': - dependencies: - '@types/linkify-it': 5.0.0 - '@types/mdurl': 2.0.0 - '@types/mdast@4.0.4': dependencies: - '@types/unist': 2.0.11 - - '@types/mdurl@2.0.0': {} + '@types/unist': 3.0.3 '@types/mime@1.3.5': {} @@ -13972,7 +14061,7 @@ snapshots: '@types/node-fetch@2.6.13': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 form-data: 4.0.5 '@types/node-unifi@2.5.1(patch_hash=5e6ae51e2a17a7f9729bfa30b0eb3d0842a5810ac6db47603ab4a6efa1ed84c5)': @@ -13983,20 +14072,18 @@ snapshots: dependencies: undici-types: 5.26.5 - '@types/node@24.12.0': + '@types/node@24.12.2': dependencies: undici-types: 7.16.0 '@types/normalize-package-data@2.4.4': {} - '@types/pg@8.18.0': + '@types/pg@8.20.0': dependencies: - '@types/node': 24.12.0 - pg-protocol: 1.12.0 + '@types/node': 24.12.2 + pg-protocol: 1.13.0 pg-types: 2.2.0 - '@types/picomatch@4.0.2': {} - '@types/prismjs@1.26.6': {} '@types/qs@6.9.16': {} @@ -14020,21 +14107,21 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/send': 0.17.4 '@types/ssh2-streams@0.1.12': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/ssh2@0.5.52': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/ssh2-streams': 0.1.12 '@types/ssh2@1.15.1': @@ -14043,16 +14130,12 @@ snapshots: '@types/stream-buffers@3.0.7': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/swagger-ui-react@5.18.0': dependencies: '@types/react': 19.2.14 - '@types/through@0.0.33': - dependencies: - '@types/node': 24.12.0 - '@types/triple-beam@1.3.5': {} '@types/trusted-types@2.0.7': @@ -14068,101 +14151,101 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 '@types/xml2js@0.4.14': dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 - '@typescript-eslint/eslint-plugin@8.57.0(@typescript-eslint/parser@8.57.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.58.2(@typescript-eslint/parser@8.58.2(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.57.0(eslint@9.39.4)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.57.0 - '@typescript-eslint/type-utils': 8.57.0(eslint@9.39.4)(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.0(eslint@9.39.4)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.57.0 + '@typescript-eslint/parser': 8.58.2(eslint@9.39.4)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.58.2 + '@typescript-eslint/type-utils': 8.58.2(eslint@9.39.4)(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.2(eslint@9.39.4)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.58.2 eslint: 9.39.4 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.9.3) + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.57.0(eslint@9.39.4)(typescript@5.9.3)': + '@typescript-eslint/parser@8.58.2(eslint@9.39.4)(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.57.0 - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.57.0 + '@typescript-eslint/scope-manager': 8.58.2 + '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.58.2 debug: 4.4.3 eslint: 9.39.4 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.57.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.58.2(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@5.9.3) - '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/tsconfig-utils': 8.58.2(typescript@5.9.3) + '@typescript-eslint/types': 8.58.2 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.57.0': + '@typescript-eslint/scope-manager@8.58.2': dependencies: - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/visitor-keys': 8.57.0 + '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/visitor-keys': 8.58.2 - '@typescript-eslint/tsconfig-utils@8.57.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.58.2(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.57.0(eslint@9.39.4)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.58.2(eslint@9.39.4)(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.0(eslint@9.39.4)(typescript@5.9.3) + '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.2(eslint@9.39.4)(typescript@5.9.3) debug: 4.4.3 eslint: 9.39.4 - ts-api-utils: 2.4.0(typescript@5.9.3) + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.57.0': {} + '@typescript-eslint/types@8.58.2': {} - '@typescript-eslint/typescript-estree@8.57.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.58.2(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.57.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@5.9.3) - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/visitor-keys': 8.57.0 + '@typescript-eslint/project-service': 8.58.2(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.58.2(typescript@5.9.3) + '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/visitor-keys': 8.58.2 debug: 4.4.3 minimatch: 10.2.2 semver: 7.7.4 tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.9.3) + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.57.0(eslint@9.39.4)(typescript@5.9.3)': + '@typescript-eslint/utils@8.58.2(eslint@9.39.4)(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4) - '@typescript-eslint/scope-manager': 8.57.0 - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.58.2 + '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.9.3) eslint: 9.39.4 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.57.0': + '@typescript-eslint/visitor-keys@8.58.2': dependencies: - '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/types': 8.58.2 eslint-visitor-keys: 5.0.0 '@umami/node@0.4.0': {} @@ -14171,7 +14254,7 @@ snapshots: '@videojs/http-streaming@3.17.4(video.js@8.23.7)': dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@videojs/vhs-utils': 4.1.1 aes-decrypter: 4.0.2 global: 4.4.0 @@ -14182,22 +14265,22 @@ snapshots: '@videojs/vhs-utils@4.0.0': dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 global: 4.4.0 url-toolkit: 2.2.5 '@videojs/vhs-utils@4.1.1': dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 global: 4.4.0 '@videojs/xhr@2.7.0': dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 global: 4.4.0 is-function: 1.0.2 - '@vitejs/plugin-react@5.1.4(vite@7.1.12(@types/node@24.12.0)(sass@1.97.3)(sugarss@5.0.0(postcss@8.5.6))(terser@5.46.0)(tsx@4.21.0)(yaml@2.5.1))': + '@vitejs/plugin-react@5.2.0(vite@7.1.12(@types/node@24.12.2)(sass@1.99.0)(sugarss@5.0.0(postcss@8.5.8))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -14205,73 +14288,75 @@ snapshots: '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.1.12(@types/node@24.12.0)(sass@1.97.3)(sugarss@5.0.0(postcss@8.5.6))(terser@5.46.0)(tsx@4.21.0)(yaml@2.5.1) + vite: 7.1.12(@types/node@24.12.2)(sass@1.99.0)(sugarss@5.0.0(postcss@8.5.8))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@4.0.18(vitest@4.0.18)': + '@vitest/coverage-v8@4.1.5(vitest@4.1.5)': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.0.18 - ast-v8-to-istanbul: 0.3.10 + '@vitest/utils': 4.1.5 + ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-reports: 3.2.0 - magicast: 0.5.1 + magicast: 0.5.2 obug: 2.1.1 - std-env: 3.10.0 - tinyrainbow: 3.0.3 - vitest: 4.0.18(@types/node@24.12.0)(@vitest/ui@4.0.18)(jsdom@28.1.0(@noble/hashes@2.0.1))(sass@1.97.3)(sugarss@5.0.0(postcss@8.5.6))(terser@5.46.0)(tsx@4.21.0)(yaml@2.5.1) + std-env: 4.0.0 + tinyrainbow: 3.1.0 + vitest: 4.1.5(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@29.0.2(@noble/hashes@2.0.1))(vite@7.1.12(@types/node@24.12.2)(sass@1.99.0)(sugarss@5.0.0(postcss@8.5.8))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - '@vitest/expect@4.0.18': + '@vitest/expect@4.1.5': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.2 - '@vitest/spy': 4.0.18 - '@vitest/utils': 4.0.18 - chai: 6.2.1 - tinyrainbow: 3.0.3 + '@vitest/spy': 4.1.5 + '@vitest/utils': 4.1.5 + chai: 6.2.2 + tinyrainbow: 3.1.0 - '@vitest/mocker@4.0.18(vite@7.1.12(@types/node@24.12.0)(sass@1.97.3)(sugarss@5.0.0(postcss@8.5.6))(terser@5.46.0)(tsx@4.21.0)(yaml@2.5.1))': + '@vitest/mocker@4.1.5(vite@7.1.12(@types/node@24.12.2)(sass@1.99.0)(sugarss@5.0.0(postcss@8.5.8))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@vitest/spy': 4.0.18 + '@vitest/spy': 4.1.5 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.1.12(@types/node@24.12.0)(sass@1.97.3)(sugarss@5.0.0(postcss@8.5.6))(terser@5.46.0)(tsx@4.21.0)(yaml@2.5.1) + vite: 7.1.12(@types/node@24.12.2)(sass@1.99.0)(sugarss@5.0.0(postcss@8.5.8))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/pretty-format@4.0.18': + '@vitest/pretty-format@4.1.5': dependencies: - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 - '@vitest/runner@4.0.18': + '@vitest/runner@4.1.5': dependencies: - '@vitest/utils': 4.0.18 + '@vitest/utils': 4.1.5 pathe: 2.0.3 - '@vitest/snapshot@4.0.18': + '@vitest/snapshot@4.1.5': dependencies: - '@vitest/pretty-format': 4.0.18 + '@vitest/pretty-format': 4.1.5 + '@vitest/utils': 4.1.5 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.0.18': {} + '@vitest/spy@4.1.5': {} - '@vitest/ui@4.0.18(vitest@4.0.18)': + '@vitest/ui@4.1.5(vitest@4.1.5)': dependencies: - '@vitest/utils': 4.0.18 + '@vitest/utils': 4.1.5 fflate: 0.8.2 - flatted: 3.3.3 + flatted: 3.4.2 pathe: 2.0.3 sirv: 3.0.2 tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vitest: 4.0.18(@types/node@24.12.0)(@vitest/ui@4.0.18)(jsdom@28.1.0(@noble/hashes@2.0.1))(sass@1.97.3)(sugarss@5.0.0(postcss@8.5.6))(terser@5.46.0)(tsx@4.21.0)(yaml@2.5.1) + tinyrainbow: 3.1.0 + vitest: 4.1.5(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@29.0.2(@noble/hashes@2.0.1))(vite@7.1.12(@types/node@24.12.2)(sass@1.99.0)(sugarss@5.0.0(postcss@8.5.8))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - '@vitest/utils@4.0.18': + '@vitest/utils@4.1.5': dependencies: - '@vitest/pretty-format': 4.0.18 - tinyrainbow: 3.0.3 + '@vitest/pretty-format': 4.1.5 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 '@webassemblyjs/ast@1.14.1': dependencies: @@ -14384,15 +14469,13 @@ snapshots: dependencies: acorn: 8.16.0 - acorn@8.14.0: {} - acorn@8.16.0: {} - adm-zip@0.5.16: {} + adm-zip@0.5.17: {} aes-decrypter@4.0.2: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@videojs/vhs-utils': 4.1.1 global: 4.4.0 pkcs7: 1.0.4 @@ -14444,10 +14527,6 @@ snapshots: dependencies: string-width: 4.2.3 - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - ansi-escapes@7.0.0: dependencies: environment: 1.1.0 @@ -14476,7 +14555,7 @@ snapshots: graceful-fs: 4.2.11 is-stream: 2.0.1 lazystream: 1.0.1 - lodash: 4.17.21 + lodash: 4.18.1 normalize-path: 3.0.0 readable-stream: 4.5.2 @@ -14506,11 +14585,6 @@ snapshots: '@ark/util': 0.46.0 optional: true - array-buffer-byte-length@1.0.1: - dependencies: - call-bind: 1.0.8 - is-array-buffer: 3.0.4 - array-buffer-byte-length@1.0.2: dependencies: call-bound: 1.0.4 @@ -14518,15 +14592,6 @@ snapshots: array-ify@1.0.0: {} - array-includes@3.1.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - is-string: 1.0.7 - array-includes@3.1.9: dependencies: call-bind: 1.0.8 @@ -14542,10 +14607,10 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.7 + es-abstract: 1.24.0 es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 array.prototype.findlastindex@1.2.6: dependencies: @@ -14557,59 +14622,34 @@ snapshots: es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 - array.prototype.flat@1.3.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - array.prototype.flat@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.7 - es-shim-unscopables: 1.0.2 - - array.prototype.flatmap@1.3.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 + es-abstract: 1.24.0 + es-shim-unscopables: 1.1.0 array.prototype.flatmap@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.7 - es-shim-unscopables: 1.0.2 + es-abstract: 1.24.0 + es-shim-unscopables: 1.1.0 array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.7 + es-abstract: 1.24.0 es-errors: 1.3.0 - es-shim-unscopables: 1.0.2 - - arraybuffer.prototype.slice@1.0.3: - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.7 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 + es-shim-unscopables: 1.1.0 arraybuffer.prototype.slice@1.0.4: dependencies: array-buffer-byte-length: 1.0.2 call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.7 + es-abstract: 1.24.0 es-errors: 1.3.0 get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 @@ -14628,11 +14668,11 @@ snapshots: dependencies: tslib: 2.8.1 - ast-v8-to-istanbul@0.3.10: + ast-v8-to-istanbul@1.0.0: dependencies: '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 - js-tokens: 9.0.1 + js-tokens: 10.0.0 async-lock@1.4.1: {} @@ -14661,11 +14701,11 @@ snapshots: axe-core@4.10.0: {} - axios@1.12.2: + axios@1.15.0: dependencies: - follow-redirects: 1.15.9 + follow-redirects: 1.16.0 form-data: 4.0.5 - proxy-from-env: 1.1.0 + proxy-from-env: 2.1.0 transitivePeerDependencies: - debug @@ -14683,7 +14723,7 @@ snapshots: babel-plugin-react-compiler@1.0.0: dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.29.0 babel-plugin-syntax-hermes-parser@0.21.1: dependencies: @@ -14728,8 +14768,6 @@ snapshots: base64id@2.0.0: {} - baseline-browser-mapping@2.8.29: {} - baseline-browser-mapping@2.9.19: {} bcrypt-pbkdf@1.0.2: @@ -14738,12 +14776,12 @@ snapshots: bcrypt@6.0.0: dependencies: - node-addon-api: 8.3.0 + node-addon-api: 8.3.1 node-gyp-build: 4.8.4 before-after-hook@4.0.0: {} - better-sqlite3@12.6.2: + better-sqlite3@12.9.0: dependencies: bindings: 1.5.0 prebuild-install: 7.1.2 @@ -14781,11 +14819,7 @@ snapshots: widest-line: 3.1.0 wrap-ansi: 7.0.0 - brace-expansion@5.0.2: - dependencies: - balanced-match: 4.0.2 - - brace-expansion@5.0.4: + brace-expansion@5.0.5: dependencies: balanced-match: 4.0.2 @@ -14793,20 +14827,6 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.24.2: - dependencies: - caniuse-lite: 1.0.30001755 - electron-to-chromium: 1.5.55 - node-releases: 2.0.18 - update-browserslist-db: 1.1.1(browserslist@4.24.2) - - browserslist@4.24.4: - dependencies: - caniuse-lite: 1.0.30001755 - electron-to-chromium: 1.5.114 - node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.24.4) - browserslist@4.28.1: dependencies: baseline-browser-mapping: 2.9.19 @@ -14836,36 +14856,18 @@ snapshots: bytes@3.1.2: {} - call-bind-apply-helpers@1.0.1: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - call-bind@1.0.7: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - call-bind@1.0.8: dependencies: - call-bind-apply-helpers: 1.0.1 + call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 - get-intrinsic: 1.2.6 + get-intrinsic: 1.3.0 set-function-length: 1.2.2 - call-bound@1.0.3: - dependencies: - call-bind-apply-helpers: 1.0.1 - get-intrinsic: 1.2.6 - call-bound@1.0.4: dependencies: call-bind-apply-helpers: 1.0.2 @@ -14877,13 +14879,11 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001755: {} - caniuse-lite@1.0.30001766: {} ccount@2.0.1: {} - chai@6.2.1: {} + chai@6.2.2: {} chalk@2.4.2: dependencies: @@ -14898,8 +14898,6 @@ snapshots: chalk@5.4.1: {} - change-case@5.4.4: {} - char-regex@1.0.2: {} character-entities-html4@2.1.0: {} @@ -14936,10 +14934,6 @@ snapshots: cli-boxes@2.2.1: {} - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - cli-high@0.4.3: dependencies: '@clack/prompts': 0.7.0 @@ -14956,8 +14950,6 @@ snapshots: parse5-htmlparser2-tree-adapter: 6.0.1 yargs: 16.2.0 - cli-spinners@2.9.2: {} - cli-table3@0.6.5: dependencies: string-width: 4.2.3 @@ -14986,8 +14978,6 @@ snapshots: strip-ansi: 7.1.2 wrap-ansi: 9.0.2 - clone@1.0.4: {} - clsx@2.1.1: {} cluster-key-slot@1.1.2: {} @@ -15075,7 +15065,7 @@ snapshots: dependencies: compare-func: 2.0.0 - conventional-changelog-conventionalcommits@9.3.0: + conventional-changelog-conventionalcommits@9.3.1: dependencies: compare-func: 2.0.0 @@ -15099,6 +15089,8 @@ snapshots: cookie-es@1.2.2: {} + cookie-es@3.0.1: {} + cookie@0.7.2: {} cookie@1.1.1: {} @@ -15147,8 +15139,6 @@ snapshots: crc-32: 1.2.2 readable-stream: 4.5.2 - crelt@1.0.6: {} - cross-env@10.1.0: dependencies: '@epic-web/invariant': 1.0.0 @@ -15178,22 +15168,15 @@ snapshots: dependencies: type-fest: 1.4.0 - css-tree@3.1.0: + css-tree@3.2.1: dependencies: - mdn-data: 2.12.2 + mdn-data: 2.27.1 source-map-js: 1.2.1 css.escape@1.5.1: {} cssesc@3.0.0: {} - cssstyle@6.0.1: - dependencies: - '@asamuzakjp/css-color': 4.1.2 - '@csstools/css-syntax-patches-for-csstree': 1.0.26 - css-tree: 3.1.0 - lru-cache: 11.2.5 - csstype@3.2.3: {} d3-array@3.2.4: @@ -15239,47 +15222,29 @@ snapshots: data-urls@7.0.0(@noble/hashes@2.0.1): dependencies: whatwg-mimetype: 5.0.0 - whatwg-url: 16.0.0(@noble/hashes@2.0.1) + whatwg-url: 16.0.1(@noble/hashes@2.0.1) transitivePeerDependencies: - '@noble/hashes' - data-view-buffer@1.0.1: - dependencies: - call-bind: 1.0.8 - es-errors: 1.3.0 - is-data-view: 1.0.1 - data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 - data-view-byte-length@1.0.1: - dependencies: - call-bind: 1.0.8 - es-errors: 1.3.0 - is-data-view: 1.0.1 - data-view-byte-length@1.0.2: dependencies: call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 - data-view-byte-offset@1.0.0: - dependencies: - call-bind: 1.0.8 - es-errors: 1.3.0 - is-data-view: 1.0.1 - data-view-byte-offset@1.0.1: dependencies: call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 - dayjs@1.11.19: {} + dayjs@1.11.20: {} debug@3.2.7: dependencies: @@ -15289,14 +15254,6 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.4.0: - dependencies: - ms: 2.1.3 - - debug@4.4.1: - dependencies: - ms: 2.1.3 - debug@4.4.3: dependencies: ms: 2.1.3 @@ -15324,13 +15281,9 @@ snapshots: deepmerge@4.3.1: {} - defaults@1.0.4: - dependencies: - clone: 1.0.4 - define-data-property@1.1.4: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 gopd: 1.2.0 @@ -15350,8 +15303,6 @@ snapshots: dequal@2.0.3: {} - destr@2.0.3: {} - destr@2.0.5: {} detect-indent@7.0.2: {} @@ -15374,17 +15325,15 @@ snapshots: dependencies: path-type: 4.0.0 - dlv@1.1.3: {} - dns-caching@0.2.9: dependencies: - lru-cache: 11.2.4 + lru-cache: 11.2.7 - docker-compose@1.3.1: + docker-compose@1.4.2: dependencies: - yaml: 2.5.1 + yaml: 2.8.3 - docker-modem@5.0.6: + docker-modem@5.0.7: dependencies: debug: 4.4.3 readable-stream: 3.6.2 @@ -15393,34 +15342,45 @@ snapshots: transitivePeerDependencies: - supports-color - dockerode@4.0.9: + dockerode@4.0.10: dependencies: '@balena/dockerignore': 1.0.2 '@grpc/grpc-js': 1.12.5 '@grpc/proto-loader': 0.7.13 - docker-modem: 5.0.6 + docker-modem: 5.0.7 protobufjs: 7.4.0 tar-fs: 2.1.4 uuid: 10.0.0 transitivePeerDependencies: - supports-color + dockerode@5.0.0: + dependencies: + '@balena/dockerignore': 1.0.2 + '@grpc/grpc-js': 1.12.5 + '@grpc/proto-loader': 0.7.13 + docker-modem: 5.0.7 + protobufjs: 7.4.0 + tar-fs: 2.1.4 + transitivePeerDependencies: + - supports-color + doctrine@2.1.0: dependencies: esutils: 2.0.3 dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 csstype: 3.2.3 dom-walk@0.1.2: {} - dompurify@3.2.6: + dompurify@3.3.3: optionalDependencies: '@types/trusted-types': 2.0.7 - dompurify@3.3.3: + dompurify@3.4.1: optionalDependencies: '@types/trusted-types': 2.0.7 @@ -15431,7 +15391,7 @@ snapshots: dotenv-cli@11.0.0: dependencies: cross-spawn: 7.0.6 - dotenv: 17.3.1 + dotenv: 17.4.2 dotenv-expand: 12.0.3 minimist: 1.2.8 @@ -15443,37 +15403,35 @@ snapshots: dotenv@16.6.1: {} - dotenv@17.3.1: {} + dotenv@17.4.2: {} drange@1.1.1: {} - drizzle-kit@0.31.9: + drizzle-kit@0.31.10: dependencies: '@drizzle-team/brocli': 0.10.2 '@esbuild-kit/esm-loader': 2.6.5 esbuild: 0.25.12 - esbuild-register: 3.6.0(esbuild@0.25.12) - transitivePeerDependencies: - - supports-color + tsx: 4.21.0 - drizzle-orm@0.45.1(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.18.0)(better-sqlite3@12.6.2)(gel@2.0.0)(mysql2@3.19.1(@types/node@24.12.0))(pg@8.20.0): + drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.9.0)(gel@2.0.0)(mysql2@3.22.2(@types/node@24.12.2))(pg@8.20.0): optionalDependencies: '@libsql/client-wasm': 0.14.0 '@types/better-sqlite3': 7.6.13 - '@types/pg': 8.18.0 - better-sqlite3: 12.6.2 + '@types/pg': 8.20.0 + better-sqlite3: 12.9.0 gel: 2.0.0 - mysql2: 3.19.1(@types/node@24.12.0) + mysql2: 3.22.2(@types/node@24.12.2) pg: 8.20.0 - drizzle-zod@0.8.3(drizzle-orm@0.45.1(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.18.0)(better-sqlite3@12.6.2)(gel@2.0.0)(mysql2@3.19.1(@types/node@24.12.0))(pg@8.20.0))(zod@4.2.1): + drizzle-zod@0.8.3(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.9.0)(gel@2.0.0)(mysql2@3.22.2(@types/node@24.12.2))(pg@8.20.0))(zod@4.3.6): dependencies: - drizzle-orm: 0.45.1(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.18.0)(better-sqlite3@12.6.2)(gel@2.0.0)(mysql2@3.19.1(@types/node@24.12.0))(pg@8.20.0) - zod: 4.2.1 + drizzle-orm: 0.45.2(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.9.0)(gel@2.0.0)(mysql2@3.22.2(@types/node@24.12.2))(pg@8.20.0) + zod: 4.3.6 dunder-proto@1.0.1: dependencies: - call-bind-apply-helpers: 1.0.1 + call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 @@ -15483,17 +15441,13 @@ snapshots: eastasianwidth@0.2.0: {} - effect@3.19.19: + effect@3.21.0: dependencies: '@standard-schema/spec': 1.1.0 fast-check: 3.23.2 - electron-to-chromium@1.5.114: {} - electron-to-chromium@1.5.282: {} - electron-to-chromium@1.5.55: {} - emoji-regex@10.6.0: {} emoji-regex@8.0.0: {} @@ -15528,7 +15482,7 @@ snapshots: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.17 - '@types/node': 24.12.0 + '@types/node': 24.12.2 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -15541,12 +15495,10 @@ snapshots: - supports-color - utf-8-validate - enhanced-resolve@5.20.0: + enhanced-resolve@5.20.1: dependencies: graceful-fs: 4.2.11 - tapable: 2.3.0 - - entities@4.5.0: {} + tapable: 2.3.2 entities@6.0.1: {} @@ -15568,105 +15520,6 @@ snapshots: dependencies: is-arrayish: 0.2.1 - es-abstract@1.23.3: - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.2 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - - es-abstract@1.23.7: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.3 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.2.6 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-regex: 1.2.1 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.0 - math-intrinsics: 1.1.0 - object-inspect: 1.13.3 - object-keys: 1.1.1 - object.assign: 4.1.7 - regexp.prototype.flags: 1.5.3 - safe-array-concat: 1.1.3 - safe-regex-test: 1.1.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.18 - es-abstract@1.24.0: dependencies: array-buffer-byte-length: 1.0.2 @@ -15724,10 +15577,6 @@ snapshots: unbox-primitive: 1.1.0 which-typed-array: 1.1.19 - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.3.0 - es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -15735,13 +15584,13 @@ snapshots: es-iterator-helpers@1.2.1: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.23.7 + es-abstract: 1.24.0 es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 + es-set-tostringtag: 2.1.0 function-bind: 1.1.2 - get-intrinsic: 1.2.6 + get-intrinsic: 1.3.0 globalthis: 1.0.4 gopd: 1.2.0 has-property-descriptors: 1.0.2 @@ -15753,20 +15602,12 @@ snapshots: es-module-lexer@1.7.0: {} - es-object-atoms@1.0.0: - dependencies: - es-errors: 1.3.0 + es-module-lexer@2.0.0: {} es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 - es-set-tostringtag@2.0.3: - dependencies: - get-intrinsic: 1.2.6 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - es-set-tostringtag@2.1.0: dependencies: es-errors: 1.3.0 @@ -15774,33 +15615,16 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - es-shim-unscopables@1.0.2: - dependencies: - hasown: 2.0.2 - es-shim-unscopables@1.1.0: dependencies: hasown: 2.0.2 - es-to-primitive@1.2.1: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - es-to-primitive@1.3.0: dependencies: is-callable: 1.2.7 is-date-object: 1.1.0 is-symbol: 1.1.1 - esbuild-register@3.6.0(esbuild@0.25.12): - dependencies: - debug: 4.4.3 - esbuild: 0.25.12 - transitivePeerDependencies: - - supports-color - esbuild@0.25.12: optionalDependencies: '@esbuild/aix-ppc64': 0.25.12 @@ -15830,34 +15654,63 @@ snapshots: '@esbuild/win32-ia32': 0.25.12 '@esbuild/win32-x64': 0.25.12 - esbuild@0.27.3: + esbuild@0.27.7: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.3 - '@esbuild/android-arm': 0.27.3 - '@esbuild/android-arm64': 0.27.3 - '@esbuild/android-x64': 0.27.3 - '@esbuild/darwin-arm64': 0.27.3 - '@esbuild/darwin-x64': 0.27.3 - '@esbuild/freebsd-arm64': 0.27.3 - '@esbuild/freebsd-x64': 0.27.3 - '@esbuild/linux-arm': 0.27.3 - '@esbuild/linux-arm64': 0.27.3 - '@esbuild/linux-ia32': 0.27.3 - '@esbuild/linux-loong64': 0.27.3 - '@esbuild/linux-mips64el': 0.27.3 - '@esbuild/linux-ppc64': 0.27.3 - '@esbuild/linux-riscv64': 0.27.3 - '@esbuild/linux-s390x': 0.27.3 - '@esbuild/linux-x64': 0.27.3 - '@esbuild/netbsd-arm64': 0.27.3 - '@esbuild/netbsd-x64': 0.27.3 - '@esbuild/openbsd-arm64': 0.27.3 - '@esbuild/openbsd-x64': 0.27.3 - '@esbuild/openharmony-arm64': 0.27.3 - '@esbuild/sunos-x64': 0.27.3 - '@esbuild/win32-arm64': 0.27.3 - '@esbuild/win32-ia32': 0.27.3 - '@esbuild/win32-x64': 0.27.3 + '@esbuild/aix-ppc64': 0.27.7 + '@esbuild/android-arm': 0.27.7 + '@esbuild/android-arm64': 0.27.7 + '@esbuild/android-x64': 0.27.7 + '@esbuild/darwin-arm64': 0.27.7 + '@esbuild/darwin-x64': 0.27.7 + '@esbuild/freebsd-arm64': 0.27.7 + '@esbuild/freebsd-x64': 0.27.7 + '@esbuild/linux-arm': 0.27.7 + '@esbuild/linux-arm64': 0.27.7 + '@esbuild/linux-ia32': 0.27.7 + '@esbuild/linux-loong64': 0.27.7 + '@esbuild/linux-mips64el': 0.27.7 + '@esbuild/linux-ppc64': 0.27.7 + '@esbuild/linux-riscv64': 0.27.7 + '@esbuild/linux-s390x': 0.27.7 + '@esbuild/linux-x64': 0.27.7 + '@esbuild/netbsd-arm64': 0.27.7 + '@esbuild/netbsd-x64': 0.27.7 + '@esbuild/openbsd-arm64': 0.27.7 + '@esbuild/openbsd-x64': 0.27.7 + '@esbuild/openharmony-arm64': 0.27.7 + '@esbuild/sunos-x64': 0.27.7 + '@esbuild/win32-arm64': 0.27.7 + '@esbuild/win32-ia32': 0.27.7 + '@esbuild/win32-x64': 0.27.7 + + esbuild@0.28.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.0 + '@esbuild/android-arm': 0.28.0 + '@esbuild/android-arm64': 0.28.0 + '@esbuild/android-x64': 0.28.0 + '@esbuild/darwin-arm64': 0.28.0 + '@esbuild/darwin-x64': 0.28.0 + '@esbuild/freebsd-arm64': 0.28.0 + '@esbuild/freebsd-x64': 0.28.0 + '@esbuild/linux-arm': 0.28.0 + '@esbuild/linux-arm64': 0.28.0 + '@esbuild/linux-ia32': 0.28.0 + '@esbuild/linux-loong64': 0.28.0 + '@esbuild/linux-mips64el': 0.28.0 + '@esbuild/linux-ppc64': 0.28.0 + '@esbuild/linux-riscv64': 0.28.0 + '@esbuild/linux-s390x': 0.28.0 + '@esbuild/linux-x64': 0.28.0 + '@esbuild/netbsd-arm64': 0.28.0 + '@esbuild/netbsd-x64': 0.28.0 + '@esbuild/openbsd-arm64': 0.28.0 + '@esbuild/openbsd-x64': 0.28.0 + '@esbuild/openharmony-arm64': 0.28.0 + '@esbuild/sunos-x64': 0.28.0 + '@esbuild/win32-arm64': 0.28.0 + '@esbuild/win32-ia32': 0.28.0 + '@esbuild/win32-x64': 0.28.0 escalade@3.2.0: {} @@ -15873,11 +15726,11 @@ snapshots: dependencies: eslint: 9.39.4 - eslint-config-turbo@2.8.16(eslint@9.39.4)(turbo@2.8.16): + eslint-config-turbo@2.9.6(eslint@9.39.4)(turbo@2.9.6): dependencies: eslint: 9.39.4 - eslint-plugin-turbo: 2.8.16(eslint@9.39.4)(turbo@2.8.16) - turbo: 2.8.16 + eslint-plugin-turbo: 2.9.6(eslint@9.39.4)(turbo@2.9.6) + turbo: 2.9.6 eslint-import-resolver-node@0.3.9: dependencies: @@ -15887,17 +15740,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.57.0(eslint@9.39.4)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.4): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.58.2(eslint@9.39.4)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.4): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.57.0(eslint@9.39.4)(typescript@5.9.3) + '@typescript-eslint/parser': 8.58.2(eslint@9.39.4)(typescript@5.9.3) eslint: 9.39.4 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.2(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -15908,11 +15761,11 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.4 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.57.0(eslint@9.39.4)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.4) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.58.2(eslint@9.39.4)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.4) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 - minimatch: 3.1.2 + minimatch: 3.1.5 object.fromentries: 2.0.8 object.groupby: 1.0.3 object.values: 1.2.1 @@ -15920,7 +15773,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.57.0(eslint@9.39.4)(typescript@5.9.3) + '@typescript-eslint/parser': 8.58.2(eslint@9.39.4)(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -15929,8 +15782,8 @@ snapshots: eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.4): dependencies: aria-query: 5.3.2 - array-includes: 3.1.8 - array.prototype.flatmap: 1.3.2 + array-includes: 3.1.9 + array.prototype.flatmap: 1.3.3 ast-types-flow: 0.0.8 axe-core: 4.10.0 axobject-query: 4.1.0 @@ -15940,24 +15793,24 @@ snapshots: hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 - minimatch: 3.1.2 + minimatch: 3.1.5 object.fromentries: 2.0.8 - safe-regex-test: 1.0.3 + safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 eslint-plugin-react-hooks@6.1.1(eslint@9.39.4): dependencies: - '@babel/core': 7.28.4 - '@babel/parser': 7.28.4 + '@babel/core': 7.29.0 + '@babel/parser': 7.29.2 eslint: 9.39.4 - zod: 4.2.1 - zod-validation-error: 4.0.2(zod@4.2.1) + zod: 4.3.6 + zod-validation-error: 4.0.2(zod@4.3.6) transitivePeerDependencies: - supports-color eslint-plugin-react@7.37.5(eslint@9.39.4): dependencies: - array-includes: 3.1.8 + array-includes: 3.1.9 array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.3 array.prototype.tosorted: 1.1.4 @@ -15967,7 +15820,7 @@ snapshots: estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 + minimatch: 3.1.5 object.entries: 1.1.9 object.fromentries: 2.0.8 object.values: 1.2.1 @@ -15977,11 +15830,11 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-turbo@2.8.16(eslint@9.39.4)(turbo@2.8.16): + eslint-plugin-turbo@2.9.6(eslint@9.39.4)(turbo@2.9.6): dependencies: dotenv: 16.0.3 eslint: 9.39.4 - turbo: 2.8.16 + turbo: 2.9.6 eslint-scope@5.1.1: dependencies: @@ -16076,6 +15929,8 @@ snapshots: eventemitter3@4.0.7: {} + eventemitter3@5.0.4: {} + events@3.3.0: {} execa@5.1.1: @@ -16119,7 +15974,7 @@ snapshots: expand-template@2.0.3: {} - expect-type@1.2.2: {} + expect-type@1.3.0: {} extend@3.0.2: {} @@ -16133,6 +15988,8 @@ snapshots: fast-deep-equal@3.1.3: {} + fast-diff@1.3.0: {} + fast-equals@5.3.3: {} fast-fifo@1.3.2: {} @@ -16166,18 +16023,29 @@ snapshots: fast-uri@3.1.0: {} - fast-xml-builder@1.0.0: {} - - fast-xml-parser@5.4.2: + fast-xml-builder@1.1.5: dependencies: - fast-xml-builder: 1.0.0 - strnum: 2.1.2 + path-expression-matcher: 1.5.0 + + fast-xml-parser@5.7.1: + dependencies: + '@nodable/entities': 2.1.0 + fast-xml-builder: 1.1.5 + path-expression-matcher: 1.5.0 + strnum: 2.2.3 + + fast-xml-parser@5.7.2: + dependencies: + '@nodable/entities': 2.1.0 + fast-xml-builder: 1.1.5 + path-expression-matcher: 1.5.0 + strnum: 2.2.3 faster-babel-types@0.1.0(@babel/types@7.26.0): dependencies: '@babel/types': 7.26.0 - fastify@5.8.2: + fastify@5.8.5: dependencies: '@fastify/ajv-compiler': 4.0.5 '@fastify/error': 4.2.0 @@ -16203,9 +16071,9 @@ snapshots: dependencies: format: 0.2.2 - fdir@6.5.0(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.4): optionalDependencies: - picomatch: 4.0.3 + picomatch: 4.0.4 fecha@4.2.3: {} @@ -16243,8 +16111,6 @@ snapshots: fast-querystring: 1.1.2 safe-regex2: 5.0.0 - find-up-simple@1.0.0: {} - find-up-simple@1.0.1: {} find-up@2.1.0: @@ -16265,18 +16131,16 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.3.3 + flatted: 3.4.2 keyv: 4.5.4 - flatted@3.3.3: {} + flatted@3.4.2: {} fn.name@1.1.0: {} follow-redirects@1.15.9: {} - for-each@0.3.3: - dependencies: - is-callable: 1.2.7 + follow-redirects@1.16.0: {} for-each@0.3.5: dependencies: @@ -16320,13 +16184,6 @@ snapshots: function-timeout@1.0.2: {} - function.prototype.name@1.1.6: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.7 - functions-have-names: 1.2.3 - function.prototype.name@1.1.8: dependencies: call-bind: 1.0.8 @@ -16360,27 +16217,6 @@ snapshots: get-east-asian-width@1.4.0: {} - get-intrinsic@1.2.4: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - - get-intrinsic@1.2.6: - dependencies: - call-bind-apply-helpers: 1.0.1 - dunder-proto: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - function-bind: 1.1.2 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -16396,7 +16232,7 @@ snapshots: get-nonce@1.0.1: {} - get-port@7.1.0: {} + get-port@7.2.0: {} get-proto@1.0.1: dependencies: @@ -16414,12 +16250,6 @@ snapshots: '@sec-ant/readable-stream': 0.4.1 is-stream: 4.0.1 - get-symbol-description@1.0.2: - dependencies: - call-bind: 1.0.8 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - get-symbol-description@1.1.0: dependencies: call-bound: 1.0.4 @@ -16430,10 +16260,6 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - get-tsconfig@4.8.1: - dependencies: - resolve-pkg-maps: 1.0.0 - git-hooks-list@4.1.1: {} git-log-parser@1.2.1: @@ -16462,7 +16288,7 @@ snapshots: foreground-child: 3.3.1 jackspeak: 3.4.3 minimatch: 9.0.5 - minipass: 7.1.2 + minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 @@ -16490,10 +16316,6 @@ snapshots: globrex@0.1.2: {} - gopd@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - gopd@1.2.0: {} graceful-fs@4.2.10: {} @@ -16505,7 +16327,7 @@ snapshots: cookie-es: 1.2.2 crossws: 0.3.5 defu: 6.1.4 - destr: 2.0.3 + destr: 2.0.5 iron-webcrypto: 1.2.1 node-mock-http: 1.0.2 radix3: 1.1.2 @@ -16531,14 +16353,10 @@ snapshots: dependencies: es-define-property: 1.0.1 - has-proto@1.0.3: {} - has-proto@1.2.0: dependencies: dunder-proto: 1.0.1 - has-symbols@1.0.3: {} - has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -16597,7 +16415,7 @@ snapshots: highlightjs-vue@1.0.0: {} - hono@4.12.7: {} + hono@4.12.15: {} hook-std@4.0.0: {} @@ -16607,13 +16425,13 @@ snapshots: hosted-git-info@9.0.2: dependencies: - lru-cache: 11.2.4 + lru-cache: 11.2.7 hpagent@1.2.0: {} html-encoding-sniffer@6.0.0(@noble/hashes@2.0.1): dependencies: - '@exodus/bytes': 1.11.0(@noble/hashes@2.0.1) + '@exodus/bytes': 1.15.0(@noble/hashes@2.0.1) transitivePeerDependencies: - '@noble/hashes' @@ -16623,12 +16441,12 @@ snapshots: html-url-attributes@3.0.1: {} - http-cookie-agent@6.0.8(tough-cookie@5.1.2)(undici@7.18.2): + http-cookie-agent@6.0.8(tough-cookie@5.1.2)(undici@7.24.6): dependencies: agent-base: 7.1.3 tough-cookie: 5.1.2 optionalDependencies: - undici: 7.18.2 + undici: 7.24.6 http-errors@2.0.0: dependencies: @@ -16668,7 +16486,7 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icu-minify@4.8.3: + icu-minify@4.9.1: dependencies: '@formatjs/icu-messageformat-parser': 3.5.0 @@ -16680,7 +16498,7 @@ snapshots: immutable@3.8.2: {} - immutable@5.0.2: {} + immutable@5.1.5: {} import-fresh@3.3.0: dependencies: @@ -16716,29 +16534,6 @@ snapshots: inline-style-parser@0.2.4: {} - inquirer@9.3.8(@types/node@24.12.0): - dependencies: - '@inquirer/external-editor': 1.0.3(@types/node@24.12.0) - '@inquirer/figures': 1.0.15 - ansi-escapes: 4.3.2 - cli-width: 4.1.0 - mute-stream: 1.0.0 - ora: 5.4.1 - run-async: 3.0.0 - rxjs: 7.8.2 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 - transitivePeerDependencies: - - '@types/node' - - internal-slot@1.0.7: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 - internal-slot@1.1.0: dependencies: es-errors: 1.3.0 @@ -16763,7 +16558,7 @@ snapshots: dependencies: loose-envify: 1.4.0 - ioredis@5.10.0: + ioredis@5.10.1: dependencies: '@ioredis/commands': 1.5.1 cluster-key-slot: 1.1.2 @@ -16793,11 +16588,6 @@ snapshots: is-alphabetical: 2.0.1 is-decimal: 2.0.1 - is-array-buffer@3.0.4: - dependencies: - call-bind: 1.0.8 - get-intrinsic: 1.3.0 - is-array-buffer@3.0.5: dependencies: call-bind: 1.0.8 @@ -16810,19 +16600,10 @@ snapshots: dependencies: has-tostringtag: 1.0.2 - is-bigint@1.0.4: - dependencies: - has-bigints: 1.0.2 - is-bigint@1.1.0: dependencies: has-bigints: 1.0.2 - is-boolean-object@1.1.2: - dependencies: - call-bind: 1.0.8 - has-tostringtag: 1.0.2 - is-boolean-object@1.2.1: dependencies: call-bound: 1.0.4 @@ -16836,28 +16617,16 @@ snapshots: dependencies: ci-info: 2.0.0 - is-core-module@2.15.1: - dependencies: - hasown: 2.0.2 - is-core-module@2.16.1: dependencies: hasown: 2.0.2 - is-data-view@1.0.1: - dependencies: - is-typed-array: 1.1.13 - is-data-view@1.0.2: dependencies: call-bound: 1.0.4 get-intrinsic: 1.3.0 is-typed-array: 1.1.15 - is-date-object@1.0.5: - dependencies: - has-tostringtag: 1.0.2 - is-date-object@1.1.0: dependencies: call-bound: 1.0.4 @@ -16890,18 +16659,12 @@ snapshots: global-dirs: 3.0.1 is-path-inside: 3.0.3 - is-interactive@1.0.0: {} - is-map@2.0.3: {} is-negative-zero@2.0.3: {} is-npm@5.0.0: {} - is-number-object@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - is-number-object@1.1.1: dependencies: call-bound: 1.0.4 @@ -16919,11 +16682,6 @@ snapshots: is-property@1.0.2: {} - is-regex@1.1.4: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -16933,10 +16691,6 @@ snapshots: is-set@2.0.3: {} - is-shared-array-buffer@1.0.3: - dependencies: - call-bind: 1.0.8 - is-shared-array-buffer@1.0.4: dependencies: call-bound: 1.0.4 @@ -16947,49 +16701,27 @@ snapshots: is-stream@4.0.1: {} - is-string@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - is-string@1.1.1: dependencies: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-symbol@1.0.4: - dependencies: - has-symbols: 1.1.0 - is-symbol@1.1.1: dependencies: call-bound: 1.0.4 has-symbols: 1.1.0 safe-regex-test: 1.1.0 - is-typed-array@1.1.13: - dependencies: - which-typed-array: 1.1.15 - is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.18 + which-typed-array: 1.1.19 is-typedarray@1.0.0: {} - is-unicode-supported@0.1.0: {} - is-unicode-supported@2.1.0: {} is-weakmap@2.0.2: {} - is-weakref@1.0.2: - dependencies: - call-bind: 1.0.8 - - is-weakref@1.1.0: - dependencies: - call-bound: 1.0.4 - is-weakref@1.1.1: dependencies: call-bound: 1.0.4 @@ -17007,21 +16739,18 @@ snapshots: isarray@2.0.5: {} - isbinaryfile@5.0.7: {} - isexe@2.0.0: {} isexe@3.1.5: optional: true - isomorphic-dompurify@3.1.0(@noble/hashes@2.0.1): + isomorphic-dompurify@3.10.0(@noble/hashes@2.0.1): dependencies: - dompurify: 3.3.3 - jsdom: 28.1.0(@noble/hashes@2.0.1) + dompurify: 3.4.1 + jsdom: 29.0.2(@noble/hashes@2.0.1) transitivePeerDependencies: - '@noble/hashes' - canvas - - supports-color isomorphic-fetch@3.0.0: dependencies: @@ -17030,9 +16759,9 @@ snapshots: transitivePeerDependencies: - encoding - isomorphic-ws@5.0.0(ws@8.19.0): + isomorphic-ws@5.0.0(ws@8.20.0): dependencies: - ws: 8.19.0 + ws: 8.20.0 issue-parser@7.0.1: dependencies: @@ -17058,8 +16787,8 @@ snapshots: iterator.prototype@1.1.4: dependencies: define-data-property: 1.1.4 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.6 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 has-symbols: 1.1.0 reflect.getprototypeof: 1.0.9 set-function-name: 2.0.2 @@ -17078,71 +16807,66 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 merge-stream: 2.0.0 supports-color: 8.1.1 jose@6.0.8: {} - jotai@2.18.1(@babel/core@7.26.0)(@babel/template@7.28.6)(@types/react@19.2.14)(react@19.2.4): + jotai@2.19.1(@babel/core@7.26.0)(@babel/template@7.28.6)(@types/react@19.2.14)(react@19.2.5): optionalDependencies: '@babel/core': 7.26.0 '@babel/template': 7.28.6 '@types/react': 19.2.14 - react: 19.2.4 + react: 19.2.5 - jotai@2.18.1(@babel/core@7.29.0)(@babel/template@7.28.6)(@types/react@19.2.14)(react@19.2.4): + jotai@2.19.1(@babel/core@7.29.0)(@babel/template@7.28.6)(@types/react@19.2.14)(react@19.2.5): optionalDependencies: '@babel/core': 7.29.0 '@babel/template': 7.28.6 '@types/react': 19.2.14 - react: 19.2.4 + react: 19.2.5 js-base64@3.7.8: optional: true js-file-download@0.4.12: {} + js-tokens@10.0.0: {} + js-tokens@4.0.0: {} - js-tokens@9.0.1: {} - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - js-yaml@4.1.1: dependencies: argparse: 2.0.1 jsbn@1.1.0: {} - jsdom@28.1.0(@noble/hashes@2.0.1): + jsdom@29.0.2(@noble/hashes@2.0.1): dependencies: - '@acemir/cssom': 0.9.31 - '@asamuzakjp/dom-selector': 6.8.1 + '@asamuzakjp/css-color': 5.1.8 + '@asamuzakjp/dom-selector': 7.0.8 '@bramus/specificity': 2.4.2 - '@exodus/bytes': 1.11.0(@noble/hashes@2.0.1) - cssstyle: 6.0.1 + '@csstools/css-syntax-patches-for-csstree': 1.1.1(css-tree@3.2.1) + '@exodus/bytes': 1.15.0(@noble/hashes@2.0.1) + css-tree: 3.2.1 data-urls: 7.0.0(@noble/hashes@2.0.1) decimal.js: 10.6.0 html-encoding-sniffer: 6.0.0(@noble/hashes@2.0.1) - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 is-potential-custom-element-name: 1.0.1 + lru-cache: 11.2.7 parse5: 8.0.0 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 6.0.0 - undici: 7.21.0 + tough-cookie: 6.0.1 + undici: 7.24.6 w3c-xmlserializer: 5.0.0 webidl-conversions: 8.0.1 whatwg-mimetype: 5.0.0 - whatwg-url: 16.0.0(@noble/hashes@2.0.1) + whatwg-url: 16.0.1(@noble/hashes@2.0.1) xml-name-validator: 5.0.0 transitivePeerDependencies: - '@noble/hashes' - - supports-color jsep@1.4.0: {} @@ -17184,10 +16908,10 @@ snapshots: jsx-ast-utils@3.3.5: dependencies: - array-includes: 3.1.8 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.2.0 + array-includes: 3.1.9 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 keygrip@1.1.0: dependencies: @@ -17234,10 +16958,6 @@ snapshots: lines-and-columns@1.2.4: {} - linkify-it@5.0.0: - dependencies: - uc.micro: 2.1.0 - linkifyjs@4.3.2: {} load-json-file@4.0.0: @@ -17280,6 +17000,8 @@ snapshots: lodash.isarguments@3.1.0: {} + lodash.isequal@4.5.0: {} + lodash.isplainobject@4.0.6: {} lodash.isstring@4.0.1: {} @@ -17288,12 +17010,7 @@ snapshots: lodash.uniqby@4.7.0: {} - lodash@4.17.21: {} - - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 + lodash@4.18.1: {} logform@2.7.0: dependencies: @@ -17319,11 +17036,7 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.2.4: {} - - lru-cache@11.2.5: {} - - lru-cache@11.2.6: {} + lru-cache@11.2.7: {} lru-cache@5.1.1: dependencies: @@ -17333,7 +17046,7 @@ snapshots: m3u8-parser@7.2.0: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@videojs/vhs-utils': 4.1.1 global: 4.4.0 @@ -17341,9 +17054,9 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magicast@0.5.1: + magicast@0.5.2: dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 source-map-js: 1.2.1 @@ -17355,36 +17068,27 @@ snapshots: dependencies: semver: 7.7.4 - mantine-form-zod-resolver@1.3.0(@mantine/form@8.3.16(react@19.2.4))(zod@4.2.1): + mantine-form-zod-resolver@1.3.0(@mantine/form@8.3.18(react@19.2.5))(zod@4.3.6): dependencies: - '@mantine/form': 8.3.16(react@19.2.4) - zod: 4.2.1 + '@mantine/form': 8.3.18(react@19.2.5) + zod: 4.3.6 - mantine-react-table@2.0.0-beta.9(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/dates@8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(dayjs@1.11.19)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(@tabler/icons-react@3.40.0(react@19.2.4))(clsx@2.1.1)(dayjs@1.11.19)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + mantine-react-table@2.0.0-beta.9(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/dates@8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(dayjs@1.11.20)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(@tabler/icons-react@3.41.1(react@19.2.5))(clsx@2.1.1)(dayjs@1.11.20)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: - '@mantine/core': 8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@mantine/dates': 8.3.16(@mantine/core@8.3.16(@mantine/hooks@8.3.16(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@8.3.16(react@19.2.4))(dayjs@1.11.19)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@mantine/hooks': 8.3.16(react@19.2.4) - '@tabler/icons-react': 3.40.0(react@19.2.4) + '@mantine/core': 8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@mantine/dates': 8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(dayjs@1.11.20)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@mantine/hooks': 8.3.18(react@19.2.5) + '@tabler/icons-react': 3.41.1(react@19.2.5) '@tanstack/match-sorter-utils': 8.19.4 - '@tanstack/react-table': 8.20.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tanstack/react-virtual': 3.11.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@tanstack/react-table': 8.20.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@tanstack/react-virtual': 3.11.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5) clsx: 2.1.1 - dayjs: 1.11.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + dayjs: 1.11.20 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) maria2@0.4.1: {} - markdown-it@14.1.0: - dependencies: - argparse: 2.0.1 - entities: 4.5.0 - linkify-it: 5.0.0 - mdurl: 2.0.0 - punycode.js: 2.3.1 - uc.micro: 2.1.0 - marked-terminal@7.3.0(marked@15.0.11): dependencies: ansi-escapes: 7.0.0 @@ -17489,9 +17193,7 @@ snapshots: dependencies: '@types/mdast': 4.0.4 - mdn-data@2.12.2: {} - - mdurl@2.0.0: {} + mdn-data@2.27.1: {} media-typer@0.3.0: {} @@ -17659,32 +17361,26 @@ snapshots: minim@0.23.8: dependencies: - lodash: 4.17.21 + lodash: 4.18.1 minimatch@10.2.2: dependencies: - brace-expansion: 5.0.2 - - minimatch@3.1.2: - dependencies: - brace-expansion: 5.0.4 + brace-expansion: 5.0.5 minimatch@3.1.5: dependencies: - brace-expansion: 5.0.4 + brace-expansion: 5.0.5 minimatch@5.1.6: dependencies: - brace-expansion: 5.0.4 + brace-expansion: 5.0.5 minimatch@9.0.5: dependencies: - brace-expansion: 5.0.4 + brace-expansion: 5.0.5 minimist@1.2.8: {} - minipass@7.1.2: {} - minipass@7.1.3: {} mitt@3.0.1: {} @@ -17695,7 +17391,7 @@ snapshots: mpd-parser@1.3.1: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@videojs/vhs-utils': 4.0.0 '@xmldom/xmldom': 0.8.10 global: 4.4.0 @@ -17706,18 +17402,16 @@ snapshots: ms@2.1.3: {} - mute-stream@1.0.0: {} - mute-stream@2.0.0: {} mux.js@7.1.0: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 global: 4.4.0 - mysql2@3.19.1(@types/node@24.12.0): + mysql2@3.22.2(@types/node@24.12.2): dependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 aws-ssl-profiles: 1.1.2 denque: 2.1.0 generate-function: 2.3.1 @@ -17742,7 +17436,7 @@ snapshots: nanoid@3.3.11: {} - nanoid@5.1.6: {} + nanoid@5.1.9: {} napi-build-utils@1.0.2: {} @@ -17758,79 +17452,79 @@ snapshots: nerf-dart@1.0.0: {} - next-auth@5.0.0-beta.30(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react@19.2.4): + next-auth@5.0.0-beta.31(next@16.2.4(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0))(react@19.2.5): dependencies: - '@auth/core': 0.41.0 - next: 16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) - react: 19.2.4 + '@auth/core': 0.41.2 + next: 16.2.4(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) + react: 19.2.5 - next-intl-swc-plugin-extractor@4.8.3: {} + next-intl-swc-plugin-extractor@4.9.1: {} - next-intl@4.8.3(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react@19.2.4)(typescript@5.9.3): + next-intl@4.9.1(next@16.2.4(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0))(react@19.2.5)(typescript@5.9.3): dependencies: '@formatjs/intl-localematcher': 0.8.1 '@parcel/watcher': 2.4.1 '@swc/core': 1.15.3 - icu-minify: 4.8.3 + icu-minify: 4.9.1 negotiator: 1.0.0 - next: 16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) - next-intl-swc-plugin-extractor: 4.8.3 + next: 16.2.4(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) + next-intl-swc-plugin-extractor: 4.9.1 po-parser: 2.1.1 - react: 19.2.4 - use-intl: 4.8.3(react@19.2.4) + react: 19.2.5 + use-intl: 4.9.1(react@19.2.5) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - '@swc/helpers' - next@16.1.6(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3): + next@16.2.4(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0): dependencies: - '@next/env': 16.1.6 + '@next/env': 16.2.4 '@swc/helpers': 0.5.15 - baseline-browser-mapping: 2.8.29 - caniuse-lite: 1.0.30001755 + baseline-browser-mapping: 2.9.19 + caniuse-lite: 1.0.30001766 postcss: 8.4.31 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.2.5) optionalDependencies: - '@next/swc-darwin-arm64': 16.1.6 - '@next/swc-darwin-x64': 16.1.6 - '@next/swc-linux-arm64-gnu': 16.1.6 - '@next/swc-linux-arm64-musl': 16.1.6 - '@next/swc-linux-x64-gnu': 16.1.6 - '@next/swc-linux-x64-musl': 16.1.6 - '@next/swc-win32-arm64-msvc': 16.1.6 - '@next/swc-win32-x64-msvc': 16.1.6 + '@next/swc-darwin-arm64': 16.2.4 + '@next/swc-darwin-x64': 16.2.4 + '@next/swc-linux-arm64-gnu': 16.2.4 + '@next/swc-linux-arm64-musl': 16.2.4 + '@next/swc-linux-x64-gnu': 16.2.4 + '@next/swc-linux-x64-musl': 16.2.4 + '@next/swc-win32-arm64-msvc': 16.2.4 + '@next/swc-win32-x64-msvc': 16.2.4 babel-plugin-react-compiler: 1.0.0 - sass: 1.97.3 - sharp: 0.34.4 + sass: 1.99.0 + sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3): + next@16.2.4(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0): dependencies: - '@next/env': 16.1.6 + '@next/env': 16.2.4 '@swc/helpers': 0.5.15 - baseline-browser-mapping: 2.8.29 - caniuse-lite: 1.0.30001755 + baseline-browser-mapping: 2.9.19 + caniuse-lite: 1.0.30001766 postcss: 8.4.31 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.5) optionalDependencies: - '@next/swc-darwin-arm64': 16.1.6 - '@next/swc-darwin-x64': 16.1.6 - '@next/swc-linux-arm64-gnu': 16.1.6 - '@next/swc-linux-arm64-musl': 16.1.6 - '@next/swc-linux-x64-gnu': 16.1.6 - '@next/swc-linux-x64-musl': 16.1.6 - '@next/swc-win32-arm64-msvc': 16.1.6 - '@next/swc-win32-x64-msvc': 16.1.6 + '@next/swc-darwin-arm64': 16.2.4 + '@next/swc-darwin-x64': 16.2.4 + '@next/swc-linux-arm64-gnu': 16.2.4 + '@next/swc-linux-arm64-musl': 16.2.4 + '@next/swc-linux-x64-gnu': 16.2.4 + '@next/swc-linux-x64-musl': 16.2.4 + '@next/swc-win32-arm64-msvc': 16.2.4 + '@next/swc-win32-x64-msvc': 16.2.4 babel-plugin-react-compiler: 1.0.0 - sass: 1.97.3 - sharp: 0.34.4 + sass: 1.99.0 + sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -17852,10 +17546,7 @@ snapshots: node-addon-api@7.1.1: {} - node-addon-api@8.3.0: {} - - node-addon-api@8.3.1: - optional: true + node-addon-api@8.3.1: {} node-cron@4.2.1: {} @@ -17881,10 +17572,6 @@ snapshots: node-gyp-build@4.8.4: {} - node-ical@0.22.1: - dependencies: - rrule: 2.8.1 - node-loader@2.1.0(webpack@5.94.0): dependencies: loader-utils: 2.0.4 @@ -17892,25 +17579,6 @@ snapshots: node-mock-http@1.0.2: {} - node-plop@0.32.3(@types/node@24.12.0): - dependencies: - '@types/inquirer': 9.0.9 - '@types/picomatch': 4.0.2 - change-case: 5.4.4 - dlv: 1.1.3 - handlebars: 4.7.8 - inquirer: 9.3.8(@types/node@24.12.0) - isbinaryfile: 5.0.7 - resolve: 1.22.11 - tinyglobby: 0.2.15 - title-case: 4.3.2 - transitivePeerDependencies: - - '@types/node' - - node-releases@2.0.18: {} - - node-releases@2.0.19: {} - node-releases@2.0.27: {} normalize-package-data@6.0.2: @@ -17948,21 +17616,10 @@ snapshots: object-assign@4.1.1: {} - object-inspect@1.13.2: {} - - object-inspect@1.13.3: {} - object-inspect@1.13.4: {} object-keys@1.1.1: {} - object.assign@4.1.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - object.assign@4.1.7: dependencies: call-bind: 1.0.8 @@ -17983,20 +17640,14 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.7 + es-abstract: 1.24.0 es-object-atoms: 1.1.1 object.groupby@1.0.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.7 - - object.values@1.2.0: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-abstract: 1.24.0 object.values@1.2.1: dependencies: @@ -18021,12 +17672,6 @@ snapshots: '@octokit/types': 16.0.0 '@octokit/webhooks': 14.0.0 - ofetch@1.4.1: - dependencies: - destr: 2.0.3 - node-fetch-native: 1.6.7 - ufo: 1.6.3 - ofetch@1.5.1: dependencies: destr: 2.0.5 @@ -18063,7 +17708,7 @@ snapshots: openapi3-ts@4.4.0: dependencies: - yaml: 2.5.1 + yaml: 2.8.3 openid-client@6.3.3: dependencies: @@ -18079,18 +17724,6 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - ora@5.4.1: - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - orderedmap@2.1.1: {} own-keys@1.0.1: @@ -18135,6 +17768,8 @@ snapshots: pako@2.1.0: {} + parchment@3.0.0: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -18187,6 +17822,8 @@ snapshots: path-exists@4.0.0: {} + path-expression-matcher@1.5.0: {} + path-key@3.1.1: {} path-key@4.0.0: {} @@ -18196,11 +17833,11 @@ snapshots: path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 - minipass: 7.1.2 + minipass: 7.1.3 path-scurry@2.0.2: dependencies: - lru-cache: 11.2.6 + lru-cache: 11.2.7 minipass: 7.1.3 path-type@4.0.0: {} @@ -18220,8 +17857,6 @@ snapshots: dependencies: pg: 8.20.0 - pg-protocol@1.12.0: {} - pg-protocol@1.13.0: {} pg-types@2.2.0: @@ -18252,7 +17887,7 @@ snapshots: picomatch@2.3.1: {} - picomatch@4.0.3: {} + picomatch@4.0.4: {} pify@3.0.0: {} @@ -18282,7 +17917,7 @@ snapshots: pkcs7@1.0.4: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 pkg-conf@2.1.0: dependencies: @@ -18301,38 +17936,38 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss-js@4.0.1(postcss@8.5.6): + postcss-js@4.0.1(postcss@8.5.8): dependencies: camelcase-css: 2.0.1 - postcss: 8.5.6 + postcss: 8.5.8 - postcss-mixins@12.0.0(postcss@8.5.6): + postcss-mixins@12.0.0(postcss@8.5.8): dependencies: - postcss: 8.5.6 - postcss-js: 4.0.1(postcss@8.5.6) - postcss-simple-vars: 7.0.1(postcss@8.5.6) - sugarss: 5.0.0(postcss@8.5.6) + postcss: 8.5.8 + postcss-js: 4.0.1(postcss@8.5.8) + postcss-simple-vars: 7.0.1(postcss@8.5.8) + sugarss: 5.0.0(postcss@8.5.8) tinyglobby: 0.2.15 - postcss-nested@7.0.2(postcss@8.5.6): + postcss-nested@7.0.2(postcss@8.5.8): dependencies: - postcss: 8.5.6 + postcss: 8.5.8 postcss-selector-parser: 7.1.0 - postcss-preset-mantine@1.18.0(postcss@8.5.6): + postcss-preset-mantine@1.18.0(postcss@8.5.8): dependencies: - postcss: 8.5.6 - postcss-mixins: 12.0.0(postcss@8.5.6) - postcss-nested: 7.0.2(postcss@8.5.6) + postcss: 8.5.8 + postcss-mixins: 12.0.0(postcss@8.5.8) + postcss-nested: 7.0.2(postcss@8.5.8) postcss-selector-parser@7.1.0: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-simple-vars@7.0.1(postcss@8.5.6): + postcss-simple-vars@7.0.1(postcss@8.5.8): dependencies: - postcss: 8.5.6 + postcss: 8.5.8 postcss@8.4.31: dependencies: @@ -18340,7 +17975,7 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.6: + postcss@8.5.8: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 @@ -18381,13 +18016,13 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-packagejson@3.0.2(prettier@3.8.1): + prettier-plugin-packagejson@3.0.2(prettier@3.8.3): dependencies: sort-package-json: 3.6.0 optionalDependencies: - prettier: 3.8.1 + prettier: 3.8.3 - prettier@3.8.1: {} + prettier@3.8.3: {} pretty-ms@8.0.0: dependencies: @@ -18411,7 +18046,7 @@ snapshots: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 - react-is: 19.2.4 + react-is: 19.2.5 proper-lockfile@4.1.2: dependencies: @@ -18432,10 +18067,6 @@ snapshots: dependencies: prosemirror-transform: 1.10.2 - prosemirror-collab@1.3.1: - dependencies: - prosemirror-state: 1.4.3 - prosemirror-commands@1.6.2: dependencies: prosemirror-model: 1.24.1 @@ -18462,37 +18093,15 @@ snapshots: prosemirror-view: 1.41.4 rope-sequence: 1.3.4 - prosemirror-inputrules@1.4.0: - dependencies: - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.2 - prosemirror-keymap@1.2.2: dependencies: prosemirror-state: 1.4.3 w3c-keyname: 2.2.8 - prosemirror-markdown@1.13.1: - dependencies: - '@types/markdown-it': 14.1.2 - markdown-it: 14.1.0 - prosemirror-model: 1.24.1 - - prosemirror-menu@1.2.4: - dependencies: - crelt: 1.0.6 - prosemirror-commands: 1.6.2 - prosemirror-history: 1.4.1 - prosemirror-state: 1.4.3 - prosemirror-model@1.24.1: dependencies: orderedmap: 2.1.1 - prosemirror-schema-basic@1.2.3: - dependencies: - prosemirror-model: 1.24.1 - prosemirror-schema-list@1.5.1: dependencies: prosemirror-model: 1.24.1 @@ -18513,14 +18122,6 @@ snapshots: prosemirror-transform: 1.10.2 prosemirror-view: 1.41.4 - prosemirror-trailing-node@3.0.0(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-view@1.41.4): - dependencies: - '@remirror/core-constants': 3.0.0 - escape-string-regexp: 4.0.0 - prosemirror-model: 1.24.1 - prosemirror-state: 1.4.3 - prosemirror-view: 1.41.4 - prosemirror-transform@1.10.2: dependencies: prosemirror-model: 1.24.1 @@ -18545,22 +18146,22 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 24.12.0 + '@types/node': 24.12.2 long: 5.3.2 proxmox-api@1.1.1: dependencies: - undici: 7.19.2 + undici: 7.24.6 proxy-from-env@1.1.0: {} + proxy-from-env@2.1.0: {} + pump@3.0.2: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - punycode.js@2.3.1: {} - punycode@2.3.1: {} pupa@2.1.1: @@ -18579,6 +18180,19 @@ snapshots: quick-format-unescaped@4.0.4: {} + quill-delta@5.1.0: + dependencies: + fast-diff: 1.3.0 + lodash.clonedeep: 4.5.0 + lodash.isequal: 4.5.0 + + quill@2.0.3: + dependencies: + eventemitter3: 5.0.4 + lodash-es: 4.17.21 + parchment: 3.0.0 + quill-delta: 5.1.0 + radix3@1.1.2: {} ramda-adjunct@5.1.0(ramda@0.30.1): @@ -18612,52 +18226,52 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-copy-to-clipboard@5.1.0(react@19.2.4): + react-copy-to-clipboard@5.1.0(react@19.2.5): dependencies: copy-to-clipboard: 3.3.3 prop-types: 15.8.1 - react: 19.2.4 + react: 19.2.5 - react-debounce-input@3.3.0(react@19.2.4): + react-debounce-input@3.3.0(react@19.2.5): dependencies: lodash.debounce: 4.0.8 prop-types: 15.8.1 - react: 19.2.4 + react: 19.2.5 - react-dom@19.2.4(react@19.2.4): + react-dom@19.2.5(react@19.2.5): dependencies: - react: 19.2.4 + react: 19.2.5 scheduler: 0.27.0 - react-dropzone@15.0.0(react@19.2.4): + react-dropzone@15.0.0(react@19.2.5): dependencies: attr-accept: 2.2.5 file-selector: 2.1.2 prop-types: 15.8.1 - react: 19.2.4 + react: 19.2.5 - react-error-boundary@6.1.1(react@19.2.4): + react-error-boundary@6.1.1(react@19.2.5): dependencies: - react: 19.2.4 + react: 19.2.5 react-immutable-proptypes@2.2.0(immutable@3.8.2): dependencies: immutable: 3.8.2 invariant: 2.2.4 - react-immutable-pure-component@2.2.2(immutable@3.8.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-immutable-pure-component@2.2.2(immutable@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: immutable: 3.8.2 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) - react-inspector@6.0.2(react@19.2.4): + react-inspector@6.0.2(react@19.2.5): dependencies: - react: 19.2.4 + react: 19.2.5 - react-is@19.2.4: {} + react-is@19.2.5: {} - react-markdown@10.1.0(@types/react@19.2.14)(react@19.2.4): + react-markdown@10.1.0(@types/react@19.2.14)(react@19.2.5): dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 @@ -18666,7 +18280,7 @@ snapshots: hast-util-to-jsx-runtime: 2.3.6 html-url-attributes: 3.0.1 mdast-util-to-hast: 13.2.0 - react: 19.2.4 + react: 19.2.5 remark-parse: 11.0.0 remark-rehype: 11.1.1 unified: 11.0.5 @@ -18675,38 +18289,46 @@ snapshots: transitivePeerDependencies: - supports-color - react-number-format@5.4.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-number-format@5.4.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) - react-redux@9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1): + react-quill-new@3.8.3(quill-delta@5.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + dependencies: + lodash-es: 4.17.21 + quill: 2.0.3 + quill-delta: 5.1.0 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + + react-redux@9.2.0(@types/react@19.2.14)(react@19.2.5)(redux@5.0.1): dependencies: '@types/use-sync-external-store': 0.0.6 - react: 19.2.4 - use-sync-external-store: 1.4.0(react@19.2.4) + react: 19.2.5 + use-sync-external-store: 1.4.0(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 redux: 5.0.1 react-refresh@0.18.0: {} - react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.4): + react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.5): dependencies: - react: 19.2.4 - react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) + react: 19.2.5 + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.5) tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.14 - react-remove-scroll@2.7.1(@types/react@19.2.14)(react@19.2.4): + react-remove-scroll@2.7.1(@types/react@19.2.14)(react@19.2.5): dependencies: - react: 19.2.4 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.4) - react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) + react: 19.2.5 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.5) + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.5) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.4) - use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.4) + use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.5) + use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 @@ -18718,60 +18340,60 @@ snapshots: mri: 1.2.0 playwright: 1.49.0 - react-simple-code-editor@0.14.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-simple-code-editor@0.14.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) - react-smooth@4.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-smooth@4.0.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: fast-equals: 5.3.3 prop-types: 15.8.1 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react-transition-group: 4.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-transition-group: 4.4.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.4): + react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.5): dependencies: get-nonce: 1.0.1 - react: 19.2.4 + react: 19.2.5 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.14 - react-syntax-highlighter@16.1.0(react@19.2.4): + react-syntax-highlighter@16.1.0(react@19.2.5): dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 highlight.js: 10.7.3 highlightjs-vue: 1.0.0 lowlight: 1.20.0 prismjs: 1.30.0 - react: 19.2.4 + react: 19.2.5 refractor: 5.0.0 - react-textarea-autosize@8.5.9(@types/react@19.2.14)(react@19.2.4): + react-textarea-autosize@8.5.9(@types/react@19.2.14)(react@19.2.5): dependencies: - '@babel/runtime': 7.28.6 - react: 19.2.4 - use-composed-ref: 1.3.0(react@19.2.4) - use-latest: 1.2.1(@types/react@19.2.14)(react@19.2.4) + '@babel/runtime': 7.29.2 + react: 19.2.5 + use-composed-ref: 1.3.0(react@19.2.5) + use-latest: 1.2.1(@types/react@19.2.14)(react@19.2.5) transitivePeerDependencies: - '@types/react' - react-transition-group@4.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-transition-group@4.4.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) - react@19.2.4: {} + react@19.2.5: {} read-package-up@11.0.0: dependencies: - find-up-simple: 1.0.0 + find-up-simple: 1.0.1 read-pkg: 9.0.1 type-fest: 4.41.0 @@ -18779,14 +18401,14 @@ snapshots: dependencies: find-up-simple: 1.0.1 read-pkg: 10.0.0 - type-fest: 5.4.4 + type-fest: 5.5.0 read-pkg@10.0.0: dependencies: '@types/normalize-package-data': 2.4.4 normalize-package-data: 8.0.0 parse-json: 8.3.0 - type-fest: 5.4.4 + type-fest: 5.5.0 unicorn-magic: 0.3.0 read-pkg@9.0.1: @@ -18841,15 +18463,15 @@ snapshots: dependencies: decimal.js-light: 2.5.1 - recharts@2.15.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + recharts@2.15.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: clsx: 2.1.1 eventemitter3: 4.0.7 - lodash: 4.17.21 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react-is: 19.2.4 - react-smooth: 4.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + lodash: 4.18.1 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-is: 19.2.5 + react-smooth: 4.0.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5) recharts-scale: 0.4.5 tiny-invariant: 1.3.3 victory-vendor: 36.9.2 @@ -18871,7 +18493,7 @@ snapshots: call-bind: 1.0.8 define-properties: 1.2.1 dunder-proto: 1.0.1 - es-abstract: 1.23.7 + es-abstract: 1.24.0 es-errors: 1.3.0 get-intrinsic: 1.3.0 gopd: 1.2.0 @@ -18884,20 +18506,6 @@ snapshots: hastscript: 9.0.1 parse-entities: 4.0.2 - regexp.prototype.flags@1.5.2: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 - - regexp.prototype.flags@1.5.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 - regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 @@ -18957,12 +18565,6 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve@1.22.11: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - resolve@1.22.8: dependencies: is-core-module: 2.16.1 @@ -18971,15 +18573,10 @@ snapshots: resolve@2.0.0-next.5: dependencies: - is-core-module: 2.15.1 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - ret@0.2.2: {} ret@0.5.0: {} @@ -18992,30 +18589,35 @@ snapshots: rfdc@1.4.1: {} - rollup@4.48.1: + rollup@4.60.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.48.1 - '@rollup/rollup-android-arm64': 4.48.1 - '@rollup/rollup-darwin-arm64': 4.48.1 - '@rollup/rollup-darwin-x64': 4.48.1 - '@rollup/rollup-freebsd-arm64': 4.48.1 - '@rollup/rollup-freebsd-x64': 4.48.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.48.1 - '@rollup/rollup-linux-arm-musleabihf': 4.48.1 - '@rollup/rollup-linux-arm64-gnu': 4.48.1 - '@rollup/rollup-linux-arm64-musl': 4.48.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.48.1 - '@rollup/rollup-linux-ppc64-gnu': 4.48.1 - '@rollup/rollup-linux-riscv64-gnu': 4.48.1 - '@rollup/rollup-linux-riscv64-musl': 4.48.1 - '@rollup/rollup-linux-s390x-gnu': 4.48.1 - '@rollup/rollup-linux-x64-gnu': 4.48.1 - '@rollup/rollup-linux-x64-musl': 4.48.1 - '@rollup/rollup-win32-arm64-msvc': 4.48.1 - '@rollup/rollup-win32-ia32-msvc': 4.48.1 - '@rollup/rollup-win32-x64-msvc': 4.48.1 + '@rollup/rollup-android-arm-eabi': 4.60.0 + '@rollup/rollup-android-arm64': 4.60.0 + '@rollup/rollup-darwin-arm64': 4.60.0 + '@rollup/rollup-darwin-x64': 4.60.0 + '@rollup/rollup-freebsd-arm64': 4.60.0 + '@rollup/rollup-freebsd-x64': 4.60.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.60.0 + '@rollup/rollup-linux-arm-musleabihf': 4.60.0 + '@rollup/rollup-linux-arm64-gnu': 4.60.0 + '@rollup/rollup-linux-arm64-musl': 4.60.0 + '@rollup/rollup-linux-loong64-gnu': 4.60.0 + '@rollup/rollup-linux-loong64-musl': 4.60.0 + '@rollup/rollup-linux-ppc64-gnu': 4.60.0 + '@rollup/rollup-linux-ppc64-musl': 4.60.0 + '@rollup/rollup-linux-riscv64-gnu': 4.60.0 + '@rollup/rollup-linux-riscv64-musl': 4.60.0 + '@rollup/rollup-linux-s390x-gnu': 4.60.0 + '@rollup/rollup-linux-x64-gnu': 4.60.0 + '@rollup/rollup-linux-x64-musl': 4.60.0 + '@rollup/rollup-openbsd-x64': 4.60.0 + '@rollup/rollup-openharmony-arm64': 4.60.0 + '@rollup/rollup-win32-arm64-msvc': 4.60.0 + '@rollup/rollup-win32-ia32-msvc': 4.60.0 + '@rollup/rollup-win32-x64-gnu': 4.60.0 + '@rollup/rollup-win32-x64-msvc': 4.60.0 fsevents: 2.3.3 rope-sequence@1.3.4: {} @@ -19024,10 +18626,6 @@ snapshots: dependencies: rrweb-snapshot: 2.0.0-alpha.4 - rrule@2.8.1: - dependencies: - tslib: 2.8.1 - rrweb-player@1.0.0-alpha.4: dependencies: '@tsconfig/svelte': 1.0.13 @@ -19035,7 +18633,7 @@ snapshots: rrweb-snapshot@2.0.0-alpha.17: dependencies: - postcss: 8.5.6 + postcss: 8.5.8 rrweb-snapshot@2.0.0-alpha.4: {} @@ -19050,8 +18648,6 @@ snapshots: rrdom: 0.1.7 rrweb-snapshot: 2.0.0-alpha.4 - run-async@3.0.0: {} - run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -19060,18 +18656,11 @@ snapshots: dependencies: tslib: 2.8.1 - safe-array-concat@1.1.2: - dependencies: - call-bind: 1.0.8 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - safe-array-concat@1.1.3: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 - get-intrinsic: 1.2.6 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 has-symbols: 1.1.0 isarray: 2.0.5 @@ -19084,12 +18673,6 @@ snapshots: es-errors: 1.3.0 isarray: 2.0.5 - safe-regex-test@1.0.3: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-regex: 1.1.4 - safe-regex-test@1.1.0: dependencies: call-bound: 1.0.4 @@ -19104,10 +18687,10 @@ snapshots: safer-buffer@2.1.2: {} - sass@1.97.3: + sass@1.99.0: dependencies: chokidar: 4.0.0 - immutable: 5.0.2 + immutable: 5.1.5 source-map-js: 1.2.1 optionalDependencies: '@parcel/watcher': 2.4.1 @@ -19162,7 +18745,7 @@ snapshots: p-reduce: 3.0.0 read-package-up: 12.0.0 resolve-from: 5.0.0 - semver: 7.7.3 + semver: 7.7.4 signale: 1.4.0 yargs: 18.0.0 transitivePeerDependencies: @@ -19179,10 +18762,6 @@ snapshots: semver@6.3.1: {} - semver@7.6.3: {} - - semver@7.7.3: {} - semver@7.7.4: {} serialize-error@8.1.0: @@ -19221,34 +18800,36 @@ snapshots: safe-buffer: 5.2.1 to-buffer: 1.2.1 - sharp@0.34.4: + sharp@0.34.5: dependencies: '@img/colour': 1.0.0 detect-libc: 2.1.2 semver: 7.7.4 optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.4 - '@img/sharp-darwin-x64': 0.34.4 - '@img/sharp-libvips-darwin-arm64': 1.2.3 - '@img/sharp-libvips-darwin-x64': 1.2.3 - '@img/sharp-libvips-linux-arm': 1.2.3 - '@img/sharp-libvips-linux-arm64': 1.2.3 - '@img/sharp-libvips-linux-ppc64': 1.2.3 - '@img/sharp-libvips-linux-s390x': 1.2.3 - '@img/sharp-libvips-linux-x64': 1.2.3 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 - '@img/sharp-libvips-linuxmusl-x64': 1.2.3 - '@img/sharp-linux-arm': 0.34.4 - '@img/sharp-linux-arm64': 0.34.4 - '@img/sharp-linux-ppc64': 0.34.4 - '@img/sharp-linux-s390x': 0.34.4 - '@img/sharp-linux-x64': 0.34.4 - '@img/sharp-linuxmusl-arm64': 0.34.4 - '@img/sharp-linuxmusl-x64': 0.34.4 - '@img/sharp-wasm32': 0.34.4 - '@img/sharp-win32-arm64': 0.34.4 - '@img/sharp-win32-ia32': 0.34.4 - '@img/sharp-win32-x64': 0.34.4 + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 optional: true shebang-command@2.0.0: @@ -19264,27 +18845,27 @@ snapshots: side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 - object-inspect: 1.13.3 + object-inspect: 1.13.4 side-channel-map@1.0.1: dependencies: call-bound: 1.0.4 es-errors: 1.3.0 get-intrinsic: 1.3.0 - object-inspect: 1.13.3 + object-inspect: 1.13.4 side-channel-weakmap@1.0.2: dependencies: call-bound: 1.0.4 es-errors: 1.3.0 get-intrinsic: 1.3.0 - object-inspect: 1.13.3 + object-inspect: 1.13.4 side-channel-map: 1.0.1 side-channel@1.1.0: dependencies: es-errors: 1.3.0 - object-inspect: 1.13.3 + object-inspect: 1.13.4 side-channel-list: 1.0.0 side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 @@ -19455,7 +19036,7 @@ snapshots: statuses@2.0.1: {} - std-env@3.10.0: {} + std-env@4.0.0: {} stop-iteration-iterator@1.1.0: dependencies: @@ -19498,30 +19079,30 @@ snapshots: string.prototype.includes@2.0.1: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.24.0 string.prototype.matchall@4.0.12: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.23.7 + es-abstract: 1.24.0 es-errors: 1.3.0 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.6 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 gopd: 1.2.0 has-symbols: 1.1.0 internal-slot: 1.1.0 - regexp.prototype.flags: 1.5.3 + regexp.prototype.flags: 1.5.4 set-function-name: 2.0.2 side-channel: 1.1.0 string.prototype.repeat@1.0.0: dependencies: define-properties: 1.2.1 - es-abstract: 1.23.7 + es-abstract: 1.24.0 string.prototype.trim@1.2.10: dependencies: @@ -19529,17 +19110,10 @@ snapshots: call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.23.7 + es-abstract: 1.24.0 es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 - string.prototype.trim@1.2.9: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.7 - es-object-atoms: 1.1.1 - string.prototype.trimend@1.0.9: dependencies: call-bind: 1.0.8 @@ -19586,7 +19160,7 @@ snapshots: strip-json-comments@3.1.1: {} - strnum@2.1.2: {} + strnum@2.2.3: {} style-to-js@1.1.16: dependencies: @@ -19596,25 +19170,25 @@ snapshots: dependencies: inline-style-parser: 0.2.4 - styled-jsx@5.1.6(@babel/core@7.26.0)(react@19.2.4): + styled-jsx@5.1.6(@babel/core@7.26.0)(react@19.2.5): dependencies: client-only: 0.0.1 - react: 19.2.4 + react: 19.2.5 optionalDependencies: '@babel/core': 7.26.0 - styled-jsx@5.1.6(@babel/core@7.29.0)(react@19.2.4): + styled-jsx@5.1.6(@babel/core@7.29.0)(react@19.2.5): dependencies: client-only: 0.0.1 - react: 19.2.4 + react: 19.2.5 optionalDependencies: '@babel/core': 7.29.0 sugar-high@0.7.5: {} - sugarss@5.0.0(postcss@8.5.6): + sugarss@5.0.0(postcss@8.5.8): dependencies: - postcss: 8.5.6 + postcss: 8.5.8 super-regex@1.0.0: dependencies: @@ -19649,16 +19223,16 @@ snapshots: deep-rename-keys: 0.2.1 xml-reader: 2.4.3 - swagger-client@3.37.0: + swagger-client@3.37.2: dependencies: '@babel/runtime-corejs3': 7.27.1 '@scarf/scarf': 1.4.0 - '@swagger-api/apidom-core': 1.6.0 - '@swagger-api/apidom-error': 1.6.0 - '@swagger-api/apidom-json-pointer': 1.6.0 - '@swagger-api/apidom-ns-openapi-3-1': 1.6.0 - '@swagger-api/apidom-ns-openapi-3-2': 1.6.0 - '@swagger-api/apidom-reference': 1.6.0 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 + '@swagger-api/apidom-json-pointer': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-1': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-2': 1.10.2 + '@swagger-api/apidom-reference': 1.10.2 '@swaggerexpert/cookie': 2.0.2 deepmerge: 4.3.1 fast-json-patch: 3.1.1 @@ -19673,7 +19247,7 @@ snapshots: transitivePeerDependencies: - debug - swagger-ui-react@5.32.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + swagger-ui-react@5.32.4(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: '@babel/runtime-corejs3': 7.27.1 '@scarf/scarf': 1.4.0 @@ -19682,31 +19256,31 @@ snapshots: classnames: 2.5.1 css.escape: 1.5.1 deep-extend: 0.6.0 - dompurify: 3.2.6 + dompurify: 3.3.3 ieee754: 1.2.1 immutable: 3.8.2 js-file-download: 0.4.12 js-yaml: 4.1.1 - lodash: 4.17.21 + lodash: 4.18.1 prop-types: 15.8.1 randexp: 0.5.3 randombytes: 2.1.0 - react: 19.2.4 - react-copy-to-clipboard: 5.1.0(react@19.2.4) - react-debounce-input: 3.3.0(react@19.2.4) - react-dom: 19.2.4(react@19.2.4) + react: 19.2.5 + react-copy-to-clipboard: 5.1.0(react@19.2.5) + react-debounce-input: 3.3.0(react@19.2.5) + react-dom: 19.2.5(react@19.2.5) react-immutable-proptypes: 2.2.0(immutable@3.8.2) - react-immutable-pure-component: 2.2.2(immutable@3.8.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react-inspector: 6.0.2(react@19.2.4) - react-redux: 9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1) - react-syntax-highlighter: 16.1.0(react@19.2.4) + react-immutable-pure-component: 2.2.2(immutable@3.8.2)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react-inspector: 6.0.2(react@19.2.5) + react-redux: 9.2.0(@types/react@19.2.14)(react@19.2.5)(redux@5.0.1) + react-syntax-highlighter: 16.1.0(react@19.2.5) redux: 5.0.1 redux-immutable: 4.0.0(immutable@3.8.2) remarkable: 2.0.1 reselect: 5.1.1 serialize-error: 8.1.0 sha.js: 2.4.12 - swagger-client: 3.37.0 + swagger-client: 3.37.2 url-parse: 1.5.10 xml: 1.0.1 xml-but-prettier: 1.0.1 @@ -19721,7 +19295,7 @@ snapshots: tagged-tag@1.0.0: {} - tapable@2.3.0: {} + tapable@2.3.2: {} tar-fs@2.1.4: dependencies: @@ -19730,16 +19304,6 @@ snapshots: pump: 3.0.2 tar-stream: 2.2.0 - tar-fs@3.1.1: - dependencies: - pump: 3.0.2 - tar-stream: 3.1.7 - optionalDependencies: - bare-fs: 4.1.2 - bare-path: 3.0.0 - transitivePeerDependencies: - - bare-buffer - tar-fs@3.1.2: dependencies: pump: 3.0.2 @@ -19773,22 +19337,22 @@ snapshots: type-fest: 2.19.0 unique-string: 3.0.0 - terser-webpack-plugin@5.3.17(webpack@5.94.0): + terser-webpack-plugin@5.4.0(webpack@5.94.0): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - terser: 5.46.0 + terser: 5.46.1 webpack: 5.94.0 - terser@5.46.0: + terser@5.46.1: dependencies: '@jridgewell/source-map': 0.3.11 acorn: 8.16.0 commander: 2.20.3 source-map-support: 0.5.21 - testcontainers@11.12.0: + testcontainers@11.14.0: dependencies: '@balena/dockerignore': 1.0.2 '@types/dockerode': 4.0.1 @@ -19796,15 +19360,15 @@ snapshots: async-lock: 1.4.1 byline: 5.0.0 debug: 4.4.3 - docker-compose: 1.3.1 - dockerode: 4.0.9 - get-port: 7.1.0 + docker-compose: 1.4.2 + dockerode: 4.0.10 + get-port: 7.2.0 proper-lockfile: 4.1.2 properties-reader: 3.0.1 ssh-remote-port-forward: 1.0.4 - tar-fs: 3.1.1 + tar-fs: 3.1.2 tmp: 0.2.5 - undici: 7.22.0 + undici: 7.24.6 transitivePeerDependencies: - bare-buffer - supports-color @@ -19836,6 +19400,8 @@ snapshots: dependencies: convert-hrtime: 5.0.0 + timezones-ical-library@2.1.3: {} + tiny-invariant@1.3.3: {} tinybench@2.9.0: {} @@ -19844,12 +19410,10 @@ snapshots: tinyglobby@0.2.15: dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 - tinyrainbow@3.0.3: {} - - title-case@4.3.2: {} + tinyrainbow@3.1.0: {} tldts-core@6.1.69: {} @@ -19887,7 +19451,7 @@ snapshots: dependencies: tldts: 6.1.69 - tough-cookie@6.0.0: + tough-cookie@6.0.1: dependencies: tldts: 7.0.12 @@ -19927,18 +19491,18 @@ snapshots: trough@2.2.0: {} - trpc-to-openapi@3.1.0(patch_hash=2ca3c16af0fcca0c736697ad4fe553a14f794524fa9ce0d5c3e8ee4aea76090c)(@trpc/server@11.12.0(typescript@5.9.3))(zod-openapi@5.3.0(zod@4.2.1))(zod@4.2.1): + trpc-to-openapi@3.2.0(patch_hash=2ca3c16af0fcca0c736697ad4fe553a14f794524fa9ce0d5c3e8ee4aea76090c)(@trpc/server@11.16.0(typescript@5.9.3))(zod-openapi@5.3.0(zod@4.3.6))(zod@4.3.6): dependencies: - '@trpc/server': 11.12.0(typescript@5.9.3) + '@trpc/server': 11.16.0(typescript@5.9.3) co-body: 6.2.0 h3: 1.15.1 openapi3-ts: 4.4.0 - zod: 4.2.1 - zod-openapi: 5.3.0(zod@4.2.1) + zod: 4.3.6 + zod-openapi: 5.3.0(zod@4.3.6) optionalDependencies: '@rollup/rollup-linux-x64-gnu': 4.6.1 - ts-api-utils@2.4.0(typescript@5.9.3): + ts-api-utils@2.5.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -19974,17 +19538,16 @@ snapshots: tsx@4.20.4: dependencies: esbuild: 0.25.12 - get-tsconfig: 4.8.1 + get-tsconfig: 4.13.6 optionalDependencies: fsevents: 2.3.3 tsx@4.21.0: dependencies: - esbuild: 0.27.3 + esbuild: 0.27.7 get-tsconfig: 4.13.6 optionalDependencies: fsevents: 2.3.3 - optional: true tunnel-agent@0.6.0: dependencies: @@ -19992,32 +19555,14 @@ snapshots: tunnel@0.0.6: {} - turbo-darwin-64@2.8.16: - optional: true - - turbo-darwin-arm64@2.8.16: - optional: true - - turbo-linux-64@2.8.16: - optional: true - - turbo-linux-arm64@2.8.16: - optional: true - - turbo-windows-64@2.8.16: - optional: true - - turbo-windows-arm64@2.8.16: - optional: true - - turbo@2.8.16: + turbo@2.9.6: optionalDependencies: - turbo-darwin-64: 2.8.16 - turbo-darwin-arm64: 2.8.16 - turbo-linux-64: 2.8.16 - turbo-linux-arm64: 2.8.16 - turbo-windows-64: 2.8.16 - turbo-windows-arm64: 2.8.16 + '@turbo/darwin-64': 2.9.6 + '@turbo/darwin-arm64': 2.9.6 + '@turbo/linux-64': 2.9.6 + '@turbo/linux-arm64': 2.9.6 + '@turbo/windows-64': 2.9.6 + '@turbo/windows-arm64': 2.9.6 tweetnacl@0.14.5: {} @@ -20027,15 +19572,13 @@ snapshots: type-fest@0.20.2: {} - type-fest@0.21.3: {} - type-fest@1.4.0: {} type-fest@2.19.0: {} type-fest@4.41.0: {} - type-fest@5.4.4: + type-fest@5.5.0: dependencies: tagged-tag: 1.0.0 @@ -20044,66 +19587,34 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 - typed-array-buffer@1.0.2: - dependencies: - call-bind: 1.0.8 - es-errors: 1.3.0 - is-typed-array: 1.1.13 - typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 es-errors: 1.3.0 is-typed-array: 1.1.15 - typed-array-byte-length@1.0.1: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.3 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.13 - typed-array-byte-length@1.0.3: dependencies: call-bind: 1.0.8 - for-each: 0.3.3 + for-each: 0.3.5 gopd: 1.2.0 has-proto: 1.2.0 is-typed-array: 1.1.15 - typed-array-byte-offset@1.0.2: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.3 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.13 - typed-array-byte-offset@1.0.4: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 - for-each: 0.3.3 + for-each: 0.3.5 gopd: 1.2.0 has-proto: 1.2.0 is-typed-array: 1.1.15 reflect.getprototypeof: 1.0.9 - typed-array-length@1.0.6: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.3 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 - typed-array-length@1.0.7: dependencies: call-bind: 1.0.8 - for-each: 0.3.3 + for-each: 0.3.5 gopd: 1.2.0 is-typed-array: 1.1.15 possible-typed-array-names: 1.0.0 @@ -20117,12 +19628,12 @@ snapshots: dependencies: ts-toolbelt: 9.6.0 - typescript-eslint@8.57.0(eslint@9.39.4)(typescript@5.9.3): + typescript-eslint@8.58.2(eslint@9.39.4)(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.57.0(@typescript-eslint/parser@8.57.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3) - '@typescript-eslint/parser': 8.57.0(eslint@9.39.4)(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.0(eslint@9.39.4)(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.58.2(@typescript-eslint/parser@8.58.2(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3) + '@typescript-eslint/parser': 8.58.2(eslint@9.39.4)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.2(eslint@9.39.4)(typescript@5.9.3) eslint: 9.39.4 typescript: 5.9.3 transitivePeerDependencies: @@ -20130,10 +19641,6 @@ snapshots: typescript@5.9.3: {} - uc.micro@2.1.0: {} - - ufo@1.6.1: {} - ufo@1.6.3: {} uglify-js@3.19.3: @@ -20141,13 +19648,6 @@ snapshots: uint8array-extras@1.5.0: {} - unbox-primitive@1.0.2: - dependencies: - call-bind: 1.0.8 - has-bigints: 1.0.2 - has-symbols: 1.1.0 - which-boxed-primitive: 1.0.2 - unbox-primitive@1.1.0: dependencies: call-bound: 1.0.4 @@ -20163,13 +19663,7 @@ snapshots: undici@6.23.0: {} - undici@7.18.2: {} - - undici@7.19.2: {} - - undici@7.21.0: {} - - undici@7.22.0: {} + undici@7.24.6: {} unicode-emoji-modifier-base@1.0.0: {} @@ -20228,25 +19722,13 @@ snapshots: unplugin@1.14.1(webpack-sources@3.3.4): dependencies: - acorn: 8.14.0 + acorn: 8.16.0 webpack-virtual-modules: 0.6.2 optionalDependencies: webpack-sources: 3.3.4 unraw@3.0.0: {} - update-browserslist-db@1.1.1(browserslist@4.24.2): - dependencies: - browserslist: 4.24.2 - escalade: 3.2.0 - picocolors: 1.1.1 - - update-browserslist-db@1.1.3(browserslist@4.24.4): - dependencies: - browserslist: 4.24.4 - escalade: 3.2.0 - picocolors: 1.1.1 - update-browserslist-db@1.2.3(browserslist@4.28.1): dependencies: browserslist: 4.28.1 @@ -20287,55 +19769,55 @@ snapshots: url-toolkit@2.2.5: {} - use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.4): + use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.5): dependencies: - react: 19.2.4 + react: 19.2.5 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.14 - use-composed-ref@1.3.0(react@19.2.4): + use-composed-ref@1.3.0(react@19.2.5): dependencies: - react: 19.2.4 + react: 19.2.5 - use-deep-compare-effect@1.8.1(react@19.2.4): + use-deep-compare-effect@1.8.1(react@19.2.5): dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 dequal: 2.0.3 - react: 19.2.4 + react: 19.2.5 - use-intl@4.8.3(react@19.2.4): + use-intl@4.9.1(react@19.2.5): dependencies: '@formatjs/fast-memoize': 3.1.0 '@schummar/icu-type-parser': 1.21.5 - icu-minify: 4.8.3 + icu-minify: 4.9.1 intl-messageformat: 11.1.1 - react: 19.2.4 + react: 19.2.5 - use-isomorphic-layout-effect@1.1.2(@types/react@19.2.14)(react@19.2.4): + use-isomorphic-layout-effect@1.1.2(@types/react@19.2.14)(react@19.2.5): dependencies: - react: 19.2.4 + react: 19.2.5 optionalDependencies: '@types/react': 19.2.14 - use-latest@1.2.1(@types/react@19.2.14)(react@19.2.4): + use-latest@1.2.1(@types/react@19.2.14)(react@19.2.5): dependencies: - react: 19.2.4 - use-isomorphic-layout-effect: 1.1.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.5 + use-isomorphic-layout-effect: 1.1.2(@types/react@19.2.14)(react@19.2.5) optionalDependencies: '@types/react': 19.2.14 - use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.4): + use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.5): dependencies: detect-node-es: 1.1.0 - react: 19.2.4 + react: 19.2.5 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.14 - use-sync-external-store@1.4.0(react@19.2.4): + use-sync-external-store@1.4.0(react@19.2.5): dependencies: - react: 19.2.4 + react: 19.2.5 use-sync-external-store@1.6.0(react@19.2.3): dependencies: @@ -20383,7 +19865,7 @@ snapshots: video.js@8.23.7: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@videojs/http-streaming': 3.17.4(video.js@8.23.7) '@videojs/vhs-utils': 4.1.1 '@videojs/xhr': 2.7.0 @@ -20407,71 +19889,62 @@ snapshots: dependencies: global: 4.4.0 - vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@7.1.12(@types/node@24.12.0)(sass@1.97.3)(sugarss@5.0.0(postcss@8.5.6))(terser@5.46.0)(tsx@4.21.0)(yaml@2.5.1)): + vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@7.1.12(@types/node@24.12.2)(sass@1.99.0)(sugarss@5.0.0(postcss@8.5.8))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.3(typescript@5.9.3) - vite: 7.1.12(@types/node@24.12.0)(sass@1.97.3)(sugarss@5.0.0(postcss@8.5.6))(terser@5.46.0)(tsx@4.21.0)(yaml@2.5.1) + vite: 7.1.12(@types/node@24.12.2)(sass@1.99.0)(sugarss@5.0.0(postcss@8.5.8))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color - typescript - vite@7.1.12(@types/node@24.12.0)(sass@1.97.3)(sugarss@5.0.0(postcss@8.5.6))(terser@5.46.0)(tsx@4.21.0)(yaml@2.5.1): + vite@7.1.12(@types/node@24.12.2)(sass@1.99.0)(sugarss@5.0.0(postcss@8.5.8))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: esbuild: 0.25.12 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.48.1 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.8 + rollup: 4.60.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.12.0 + '@types/node': 24.12.2 fsevents: 2.3.3 - sass: 1.97.3 - sugarss: 5.0.0(postcss@8.5.6) - terser: 5.46.0 + sass: 1.99.0 + sugarss: 5.0.0(postcss@8.5.8) + terser: 5.46.1 tsx: 4.21.0 - yaml: 2.5.1 + yaml: 2.8.3 - vitest@4.0.18(@types/node@24.12.0)(@vitest/ui@4.0.18)(jsdom@28.1.0(@noble/hashes@2.0.1))(sass@1.97.3)(sugarss@5.0.0(postcss@8.5.6))(terser@5.46.0)(tsx@4.21.0)(yaml@2.5.1): + vitest@4.1.5(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@29.0.2(@noble/hashes@2.0.1))(vite@7.1.12(@types/node@24.12.2)(sass@1.99.0)(sugarss@5.0.0(postcss@8.5.8))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: - '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.1.12(@types/node@24.12.0)(sass@1.97.3)(sugarss@5.0.0(postcss@8.5.6))(terser@5.46.0)(tsx@4.21.0)(yaml@2.5.1)) - '@vitest/pretty-format': 4.0.18 - '@vitest/runner': 4.0.18 - '@vitest/snapshot': 4.0.18 - '@vitest/spy': 4.0.18 - '@vitest/utils': 4.0.18 - es-module-lexer: 1.7.0 - expect-type: 1.2.2 + '@vitest/expect': 4.1.5 + '@vitest/mocker': 4.1.5(vite@7.1.12(@types/node@24.12.2)(sass@1.99.0)(sugarss@5.0.0(postcss@8.5.8))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/pretty-format': 4.1.5 + '@vitest/runner': 4.1.5 + '@vitest/snapshot': 4.1.5 + '@vitest/spy': 4.1.5 + '@vitest/utils': 4.1.5 + es-module-lexer: 2.0.0 + expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.10.0 + picomatch: 4.0.4 + std-env: 4.0.0 tinybench: 2.9.0 tinyexec: 1.0.2 tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 7.1.12(@types/node@24.12.0)(sass@1.97.3)(sugarss@5.0.0(postcss@8.5.6))(terser@5.46.0)(tsx@4.21.0)(yaml@2.5.1) + tinyrainbow: 3.1.0 + vite: 7.1.12(@types/node@24.12.2)(sass@1.99.0)(sugarss@5.0.0(postcss@8.5.8))(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 24.12.0 - '@vitest/ui': 4.0.18(vitest@4.0.18) - jsdom: 28.1.0(@noble/hashes@2.0.1) + '@types/node': 24.12.2 + '@vitest/coverage-v8': 4.1.5(vitest@4.1.5) + '@vitest/ui': 4.1.5(vitest@4.1.5) + jsdom: 29.0.2(@noble/hashes@2.0.1) transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml w3c-keyname@2.2.8: {} @@ -20484,10 +19957,6 @@ snapshots: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - web-streams-polyfill@3.3.3: {} web-tree-sitter@0.24.5: @@ -20511,7 +19980,7 @@ snapshots: acorn-import-attributes: 1.9.5(acorn@8.16.0) browserslist: 4.28.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.20.0 + enhanced-resolve: 5.20.1 es-module-lexer: 1.7.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -20522,8 +19991,8 @@ snapshots: mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 3.3.0 - tapable: 2.3.0 - terser-webpack-plugin: 5.3.17(webpack@5.94.0) + tapable: 2.3.2 + terser-webpack-plugin: 5.4.0(webpack@5.94.0) watchpack: 2.5.1 webpack-sources: 3.3.4 transitivePeerDependencies: @@ -20535,9 +20004,9 @@ snapshots: whatwg-mimetype@5.0.0: {} - whatwg-url@16.0.0(@noble/hashes@2.0.1): + whatwg-url@16.0.1(@noble/hashes@2.0.1): dependencies: - '@exodus/bytes': 1.11.0(@noble/hashes@2.0.1) + '@exodus/bytes': 1.15.0(@noble/hashes@2.0.1) tr46: 6.0.0 webidl-conversions: 8.0.1 transitivePeerDependencies: @@ -20548,14 +20017,6 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 - which-boxed-primitive@1.0.2: - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.1.1 - is-symbol: 1.0.4 - which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 @@ -20574,11 +20035,11 @@ snapshots: is-finalizationregistry: 1.1.1 is-generator-function: 1.0.10 is-regex: 1.2.1 - is-weakref: 1.1.0 + is-weakref: 1.1.1 isarray: 2.0.5 which-boxed-primitive: 1.1.1 which-collection: 1.0.2 - which-typed-array: 1.1.18 + which-typed-array: 1.1.19 which-collection@1.0.2: dependencies: @@ -20587,23 +20048,6 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.3 - which-typed-array@1.1.15: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.3 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - - which-typed-array@1.1.18: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - for-each: 0.3.3 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - which-typed-array@1.1.19: dependencies: available-typed-arrays: 1.0.7 @@ -20691,7 +20135,7 @@ snapshots: ws@8.17.1: {} - ws@8.19.0: {} + ws@8.20.0: {} xcase@2.0.1: {} @@ -20737,7 +20181,7 @@ snapshots: yallist@3.1.1: {} - yaml@2.5.1: {} + yaml@2.8.3: {} yargs-parser@20.2.9: {} @@ -20788,23 +20232,23 @@ snapshots: compress-commons: 6.0.2 readable-stream: 4.5.2 - zod-form-data@3.0.1(zod@4.2.1): + zod-form-data@3.0.1(zod@4.3.6): dependencies: '@rvf/set-get': 7.0.1 - zod: 4.2.1 + zod: 4.3.6 - zod-openapi@5.3.0(zod@4.2.1): + zod-openapi@5.3.0(zod@4.3.6): dependencies: - zod: 4.2.1 + zod: 4.3.6 - zod-validation-error@4.0.2(zod@4.2.1): + zod-validation-error@4.0.2(zod@4.3.6): dependencies: - zod: 4.2.1 + zod: 4.3.6 - zod-validation-error@5.0.0(zod@4.2.1): + zod-validation-error@5.0.0(zod@4.3.6): dependencies: - zod: 4.2.1 + zod: 4.3.6 - zod@4.2.1: {} + zod@4.3.6: {} zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 8a392051e..869cf5397 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,7 +2,194 @@ packages: - apps/* - packages/* - tooling/* -minimumReleaseAge: 4320 # Only download deps if they are at least 3 days old (in minutes) +minimumReleaseAge: 4320 minimumReleaseAgeExclude: - next - "@next/*" +catalogMode: strict +catalog: + "@auth/core": ^0.41.2 + "@auth/drizzle-adapter": ^1.11.2 + "@ctrl/deluge": ^8.0.0 + "@ctrl/qbittorrent": ^9.11.2 + "@ctrl/transmission": ^7.4.0 + "@dnd-kit/core": ^6.3.1 + "@dnd-kit/modifiers": ^9.0.0 + "@dnd-kit/sortable": ^10.0.0 + "@dnd-kit/utilities": ^3.2.2 + "@drizzle-team/brocli": ^0.12.0 + "@extractus/feed-extractor": 7.1.7 + "@gitbeaker/rest": ^43.8.0 + "@homarr/gridstack": ^1.12.0 + "@homarr/node-unifi": ^2.6.0 + "@ianvs/prettier-plugin-sort-imports": ^4.7.1 + "@immich/sdk": ^2.7.5 + "@jellyfin/sdk": ^0.13.0 + "@kubernetes/client-node": ^1.4.0 + "@mantine/charts": ^8.3.18 + "@mantine/colors-generator": ^8.3.18 + "@mantine/core": ^8.3.18 + "@mantine/dates": ^8.3.18 + "@mantine/dropzone": ^8.3.18 + "@mantine/form": ^8.3.18 + "@mantine/hooks": ^8.3.18 + "@mantine/modals": ^8.3.18 + "@mantine/notifications": ^8.3.18 + "@mantine/spotlight": ^8.3.18 + "@mantine/tiptap": ^8.3.18 + "@million/lint": 1.0.14 + "@next/eslint-plugin-next": 16.2.4 + "@octokit/auth-app": ^8.2.0 + "@paralleldrive/cuid2": ^3.3.0 + "@semantic-release/changelog": ^6.0.3 + "@semantic-release/commit-analyzer": ^13.0.1 + "@semantic-release/git": ^10.0.1 + "@semantic-release/github": ^12.0.6 + "@semantic-release/npm": ^13.1.5 + "@semantic-release/release-notes-generator": ^14.1.0 + "@t3-oss/env-nextjs": ^0.13.11 + "@tabler/icons-react": ^3.41.1 + "@tanstack/react-query": ^5.100.5 + "@tanstack/react-query-devtools": ^5.100.5 + "@tanstack/react-query-next-experimental": ^5.100.5 + "@testcontainers/mysql": ^11.14.0 + "@testcontainers/postgresql": ^11.14.0 + "@testcontainers/redis": ^11.14.0 + "@tiptap/extension-color": 3.22.4 + "@tiptap/extension-highlight": 3.22.4 + "@tiptap/extension-image": 3.22.4 + "@tiptap/extension-link": ^3.22.4 + "@tiptap/extension-placeholder": ^3.22.4 + "@tiptap/extension-table": 3.22.4 + "@tiptap/extension-table-cell": 3.22.4 + "@tiptap/extension-table-header": 3.22.4 + "@tiptap/extension-table-row": 3.22.4 + "@tiptap/extension-task-item": 3.22.4 + "@tiptap/extension-task-list": 3.22.4 + "@tiptap/extension-text-align": 3.22.4 + "@tiptap/extension-text-style": 3.22.4 + "@tiptap/extension-underline": 3.22.4 + "@tiptap/react": ^3.22.4 + "@tiptap/starter-kit": ^3.22.4 + "@trpc/client": ^11.16.0 + "@trpc/next": ^11.16.0 + "@trpc/react-query": ^11.16.0 + "@trpc/server": ^11.16.0 + "@trpc/tanstack-react-query": ^11.16.0 + "@turbo/gen": ^2.9.6 + "@types/adm-zip": 0.5.8 + "@types/bcrypt": 6.0.0 + "@types/better-sqlite3": 7.6.13 + "@types/chroma-js": 3.1.2 + "@types/cookies": 0.9.2 + "@types/crypto-js": ^4.2.2 + "@types/css-modules": ^1.0.5 + "@types/dockerode": ^4.0.1 + "@types/node": ^24.12.2 + "@types/node-cron": ^3.0.11 + "@types/node-unifi": ^2.5.1 + "@types/pg": ^8.20.0 + "@types/prismjs": ^1.26.6 + "@types/react": 19.2.14 + "@types/react-dom": 19.2.3 + "@types/swagger-ui-react": ^5.18.0 + "@types/video.js": ^7.3.58 + "@types/ws": ^8.18.1 + "@types/xml2js": ^0.4.14 + "@umami/node": ^0.4.0 + "@vitejs/plugin-react": ^5.2.0 + "@vitest/coverage-v8": ^4.1.5 + "@vitest/ui": ^4.1.5 + "@xterm/addon-canvas": ^0.7.0 + "@xterm/addon-fit": 0.11.0 + "@xterm/xterm": ^6.0.0 + adm-zip: 0.5.17 + babel-plugin-react-compiler: ^1.0.0 + bcrypt: ^6.0.0 + better-sqlite3: ^12.9.0 + chroma-js: ^3.2.0 + clsx: ^2.1.1 + concurrently: ^9.2.1 + conventional-changelog-conventionalcommits: ^9.3.1 + cookie: 1.1.1 + cookies: ^0.9.1 + cross-env: ^10.1.0 + crypto-js: ^4.2.0 + dayjs: ^1.11.20 + deepmerge: 4.3.1 + dns-caching: ^0.2.9 + dockerode: ^5.0.0 + dotenv: ^17.4.2 + dotenv-cli: ^11.0.0 + drizzle-kit: ^0.31.10 + drizzle-orm: ^0.45.2 + drizzle-zod: ^0.8.3 + esbuild: ^0.28.0 + eslint: ^9.39.4 + eslint-config-prettier: ^10.1.8 + eslint-config-turbo: ^2.9.6 + eslint-plugin-import: ^2.32.0 + eslint-plugin-jsx-a11y: ^6.10.2 + eslint-plugin-react: ^7.37.5 + eslint-plugin-react-hooks: ^6.1.1 + fast-xml-parser: ^5.7.2 + fastify: ^5.8.5 + flag-icons: ^7.5.0 + glob: ^13.0.6 + ical.js: ^2.2.1 + ioredis: 5.10.1 + isomorphic-dompurify: ^3.10.0 + jotai: ^2.19.1 + jsdom: ^29.0.2 + json5: ^2.2.3 + ldapts: 8.1.7 + lodash.clonedeep: ^4.5.0 + mantine-form-zod-resolver: ^1.3.0 + mantine-react-table: 2.0.0-beta.9 + maria2: ^0.4.1 + mysql2: 3.22.2 + next: 16.2.4 + next-auth: 5.0.0-beta.31 + next-intl: 4.9.1 + node-cron: ^4.2.1 + node-loader: ^2.1.0 + octokit: ^5.0.5 + pg: ^8.20.0 + postcss-preset-mantine: ^1.18.0 + prettier: ^3.8.3 + prettier-plugin-packagejson: ^3.0.2 + prismjs: ^1.30.0 + proxmox-api: 1.1.1 + react: 19.2.5 + react-dom: 19.2.5 + react-error-boundary: ^6.1.1 + react-markdown: ^10.1.0 + react-quill-new: ^3.8.3 + react-simple-code-editor: ^0.14.1 + recharts: ^2.15.4 + sass: ^1.99.0 + semantic-release: ^25.0.3 + semver-parser: ^4.1.8 + superjson: 2.2.6 + svgson: ^5.3.1 + swagger-ui-react: ^5.32.4 + testcontainers: ^11.14.0 + timezones-ical-library: ^2.1.3 + trpc-to-openapi: ^3.2.0 + tsdav: ^2.1.8 + tsx: 4.20.4 + turbo: ^2.9.6 + typescript: ^5.9.3 + typescript-eslint: ^8.58.2 + undici: 7.24.6 + use-deep-compare-effect: ^1.8.1 + video.js: ^8.23.7 + vite-tsconfig-paths: ^6.1.1 + vitest: ^4.1.5 + winston: 3.19.0 + ws: ^8.20.0 + xml2js: ^0.6.2 + yaml: 2.8.3 + zod: ^4.3.6 + zod-form-data: ^3.0.1 + zod-validation-error: ^5.0.0 diff --git a/scripts/update-contributors.mjs b/scripts/update-contributors.mjs index 6bf17a250..2c7fb1054 100644 --- a/scripts/update-contributors.mjs +++ b/scripts/update-contributors.mjs @@ -1,14 +1,12 @@ import fs from "fs/promises"; const sources = { - crowdin: [ - { projectId: 534422 }, - { projectId: 742587 }, - ], + crowdin: [{ projectId: 534422 }, { projectId: 742587 }], github: [ { slug: "ajnart", repository: "homarr" }, { slug: "homarr-labs", repository: "homarr" }, ], + opencollective: [{ slug: "homarr" }], }; const env = { @@ -47,11 +45,55 @@ const fetchCrowdinMembers = async (projectId) => { }; const response = await fetch(url, options); - const data = await response.json(); + const result = await response.json(); - return data.data.flatMap((data) => data.data).map(contributor => ({ - username: contributor.username, - avatarUrl: contributor.avatarUrl, + return result.data + .flatMap(({ data }) => data) + .map((contributor) => ({ + username: contributor.username, + avatarUrl: contributor.avatarUrl, + })); +}; + +const fetchOpenCollectiveContributors = async (slug) => { + const query = ` + query($slug: String!) { + account(slug: $slug) { + ... on Organization { + members(role: [BACKER]) { + nodes { + role + account { + id + name + slug + imageUrl + } + } + } + } + } + } + `; + + const response = await fetch("https://api.opencollective.com/graphql/v2", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + query, + variables: { slug }, + }), + }); + + const result = await response.json(); + const members = result.data?.account?.members?.nodes || []; + return members.map((member) => ({ + id: member.account.id, + name: member.account.name, + slug: member.account.slug, + imageUrl: member.account.imageUrl, })); }; @@ -61,6 +103,7 @@ const distinctBy = (callback) => (value, index, self) => { const githubContributors = []; const crowdinContributors = []; +const opencollectiveContributors = []; for (const { repository, slug } of sources.github) { githubContributors.push(...(await fetchGithubContributors(slug, repository))); @@ -77,3 +120,14 @@ for (const { projectId } of sources.crowdin) { } const distinctCrowdinContributors = crowdinContributors.filter(distinctBy((contributor) => contributor.username)); await fs.writeFile("./static-data/translators.json", JSON.stringify(distinctCrowdinContributors)); + +for (const { slug } of sources.opencollective) { + opencollectiveContributors.push(...(await fetchOpenCollectiveContributors(slug))); +} +const distinctOpenCollectiveContributors = opencollectiveContributors.filter( + distinctBy((contributor) => contributor.slug), +); +await fs.writeFile( + "./static-data/opencollective-contributors.json", + JSON.stringify(distinctOpenCollectiveContributors), +); diff --git a/static-data/contributors.json b/static-data/contributors.json index 4f1b6aff8..79bf72e01 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":"alotlikebeans","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":"SergioChan","avatar_url":"https://avatars.githubusercontent.com/u/10103766?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":"castielwaverly","avatar_url":"https://avatars.githubusercontent.com/u/137005689?v=4"},{"login":"xoxyuxu","avatar_url":"https://avatars.githubusercontent.com/u/3543416?v=4"},{"login":"MaienM","avatar_url":"https://avatars.githubusercontent.com/u/583129?v=4"},{"login":"HeapReaper","avatar_url":"https://avatars.githubusercontent.com/u/31496522?v=4"},{"login":"Copilot","avatar_url":"https://avatars.githubusercontent.com/in/1143301?v=4"},{"login":"mairas","avatar_url":"https://avatars.githubusercontent.com/u/407010?v=4"},{"login":"itzTheMeow","avatar_url":"https://avatars.githubusercontent.com/u/50887230?v=4"},{"login":"NicolasNewman","avatar_url":"https://avatars.githubusercontent.com/u/16135852?v=4"},{"login":"NikeLaosClericus","avatar_url":"https://avatars.githubusercontent.com/u/39810627?v=4"},{"login":"noahcroghan","avatar_url":"https://avatars.githubusercontent.com/u/27422774?v=4"},{"login":"Rhiz3K","avatar_url":"https://avatars.githubusercontent.com/u/33246262?v=4"},{"login":"CrazyWolf13","avatar_url":"https://avatars.githubusercontent.com/u/96661824?v=4"},{"login":"generalmat82","avatar_url":"https://avatars.githubusercontent.com/u/110256073?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"},{"login":"leandroscardua","avatar_url":"https://avatars.githubusercontent.com/u/24698541?v=4"},{"login":"hotrungnhan","avatar_url":"https://avatars.githubusercontent.com/u/40029631?v=4"},{"login":"Kaotic3","avatar_url":"https://avatars.githubusercontent.com/u/80522225?v=4"},{"login":"frankvHoof93","avatar_url":"https://avatars.githubusercontent.com/u/7346516?v=4"},{"login":"faugusto-oliveira","avatar_url":"https://avatars.githubusercontent.com/u/37384074?v=4"},{"login":"ieugen","avatar_url":"https://avatars.githubusercontent.com/u/1050920?v=4"},{"login":"KartulUdus","avatar_url":"https://avatars.githubusercontent.com/u/23346150?v=4"},{"login":"DZ945brH","avatar_url":"https://avatars.githubusercontent.com/u/42635243?v=4"},{"login":"Oupsman","avatar_url":"https://avatars.githubusercontent.com/u/11260343?v=4"},{"login":"m0s4ik","avatar_url":"https://avatars.githubusercontent.com/u/26578395?v=4"},{"login":"AartSchinkel","avatar_url":"https://avatars.githubusercontent.com/u/189675191?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":"alotlikebeans","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":"SergioChan","avatar_url":"https://avatars.githubusercontent.com/u/10103766?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":"castielwaverly","avatar_url":"https://avatars.githubusercontent.com/u/137005689?v=4"},{"login":"xoxyuxu","avatar_url":"https://avatars.githubusercontent.com/u/3543416?v=4"},{"login":"MaienM","avatar_url":"https://avatars.githubusercontent.com/u/583129?v=4"},{"login":"mvanhorn","avatar_url":"https://avatars.githubusercontent.com/u/455140?v=4"},{"login":"HeapReaper","avatar_url":"https://avatars.githubusercontent.com/u/31496522?v=4"},{"login":"Copilot","avatar_url":"https://avatars.githubusercontent.com/in/1143301?v=4"},{"login":"mairas","avatar_url":"https://avatars.githubusercontent.com/u/407010?v=4"},{"login":"itzTheMeow","avatar_url":"https://avatars.githubusercontent.com/u/50887230?v=4"},{"login":"NicolasNewman","avatar_url":"https://avatars.githubusercontent.com/u/16135852?v=4"},{"login":"NikeLaosClericus","avatar_url":"https://avatars.githubusercontent.com/u/39810627?v=4"},{"login":"noahcroghan","avatar_url":"https://avatars.githubusercontent.com/u/27422774?v=4"},{"login":"ohmzi","avatar_url":"https://avatars.githubusercontent.com/u/6551272?v=4"},{"login":"Rhiz3K","avatar_url":"https://avatars.githubusercontent.com/u/33246262?v=4"},{"login":"saschabuehrle","avatar_url":"https://avatars.githubusercontent.com/u/47737812?v=4"},{"login":"StrandedTurtle","avatar_url":"https://avatars.githubusercontent.com/u/132835255?v=4"},{"login":"CrazyWolf13","avatar_url":"https://avatars.githubusercontent.com/u/96661824?v=4"},{"login":"generalmat82","avatar_url":"https://avatars.githubusercontent.com/u/110256073?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"},{"login":"leandroscardua","avatar_url":"https://avatars.githubusercontent.com/u/24698541?v=4"},{"login":"kylegrieder","avatar_url":"https://avatars.githubusercontent.com/u/25424229?v=4"},{"login":"hotrungnhan","avatar_url":"https://avatars.githubusercontent.com/u/40029631?v=4"},{"login":"KelianB","avatar_url":"https://avatars.githubusercontent.com/u/11216155?v=4"},{"login":"Kaotic3","avatar_url":"https://avatars.githubusercontent.com/u/80522225?v=4"},{"login":"frankvHoof93","avatar_url":"https://avatars.githubusercontent.com/u/7346516?v=4"},{"login":"faugusto-oliveira","avatar_url":"https://avatars.githubusercontent.com/u/37384074?v=4"},{"login":"ieugen","avatar_url":"https://avatars.githubusercontent.com/u/1050920?v=4"},{"login":"KartulUdus","avatar_url":"https://avatars.githubusercontent.com/u/23346150?v=4"},{"login":"dgshue","avatar_url":"https://avatars.githubusercontent.com/u/12952156?v=4"},{"login":"DZ945brH","avatar_url":"https://avatars.githubusercontent.com/u/42635243?v=4"},{"login":"Oupsman","avatar_url":"https://avatars.githubusercontent.com/u/11260343?v=4"},{"login":"m0s4ik","avatar_url":"https://avatars.githubusercontent.com/u/26578395?v=4"},{"login":"AartSchinkel","avatar_url":"https://avatars.githubusercontent.com/u/189675191?v=4"}] \ No newline at end of file diff --git a/static-data/opencollective-contributors.json b/static-data/opencollective-contributors.json new file mode 100644 index 000000000..fcdf9d4da --- /dev/null +++ b/static-data/opencollective-contributors.json @@ -0,0 +1 @@ +[{"id":"zaxon793-jy8gpl0v-d89pbrkd-emwl5v04","name":"Mike","slug":"guest-5da646e8","imageUrl":"https://images.opencollective.com/guest-5da646e8/avatar.png"},{"id":"ywz9j4av-god8pgwg-db36mr35-nxklb0e7","name":"Guest","slug":"guest-554ec68f","imageUrl":"https://images.opencollective.com/guest-554ec68f/avatar.png"},{"id":"mlo94zn7-x08dpo09-xlxpewga-3vjbrky5","name":"Robert Hermann","slug":"robert-hermann","imageUrl":"https://images.opencollective.com/robert-hermann/avatar.png"},{"id":"zaxon793-jy8gpl0n-8r3pbrkd-emwl5v04","name":"Sebastian Raubuch","slug":"sebastian-raubuch","imageUrl":"https://images.opencollective.com/sebastian-raubuch/avatar.png"},{"id":"nmlo94zn-7x08dpod-ykm6ewga-3vjbrky5","name":"Didier LUTHI","slug":"didier-luthi","imageUrl":"https://images.opencollective.com/didier-luthi/avatar.png"},{"id":"vedj9wro-z3a56dgk-z3z67blg-8x4m0ykn","name":"Guest","slug":"guest-b1459a68","imageUrl":"https://images.opencollective.com/guest-b1459a68/avatar.png"},{"id":"gm9bnk80-437xqry4-8vepvzeo-ljdayw5r","name":"Mohister","slug":"mohister","imageUrl":"https://images.opencollective.com/mohister/1d8a592/avatar.png"},{"id":"vrgbk357-l4x96e70-m0apomew-a0jdyzn8","name":"sidens","slug":"sidens","imageUrl":"https://images.opencollective.com/sidens/avatar.png"},{"id":"mlo94zn7-x08dpo0d-l7epewga-3vjbrky5","name":"Chris","slug":"guest-937065bb","imageUrl":"https://images.opencollective.com/guest-937065bb/avatar.png"},{"id":"k9mbw7y4-8r3zq3ol-7zlq0ej5-lavnodgx","name":"Nick W","slug":"guest-7501840a","imageUrl":"https://images.opencollective.com/guest-7501840a/avatar.png"},{"id":"e0adkjrv-8xwm69o8-5al67z5n-4l93bgoy","name":"Jeppedy","slug":"guest-ab78e46a","imageUrl":"https://images.opencollective.com/guest-ab78e46a/avatar.png"},{"id":"a47byg9n-xozdp8xo-jgm6mjlv-03rek5w8","name":"naru","slug":"guest-02fd264a","imageUrl":"https://images.opencollective.com/guest-02fd264a/avatar.png"},{"id":"3k0exgzn-m8yj64g3-ll865wao-9r7b4dlv","name":"Jared Hocutt","slug":"jared-hocutt","imageUrl":"https://images.opencollective.com/jared-hocutt/avatar.png"},{"id":"eng0kzdy-vor4pz8l-exopbma8-37xlw95j","name":"Incognito","slug":"user-e63f4a5b","imageUrl":"https://images.opencollective.com/user-e63f4a5b/avatar.png"},{"id":"8k03reyd-5agmq50v-8vyplbwo-z7j4nxv9","name":"dazi","slug":"guest-11663a46","imageUrl":"https://images.opencollective.com/guest-11663a46/avatar.png"},{"id":"vedj9wro-z3a56dgd-zwl67blg-8x4m0ykn","name":"ZoopaMario","slug":"zoopamario","imageUrl":"https://images.opencollective.com/zoopamario/bea900d/avatar.png"},{"id":"a47byg9n-xozdp8xe-xmb6mjlv-03rek5w8","name":"FlamebergUA","slug":"guest-a59fd500","imageUrl":"https://images.opencollective.com/guest-a59fd500/avatar.png"},{"id":"8k03reyd-5agmq50y-kzoplbwo-z7j4nxv9","name":"StLCards","slug":"guest-e1de33dc","imageUrl":"https://images.opencollective.com/guest-e1de33dc/avatar.png"},{"id":"ejoxl3az-45w9pa54-dk46y870-mgkbrvdn","name":"Varadha","slug":"guest-6f68eed9","imageUrl":"https://images.opencollective.com/guest-6f68eed9/avatar.png"},{"id":"jrkx5lmn-v904qjl0-3oz68bwa-7zdygoe3","name":"Guest","slug":"guest-6da419b5","imageUrl":"https://images.opencollective.com/guest-6da419b5/avatar.png"},{"id":"mywxoz34-09rl6k3z-lmlqvenb-dj7gk85a","name":"Guest","slug":"guest-122d7e0a","imageUrl":"https://images.opencollective.com/guest-122d7e0a/avatar.png"},{"id":"3z8arxve-ymko60vm-3eaqgl5n-bj9w704d","name":"Ricardo","slug":"ricardo34","imageUrl":"https://images.opencollective.com/ricardo34/avatar.png"},{"id":"e0adkjrv-8xwm69or-reo67z5n-4l93bgoy","name":"GoM","slug":"guest-3944feab","imageUrl":"https://images.opencollective.com/guest-3944feab/avatar.png"},{"id":"gm9bnk80-437xqrnr-r5o6vzeo-ljdayw5r","name":"Brent Maxwell","slug":"brentmaxwell","imageUrl":"https://images.opencollective.com/brentmaxwell/avatar.png"},{"id":"gnxdwzj3-le5mpwzd-ll0py8rv-bko04a97","name":"Eric G","slug":"guest-478270f1","imageUrl":"https://images.opencollective.com/guest-478270f1/avatar.png"},{"id":"v349mrwg-z75lpyjo-ez8pa08d-jeybknox","name":"ninja","slug":"guest-0bb6ba36","imageUrl":"https://images.opencollective.com/guest-0bb6ba36/avatar.png"},{"id":"ywz9j4av-god8pgw0-53y6mr35-nxklb0e7","name":"s11","slug":"guest-6e9a2588","imageUrl":"https://images.opencollective.com/guest-6e9a2588/avatar.png"},{"id":"mlo94zn7-x08dpo30-v73pewga-3vjbrky5","name":"Incognito","slug":"user-cbad11af","imageUrl":"https://images.opencollective.com/user-cbad11af/avatar.png"},{"id":"v349mrwg-z75lpy7l-yzgpa08d-jeybknox","name":"Ronald Simmons","slug":"ronald-simmons","imageUrl":"https://images.opencollective.com/ronald-simmons/avatar.png"},{"id":"7ywz9j4a-vgod8pgl-me9qmr35-nxklb0e7","name":"Joel","slug":"guest-3376ab02","imageUrl":"https://images.opencollective.com/guest-3376ab02/avatar.png"},{"id":"v349mrwg-z75lpyjw-kxzpa08d-jeybknox","name":"Gokay Yamankurt","slug":"gokay-yamankurt","imageUrl":"https://images.opencollective.com/gokay-yamankurt/avatar.png"},{"id":"v349mrwg-z75lpyjv-59rpa08d-jeybknox","name":"Rhiz3K","slug":"rhiz3k","imageUrl":"https://images.opencollective.com/rhiz3k/7287acd/avatar.png"},{"id":"8k03reyd-5agmq5x7-77gplbwo-z7j4nxv9","name":"vukie","slug":"guest-40aabe13","imageUrl":"https://images.opencollective.com/guest-40aabe13/avatar.png"},{"id":"a47byg9n-xozdp84a-rmvqmjlv-03rek5w8","name":"Guest","slug":"guest-2fe979fa","imageUrl":"https://images.opencollective.com/guest-2fe979fa/avatar.png"},{"id":"rxg0j35l-zkwm6vgm-k3x6voe9-8n47daby","name":"AngryPig","slug":"guest-b9e8a062","imageUrl":"https://images.opencollective.com/guest-b9e8a062/avatar.png"}] \ No newline at end of file diff --git a/static-data/translators.json b/static-data/translators.json index 128610dcf..bcd4ba1f4 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":"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":"prubin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17503492/medium/96ac87644691e49c1f983f2f094e541c_default.png"},{"username":"sam-tam-sam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17578052/medium/1628dc2954ce3ae95e0caaa2bd60ab0c.png"},{"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":"perrygamerptyt","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13117177/medium/1406c949507ecd438480473c8a1f6124.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":"Tobost06","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13467449/medium/9227dc07f6366bc060d28304f5cb8ce7.jpeg"},{"username":"Kf637","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13530622/medium/118b00bb72d01d3229c97409637e25d1_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":"Wjouter","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14585620/medium/b91a51513332bdc0a0a9ecbed99ecbc3.png"},{"username":"albanobattistella","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14686194/medium/564afcfd76f5cd24751bd669cf4943aa.jpg"},{"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":"meviper","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15958903/medium/209f521ce33a05831fa8d7d1b7babc20_default.png"},{"username":"GerOriki","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16268376/medium/da00e54b08cd40348231d92873a0cd0a_default.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"},{"username":"zhoran1997","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17344028/medium/c8f450b5a8f1e9494a45dc60af7ce63e.png"},{"username":"gilalves1703","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17447768/medium/3f1de562a5c2391c88bbf8d5cf40a266.png"},{"username":"iServeCloud","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17470960/medium/11649b99d609438d66455a4d2fdc70f7.png"},{"username":"guibolzantvbox","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17474136/medium/59a576e6da538664ceb972253916fa02.jpeg"},{"username":"ivann136","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17506062/medium/67d09ada36fac5f444a1f7517e3a97bd_default.png"},{"username":"Maheshivara","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17516082/medium/576e1e6581cf969615b265de6aeff8b7.jpeg"},{"username":"brunogui81","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17517542/medium/7c0d174e810435af518fe8e0c05e151f.jpeg"},{"username":"michelwilhelm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17542190/medium/4c6b33fd8993ff565fa75add2ce8355e.jpeg"},{"username":"dias-gxstavo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17547376/medium/8c6b109aae8aeb651192346a39ae9e5b.jpeg"},{"username":"e.erdemir","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17617994/medium/7259a29db9941c6171a8cbbd643b92bd.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":"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":"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":"prubin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17503492/medium/96ac87644691e49c1f983f2f094e541c_default.png"},{"username":"sam-tam-sam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17578052/medium/1628dc2954ce3ae95e0caaa2bd60ab0c.png"},{"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":"perrygamerptyt","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13117177/medium/1406c949507ecd438480473c8a1f6124.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":"Tobost06","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13467449/medium/9227dc07f6366bc060d28304f5cb8ce7.jpeg"},{"username":"Kf637","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13530622/medium/118b00bb72d01d3229c97409637e25d1_default.png"},{"username":"Cruellest","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13610615/medium/2a74faa0947ee08d18f7946fb8602c1e.jpg"},{"username":"olavinto","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14424644/medium/37c01732bd2b7a272b421807a05ccfeb.png"},{"username":"Thario","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14491372/medium/dd5e142070802a672900121aa3f332a6_default.png"},{"username":"Wjouter","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14585620/medium/b91a51513332bdc0a0a9ecbed99ecbc3.png"},{"username":"albanobattistella","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14686194/medium/564afcfd76f5cd24751bd669cf4943aa.jpg"},{"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":"meviper","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15958903/medium/209f521ce33a05831fa8d7d1b7babc20_default.png"},{"username":"GerOriki","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16268376/medium/da00e54b08cd40348231d92873a0cd0a_default.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":"renan.costaalencar","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16938427/medium/6d25b25320c5bde734118dec4af9cd5b.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"},{"username":"zhoran1997","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17344028/medium/c8f450b5a8f1e9494a45dc60af7ce63e.png"},{"username":"gilalves1703","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17447768/medium/3f1de562a5c2391c88bbf8d5cf40a266.png"},{"username":"iServeCloud","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17470960/medium/11649b99d609438d66455a4d2fdc70f7.png"},{"username":"guibolzantvbox","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17474136/medium/59a576e6da538664ceb972253916fa02.jpeg"},{"username":"ivann136","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17506062/medium/67d09ada36fac5f444a1f7517e3a97bd_default.png"},{"username":"Maheshivara","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17516082/medium/576e1e6581cf969615b265de6aeff8b7.jpeg"},{"username":"brunogui81","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17517542/medium/7c0d174e810435af518fe8e0c05e151f.jpeg"},{"username":"michelwilhelm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17542190/medium/4c6b33fd8993ff565fa75add2ce8355e.jpeg"},{"username":"dias-gxstavo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17547376/medium/8c6b109aae8aeb651192346a39ae9e5b.jpeg"},{"username":"ToxykAuBleu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17614030/medium/8d21e0608560172b121bd46126d827c7.jpeg"},{"username":"e.erdemir","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17617994/medium/7259a29db9941c6171a8cbbd643b92bd.png"},{"username":"sjonkreutz","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17618306/medium/7601c45d015189a863656e21348d223b.png"},{"username":"volovich0377","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17620388/medium/c929a8fbd24f96d17620fa497ade7309.png"},{"username":"Hamstio1","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17624898/medium/406e0bf40094c24a01c3064f8f5b2a82.png"},{"username":"i3laa","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17627462/medium/613a9d283ed8b69819ee181903851660.jpeg"},{"username":"bastiengrignon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17629884/medium/ddfc3339285bd65195fcd834e512e9b7.jpeg"},{"username":"kauhee","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17644600/medium/def1b9066cf9275b4273a5a5dca7f325.png"}] \ No newline at end of file diff --git a/tooling/eslint/package.json b/tooling/eslint/package.json index e2857e0f2..de116c6a1 100644 --- a/tooling/eslint/package.json +++ b/tooling/eslint/package.json @@ -17,19 +17,19 @@ }, "prettier": "@homarr/prettier-config", "dependencies": { - "@next/eslint-plugin-next": "16.1.6", - "eslint-config-prettier": "^10.1.8", - "eslint-config-turbo": "^2.8.15", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jsx-a11y": "^6.10.2", - "eslint-plugin-react": "^7.37.5", - "eslint-plugin-react-hooks": "^6.1.1", - "typescript-eslint": "^8.57.0" + "@next/eslint-plugin-next": "catalog:", + "eslint-config-prettier": "catalog:", + "eslint-config-turbo": "catalog:", + "eslint-plugin-import": "catalog:", + "eslint-plugin-jsx-a11y": "catalog:", + "eslint-plugin-react": "catalog:", + "eslint-plugin-react-hooks": "catalog:", + "typescript-eslint": "catalog:" }, "devDependencies": { "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "eslint": "^9.39.4", - "typescript": "^5.9.3" + "eslint": "catalog:", + "typescript": "catalog:" } } diff --git a/tooling/github/setup/action.yml b/tooling/github/setup/action.yml index 6051ab5cb..b8374d497 100644 --- a/tooling/github/setup/action.yml +++ b/tooling/github/setup/action.yml @@ -4,14 +4,11 @@ description: "Common setup steps for Actions" runs: using: composite steps: - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@v6 - uses: actions/setup-node@v6 with: - node-version: 24.14.0 + node-version: 24.15.0 cache: "pnpm" - - shell: bash - run: pnpm add -g turbo - - shell: bash run: pnpm install --frozen-lockfile diff --git a/tooling/prettier/package.json b/tooling/prettier/package.json index 4c0fc9b0f..12362e38b 100644 --- a/tooling/prettier/package.json +++ b/tooling/prettier/package.json @@ -10,12 +10,12 @@ }, "prettier": "@homarr/prettier-config", "dependencies": { - "@ianvs/prettier-plugin-sort-imports": "^4.7.1", - "prettier": "^3.8.1" + "@ianvs/prettier-plugin-sort-imports": "catalog:", + "prettier": "catalog:" }, "devDependencies": { "@homarr/tsconfig": "workspace:^0.1.0", - "prettier-plugin-packagejson": "^3.0.2", - "typescript": "^5.9.3" + "prettier-plugin-packagejson": "catalog:", + "typescript": "catalog:" } }