diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 5580d85bc..aff1d5b5f 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -31,6 +31,7 @@ body: label: Version description: What version of Homarr are you running? options: + - 1.31.0 - 1.30.1 - 1.30.0 - 1.29.0 diff --git a/.github/workflows/deployment-docker-image.yml b/.github/workflows/deployment-docker-image.yml index f70798295..e76f7b6e6 100644 --- a/.github/workflows/deployment-docker-image.yml +++ b/.github/workflows/deployment-docker-image.yml @@ -60,7 +60,7 @@ jobs: - uses: actions/setup-node@v4 if: env.SKIP_RELEASE == 'false' with: - node-version: 22 + node-version: 22.18.0 - run: npm i -g pnpm if: env.SKIP_RELEASE == 'false' - name: Install dependencies diff --git a/.github/workflows/update-integration-list.yml b/.github/workflows/update-integration-list.yml new file mode 100644 index 000000000..beedfd390 --- /dev/null +++ b/.github/workflows/update-integration-list.yml @@ -0,0 +1,62 @@ +name: Update integration list + +on: + workflow_dispatch: { } + push: + paths: + - packages/definitions/src/integration.ts + branches: + - dev + +permissions: + pull-requests: write + +jobs: + update-readme: + concurrency: + group: update-integration + cancel-in-progress: false + runs-on: ubuntu-latest + steps: + - name: Obtain token + id: obtainToken + uses: tibdex/github-app-token@v2 + with: + private_key: ${{ secrets.HOMARR_UPDATE_CONTRIBUTORS_PRIVATE_KEY }} + app_id: ${{ vars.HOMARR_UPDATE_CONTRIBUTORS_APP_ID }} + - name: Checkout code + uses: actions/checkout@v4 + env: + GITHUB_TOKEN: ${{ steps.obtainToken.outputs.token }} + - name: Setup + uses: ./tooling/github/setup + - run: pnpm run scripts:update-readme-integrations + - name: Commit changes + env: + GITHUB_TOKEN: ${{ steps.obtainToken.outputs.token }} + run: | + git config --global user.email "210161987+homarr-update-contributors[bot]@users.noreply.github.com" + git config --global user.name "Homarr Update Contributors" + git add . + git commit -m "chore: update integrations list readme" + + - name: Create Pull Request + id: create-pull-request + uses: peter-evans/create-pull-request@v7 + with: + token: ${{ steps.obtainToken.outputs.token }} + branch: update-integrations-readme + base: dev + title: "chore: update integrations list readme" + delete-branch: true + body: | + This PR automatically updates the list of integrations of Homarr in the README.md + + - name: Install GitHub CLI + run: sudo apt-get install -y gh + + - name: Enable auto-merge + env: + GITHUB_TOKEN: ${{ steps.obtainToken.outputs.token }} + run: | + gh pr merge ${{steps.create-pull-request.outputs.pull-request-number}} --auto --squash \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index d40b0a3f3..8081508ba 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:22.17.1-alpine AS base +FROM node:22.18.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 d4c143b88..e4c7157a5 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -50,21 +50,21 @@ "@homarr/ui": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", "@homarr/widgets": "workspace:^0.1.0", - "@mantine/colors-generator": "^8.2.2", - "@mantine/core": "^8.2.2", - "@mantine/dropzone": "^8.2.2", - "@mantine/hooks": "^8.2.2", - "@mantine/modals": "^8.2.2", - "@mantine/tiptap": "^8.2.2", + "@mantine/colors-generator": "^8.2.4", + "@mantine/core": "^8.2.4", + "@mantine/dropzone": "^8.2.4", + "@mantine/hooks": "^8.2.4", + "@mantine/modals": "^8.2.4", + "@mantine/tiptap": "^8.2.4", "@million/lint": "1.0.14", "@tabler/icons-react": "^3.34.1", - "@tanstack/react-query": "^5.84.1", - "@tanstack/react-query-devtools": "^5.84.1", - "@tanstack/react-query-next-experimental": "^5.84.1", - "@trpc/client": "^11.4.3", - "@trpc/next": "^11.4.3", - "@trpc/react-query": "^11.4.3", - "@trpc/server": "^11.4.3", + "@tanstack/react-query": "^5.84.2", + "@tanstack/react-query-devtools": "^5.84.2", + "@tanstack/react-query-next-experimental": "^5.84.2", + "@trpc/client": "^11.4.4", + "@trpc/next": "^11.4.4", + "@trpc/react-query": "^11.4.4", + "@trpc/server": "^11.4.4", "@xterm/addon-canvas": "^0.7.0", "@xterm/addon-fit": "0.10.0", "@xterm/xterm": "^5.5.0", @@ -74,16 +74,16 @@ "dotenv": "^17.2.1", "flag-icons": "^7.5.0", "glob": "^11.0.3", - "jotai": "^2.12.5", + "jotai": "^2.13.0", "mantine-react-table": "2.0.0-beta.9", - "next": "15.4.5", + "next": "15.4.6", "postcss-preset-mantine": "^1.18.0", "prismjs": "^1.30.0", "react": "19.1.1", "react-dom": "19.1.1", "react-error-boundary": "^6.0.0", "react-simple-code-editor": "^0.14.1", - "sass": "^1.89.2", + "sass": "^1.90.0", "superjson": "2.2.2", "swagger-ui-react": "^5.27.1", "use-deep-compare-effect": "^1.8.1", @@ -94,7 +94,7 @@ "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", "@types/chroma-js": "3.1.1", - "@types/node": "^22.17.0", + "@types/node": "^22.17.1", "@types/prismjs": "^1.26.5", "@types/react": "19.1.9", "@types/react-dom": "19.1.7", diff --git a/apps/nextjs/src/app/[locale]/manage/_components/hero-banner.tsx b/apps/nextjs/src/app/[locale]/manage/_components/hero-banner.tsx index b9aec4e3a..f1f4ddf39 100644 --- a/apps/nextjs/src/app/[locale]/manage/_components/hero-banner.tsx +++ b/apps/nextjs/src/app/[locale]/manage/_components/hero-banner.tsx @@ -1,37 +1,16 @@ import { Box, Grid, GridCol, Group, Image, Stack, Title } from "@mantine/core"; import { splitToNChunks } from "@homarr/common"; +import { integrationDefs } from "@homarr/definitions"; import classes from "./hero-banner.module.css"; -const icons = [ - "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/homarr.svg", - "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/sabnzbd.svg", - "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/deluge.svg", - "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/radarr.svg", - "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/sonarr.svg", - "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/lidarr.svg", - "https://cdn.jsdelivr.net/gh/loganmarchione/homelab-svg-assets/assets/pihole.svg", - "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/dashdot.png", - "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/overseerr.svg", - "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/plex.svg", - "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/jellyfin.svg", - "https://cdn.jsdelivr.net/gh/loganmarchione/homelab-svg-assets/assets/homeassistant.svg", - "https://cdn.jsdelivr.net/gh/loganmarchione/homelab-svg-assets/assets/freshrss.svg", - "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/readarr.svg", - "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/transmission.svg", - "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/qbittorrent.svg", - "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/nzbget.png", - "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/openmediavault.svg", - "https://cdn.jsdelivr.net/gh/loganmarchione/homelab-svg-assets/assets/docker.svg", - "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/jellyseerr.svg", - "https://cdn.jsdelivr.net/gh/loganmarchione/homelab-svg-assets/assets/adguardhome.svg", - "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tdarr.png", - "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/prowlarr.svg", -]; +const icons = Object.values(integrationDefs) + .filter((int) => int.name !== "Mock") + .map((int) => int.iconUrl); const countIconGroups = 3; -const animationDurationInSeconds = 12; +const animationDurationInSeconds = icons.length; const arrayInChunks = splitToNChunks(icons, countIconGroups); export const HeroBanner = () => { @@ -61,12 +40,26 @@ export const HeroBanner = () => { }} > {arrayInChunks[columnIndex]?.map((icon, index) => ( - + ))} {/* This is used for making the animation seem seamless */} {arrayInChunks[columnIndex]?.map((icon, index) => ( - + ))} diff --git a/apps/nextjs/src/app/[locale]/manage/integrations/_components/secrets/integration-secret-icons.ts b/apps/nextjs/src/app/[locale]/manage/integrations/_components/secrets/integration-secret-icons.ts index e489963e7..008d8b34f 100644 --- a/apps/nextjs/src/app/[locale]/manage/integrations/_components/secrets/integration-secret-icons.ts +++ b/apps/nextjs/src/app/[locale]/manage/integrations/_components/secrets/integration-secret-icons.ts @@ -19,4 +19,6 @@ export const integrationSecretIcons = { tokenId: IconGrid3x3, personalAccessToken: IconPasswordUser, topic: IconMessage, + opnsenseApiKey: IconKey, + opnsenseApiSecret: IconPassword, } satisfies Record; diff --git a/apps/nextjs/src/components/board/items/item-content.tsx b/apps/nextjs/src/components/board/items/item-content.tsx index cb57fd463..35896ec5d 100644 --- a/apps/nextjs/src/components/board/items/item-content.tsx +++ b/apps/nextjs/src/components/board/items/item-content.tsx @@ -21,6 +21,12 @@ interface BoardItemContentProps { item: SectionItem; } +const getOverflowFromKind = (kind: SectionItem["kind"]) => { + if (kind === "iframe") return "hidden"; + if (kind === "systemResources") return "visible"; + return undefined; +}; + export const BoardItemContent = ({ item }: BoardItemContentProps) => { const { ref, width, height } = useElementSize(); const board = useRequiredBoard(); @@ -41,7 +47,7 @@ export const BoardItemContent = ({ item }: BoardItemContentProps) => { root: { "--opacity": board.opacity / 100, containerType: "size", - overflow: item.kind === "iframe" ? "hidden" : undefined, + overflow: getOverflowFromKind(item.kind), "--border-color": item.advancedOptions.borderColor !== "" ? item.advancedOptions.borderColor : undefined, }, }} diff --git a/apps/tasks/package.json b/apps/tasks/package.json index 5f8125a55..758193c30 100644 --- a/apps/tasks/package.json +++ b/apps/tasks/package.json @@ -45,7 +45,7 @@ "@homarr/eslint-config": "workspace:^0.2.0", "@homarr/prettier-config": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0", - "@types/node": "^22.17.0", + "@types/node": "^22.17.1", "dotenv-cli": "^10.0.0", "esbuild": "^0.25.8", "eslint": "^9.32.0", diff --git a/docs/README.md b/docs/README.md index 00dc4fd81..215fa5f9f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,5 +1,4 @@ - -[![Banner](./banner.png)](https://homarr.dev/) +![](img/logo/2340450-2-title.png)

@@ -20,10 +19,6 @@

- - Demo ✨ - - • Install 💻 • @@ -35,8 +30,7 @@

- -[![Features Section](./section-features.png)](https://homarr.dev/) +![](img/headers/features.png) - 🖌️ Highly customizable with an extensive drag and drop grid system - ✨ Integrates seamlessly with your favorite self-hosted applications @@ -53,44 +47,268 @@

-[![Widgets & Integrations Section](./section-widgets-and-integrations.png)](https://homarr.dev/docs/category/widgets) +![](img/headers/integrations.png) -Homarr has a [built-in collection of widgets and integrations](https://homarr.dev/docs/category/integrations), that connect to your applications and enable you to control them directly from the dashboard. + -- 📥 **Torrent clients** - - [Deluge](https://homarr.dev/docs/integrations/torrent#deluge) - - [Transmission](https://homarr.dev/docs/integrations/torrent#transmission) - - [qBittorent](https://homarr.dev/docs/integrations/torrent#qbittorrent-integration) -- 📥 **Usenet clients** - - [SABnzbd](https://homarr.dev/docs/integrations/usenet#sabnzbd) - - [NZBGet](https://homarr.dev/docs/integrations/usenet#nzbget) -- 📺 **Media servers** - - [Plex](https://homarr.dev/docs/integrations/media-server/#plex) - - [Jellyfin](https://homarr.dev/docs/integrations/media-server#jellyfin-and-emby) -- 📚 **Media collection managers** - - [Sonarr](https://homarr.dev/docs/integrations/servarr#sonarr) - - [Radarr](https://homarr.dev/docs/integrations/servarr#radarr) - - [Lidarr](https://homarr.dev/docs/integrations/servarr#lidarr) - - [Readarr](https://homarr.dev/docs/integrations/servarr#readarr) -- 🎞️ **Media request managers** - - [Overseerr](https://homarr.dev/docs/integrations/media-requester) - - [Jellyseerr](https://homarr.dev/docs/integrations/media-requester) -- 🚫 **DNS ad-blockers** - - [Pihole](https://homarr.dev/docs/integrations/dns#pihole) - - [AdGuard Home](https://homarr.dev/docs/integrations/dns#adguard-home) -- 🖥️ **Monitoring** - - [Dash.](https://homarr.dev/docs/integrations/hardware) - - [OpenMediaVault.](https://homarr.dev/docs/integrations/hardware/#openmediavault) - - [Proxmox.](https://homarr.dev/docs/integrations/hardware/#proxmox) -- 🐳 **Container management**: - - [Docker](https://homarr.dev/docs/integrations/containers) +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + AdGuard Home +
+

AdGuard
Home

+
+
+ + Aria2 +
+

Aria2

+
+
+ + Codeberg +
+

Codeberg

+
+
+ + Dash. +
+

Dash.

+
+
+ + Deluge +
+

Deluge

+
+
+ + Docker Hub +
+

Docker
Hub

+
+
+ + Emby +
+

Emby

+
+
+ + Github +
+

Github

+
+
+ + GitHub Container Registry +
+

GitHub
Container
Registry

+
+
+ + Gitlab +
+

Gitlab

+
+
+ + Home Assistant +
+

Home
Assistant

+
+
+ + Jellyfin +
+

Jellyfin

+
+
+ + Jellyseerr +
+

Jellyseerr

+
+
+ + Lidarr +
+

Lidarr

+
+
+ + LinuxServer.io +
+

LinuxServer.io

+
+
+ + Nextcloud +
+

Nextcloud

+
+
+ + NPM +
+

NPM

+
+
+ + ntfy +
+

ntfy

+
+
+ + NZBGet +
+

NZBGet

+
+
+ + OpenMediaVault +
+

OpenMediaVault

+
+
+ + OPNsense +
+

OPNsense

+
+
+ + Overseerr +
+

Overseerr

+
+
+ + Pi-hole +
+

Pi-hole

+
+
+ + Plex +
+

Plex

+
+
+ + Prowlarr +
+

Prowlarr

+
+
+ + Proxmox +
+

Proxmox

+
+
+ + qBittorrent +
+

qBittorrent

+
+
+ + Quay +
+

Quay

+
+
+ + Radarr +
+

Radarr

+
+
+ + Readarr +
+

Readarr

+
+
+ + SABnzbd +
+

SABnzbd

+
+
+ + Sonarr +
+

Sonarr

+
+
+ + Tdarr +
+

Tdarr

+
+
+ + Transmission +
+

Transmission

+
+
+ + Unifi Controller +
+

Unifi
Controller

+
+
+
+ +

-[![Installation Section](./section-installation.png)](https://homarr.dev/docs/category/installation-1) - -Since we are updating Homarr very frequently, we recommend reading our official installation guides: +![](img/headers/installation.png)

@@ -101,12 +319,15 @@ Since we are updating Homarr very frequently, we recommend reading our official

-[![Contribute Section](./section-contribute.png)](https://opencollective.com/homarr) +![](img/headers/contribute.png)
-Homarr is a free to use open source project that is maintained by volunteers and developers from all over the world. We publish under the ``Apache License 2.0`` license which allows commercial usage. We invest multiple hours daily in to providing support, developing Homarr, integrating to third party software and more. We also pay for licensing and server hosting fees. -Please consider to help us cover these costs to enable the future development of Homarr. Thank you! +Homarr is a free-to-use open source project maintained by volunteers and developers from all over the world. +We publish under the `Apache License 2.0` license which allows commercial usage. +We invest multiple hours daily in providing support, developing Homarr, integrating to third party software and more. +We also pay for licensing and server hosting fees. +Please consider helping us cover these costs to enable the future development of Homarr. Thank you!

@@ -117,9 +338,9 @@ Please consider to help us cover these costs to enable the future development of You can also support us by helping with [translating the entire project](https://homarr.dev/docs/community/translations) to as many languages as possible or contributing directly to the code or documentation. Please read our [Contribution Guidelines](/CONTRIBUTING.md). All contributions, regardless of their size or scope, are welcome and highly appreciated! Thank you ❤️ ## Sponsors -Thanks to your generous sponsors we can continue to build Homarr. Check them out for high quality and easy to use development tools. + +Thanks to your generous sponsors, we can continue to build Homarr. Check them out for high-quality and easy-to-use development tools. Feel free to contact us at homarr-labs@proton.me if you wish to become a sponsor. [![Covered by Argos Visual Testing](https://argos-ci.com/badge-large.svg)](https://argos-ci.com?utm_source=%5Bhomarr%5D&utm_campaign=oss) \ [![Supported by PikaPods](https://www.pikapods.com/static/run-button.svg)](https://www.pikapods.com/pods?run=homarr-v1) - diff --git a/docs/banner.png b/docs/banner.png deleted file mode 100644 index 823bb50b1..000000000 Binary files a/docs/banner.png and /dev/null differ diff --git a/docs/img/headers/contribute.png b/docs/img/headers/contribute.png new file mode 100644 index 000000000..aedb22540 Binary files /dev/null and b/docs/img/headers/contribute.png differ diff --git a/docs/img/headers/features.png b/docs/img/headers/features.png new file mode 100644 index 000000000..a275ce946 Binary files /dev/null and b/docs/img/headers/features.png differ diff --git a/docs/img/headers/header.xcf b/docs/img/headers/header.xcf new file mode 100644 index 000000000..22a96ee2e Binary files /dev/null and b/docs/img/headers/header.xcf differ diff --git a/docs/img/headers/installation.png b/docs/img/headers/installation.png new file mode 100644 index 000000000..359cc3bca Binary files /dev/null and b/docs/img/headers/installation.png differ diff --git a/docs/img/headers/integrations.png b/docs/img/headers/integrations.png new file mode 100644 index 000000000..41f0173b2 Binary files /dev/null and b/docs/img/headers/integrations.png differ diff --git a/docs/img/logo/2340450-2-title.png b/docs/img/logo/2340450-2-title.png new file mode 100644 index 000000000..b53b409f4 Binary files /dev/null and b/docs/img/logo/2340450-2-title.png differ diff --git a/docs/img/logo/2340450-2-title.xcf b/docs/img/logo/2340450-2-title.xcf new file mode 100644 index 000000000..e2a413f13 Binary files /dev/null and b/docs/img/logo/2340450-2-title.xcf differ diff --git a/docs/installation-button.png b/docs/installation-button.png deleted file mode 100644 index 991cb9b27..000000000 Binary files a/docs/installation-button.png and /dev/null differ diff --git a/docs/section-contribute.png b/docs/section-contribute.png deleted file mode 100644 index 3700fee95..000000000 Binary files a/docs/section-contribute.png and /dev/null differ diff --git a/docs/section-features.png b/docs/section-features.png deleted file mode 100644 index b1854bf3a..000000000 Binary files a/docs/section-features.png and /dev/null differ diff --git a/docs/section-installation.png b/docs/section-installation.png deleted file mode 100644 index 92fa4474f..000000000 Binary files a/docs/section-installation.png and /dev/null differ diff --git a/docs/section-preview.png b/docs/section-preview.png deleted file mode 100644 index 6e43e043d..000000000 Binary files a/docs/section-preview.png and /dev/null differ diff --git a/docs/section-widgets-and-integrations.png b/docs/section-widgets-and-integrations.png deleted file mode 100644 index 67fcbc9ea..000000000 Binary files a/docs/section-widgets-and-integrations.png and /dev/null differ diff --git a/package.json b/package.json index 44b0ce7d4..7e78c48cc 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,8 @@ "test:e2e": "cross-env NODE_ENV=development CI=true vitest e2e", "test:ui": "cross-env NODE_ENV=development CI=true vitest --exclude e2e --ui --coverage.enabled", "typecheck": "turbo typecheck", - "with-env": "dotenv -e .env --" + "with-env": "dotenv -e .env --", + "scripts:update-readme-integrations": "tsx ./scripts/update-integration-list.mts" }, "prettier": "@homarr/prettier-config", "devDependencies": { @@ -38,7 +39,7 @@ "@semantic-release/github": "^11.0.3", "@semantic-release/npm": "^12.0.2", "@semantic-release/release-notes-generator": "^14.0.3", - "@testcontainers/redis": "^11.4.0", + "@testcontainers/redis": "^11.5.1", "@turbo/gen": "^2.5.5", "@vitejs/plugin-react": "^4.7.0", "@vitest/coverage-v8": "^3.2.4", @@ -48,7 +49,7 @@ "jsdom": "^26.1.0", "prettier": "^3.6.2", "semantic-release": "^24.2.7", - "testcontainers": "^11.4.0", + "testcontainers": "^11.5.1", "turbo": "^2.5.5", "typescript": "^5.9.2", "vite-tsconfig-paths": "^5.1.4", diff --git a/packages/api/package.json b/packages/api/package.json index 49e1fe53e..7f7d90bc4 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -41,17 +41,17 @@ "@homarr/server-settings": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", "@kubernetes/client-node": "^1.3.0", - "@tanstack/react-query": "^5.84.1", - "@trpc/client": "^11.4.3", - "@trpc/react-query": "^11.4.3", - "@trpc/server": "^11.4.3", - "@trpc/tanstack-react-query": "^11.4.3", + "@tanstack/react-query": "^5.84.2", + "@trpc/client": "^11.4.4", + "@trpc/react-query": "^11.4.4", + "@trpc/server": "^11.4.4", + "@trpc/tanstack-react-query": "^11.4.4", "lodash.clonedeep": "^4.5.0", - "next": "15.4.5", + "next": "15.4.6", "react": "19.1.1", "react-dom": "19.1.1", "superjson": "2.2.2", - "trpc-to-openapi": "^2.3.2", + "trpc-to-openapi": "^2.4.0", "zod": "^3.25.76" }, "devDependencies": { diff --git a/packages/api/src/root.ts b/packages/api/src/root.ts index 7aec5f2ac..6efc10ca5 100644 --- a/packages/api/src/root.ts +++ b/packages/api/src/root.ts @@ -8,6 +8,7 @@ import { groupRouter } from "./router/group"; import { homeRouter } from "./router/home"; import { iconsRouter } from "./router/icons"; import { importRouter } from "./router/import/import-router"; +import { infoRouter } from "./router/info"; import { integrationRouter } from "./router/integration/integration-router"; import { inviteRouter } from "./router/invite"; import { kubernetesRouter } from "./router/kubernetes/router/kubernetes-router"; @@ -47,6 +48,7 @@ export const appRouter = createTRPCRouter({ media: mediaRouter, updateChecker: updateCheckerRouter, certificates: certificateRouter, + info: infoRouter, }); // export type definition of API diff --git a/packages/api/src/router/group.ts b/packages/api/src/router/group.ts index bc7f13223..e717fca6f 100644 --- a/packages/api/src/router/group.ts +++ b/packages/api/src/router/group.ts @@ -277,12 +277,14 @@ export const groupRouter = createTRPCRouter({ await ctx.db.delete(groupPermissions).where(eq(groupPermissions.groupId, input.groupId)); - await ctx.db.insert(groupPermissions).values( - input.permissions.map((permission) => ({ - groupId: input.groupId, - permission, - })), - ); + if (input.permissions.length > 0) { + await ctx.db.insert(groupPermissions).values( + input.permissions.map((permission) => ({ + groupId: input.groupId, + permission, + })), + ); + } }), transferOwnership: permissionRequiredProcedure .requiresPermission("admin") diff --git a/packages/api/src/router/info.ts b/packages/api/src/router/info.ts new file mode 100644 index 000000000..cedf7a435 --- /dev/null +++ b/packages/api/src/router/info.ts @@ -0,0 +1,16 @@ +import z from "zod"; + +import packageJson from "../../../../package.json"; +import { createTRPCRouter, protectedProcedure } from "../trpc"; + +export const infoRouter = createTRPCRouter({ + getInfo: protectedProcedure + .input(z.void()) + .output(z.object({ version: z.string() })) + .meta({ openapi: { method: "GET", path: "/api/info", tags: ["info"] } }) + .query(() => { + return { + version: packageJson.version, + }; + }), +}); diff --git a/packages/auth/package.json b/packages/auth/package.json index 1389eeab9..99c1baa95 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -35,7 +35,7 @@ "bcrypt": "^6.0.0", "cookies": "^0.9.1", "ldapts": "8.0.9", - "next": "15.4.5", + "next": "15.4.6", "next-auth": "5.0.0-beta.29", "react": "19.1.1", "react-dom": "19.1.1", diff --git a/packages/common/package.json b/packages/common/package.json index d5effd335..6a5602092 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -31,7 +31,7 @@ "@homarr/log": "workspace:^0.1.0", "@paralleldrive/cuid2": "^2.2.2", "dayjs": "^1.11.13", - "next": "15.4.5", + "next": "15.4.6", "react": "19.1.1", "react-dom": "19.1.1", "undici": "7.13.0", diff --git a/packages/cron-job-api/package.json b/packages/cron-job-api/package.json index f7b3f79ed..6d127b139 100644 --- a/packages/cron-job-api/package.json +++ b/packages/cron-job-api/package.json @@ -29,10 +29,10 @@ "@homarr/core": "workspace:^0.1.0", "@homarr/cron-jobs": "workspace:^0.1.0", "@homarr/log": "workspace:^0.1.0", - "@tanstack/react-query": "^5.84.1", - "@trpc/client": "^11.4.3", - "@trpc/server": "^11.4.3", - "@trpc/tanstack-react-query": "^11.4.3", + "@tanstack/react-query": "^5.84.2", + "@trpc/client": "^11.4.4", + "@trpc/server": "^11.4.4", + "@trpc/tanstack-react-query": "^11.4.4", "node-cron": "^4.2.1", "react": "19.1.1", "zod": "^3.25.76" diff --git a/packages/cron-jobs/src/jobs/integrations/health-monitoring.ts b/packages/cron-jobs/src/jobs/integrations/health-monitoring.ts index c615aec07..e52db0d4e 100644 --- a/packages/cron-jobs/src/jobs/integrations/health-monitoring.ts +++ b/packages/cron-jobs/src/jobs/integrations/health-monitoring.ts @@ -15,9 +15,10 @@ export const healthMonitoringJob = createCronJob("healthMonitoring", EVERY_5_SEC return clusterInfoRequestHandler.handler({ ...integration, kind }, itemOptions); }, { - widgetKinds: ["healthMonitoring"], + widgetKinds: ["healthMonitoring", "systemResources"], getInput: { healthMonitoring: () => ({}), + systemResources: () => ({}), }, }, ), diff --git a/packages/db/migrations/custom/0001_opnsense_credentials.ts b/packages/db/migrations/custom/0001_opnsense_credentials.ts new file mode 100644 index 000000000..9e62b92d3 --- /dev/null +++ b/packages/db/migrations/custom/0001_opnsense_credentials.ts @@ -0,0 +1,52 @@ +import type { Database } from "../.."; +import { and, eq } from "../.."; +import { integrationSecrets } from "../../schema"; + +/** + * Previously the credentials for OPNsense were stored as username and password. + * However it should have been the api key and secret. + * For more information see: + * https://docs.opnsense.org/development/how-tos/api.html#creating-keys + */ +export async function migrateOpnsenseCredentialsAsync(db: Database) { + const existingIntegrations = await db.query.integrations.findMany({ + where: (table, { eq }) => eq(table.kind, "opnsense"), + with: { + secrets: true, + }, + }); + + await Promise.all( + existingIntegrations.map(async (integration) => { + const username = integration.secrets.find((secret) => secret.kind === "username"); + if (!username) return; + await db + .update(integrationSecrets) + .set({ + kind: "opnsenseApiKey", + }) + .where( + and(eq(integrationSecrets.integrationId, username.integrationId), eq(integrationSecrets.kind, "username")), + ); + }), + ); + + await Promise.all( + existingIntegrations.map(async (integration) => { + const password = integration.secrets.find((secret) => secret.kind === "password"); + if (!password) return; + await db + .update(integrationSecrets) + .set({ + kind: "opnsenseApiSecret", + }) + .where( + and(eq(integrationSecrets.integrationId, password.integrationId), eq(integrationSecrets.kind, "password")), + ); + }), + ); + + if (existingIntegrations.length > 0) { + console.log(`Migrated OPNsense credentials count="${existingIntegrations.length}"`); + } +} diff --git a/packages/db/migrations/custom/index.ts b/packages/db/migrations/custom/index.ts index e60a52c5e..03a48cbbd 100644 --- a/packages/db/migrations/custom/index.ts +++ b/packages/db/migrations/custom/index.ts @@ -1,6 +1,8 @@ import type { Database } from "../.."; import { migrateReleaseWidgetProviderToOptionsAsync } from "./0000_release_widget_provider_to_options"; +import { migrateOpnsenseCredentialsAsync } from "./0001_opnsense_credentials"; export const applyCustomMigrationsAsync = async (db: Database) => { await migrateReleaseWidgetProviderToOptionsAsync(db); + await migrateOpnsenseCredentialsAsync(db); }; diff --git a/packages/db/package.json b/packages/db/package.json index 724832570..f057fcdc3 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -44,9 +44,9 @@ "@homarr/definitions": "workspace:^0.1.0", "@homarr/log": "workspace:^0.1.0", "@homarr/server-settings": "workspace:^0.1.0", - "@mantine/core": "^8.2.2", + "@mantine/core": "^8.2.4", "@paralleldrive/cuid2": "^2.2.2", - "@testcontainers/mysql": "^11.4.0", + "@testcontainers/mysql": "^11.5.1", "better-sqlite3": "^12.2.0", "dotenv": "^17.2.1", "drizzle-kit": "^0.31.4", diff --git a/packages/definitions/src/docs/homarr-docs-sitemap.ts b/packages/definitions/src/docs/homarr-docs-sitemap.ts index 378a96c83..7a544dcaf 100644 --- a/packages/definitions/src/docs/homarr-docs-sitemap.ts +++ b/packages/definitions/src/docs/homarr-docs-sitemap.ts @@ -9,8 +9,8 @@ export type HomarrDocumentationPath = | "/blog/2023/12/22/updated-documentation" | "/blog/2024/09/23/version-1.0" | "/blog/2024/12/17/open-beta-1.0" - | "/blog/2024/12/31/migrate-secret-enryption-key" | "/blog/2025/01/19/migration-guide-1.0" + | "/blog/2025/08/02/using-argus" | "/blog/archive" | "/blog/authors" | "/blog/authors/ajnart" @@ -148,12 +148,14 @@ export type HomarrDocumentationPath = | "/docs/getting-started/installation/synology" | "/docs/getting-started/installation/unraid" | "/docs/integrations/adguard-home" + | "/docs/integrations/aria2" | "/docs/integrations/codeberg" | "/docs/integrations/dash-dot" | "/docs/integrations/deluge" | "/docs/integrations/docker-hub" | "/docs/integrations/docker" | "/docs/integrations/emby" + | "/docs/integrations/github-containerregistry" | "/docs/integrations/github" | "/docs/integrations/gitlab" | "/docs/integrations/home-assistant" @@ -161,17 +163,20 @@ export type HomarrDocumentationPath = | "/docs/integrations/jellyseerr" | "/docs/integrations/kubernetes" | "/docs/integrations/lidarr" + | "/docs/integrations/linux-server-io" | "/docs/integrations/nextcloud" | "/docs/integrations/npm" | "/docs/integrations/ntfy" | "/docs/integrations/nzbget" | "/docs/integrations/open-media-vault" + | "/docs/integrations/opnsense" | "/docs/integrations/overseerr" | "/docs/integrations/pi-hole" | "/docs/integrations/plex" | "/docs/integrations/prowlarr" | "/docs/integrations/proxmox" | "/docs/integrations/q-bittorent" + | "/docs/integrations/quay" | "/docs/integrations/radarr" | "/docs/integrations/readarr" | "/docs/integrations/sabnzbd" @@ -197,6 +202,7 @@ export type HomarrDocumentationPath = | "/docs/widgets/dns-hole-summary" | "/docs/widgets/docker-containers" | "/docs/widgets/downloads" + | "/docs/widgets/firewall" | "/docs/widgets/health-monitoring" | "/docs/widgets/iframe" | "/docs/widgets/indexer-manager" diff --git a/packages/definitions/src/integration.ts b/packages/definitions/src/integration.ts index 4bf7adada..bf01de432 100644 --- a/packages/definitions/src/integration.ts +++ b/packages/definitions/src/integration.ts @@ -1,6 +1,8 @@ import { objectKeys } from "@homarr/common"; import type { AtLeastOneOf } from "@homarr/common/types"; +import { createDocumentationLink } from "./docs"; + export const integrationSecretKindObject = { apiKey: { isPublic: false }, username: { isPublic: true }, @@ -9,6 +11,8 @@ export const integrationSecretKindObject = { realm: { isPublic: true }, personalAccessToken: { isPublic: false }, topic: { isPublic: true }, + opnsenseApiKey: { isPublic: false }, + opnsenseApiSecret: { isPublic: false }, } satisfies Record; export const integrationSecretKinds = objectKeys(integrationSecretKindObject); @@ -18,6 +22,7 @@ interface integrationDefinition { iconUrl: string; secretKinds: AtLeastOneOf; // at least one secret kind set is required category: AtLeastOneOf; + documentationUrl: string | null; defaultUrl?: string; // optional default URL for the integration } @@ -27,156 +32,182 @@ export const integrationDefs = { secretKinds: [["apiKey"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/sabnzbd.svg", category: ["downloadClient", "usenet"], + documentationUrl: createDocumentationLink("/docs/integrations/sabnzbd"), }, nzbGet: { name: "NZBGet", secretKinds: [["username", "password"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/nzbget.svg", category: ["downloadClient", "usenet"], + documentationUrl: createDocumentationLink("/docs/integrations/nzbget"), }, deluge: { name: "Deluge", secretKinds: [["password"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/deluge.svg", category: ["downloadClient", "torrent"], + documentationUrl: createDocumentationLink("/docs/integrations/deluge"), }, transmission: { name: "Transmission", secretKinds: [["username", "password"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/transmission.svg", category: ["downloadClient", "torrent"], + documentationUrl: createDocumentationLink("/docs/integrations/transmission"), }, qBittorrent: { name: "qBittorrent", secretKinds: [["username", "password"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/qbittorrent.svg", category: ["downloadClient", "torrent"], + documentationUrl: createDocumentationLink("/docs/integrations/q-bittorent"), }, aria2: { name: "Aria2", secretKinds: [[], ["apiKey"]], iconUrl: "https://cdn.jsdelivr.net/gh/PapirusDevelopmentTeam/papirus_icons@latest/src/system_downloads_3.svg", category: ["downloadClient", "torrent", "miscellaneous"], + documentationUrl: createDocumentationLink("/docs/integrations/aria2"), }, sonarr: { name: "Sonarr", secretKinds: [["apiKey"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/sonarr.svg", category: ["calendar"], + documentationUrl: createDocumentationLink("/docs/integrations/sonarr"), }, radarr: { name: "Radarr", secretKinds: [["apiKey"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/radarr.svg", category: ["calendar"], + documentationUrl: createDocumentationLink("/docs/integrations/radarr"), }, lidarr: { name: "Lidarr", secretKinds: [["apiKey"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/lidarr.svg", category: ["calendar"], + documentationUrl: createDocumentationLink("/docs/integrations/lidarr"), }, readarr: { name: "Readarr", secretKinds: [["apiKey"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/readarr.svg", category: ["calendar"], + documentationUrl: createDocumentationLink("/docs/integrations/readarr"), }, prowlarr: { name: "Prowlarr", secretKinds: [["apiKey"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/prowlarr.svg", category: ["indexerManager"], + documentationUrl: createDocumentationLink("/docs/integrations/prowlarr"), }, jellyfin: { name: "Jellyfin", secretKinds: [["username", "password"], ["apiKey"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/jellyfin.svg", category: ["mediaService", "mediaRelease"], + documentationUrl: createDocumentationLink("/docs/integrations/jellyfin"), }, emby: { name: "Emby", secretKinds: [["apiKey"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/emby.svg", category: ["mediaService", "mediaRelease"], + documentationUrl: createDocumentationLink("/docs/integrations/emby"), }, plex: { name: "Plex", secretKinds: [["apiKey"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/plex.svg", category: ["mediaService", "mediaRelease"], + documentationUrl: createDocumentationLink("/docs/integrations/plex"), }, jellyseerr: { name: "Jellyseerr", secretKinds: [["apiKey"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/jellyseerr.svg", category: ["mediaSearch", "mediaRequest", "search"], + documentationUrl: createDocumentationLink("/docs/integrations/jellyseerr"), }, overseerr: { name: "Overseerr", secretKinds: [["apiKey"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/overseerr.svg", category: ["mediaSearch", "mediaRequest", "search"], + documentationUrl: createDocumentationLink("/docs/integrations/overseerr"), }, piHole: { name: "Pi-hole", secretKinds: [["apiKey"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/pi-hole.svg", category: ["dnsHole"], + documentationUrl: createDocumentationLink("/docs/integrations/pi-hole"), }, adGuardHome: { name: "AdGuard Home", secretKinds: [["username", "password"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/adguard-home.svg", category: ["dnsHole"], + documentationUrl: createDocumentationLink("/docs/integrations/adguard-home"), }, homeAssistant: { name: "Home Assistant", secretKinds: [["apiKey"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/home-assistant.svg", category: ["smartHomeServer"], + documentationUrl: createDocumentationLink("/docs/integrations/home-assistant"), }, openmediavault: { name: "OpenMediaVault", secretKinds: [["username", "password"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/openmediavault.svg", category: ["healthMonitoring"], + documentationUrl: createDocumentationLink("/docs/integrations/open-media-vault"), }, dashDot: { name: "Dash.", secretKinds: [[]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/png/dashdot.png", category: ["healthMonitoring"], + documentationUrl: createDocumentationLink("/docs/integrations/dash-dot"), }, tdarr: { name: "Tdarr", secretKinds: [[], ["apiKey"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/png/tdarr.png", category: ["mediaTranscoding"], + documentationUrl: createDocumentationLink("/docs/integrations/tdarr"), }, proxmox: { name: "Proxmox", secretKinds: [["username", "tokenId", "apiKey", "realm"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/proxmox.svg", category: ["healthMonitoring"], + documentationUrl: createDocumentationLink("/docs/integrations/proxmox"), }, nextcloud: { name: "Nextcloud", secretKinds: [["username", "password"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/nextcloud.svg", category: ["calendar"], + documentationUrl: createDocumentationLink("/docs/integrations/nextcloud"), }, unifiController: { name: "Unifi Controller", secretKinds: [["username", "password"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/png/unifi.png", category: ["networkController"], + documentationUrl: createDocumentationLink("/docs/integrations/unifi-controller"), }, opnsense: { name: "OPNsense", - secretKinds: [["username", "password"]], + secretKinds: [["opnsenseApiKey", "opnsenseApiSecret"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/opnsense.svg", category: ["firewall"], + documentationUrl: createDocumentationLink("/docs/integrations/opnsense"), }, github: { name: "Github", @@ -184,6 +215,7 @@ export const integrationDefs = { iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/github.svg", category: ["releasesProvider"], defaultUrl: "https://api.github.com", + documentationUrl: createDocumentationLink("/docs/integrations/github"), }, dockerHub: { name: "Docker Hub", @@ -191,6 +223,7 @@ export const integrationDefs = { iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/docker.svg", category: ["releasesProvider"], defaultUrl: "https://hub.docker.com", + documentationUrl: createDocumentationLink("/docs/integrations/docker-hub"), }, gitlab: { name: "Gitlab", @@ -198,6 +231,7 @@ export const integrationDefs = { iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/gitlab.svg", category: ["releasesProvider"], defaultUrl: "https://gitlab.com", + documentationUrl: createDocumentationLink("/docs/integrations/gitlab"), }, npm: { name: "NPM", @@ -205,6 +239,7 @@ export const integrationDefs = { iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/npm.svg", category: ["releasesProvider"], defaultUrl: "https://registry.npmjs.org", + documentationUrl: createDocumentationLink("/docs/integrations/npm"), }, codeberg: { name: "Codeberg", @@ -212,6 +247,7 @@ export const integrationDefs = { iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/codeberg.svg", category: ["releasesProvider"], defaultUrl: "https://codeberg.org", + documentationUrl: createDocumentationLink("/docs/integrations/codeberg"), }, linuxServerIO: { name: "LinuxServer.io", @@ -219,6 +255,7 @@ export const integrationDefs = { iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/linuxserver-io.svg", category: ["releasesProvider"], defaultUrl: "https://api.linuxserver.io", + documentationUrl: createDocumentationLink("/docs/integrations/linux-server-io"), }, gitHubContainerRegistry: { name: "GitHub Container Registry", @@ -226,6 +263,7 @@ export const integrationDefs = { iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/github.svg", category: ["releasesProvider"], defaultUrl: "https://api.github.com", + documentationUrl: createDocumentationLink("/docs/integrations/github"), }, quay: { name: "Quay", @@ -233,12 +271,14 @@ export const integrationDefs = { iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/png/quay.png", category: ["releasesProvider"], defaultUrl: "https://quay.io", + documentationUrl: createDocumentationLink("/docs/integrations/quay"), }, ntfy: { name: "ntfy", secretKinds: [["topic"], ["topic", "apiKey"]], iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/ntfy.svg", category: ["notifications"], + documentationUrl: createDocumentationLink("/docs/integrations/ntfy"), }, // 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: { @@ -259,6 +299,7 @@ export const integrationDefs = { "notifications", "smartHomeServer", ], + documentationUrl: null, }, } as const satisfies Record; diff --git a/packages/definitions/src/widget.ts b/packages/definitions/src/widget.ts index 8bafbab57..ec0d2ff66 100644 --- a/packages/definitions/src/widget.ts +++ b/packages/definitions/src/widget.ts @@ -28,5 +28,6 @@ export const widgetKinds = [ "dockerContainers", "firewall", "notifications", + "systemResources", ] as const; export type WidgetKind = (typeof widgetKinds)[number]; diff --git a/packages/form/package.json b/packages/form/package.json index 10ace02a1..41d5019b1 100644 --- a/packages/form/package.json +++ b/packages/form/package.json @@ -26,7 +26,7 @@ "@homarr/common": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", - "@mantine/form": "^8.2.2", + "@mantine/form": "^8.2.4", "zod": "^3.25.76" }, "devDependencies": { diff --git a/packages/forms-collection/package.json b/packages/forms-collection/package.json index 42798f2ef..f7bb63a41 100644 --- a/packages/forms-collection/package.json +++ b/packages/forms-collection/package.json @@ -29,7 +29,7 @@ "@homarr/notifications": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", - "@mantine/core": "^8.2.2", + "@mantine/core": "^8.2.4", "react": "19.1.1", "zod": "^3.25.76" }, diff --git a/packages/integrations/package.json b/packages/integrations/package.json index 6d639944f..ddfd9d869 100644 --- a/packages/integrations/package.json +++ b/packages/integrations/package.json @@ -28,7 +28,7 @@ "@ctrl/deluge": "^7.1.1", "@ctrl/qbittorrent": "^9.6.0", "@ctrl/transmission": "^7.2.0", - "@gitbeaker/rest": "^43.3.0", + "@gitbeaker/rest": "^43.4.0", "@homarr/certificates": "workspace:^0.1.0", "@homarr/common": "workspace:^0.1.0", "@homarr/db": "workspace:^0.1.0", diff --git a/packages/integrations/src/base/errors/decorator.ts b/packages/integrations/src/base/errors/decorator.ts index f9f3a7663..c5a200162 100644 --- a/packages/integrations/src/base/errors/decorator.ts +++ b/packages/integrations/src/base/errors/decorator.ts @@ -3,8 +3,10 @@ import { logger } from "@homarr/log"; import type { Integration } from "../integration"; import type { IIntegrationErrorHandler } from "./handler"; +import { integrationFetchHttpErrorHandler } from "./http"; import { IntegrationError } from "./integration-error"; import { IntegrationUnknownError } from "./integration-unknown-error"; +import { integrationJsonParseErrorHandler, integrationZodParseErrorHandler } from "./parse"; const localLogger = logger.child({ module: "HandleIntegrationErrors", @@ -13,7 +15,14 @@ const localLogger = logger.child({ // eslint-disable-next-line @typescript-eslint/no-empty-object-type, @typescript-eslint/no-explicit-any type AbstractConstructor = abstract new (...args: any[]) => T; +const defaultErrorHandlers: IIntegrationErrorHandler[] = [ + integrationZodParseErrorHandler, + integrationJsonParseErrorHandler, + integrationFetchHttpErrorHandler, +]; + export const HandleIntegrationErrors = (errorHandlers: IIntegrationErrorHandler[]) => { + const combinedErrorHandlers = [...defaultErrorHandlers, ...errorHandlers]; return >(IntegrationBaseClass: T): T => { abstract class ErrorHandledIntegration extends IntegrationBaseClass { // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -42,7 +51,7 @@ export const HandleIntegrationErrors = (errorHandlers: IIntegrationErrorHandler[ throw error; } - for (const handler of errorHandlers) { + for (const handler of combinedErrorHandlers) { const handledError = handler.handleError(error, this.publicIntegration); if (!handledError) continue; diff --git a/packages/integrations/src/base/integration.ts b/packages/integrations/src/base/integration.ts index 5496e3e38..9ff86b662 100644 --- a/packages/integrations/src/base/integration.ts +++ b/packages/integrations/src/base/integration.ts @@ -8,8 +8,6 @@ import { removeTrailingSlash } from "@homarr/common"; import type { IntegrationSecretKind } from "@homarr/definitions"; import { HandleIntegrationErrors } from "./errors/decorator"; -import { integrationFetchHttpErrorHandler } from "./errors/http"; -import { integrationJsonParseErrorHandler, integrationZodParseErrorHandler } from "./errors/parse"; import { TestConnectionError } from "./test-connection/test-connection-error"; import type { TestingResult } from "./test-connection/test-connection-service"; import { TestConnectionService } from "./test-connection/test-connection-service"; @@ -32,11 +30,7 @@ export interface IntegrationTestingInput { }; } -@HandleIntegrationErrors([ - integrationZodParseErrorHandler, - integrationJsonParseErrorHandler, - integrationFetchHttpErrorHandler, -]) +@HandleIntegrationErrors([]) export abstract class Integration { constructor(protected integration: IntegrationInput) {} diff --git a/packages/integrations/src/dashdot/dashdot-integration.ts b/packages/integrations/src/dashdot/dashdot-integration.ts index c5e22fadc..e4898bf02 100644 --- a/packages/integrations/src/dashdot/dashdot-integration.ts +++ b/packages/integrations/src/dashdot/dashdot-integration.ts @@ -7,7 +7,7 @@ import { z } from "zod"; import { fetchWithTrustedCertificatesAsync } from "@homarr/certificates/server"; -import { createChannelEventHistory } from "../../../redis/src/lib/channel"; +import { createChannelEventHistoryOld } from "../../../redis/src/lib/channel"; import type { IntegrationTestingInput } from "../base/integration"; import { Integration } from "../base/integration"; import { TestConnectionError } from "../base/test-connection/test-connection-error"; @@ -32,14 +32,16 @@ export class DashDotIntegration extends Integration implements ISystemHealthMoni const cpuLoad = await this.getCurrentCpuLoadAsync(); const memoryLoad = await this.getCurrentMemoryLoadAsync(); const storageLoad = await this.getCurrentStorageLoadAsync(); + const networkLoad = await this.getCurrentNetworkLoadAsync(); const channel = this.getChannel(); const history = await channel.getSliceUntilTimeAsync(dayjs().subtract(15, "minutes").toDate()); return { cpuUtilization: cpuLoad.sumLoad, - memUsed: `${memoryLoad.loadInBytes}`, - memAvailable: `${info.maxAvailableMemoryBytes - memoryLoad.loadInBytes}`, + memUsedInBytes: memoryLoad.loadInBytes, + memAvailableInBytes: info.maxAvailableMemoryBytes - memoryLoad.loadInBytes, + network: networkLoad, fileSystem: info.storage .filter((_, index) => storageLoad[index] !== -1) // filter out undermoutned drives, they display as -1 in the load API .map((storage, index) => ({ @@ -113,8 +115,13 @@ export class DashDotIntegration extends Integration implements ISystemHealthMoni }; } + private async getCurrentNetworkLoadAsync() { + const response = await fetchWithTrustedCertificatesAsync(this.url("/load/network")); + return await networkLoadApi.parseAsync(await response.json()); + } + private getChannel() { - return createChannelEventHistory>( + return createChannelEventHistoryOld>( `integration:${this.integration.id}:history:cpu`, 100, ); @@ -130,6 +137,11 @@ const memoryLoadApi = z.object({ load: z.number().min(0), }); +const networkLoadApi = z.object({ + up: z.number().min(0), + down: z.number().min(0), +}); + const internalServerInfoApi = z.object({ os: z.object({ distro: z.string(), 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 5935ba9e4..b427baab9 100644 --- a/packages/integrations/src/interfaces/health-monitoring/health-monitoring-types.ts +++ b/packages/integrations/src/interfaces/health-monitoring/health-monitoring-types.ts @@ -4,9 +4,13 @@ export interface SystemHealthMonitoring { version: string; cpuModelName: string; cpuUtilization: number; - memUsed: string; - memAvailable: string; + memUsedInBytes: number; + memAvailableInBytes: number; uptime: number; + network: { + up: number; + down: number; + } | null; loadAverage: { "1min": number; "5min": number; diff --git a/packages/integrations/src/mock/data/system-health-monitoring.ts b/packages/integrations/src/mock/data/system-health-monitoring.ts index 6ff1bb23c..ebc2ca010 100644 --- a/packages/integrations/src/mock/data/system-health-monitoring.ts +++ b/packages/integrations/src/mock/data/system-health-monitoring.ts @@ -7,9 +7,13 @@ export class SystemHealthMonitoringMockService implements ISystemHealthMonitorin version: "1.0.0", cpuModelName: "Mock CPU", cpuUtilization: Math.random(), - memUsed: (4 * 1024 * 1024 * 1024).toString(), // 4 GB in bytes - memAvailable: (8 * 1024 * 1024 * 1024).toString(), // 8 GB in bytes + memUsedInBytes: 4 * 1024 * 1024 * 1024, // 4 GB in bytes + memAvailableInBytes: 8 * 1024 * 1024 * 1024, // 8 GB in bytes availablePkgUpdates: 0, + network: { + up: 1024 * 16, + down: 1024 * 16 * 6, + }, rebootRequired: false, cpuTemp: Math.floor(Math.random() * 100), // Random temperature between 0 and 99 uptime: Math.floor(Math.random() * 1000000), // Random uptime in seconds diff --git a/packages/integrations/src/openmediavault/openmediavault-integration.ts b/packages/integrations/src/openmediavault/openmediavault-integration.ts index c3b1c6ada..0e5ad1171 100644 --- a/packages/integrations/src/openmediavault/openmediavault-integration.ts +++ b/packages/integrations/src/openmediavault/openmediavault-integration.ts @@ -69,9 +69,11 @@ export class OpenMediaVaultIntegration extends Integration implements ISystemHea version: systemResult.data.response.version, cpuModelName: systemResult.data.response.cpuModelName ?? "Unknown CPU", cpuUtilization: systemResult.data.response.cpuUtilization, - memUsed: systemResult.data.response.memUsed, - memAvailable: systemResult.data.response.memAvailable, + memUsedInBytes: Number(systemResult.data.response.memUsed), + memAvailableInBytes: Number(systemResult.data.response.memAvailable), uptime: systemResult.data.response.uptime, + /* real-time traffic monitoring is not available over the RPC API from OMV */ + network: null, loadAverage: { "1min": systemResult.data.response.loadAverage["1min"], "5min": systemResult.data.response.loadAverage["5min"], diff --git a/packages/integrations/src/opnsense/opnsense-integration.ts b/packages/integrations/src/opnsense/opnsense-integration.ts index d1085141e..2f11dfcc4 100644 --- a/packages/integrations/src/opnsense/opnsense-integration.ts +++ b/packages/integrations/src/opnsense/opnsense-integration.ts @@ -1,8 +1,7 @@ import { fetchWithTrustedCertificatesAsync } from "@homarr/certificates/server"; import { ParseError, ResponseError } from "@homarr/common/server"; -import { createChannelEventHistory } from "@homarr/redis"; -import { HandleIntegrationErrors } from "../base/errors/decorator"; +import { createChannelEventHistoryOld } from "../../../redis/src/lib/channel"; import type { IntegrationTestingInput } from "../base/integration"; import { Integration } from "../base/integration"; import { TestConnectionError } from "../base/test-connection/test-connection-error"; @@ -22,7 +21,6 @@ import { opnsenseSystemSummarySchema, } from "./opnsense-types"; -@HandleIntegrationErrors([]) export class OPNsenseIntegration extends Integration implements FirewallSummaryIntegration { protected async testingAsync(input: IntegrationTestingInput): Promise { const response = await input.fetchAsync(this.url("/api/diagnostics/system/system_information"), { @@ -39,9 +37,9 @@ export class OPNsenseIntegration extends Integration implements FirewallSummaryI } private getAuthHeaders() { - const username = super.getSecretValue("username"); - const password = super.getSecretValue("password"); - return `Basic ${btoa(`${username}:${password}`)}`; + const key = super.getSecretValue("opnsenseApiKey"); + const secret = super.getSecretValue("opnsenseApiSecret"); + return `Basic ${btoa(`${key}:${secret}`)}`; } public async getFirewallVersionAsync(): Promise { @@ -64,7 +62,7 @@ export class OPNsenseIntegration extends Integration implements FirewallSummaryI } private getInterfacesChannel() { - return createChannelEventHistory(`integration:${this.integration.id}:interfaces`, 15); + return createChannelEventHistoryOld(`integration:${this.integration.id}:interfaces`, 15); } public async getFirewallInterfacesAsync(): Promise { diff --git a/packages/modals-collection/package.json b/packages/modals-collection/package.json index 29d3a1601..786c33b69 100644 --- a/packages/modals-collection/package.json +++ b/packages/modals-collection/package.json @@ -33,10 +33,10 @@ "@homarr/translation": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", - "@mantine/core": "^8.2.2", + "@mantine/core": "^8.2.4", "@tabler/icons-react": "^3.34.1", "dayjs": "^1.11.13", - "next": "15.4.5", + "next": "15.4.6", "react": "19.1.1", "react-dom": "19.1.1", "zod": "^3.25.76" diff --git a/packages/modals/package.json b/packages/modals/package.json index be12e2680..8b575bf2b 100644 --- a/packages/modals/package.json +++ b/packages/modals/package.json @@ -24,8 +24,8 @@ "dependencies": { "@homarr/translation": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0", - "@mantine/core": "^8.2.2", - "@mantine/hooks": "^8.2.2", + "@mantine/core": "^8.2.4", + "@mantine/hooks": "^8.2.4", "react": "19.1.1" }, "devDependencies": { diff --git a/packages/notifications/package.json b/packages/notifications/package.json index 6073830ce..5ed6ed90b 100644 --- a/packages/notifications/package.json +++ b/packages/notifications/package.json @@ -24,7 +24,7 @@ "prettier": "@homarr/prettier-config", "dependencies": { "@homarr/ui": "workspace:^0.1.0", - "@mantine/notifications": "^8.2.2", + "@mantine/notifications": "^8.2.4", "@tabler/icons-react": "^3.34.1" }, "devDependencies": { diff --git a/packages/old-import/package.json b/packages/old-import/package.json index d49375618..b10785881 100644 --- a/packages/old-import/package.json +++ b/packages/old-import/package.json @@ -37,10 +37,10 @@ "@homarr/translation": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", - "@mantine/core": "^8.2.2", - "@mantine/hooks": "^8.2.2", + "@mantine/core": "^8.2.4", + "@mantine/hooks": "^8.2.4", "adm-zip": "0.5.16", - "next": "15.4.5", + "next": "15.4.6", "react": "19.1.1", "react-dom": "19.1.1", "superjson": "2.2.2", diff --git a/packages/redis/src/index.ts b/packages/redis/src/index.ts index 05d4389f9..bd44350c2 100644 --- a/packages/redis/src/index.ts +++ b/packages/redis/src/index.ts @@ -15,6 +15,8 @@ export { createGetSetChannel, } from "./lib/channel"; +export { createIntegrationHistoryChannel } from "./lib/channels/history-channel"; + export const exampleChannel = createSubPubChannel<{ message: string }>("example"); export const pingChannel = createSubPubChannel< { url: string; statusCode: number; durationMs: number } | { url: string; error: string } diff --git a/packages/redis/src/lib/channel.ts b/packages/redis/src/lib/channel.ts index 5a184e55a..074f66414 100644 --- a/packages/redis/src/lib/channel.ts +++ b/packages/redis/src/lib/channel.ts @@ -226,7 +226,48 @@ export const createItemChannel = (itemId: string) => { return createChannelWithLatestAndEvents(`item:${itemId}`); }; -export const createChannelEventHistory = (channelName: string, maxElements = 15) => { +export const createChannelEventHistory = (channelName: string, maxElements = 32) => { + return { + subscribe: (callback: (data: TData) => void) => { + return ChannelSubscriptionTracker.subscribe(channelName, (message) => { + callback(superjson.parse(message)); + }); + }, + pushAsync: async (data: TData, options = { publish: false }) => { + if (options.publish) await publisher.publish(channelName, superjson.stringify(data)); + await getSetClient.lpush(channelName, superjson.stringify({ data, timestamp: new Date() })); + await getSetClient.ltrim(channelName, 0, maxElements); + }, + clearAsync: async () => { + await getSetClient.del(channelName); + }, + /** + * Returns a slice of the available data in the channel. + * If any of the indexes are out of range (or -range), returned data will be clamped. + * @param startIndex Start index of the slice, negative values are counted from the end, defaults at beginning of range. + * @param endIndex End index of the slice, negative values are counted from the end, defaults at end of range. + */ + getSliceAsync: async (startIndex = 0, endIndex = -1) => { + const range = await getSetClient.lrange(channelName, startIndex, endIndex); + return range.map((item) => superjson.parse<{ data: TData; timestamp: Date }>(item)); + }, + getSliceUntilTimeAsync: async (time: Date) => { + const itemsInCollection = await getSetClient.lrange(channelName, 0, -1); + return itemsInCollection + .map((item) => superjson.parse<{ data: TData; timestamp: Date }>(item)) + .filter((item) => item.timestamp < time); + }, + getLengthAsync: async () => { + return await getSetClient.llen(channelName); + }, + name: channelName, + }; +}; + +/** + * @deprecated This function should no longer be used, see history-channel functions. + */ +export const createChannelEventHistoryOld = (channelName: string, maxElements = 15) => { const popElementsOverMaxAsync = async () => { const length = await getSetClient.llen(channelName); if (length <= maxElements) { diff --git a/packages/redis/src/lib/channels/history-channel.ts b/packages/redis/src/lib/channels/history-channel.ts new file mode 100644 index 000000000..541830464 --- /dev/null +++ b/packages/redis/src/lib/channels/history-channel.ts @@ -0,0 +1,6 @@ +import { createChannelEventHistory } from "../channel"; + +export const createIntegrationHistoryChannel = (integrationId: string, queryKey: string, maxElements = 32) => { + const channelName = `integration:${integrationId}:history:${queryKey}`; + return createChannelEventHistory(channelName, maxElements); +}; diff --git a/packages/settings/package.json b/packages/settings/package.json index c382e1681..51bd610c4 100644 --- a/packages/settings/package.json +++ b/packages/settings/package.json @@ -26,8 +26,8 @@ "@homarr/api": "workspace:^0.1.0", "@homarr/db": "workspace:^0.1.0", "@homarr/server-settings": "workspace:^0.1.0", - "@mantine/dates": "^8.2.2", - "next": "15.4.5", + "@mantine/dates": "^8.2.4", + "next": "15.4.6", "react": "19.1.1", "react-dom": "19.1.1" }, diff --git a/packages/spotlight/package.json b/packages/spotlight/package.json index dd8df1e08..c01fae78d 100644 --- a/packages/spotlight/package.json +++ b/packages/spotlight/package.json @@ -33,12 +33,12 @@ "@homarr/settings": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0", - "@mantine/core": "^8.2.2", - "@mantine/hooks": "^8.2.2", - "@mantine/spotlight": "^8.2.2", + "@mantine/core": "^8.2.4", + "@mantine/hooks": "^8.2.4", + "@mantine/spotlight": "^8.2.4", "@tabler/icons-react": "^3.34.1", - "jotai": "^2.12.5", - "next": "15.4.5", + "jotai": "^2.13.0", + "next": "15.4.6", "react": "19.1.1", "react-dom": "19.1.1", "use-deep-compare-effect": "^1.8.1" diff --git a/packages/translation/package.json b/packages/translation/package.json index 78c437b26..b048005ff 100644 --- a/packages/translation/package.json +++ b/packages/translation/package.json @@ -32,7 +32,7 @@ "dayjs": "^1.11.13", "deepmerge": "4.3.1", "mantine-react-table": "2.0.0-beta.9", - "next": "15.4.5", + "next": "15.4.6", "next-intl": "4.3.4", "react": "19.1.1", "react-dom": "19.1.1" diff --git a/packages/translation/src/lang/ca.json b/packages/translation/src/lang/ca.json index a45144425..4e9df1e5d 100644 --- a/packages/translation/src/lang/ca.json +++ b/packages/translation/src/lang/ca.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/cn.json b/packages/translation/src/lang/cn.json index dc1679d21..76b886246 100644 --- a/packages/translation/src/lang/cn.json +++ b/packages/translation/src/lang/cn.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "展开详情" }, + "showOnlyIcon": { + "label": "仅显示图标" + }, "topReleases": { "label": "热门发布", "description": "要显示的最新版本的最大数量。零表示没有限制。" @@ -2273,7 +2276,9 @@ "listFoundImages": "找到的映像列表", "listAlreadyImportedImages": "已导入的映像列表", "allImagesAlreadyImported": "所有映像已导入", - "onlyAdminCanImport": "只有管理员才能从 docker 导入" + "onlyAdminCanImport": "只有管理员才能从 docker 导入", + "selectAll": "全选", + "deselectAll": "反选" }, "provider": { "label": "提供者" @@ -2335,6 +2340,7 @@ "starsCount": "星", "forksCount": "复刻", "issuesCount": "打开问题", + "markViewed": "标记已读", "openProjectPage": "打开项目页面", "openReleasePage": "打开发布页面", "releaseDescription": "发布说明", @@ -2407,11 +2413,52 @@ "internalServerError": "获取网络控制器概述失败" } }, + "firewall": { + "name": "防火墙监测", + "description": "显示防火墙摘要", + "tab": { + "system": "系统", + "interfaces": "接口" + }, + "error": { + "internalServerError": "无法从防火墙获取数据" + }, + "option": { + "interfaces": "要显示的网络接口" + }, + "widget": { + "fwname": "名称", + "version": "版本", + "versiontitle": "版本", + "cputitle": "CPU 利用率", + "memorytitle": "内存占用率", + "cpu": "CPU", + "memory": "内存", + "interfaces": { + "name": "名称", + "trans": "已传输", + "recv": "已接收", + "title": "网络接口" + } + } + }, "notifications": { "name": "通知", "description": "在集成中显示通知历史", "noItems": "没有可显示的通知。", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "Docker 容器" + }, + "firewallCpu": { + "label": "防火墙 CPU" + }, + "firewallMemory": { + "label": "防火墙内存" + }, + "firewallVersion": { + "label": "防火墙版本" + }, + "firewallInterfaces": { + "label": "防火墙接口" } }, "interval": { diff --git a/packages/translation/src/lang/cs.json b/packages/translation/src/lang/cs.json index b718364a2..a43023884 100644 --- a/packages/translation/src/lang/cs.json +++ b/packages/translation/src/lang/cs.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/da.json b/packages/translation/src/lang/da.json index a83c9f157..fcdc66c4e 100644 --- a/packages/translation/src/lang/da.json +++ b/packages/translation/src/lang/da.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "Vis detaljer" }, + "showOnlyIcon": { + "label": "Vis kun ikon" + }, "topReleases": { "label": "Top Udgivelser", "description": "Det maksimale antal seneste udgivelser at vise. Nul betyder ingen grænse." @@ -2273,7 +2276,9 @@ "listFoundImages": "Liste over fundne billeder", "listAlreadyImportedImages": "Liste over allerede importerede billeder", "allImagesAlreadyImported": "Alle billeder allerede importeret", - "onlyAdminCanImport": "Kun administratorer kan importere fra docker" + "onlyAdminCanImport": "Kun administratorer kan importere fra docker", + "selectAll": "Vælg alle", + "deselectAll": "Fravælg alle" }, "provider": { "label": "Udbyder" @@ -2335,6 +2340,7 @@ "starsCount": "Stjerner", "forksCount": "Forks", "issuesCount": "Åbne Problemer", + "markViewed": "Marker som vist", "openProjectPage": "Åbn Projektside", "openReleasePage": "Åbn Udgivelsesside", "releaseDescription": "Udgivelse Beskrivelse", @@ -2407,11 +2413,52 @@ "internalServerError": "Kunne ikke hente Netværkskontroloversigt" } }, + "firewall": { + "name": "Firewall overvågning", + "description": "Viser en oversigt over firewalls", + "tab": { + "system": "System", + "interfaces": "Grænseflader" + }, + "error": { + "internalServerError": "Kan ikke hente data fra firewall" + }, + "option": { + "interfaces": "Netværksgrænseflader der vises" + }, + "widget": { + "fwname": "Navn", + "version": "Version", + "versiontitle": "Versioner", + "cputitle": "CPU-forbrug", + "memorytitle": "Hukommelsesforbrug", + "cpu": "CPU", + "memory": "Hukommelse", + "interfaces": { + "name": "navn", + "trans": "Overført", + "recv": "Modtaget", + "title": "Netværksgrænseflader" + } + } + }, "notifications": { "name": "Notifikationer", "description": "Vis notifikationshistorik fra en integration", "noItems": "Ingen notifikationer at vise.", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "Docker containers" + }, + "firewallCpu": { + "label": "Firewall CPU" + }, + "firewallMemory": { + "label": "Firewall Hukommelse" + }, + "firewallVersion": { + "label": "Firewall Version" + }, + "firewallInterfaces": { + "label": "Firewall Grænseflader" } }, "interval": { diff --git a/packages/translation/src/lang/de-CH.json b/packages/translation/src/lang/de-CH.json index 884167540..748db6f15 100644 --- a/packages/translation/src/lang/de-CH.json +++ b/packages/translation/src/lang/de-CH.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/de.json b/packages/translation/src/lang/de.json index 38e611da2..326f7d000 100644 --- a/packages/translation/src/lang/de.json +++ b/packages/translation/src/lang/de.json @@ -23,7 +23,7 @@ } }, "importSettings": { - "title": "Importeinstellungen", + "title": "Einstellungen Importieren", "description": "Importverhalten konfigurieren" }, "boardSelection": { @@ -302,7 +302,7 @@ "group": { "title": "Benutzergruppen", "name": "Benutzergruppe", - "search": "Finde eine Benutzergruppe", + "search": "Gruppe suchen", "field": { "name": "Name", "members": "Mitglieder", @@ -355,15 +355,15 @@ }, "view-all": { "label": "Alle Boards anzeigen", - "description": "Mitgliedern das Ansehen von Boards erlauben" + "description": "Mitgliedern das Ansehen von allen Boards erlauben" }, "modify-all": { "label": "Alle Boards ändern", - "description": "Erlaube Mitgliedern alle Boards zu ändern (beinhaltet keine Zugangskontrolle und Gefahrenbereich)" + "description": "Mitgliedern erlauben, alle Boards zu ändern (beinhaltet keine Zugangskontrolle und Gefahrenbereich)" }, "full-all": { "label": "Voller Board Zugriff", - "description": "Erlaube Mitgliedern alle Boards (einschließlich Zugriffskontrolle und Gefahrenbereich) anzuzeigen, zu ändern und zu löschen" + "description": "Mitgliedern erlauben, alle Boards (einschließlich Zugriffskontrolle und Gefahrenbereich) anzuzeigen, zu ändern und zu löschen" } } }, @@ -376,7 +376,7 @@ }, "use-all": { "label": "Alle Integrationen nutzen", - "description": "Erlaubt Mitgliedern Integrationen zu ihren Boards hinzuzufügen" + "description": "Mitgliedern erlauben, alle Integrationen zu ihren Boards hinzuzufügen" }, "interact-all": { "label": "Mit jeder Integration interagieren", @@ -384,7 +384,7 @@ }, "full-all": { "label": "Voller Zugriff auf Integrationen", - "description": "Erlaube Mitgliedern jede Integration zu verwalten, zu nutzen und zu interagieren" + "description": "Mitgliedern erlauben, jede Integration zu verwalten, zu nutzen und mit ihnen zu interagieren" } } }, @@ -397,7 +397,7 @@ }, "view-all": { "label": "Alle Medien anzeigen", - "description": "Erlaubt Mitgliedern alle Medien anzusehen" + "description": "Mitgliedern erlauben, alle Medien anzuzeigen" }, "full-all": { "label": "Vollständiger Medienzugriff", @@ -410,7 +410,7 @@ "item": { "view-logs": { "label": "Logs anzeigen", - "description": "Erlaubt Mitgliedern Logs anzusehen" + "description": "Mitgliedern erlauben, Logs anzuzeigen" } } }, @@ -453,7 +453,7 @@ }, "transfer": { "label": "Eigentum übertragen", - "description": "Übertrage den Eigentümer dieser Gruppe an einen anderen Benutzer.", + "description": "Den Eigentümer dieser Gruppe an einen anderen Benutzer übertragen.", "confirm": "Bist du sicher, dass du das Eigentum für die Gruppe {name} an {username} übertragen möchtest?", "notification": { "success": { @@ -687,8 +687,8 @@ "description": "Integration \"{kind}\" kann mit den Suchmaschinen verwendet werden. Wählen Sie dies, um die Suchmaschine automatisch zu konfigurieren." }, "createApp": { - "label": "Anwendung erstellen", - "description": "Erstelle eine App mit dem gleichen Namen und Symbol wie die Integration. Lassen Sie das Eingabefeld unter leer, um die App mit der Integrations URL zu erstellen." + "label": "App erstellen", + "description": "Eine App mit dem gleichen Namen und Symbol wie die Integration erstellen. Lassen Sie das Eingabefeld unter leer, um die App mit der Integrations URL zu erstellen." }, "appHref": { "placeholder": "Benutzerdefinierte App URL" @@ -705,12 +705,12 @@ "error": { "common": { "cause": { - "title": "Fall mit mehr Details" + "title": "Mehr Details zur Ursache" } }, "unknown": { "title": "Unbekannter Fehler", - "description": "Ein unbekannter Fehler ist aufgetreten, den Fall unten für mehr Details öffnen" + "description": "Ein unbekannter Fehler ist aufgetreten, öffne die Ursache unten, um mehr Details zu sehen" }, "parse": { "title": "Fehler beim Parsen", @@ -721,7 +721,7 @@ "description": "Die Anfrage wurde nicht autorisiert. Bitte überprüfen Sie, ob die Anmeldedaten korrekt sind und Sie diese mit mit den entsprechenden Berechtigungen konfiguriert haben." }, "statusCode": { - "title": "Antwort Fehler", + "title": "Antwort-Fehler", "description": "Unerwartete {statusCode} ({reason}) Antwort von erhalten. Bitte überprüfen Sie, ob die URL auf die Basis-URL der Integration verweist.", "otherDescription": "Unerwartete {statusCode} Antwort von erhalten. Bitte stellen Sie sicher, dass die URL auf die Basis-URL der Integration zeigt.", "reason": { @@ -938,8 +938,8 @@ "newLabel": "Neuer Bereich" }, "personalAccessToken": { - "label": "", - "newLabel": "" + "label": "Persönlicher Zugangs-Token", + "newLabel": "Neuer Persönliches Zugangs-Token" }, "topic": { "label": "Thema", @@ -2080,32 +2080,32 @@ "globalRatio": "Globales Verhältnis" }, "mediaReleases": { - "name": "", - "description": "", + "name": "Medien Veröffentlichungen", + "description": "Zeige neu hinzugefügte Medien oder kommende Versionen von verschiedenen Integrationen", "option": { "layout": { - "label": "", + "label": "Darstellung", "option": { "backdrop": { - "label": "" + "label": "Hintergrund" }, "poster": { - "label": "" + "label": "Poster" } } }, "showDescriptionTooltip": { - "label": "" + "label": "Beschreibungs des Tooltips anzeigen" }, "showType": { - "label": "" + "label": "Medientyp Abzeichen anzeigen" }, "showSource": { - "label": "" + "label": "Integration der Quelle anzeigen" } }, "length": { - "duration": "" + "duration": "{length}Minuten" } }, "mediaRequests-requestList": { @@ -2257,6 +2257,9 @@ "showDetails": { "label": "Details anzeigen" }, + "showOnlyIcon": { + "label": "Nur Symbole anzeigen" + }, "topReleases": { "label": "Top Releases", "description": "Die maximale Anzahl der neuesten Versionen, die angezeigt werden sollen. Null bedeutet kein Limit." @@ -2273,7 +2276,9 @@ "listFoundImages": "Liste der gefundenen Images", "listAlreadyImportedImages": "Liste der bereits importierten Images", "allImagesAlreadyImported": "Alle Images wurden bereits importiert", - "onlyAdminCanImport": "Nur Administratoren können vom Docker importieren" + "onlyAdminCanImport": "Nur Administratoren können vom Docker importieren", + "selectAll": "Alles auswählen", + "deselectAll": "Alle abwählen" }, "provider": { "label": "Anbieter" @@ -2323,8 +2328,8 @@ }, "invalid": "Ungültige Repository Definition, bitte überprüfen Sie die Werte", "noProvider": { - "label": "", - "tooltip": "" + "label": "Keine Anbieter", + "tooltip": "Der Anbieter konnte nicht festgestellt werden, bitte manuell nach dem Import der Bilder festlegen" } } }, @@ -2335,19 +2340,20 @@ "starsCount": "Sterne", "forksCount": "Ableger", "issuesCount": "Offene Tickets", + "markViewed": "Als gelesen markieren", "openProjectPage": "Projektseite öffnen", "openReleasePage": "Release Seite öffnen", "releaseDescription": "Release Beschreibung", - "projectDescription": "", + "projectDescription": "Projektbeschreibung", "created": "Erstellt", "error": { "label": "Fehler", "messages": { - "invalidIdentifier": "", + "invalidIdentifier": "Ungültige Kennung", "noMatchingVersion": "Keine passende Version gefunden", - "noReleasesFound": "", - "noProviderSeleceted": "", - "noProviderResponse": "" + "noReleasesFound": "Keine Veröffentlichungen gefunden", + "noProviderSeleceted": "Kein Anbieter ausgewählt", + "noProviderResponse": "Keine Antwort vom Anbieter" } } }, @@ -2407,11 +2413,52 @@ "internalServerError": "Fehler beim Abrufen der Netzwerk Controller Zusammenfassung" } }, + "firewall": { + "name": "Überwachung der Firewall", + "description": "Zeigt eine Zusammenfassung der Firewalls an", + "tab": { + "system": "System", + "interfaces": "Schnittstellen" + }, + "error": { + "internalServerError": "Daten von der Firewall konnten nicht abgerufen werden" + }, + "option": { + "interfaces": "Netzwerkschnittstellen anzeigen" + }, + "widget": { + "fwname": "Name", + "version": "Version", + "versiontitle": "Versionen", + "cputitle": "CPU-Nutzung", + "memorytitle": "Speichernutzung", + "cpu": "CPU", + "memory": "Speicher", + "interfaces": { + "name": "Name", + "trans": "Übertragen", + "recv": "Empfangen", + "title": "Netzwerkschnittstellen" + } + } + }, "notifications": { "name": "Benachrichtigungen", "description": "Benachrichtigungshistorie von einer Integration anzeigen", "noItems": "Keine Benachrichtigungen zum Anzeigen.", "option": {} + }, + "systemResources": { + "name": "Systemressourcen", + "description": "CPU, Arbeitsspeicher, Festplatte und andere Hardware-Nutzung Ihres Systems", + "option": {}, + "card": { + "cpu": "CPU", + "memory": "Arbeitsspeicher", + "network": "Netzwerk", + "up": "OBEN", + "down": "UNTEN" + } } }, "widgetPreview": { @@ -2599,7 +2646,7 @@ "label": "Symbolfarbe" }, "clearColor": { - "label": "" + "label": "Farbe entfernen" }, "customCss": { "label": "Benutzerdefinierte css für dieses Board", @@ -3186,21 +3233,33 @@ }, "dockerContainers": { "label": "Docker Container" + }, + "firewallCpu": { + "label": "Firewall CPU" + }, + "firewallMemory": { + "label": "Firewall Speicher" + }, + "firewallVersion": { + "label": "Firewall Version" + }, + "firewallInterfaces": { + "label": "Firewall Schnittstellen" } }, "interval": { - "seconds": "Alle(r) {interval, plural, =1 {Sekunde} other {# Sekunden}}", - "minutes": "Alle(r) {interval, plural, one {}=1 {Minute} other {# Minuten}}", - "hours": "Alle(r) {interval, plural, one {}=1 {Stunde} other {# Stunden}}", + "seconds": "Jeweils {interval, plural, =1 {Sekunde} other {# Sekunden}}", + "minutes": "Jeweils {interval, plural, =1 {Minute} other {# Minuten}}", + "hours": "Jeweils {interval, plural, =1 {Stunde} other {# Stunden}}", "midnight": "Jeden Tag um Mitternacht", "weeklyMonday": "Jede Woche am Montag" }, "settings": { - "title": "Aufgabeneinstellungen für {jobName}" + "title": "Einstellungen der Aufgabe für {jobName}" }, "field": { "interval": { - "label": "Zeitplanintervall" + "label": "Intervall des Zeitplans" } } }, @@ -3273,7 +3332,7 @@ "label": "Name" }, "state": { - "label": "Staat", + "label": "Status", "option": { "created": "Erstellt", "running": "Aktiv", @@ -3653,7 +3712,7 @@ }, "action": { "saveUser": "Benutzerberechtigung hinzufügen", - "saveGroup": "Gruppenberechtigung hinzufügen" + "saveGroup": "Gruppenberechtigung speichern" } }, "navigationStructure": { @@ -4237,10 +4296,10 @@ "log": { "level": { "option": { - "debug": "", - "info": "", - "warn": "", - "error": "" + "debug": "Debug", + "info": "Info", + "warn": "Hinweis", + "error": "Fehler" } } } diff --git a/packages/translation/src/lang/el.json b/packages/translation/src/lang/el.json index 123edbd13..cd3ac4019 100644 --- a/packages/translation/src/lang/el.json +++ b/packages/translation/src/lang/el.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/en-gb.json b/packages/translation/src/lang/en-gb.json index b938098b3..5634341af 100644 --- a/packages/translation/src/lang/en-gb.json +++ b/packages/translation/src/lang/en-gb.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/en.json b/packages/translation/src/lang/en.json index af6198cd0..03590099d 100644 --- a/packages/translation/src/lang/en.json +++ b/packages/translation/src/lang/en.json @@ -944,6 +944,14 @@ "topic": { "label": "Topic", "newLabel": "New topic" + }, + "opnsenseApiKey": { + "label": "API Key (Key)", + "newLabel": "New API Key (Key)" + }, + "opnsenseApiSecret": { + "label": "API Key (Secret)", + "newLabel": "New API Key (Secret)" } } }, @@ -2447,6 +2455,18 @@ "description": "Display notification history from an integration", "noItems": "No notifications to display.", "option": {} + }, + "systemResources": { + "name": "System resources", + "description": "CPU, Memory, Disk and other hardware usage of your system", + "option": {}, + "card": { + "cpu": "CPU", + "memory": "MEM", + "network": "NET", + "up": "UP", + "down": "DOWN" + } } }, "widgetPreview": { diff --git a/packages/translation/src/lang/es.json b/packages/translation/src/lang/es.json index e35f5e4a7..d8536c2f5 100644 --- a/packages/translation/src/lang/es.json +++ b/packages/translation/src/lang/es.json @@ -7,15 +7,15 @@ "description": "Para empezar, por favor, seleccione cómo desea configurar su instancia de Homarr.", "action": { "scratch": "Empezar de cero", - "importOldmarr": "Importar de Homarr antes de 1.0" + "importOldmarr": "Importar desde Homarr antes de la versión 1.0" } }, "import": { "title": "Importar datos", - "subtitle": "Puede importar datos de una instancia de Homarr existente.", + "subtitle": "Puedes importar datos de una instancia de Homarr existente.", "dropzone": { - "title": "Arrastre el archivo zip aquí o haga clic para navegar", - "description": "El zip subido será procesado y podrás seleccionar lo que quieres importar" + "title": "Arrastre el archivo ZIP aquí o haga clic para navegar", + "description": "El archivo ZIP subido será procesado y podrás seleccionar lo que quieres importar" }, "fileInfo": { "action": { @@ -24,11 +24,11 @@ }, "importSettings": { "title": "Importar ajustes", - "description": "" + "description": "Configurar el comportamiento de la importación" }, "boardSelection": { "title": "Se encontraron {count} tableros", - "description": "", + "description": "Elige todos los tableros con el tamaño que deseas para importar", "action": { "selectAll": "Seleccionar todo", "unselectAll": "Deseleccionar todo" @@ -36,7 +36,7 @@ }, "summary": { "title": "Resumen de importación", - "description": "", + "description": "En el resumen de abajo puedes ver qué se importará", "action": { "import": "Confirmar la importación y continuar" }, @@ -57,15 +57,15 @@ }, "notification": { "error": { - "title": "Token invalido", - "message": "" + "title": "Token inválido", + "message": "El código que has introducido no es válido" } } } }, "user": { "title": "Usuario administrador", - "subtitle": "", + "subtitle": "Especifica las credenciales para tu usuario administrador.", "notification": { "success": { "title": "Usuario creado", @@ -91,14 +91,14 @@ "subtitle": "Configurar ajustes del servidor." }, "finish": { - "title": "", + "title": "Finalizar la configuración", "subtitle": "", - "description": "", + "description": "Ha completado el proceso de configuración con éxito. Puede empezar a utilizar Homarr. Seleccione su siguiente paso:", "action": { "goToBoard": "Ir al tablero {name}", - "createBoard": "", - "inviteUser": "", - "docs": "" + "createBoard": "Crea tu primer tablero", + "inviteUser": "Invite a otros usuarios", + "docs": "Consulte la documentación" } } }, @@ -110,12 +110,12 @@ "page": { "login": { "title": "Inicia sesión en tu cuenta", - "subtitle": "" + "subtitle": "¡Bienvenido de nuevo! Por favor introduzca sus credenciales" }, "invite": { - "title": "", - "subtitle": "", - "description": "" + "title": "Unase a Homarr", + "subtitle": "¡Bienvenido a Homarr! Por favor cree su cuenta", + "description": "Usted fue invitado por {username}" }, "init": { "title": "Nueva instalación de Homarr", @@ -137,7 +137,7 @@ "lowercase": "Incluye letra minúscula", "uppercase": "Incluye letra mayúscula", "number": "Incluye número", - "special": "" + "special": "Incluye símbolos especiales" } }, "passwordConfirm": { @@ -147,20 +147,20 @@ "label": "Contraseña anterior" }, "homeBoard": { - "label": "" + "label": "Tablero principal" }, "pingIconsEnabled": { "label": "Usar iconos para pings" }, "defaultSearchEngine": { - "label": "" + "label": "Motor de búsqueda predeterminado" }, "openSearchInNewTab": { - "label": "" + "label": "Abrir los resultados de búsqueda en una nueva pestaña" } }, "error": { - "usernameTaken": "" + "usernameTaken": "Nombre de usuario en uso" }, "action": { "login": { @@ -302,7 +302,7 @@ "group": { "title": "", "name": "", - "search": "", + "search": "Encontrar un grupo", "field": { "name": "Nombre", "members": "Miembros", @@ -355,11 +355,11 @@ }, "view-all": { "label": "", - "description": "" + "description": "Permitir a los miembros ver todos los tableros" }, "modify-all": { "label": "", - "description": "" + "description": "Permitir a los miembros modificar todos tableros (Esto no incluye los controles de acceso y la zona de peligro)" }, "full-all": { "label": "", @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/et.json b/packages/translation/src/lang/et.json index db2c5ca85..76940cb56 100644 --- a/packages/translation/src/lang/et.json +++ b/packages/translation/src/lang/et.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/fr.json b/packages/translation/src/lang/fr.json index 59263e0a2..334881acf 100644 --- a/packages/translation/src/lang/fr.json +++ b/packages/translation/src/lang/fr.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "Afficher les détails" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "Meilleures sorties", "description": "Le nombre maximum de dernières versions à afficher. Zéro signifie aucune limite." @@ -2273,7 +2276,9 @@ "listFoundImages": "Liste des images trouvées", "listAlreadyImportedImages": "Liste des images déjà importées", "allImagesAlreadyImported": "Toutes les images déjà importées", - "onlyAdminCanImport": "Seuls les administrateurs peuvent importer depuis docker" + "onlyAdminCanImport": "Seuls les administrateurs peuvent importer depuis docker", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "Fournisseur" @@ -2335,6 +2340,7 @@ "starsCount": "Étoiles", "forksCount": "", "issuesCount": "Problèmes ouverts", + "markViewed": "", "openProjectPage": "Ouvrir la page du projet", "openReleasePage": "Ouvrir la page de publication", "releaseDescription": "Description de la publication", @@ -2407,11 +2413,52 @@ "internalServerError": "Impossible de récupérer le résumé du contrôleur réseau" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "Notifications", "description": "Afficher l'historique des notifications à partir d'une intégration", "noItems": "Aucune notification à afficher.", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "Conteneurs Docker" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/he.json b/packages/translation/src/lang/he.json index 70d4075e7..758b6a947 100644 --- a/packages/translation/src/lang/he.json +++ b/packages/translation/src/lang/he.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "הצג פרטים" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "מהדורות מובילות", "description": "המספר המרבי של מהדורות אחרונות להצגה. אפס פירושו שאין הגבלה." @@ -2273,7 +2276,9 @@ "listFoundImages": "רשימת התמונות שנמצאו", "listAlreadyImportedImages": "רשימת התמונות שכבר יובאו", "allImagesAlreadyImported": "כל התמונות כבר יובאו", - "onlyAdminCanImport": "רק מנהלים יכולים לייבא מדוקר" + "onlyAdminCanImport": "רק מנהלים יכולים לייבא מדוקר", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "ספק" @@ -2335,6 +2340,7 @@ "starsCount": "כוכבים", "forksCount": "פיצולים", "issuesCount": "תקלות פתוחות", + "markViewed": "", "openProjectPage": "פתח את דף הפרויקט", "openReleasePage": "פתח את דף הגרסאות", "releaseDescription": "תיאור הגרסה", @@ -2407,11 +2413,52 @@ "internalServerError": "אחזור תקציר בקר הרשת נכשל" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "התראות", "description": "הצגת היסטוריית התראות מאינטגרציה", "noItems": "אין התראות להצגה.", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "מכולות דוקר" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/hr.json b/packages/translation/src/lang/hr.json index ae24b9001..bd97026c5 100644 --- a/packages/translation/src/lang/hr.json +++ b/packages/translation/src/lang/hr.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/hu.json b/packages/translation/src/lang/hu.json index f8e775e44..a7329c1e2 100644 --- a/packages/translation/src/lang/hu.json +++ b/packages/translation/src/lang/hu.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/it.json b/packages/translation/src/lang/it.json index bd00fa292..b10949e63 100644 --- a/packages/translation/src/lang/it.json +++ b/packages/translation/src/lang/it.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/ja.json b/packages/translation/src/lang/ja.json index cb8816f8c..72c62f36e 100644 --- a/packages/translation/src/lang/ja.json +++ b/packages/translation/src/lang/ja.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "詳細を表示" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "トップリリース", "description": "表示する最新リリースの最大数。ゼロは制限なしです。" @@ -2273,7 +2276,9 @@ "listFoundImages": "見つかったイメージの一覧", "listAlreadyImportedImages": "すでにインポートされたイメージのリスト", "allImagesAlreadyImported": "すでにインポートされた全てのイメージ", - "onlyAdminCanImport": "管理者のみが Docker からインポートできます" + "onlyAdminCanImport": "管理者のみが Docker からインポートできます", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "プロバイダー" @@ -2335,6 +2340,7 @@ "starsCount": "スター数", "forksCount": "フォーク数", "issuesCount": "未解決の課題数", + "markViewed": "", "openProjectPage": "プロジェクトページを開く", "openReleasePage": "リリースページを開く", "releaseDescription": "リリースの説明", @@ -2407,11 +2413,52 @@ "internalServerError": "ネットワークコントローラの概要の取得に失敗しました" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "通知", "description": "連携機能からの通知履歴を表示する", "noItems": "表示する通知はありません。", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "Docker コンテナ" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/ko.json b/packages/translation/src/lang/ko.json index 21151e2fb..89fc7e991 100644 --- a/packages/translation/src/lang/ko.json +++ b/packages/translation/src/lang/ko.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/lt.json b/packages/translation/src/lang/lt.json index 21b20d08d..286e171fd 100644 --- a/packages/translation/src/lang/lt.json +++ b/packages/translation/src/lang/lt.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/lv.json b/packages/translation/src/lang/lv.json index 623aeae94..31ac4e9b0 100644 --- a/packages/translation/src/lang/lv.json +++ b/packages/translation/src/lang/lv.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/nl.json b/packages/translation/src/lang/nl.json index bb661f559..35258ec6e 100644 --- a/packages/translation/src/lang/nl.json +++ b/packages/translation/src/lang/nl.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "Netwerkcontroller samenvatting ophalen mislukt" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/no.json b/packages/translation/src/lang/no.json index bf3d3f5de..2a03de304 100644 --- a/packages/translation/src/lang/no.json +++ b/packages/translation/src/lang/no.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/pl.json b/packages/translation/src/lang/pl.json index 95aa85513..9c2b969ac 100644 --- a/packages/translation/src/lang/pl.json +++ b/packages/translation/src/lang/pl.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/pt.json b/packages/translation/src/lang/pt.json index c1fd1166e..05e2e033e 100644 --- a/packages/translation/src/lang/pt.json +++ b/packages/translation/src/lang/pt.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/ro.json b/packages/translation/src/lang/ro.json index 856fc449c..7e543d14f 100644 --- a/packages/translation/src/lang/ro.json +++ b/packages/translation/src/lang/ro.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/ru.json b/packages/translation/src/lang/ru.json index 9eda10fb7..d56b6ffeb 100644 --- a/packages/translation/src/lang/ru.json +++ b/packages/translation/src/lang/ru.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/sk.json b/packages/translation/src/lang/sk.json index 876a68011..0345ba092 100644 --- a/packages/translation/src/lang/sk.json +++ b/packages/translation/src/lang/sk.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "Zobraziť podrobnosti" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "Najlepšie vydania", "description": "Maximálny počet najnovších vydaní na zobrazenie. Nula znamená žiadny limit." @@ -2273,7 +2276,9 @@ "listFoundImages": "Zoznam nájdených obrázkov", "listAlreadyImportedImages": "Zoznam už importovaných obrázkov", "allImagesAlreadyImported": "Všetky obrázky sú už importované", - "onlyAdminCanImport": "Importovať z dockeru môžu iba správcovia" + "onlyAdminCanImport": "Importovať z dockeru môžu iba správcovia", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "Poskytovateľ" @@ -2335,6 +2340,7 @@ "starsCount": "Hviezdy", "forksCount": "Vidlicový", "issuesCount": "Problémy", + "markViewed": "", "openProjectPage": "Otvorte stránku projektu", "openReleasePage": "Otvorte stránku vydania", "releaseDescription": "Popis vydania", @@ -2407,11 +2413,52 @@ "internalServerError": "Nepodarilo sa načítať súhrn sieťového ovládača" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "Docker kontajnery" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/sl.json b/packages/translation/src/lang/sl.json index 647fd6af6..8d3103da3 100644 --- a/packages/translation/src/lang/sl.json +++ b/packages/translation/src/lang/sl.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/sv.json b/packages/translation/src/lang/sv.json index 763d2bbe2..5e2dbf7a3 100644 --- a/packages/translation/src/lang/sv.json +++ b/packages/translation/src/lang/sv.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/tr.json b/packages/translation/src/lang/tr.json index e289ee0eb..9c3e58091 100644 --- a/packages/translation/src/lang/tr.json +++ b/packages/translation/src/lang/tr.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "Ayrıntıları Göster" }, + "showOnlyIcon": { + "label": "Yalnızca İkon Göster" + }, "topReleases": { "label": "En İyi Sürümler", "description": "Gösterilecek en son sürümlerin maksimum sayısı. Sıfır, sınır olmadığı anlamına gelir." @@ -2273,7 +2276,9 @@ "listFoundImages": "Bulunan imajların listesi", "listAlreadyImportedImages": "Daha önce içe aktarılan imajların listesi", "allImagesAlreadyImported": "Tüm imajlar daha önce içe aktarıldı", - "onlyAdminCanImport": "Sadece yöneticiler docker'dan içe aktarabilir" + "onlyAdminCanImport": "Sadece yöneticiler docker'dan içe aktarabilir", + "selectAll": "Tümünü seç", + "deselectAll": "Tüm seçimleri kaldır" }, "provider": { "label": "Sağlayıcı" @@ -2335,6 +2340,7 @@ "starsCount": "Yıldızlar", "forksCount": "Çatallar", "issuesCount": "Sorunları Aç", + "markViewed": "Görüntülenmiş olarak işaretle", "openProjectPage": "Proje Sayfasını Aç", "openReleasePage": "Sürüm Sayfasını Aç", "releaseDescription": "Sürüm Açıklaması", @@ -2407,11 +2413,52 @@ "internalServerError": "Ağ Denetleyicisi Özeti alınamadı" } }, + "firewall": { + "name": "Güvenlik Duvarı İzleme", + "description": "Güvenlik duvarlarının özetini gösterir", + "tab": { + "system": "Sistem", + "interfaces": "Arayüzler" + }, + "error": { + "internalServerError": "Güvenlik duvarından veri alınamıyor" + }, + "option": { + "interfaces": "Gösterilecek ağ arayüzleri" + }, + "widget": { + "fwname": "İsim", + "version": "Sürüm", + "versiontitle": "Sürümler", + "cputitle": "CPU kullanımı", + "memorytitle": "Bellek kullanımı", + "cpu": "İşlemci", + "memory": "Bellek", + "interfaces": { + "name": "i̇sim", + "trans": "Gönderilen", + "recv": "Alınan", + "title": "Ağ Arayüzleri" + } + } + }, "notifications": { "name": "Bildirimler", "description": "Entegrasyonların bildirim geçmişini görüntüle", "noItems": "Görüntülenecek bildirim yok.", "option": {} + }, + "systemResources": { + "name": "Sistem kaynakları", + "description": "Sisteminizin CPU, Bellek, Disk ve diğer donanım kullanımları", + "option": {}, + "card": { + "cpu": "İşlemci", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "Docker konteynerleri" + }, + "firewallCpu": { + "label": "Güvenlik Duvarı İşlemcisi" + }, + "firewallMemory": { + "label": "Güvenlik Duvarı Belleği" + }, + "firewallVersion": { + "label": "Güvenlik Duvarı Sürümü" + }, + "firewallInterfaces": { + "label": "Güvenlik Duvarı Arayüzleri" } }, "interval": { diff --git a/packages/translation/src/lang/uk.json b/packages/translation/src/lang/uk.json index 351ae32e2..28b423226 100644 --- a/packages/translation/src/lang/uk.json +++ b/packages/translation/src/lang/uk.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/vi.json b/packages/translation/src/lang/vi.json index 1e0cc29be..c2f240f9a 100644 --- a/packages/translation/src/lang/vi.json +++ b/packages/translation/src/lang/vi.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "" @@ -2335,6 +2340,7 @@ "starsCount": "", "forksCount": "", "issuesCount": "", + "markViewed": "", "openProjectPage": "", "openReleasePage": "", "releaseDescription": "", @@ -2407,11 +2413,52 @@ "internalServerError": "" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/translation/src/lang/zh.json b/packages/translation/src/lang/zh.json index 0593f074f..8c8acb2b9 100644 --- a/packages/translation/src/lang/zh.json +++ b/packages/translation/src/lang/zh.json @@ -2257,6 +2257,9 @@ "showDetails": { "label": "顯示詳情" }, + "showOnlyIcon": { + "label": "" + }, "topReleases": { "label": "", "description": "" @@ -2273,7 +2276,9 @@ "listFoundImages": "", "listAlreadyImportedImages": "", "allImagesAlreadyImported": "", - "onlyAdminCanImport": "" + "onlyAdminCanImport": "", + "selectAll": "", + "deselectAll": "" }, "provider": { "label": "提供者" @@ -2335,6 +2340,7 @@ "starsCount": "星標", "forksCount": "分支數", "issuesCount": "開放問題", + "markViewed": "", "openProjectPage": "開啟專案頁面", "openReleasePage": "開啟發布葉面", "releaseDescription": "版本描述", @@ -2407,11 +2413,52 @@ "internalServerError": "無法獲取網路控制總覽" } }, + "firewall": { + "name": "", + "description": "", + "tab": { + "system": "", + "interfaces": "" + }, + "error": { + "internalServerError": "" + }, + "option": { + "interfaces": "" + }, + "widget": { + "fwname": "", + "version": "", + "versiontitle": "", + "cputitle": "", + "memorytitle": "", + "cpu": "", + "memory": "", + "interfaces": { + "name": "", + "trans": "", + "recv": "", + "title": "" + } + } + }, "notifications": { "name": "", "description": "", "noItems": "", "option": {} + }, + "systemResources": { + "name": "", + "description": "", + "option": {}, + "card": { + "cpu": "", + "memory": "", + "network": "", + "up": "", + "down": "" + } } }, "widgetPreview": { @@ -3186,6 +3233,18 @@ }, "dockerContainers": { "label": "" + }, + "firewallCpu": { + "label": "" + }, + "firewallMemory": { + "label": "" + }, + "firewallVersion": { + "label": "" + }, + "firewallInterfaces": { + "label": "" } }, "interval": { diff --git a/packages/ui/package.json b/packages/ui/package.json index 23982b1b6..afef8d01c 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -30,12 +30,12 @@ "@homarr/log": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", - "@mantine/core": "^8.2.2", - "@mantine/dates": "^8.2.2", - "@mantine/hooks": "^8.2.2", + "@mantine/core": "^8.2.4", + "@mantine/dates": "^8.2.4", + "@mantine/hooks": "^8.2.4", "@tabler/icons-react": "^3.34.1", "mantine-react-table": "2.0.0-beta.9", - "next": "15.4.5", + "next": "15.4.6", "react": "19.1.1", "react-dom": "19.1.1", "svgson": "^5.3.1" diff --git a/packages/ui/src/styles.css b/packages/ui/src/styles.css index 2e6fce46e..e4072e1d0 100644 --- a/packages/ui/src/styles.css +++ b/packages/ui/src/styles.css @@ -1,3 +1,4 @@ @import "@mantine/core/styles.css"; +@import "@mantine/charts/styles.css"; @import "@mantine/dates/styles.css"; @import "mantine-react-table/styles.css"; diff --git a/packages/widgets/package.json b/packages/widgets/package.json index 47209132c..df4d600e1 100644 --- a/packages/widgets/package.json +++ b/packages/widgets/package.json @@ -48,9 +48,9 @@ "@homarr/translation": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", - "@mantine/charts": "^8.2.2", - "@mantine/core": "^8.2.2", - "@mantine/hooks": "^8.2.2", + "@mantine/charts": "^8.2.4", + "@mantine/core": "^8.2.4", + "@mantine/hooks": "^8.2.4", "@tabler/icons-react": "^3.34.1", "@tiptap/extension-color": "2.26.1", "@tiptap/extension-highlight": "2.26.1", @@ -71,12 +71,12 @@ "clsx": "^2.1.1", "dayjs": "^1.11.13", "mantine-react-table": "2.0.0-beta.9", - "next": "15.4.5", + "next": "15.4.6", "react": "19.1.1", "react-dom": "19.1.1", "react-markdown": "^10.1.0", "recharts": "^2.15.4", - "video.js": "^8.23.3", + "video.js": "^8.23.4", "zod": "^3.25.76" }, "devDependencies": { diff --git a/packages/widgets/src/health-monitoring/rings/memory-ring.tsx b/packages/widgets/src/health-monitoring/rings/memory-ring.tsx index e19ad0fe6..edfdef005 100644 --- a/packages/widgets/src/health-monitoring/rings/memory-ring.tsx +++ b/packages/widgets/src/health-monitoring/rings/memory-ring.tsx @@ -3,7 +3,7 @@ import { IconBrain } from "@tabler/icons-react"; import { progressColor } from "../system-health"; -export const MemoryRing = ({ available, used, isTiny }: { available: string; used: string; isTiny: boolean }) => { +export const MemoryRing = ({ available, used, isTiny }: { available: number; used: number; isTiny: boolean }) => { const memoryUsage = formatMemoryUsage(available, used); return ( @@ -31,14 +31,12 @@ export const MemoryRing = ({ available, used, isTiny }: { available: string; use ); }; -export const formatMemoryUsage = (memFree: string, memUsed: string) => { - const memFreeBytes = Number(memFree); - const memUsedBytes = Number(memUsed); - const totalMemory = memFreeBytes + memUsedBytes; - const memFreeGB = (memFreeBytes / 1024 ** 3).toFixed(2); - const memUsedGB = (memUsedBytes / 1024 ** 3).toFixed(2); - const memFreePercent = Math.round((memFreeBytes / totalMemory) * 100); - const memUsedPercent = Math.round((memUsedBytes / totalMemory) * 100); +export const formatMemoryUsage = (memFree: number, memUsed: number) => { + const totalMemory = memFree + memUsed; + const memFreeGB = (memFree / 1024 ** 3).toFixed(2); + const memUsedGB = (memUsed / 1024 ** 3).toFixed(2); + const memFreePercent = Math.round((memFree / totalMemory) * 100); + const memUsedPercent = Math.round((memUsed / totalMemory) * 100); const memTotalGB = (totalMemory / 1024 ** 3).toFixed(2); return { diff --git a/packages/widgets/src/health-monitoring/system-health.tsx b/packages/widgets/src/health-monitoring/system-health.tsx index 6e4aa2ed4..2c4b5fe0b 100644 --- a/packages/widgets/src/health-monitoring/system-health.tsx +++ b/packages/widgets/src/health-monitoring/system-health.tsx @@ -89,7 +89,7 @@ export const SystemHealthMonitoring = ({ {healthData.map(({ integrationId, integrationName, healthInfo, updatedAt }) => { const disksData = matchFileSystemAndSmart(healthInfo.fileSystem, healthInfo.smart); - const memoryUsage = formatMemoryUsage(healthInfo.memAvailable, healthInfo.memUsed); + const memoryUsage = formatMemoryUsage(healthInfo.memAvailableInBytes, healthInfo.memUsedInBytes); return ( )} {options.memory && ( - + )} { diff --git a/packages/widgets/src/index.tsx b/packages/widgets/src/index.tsx index c4ab6bc67..a4e741649 100644 --- a/packages/widgets/src/index.tsx +++ b/packages/widgets/src/index.tsx @@ -37,6 +37,7 @@ import * as rssFeed from "./rssFeed"; import * as smartHomeEntityState from "./smart-home/entity-state"; import * as smartHomeExecuteAutomation from "./smart-home/execute-automation"; import * as stockPrice from "./stocks"; +import * as systemResources from "./system-resources"; import * as video from "./video"; import * as weather from "./weather"; @@ -73,6 +74,7 @@ export const widgetImports = { firewall, notifications, mediaReleases, + systemResources, } satisfies WidgetImportRecord; export type WidgetImports = typeof widgetImports; diff --git a/packages/widgets/src/system-resources/chart/combined-network-traffic.tsx b/packages/widgets/src/system-resources/chart/combined-network-traffic.tsx new file mode 100644 index 000000000..d2db770da --- /dev/null +++ b/packages/widgets/src/system-resources/chart/combined-network-traffic.tsx @@ -0,0 +1,56 @@ +import { Box, Group, Paper, Stack, Text } from "@mantine/core"; + +import { humanFileSize } from "@homarr/common"; +import { useScopedI18n } from "@homarr/translation/client"; + +import { CommonChart } from "./common-chart"; + +export const CombinedNetworkTrafficChart = ({ + usageOverTime, +}: { + usageOverTime: { + up: number; + down: number; + }[]; +}) => { + const chartData = usageOverTime.map((usage, index) => ({ index, up: usage.up, down: usage.down })); + const t = useScopedI18n("widget.systemResources.card"); + + return ( + { + if (!payload) { + return null; + } + return ( + + + {payload.map((payloadData) => ( + + + + {payloadData.value === undefined ? ( + <>N/A + ) : ( + <>{humanFileSize(Math.round(payloadData.value))}/s + )} + + + ))} + + + ); + }, + }} + /> + ); +}; diff --git a/packages/widgets/src/system-resources/chart/common-chart.tsx b/packages/widgets/src/system-resources/chart/common-chart.tsx new file mode 100644 index 000000000..3a5496eb3 --- /dev/null +++ b/packages/widgets/src/system-resources/chart/common-chart.tsx @@ -0,0 +1,97 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { LineChartSeries } from "@mantine/charts"; +import { LineChart } from "@mantine/charts"; +import { Card, Center, Group, Loader, Stack, Text, useMantineColorScheme, useMantineTheme } from "@mantine/core"; +import { useElementSize, useHover, useMergedRef } from "@mantine/hooks"; +import type { TooltipProps, YAxisProps } from "recharts"; + +import { useRequiredBoard } from "@homarr/boards/context"; + +export const CommonChart = ({ + data, + dataKey, + series, + title, + tooltipProps, + yAxisProps, + lastValue, +}: { + data: Record[]; + dataKey: string; + series: LineChartSeries[]; + title: string; + tooltipProps?: TooltipProps; + yAxisProps?: Omit; + lastValue?: string; +}) => { + const { ref: elementSizeRef, height } = useElementSize(); + const theme = useMantineTheme(); + const scheme = useMantineColorScheme(); + const board = useRequiredBoard(); + const { hovered, ref: hoverRef } = useHover(); + const ref = useMergedRef(elementSizeRef, hoverRef); + + const opacity = board.opacity / 100; + const backgroundColor = + scheme.colorScheme === "dark" ? `rgba(57, 57, 57, ${opacity})` : `rgba(246, 247, 248, ${opacity})`; + + return ( + + {data.length > 1 && height > 40 && !hovered && ( + + 100 ? "md" : "xs"} fw={"bold"}> + {title} + + {lastValue && ( + 100 ? "md" : "xs"} lineClamp={1}> + {lastValue} + + )} + + )} + {data.length <= 1 ? ( +
+ + 100 ? "md" : "xs"} color={"rgba(94, 94, 94, 1)"} /> + +
+ ) : ( + = 64} + yAxisProps={yAxisProps} + /> + )} +
+ ); +}; diff --git a/packages/widgets/src/system-resources/chart/cpu-chart.tsx b/packages/widgets/src/system-resources/chart/cpu-chart.tsx new file mode 100644 index 000000000..0e5f81e81 --- /dev/null +++ b/packages/widgets/src/system-resources/chart/cpu-chart.tsx @@ -0,0 +1,39 @@ +import { Paper, Text } from "@mantine/core"; + +import { useScopedI18n } from "@homarr/translation/client"; + +import { CommonChart } from "./common-chart"; + +export const SystemResourceCPUChart = ({ cpuUsageOverTime }: { cpuUsageOverTime: number[] }) => { + const chartData = cpuUsageOverTime.map((usage, index) => ({ index, usage })); + const t = useScopedI18n("widget.systemResources.card"); + + return ( + 0 ? `${Math.round(cpuUsageOverTime[cpuUsageOverTime.length - 1]!)}%` : undefined + } + yAxisProps={{ domain: [0, 100] }} + 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/chart/memory-chart.tsx b/packages/widgets/src/system-resources/chart/memory-chart.tsx new file mode 100644 index 000000000..026128268 --- /dev/null +++ b/packages/widgets/src/system-resources/chart/memory-chart.tsx @@ -0,0 +1,50 @@ +import { Paper, Text } from "@mantine/core"; + +import { humanFileSize } from "@homarr/common"; +import { useScopedI18n } from "@homarr/translation/client"; + +import { CommonChart } from "./common-chart"; + +export const SystemResourceMemoryChart = ({ + memoryUsageOverTime, + totalCapacityInBytes, +}: { + memoryUsageOverTime: number[]; + totalCapacityInBytes: number; +}) => { + const chartData = memoryUsageOverTime.map((usage, index) => ({ index, usage })); + const t = useScopedI18n("widget.systemResources.card"); + + const percentageUsed = + memoryUsageOverTime.length > 0 + ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + memoryUsageOverTime[memoryUsageOverTime.length - 1]! / totalCapacityInBytes + : undefined; + + return ( + { + if (!payload) { + return null; + } + const value = payload[0] ? Number(payload[0].value) : 0; + return ( + + + {humanFileSize(value)} / {humanFileSize(totalCapacityInBytes)} ( + {Math.round((value / totalCapacityInBytes) * 100)}%) + + + ); + }, + }} + /> + ); +}; diff --git a/packages/widgets/src/system-resources/chart/network-traffic.tsx b/packages/widgets/src/system-resources/chart/network-traffic.tsx new file mode 100644 index 000000000..91e9a201d --- /dev/null +++ b/packages/widgets/src/system-resources/chart/network-traffic.tsx @@ -0,0 +1,40 @@ +import { Paper, Text } from "@mantine/core"; + +import { humanFileSize } from "@homarr/common"; +import { useScopedI18n } from "@homarr/translation/client"; + +import { CommonChart } from "./common-chart"; + +export const NetworkTrafficChart = ({ usageOverTime, isUp }: { usageOverTime: number[]; isUp: boolean }) => { + const chartData = usageOverTime.map((usage, index) => ({ index, usage })); + const t = useScopedI18n("widget.systemResources.card"); + + const max = Math.max(...usageOverTime); + const upperBound = max + max * 0.2; + + return ( + { + if (!payload) { + return null; + } + const value = payload[0] ? Number(payload[0].value) : 0; + return ( + + + {humanFileSize(Math.round(value))}/s + + + ); + }, + }} + /> + ); +}; diff --git a/packages/widgets/src/system-resources/component.module.css b/packages/widgets/src/system-resources/component.module.css new file mode 100644 index 000000000..da1a998ed --- /dev/null +++ b/packages/widgets/src/system-resources/component.module.css @@ -0,0 +1,14 @@ +.grid { + display: grid; + grid-template-rows: repeat(3, 1fr); + grid-template-columns: repeat(2, 1fr); + gap: 8px; + padding: 8px; + + height: 100%; +} + +.colSpanWide { + grid-column-start: 1; + grid-column-end: 3; +} diff --git a/packages/widgets/src/system-resources/component.tsx b/packages/widgets/src/system-resources/component.tsx new file mode 100644 index 000000000..501eddc65 --- /dev/null +++ b/packages/widgets/src/system-resources/component.tsx @@ -0,0 +1,82 @@ +"use client"; + +import { useState } from "react"; +import { useElementSize } from "@mantine/hooks"; + +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 { SystemResourceMemoryChart } from "./chart/memory-chart"; +import { NetworkTrafficChart } from "./chart/network-traffic"; +import classes from "./component.module.css"; + +const MAX_QUEUE_SIZE = 15; + +export default function SystemResources({ integrationIds }: WidgetComponentProps<"systemResources">) { + const { ref, width } = useElementSize(); + + const [data] = clientApi.widget.healthMonitoring.getSystemHealthStatus.useSuspenseQuery({ + integrationIds, + }); + 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 }[]>( + data.map((item) => ({ + cpu: item.healthInfo.cpuUtilization, + memory: item.healthInfo.memUsedInBytes, + network: item.healthInfo.network, + })), + ); + + clientApi.widget.healthMonitoring.subscribeSystemHealthStatus.useSubscription( + { + integrationIds, + }, + { + onData(data) { + setItems((previousItems) => { + const next = { + cpu: data.healthInfo.cpuUtilization, + memory: data.healthInfo.memUsedInBytes, + network: data.healthInfo.network, + }; + + return [...previousItems, next].slice(-MAX_QUEUE_SIZE); + }); + }, + }, + ); + + const showNetwork = items.length === 0 || items.every((item) => item.network !== null); + + return ( +
+
+ item.cpu)} /> +
+
+ item.memory)} + totalCapacityInBytes={memoryCapacityInBytes} + /> +
+ {showNetwork && + (width > 200 ? ( + <> + {/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */} + item.network!.down)} isUp={false} /> + + {/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */} + item.network!.up)} isUp /> + + ) : ( +
+ {/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */} + item.network!)} /> +
+ ))} +
+ ); +} diff --git a/packages/widgets/src/system-resources/index.ts b/packages/widgets/src/system-resources/index.ts new file mode 100644 index 000000000..664bc0247 --- /dev/null +++ b/packages/widgets/src/system-resources/index.ts @@ -0,0 +1,12 @@ +import { IconGraphFilled } from "@tabler/icons-react"; + +import { createWidgetDefinition } from "../definition"; +import { optionsBuilder } from "../options"; + +export const { definition, componentLoader } = createWidgetDefinition("systemResources", { + icon: IconGraphFilled, + supportedIntegrations: ["dashDot", "openmediavault"], + createOptions() { + return optionsBuilder.from(() => ({})); + }, +}).withDynamicImport(() => import("./component")); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 709e3927f..c8bf2461e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,14 +38,14 @@ importers: specifier: ^14.0.3 version: 14.0.3(semantic-release@24.2.7(typescript@5.9.2)) '@testcontainers/redis': - specifier: ^11.4.0 - version: 11.4.0 + specifier: ^11.5.1 + version: 11.5.1 '@turbo/gen': specifier: ^2.5.5 - version: 2.5.5(@types/node@22.17.0)(typescript@5.9.2) + version: 2.5.5(@types/node@22.17.1)(typescript@5.9.2) '@vitejs/plugin-react': specifier: ^4.7.0 - version: 4.7.0(vite@5.4.5(@types/node@22.17.0)(sass@1.89.2)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0)) + version: 4.7.0(vite@5.4.5(@types/node@22.17.1)(sass@1.90.0)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0)) '@vitest/coverage-v8': specifier: ^3.2.4 version: 3.2.4(vitest@3.2.4) @@ -68,8 +68,8 @@ importers: specifier: ^24.2.7 version: 24.2.7(typescript@5.9.2) testcontainers: - specifier: ^11.4.0 - version: 11.4.0 + specifier: ^11.5.1 + version: 11.5.1 turbo: specifier: ^2.5.5 version: 2.5.5 @@ -78,10 +78,10 @@ importers: version: 5.9.2 vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.9.2)(vite@5.4.5(@types/node@22.17.0)(sass@1.89.2)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0)) + version: 5.1.4(typescript@5.9.2)(vite@5.4.5(@types/node@22.17.1)(sass@1.90.0)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0)) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.0)(@vitest/ui@3.2.4)(jsdom@26.1.0)(sass@1.89.2)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.1)(@vitest/ui@3.2.4)(jsdom@26.1.0)(sass@1.90.0)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0) apps/nextjs: dependencies: @@ -191,23 +191,23 @@ importers: specifier: workspace:^0.1.0 version: link:../../packages/widgets '@mantine/colors-generator': - specifier: ^8.2.2 - version: 8.2.2(chroma-js@3.1.2) + specifier: ^8.2.4 + version: 8.2.4(chroma-js@3.1.2) '@mantine/core': - specifier: ^8.2.2 - version: 8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@mantine/dropzone': - specifier: ^8.2.2 - version: 8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@mantine/hooks': - specifier: ^8.2.2 - version: 8.2.2(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(react@19.1.1) '@mantine/modals': - specifier: ^8.2.2 - version: 8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@mantine/tiptap': - specifier: ^8.2.2 - version: 8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(@tiptap/extension-link@2.26.1(@tiptap/core@2.26.1(@tiptap/pm@2.26.1))(@tiptap/pm@2.26.1))(@tiptap/react@2.26.1(@tiptap/core@2.26.1(@tiptap/pm@2.26.1))(@tiptap/pm@2.26.1)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(@tiptap/extension-link@2.26.1(@tiptap/core@2.26.1(@tiptap/pm@2.26.1))(@tiptap/pm@2.26.1))(@tiptap/react@2.26.1(@tiptap/core@2.26.1(@tiptap/pm@2.26.1))(@tiptap/pm@2.26.1)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@million/lint': specifier: 1.0.14 version: 1.0.14(rollup@4.21.3)(webpack-sources@3.2.3) @@ -215,26 +215,26 @@ importers: specifier: ^3.34.1 version: 3.34.1(react@19.1.1) '@tanstack/react-query': - specifier: ^5.84.1 - version: 5.84.1(react@19.1.1) + specifier: ^5.84.2 + version: 5.84.2(react@19.1.1) '@tanstack/react-query-devtools': - specifier: ^5.84.1 - version: 5.84.1(@tanstack/react-query@5.84.1(react@19.1.1))(react@19.1.1) + specifier: ^5.84.2 + version: 5.84.2(@tanstack/react-query@5.84.2(react@19.1.1))(react@19.1.1) '@tanstack/react-query-next-experimental': - specifier: ^5.84.1 - version: 5.84.1(@tanstack/react-query@5.84.1(react@19.1.1))(next@15.4.5(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2))(react@19.1.1) + specifier: ^5.84.2 + version: 5.84.2(@tanstack/react-query@5.84.2(react@19.1.1))(next@15.4.6(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react@19.1.1) '@trpc/client': - specifier: ^11.4.3 - version: 11.4.3(@trpc/server@11.4.3(typescript@5.9.2))(typescript@5.9.2) + specifier: ^11.4.4 + version: 11.4.4(@trpc/server@11.4.4(typescript@5.9.2))(typescript@5.9.2) '@trpc/next': - specifier: ^11.4.3 - version: 11.4.3(@tanstack/react-query@5.84.1(react@19.1.1))(@trpc/client@11.4.3(@trpc/server@11.4.3(typescript@5.9.2))(typescript@5.9.2))(@trpc/react-query@11.4.3(@tanstack/react-query@5.84.1(react@19.1.1))(@trpc/client@11.4.3(@trpc/server@11.4.3(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.4.3(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(@trpc/server@11.4.3(typescript@5.9.2))(next@15.4.5(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + specifier: ^11.4.4 + version: 11.4.4(@tanstack/react-query@5.84.2(react@19.1.1))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.9.2))(typescript@5.9.2))(@trpc/react-query@11.4.4(@tanstack/react-query@5.84.2(react@19.1.1))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.4.4(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(@trpc/server@11.4.4(typescript@5.9.2))(next@15.4.6(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) '@trpc/react-query': - specifier: ^11.4.3 - version: 11.4.3(@tanstack/react-query@5.84.1(react@19.1.1))(@trpc/client@11.4.3(@trpc/server@11.4.3(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.4.3(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + specifier: ^11.4.4 + version: 11.4.4(@tanstack/react-query@5.84.2(react@19.1.1))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.4.4(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) '@trpc/server': - specifier: ^11.4.3 - version: 11.4.3(typescript@5.9.2) + specifier: ^11.4.4 + version: 11.4.4(typescript@5.9.2) '@xterm/addon-canvas': specifier: ^0.7.0 version: 0.7.0(@xterm/xterm@5.5.0) @@ -263,14 +263,14 @@ importers: specifier: ^11.0.3 version: 11.0.3 jotai: - specifier: ^2.12.5 - version: 2.12.5(@types/react@19.1.9)(react@19.1.1) + specifier: ^2.13.0 + version: 2.13.0(@babel/core@7.26.0)(@babel/template@7.27.2)(@types/react@19.1.9)(react@19.1.1) mantine-react-table: specifier: 2.0.0-beta.9 - version: 2.0.0-beta.9(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/dates@8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(@tabler/icons-react@3.34.1(react@19.1.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 2.0.0-beta.9(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/dates@8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(@tabler/icons-react@3.34.1(react@19.1.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) next: - specifier: 15.4.5 - version: 15.4.5(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2) + specifier: 15.4.6 + version: 15.4.6(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0) postcss-preset-mantine: specifier: ^1.18.0 version: 1.18.0(postcss@8.4.47) @@ -290,8 +290,8 @@ importers: specifier: ^0.14.1 version: 0.14.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) sass: - specifier: ^1.89.2 - version: 1.89.2 + specifier: ^1.90.0 + version: 1.90.0 superjson: specifier: 2.2.2 version: 2.2.2 @@ -318,8 +318,8 @@ importers: specifier: 3.1.1 version: 3.1.1 '@types/node': - specifier: ^22.17.0 - version: 22.17.0 + specifier: ^22.17.1 + version: 22.17.1 '@types/prismjs': specifier: ^1.26.5 version: 1.26.5 @@ -421,8 +421,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../tooling/typescript '@types/node': - specifier: ^22.17.0 - version: 22.17.0 + specifier: ^22.17.1 + version: 22.17.1 dotenv-cli: specifier: ^10.0.0 version: 10.0.0 @@ -600,26 +600,26 @@ importers: specifier: ^1.3.0 version: 1.3.0 '@tanstack/react-query': - specifier: ^5.84.1 - version: 5.84.1(react@19.1.1) + specifier: ^5.84.2 + version: 5.84.2(react@19.1.1) '@trpc/client': - specifier: ^11.4.3 - version: 11.4.3(@trpc/server@11.4.3(typescript@5.9.2))(typescript@5.9.2) + specifier: ^11.4.4 + version: 11.4.4(@trpc/server@11.4.4(typescript@5.9.2))(typescript@5.9.2) '@trpc/react-query': - specifier: ^11.4.3 - version: 11.4.3(@tanstack/react-query@5.84.1(react@19.1.1))(@trpc/client@11.4.3(@trpc/server@11.4.3(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.4.3(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + specifier: ^11.4.4 + version: 11.4.4(@tanstack/react-query@5.84.2(react@19.1.1))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.4.4(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) '@trpc/server': - specifier: ^11.4.3 - version: 11.4.3(typescript@5.9.2) + specifier: ^11.4.4 + version: 11.4.4(typescript@5.9.2) '@trpc/tanstack-react-query': - specifier: ^11.4.3 - version: 11.4.3(@tanstack/react-query@5.84.1(react@19.1.1))(@trpc/client@11.4.3(@trpc/server@11.4.3(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.4.3(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + specifier: ^11.4.4 + version: 11.4.4(@tanstack/react-query@5.84.2(react@19.1.1))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.4.4(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) lodash.clonedeep: specifier: ^4.5.0 version: 4.5.0 next: - specifier: 15.4.5 - version: 15.4.5(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2) + specifier: 15.4.6 + version: 15.4.6(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0) react: specifier: 19.1.1 version: 19.1.1 @@ -630,8 +630,8 @@ importers: specifier: 2.2.2 version: 2.2.2 trpc-to-openapi: - specifier: ^2.3.2 - version: 2.3.2(@trpc/server@11.4.3(typescript@5.9.2))(zod-openapi@2.19.0(zod@3.25.76))(zod@3.25.76) + specifier: ^2.4.0 + version: 2.4.0(@trpc/server@11.4.4(typescript@5.9.2))(zod-openapi@2.19.0(zod@3.25.76))(zod@3.25.76) zod: specifier: ^3.25.76 version: 3.25.76 @@ -694,11 +694,11 @@ importers: specifier: 8.0.9 version: 8.0.9 next: - specifier: 15.4.5 - version: 15.4.5(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2) + specifier: 15.4.6 + version: 15.4.6(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0) next-auth: specifier: 5.0.0-beta.29 - version: 5.0.0-beta.29(next@15.4.5(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2))(react@19.1.1) + version: 5.0.0-beta.29(next@15.4.6(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react@19.1.1) react: specifier: 19.1.1 version: 19.1.1 @@ -845,8 +845,8 @@ importers: specifier: ^1.11.13 version: 1.11.13 next: - specifier: 15.4.5 - version: 15.4.5(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2) + specifier: 15.4.6 + version: 15.4.6(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0) react: specifier: 19.1.1 version: 19.1.1 @@ -922,17 +922,17 @@ importers: specifier: workspace:^0.1.0 version: link:../log '@tanstack/react-query': - specifier: ^5.84.1 - version: 5.84.1(react@19.1.1) + specifier: ^5.84.2 + version: 5.84.2(react@19.1.1) '@trpc/client': - specifier: ^11.4.3 - version: 11.4.3(@trpc/server@11.4.3(typescript@5.9.2))(typescript@5.9.2) + specifier: ^11.4.4 + version: 11.4.4(@trpc/server@11.4.4(typescript@5.9.2))(typescript@5.9.2) '@trpc/server': - specifier: ^11.4.3 - version: 11.4.3(typescript@5.9.2) + specifier: ^11.4.4 + version: 11.4.4(typescript@5.9.2) '@trpc/tanstack-react-query': - specifier: ^11.4.3 - version: 11.4.3(@tanstack/react-query@5.84.1(react@19.1.1))(@trpc/client@11.4.3(@trpc/server@11.4.3(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.4.3(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + specifier: ^11.4.4 + version: 11.4.4(@tanstack/react-query@5.84.2(react@19.1.1))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.4.4(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) node-cron: specifier: ^4.2.1 version: 4.2.1 @@ -1109,14 +1109,14 @@ importers: specifier: workspace:^0.1.0 version: link:../server-settings '@mantine/core': - specifier: ^8.2.2 - version: 8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@paralleldrive/cuid2': specifier: ^2.2.2 version: 2.2.2 '@testcontainers/mysql': - specifier: ^11.4.0 - version: 11.4.0 + specifier: ^11.5.1 + version: 11.5.1 better-sqlite3: specifier: ^12.2.0 version: 12.2.0 @@ -1244,8 +1244,8 @@ importers: specifier: workspace:^0.1.0 version: link:../validation '@mantine/form': - specifier: ^8.2.2 - version: 8.2.2(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(react@19.1.1) zod: specifier: ^3.25.76 version: 3.25.76 @@ -1290,8 +1290,8 @@ importers: specifier: workspace:^0.1.0 version: link:../validation '@mantine/core': - specifier: ^8.2.2 - version: 8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: specifier: 19.1.1 version: 19.1.1 @@ -1392,8 +1392,8 @@ importers: specifier: ^7.2.0 version: 7.2.0 '@gitbeaker/rest': - specifier: ^43.3.0 - version: 43.3.0 + specifier: ^43.4.0 + version: 43.4.0 '@homarr/certificates': specifier: workspace:^0.1.0 version: link:../certificates @@ -1514,11 +1514,11 @@ importers: specifier: workspace:^0.1.0 version: link:../ui '@mantine/core': - specifier: ^8.2.2 - version: 8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@mantine/hooks': - specifier: ^8.2.2 - version: 8.2.2(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(react@19.1.1) react: specifier: 19.1.1 version: 19.1.1 @@ -1575,8 +1575,8 @@ importers: specifier: workspace:^0.1.0 version: link:../validation '@mantine/core': - specifier: ^8.2.2 - version: 8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@tabler/icons-react': specifier: ^3.34.1 version: 3.34.1(react@19.1.1) @@ -1584,8 +1584,8 @@ importers: specifier: ^1.11.13 version: 1.11.13 next: - specifier: 15.4.5 - version: 15.4.5(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2) + specifier: 15.4.6 + version: 15.4.6(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0) react: specifier: 19.1.1 version: 19.1.1 @@ -1618,8 +1618,8 @@ importers: specifier: workspace:^0.1.0 version: link:../ui '@mantine/notifications': - specifier: ^8.2.2 - version: 8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@tabler/icons-react': specifier: ^3.34.1 version: 3.34.1(react@19.1.1) @@ -1676,17 +1676,17 @@ importers: specifier: workspace:^0.1.0 version: link:../validation '@mantine/core': - specifier: ^8.2.2 - version: 8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@mantine/hooks': - specifier: ^8.2.2 - version: 8.2.2(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(react@19.1.1) adm-zip: specifier: 0.5.16 version: 0.5.16 next: - specifier: 15.4.5 - version: 15.4.5(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2) + specifier: 15.4.6 + version: 15.4.6(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0) react: specifier: 19.1.1 version: 19.1.1 @@ -1904,11 +1904,11 @@ importers: specifier: workspace:^0.1.0 version: link:../server-settings '@mantine/dates': - specifier: ^8.2.2 - version: 8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) next: - specifier: 15.4.5 - version: 15.4.5(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2) + specifier: 15.4.6 + version: 15.4.6(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0) react: specifier: 19.1.1 version: 19.1.1 @@ -1965,23 +1965,23 @@ importers: specifier: workspace:^0.1.0 version: link:../ui '@mantine/core': - specifier: ^8.2.2 - version: 8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@mantine/hooks': - specifier: ^8.2.2 - version: 8.2.2(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(react@19.1.1) '@mantine/spotlight': - specifier: ^8.2.2 - version: 8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@tabler/icons-react': specifier: ^3.34.1 version: 3.34.1(react@19.1.1) jotai: - specifier: ^2.12.5 - version: 2.12.5(@types/react@19.1.9)(react@19.1.1) + specifier: ^2.13.0 + version: 2.13.0(@babel/core@7.28.0)(@babel/template@7.27.2)(@types/react@19.1.9)(react@19.1.1) next: - specifier: 15.4.5 - version: 15.4.5(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2) + specifier: 15.4.6 + version: 15.4.6(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0) react: specifier: 19.1.1 version: 19.1.1 @@ -2024,13 +2024,13 @@ importers: version: 4.3.1 mantine-react-table: specifier: 2.0.0-beta.9 - version: 2.0.0-beta.9(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/dates@8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(@tabler/icons-react@3.34.1(react@19.1.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 2.0.0-beta.9(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/dates@8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(@tabler/icons-react@3.34.1(react@19.1.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) next: - specifier: 15.4.5 - version: 15.4.5(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2) + specifier: 15.4.6 + version: 15.4.6(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0) next-intl: specifier: 4.3.4 - version: 4.3.4(next@15.4.5(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2))(react@19.1.1)(typescript@5.9.2) + version: 4.3.4(next@15.4.6(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react@19.1.1)(typescript@5.9.2) react: specifier: 19.1.1 version: 19.1.1 @@ -2072,23 +2072,23 @@ importers: specifier: workspace:^0.1.0 version: link:../validation '@mantine/core': - specifier: ^8.2.2 - version: 8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@mantine/dates': - specifier: ^8.2.2 - version: 8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@mantine/hooks': - specifier: ^8.2.2 - version: 8.2.2(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(react@19.1.1) '@tabler/icons-react': specifier: ^3.34.1 version: 3.34.1(react@19.1.1) mantine-react-table: specifier: 2.0.0-beta.9 - version: 2.0.0-beta.9(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/dates@8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(@tabler/icons-react@3.34.1(react@19.1.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 2.0.0-beta.9(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/dates@8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(@tabler/icons-react@3.34.1(react@19.1.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) next: - specifier: 15.4.5 - version: 15.4.5(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2) + specifier: 15.4.6 + version: 15.4.6(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0) react: specifier: 19.1.1 version: 19.1.1 @@ -2221,14 +2221,14 @@ importers: specifier: workspace:^0.1.0 version: link:../validation '@mantine/charts': - specifier: ^8.2.2 - version: 8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(recharts@2.15.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1)) + specifier: ^8.2.4 + version: 8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(recharts@2.15.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1)) '@mantine/core': - specifier: ^8.2.2 - version: 8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@mantine/hooks': - specifier: ^8.2.2 - version: 8.2.2(react@19.1.1) + specifier: ^8.2.4 + version: 8.2.4(react@19.1.1) '@tabler/icons-react': specifier: ^3.34.1 version: 3.34.1(react@19.1.1) @@ -2288,10 +2288,10 @@ importers: version: 1.11.13 mantine-react-table: specifier: 2.0.0-beta.9 - version: 2.0.0-beta.9(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/dates@8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(@tabler/icons-react@3.34.1(react@19.1.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 2.0.0-beta.9(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/dates@8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(@tabler/icons-react@3.34.1(react@19.1.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) next: - specifier: 15.4.5 - version: 15.4.5(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2) + specifier: 15.4.6 + version: 15.4.6(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0) react: specifier: 19.1.1 version: 19.1.1 @@ -2305,8 +2305,8 @@ importers: specifier: ^2.15.4 version: 2.15.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1) video.js: - specifier: ^8.23.3 - version: 8.23.3 + specifier: ^8.23.4 + version: 8.23.4 zod: specifier: ^3.25.76 version: 3.25.76 @@ -2333,8 +2333,8 @@ importers: tooling/eslint: dependencies: '@next/eslint-plugin-next': - specifier: 15.4.5 - version: 15.4.5 + specifier: 15.4.6 + version: 15.4.6 eslint-config-prettier: specifier: ^10.1.8 version: 10.1.8(eslint@9.32.0) @@ -2343,7 +2343,7 @@ importers: version: 2.5.5(eslint@9.32.0)(turbo@2.5.5) eslint-plugin-import: specifier: ^2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2))(eslint@9.32.0) + version: 2.32.0(@typescript-eslint/parser@8.39.0(eslint@9.32.0)(typescript@5.9.2))(eslint@9.32.0) eslint-plugin-jsx-a11y: specifier: ^6.10.2 version: 6.10.2(eslint@9.32.0) @@ -2354,8 +2354,8 @@ importers: specifier: ^5.2.0 version: 5.2.0(eslint@9.32.0) typescript-eslint: - specifier: ^8.38.0 - version: 8.38.0(eslint@9.32.0)(typescript@5.9.2) + specifier: ^8.39.0 + version: 8.39.0(eslint@9.32.0)(typescript@5.9.2) devDependencies: '@homarr/prettier-config': specifier: workspace:^0.1.0 @@ -2375,8 +2375,8 @@ importers: tooling/prettier: dependencies: '@ianvs/prettier-plugin-sort-imports': - specifier: ^4.5.1 - version: 4.5.1(prettier@3.6.2) + specifier: ^4.6.1 + version: 4.6.1(prettier@3.6.2) prettier: specifier: ^3.6.2 version: 3.6.2 @@ -2461,10 +2461,6 @@ packages: resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} engines: {node: '>=6.9.0'} - '@babel/generator@7.27.5': - resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==} - engines: {node: '>=6.9.0'} - '@babel/generator@7.28.0': resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} engines: {node: '>=6.9.0'} @@ -2542,11 +2538,6 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.27.5': - resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.28.0': resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} engines: {node: '>=6.0.0'} @@ -2584,10 +2575,6 @@ packages: resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.27.4': - resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==} - engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.0': resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} engines: {node: '>=6.9.0'} @@ -2596,10 +2583,6 @@ packages: resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} - '@babel/types@7.27.6': - resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==} - engines: {node: '>=6.9.0'} - '@babel/types@7.28.1': resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==} engines: {node: '>=6.9.0'} @@ -3397,16 +3380,16 @@ packages: '@formatjs/intl-localematcher@0.5.5': resolution: {integrity: sha512-t5tOGMgZ/i5+ALl2/offNqAQq/lfUnKLEw0mXQI4N4bqpedhrSE+fyKLpwnd22sK0dif6AV+ufQcTsKShB9J1g==} - '@gitbeaker/core@43.3.0': - resolution: {integrity: sha512-hORHoQnDFHKOuKDAL6qfFTom+eZvHNGTELuwQ22rFmqW9D3el2XQ+L/fcXEcyEysTGB49b2t2FtRf0Us5Et10g==} + '@gitbeaker/core@43.4.0': + resolution: {integrity: sha512-SN7/2raXQa99i/koOV5voQ3q5Pz9F8TkyECBDmY8lDrgufgf5QLfRvTVc1uRU/As543KCrPi2s/Hn+vZgwLdYw==} engines: {node: '>=18.20.0'} - '@gitbeaker/requester-utils@43.3.0': - resolution: {integrity: sha512-A5bQQAi8cH6qFTiyWWiAgtdM1XV8vRD3OPWs0jOpEIEbT+rWJZQRclo3dlKhcsiM+Gz4SRAylwBwUYszdjOzdw==} + '@gitbeaker/requester-utils@43.4.0': + resolution: {integrity: sha512-W15fZbLzEonMdqzz+/H3KmIByI3neUE2+HjnvnyMl5g4CHZuPCkj0boTkGRBH1c6ax1Fmdhz5vPv7OjRF274gQ==} engines: {node: '>=18.20.0'} - '@gitbeaker/rest@43.3.0': - resolution: {integrity: sha512-3plSNawPLgHSfJmbBGGzCT3kvKE5rqS4fhzTyQFfiwm/+NvOTxEIqMQ5wxaYWlonYfR/eUVp09sMig1nG9Isww==} + '@gitbeaker/rest@43.4.0': + resolution: {integrity: sha512-SmyBcC16+wNuAT77vcqk1gQr5ITC0yD4ln5/s7qplEC4U3hQtII/NKvpiygapMDrFF4GGA3GTCQAPQuUk22onw==} engines: {node: '>=18.20.0'} '@grpc/grpc-js@1.12.5': @@ -3454,17 +3437,23 @@ packages: resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} engines: {node: '>=18.18'} - '@ianvs/prettier-plugin-sort-imports@4.5.1': - resolution: {integrity: sha512-vOQwIyQHnHz0ikvHEQDzwUkNfX74o/7qNEpm9LiPtyBvCg/AU/DOkhwe1o92chPS1QzS6G7HeiO+OwIt8a358A==} + '@ianvs/prettier-plugin-sort-imports@4.6.1': + resolution: {integrity: sha512-Q0gujs/g6tw1uOGd1bTVLGDzAwb/UwrCehhPCQevTCYDkho8+eQSOhA0zcy9AM0XnXM1ChBWsZeE4P7Nym0pyw==} peerDependencies: '@prettier/plugin-oxc': ^0.0.4 '@vue/compiler-sfc': 2.7.x || 3.x + content-tag: ^4.0.0 prettier: 2 || 3 || ^4.0.0-0 + prettier-plugin-ember-template-tag: ^2.1.0 peerDependenciesMeta: '@prettier/plugin-oxc': optional: true '@vue/compiler-sfc': optional: true + content-tag: + optional: true + prettier-plugin-ember-template-tag: + optional: true '@img/sharp-darwin-arm64@0.34.3': resolution: {integrity: sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==} @@ -3672,88 +3661,88 @@ packages: '@libsql/core@0.14.0': resolution: {integrity: sha512-nhbuXf7GP3PSZgdCY2Ecj8vz187ptHlZQ0VRc751oB2C1W8jQUXKKklvt7t1LJiUTQBVJuadF628eUk+3cRi4Q==} - '@mantine/charts@8.2.2': - resolution: {integrity: sha512-BE23rixQ8Y0XUg0ad1Au+oIRYe2pljt60rxcXg7EICY3t9hNMpdN3i7cKdOqZ3EOHminbD0zD8IFarOcrZl1/g==} + '@mantine/charts@8.2.4': + resolution: {integrity: sha512-fO2M+gNs5Oc1dnfq0GVl51pSVCAVIgWCJbwKPsatZG5LK9TSou+yu/G6iN5/k721OmVyoNJf/G44foDzLUG54A==} peerDependencies: - '@mantine/core': 8.2.2 - '@mantine/hooks': 8.2.2 + '@mantine/core': 8.2.4 + '@mantine/hooks': 8.2.4 react: ^18.x || ^19.x react-dom: ^18.x || ^19.x recharts: '>=2.13.3' - '@mantine/colors-generator@8.2.2': - resolution: {integrity: sha512-V0R2N9QAZsyCKkAEQP3I7EnY8WwV3Bp8cgfLNxeA0kpwxMPVJgN2yyfw595nLu1VnVb+bbA/+74cOMEs/QYRPw==} + '@mantine/colors-generator@8.2.4': + resolution: {integrity: sha512-P6YXdXzEsV63rXuPO9Z48AANaXZfon5Bhoj5Kvd+ih+2uDyNcghjFzmkfikcdSFl/x+7QW6VPLIPZPHjiCNT9g==} peerDependencies: chroma-js: '>=2.4.2' - '@mantine/core@8.2.2': - resolution: {integrity: sha512-+WnqII3zSD72F+7GLcRXZ/MyO4r7A4JM/yWkCSclxR4LeRQ5bd4HBRXkvXRMZP28UeL2b5X9Re2Sig3KVGDBeQ==} + '@mantine/core@8.2.4': + resolution: {integrity: sha512-bZBxt6CFNLleARe5Ni2oYOcuRdi8ZEaxoZBmdc3sQu24tiX61xTKtjOfHaPffNMpqNQoIbgOi955rk3t1KSLig==} peerDependencies: - '@mantine/hooks': 8.2.2 + '@mantine/hooks': 8.2.4 react: ^18.x || ^19.x react-dom: ^18.x || ^19.x - '@mantine/dates@8.2.2': - resolution: {integrity: sha512-ZDY6/OBgz8827Tu+sOxPNYXrsgLxWwF7pXDEL7vQN1XAm3pQdq2ljPn7Ykh/H9d7QEXQAFO6q5knwnyAXjn06g==} + '@mantine/dates@8.2.4': + resolution: {integrity: sha512-i4t1vKGQhqbT8B+/hK2iF0taYRrWKwNEFXoQrwIrau5OE8MZaIBiMVZaO6qYSW0KAvW1ZIt6SF7UpiZTqnytqQ==} peerDependencies: - '@mantine/core': 8.2.2 - '@mantine/hooks': 8.2.2 + '@mantine/core': 8.2.4 + '@mantine/hooks': 8.2.4 dayjs: '>=1.0.0' react: ^18.x || ^19.x react-dom: ^18.x || ^19.x - '@mantine/dropzone@8.2.2': - resolution: {integrity: sha512-yfuhaCCcB00WqQcTLdzrJfEUaB7EBOn9ZXGHVmn+gmsB7AyTBh/7GooDTzZkMkJxtciz6iwp6DHzqvGDGLWqtw==} + '@mantine/dropzone@8.2.4': + resolution: {integrity: sha512-YKeUX8wElHGitskd/aQ0mxUwxSm8uX6KybNALR3TjtczegyK5kLajV+nX8d0tBGaRmyAGs9XRaCbeNGsrhrluQ==} peerDependencies: - '@mantine/core': 8.2.2 - '@mantine/hooks': 8.2.2 + '@mantine/core': 8.2.4 + '@mantine/hooks': 8.2.4 react: ^18.x || ^19.x react-dom: ^18.x || ^19.x - '@mantine/form@8.2.2': - resolution: {integrity: sha512-HdoP9fWqZqQvDggYSqlHDCtu0xz/Ts10w4+qd3jZw0LmCx18J+NbMRWJHlVRznAEuNlnWtKdxRHOI68BgLRFFQ==} + '@mantine/form@8.2.4': + resolution: {integrity: sha512-dr69dYyHStjn6+yBmMCLuIw0SmogtSPUqheA5mIztboswYUX9p+NRMUqfSjd5TZ9o3QEMt9HsQJsPLn67EIvJQ==} peerDependencies: react: ^18.x || ^19.x - '@mantine/hooks@8.2.2': - resolution: {integrity: sha512-fjt0+pc1UxJIIUswu4ur72qVH+/UoFxyYmqWexuHJTOvuB86M//KUvXpFyhJcTdEENBHg2k1fyMpWmgg1VOZ5w==} + '@mantine/hooks@8.2.4': + resolution: {integrity: sha512-ZXQ0uk6UtJa6Gl+ZWMBh4wC7UqCAoWWvau1TOoe05sBrkyGcXSVrTfoCVzjEQaB/h8VEOUWLGtJokkiMQKcMzA==} peerDependencies: react: ^18.x || ^19.x - '@mantine/modals@8.2.2': - resolution: {integrity: sha512-NCjdziBVtw21e15no3dl1MAAXawJGQRjyH4OVbVk9o4LlKPggSRy0O2rHrfaNpZf0LZIx/Zp4w9ww5zA84Ccrg==} + '@mantine/modals@8.2.4': + resolution: {integrity: sha512-3o1ZnzrU+Rnp6HkJPHbVllVc9HmTVn4s8UyjGunc9IqnId7wU8GDULpWXNXrBgbvWuJzwIOfGYgw5GCefKUHIA==} peerDependencies: - '@mantine/core': 8.2.2 - '@mantine/hooks': 8.2.2 + '@mantine/core': 8.2.4 + '@mantine/hooks': 8.2.4 react: ^18.x || ^19.x react-dom: ^18.x || ^19.x - '@mantine/notifications@8.2.2': - resolution: {integrity: sha512-XThhzNomF6vQtGqEnjCP0nidP34uSTmNLDkyo7ITqVEe9/KAMqf6PcWZ20xShokVtXGE/L9fq1jOhdCZ9eLVxg==} + '@mantine/notifications@8.2.4': + resolution: {integrity: sha512-CPyYM1Y9oXxlJl5zTJN0mgJGZh8ZrhdIsA4ZktnpmJMKvGHWQdmtzTcPDu4gwzDNdANsN0f9DtMSp68kNiD1xA==} peerDependencies: - '@mantine/core': 8.2.2 - '@mantine/hooks': 8.2.2 + '@mantine/core': 8.2.4 + '@mantine/hooks': 8.2.4 react: ^18.x || ^19.x react-dom: ^18.x || ^19.x - '@mantine/spotlight@8.2.2': - resolution: {integrity: sha512-1DvP/tImclrIOAyD/enypvJ05KBe5ngZNiPwS87cKiNvQ4HzhBTVuf+htTZHz3ZPYU9EiuJxEEHtjZgwphQCqA==} + '@mantine/spotlight@8.2.4': + resolution: {integrity: sha512-p9olpP5OMtuh9QZ5HLQMgQE6YDJx6it31szt2dncBukim83laDwuKBEUkweBAsZqIUnBY1kaTrRKov1ADCa0Ew==} peerDependencies: - '@mantine/core': 8.2.2 - '@mantine/hooks': 8.2.2 + '@mantine/core': 8.2.4 + '@mantine/hooks': 8.2.4 react: ^18.x || ^19.x react-dom: ^18.x || ^19.x - '@mantine/store@8.2.2': - resolution: {integrity: sha512-4uvXAuCxPCOLRBgyy0tuIhm8cWsX8odcxVSc6lNWT5K0rT04gvB96I27MWThyGGLqB/BfON3VcBZ1dIMzt7k7w==} + '@mantine/store@8.2.4': + resolution: {integrity: sha512-NYbhSy6UkVXsCDDHau+ZmGuuLgQ1laNINhKRHYabRvH5aSuU9drbgIlraNgzoF/+LeoTSQ8LylsdWNQRq0hqqA==} peerDependencies: react: ^18.x || ^19.x - '@mantine/tiptap@8.2.2': - resolution: {integrity: sha512-IKFX5OjsVeiffntDdJt/Q/VdKZBc/OTvGBSUZrYZthTOfubCLoQgXDvVhoK75e4WKr8KTkXUrjm37wayL28k5w==} + '@mantine/tiptap@8.2.4': + resolution: {integrity: sha512-MqlJ7mJ3QuT78UfRtsDaDrJuWKPvPJeBuVQnvbboNJDbukb8K8JaGQ+xrnAd5L707IvEDqIlYKjnrKDrJrzR2A==} peerDependencies: - '@mantine/core': 8.2.2 - '@mantine/hooks': 8.2.2 + '@mantine/core': 8.2.4 + '@mantine/hooks': 8.2.4 '@tiptap/extension-link': '>=2.1.12' '@tiptap/react': '>=2.1.12' react: ^18.x || ^19.x @@ -3770,56 +3759,56 @@ packages: '@ndaidong/bellajs@12.0.1': resolution: {integrity: sha512-1iY42uiHz0cxNMbde7O3zVN+ZX1viOOUOBRt6ht6lkRZbSjwOnFV34Zv4URp3hGzEe6L9Byk7BOq/41H0PzAOQ==} - '@next/env@15.4.5': - resolution: {integrity: sha512-ruM+q2SCOVCepUiERoxOmZY9ZVoecR3gcXNwCYZRvQQWRjhOiPJGmQ2fAiLR6YKWXcSAh7G79KEFxN3rwhs4LQ==} + '@next/env@15.4.6': + resolution: {integrity: sha512-yHDKVTcHrZy/8TWhj0B23ylKv5ypocuCwey9ZqPyv4rPdUdRzpGCkSi03t04KBPyU96kxVtUqx6O3nE1kpxASQ==} - '@next/eslint-plugin-next@15.4.5': - resolution: {integrity: sha512-YhbrlbEt0m4jJnXHMY/cCUDBAWgd5SaTa5mJjzOt82QwflAFfW/h3+COp2TfVSzhmscIZ5sg2WXt3MLziqCSCw==} + '@next/eslint-plugin-next@15.4.6': + resolution: {integrity: sha512-2NOu3ln+BTcpnbIDuxx6MNq+pRrCyey4WSXGaJIyt0D2TYicHeO9QrUENNjcf673n3B1s7hsiV5xBYRCK1Q8kA==} - '@next/swc-darwin-arm64@15.4.5': - resolution: {integrity: sha512-84dAN4fkfdC7nX6udDLz9GzQlMUwEMKD7zsseXrl7FTeIItF8vpk1lhLEnsotiiDt+QFu3O1FVWnqwcRD2U3KA==} + '@next/swc-darwin-arm64@15.4.6': + resolution: {integrity: sha512-667R0RTP4DwxzmrqTs4Lr5dcEda9OxuZsVFsjVtxVMVhzSpo6nLclXejJVfQo2/g7/Z9qF3ETDmN3h65mTjpTQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.4.5': - resolution: {integrity: sha512-CL6mfGsKuFSyQjx36p2ftwMNSb8PQog8y0HO/ONLdQqDql7x3aJb/wB+LA651r4we2pp/Ck+qoRVUeZZEvSurA==} + '@next/swc-darwin-x64@15.4.6': + resolution: {integrity: sha512-KMSFoistFkaiQYVQQnaU9MPWtp/3m0kn2Xed1Ces5ll+ag1+rlac20sxG+MqhH2qYWX1O2GFOATQXEyxKiIscg==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.4.5': - resolution: {integrity: sha512-1hTVd9n6jpM/thnDc5kYHD1OjjWYpUJrJxY4DlEacT7L5SEOXIifIdTye6SQNNn8JDZrcN+n8AWOmeJ8u3KlvQ==} + '@next/swc-linux-arm64-gnu@15.4.6': + resolution: {integrity: sha512-PnOx1YdO0W7m/HWFeYd2A6JtBO8O8Eb9h6nfJia2Dw1sRHoHpNf6lN1U4GKFRzRDBi9Nq2GrHk9PF3Vmwf7XVw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.4.5': - resolution: {integrity: sha512-4W+D/nw3RpIwGrqpFi7greZ0hjrCaioGErI7XHgkcTeWdZd146NNu1s4HnaHonLeNTguKnL2Urqvj28UJj6Gqw==} + '@next/swc-linux-arm64-musl@15.4.6': + resolution: {integrity: sha512-XBbuQddtY1p5FGPc2naMO0kqs4YYtLYK/8aPausI5lyOjr4J77KTG9mtlU4P3NwkLI1+OjsPzKVvSJdMs3cFaw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.4.5': - resolution: {integrity: sha512-N6Mgdxe/Cn2K1yMHge6pclffkxzbSGOydXVKYOjYqQXZYjLCfN/CuFkaYDeDHY2VBwSHyM2fUjYBiQCIlxIKDA==} + '@next/swc-linux-x64-gnu@15.4.6': + resolution: {integrity: sha512-+WTeK7Qdw82ez3U9JgD+igBAP75gqZ1vbK6R8PlEEuY0OIe5FuYXA4aTjL811kWPf7hNeslD4hHK2WoM9W0IgA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.4.5': - resolution: {integrity: sha512-YZ3bNDrS8v5KiqgWE0xZQgtXgCTUacgFtnEgI4ccotAASwSvcMPDLua7BWLuTfucoRv6mPidXkITJLd8IdJplQ==} + '@next/swc-linux-x64-musl@15.4.6': + resolution: {integrity: sha512-XP824mCbgQsK20jlXKrUpZoh/iO3vUWhMpxCz8oYeagoiZ4V0TQiKy0ASji1KK6IAe3DYGfj5RfKP6+L2020OQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.4.5': - resolution: {integrity: sha512-9Wr4t9GkZmMNcTVvSloFtjzbH4vtT4a8+UHqDoVnxA5QyfWe6c5flTH1BIWPGNWSUlofc8dVJAE7j84FQgskvQ==} + '@next/swc-win32-arm64-msvc@15.4.6': + resolution: {integrity: sha512-FxrsenhUz0LbgRkNWx6FRRJIPe/MI1JRA4W4EPd5leXO00AZ6YU8v5vfx4MDXTvN77lM/EqsE3+6d2CIeF5NYg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.4.5': - resolution: {integrity: sha512-voWk7XtGvlsP+w8VBz7lqp8Y+dYw/MTI4KeS0gTVtfdhdJ5QwhXLmNrndFOin/MDoCvUaLWMkYKATaCoUkt2/A==} + '@next/swc-win32-x64-msvc@15.4.6': + resolution: {integrity: sha512-T4ufqnZ4u88ZheczkBTtOF+eKaM14V8kbjud/XrAakoM5DKQWjW09vD6B9fsdsWS2T7D5EY31hRHdta7QKWOng==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -4427,21 +4416,21 @@ packages: '@tanstack/query-devtools@5.84.0': resolution: {integrity: sha512-fbF3n+z1rqhvd9EoGp5knHkv3p5B2Zml1yNRjh7sNXklngYI5RVIWUrUjZ1RIcEoscarUb0+bOvIs5x9dwzOXQ==} - '@tanstack/react-query-devtools@5.84.1': - resolution: {integrity: sha512-nle+OQ9B3Z3EG2R3ixvaNcJ6OeqGwmAc5iMDW6Vj+emLZkWRrN3BDsrzZQu414n34lpxplnC7z1jmKuU/scHCQ==} + '@tanstack/react-query-devtools@5.84.2': + resolution: {integrity: sha512-ojJ66QoW9noqK35Lsmfqpfucj6wuOxLL2TYwEwpvU+iUQ5R/7TKpapWvpy9kZyNSl0mxv5mpS+ImfR8aL8/x3g==} peerDependencies: - '@tanstack/react-query': ^5.84.1 + '@tanstack/react-query': ^5.84.2 react: ^18 || ^19 - '@tanstack/react-query-next-experimental@5.84.1': - resolution: {integrity: sha512-W4QVydZx6cLzq5WBdT433B5WY3voUlwLQN8LzsEhD/8M/43onlpGDqyXcvb4uNWms+Mgb/duyVt1+08dd/iolg==} + '@tanstack/react-query-next-experimental@5.84.2': + resolution: {integrity: sha512-VQPWUa89fVPTZPzZO+4G93BQFnnCh4sFdkNAv8K83jNVy1eknzHBCJ25IkiEhnbIfT0qmIwTsu3SAbMGwxTKSw==} peerDependencies: - '@tanstack/react-query': ^5.84.1 + '@tanstack/react-query': ^5.84.2 next: ^13 || ^14 || ^15 react: ^18 || ^19 - '@tanstack/react-query@5.84.1': - resolution: {integrity: sha512-zo7EUygcWJMQfFNWDSG7CBhy8irje/XY0RDVKKV4IQJAysb+ZJkkJPcnQi+KboyGUgT+SQebRFoTqLuTtfoDLw==} + '@tanstack/react-query@5.84.2': + resolution: {integrity: sha512-cZadySzROlD2+o8zIfbD978p0IphuQzRWiiH3I2ugnTmz4jbjc0+TdibpwqxlzynEen8OulgAg+rzdNF37s7XQ==} peerDependencies: react: ^18 || ^19 @@ -4465,11 +4454,11 @@ packages: '@tanstack/virtual-core@3.11.2': resolution: {integrity: sha512-vTtpNt7mKCiZ1pwU9hfKPhpdVO2sVzFQsxoVBGtOSHxlrRRzYr8iQ2TlwbAcRYCcEiZ9ECAM8kBzH0v2+VzfKw==} - '@testcontainers/mysql@11.4.0': - resolution: {integrity: sha512-i6aiaWhGuicckk7MoVX0iDpVdw18voHg+SLqt65beFDi+D+KuL/Lr4qVzrmxLGiffEgsoKYbF/zH3n9pMFQ84w==} + '@testcontainers/mysql@11.5.1': + resolution: {integrity: sha512-znonzVMlcCLQ6t7zDH0TOEcbGkz6iwIk5x5ZP5GqEdN0z3GLUu/jEF7yQUtfCY+PbVnCkigRg4WYS4bt6+zhyA==} - '@testcontainers/redis@11.4.0': - resolution: {integrity: sha512-w+2VpYt5xAEYbsdhITgwDMif+5Atae+q0ifG/ZrSUZXK528CzqsfnxIgwrZWFnLDCqk1mVNgG4mXdD8VDGd38w==} + '@testcontainers/redis@11.5.1': + resolution: {integrity: sha512-ThGaUPUCFW4Vwmx6kfPYhhTQjq/3UXJQrU/xxiYLqgvFJNtvtYlWmzXrwORLhPkkqnoFUnfFaX3u9u1GnrlDkw==} '@tiptap/core@2.26.1': resolution: {integrity: sha512-fymyd/XZvYiHjBoLt1gxs024xP/LY26d43R1vluYq7AHBL/7DE3ywzy+1GEsGyAv5Je2L0KBhNIR/izbq3Kaqg==} @@ -4683,19 +4672,19 @@ packages: tree-sitter: optional: true - '@trpc/client@11.4.3': - resolution: {integrity: sha512-i2suttUCfColktXT8bqex5kHW5jpT15nwUh0hGSDiW1keN621kSUQKcLJ095blqQAUgB+lsmgSqSMmB4L9shQQ==} + '@trpc/client@11.4.4': + resolution: {integrity: sha512-86OZl+Y+Xlt9ITGlhCMImERcsWCOrVzpNuzg3XBlsDSmSs9NGsghKjeCpJQlE36XaG3aze+o9pRukiYYvBqxgQ==} peerDependencies: - '@trpc/server': 11.4.3 + '@trpc/server': 11.4.4 typescript: '>=5.7.2' - '@trpc/next@11.4.3': - resolution: {integrity: sha512-/AqPpzlrQy8ylLEdBAemRU1xmdqJVaXrXI/ZUYl3Oz1Id36gvGMdn5uxm0wgKPpZneM2EICvYcrsLSsdtddW4w==} + '@trpc/next@11.4.4': + resolution: {integrity: sha512-BTmMHv7whqSf6oE7qAKPCHWNZY9kqEi0inWW690bbs8FJ12A7S5nwIAbzyILfA0S5IJfMFTPJ/ueX2lCMYK67A==} peerDependencies: '@tanstack/react-query': ^5.59.15 - '@trpc/client': 11.4.3 - '@trpc/react-query': 11.4.3 - '@trpc/server': 11.4.3 + '@trpc/client': 11.4.4 + '@trpc/react-query': 11.4.4 + '@trpc/server': 11.4.4 next: '*' react: '>=16.8.0' react-dom: '>=16.8.0' @@ -4706,27 +4695,27 @@ packages: '@trpc/react-query': optional: true - '@trpc/react-query@11.4.3': - resolution: {integrity: sha512-z+jhAiOBD22NNhHtvF0iFp9hO36YFA7M8AiUu/XtNmMxyLd3Y9/d1SMjMwlTdnGqxEGPo41VEWBrdhDUGtUuHg==} + '@trpc/react-query@11.4.4': + resolution: {integrity: sha512-syXx1JLSERAHWh8BtBZsbv2PIt2nfvO1Sd6C6vHzNO8wAHxpcmq9HyEdrfi+5SfeRfPCJc/ZPCN2wVv98T+big==} peerDependencies: '@tanstack/react-query': ^5.80.3 - '@trpc/client': 11.4.3 - '@trpc/server': 11.4.3 + '@trpc/client': 11.4.4 + '@trpc/server': 11.4.4 react: '>=18.2.0' react-dom: '>=18.2.0' typescript: '>=5.7.2' - '@trpc/server@11.4.3': - resolution: {integrity: sha512-wnWq3wiLlMOlYkaIZz+qbuYA5udPTLS4GVVRyFkr6aT83xpdCHyVtURT+u4hSoIrOXQM9OPCNXSXsAujWZDdaw==} + '@trpc/server@11.4.4': + resolution: {integrity: sha512-VkJb2xnb4rCynuwlCvgPBh5aM+Dco6fBBIo6lWAdJJRYVwtyE5bxNZBgUvRRz/cFSEAy0vmzLxF7aABDJfK5Rg==} peerDependencies: typescript: '>=5.7.2' - '@trpc/tanstack-react-query@11.4.3': - resolution: {integrity: sha512-aYPp12wE9IrakccGWoQU/waZuWr3FLw9RtagsqJmX9NKHpQOVzoDvHA1W0amwyTQSAfL98Bn5rWmD7KTdr5AWg==} + '@trpc/tanstack-react-query@11.4.4': + resolution: {integrity: sha512-Rf7jhPfwAHqmQdQlxTiMolNRon85bPEsBNa5JGpjSvhrTmiaFu5UEhEwHDF2myL7IRYxuYHLc4H0bQ+19qjdHQ==} peerDependencies: '@tanstack/react-query': ^5.80.3 - '@trpc/client': 11.4.3 - '@trpc/server': 11.4.3 + '@trpc/client': 11.4.4 + '@trpc/server': 11.4.4 react: '>=18.2.0' react-dom: '>=18.2.0' typescript: '>=5.7.2' @@ -4922,8 +4911,8 @@ packages: '@types/node@18.19.50': resolution: {integrity: sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==} - '@types/node@22.17.0': - resolution: {integrity: sha512-bbAKTCqX5aNVryi7qXVMi+OkB3w/OyblodicMbvE38blyAz7GxXf6XYhklokijuPwwVg9sDLKRxt0ZHXQwZVfQ==} + '@types/node@22.17.1': + resolution: {integrity: sha512-y3tBaz+rjspDTylNjAX37jEC3TETEFGNJL6uQDxwF9/8GLLIjW1rvVHlynyuUKMnMr1Roq8jOv3vkopBjC4/VA==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -5002,63 +4991,63 @@ packages: '@types/xml2js@0.4.14': resolution: {integrity: sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==} - '@typescript-eslint/eslint-plugin@8.38.0': - resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==} + '@typescript-eslint/eslint-plugin@8.39.0': + resolution: {integrity: sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.38.0 + '@typescript-eslint/parser': ^8.39.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.38.0': - resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} + '@typescript-eslint/parser@8.39.0': + resolution: {integrity: sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.38.0': - resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} + '@typescript-eslint/project-service@8.39.0': + resolution: {integrity: sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.38.0': - resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} + '@typescript-eslint/scope-manager@8.39.0': + resolution: {integrity: sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.38.0': - resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} + '@typescript-eslint/tsconfig-utils@8.39.0': + resolution: {integrity: sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.38.0': - resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==} + '@typescript-eslint/type-utils@8.39.0': + resolution: {integrity: sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.38.0': - resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} + '@typescript-eslint/types@8.39.0': + resolution: {integrity: sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.38.0': - resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} + '@typescript-eslint/typescript-estree@8.39.0': + resolution: {integrity: sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.38.0': - resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==} + '@typescript-eslint/utils@8.39.0': + resolution: {integrity: sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.38.0': - resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} + '@typescript-eslint/visitor-keys@8.39.0': + resolution: {integrity: sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@umami/node@0.4.0': @@ -5067,8 +5056,8 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@videojs/http-streaming@3.17.0': - resolution: {integrity: sha512-Ch1P3tvvIEezeZXyK11UfWgp4cWKX4vIhZ30baN/lRinqdbakZ5hiAI3pGjRy3d+q/Epyc8Csz5xMdKNNGYpcw==} + '@videojs/http-streaming@3.17.2': + resolution: {integrity: sha512-VBQ3W4wnKnVKb/limLdtSD2rAd5cmHN70xoMf4OmuDd0t2kfJX04G+sfw6u2j8oOm2BXYM9E1f4acHruqKnM1g==} engines: {node: '>=8', npm: '>=5'} peerDependencies: video.js: ^8.19.0 @@ -7735,13 +7724,19 @@ packages: jose@6.0.8: resolution: {integrity: sha512-EyUPtOKyTYq+iMOszO42eobQllaIjJnwkZ2U93aJzNyPibCy7CEvT9UQnaCVB51IAd49gbNdCew1c0LcLTCB2g==} - jotai@2.12.5: - resolution: {integrity: sha512-G8m32HW3lSmcz/4mbqx0hgJIQ0ekndKWiYP7kWVKi0p6saLXdSoye+FZiOFyonnd7Q482LCzm8sMDl7Ar1NWDw==} + jotai@2.13.0: + resolution: {integrity: sha512-H43zXdanNTdpfOEJ4NVbm4hgmrctpXLZagjJNcqAywhUv+sTE7esvFjwm5oBg/ywT9Qw63lIkM6fjrhFuW8UDg==} engines: {node: '>=12.20.0'} peerDependencies: + '@babel/core': '>=7.0.0' + '@babel/template': '>=7.0.0' '@types/react': '>=17.0.0' react: '>=17.0.0' peerDependenciesMeta: + '@babel/core': + optional: true + '@babel/template': + optional: true '@types/react': optional: true react: @@ -8342,8 +8337,8 @@ packages: typescript: optional: true - next@15.4.5: - resolution: {integrity: sha512-nJ4v+IO9CPmbmcvsPebIoX3Q+S7f6Fu08/dEWu0Ttfa+wVwQRh9epcmsyCPjmL2b8MxC+CkBR97jgDhUUztI3g==} + next@15.4.6: + resolution: {integrity: sha512-us++E/Q80/8+UekzB3SAGs71AlLDsadpFMXVNM/uQ0BMwsh9m3mr0UNQIfjKed8vpWXsASe+Qifrnu1oLIcKEQ==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -9091,10 +9086,6 @@ packages: pure-rand@6.1.0: resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} - qs@6.13.1: - resolution: {integrity: sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==} - engines: {node: '>=0.6'} - qs@6.14.0: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} @@ -9544,8 +9535,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass@1.89.2: - resolution: {integrity: sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==} + sass@1.90.0: + resolution: {integrity: sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==} engines: {node: '>=14.0.0'} hasBin: true @@ -10075,8 +10066,8 @@ packages: resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} - testcontainers@11.4.0: - resolution: {integrity: sha512-eX5nc/Fi5I0LHqwxw6BuUvWNfdl+M2sKX6fX/47RP89Xs5nU6smd0iD7dpFogxy8/wACjlucLoutJc7b5mtq7w==} + testcontainers@11.5.1: + resolution: {integrity: sha512-YSSP4lSJB8498zTeu4HYTZYgSky54ozBmIDdC8PFU5inj+vBo5hPpilhcYTgmsqsYjrXOJGV7jl0MWByS7GwuA==} text-decoder@1.2.0: resolution: {integrity: sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==} @@ -10156,6 +10147,10 @@ packages: resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} engines: {node: '>=14.14'} + tmp@0.2.4: + resolution: {integrity: sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==} + engines: {node: '>=14.14'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -10218,8 +10213,8 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - trpc-to-openapi@2.3.2: - resolution: {integrity: sha512-uDZou+5a+H77yhiqfzVRBXzTSX8/mQUGeFpr8+VtZmpzUBOmv5XYbyEtWpG7fOdGWZkB99wuuKeWUwNwwOGaXQ==} + trpc-to-openapi@2.4.0: + resolution: {integrity: sha512-B6xrwOC3Ab0q1BWD/QbJzK4OUpCLoT02hAzshSUXEuIZGcJZkMG/OJ4/3gd20dyr8aI+CrFirpWKRIo7JmHbMQ==} peerDependencies: '@trpc/server': ^11.1.0 zod: ^3.23.8 @@ -10397,12 +10392,12 @@ packages: types-ramda@0.30.1: resolution: {integrity: sha512-1HTsf5/QVRmLzcGfldPFvkVsAdi1db1BBKzi7iW3KBUlOICg/nKnFS+jGqDJS3YD8VsWbAh7JiHeBvbsw8RPxA==} - typescript-eslint@8.38.0: - resolution: {integrity: sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==} + typescript-eslint@8.39.0: + resolution: {integrity: sha512-lH8FvtdtzcHJCkMOKnN73LIn6SLTpoojgJqDAxPm1jCR14eWSGPX8ul/gggBdPMk/d5+u9V854vTYQ8T5jF/1Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' typescript@5.9.2: resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} @@ -10646,8 +10641,8 @@ packages: victory-vendor@36.9.2: resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==} - video.js@8.23.3: - resolution: {integrity: sha512-Toe0VLlDZcUhiaWfcePS1OEdT3ATfktm0hk/PELfD7zUoPDHeT+cJf/wZmCy5M5eGVwtGUg25RWPCj1L/1XufA==} + video.js@8.23.4: + resolution: {integrity: sha512-qI0VTlYmKzEqRsz1Nppdfcaww4RSxZAq77z2oNSl3cNg2h6do5C8Ffl0KqWQ1OpD8desWXsCrde7tKJ9gGTEyQ==} videojs-contrib-quality-levels@4.1.0: resolution: {integrity: sha512-TfrXJJg1Bv4t6TOCMEVMwF/CoS8iENYsWNKip8zfhB5kTcegiFYezEA0eHAJPU64ZC8NQbxQgOwAsYU8VXbOWA==} @@ -11128,14 +11123,6 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 - '@babel/generator@7.27.5': - dependencies: - '@babel/parser': 7.27.5 - '@babel/types': 7.27.6 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.0.2 - '@babel/generator@7.28.0': dependencies: '@babel/parser': 7.28.0 @@ -11164,7 +11151,7 @@ snapshots: '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.28.0 '@babel/types': 7.28.1 transitivePeerDependencies: - supports-color @@ -11181,7 +11168,7 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.28.0 transitivePeerDependencies: - supports-color @@ -11222,10 +11209,6 @@ snapshots: dependencies: '@babel/types': 7.28.1 - '@babel/parser@7.27.5': - dependencies: - '@babel/types': 7.27.6 - '@babel/parser@7.28.0': dependencies: '@babel/types': 7.28.1 @@ -11263,7 +11246,7 @@ snapshots: '@babel/traverse@7.25.9': dependencies: '@babel/code-frame': 7.26.2 - '@babel/generator': 7.27.5 + '@babel/generator': 7.28.0 '@babel/parser': 7.28.0 '@babel/template': 7.25.9 '@babel/types': 7.28.1 @@ -11272,18 +11255,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/traverse@7.27.4': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.27.5 - '@babel/parser': 7.27.5 - '@babel/template': 7.27.2 - '@babel/types': 7.27.6 - debug: 4.4.1 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - '@babel/traverse@7.28.0': dependencies: '@babel/code-frame': 7.27.1 @@ -11301,11 +11272,6 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/types@7.27.6': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/types@7.28.1': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -11871,23 +11837,23 @@ snapshots: dependencies: tslib: 2.8.1 - '@gitbeaker/core@43.3.0': + '@gitbeaker/core@43.4.0': dependencies: - '@gitbeaker/requester-utils': 43.3.0 + '@gitbeaker/requester-utils': 43.4.0 qs: 6.14.0 xcase: 2.0.1 - '@gitbeaker/requester-utils@43.3.0': + '@gitbeaker/requester-utils@43.4.0': dependencies: picomatch-browser: 2.2.6 qs: 6.14.0 rate-limiter-flexible: 4.0.1 xcase: 2.0.1 - '@gitbeaker/rest@43.3.0': + '@gitbeaker/rest@43.4.0': dependencies: - '@gitbeaker/core': 43.3.0 - '@gitbeaker/requester-utils': 43.3.0 + '@gitbeaker/core': 43.4.0 + '@gitbeaker/requester-utils': 43.4.0 '@grpc/grpc-js@1.12.5': dependencies: @@ -11935,14 +11901,14 @@ snapshots: '@humanwhocodes/retry@0.4.2': {} - '@ianvs/prettier-plugin-sort-imports@4.5.1(prettier@3.6.2)': + '@ianvs/prettier-plugin-sort-imports@4.6.1(prettier@3.6.2)': dependencies: - '@babel/generator': 7.27.5 - '@babel/parser': 7.27.5 - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.6 + '@babel/generator': 7.28.0 + '@babel/parser': 7.28.0 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.1 prettier: 3.6.2 - semver: 7.7.1 + semver: 7.7.2 transitivePeerDependencies: - supports-color @@ -12064,13 +12030,13 @@ snapshots: dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.29 '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.29 '@jridgewell/resolve-uri@3.1.2': {} @@ -12111,7 +12077,7 @@ snapshots: '@kubernetes/client-node@1.3.0': dependencies: '@types/js-yaml': 4.0.9 - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/node-fetch': 2.6.12 '@types/stream-buffers': 3.0.7 form-data: 4.0.1 @@ -12144,22 +12110,22 @@ snapshots: js-base64: 3.7.7 optional: true - '@mantine/charts@8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(recharts@2.15.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))': + '@mantine/charts@8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(recharts@2.15.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))': dependencies: - '@mantine/core': 8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@mantine/hooks': 8.2.2(react@19.1.1) + '@mantine/core': 8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mantine/hooks': 8.2.4(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) recharts: 2.15.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@mantine/colors-generator@8.2.2(chroma-js@3.1.2)': + '@mantine/colors-generator@8.2.4(chroma-js@3.1.2)': dependencies: chroma-js: 3.1.2 - '@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@floating-ui/react': 0.26.28(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@mantine/hooks': 8.2.2(react@19.1.1) + '@mantine/hooks': 8.2.4(react@19.1.1) clsx: 2.1.1 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) @@ -12170,65 +12136,65 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@mantine/dates@8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@mantine/dates@8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@mantine/core': 8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@mantine/hooks': 8.2.2(react@19.1.1) + '@mantine/core': 8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mantine/hooks': 8.2.4(react@19.1.1) clsx: 2.1.1 dayjs: 1.11.13 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - '@mantine/dropzone@8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@mantine/dropzone@8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@mantine/core': 8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@mantine/hooks': 8.2.2(react@19.1.1) + '@mantine/core': 8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mantine/hooks': 8.2.4(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) react-dropzone: 14.3.8(react@19.1.1) - '@mantine/form@8.2.2(react@19.1.1)': + '@mantine/form@8.2.4(react@19.1.1)': dependencies: fast-deep-equal: 3.1.3 klona: 2.0.6 react: 19.1.1 - '@mantine/hooks@8.2.2(react@19.1.1)': + '@mantine/hooks@8.2.4(react@19.1.1)': dependencies: react: 19.1.1 - '@mantine/modals@8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@mantine/modals@8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@mantine/core': 8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@mantine/hooks': 8.2.2(react@19.1.1) + '@mantine/core': 8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mantine/hooks': 8.2.4(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - '@mantine/notifications@8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@mantine/notifications@8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@mantine/core': 8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@mantine/hooks': 8.2.2(react@19.1.1) - '@mantine/store': 8.2.2(react@19.1.1) + '@mantine/core': 8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mantine/hooks': 8.2.4(react@19.1.1) + '@mantine/store': 8.2.4(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) react-transition-group: 4.4.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@mantine/spotlight@8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@mantine/spotlight@8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@mantine/core': 8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@mantine/hooks': 8.2.2(react@19.1.1) - '@mantine/store': 8.2.2(react@19.1.1) + '@mantine/core': 8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mantine/hooks': 8.2.4(react@19.1.1) + '@mantine/store': 8.2.4(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) - '@mantine/store@8.2.2(react@19.1.1)': + '@mantine/store@8.2.4(react@19.1.1)': dependencies: react: 19.1.1 - '@mantine/tiptap@8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(@tiptap/extension-link@2.26.1(@tiptap/core@2.26.1(@tiptap/pm@2.26.1))(@tiptap/pm@2.26.1))(@tiptap/react@2.26.1(@tiptap/core@2.26.1(@tiptap/pm@2.26.1))(@tiptap/pm@2.26.1)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@mantine/tiptap@8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(@tiptap/extension-link@2.26.1(@tiptap/core@2.26.1(@tiptap/pm@2.26.1))(@tiptap/pm@2.26.1))(@tiptap/react@2.26.1(@tiptap/core@2.26.1(@tiptap/pm@2.26.1))(@tiptap/pm@2.26.1)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@mantine/core': 8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@mantine/hooks': 8.2.2(react@19.1.1) + '@mantine/core': 8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mantine/hooks': 8.2.4(react@19.1.1) '@tiptap/extension-link': 2.26.1(@tiptap/core@2.26.1(@tiptap/pm@2.26.1))(@tiptap/pm@2.26.1) '@tiptap/react': 2.26.1(@tiptap/core@2.26.1(@tiptap/pm@2.26.1))(@tiptap/pm@2.26.1)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 @@ -12289,34 +12255,34 @@ snapshots: '@ndaidong/bellajs@12.0.1': {} - '@next/env@15.4.5': {} + '@next/env@15.4.6': {} - '@next/eslint-plugin-next@15.4.5': + '@next/eslint-plugin-next@15.4.6': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.4.5': + '@next/swc-darwin-arm64@15.4.6': optional: true - '@next/swc-darwin-x64@15.4.5': + '@next/swc-darwin-x64@15.4.6': optional: true - '@next/swc-linux-arm64-gnu@15.4.5': + '@next/swc-linux-arm64-gnu@15.4.6': optional: true - '@next/swc-linux-arm64-musl@15.4.5': + '@next/swc-linux-arm64-musl@15.4.6': optional: true - '@next/swc-linux-x64-gnu@15.4.5': + '@next/swc-linux-x64-gnu@15.4.6': optional: true - '@next/swc-linux-x64-musl@15.4.5': + '@next/swc-linux-x64-musl@15.4.6': optional: true - '@next/swc-win32-arm64-msvc@15.4.5': + '@next/swc-win32-arm64-msvc@15.4.6': optional: true - '@next/swc-win32-x64-msvc@15.4.5': + '@next/swc-win32-x64-msvc@15.4.6': optional: true '@noble/hashes@1.5.0': {} @@ -13170,19 +13136,19 @@ snapshots: '@tanstack/query-devtools@5.84.0': {} - '@tanstack/react-query-devtools@5.84.1(@tanstack/react-query@5.84.1(react@19.1.1))(react@19.1.1)': + '@tanstack/react-query-devtools@5.84.2(@tanstack/react-query@5.84.2(react@19.1.1))(react@19.1.1)': dependencies: '@tanstack/query-devtools': 5.84.0 - '@tanstack/react-query': 5.84.1(react@19.1.1) + '@tanstack/react-query': 5.84.2(react@19.1.1) react: 19.1.1 - '@tanstack/react-query-next-experimental@5.84.1(@tanstack/react-query@5.84.1(react@19.1.1))(next@15.4.5(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2))(react@19.1.1)': + '@tanstack/react-query-next-experimental@5.84.2(@tanstack/react-query@5.84.2(react@19.1.1))(next@15.4.6(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react@19.1.1)': dependencies: - '@tanstack/react-query': 5.84.1(react@19.1.1) - next: 15.4.5(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2) + '@tanstack/react-query': 5.84.2(react@19.1.1) + next: 15.4.6(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0) react: 19.1.1 - '@tanstack/react-query@5.84.1(react@19.1.1)': + '@tanstack/react-query@5.84.2(react@19.1.1)': dependencies: '@tanstack/query-core': 5.83.1 react: 19.1.1 @@ -13203,16 +13169,16 @@ snapshots: '@tanstack/virtual-core@3.11.2': {} - '@testcontainers/mysql@11.4.0': + '@testcontainers/mysql@11.5.1': dependencies: - testcontainers: 11.4.0 + testcontainers: 11.5.1 transitivePeerDependencies: - bare-buffer - supports-color - '@testcontainers/redis@11.4.0': + '@testcontainers/redis@11.5.1': dependencies: - testcontainers: 11.4.0 + testcontainers: 11.5.1 transitivePeerDependencies: - bare-buffer - supports-color @@ -13439,41 +13405,41 @@ snapshots: tree-sitter: 0.22.4 optional: true - '@trpc/client@11.4.3(@trpc/server@11.4.3(typescript@5.9.2))(typescript@5.9.2)': + '@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.9.2))(typescript@5.9.2)': dependencies: - '@trpc/server': 11.4.3(typescript@5.9.2) + '@trpc/server': 11.4.4(typescript@5.9.2) typescript: 5.9.2 - '@trpc/next@11.4.3(@tanstack/react-query@5.84.1(react@19.1.1))(@trpc/client@11.4.3(@trpc/server@11.4.3(typescript@5.9.2))(typescript@5.9.2))(@trpc/react-query@11.4.3(@tanstack/react-query@5.84.1(react@19.1.1))(@trpc/client@11.4.3(@trpc/server@11.4.3(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.4.3(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(@trpc/server@11.4.3(typescript@5.9.2))(next@15.4.5(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': + '@trpc/next@11.4.4(@tanstack/react-query@5.84.2(react@19.1.1))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.9.2))(typescript@5.9.2))(@trpc/react-query@11.4.4(@tanstack/react-query@5.84.2(react@19.1.1))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.4.4(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(@trpc/server@11.4.4(typescript@5.9.2))(next@15.4.6(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': dependencies: - '@trpc/client': 11.4.3(@trpc/server@11.4.3(typescript@5.9.2))(typescript@5.9.2) - '@trpc/server': 11.4.3(typescript@5.9.2) - next: 15.4.5(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2) + '@trpc/client': 11.4.4(@trpc/server@11.4.4(typescript@5.9.2))(typescript@5.9.2) + '@trpc/server': 11.4.4(typescript@5.9.2) + next: 15.4.6(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) typescript: 5.9.2 optionalDependencies: - '@tanstack/react-query': 5.84.1(react@19.1.1) - '@trpc/react-query': 11.4.3(@tanstack/react-query@5.84.1(react@19.1.1))(@trpc/client@11.4.3(@trpc/server@11.4.3(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.4.3(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@tanstack/react-query': 5.84.2(react@19.1.1) + '@trpc/react-query': 11.4.4(@tanstack/react-query@5.84.2(react@19.1.1))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.4.4(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) - '@trpc/react-query@11.4.3(@tanstack/react-query@5.84.1(react@19.1.1))(@trpc/client@11.4.3(@trpc/server@11.4.3(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.4.3(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': + '@trpc/react-query@11.4.4(@tanstack/react-query@5.84.2(react@19.1.1))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.4.4(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': dependencies: - '@tanstack/react-query': 5.84.1(react@19.1.1) - '@trpc/client': 11.4.3(@trpc/server@11.4.3(typescript@5.9.2))(typescript@5.9.2) - '@trpc/server': 11.4.3(typescript@5.9.2) + '@tanstack/react-query': 5.84.2(react@19.1.1) + '@trpc/client': 11.4.4(@trpc/server@11.4.4(typescript@5.9.2))(typescript@5.9.2) + '@trpc/server': 11.4.4(typescript@5.9.2) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) typescript: 5.9.2 - '@trpc/server@11.4.3(typescript@5.9.2)': + '@trpc/server@11.4.4(typescript@5.9.2)': dependencies: typescript: 5.9.2 - '@trpc/tanstack-react-query@11.4.3(@tanstack/react-query@5.84.1(react@19.1.1))(@trpc/client@11.4.3(@trpc/server@11.4.3(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.4.3(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': + '@trpc/tanstack-react-query@11.4.4(@tanstack/react-query@5.84.2(react@19.1.1))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.4.4(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': dependencies: - '@tanstack/react-query': 5.84.1(react@19.1.1) - '@trpc/client': 11.4.3(@trpc/server@11.4.3(typescript@5.9.2))(typescript@5.9.2) - '@trpc/server': 11.4.3(typescript@5.9.2) + '@tanstack/react-query': 5.84.2(react@19.1.1) + '@trpc/client': 11.4.4(@trpc/server@11.4.4(typescript@5.9.2))(typescript@5.9.2) + '@trpc/server': 11.4.4(typescript@5.9.2) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) typescript: 5.9.2 @@ -13488,7 +13454,7 @@ snapshots: '@tsconfig/svelte@1.0.13': {} - '@turbo/gen@2.5.5(@types/node@22.17.0)(typescript@5.9.2)': + '@turbo/gen@2.5.5(@types/node@22.17.1)(typescript@5.9.2)': dependencies: '@turbo/workspaces': 2.5.5 commander: 10.0.1 @@ -13498,7 +13464,7 @@ snapshots: node-plop: 0.26.3 picocolors: 1.0.1 proxy-agent: 6.5.0 - ts-node: 10.9.2(@types/node@22.17.0)(typescript@5.9.2) + ts-node: 10.9.2(@types/node@22.17.1)(typescript@5.9.2) update-check: 1.5.4 validate-npm-package-name: 5.0.1 transitivePeerDependencies: @@ -13524,18 +13490,18 @@ snapshots: '@types/adm-zip@0.5.7': dependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/asn1@0.2.4': dependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/aws-lambda@8.10.146': {} '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.27.5 - '@babel/types': 7.27.6 + '@babel/parser': 7.28.0 + '@babel/types': 7.28.1 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 @@ -13555,16 +13521,16 @@ snapshots: '@types/bcrypt@6.0.0': dependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/better-sqlite3@7.6.13': dependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/chai@5.2.2': dependencies: @@ -13574,7 +13540,7 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/cookie@0.4.1': {} @@ -13583,11 +13549,11 @@ snapshots: '@types/connect': 3.4.38 '@types/express': 4.17.21 '@types/keygrip': 1.0.6 - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/cors@2.8.17': dependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/css-font-loading-module@0.0.7': {} @@ -13625,13 +13591,13 @@ snapshots: '@types/docker-modem@3.0.6': dependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/ssh2': 1.15.1 '@types/dockerode@3.3.42': dependencies: '@types/docker-modem': 3.0.6 - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/ssh2': 1.15.1 '@types/estree-jsx@1.0.5': @@ -13644,7 +13610,7 @@ snapshots: '@types/express-serve-static-core@4.19.5': dependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/qs': 6.9.16 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -13659,7 +13625,7 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/hast@2.3.10': dependencies: @@ -13707,7 +13673,7 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 form-data: 4.0.1 '@types/node-unifi@2.5.1(patch_hash=5e6ae51e2a17a7f9729bfa30b0eb3d0842a5810ac6db47603ab4a6efa1ed84c5)': @@ -13718,7 +13684,7 @@ snapshots: dependencies: undici-types: 5.26.5 - '@types/node@22.17.0': + '@types/node@22.17.1': dependencies: undici-types: 6.21.0 @@ -13747,21 +13713,21 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/send': 0.17.4 '@types/ssh2-streams@0.1.12': dependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/ssh2@0.5.52': dependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/ssh2-streams': 0.1.12 '@types/ssh2@1.15.1': @@ -13770,7 +13736,7 @@ snapshots: '@types/stream-buffers@3.0.7': dependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/swagger-ui-react@5.18.0': dependencies: @@ -13778,7 +13744,7 @@ snapshots: '@types/through@0.0.33': dependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/tinycolor2@1.4.6': {} @@ -13797,20 +13763,20 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@types/xml2js@0.4.14': dependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 - '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2))(eslint@9.32.0)(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.39.0(@typescript-eslint/parser@8.39.0(eslint@9.32.0)(typescript@5.9.2))(eslint@9.32.0)(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/parser': 8.39.0(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/type-utils': 8.39.0(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.39.0 eslint: 9.32.0 graphemer: 1.4.0 ignore: 7.0.4 @@ -13820,41 +13786,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2)': + '@typescript-eslint/parser@8.39.0(eslint@9.32.0)(typescript@5.9.2)': dependencies: - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.39.0 debug: 4.4.1 eslint: 9.32.0 typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.38.0(typescript@5.9.2)': + '@typescript-eslint/project-service@8.39.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) - '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 debug: 4.4.1 typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.38.0': + '@typescript-eslint/scope-manager@8.39.0': dependencies: - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/visitor-keys': 8.39.0 - '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.39.0(typescript@5.9.2)': dependencies: typescript: 5.9.2 - '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0)(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.39.0(eslint@9.32.0)(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0)(typescript@5.9.2) debug: 4.4.1 eslint: 9.32.0 ts-api-utils: 2.1.0(typescript@5.9.2) @@ -13862,14 +13828,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.38.0': {} + '@typescript-eslint/types@8.39.0': {} - '@typescript-eslint/typescript-estree@8.38.0(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.39.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/project-service': 8.38.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/project-service': 8.39.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/visitor-keys': 8.39.0 debug: 4.4.1 fast-glob: 3.3.2 is-glob: 4.0.3 @@ -13880,27 +13846,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.38.0(eslint@9.32.0)(typescript@5.9.2)': + '@typescript-eslint/utils@8.39.0(eslint@9.32.0)(typescript@5.9.2)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) eslint: 9.32.0 typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.38.0': + '@typescript-eslint/visitor-keys@8.39.0': dependencies: - '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/types': 8.39.0 eslint-visitor-keys: 4.2.1 '@umami/node@0.4.0': {} '@ungap/structured-clone@1.3.0': {} - '@videojs/http-streaming@3.17.0(video.js@8.23.3)': + '@videojs/http-streaming@3.17.2(video.js@8.23.4)': dependencies: '@babel/runtime': 7.25.6 '@videojs/vhs-utils': 4.1.1 @@ -13909,7 +13875,7 @@ snapshots: m3u8-parser: 7.2.0 mpd-parser: 1.3.1 mux.js: 7.1.0 - video.js: 8.23.3 + video.js: 8.23.4 '@videojs/vhs-utils@4.0.0': dependencies: @@ -13928,7 +13894,7 @@ snapshots: global: 4.4.0 is-function: 1.0.2 - '@vitejs/plugin-react@4.7.0(vite@5.4.5(@types/node@22.17.0)(sass@1.89.2)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0))': + '@vitejs/plugin-react@4.7.0(vite@5.4.5(@types/node@22.17.1)(sass@1.90.0)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.0) @@ -13936,7 +13902,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 5.4.5(@types/node@22.17.0)(sass@1.89.2)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0) + vite: 5.4.5(@types/node@22.17.1)(sass@1.90.0)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0) transitivePeerDependencies: - supports-color @@ -13955,7 +13921,7 @@ snapshots: std-env: 3.9.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.0)(@vitest/ui@3.2.4)(jsdom@26.1.0)(sass@1.89.2)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.1)(@vitest/ui@3.2.4)(jsdom@26.1.0)(sass@1.90.0)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0) transitivePeerDependencies: - supports-color @@ -13967,13 +13933,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@5.4.5(@types/node@22.17.0)(sass@1.89.2)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0))': + '@vitest/mocker@3.2.4(vite@5.4.5(@types/node@22.17.1)(sass@1.90.0)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 5.4.5(@types/node@22.17.0)(sass@1.89.2)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0) + vite: 5.4.5(@types/node@22.17.1)(sass@1.90.0)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0) '@vitest/pretty-format@3.2.4': dependencies: @@ -14004,7 +13970,7 @@ snapshots: sirv: 3.0.1 tinyglobby: 0.2.14 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.0)(@vitest/ui@3.2.4)(jsdom@26.1.0)(sass@1.89.2)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.1)(@vitest/ui@3.2.4)(jsdom@26.1.0)(sass@1.90.0)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0) '@vitest/utils@3.2.4': dependencies: @@ -14765,7 +14731,7 @@ snapshots: dependencies: '@hapi/bourne': 3.0.0 inflation: 2.1.0 - qs: 6.13.1 + qs: 6.14.0 raw-body: 2.5.2 type-is: 1.6.18 @@ -14872,7 +14838,7 @@ snapshots: conventional-commits-filter: 5.0.0 handlebars: 4.7.8 meow: 13.2.0 - semver: 7.7.1 + semver: 7.7.2 conventional-commits-filter@5.0.0: {} @@ -15315,7 +15281,7 @@ snapshots: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.17 - '@types/node': 22.17.0 + '@types/node': 22.17.1 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -15726,17 +15692,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.32.0): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.39.0(eslint@9.32.0)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.32.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/parser': 8.39.0(eslint@9.32.0)(typescript@5.9.2) eslint: 9.32.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2))(eslint@9.32.0): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.39.0(eslint@9.32.0)(typescript@5.9.2))(eslint@9.32.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -15747,7 +15713,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.32.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.32.0) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.39.0(eslint@9.32.0)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.32.0) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -15759,7 +15725,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/parser': 8.39.0(eslint@9.32.0)(typescript@5.9.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -17014,14 +16980,23 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 merge-stream: 2.0.0 supports-color: 8.1.1 jose@6.0.8: {} - jotai@2.12.5(@types/react@19.1.9)(react@19.1.1): + jotai@2.13.0(@babel/core@7.26.0)(@babel/template@7.27.2)(@types/react@19.1.9)(react@19.1.1): optionalDependencies: + '@babel/core': 7.26.0 + '@babel/template': 7.27.2 + '@types/react': 19.1.9 + react: 19.1.1 + + jotai@2.13.0(@babel/core@7.28.0)(@babel/template@7.27.2)(@types/react@19.1.9)(react@19.1.1): + optionalDependencies: + '@babel/core': 7.28.0 + '@babel/template': 7.27.2 '@types/react': 19.1.9 react: 19.1.1 @@ -17287,8 +17262,8 @@ snapshots: magicast@0.3.5: dependencies: - '@babel/parser': 7.27.5 - '@babel/types': 7.27.6 + '@babel/parser': 7.28.0 + '@babel/types': 7.28.1 source-map-js: 1.2.1 make-dir@3.1.0: @@ -17301,11 +17276,11 @@ snapshots: make-error@1.3.6: {} - mantine-react-table@2.0.0-beta.9(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/dates@8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(@tabler/icons-react@3.34.1(react@19.1.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + mantine-react-table@2.0.0-beta.9(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/dates@8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(@tabler/icons-react@3.34.1(react@19.1.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - '@mantine/core': 8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@mantine/dates': 8.2.2(@mantine/core@8.2.2(@mantine/hooks@8.2.2(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.2(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@mantine/hooks': 8.2.2(react@19.1.1) + '@mantine/core': 8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mantine/dates': 8.2.4(@mantine/core@8.2.4(@mantine/hooks@8.2.4(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mantine/hooks@8.2.4(react@19.1.1))(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mantine/hooks': 8.2.4(react@19.1.1) '@tabler/icons-react': 3.34.1(react@19.1.1) '@tanstack/match-sorter-utils': 8.19.4 '@tanstack/react-table': 8.20.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -17705,25 +17680,25 @@ snapshots: netmask@2.0.2: {} - next-auth@5.0.0-beta.29(next@15.4.5(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2))(react@19.1.1): + next-auth@5.0.0-beta.29(next@15.4.6(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react@19.1.1): dependencies: '@auth/core': 0.40.0 - next: 15.4.5(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2) + next: 15.4.6(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0) react: 19.1.1 - next-intl@4.3.4(next@15.4.5(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2))(react@19.1.1)(typescript@5.9.2): + next-intl@4.3.4(next@15.4.6(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0))(react@19.1.1)(typescript@5.9.2): dependencies: '@formatjs/intl-localematcher': 0.5.5 negotiator: 1.0.0 - next: 15.4.5(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2) + next: 15.4.6(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0) react: 19.1.1 use-intl: 4.3.4(react@19.1.1) optionalDependencies: typescript: 5.9.2 - next@15.4.5(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2): + next@15.4.6(@babel/core@7.26.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0): dependencies: - '@next/env': 15.4.5 + '@next/env': 15.4.6 '@swc/helpers': 0.5.15 caniuse-lite: 1.0.30001703 postcss: 8.4.31 @@ -17731,23 +17706,23 @@ snapshots: react-dom: 19.1.1(react@19.1.1) styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.1.1) optionalDependencies: - '@next/swc-darwin-arm64': 15.4.5 - '@next/swc-darwin-x64': 15.4.5 - '@next/swc-linux-arm64-gnu': 15.4.5 - '@next/swc-linux-arm64-musl': 15.4.5 - '@next/swc-linux-x64-gnu': 15.4.5 - '@next/swc-linux-x64-musl': 15.4.5 - '@next/swc-win32-arm64-msvc': 15.4.5 - '@next/swc-win32-x64-msvc': 15.4.5 - sass: 1.89.2 + '@next/swc-darwin-arm64': 15.4.6 + '@next/swc-darwin-x64': 15.4.6 + '@next/swc-linux-arm64-gnu': 15.4.6 + '@next/swc-linux-arm64-musl': 15.4.6 + '@next/swc-linux-x64-gnu': 15.4.6 + '@next/swc-linux-x64-musl': 15.4.6 + '@next/swc-win32-arm64-msvc': 15.4.6 + '@next/swc-win32-x64-msvc': 15.4.6 + sass: 1.90.0 sharp: 0.34.3 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - next@15.4.5(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.89.2): + next@15.4.6(@babel/core@7.28.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.90.0): dependencies: - '@next/env': 15.4.5 + '@next/env': 15.4.6 '@swc/helpers': 0.5.15 caniuse-lite: 1.0.30001703 postcss: 8.4.31 @@ -17755,15 +17730,15 @@ snapshots: react-dom: 19.1.1(react@19.1.1) styled-jsx: 5.1.6(@babel/core@7.28.0)(react@19.1.1) optionalDependencies: - '@next/swc-darwin-arm64': 15.4.5 - '@next/swc-darwin-x64': 15.4.5 - '@next/swc-linux-arm64-gnu': 15.4.5 - '@next/swc-linux-arm64-musl': 15.4.5 - '@next/swc-linux-x64-gnu': 15.4.5 - '@next/swc-linux-x64-musl': 15.4.5 - '@next/swc-win32-arm64-msvc': 15.4.5 - '@next/swc-win32-x64-msvc': 15.4.5 - sass: 1.89.2 + '@next/swc-darwin-arm64': 15.4.6 + '@next/swc-darwin-x64': 15.4.6 + '@next/swc-linux-arm64-gnu': 15.4.6 + '@next/swc-linux-arm64-musl': 15.4.6 + '@next/swc-linux-x64-gnu': 15.4.6 + '@next/swc-linux-x64-musl': 15.4.6 + '@next/swc-win32-arm64-msvc': 15.4.6 + '@next/swc-win32-x64-msvc': 15.4.6 + sass: 1.90.0 sharp: 0.34.3 transitivePeerDependencies: - '@babel/core' @@ -18492,7 +18467,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 22.17.0 + '@types/node': 22.17.1 long: 5.2.3 proxmox-api@1.1.1: @@ -18529,10 +18504,6 @@ snapshots: pure-rand@6.1.0: {} - qs@6.13.1: - dependencies: - side-channel: 1.1.0 - qs@6.14.0: dependencies: side-channel: 1.1.0 @@ -19067,7 +19038,7 @@ snapshots: safer-buffer@2.1.2: {} - sass@1.89.2: + sass@1.90.0: dependencies: chokidar: 4.0.0 immutable: 5.0.2 @@ -19139,7 +19110,7 @@ snapshots: semver-diff@4.0.0: dependencies: - semver: 7.7.1 + semver: 7.7.2 semver-parser@4.1.8: {} @@ -19792,7 +19763,7 @@ snapshots: glob: 10.4.5 minimatch: 9.0.5 - testcontainers@11.4.0: + testcontainers@11.5.1: dependencies: '@balena/dockerignore': 1.0.2 '@types/dockerode': 3.3.42 @@ -19807,7 +19778,7 @@ snapshots: properties-reader: 2.3.0 ssh-remote-port-forward: 1.0.4 tar-fs: 3.1.0 - tmp: 0.2.3 + tmp: 0.2.4 undici: 7.13.0 transitivePeerDependencies: - bare-buffer @@ -19887,6 +19858,8 @@ snapshots: tmp@0.2.3: {} + tmp@0.2.4: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -19939,9 +19912,9 @@ snapshots: trough@2.2.0: {} - trpc-to-openapi@2.3.2(@trpc/server@11.4.3(typescript@5.9.2))(zod-openapi@2.19.0(zod@3.25.76))(zod@3.25.76): + trpc-to-openapi@2.4.0(@trpc/server@11.4.4(typescript@5.9.2))(zod-openapi@2.19.0(zod@3.25.76))(zod@3.25.76): dependencies: - '@trpc/server': 11.4.3(typescript@5.9.2) + '@trpc/server': 11.4.4(typescript@5.9.2) co-body: 6.2.0 h3: 1.15.1 openapi3-ts: 4.4.0 @@ -19956,14 +19929,14 @@ snapshots: ts-mixer@6.0.4: {} - ts-node@10.9.2(@types/node@22.17.0)(typescript@5.9.2): + ts-node@10.9.2(@types/node@22.17.1)(typescript@5.9.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.17.0 + '@types/node': 22.17.1 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -20139,12 +20112,12 @@ snapshots: dependencies: ts-toolbelt: 9.6.0 - typescript-eslint@8.38.0(eslint@9.32.0)(typescript@5.9.2): + typescript-eslint@8.39.0(eslint@9.32.0)(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2))(eslint@9.32.0)(typescript@5.9.2) - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.9.2) - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.39.0(@typescript-eslint/parser@8.39.0(eslint@9.32.0)(typescript@5.9.2))(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/parser': 8.39.0(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0)(typescript@5.9.2) eslint: 9.32.0 typescript: 5.9.2 transitivePeerDependencies: @@ -20401,10 +20374,10 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - video.js@8.23.3: + video.js@8.23.4: dependencies: '@babel/runtime': 7.25.6 - '@videojs/http-streaming': 3.17.0(video.js@8.23.3) + '@videojs/http-streaming': 3.17.2(video.js@8.23.4) '@videojs/vhs-utils': 4.1.1 '@videojs/xhr': 2.7.0 aes-decrypter: 4.0.2 @@ -20412,14 +20385,14 @@ snapshots: m3u8-parser: 7.2.0 mpd-parser: 1.3.1 mux.js: 7.1.0 - videojs-contrib-quality-levels: 4.1.0(video.js@8.23.3) + videojs-contrib-quality-levels: 4.1.0(video.js@8.23.4) videojs-font: 4.2.0 videojs-vtt.js: 0.15.5 - videojs-contrib-quality-levels@4.1.0(video.js@8.23.3): + videojs-contrib-quality-levels@4.1.0(video.js@8.23.4): dependencies: global: 4.4.0 - video.js: 8.23.3 + video.js: 8.23.4 videojs-font@4.2.0: {} @@ -20427,13 +20400,13 @@ snapshots: dependencies: global: 4.4.0 - vite-node@3.2.4(@types/node@22.17.0)(sass@1.89.2)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0): + vite-node@3.2.4(@types/node@22.17.1)(sass@1.90.0)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 5.4.5(@types/node@22.17.0)(sass@1.89.2)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0) + vite: 5.4.5(@types/node@22.17.1)(sass@1.90.0)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0) transitivePeerDependencies: - '@types/node' - less @@ -20445,34 +20418,34 @@ snapshots: - supports-color - terser - vite-tsconfig-paths@5.1.4(typescript@5.9.2)(vite@5.4.5(@types/node@22.17.0)(sass@1.89.2)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0)): + vite-tsconfig-paths@5.1.4(typescript@5.9.2)(vite@5.4.5(@types/node@22.17.1)(sass@1.90.0)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0)): dependencies: debug: 4.3.7 globrex: 0.1.2 tsconfck: 3.1.3(typescript@5.9.2) optionalDependencies: - vite: 5.4.5(@types/node@22.17.0)(sass@1.89.2)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0) + vite: 5.4.5(@types/node@22.17.1)(sass@1.90.0)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0) transitivePeerDependencies: - supports-color - typescript - vite@5.4.5(@types/node@22.17.0)(sass@1.89.2)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0): + vite@5.4.5(@types/node@22.17.1)(sass@1.90.0)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 rollup: 4.21.3 optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.17.1 fsevents: 2.3.3 - sass: 1.89.2 + sass: 1.90.0 sugarss: 5.0.0(postcss@8.4.47) terser: 5.39.0 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.17.0)(@vitest/ui@3.2.4)(jsdom@26.1.0)(sass@1.89.2)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.17.1)(@vitest/ui@3.2.4)(jsdom@26.1.0)(sass@1.90.0)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@5.4.5(@types/node@22.17.0)(sass@1.89.2)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0)) + '@vitest/mocker': 3.2.4(vite@5.4.5(@types/node@22.17.1)(sass@1.90.0)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -20490,12 +20463,12 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 5.4.5(@types/node@22.17.0)(sass@1.89.2)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0) - vite-node: 3.2.4(@types/node@22.17.0)(sass@1.89.2)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0) + vite: 5.4.5(@types/node@22.17.1)(sass@1.90.0)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0) + vite-node: 3.2.4(@types/node@22.17.1)(sass@1.90.0)(sugarss@5.0.0(postcss@8.4.47))(terser@5.39.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.17.0 + '@types/node': 22.17.1 '@vitest/ui': 3.2.4(vitest@3.2.4) jsdom: 26.1.0 transitivePeerDependencies: diff --git a/scripts/update-integration-list.mts b/scripts/update-integration-list.mts new file mode 100644 index 000000000..84aaebad5 --- /dev/null +++ b/scripts/update-integration-list.mts @@ -0,0 +1,70 @@ +import {readFile, writeFile} from 'fs/promises'; +import {integrationDefs} from '../packages/definitions/src/integration'; + +const FILE = 'docs/README.md'; +const MAX_COLUMNS_PER_ROW = 7; + +async function updateIntegrationList() { + // Read current README content + const content = await readFile(FILE, 'utf8'); + + // Define markers + const startMarker = ''; + const endMarker = ''; + + // Find the section to replace + const startIndex = content.indexOf(startMarker); + const endIndex = content.indexOf(endMarker); + + if (startIndex === -1 || endIndex === -1) { + throw new Error('Could not find markers in README.md'); + } + + // Generate the new integration list + const integrations = Object.values(integrationDefs) + .filter(def => def.name !== 'Mock') + .sort((a, b) => a.name.localeCompare(b.name)); + const tableRows: string[] = []; + let currentRow: string[] = []; + + integrations.forEach((integration) => { + currentRow.push(` +
+ ${integration.name} +
+

${integration.name.replaceAll(' ', '
')}

+
+`); + + if (currentRow.length === MAX_COLUMNS_PER_ROW) { + tableRows.push(`${currentRow.join('\n')}`); + currentRow = []; + } + }); + + // Add remaining items if any + if (currentRow.length > 0) { + tableRows.push(`${currentRow.join('\n')}`); + } + + // Create the new content + const newSection = `${startMarker} + +
+ + +${tableRows.join('\n')} + +
+
+ +${endMarker}`; + + // Replace the old section with the new one + const newContent = content.slice(0, startIndex) + newSection + content.slice(endIndex + endMarker.length); + + // Write the updated content back to the file + await writeFile(FILE, newContent, 'utf8'); +} + +updateIntegrationList().catch(console.error); \ No newline at end of file diff --git a/static-data/contributors.json b/static-data/contributors.json index 583331136..b63988350 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":"huanga","avatar_url":"https://avatars.githubusercontent.com/u/732970?v=4"},{"login":"devtobi","avatar_url":"https://avatars.githubusercontent.com/u/28538704?v=4"},{"login":"TyxTang","avatar_url":"https://avatars.githubusercontent.com/u/90897955?v=4"},{"login":"VinnyVynce","avatar_url":"https://avatars.githubusercontent.com/u/19630511?v=4"},{"login":"WillyJL","avatar_url":"https://avatars.githubusercontent.com/u/49810075?v=4"},{"login":"anonysoul","avatar_url":"https://avatars.githubusercontent.com/u/105715150?v=4"},{"login":"cospeedster","avatar_url":"https://avatars.githubusercontent.com/u/52749645?v=4"},{"login":"diederbert","avatar_url":"https://avatars.githubusercontent.com/u/162878798?v=4"},{"login":"digdilem","avatar_url":"https://avatars.githubusercontent.com/u/4052275?v=4"},{"login":"dinghino","avatar_url":"https://avatars.githubusercontent.com/u/14729459?v=4"},{"login":"gfomichev","avatar_url":"https://avatars.githubusercontent.com/u/1596146?v=4"},{"login":"gnattu","avatar_url":"https://avatars.githubusercontent.com/u/12995396?v=4"},{"login":"tuxpizza","avatar_url":"https://avatars.githubusercontent.com/u/84710786?v=4"},{"login":"xmarkurion","avatar_url":"https://avatars.githubusercontent.com/u/46654687?v=4"},{"login":"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":"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":"krishnamuppaneni","avatar_url":"https://avatars.githubusercontent.com/u/4703366?v=4"},{"login":"Aandree5","avatar_url":"https://avatars.githubusercontent.com/u/32734153?v=4"},{"login":"jackwellerreal","avatar_url":"https://avatars.githubusercontent.com/u/97435840?v=4"},{"login":"toineenzo","avatar_url":"https://avatars.githubusercontent.com/u/4921397?v=4"},{"login":"rezstje","avatar_url":"https://avatars.githubusercontent.com/u/45420315?v=4"},{"login":"MaienM","avatar_url":"https://avatars.githubusercontent.com/u/583129?v=4"},{"login":"oben01","avatar_url":"https://avatars.githubusercontent.com/u/22369027?v=4"},{"login":"m0s4ik","avatar_url":"https://avatars.githubusercontent.com/u/26578395?v=4"},{"login":"ieugen","avatar_url":"https://avatars.githubusercontent.com/u/1050920?v=4"},{"login":"faugusto-oliveira","avatar_url":"https://avatars.githubusercontent.com/u/37384074?v=4"},{"login":"frankvHoof93","avatar_url":"https://avatars.githubusercontent.com/u/7346516?v=4"},{"login":"Kaotic3","avatar_url":"https://avatars.githubusercontent.com/u/80522225?v=4"},{"login":"hotrungnhan","avatar_url":"https://avatars.githubusercontent.com/u/40029631?v=4"},{"login":"itzTheMeow","avatar_url":"https://avatars.githubusercontent.com/u/50887230?v=4"},{"login":"NikeLaosClericus","avatar_url":"https://avatars.githubusercontent.com/u/39810627?v=4"},{"login":"xoxyuxu","avatar_url":"https://avatars.githubusercontent.com/u/3543416?v=4"},{"login":"lthomsen","avatar_url":"https://avatars.githubusercontent.com/u/28560325?v=4"},{"login":"pitschi","avatar_url":"https://avatars.githubusercontent.com/u/6841565?v=4"},{"login":"tech62","avatar_url":"https://avatars.githubusercontent.com/u/16237642?v=4"}] \ No newline at end of file +[{"login":"ajnart","avatar_url":"https://avatars.githubusercontent.com/u/49837342?v=4"},{"login":"manuel-rw","avatar_url":"https://avatars.githubusercontent.com/u/30572287?v=4"},{"login":"Meierschlumpf","avatar_url":"https://avatars.githubusercontent.com/u/63781622?v=4"},{"login":"SeDemal","avatar_url":"https://avatars.githubusercontent.com/u/26098587?v=4"},{"login":"lammersbjorn","avatar_url":"https://avatars.githubusercontent.com/u/71191962?v=4"},{"login":"LarveyOfficial","avatar_url":"https://avatars.githubusercontent.com/u/39219859?v=4"},{"login":"c00ldude1oo","avatar_url":"https://avatars.githubusercontent.com/u/15677803?v=4"},{"login":"InterN0te","avatar_url":"https://avatars.githubusercontent.com/u/10882916?v=4"},{"login":"Aimsucks","avatar_url":"https://avatars.githubusercontent.com/u/1828486?v=4"},{"login":"JannesV","avatar_url":"https://avatars.githubusercontent.com/u/5984244?v=4"},{"login":"MauriceNino","avatar_url":"https://avatars.githubusercontent.com/u/18658092?v=4"},{"login":"hillaliy","avatar_url":"https://avatars.githubusercontent.com/u/950010?v=4"},{"login":"Skeeww","avatar_url":"https://avatars.githubusercontent.com/u/9639992?v=4"},{"login":"RichyHBM","avatar_url":"https://avatars.githubusercontent.com/u/5472275?v=4"},{"login":"Bonfire","avatar_url":"https://avatars.githubusercontent.com/u/5704760?v=4"},{"login":"wieli99","avatar_url":"https://avatars.githubusercontent.com/u/46794825?v=4"},{"login":"ishaanparlikar","avatar_url":"https://avatars.githubusercontent.com/u/43013132?v=4"},{"login":"Zareix","avatar_url":"https://avatars.githubusercontent.com/u/29818713?v=4"},{"login":"tuggan","avatar_url":"https://avatars.githubusercontent.com/u/4325608?v=4"},{"login":"Spillebulle","avatar_url":"https://avatars.githubusercontent.com/u/46653946?v=4"},{"login":"tancak","avatar_url":"https://avatars.githubusercontent.com/u/11760749?v=4"},{"login":"spkesDE","avatar_url":"https://avatars.githubusercontent.com/u/1682314?v=4"},{"login":"j3lte","avatar_url":"https://avatars.githubusercontent.com/u/2557568?v=4"},{"login":"dslatt","avatar_url":"https://avatars.githubusercontent.com/u/5211001?v=4"},{"login":"Malong11-007","avatar_url":"https://avatars.githubusercontent.com/u/40298510?v=4"},{"login":"StefanB7","avatar_url":"https://avatars.githubusercontent.com/u/22056509?v=4"},{"login":"souravghosh01","avatar_url":"https://avatars.githubusercontent.com/u/37548139?v=4"},{"login":"SR3u","avatar_url":"https://avatars.githubusercontent.com/u/2380522?v=4"},{"login":"Rikpat","avatar_url":"https://avatars.githubusercontent.com/u/33869814?v=4"},{"login":"NormanJS","avatar_url":"https://avatars.githubusercontent.com/u/83409549?v=4"},{"login":"No-Maines-Land","avatar_url":"https://avatars.githubusercontent.com/u/20687725?v=4"},{"login":"stark1tty","avatar_url":"https://avatars.githubusercontent.com/u/69326376?v=4"},{"login":"Momcilo42","avatar_url":"https://avatars.githubusercontent.com/u/10118137?v=4"},{"login":"marius-arch","avatar_url":"https://avatars.githubusercontent.com/u/72494359?v=4"},{"login":"Lumilias","avatar_url":"https://avatars.githubusercontent.com/u/10852161?v=4"},{"login":"Havock94","avatar_url":"https://avatars.githubusercontent.com/u/7635248?v=4"},{"login":"Lollyde","avatar_url":"https://avatars.githubusercontent.com/u/11347524?v=4"},{"login":"krishnamuppaneni","avatar_url":"https://avatars.githubusercontent.com/u/4703366?v=4"},{"login":"devtobi","avatar_url":"https://avatars.githubusercontent.com/u/28538704?v=4"},{"login":"TyxTang","avatar_url":"https://avatars.githubusercontent.com/u/90897955?v=4"},{"login":"VinnyVynce","avatar_url":"https://avatars.githubusercontent.com/u/19630511?v=4"},{"login":"WillyJL","avatar_url":"https://avatars.githubusercontent.com/u/49810075?v=4"},{"login":"anonysoul","avatar_url":"https://avatars.githubusercontent.com/u/105715150?v=4"},{"login":"cospeedster","avatar_url":"https://avatars.githubusercontent.com/u/52749645?v=4"},{"login":"diederbert","avatar_url":"https://avatars.githubusercontent.com/u/162878798?v=4"},{"login":"digdilem","avatar_url":"https://avatars.githubusercontent.com/u/4052275?v=4"},{"login":"dinghino","avatar_url":"https://avatars.githubusercontent.com/u/14729459?v=4"},{"login":"gfomichev","avatar_url":"https://avatars.githubusercontent.com/u/1596146?v=4"},{"login":"gnattu","avatar_url":"https://avatars.githubusercontent.com/u/12995396?v=4"},{"login":"tuxpizza","avatar_url":"https://avatars.githubusercontent.com/u/84710786?v=4"},{"login":"xmarkurion","avatar_url":"https://avatars.githubusercontent.com/u/46654687?v=4"},{"login":"huanga","avatar_url":"https://avatars.githubusercontent.com/u/732970?v=4"},{"login":"taos15","avatar_url":"https://avatars.githubusercontent.com/u/122130728?v=4"},{"login":"arghyadipchak","avatar_url":"https://avatars.githubusercontent.com/u/32430374?v=4"},{"login":"AuthorShin","avatar_url":"https://avatars.githubusercontent.com/u/4959043?v=4"},{"login":"benniblot","avatar_url":"https://avatars.githubusercontent.com/u/47495914?v=4"},{"login":"bebsworthy","avatar_url":"https://avatars.githubusercontent.com/u/5266759?v=4"},{"login":"catrielmuller","avatar_url":"https://avatars.githubusercontent.com/u/2272323?v=4"},{"login":"Vysp3r","avatar_url":"https://avatars.githubusercontent.com/u/62019735?v=4"},{"login":"DR-Blogs","avatar_url":"https://avatars.githubusercontent.com/u/96393186?v=4"},{"login":"singular0","avatar_url":"https://avatars.githubusercontent.com/u/1925883?v=4"},{"login":"diogovalentte","avatar_url":"https://avatars.githubusercontent.com/u/49578155?v=4"},{"login":"codezninja","avatar_url":"https://avatars.githubusercontent.com/u/4400773?v=4"},{"login":"fabricionaweb","avatar_url":"https://avatars.githubusercontent.com/u/15933?v=4"},{"login":"nyok1912","avatar_url":"https://avatars.githubusercontent.com/u/32163949?v=4"},{"login":"bo3bdo","avatar_url":"https://avatars.githubusercontent.com/u/5271380?v=4"},{"login":"hskrtich","avatar_url":"https://avatars.githubusercontent.com/u/1214484?v=4"},{"login":"ishults","avatar_url":"https://avatars.githubusercontent.com/u/7275442?v=4"},{"login":"jelliuk","avatar_url":"https://avatars.githubusercontent.com/u/4790959?v=4"},{"login":"Moohan","avatar_url":"https://avatars.githubusercontent.com/u/5982260?v=4"},{"login":"tesar-tech","avatar_url":"https://avatars.githubusercontent.com/u/33880579?v=4"},{"login":"jbruell","avatar_url":"https://avatars.githubusercontent.com/u/31685172?v=4"},{"login":"JasonLeeB06","avatar_url":"https://avatars.githubusercontent.com/u/82266978?v=4"},{"login":"jeffersonraimon","avatar_url":"https://avatars.githubusercontent.com/u/80064475?v=4"},{"login":"jo-chemla","avatar_url":"https://avatars.githubusercontent.com/u/16822841?v=4"},{"login":"joser93","avatar_url":"https://avatars.githubusercontent.com/u/6912089?v=4"},{"login":"justijndepover","avatar_url":"https://avatars.githubusercontent.com/u/9008623?v=4"},{"login":"Aandree5","avatar_url":"https://avatars.githubusercontent.com/u/32734153?v=4"},{"login":"jackwellerreal","avatar_url":"https://avatars.githubusercontent.com/u/97435840?v=4"},{"login":"toineenzo","avatar_url":"https://avatars.githubusercontent.com/u/4921397?v=4"},{"login":"rezstje","avatar_url":"https://avatars.githubusercontent.com/u/45420315?v=4"},{"login":"MaienM","avatar_url":"https://avatars.githubusercontent.com/u/583129?v=4"},{"login":"oben01","avatar_url":"https://avatars.githubusercontent.com/u/22369027?v=4"},{"login":"m0s4ik","avatar_url":"https://avatars.githubusercontent.com/u/26578395?v=4"},{"login":"Oupsman","avatar_url":"https://avatars.githubusercontent.com/u/11260343?v=4"},{"login":"ieugen","avatar_url":"https://avatars.githubusercontent.com/u/1050920?v=4"},{"login":"faugusto-oliveira","avatar_url":"https://avatars.githubusercontent.com/u/37384074?v=4"},{"login":"frankvHoof93","avatar_url":"https://avatars.githubusercontent.com/u/7346516?v=4"},{"login":"Kaotic3","avatar_url":"https://avatars.githubusercontent.com/u/80522225?v=4"},{"login":"hotrungnhan","avatar_url":"https://avatars.githubusercontent.com/u/40029631?v=4"},{"login":"itzTheMeow","avatar_url":"https://avatars.githubusercontent.com/u/50887230?v=4"},{"login":"NikeLaosClericus","avatar_url":"https://avatars.githubusercontent.com/u/39810627?v=4"},{"login":"xoxyuxu","avatar_url":"https://avatars.githubusercontent.com/u/3543416?v=4"},{"login":"lthomsen","avatar_url":"https://avatars.githubusercontent.com/u/28560325?v=4"},{"login":"pitschi","avatar_url":"https://avatars.githubusercontent.com/u/6841565?v=4"},{"login":"tech62","avatar_url":"https://avatars.githubusercontent.com/u/16237642?v=4"}] \ No newline at end of file diff --git a/static-data/translators.json b/static-data/translators.json index 80860102f..1e9fb4eb7 100644 --- a/static-data/translators.json +++ b/static-data/translators.json @@ -1 +1 @@ -[{"username":"carlchina","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/6697/medium/d22bbe7797bbeb30dbdc73a5648d329a_default.png"},{"username":"zielmann","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/7795/medium/ad22b8b8d5eb33e4154d53a454c862fd_default.png"},{"username":"Thalyn","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12494028/medium/5faf5acc945a874ed116c4567edaa09f_default.png"},{"username":"magnushj","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12503488/medium/68f32e33ea7b891960055c9f831f7344_default.png"},{"username":"almontegil","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12580457/medium/f4136cacbdfdb4c28ae7f85dc5f840db_default.png"},{"username":"Skick","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12619811/medium/0331f1de413a645b4516bc4e037f31bb.jpg"},{"username":"andibing","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12664938/medium/b8be63e4dcb2e791ced1ffc9e3a049a5.jpg"},{"username":"gronare","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12680911/medium/c6eb14d1504156f34a158e507f73aa3d_default.png"},{"username":"SmartPhoneLover","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12701640/medium/ec95486662ec875cda080e778c3ff702.jpg"},{"username":"marcelotk_15","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12773227/medium/ecf6bea16ab0c873c131df2154ee9718_default.png"},{"username":"S3OD177","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13051544/medium/11dd990837f61f7e8f7d36b041a7fddb_default.png"},{"username":"marcg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13153301/medium/ebcf60fbf27deb148ec40a659566c6ff_default.png"},{"username":"BeersTeddy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13185230/medium/2f1f4e1effe74a23422b195cbefb2a95_default.png"},{"username":"jamesmcmahon0","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13245578/medium/586aa873b4abddbd9abc6f3de99ab70e.jpeg"},{"username":"b1nar10","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13286752/medium/249b02e3368752cb175446082015737c_default.png"},{"username":"vannCN","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13330448/medium/9b8a9ee3611e51e951e22d5fd4eb7d8d.jpg"},{"username":"binswm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13343482/medium/45dde0e6097b9b72705d2eba9dbbc276_default.png"},{"username":"SkewRam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13496556/medium/188f5c2deb7938eda51eb786cc4539ca.jpeg"},{"username":"raphcatarino","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13547726/medium/b003511e67df13a4b4b5689488fa8099.jpg"},{"username":"shillos5","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13600557/medium/b17650b2b84f829d54fa548c44c1ab27.jpeg"},{"username":"wolong98","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13641407/medium/f4634edc58c7857a357e5293543c15cf.jpg"},{"username":"spair0039","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14012333/medium/72430e96027c09c19141cac38eae4617.png"},{"username":"MajorMarcin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14072183/medium/0a197e64bb92b6ea94cecbb607512c45.jpg"},{"username":"KosmoMoustache","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14103535/medium/51c438cdd9f86e8811c75f4869de479c.png"},{"username":"Soochaehwa","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14118689/medium/496a1ce63111547bf455a1e0a7ac75f1_default.png"},{"username":"garryfield","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14187035/medium/520c964706676045f6eeec1b08edc880.jpg"},{"username":"droidenko","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14444264/medium/4aa3a8e824f72bc9e5ec0d8de307095e.jpeg"},{"username":"maathis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14489950/medium/6eeddf13a757ee35f78f1763f94d95e1.jpeg"},{"username":"bukvam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14546502/medium/a819dc40a13c57395a17dc46e847d3ce.jpg"},{"username":"gm.cinalli","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14670666/medium/2d466a0fdbda40764526be86c97c0ab4.jpeg"},{"username":"antoine2tt","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14722148/medium/f88d926900862dd59007ea4b3419cb9d.png"},{"username":"cretzen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14799754/medium/3ba5c1805ec20c000d5810c07985afe9.jpg"},{"username":"ktKongTong","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14817246/medium/97cfc3c028dbdaf85ebd1102da71e58c.jpeg"},{"username":"marinkaberg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14861042/medium/2d5c4e62613f03082f3e645fa92efd59.jpeg"},{"username":"djismgaming","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14934947/medium/f5a8570713c34ab0f7d5405d105e2a9a.jpeg"},{"username":"f1refa11","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14949159/medium/fd2ae63b8eb4462200ba96abf943c1b9.png"},{"username":"jeffersonraimon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15057621/medium/6dff469563860e2618bc9d45646d0ab4.png"},{"username":"giop98","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15057987/medium/b8a4825d3fc39fc662f35ee258db4b2d.jpeg"},{"username":"tomislav.kraljevic","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15118857/medium/e133f1061cc92850b854d05d8faaeafd.png"},{"username":"Walkx","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15202182/medium/5c37361ae45aeed487b34582c1f7ca37.png"},{"username":"andrea.rosso","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15246318/medium/11f3f5ef44ec7f55b6f143090e208704_default.png"},{"username":"ajnart","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15270132/medium/a0f107a463c8910ee96bc2fa843a17e3.jpeg"},{"username":"Witchling","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15282238/medium/9e196b6783415b10ca571b7673c2ef33.jpg"},{"username":"guineuu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15292058/medium/22fbb758bda3b7805d50bf21d38f2c20.jpeg"},{"username":"Bulgus","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15304568/medium/0e8787e5ceb02ed5c96a514d0068ae87.jpg"},{"username":"Narno","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15314996/medium/a6ba093f24884250a1bf6c6f2ca50f1b_default.png"},{"username":"BySempron","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15315986/medium/e3d22d7b1423c6823a9f36d595ed4bdb.png"},{"username":"jonathan.berglin.work","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15359236/medium/95930b2093db13b76179782f7322c5d5.png"},{"username":"icdmkg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15405504/medium/f334d16cde1ac4ffb935b440d03465af.gif"},{"username":"irithys","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15405614/medium/3086461c47cce0a0c031925e5f943412.png"},{"username":"JannesV","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419912/medium/a7809eb4b817d7c49b62cf10ae86b950.png"},{"username":"benniblot","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419914/medium/8086b1573d31f152ba41949b3a172445.jpeg"},{"username":"pacjo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419916/medium/3cbeddbd7bc01faafb5a3bf47bba915b_default.png"},{"username":"Payou6994","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419934/medium/37c9b9b17dfb578404c1c1ddb73ba7a8.png"},{"username":"fzibi21","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419976/medium/0da688450358e0290a7b7359cc1f7328.png"},{"username":"WowMurdock","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420118/medium/de19576fccb495b6dfe4c4c04a56b834.png"},{"username":"hbooo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420120/medium/6c7c7f8db785061356ebb03d044d3329.jpeg"},{"username":"Manicraft1001","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420178/medium/50ec94563a06a9f74f33bd09f01eed4d.jpg"},{"username":"Void123","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420354/medium/86929d44df92a00f9fe900a985c196df_default.png"},{"username":"R4cc","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15422606/medium/a390979662b84694f59de30bdb732141.jpeg"},{"username":"fabricionaweb","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15425808/medium/a9354142e7ae5152c144409d55fda551_default.png"},{"username":"JokeOfDead","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15426890/medium/a383eac9365e9de64fd4ab1d6fd0cb95.jpeg"},{"username":"hkz","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15427174/medium/c88acefb0d7306e1f7470e872029fb39_default.png"},{"username":"Steken","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15428516/medium/d5aea5653c769c3a523182bdb60d1664.png"},{"username":"flar.anton","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15428592/medium/b01fdb365d892e9f811f77fcb50a80a2.jpeg"},{"username":"Bon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15433542/medium/5397da4dfc821f20b6ac14fe0c514e9a.jpeg"},{"username":"bfkadan","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15434162/medium/4f9a0b43cfe3acaea60124c14ba7f44a.png"},{"username":"BunnySweety","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15434662/medium/f0ef200a6a0dcf0e1d0e9ecd4148f560_default.png"},{"username":"HRKings","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15436168/medium/69a31e461d38549f01864e7ef10d642e.png"},{"username":"wiston81","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15439078/medium/10f292c8d12a7c21a44b54495fa4a3d8.jpeg"},{"username":"qaz0911","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15440860/medium/3d3e50ee388c72dc4bf7a771761f2d89_default.png"},{"username":"qqyule","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15441462/medium/7a3cdf82710ffb5d8f388bc0bd010665.png"},{"username":"Bims0n","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15445560/medium/603220b603eeb3367e0f0d3fa675247c.jpg"},{"username":"TariqDaCoder","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15446228/medium/50b0f4040112bbd67690b769477398e5_default.png"},{"username":"Anarchon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15449644/medium/e925e1f3e3ffbf0f982391ce263a1a28.jpeg"},{"username":"Ashun","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15453020/medium/ccdcf51c73d6aae40751bb30beee1915_default.png"},{"username":"sebekmartin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15454038/medium/bcfb44598cdfd1d7cd4eb35812538962.jpeg"},{"username":"RagnarGraves","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15459882/medium/143d5af850c1154070a218bea124e9cb_default.png"},{"username":"PrtmPhlp","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15462414/medium/b80db55e9de301432dcd1f8c8b24fd49_default.png"},{"username":"DooYoo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15470768/medium/2a18cf4be67094724b508c9e1e698a21_default.png"},{"username":"espentruls","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15486092/medium/8e38afc3a4ff669226a0cfd3e420ff3a.jpeg"},{"username":"frisco82","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15486922/medium/4e1c5d4189b42508e660daa3c1c25b2a.jpeg"},{"username":"lupineDK","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15491798/medium/461bd501e8371c062bf29ea171aedd36_default.png"},{"username":"hillaliy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15492732/medium/0bae17b421604892d888e3fc70cf0587.jpeg"},{"username":"MarcOrfilaCarreras","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15501072/medium/ea52b26c3c6f21e4931e38e3ce3f3d6e.png"},{"username":"robertbridda","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15507822/medium/a368c2e30411bb2da9b49290084191f3.png"},{"username":"MKoniuszko","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15518090/medium/87605434fcc839f6763ab07c50f6d232.jpeg"},{"username":"HeroSizy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15518710/medium/4e79c0e98cbeb536dd961e656331b509.png"},{"username":"dwt136","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15520022/medium/554422503f2baea43ace85facb4546fb_default.png"},{"username":"asifthewebguy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15526719/medium/b18931dd0c800d725048bd440646198b_default.png"},{"username":"eiloogs","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15545537/medium/f290a2f1190983530a9b76b2e858a609.gif"},{"username":"_vytdv","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15547289/medium/60d8644cc8ad6f11a92ccea4a14cd098_default.png"},{"username":"crendasien","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15554645/medium/598ab1d4aaf6b8dccd5ba16be92da7b9.jpeg"},{"username":"edxo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15573823/medium/8a565b732a75a77f840dd123cdb30bf4.png"},{"username":"somerlev","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15617065/medium/f4b13513e311ec902d90b2f718412c55.jpg"},{"username":"kid1412621","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15643771/medium/dd455e32de652fa88e6fd97598bdffa7.png"},{"username":"suming","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15644717/medium/244159dfe10fa03436205506f80c9e25.png"},{"username":"nick.gher","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15647517/medium/5374a2c6fef60a3fbf0edf86b997c351_default.png"},{"username":"DataCat","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15650315/medium/ce7c1365adf35c5d490d77500a4607fb_default.png"},{"username":"dizo89","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15658375/medium/0ca745e5017d491fe1b22b0239904de8.jpeg"},{"username":"tee_noodle","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15674577/medium/804d9cf06f5196026acb6436b809d0da_default.png"},{"username":"Marty88","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15674593/medium/492b1509d52bd2809dea768121217125.jpeg"},{"username":"Spillebulle","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15677023/medium/20b98bb85062e07afe0e63618f8a5feb.PNG"},{"username":"petitmewen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15685239/medium/15de9b62d2e0bc25013435f1784bbcc1.jpeg"},{"username":"NoProsNoNoobs","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15687709/medium/ae8f65fafeb8bcf74dcb8871bbe46461.png"},{"username":"y.gybson","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15690777/medium/b5cb5d2d5768904ff6586c727e3a6c77.jpeg"},{"username":"inside90","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15704947/medium/c1355fcb30dd76f8e39d98d1d49f1c52.png"},{"username":"RJSkudra","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15709853/medium/c3abf2774913dc4e81fb261d36d7668c.png"},{"username":"binge203","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15713937/medium/77c1cfa4314673db80e6881fd9f64668.gif"},{"username":"Mailootje","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15714337/medium/743c3bc4ab1989966a375eeeec83d8b8.jpeg"},{"username":"tim-wiegers","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15719805/medium/08a96f064813350661cd6b20bf3d7d99.png"},{"username":"GkhnG","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15722911/medium/71a027caec489ef6ce82bcf1888329d0_default.png"},{"username":"Zoen-Millo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15760967/medium/9e956f11adc5b34f5636268b5c485dbf.jpg"},{"username":"HooinKyoma","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15792897/medium/9489f0a9b368e0e827ae758b740a2eed.jpeg"},{"username":"wathergeen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15794495/medium/a83b7fc80d180669ebfd6deb3544cfd0.png"},{"username":"MoeToo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15818233/medium/d35cd6953717706eaf20f6c143c62947.png"},{"username":"itodouble","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15836233/medium/e984caea18fb0673bf319fcf28cef649.png"},{"username":"loslocitos","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15847901/medium/fe30d12fd2cf38212f929e13b169f9ec.jpeg"},{"username":"Oversleep","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15849065/medium/06141f13a6d541d753f3c2f2947b8068_default.png"},{"username":"Beardy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15865139/medium/fca6b9d2b3f52e286d1568f52b83b6a0_default.png"},{"username":"raelyan","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15875457/medium/2f4fda1d1aaa5dcc79b328baf3f03151.jpeg"},{"username":"dolphin738","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15913763/medium/ee6fede7b8528ca642329ada80d1cc18.png"},{"username":"brunotco","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15916719/medium/09db45880fc05abc18adb8d932a5ecf9_default.png"},{"username":"LukeIsHereToDevelop","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15924739/medium/3e6cd3940297bb4ba7bb039c93e6f918.png"},{"username":"kennit","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15925879/medium/6b0733ad3c5949b91c55e4d8b03db8a5_default.png"},{"username":"kuunpire","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15950309/medium/8192a4f08f07086828ac9f74ed29a169.jpeg"},{"username":"Sandor-dev","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15951759/medium/0216c2da4eb028164ebbecf1c72f6271_default.png"},{"username":"Meierschlumpf","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15953187/medium/23c744faef1ab84fbdc9351a7850aab6.jpeg"},{"username":"harmlesscat","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15970733/medium/dd8d0214a0250c932bb518b1b55e45a2_default.png"},{"username":"OrzWTF","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15976121/medium/4c4557cbff7ff7b0503455bc59c020e0.jpeg"},{"username":"tagaishi","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15977271/medium/eade504c83a5a1ff831c80a538fbdb44_default.png"},{"username":"azurite928","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15981895/medium/547ccc459ee123e78b5401c499f1022d.png"},{"username":"Ronner231","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16021342/medium/7734d550df2de5a2fec2ffff33e7024c.jpeg"},{"username":"ugyes","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16034148/medium/ed001e3f470a2dea9a8ce955b18e7bd5.png"},{"username":"rpieja","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16045554/medium/bd55baca2ef8b92502a760cc9ee7c505_default.png"},{"username":"flambyisyou","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16051620/medium/3a3bc0c90f6b95ab4ef74396a0a17beb.png"},{"username":"Topbcy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16077170/medium/d3aed33ea56330338756cfcd89477cfe.jpeg"},{"username":"ai5d02sb","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16084674/medium/7c8119fe2a5ca71bb15f636916a42b95_default.png"},{"username":"explosiveparrot","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16097722/medium/7762f80fc1da63f5b2eb87de9d640324_default.png"},{"username":"DestroyCom","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16111544/medium/83e3d3ac5c8bfed634cd1a074854db67.png"},{"username":"neotraxo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16116966/medium/b30df957873329019a8a90a69f6efe3a.png"},{"username":"gzxpa","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16123314/medium/487b05577310a946b0b98bc72c11213b_default.png"},{"username":"TORIK","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16124732/medium/de770890e6411860ac06e8cc2dc0abd0_default.png"},{"username":"sergio.pibot","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16138114/medium/80db802b2fcd6bbf19ea4c7413367dca.jpeg"},{"username":"karam-ajaj","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16139838/medium/7539ab958d3c85d5f67e7849483ea8f7.jpeg"},{"username":"SimonHenz97","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16151520/medium/9b94a85b536688e2d94538c384fd0a76.png"},{"username":"olsson82","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16198988/medium/eeaab4cba210c537424d4204754b604e.png"},{"username":"bo3bdo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16222806/medium/8652f3beacb6098dde5a4cd0a29fe80d.jpeg"},{"username":"AngryPlayer04","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16245192/medium/342715274f4dc31fd4132cdae9126188.jpeg"},{"username":"ehatamm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16245884/medium/979d5e5526fe545be9bf46db481f7182.jpeg"},{"username":"Balionelis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16246058/medium/986d62ba363594c517d966fe9178dcbb.png"},{"username":"kwargs","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16248816/medium/19ce11f04bf1ae2637e0483399c675f9_default.png"},{"username":"lucicu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16273892/medium/3b09e8f3bead221ef98d6a45a16851dc_default.png"},{"username":"Michael5564445","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16357688/medium/9d9026a8bf3eaccb0417da240932ebf7.png"},{"username":"Netscream","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16359198/medium/694e0c8572dc8a47e6d63da31ec5b992.png"},{"username":"belicstefan04","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16368142/medium/4742dcfd7bf7ad7e33e37ac44fba7e0f.png"},{"username":"Hamad2066","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16371478/medium/f37bbc7685b6757defdbd1494236af61.jpeg"},{"username":"3ct0pl4sm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16399616/medium/ce796d1c40163975624c0a483e56374f.png"},{"username":"sanchez.marcell626","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16433865/medium/3ddde1314764cc2205ffdcd1ae719a91.png"},{"username":"Minoctis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16490079/medium/91fd0849303a4eca033d660d0a7b6854.jpeg"},{"username":"vittoriosoccorso","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16498805/medium/17086b2f1981f734edd1572f79c3158a.jpeg"},{"username":"Worgen325","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16533177/medium/4a62cc6b06095751aeb4b1b3e96db93f.png"},{"username":"homarr","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16657003/medium/3afabfd3de949a54ff5d40ad04552aba.png"},{"username":"mwgg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16658379/medium/763dd09f5c238cc5324d4d5357985292.png"},{"username":"dymek37","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16659221/medium/d1dc6d11d7e7fc370efc5070e837ae03.png"},{"username":"kiwinho","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16671855/medium/bfe3a2d497dc4748a04d02e4ae2139cb.jpeg"},{"username":"tjvg4m34r13","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16679135/medium/7a483b9b0abe0d925e54808e1cb38fa0.jpeg"},{"username":"Diegoem","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16705921/medium/29ce68ebc191fc3f65499511b12de98f_default.png"},{"username":"bouks69","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16746091/medium/b58b1fc08520de416198be9df5d093eb.jpeg"},{"username":"futhgar","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16748067/medium/b8c526b097f9aa9d687250cac3df16dc.jpeg"},{"username":"GrimSQL","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16764343/medium/fff729a76d1f8fbcdaee9bb0c0f5f3fd.png"},{"username":"chnikel","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16767047/medium/3dda2a37e03049dafefe6697bb00f75c.png"},{"username":"yuki19870616","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16767951/medium/f59c848e38382cda6c8464b0a7b9e642_default.png"},{"username":"noamdal","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16782245/medium/b4a72a61f9caf138f0322c0cb987e6d0.png"},{"username":"MalithRukshan","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16809057/medium/084d6a5b35fbbeacc70e7021197d222f.png"},{"username":"minirope19","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16930929/medium/e8cbbc26747e31c5a8959215e1dd067b.jpeg"},{"username":"toineenzo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12371852/medium/9f1b2bedb4794c59479cd289bdba9fab.png"},{"username":"ArcaneWater","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12421105/medium/1ac82517a6c658f6b62c48aebcb17e86_default.png"},{"username":"SergiSvK","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13320543/medium/3df3c79cc5f0c53716c559cd3fd2fc20.png"},{"username":"Cruellest","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13610615/medium/2a74faa0947ee08d18f7946fb8602c1e.jpg"},{"username":"Thario","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14491372/medium/dd5e142070802a672900121aa3f332a6_default.png"},{"username":"Kachelkaiser","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14763406/medium/203a781797da4a18fe0f4e7db8fd547c.png"},{"username":"regi4","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14842936/medium/f7e1d672f562a7db61ba6b4b8f4de41d.png"},{"username":"baton5129","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14891064/medium/8d438f557b82977dd02f0ead3187265f.PNG"},{"username":"TheRedCyclops","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16486399/medium/7f39226180120d5a9efcb8e13d8aec8e_default.png"},{"username":"B3CKDOOR","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16744975/medium/e6c7b2d45e76465d54e6efb67c83da7d.png"},{"username":"Larsluph","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16779933/medium/ed7d36f8b44013bad3a16ac0491bd0f7.png"},{"username":"FOEDI","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16781001/medium/6b4552fb72e359aa016f7a054078fac8.png"},{"username":"xmarkurion","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16805443/medium/34a20428427de5aaef99c7d140646803.png"},{"username":"gregid","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16806705/medium/f3c8f4a20436e8538929130142bbc104.png"},{"username":"Flameberg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16820453/medium/d47be866148474c9d05fec6fbe406d88.png"},{"username":"Playfust","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16872865/medium/5f4609cc711e5fb9fa8a0b178635769c.jpeg"},{"username":"Cotignac","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16879297/medium/81ff353edf030699a159bb79cda26e84.jpg"},{"username":"LeaHun","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16916375/medium/618520f0543b1e212ebc83d66b683d4b_default.png"},{"username":"jackwellerreal","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16919717/medium/37bbfdc03893f141133ccc619593266d.png"},{"username":"andrius.cim","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16967845/medium/46028fc1a0ddfaaeebcb37b39739625d_default.png"},{"username":"xjxexrxrxyx","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17041412/medium/d34d664166db6fb25579bca9ff3b50b4.jpeg"},{"username":"bilhal.fellah","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17044572/medium/d1ec6f17e4aa013e9eededc83778d2c6.png"},{"username":"the_octo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17058060/medium/7423ab3a4cabb67f5decb2e2dfa2b675_default.png"},{"username":"BamesJond","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17075846/medium/128d7ffd40254c8e376f45678e2fc620_default.png"},{"username":"Kornikus","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17134240/medium/d7a42b2c30db46ff152699ca01f9e11a_default.png"},{"username":"xoxyuxu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17176526/medium/108055aa24343043de852e412bec74be.png"}] \ No newline at end of file +[{"username":"carlchina","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/6697/medium/d22bbe7797bbeb30dbdc73a5648d329a_default.png"},{"username":"zielmann","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/7795/medium/ad22b8b8d5eb33e4154d53a454c862fd_default.png"},{"username":"Thalyn","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12494028/medium/5faf5acc945a874ed116c4567edaa09f_default.png"},{"username":"magnushj","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12503488/medium/68f32e33ea7b891960055c9f831f7344_default.png"},{"username":"almontegil","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12580457/medium/f4136cacbdfdb4c28ae7f85dc5f840db_default.png"},{"username":"Skick","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12619811/medium/0331f1de413a645b4516bc4e037f31bb.jpg"},{"username":"andibing","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12664938/medium/b8be63e4dcb2e791ced1ffc9e3a049a5.jpg"},{"username":"gronare","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12680911/medium/c6eb14d1504156f34a158e507f73aa3d_default.png"},{"username":"SmartPhoneLover","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12701640/medium/ec95486662ec875cda080e778c3ff702.jpg"},{"username":"marcelotk_15","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12773227/medium/ecf6bea16ab0c873c131df2154ee9718_default.png"},{"username":"S3OD177","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13051544/medium/11dd990837f61f7e8f7d36b041a7fddb_default.png"},{"username":"marcg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13153301/medium/ebcf60fbf27deb148ec40a659566c6ff_default.png"},{"username":"BeersTeddy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13185230/medium/2f1f4e1effe74a23422b195cbefb2a95_default.png"},{"username":"jamesmcmahon0","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13245578/medium/586aa873b4abddbd9abc6f3de99ab70e.jpeg"},{"username":"b1nar10","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13286752/medium/249b02e3368752cb175446082015737c_default.png"},{"username":"vannCN","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13330448/medium/9b8a9ee3611e51e951e22d5fd4eb7d8d.jpg"},{"username":"binswm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13343482/medium/45dde0e6097b9b72705d2eba9dbbc276_default.png"},{"username":"SkewRam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13496556/medium/188f5c2deb7938eda51eb786cc4539ca.jpeg"},{"username":"raphcatarino","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13547726/medium/b003511e67df13a4b4b5689488fa8099.jpg"},{"username":"shillos5","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13600557/medium/b17650b2b84f829d54fa548c44c1ab27.jpeg"},{"username":"wolong98","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13641407/medium/f4634edc58c7857a357e5293543c15cf.jpg"},{"username":"spair0039","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14012333/medium/72430e96027c09c19141cac38eae4617.png"},{"username":"MajorMarcin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14072183/medium/0a197e64bb92b6ea94cecbb607512c45.jpg"},{"username":"KosmoMoustache","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14103535/medium/51c438cdd9f86e8811c75f4869de479c.png"},{"username":"Soochaehwa","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14118689/medium/496a1ce63111547bf455a1e0a7ac75f1_default.png"},{"username":"garryfield","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14187035/medium/520c964706676045f6eeec1b08edc880.jpg"},{"username":"droidenko","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14444264/medium/4aa3a8e824f72bc9e5ec0d8de307095e.jpeg"},{"username":"maathis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14489950/medium/6eeddf13a757ee35f78f1763f94d95e1.jpeg"},{"username":"bukvam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14546502/medium/a819dc40a13c57395a17dc46e847d3ce.jpg"},{"username":"gm.cinalli","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14670666/medium/2d466a0fdbda40764526be86c97c0ab4.jpeg"},{"username":"antoine2tt","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14722148/medium/f88d926900862dd59007ea4b3419cb9d.png"},{"username":"cretzen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14799754/medium/3ba5c1805ec20c000d5810c07985afe9.jpg"},{"username":"ktKongTong","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14817246/medium/97cfc3c028dbdaf85ebd1102da71e58c.jpeg"},{"username":"marinkaberg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14861042/medium/2d5c4e62613f03082f3e645fa92efd59.jpeg"},{"username":"djismgaming","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14934947/medium/f5a8570713c34ab0f7d5405d105e2a9a.jpeg"},{"username":"f1refa11","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14949159/medium/fd2ae63b8eb4462200ba96abf943c1b9.png"},{"username":"jeffersonraimon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15057621/medium/6dff469563860e2618bc9d45646d0ab4.png"},{"username":"giop98","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15057987/medium/b8a4825d3fc39fc662f35ee258db4b2d.jpeg"},{"username":"tomislav.kraljevic","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15118857/medium/e133f1061cc92850b854d05d8faaeafd.png"},{"username":"Walkx","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15202182/medium/5c37361ae45aeed487b34582c1f7ca37.png"},{"username":"andrea.rosso","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15246318/medium/11f3f5ef44ec7f55b6f143090e208704_default.png"},{"username":"ajnart","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15270132/medium/a0f107a463c8910ee96bc2fa843a17e3.jpeg"},{"username":"Witchling","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15282238/medium/9e196b6783415b10ca571b7673c2ef33.jpg"},{"username":"guineuu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15292058/medium/22fbb758bda3b7805d50bf21d38f2c20.jpeg"},{"username":"Bulgus","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15304568/medium/0e8787e5ceb02ed5c96a514d0068ae87.jpg"},{"username":"Narno","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15314996/medium/a6ba093f24884250a1bf6c6f2ca50f1b_default.png"},{"username":"BySempron","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15315986/medium/e3d22d7b1423c6823a9f36d595ed4bdb.png"},{"username":"jonathan.berglin.work","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15359236/medium/95930b2093db13b76179782f7322c5d5.png"},{"username":"icdmkg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15405504/medium/f334d16cde1ac4ffb935b440d03465af.gif"},{"username":"irithys","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15405614/medium/3086461c47cce0a0c031925e5f943412.png"},{"username":"JannesV","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419912/medium/a7809eb4b817d7c49b62cf10ae86b950.png"},{"username":"benniblot","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419914/medium/8086b1573d31f152ba41949b3a172445.jpeg"},{"username":"pacjo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419916/medium/3cbeddbd7bc01faafb5a3bf47bba915b_default.png"},{"username":"Payou6994","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419934/medium/37c9b9b17dfb578404c1c1ddb73ba7a8.png"},{"username":"fzibi21","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15419976/medium/0da688450358e0290a7b7359cc1f7328.png"},{"username":"WowMurdock","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420118/medium/de19576fccb495b6dfe4c4c04a56b834.png"},{"username":"hbooo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420120/medium/6c7c7f8db785061356ebb03d044d3329.jpeg"},{"username":"Manicraft1001","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420178/medium/50ec94563a06a9f74f33bd09f01eed4d.jpg"},{"username":"Void123","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15420354/medium/86929d44df92a00f9fe900a985c196df_default.png"},{"username":"R4cc","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15422606/medium/a390979662b84694f59de30bdb732141.jpeg"},{"username":"fabricionaweb","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15425808/medium/a9354142e7ae5152c144409d55fda551_default.png"},{"username":"JokeOfDead","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15426890/medium/a383eac9365e9de64fd4ab1d6fd0cb95.jpeg"},{"username":"hkz","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15427174/medium/c88acefb0d7306e1f7470e872029fb39_default.png"},{"username":"Steken","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15428516/medium/d5aea5653c769c3a523182bdb60d1664.png"},{"username":"flar.anton","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15428592/medium/b01fdb365d892e9f811f77fcb50a80a2.jpeg"},{"username":"Bon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15433542/medium/5397da4dfc821f20b6ac14fe0c514e9a.jpeg"},{"username":"bfkadan","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15434162/medium/4f9a0b43cfe3acaea60124c14ba7f44a.png"},{"username":"BunnySweety","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15434662/medium/f0ef200a6a0dcf0e1d0e9ecd4148f560_default.png"},{"username":"HRKings","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15436168/medium/69a31e461d38549f01864e7ef10d642e.png"},{"username":"wiston81","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15439078/medium/10f292c8d12a7c21a44b54495fa4a3d8.jpeg"},{"username":"qaz0911","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15440860/medium/3d3e50ee388c72dc4bf7a771761f2d89_default.png"},{"username":"qqyule","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15441462/medium/7a3cdf82710ffb5d8f388bc0bd010665.png"},{"username":"Bims0n","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15445560/medium/603220b603eeb3367e0f0d3fa675247c.jpg"},{"username":"TariqDaCoder","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15446228/medium/50b0f4040112bbd67690b769477398e5_default.png"},{"username":"Anarchon","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15449644/medium/e925e1f3e3ffbf0f982391ce263a1a28.jpeg"},{"username":"Ashun","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15453020/medium/ccdcf51c73d6aae40751bb30beee1915_default.png"},{"username":"sebekmartin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15454038/medium/bcfb44598cdfd1d7cd4eb35812538962.jpeg"},{"username":"RagnarGraves","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15459882/medium/143d5af850c1154070a218bea124e9cb_default.png"},{"username":"PrtmPhlp","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15462414/medium/b80db55e9de301432dcd1f8c8b24fd49_default.png"},{"username":"DooYoo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15470768/medium/2a18cf4be67094724b508c9e1e698a21_default.png"},{"username":"espentruls","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15486092/medium/8e38afc3a4ff669226a0cfd3e420ff3a.jpeg"},{"username":"frisco82","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15486922/medium/4e1c5d4189b42508e660daa3c1c25b2a.jpeg"},{"username":"lupineDK","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15491798/medium/461bd501e8371c062bf29ea171aedd36_default.png"},{"username":"hillaliy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15492732/medium/0bae17b421604892d888e3fc70cf0587.jpeg"},{"username":"MarcOrfilaCarreras","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15501072/medium/ea52b26c3c6f21e4931e38e3ce3f3d6e.png"},{"username":"robertbridda","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15507822/medium/a368c2e30411bb2da9b49290084191f3.png"},{"username":"MKoniuszko","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15518090/medium/87605434fcc839f6763ab07c50f6d232.jpeg"},{"username":"HeroSizy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15518710/medium/4e79c0e98cbeb536dd961e656331b509.png"},{"username":"dwt136","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15520022/medium/554422503f2baea43ace85facb4546fb_default.png"},{"username":"asifthewebguy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15526719/medium/b18931dd0c800d725048bd440646198b_default.png"},{"username":"eiloogs","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15545537/medium/f290a2f1190983530a9b76b2e858a609.gif"},{"username":"_vytdv","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15547289/medium/60d8644cc8ad6f11a92ccea4a14cd098_default.png"},{"username":"crendasien","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15554645/medium/598ab1d4aaf6b8dccd5ba16be92da7b9.jpeg"},{"username":"edxo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15573823/medium/8a565b732a75a77f840dd123cdb30bf4.png"},{"username":"somerlev","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15617065/medium/f4b13513e311ec902d90b2f718412c55.jpg"},{"username":"kid1412621","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15643771/medium/dd455e32de652fa88e6fd97598bdffa7.png"},{"username":"suming","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15644717/medium/244159dfe10fa03436205506f80c9e25.png"},{"username":"nick.gher","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15647517/medium/5374a2c6fef60a3fbf0edf86b997c351_default.png"},{"username":"DataCat","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15650315/medium/ce7c1365adf35c5d490d77500a4607fb_default.png"},{"username":"dizo89","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15658375/medium/0ca745e5017d491fe1b22b0239904de8.jpeg"},{"username":"tee_noodle","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15674577/medium/804d9cf06f5196026acb6436b809d0da_default.png"},{"username":"Marty88","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15674593/medium/492b1509d52bd2809dea768121217125.jpeg"},{"username":"Spillebulle","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15677023/medium/20b98bb85062e07afe0e63618f8a5feb.PNG"},{"username":"petitmewen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15685239/medium/15de9b62d2e0bc25013435f1784bbcc1.jpeg"},{"username":"NoProsNoNoobs","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15687709/medium/ae8f65fafeb8bcf74dcb8871bbe46461.png"},{"username":"y.gybson","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15690777/medium/b5cb5d2d5768904ff6586c727e3a6c77.jpeg"},{"username":"inside90","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15704947/medium/c1355fcb30dd76f8e39d98d1d49f1c52.png"},{"username":"RJSkudra","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15709853/medium/c3abf2774913dc4e81fb261d36d7668c.png"},{"username":"binge203","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15713937/medium/77c1cfa4314673db80e6881fd9f64668.gif"},{"username":"Mailootje","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15714337/medium/743c3bc4ab1989966a375eeeec83d8b8.jpeg"},{"username":"tim-wiegers","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15719805/medium/08a96f064813350661cd6b20bf3d7d99.png"},{"username":"GkhnG","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15722911/medium/71a027caec489ef6ce82bcf1888329d0_default.png"},{"username":"Zoen-Millo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15760967/medium/9e956f11adc5b34f5636268b5c485dbf.jpg"},{"username":"HooinKyoma","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15792897/medium/9489f0a9b368e0e827ae758b740a2eed.jpeg"},{"username":"wathergeen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15794495/medium/a83b7fc80d180669ebfd6deb3544cfd0.png"},{"username":"MoeToo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15818233/medium/d35cd6953717706eaf20f6c143c62947.png"},{"username":"itodouble","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15836233/medium/e984caea18fb0673bf319fcf28cef649.png"},{"username":"loslocitos","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15847901/medium/fe30d12fd2cf38212f929e13b169f9ec.jpeg"},{"username":"Oversleep","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15849065/medium/06141f13a6d541d753f3c2f2947b8068_default.png"},{"username":"Beardy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15865139/medium/fca6b9d2b3f52e286d1568f52b83b6a0_default.png"},{"username":"raelyan","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15875457/medium/2f4fda1d1aaa5dcc79b328baf3f03151.jpeg"},{"username":"dolphin738","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15913763/medium/ee6fede7b8528ca642329ada80d1cc18.png"},{"username":"brunotco","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15916719/medium/09db45880fc05abc18adb8d932a5ecf9_default.png"},{"username":"LukeIsHereToDevelop","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15924739/medium/3e6cd3940297bb4ba7bb039c93e6f918.png"},{"username":"kennit","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15925879/medium/6b0733ad3c5949b91c55e4d8b03db8a5_default.png"},{"username":"kuunpire","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15950309/medium/8192a4f08f07086828ac9f74ed29a169.jpeg"},{"username":"Sandor-dev","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15951759/medium/0216c2da4eb028164ebbecf1c72f6271_default.png"},{"username":"Meierschlumpf","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15953187/medium/23c744faef1ab84fbdc9351a7850aab6.jpeg"},{"username":"harmlesscat","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15970733/medium/dd8d0214a0250c932bb518b1b55e45a2_default.png"},{"username":"OrzWTF","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15976121/medium/4c4557cbff7ff7b0503455bc59c020e0.jpeg"},{"username":"tagaishi","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15977271/medium/eade504c83a5a1ff831c80a538fbdb44_default.png"},{"username":"azurite928","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/15981895/medium/547ccc459ee123e78b5401c499f1022d.png"},{"username":"Ronner231","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16021342/medium/7734d550df2de5a2fec2ffff33e7024c.jpeg"},{"username":"ugyes","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16034148/medium/ed001e3f470a2dea9a8ce955b18e7bd5.png"},{"username":"rpieja","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16045554/medium/bd55baca2ef8b92502a760cc9ee7c505_default.png"},{"username":"flambyisyou","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16051620/medium/3a3bc0c90f6b95ab4ef74396a0a17beb.png"},{"username":"Topbcy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16077170/medium/d3aed33ea56330338756cfcd89477cfe.jpeg"},{"username":"ai5d02sb","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16084674/medium/7c8119fe2a5ca71bb15f636916a42b95_default.png"},{"username":"explosiveparrot","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16097722/medium/7762f80fc1da63f5b2eb87de9d640324_default.png"},{"username":"DestroyCom","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16111544/medium/83e3d3ac5c8bfed634cd1a074854db67.png"},{"username":"neotraxo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16116966/medium/b30df957873329019a8a90a69f6efe3a.png"},{"username":"gzxpa","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16123314/medium/487b05577310a946b0b98bc72c11213b_default.png"},{"username":"TORIK","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16124732/medium/de770890e6411860ac06e8cc2dc0abd0_default.png"},{"username":"sergio.pibot","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16138114/medium/80db802b2fcd6bbf19ea4c7413367dca.jpeg"},{"username":"karam-ajaj","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16139838/medium/7539ab958d3c85d5f67e7849483ea8f7.jpeg"},{"username":"SimonHenz97","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16151520/medium/9b94a85b536688e2d94538c384fd0a76.png"},{"username":"olsson82","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16198988/medium/eeaab4cba210c537424d4204754b604e.png"},{"username":"bo3bdo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16222806/medium/8652f3beacb6098dde5a4cd0a29fe80d.jpeg"},{"username":"AngryPlayer04","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16245192/medium/342715274f4dc31fd4132cdae9126188.jpeg"},{"username":"ehatamm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16245884/medium/979d5e5526fe545be9bf46db481f7182.jpeg"},{"username":"Balionelis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16246058/medium/986d62ba363594c517d966fe9178dcbb.png"},{"username":"kwargs","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16248816/medium/19ce11f04bf1ae2637e0483399c675f9_default.png"},{"username":"lucicu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16273892/medium/3b09e8f3bead221ef98d6a45a16851dc_default.png"},{"username":"Michael5564445","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16357688/medium/9d9026a8bf3eaccb0417da240932ebf7.png"},{"username":"Netscream","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16359198/medium/694e0c8572dc8a47e6d63da31ec5b992.png"},{"username":"belicstefan04","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16368142/medium/4742dcfd7bf7ad7e33e37ac44fba7e0f.png"},{"username":"Hamad2066","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16371478/medium/f37bbc7685b6757defdbd1494236af61.jpeg"},{"username":"3ct0pl4sm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16399616/medium/ce796d1c40163975624c0a483e56374f.png"},{"username":"sanchez.marcell626","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16433865/medium/3ddde1314764cc2205ffdcd1ae719a91.png"},{"username":"Minoctis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16490079/medium/91fd0849303a4eca033d660d0a7b6854.jpeg"},{"username":"vittoriosoccorso","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16498805/medium/17086b2f1981f734edd1572f79c3158a.jpeg"},{"username":"Worgen325","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16533177/medium/4a62cc6b06095751aeb4b1b3e96db93f.png"},{"username":"homarr","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16657003/medium/3afabfd3de949a54ff5d40ad04552aba.png"},{"username":"mwgg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16658379/medium/763dd09f5c238cc5324d4d5357985292.png"},{"username":"dymek37","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16659221/medium/d1dc6d11d7e7fc370efc5070e837ae03.png"},{"username":"kiwinho","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16671855/medium/bfe3a2d497dc4748a04d02e4ae2139cb.jpeg"},{"username":"tjvg4m34r13","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16679135/medium/7a483b9b0abe0d925e54808e1cb38fa0.jpeg"},{"username":"Diegoem","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16705921/medium/29ce68ebc191fc3f65499511b12de98f_default.png"},{"username":"bouks69","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16746091/medium/b58b1fc08520de416198be9df5d093eb.jpeg"},{"username":"futhgar","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16748067/medium/b8c526b097f9aa9d687250cac3df16dc.jpeg"},{"username":"GrimSQL","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16764343/medium/fff729a76d1f8fbcdaee9bb0c0f5f3fd.png"},{"username":"chnikel","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16767047/medium/3dda2a37e03049dafefe6697bb00f75c.png"},{"username":"yuki19870616","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16767951/medium/f59c848e38382cda6c8464b0a7b9e642_default.png"},{"username":"noamdal","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16782245/medium/b4a72a61f9caf138f0322c0cb987e6d0.png"},{"username":"MalithRukshan","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16809057/medium/084d6a5b35fbbeacc70e7021197d222f.png"},{"username":"minirope19","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16930929/medium/e8cbbc26747e31c5a8959215e1dd067b.jpeg"},{"username":"toineenzo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12371852/medium/9f1b2bedb4794c59479cd289bdba9fab.png"},{"username":"ArcaneWater","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12421105/medium/1ac82517a6c658f6b62c48aebcb17e86_default.png"},{"username":"SergiSvK","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13320543/medium/3df3c79cc5f0c53716c559cd3fd2fc20.png"},{"username":"Cruellest","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13610615/medium/2a74faa0947ee08d18f7946fb8602c1e.jpg"},{"username":"Thario","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14491372/medium/dd5e142070802a672900121aa3f332a6_default.png"},{"username":"Kachelkaiser","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14763406/medium/203a781797da4a18fe0f4e7db8fd547c.png"},{"username":"regi4","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14842936/medium/f7e1d672f562a7db61ba6b4b8f4de41d.png"},{"username":"baton5129","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14891064/medium/8d438f557b82977dd02f0ead3187265f.PNG"},{"username":"TheRedCyclops","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16486399/medium/7f39226180120d5a9efcb8e13d8aec8e_default.png"},{"username":"B3CKDOOR","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16744975/medium/e6c7b2d45e76465d54e6efb67c83da7d.png"},{"username":"Larsluph","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16779933/medium/ed7d36f8b44013bad3a16ac0491bd0f7.png"},{"username":"FOEDI","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16781001/medium/6b4552fb72e359aa016f7a054078fac8.png"},{"username":"xmarkurion","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16805443/medium/34a20428427de5aaef99c7d140646803.png"},{"username":"gregid","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16806705/medium/f3c8f4a20436e8538929130142bbc104.png"},{"username":"Flameberg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16820453/medium/d47be866148474c9d05fec6fbe406d88.png"},{"username":"Playfust","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16872865/medium/5f4609cc711e5fb9fa8a0b178635769c.jpeg"},{"username":"Cotignac","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16879297/medium/81ff353edf030699a159bb79cda26e84.jpg"},{"username":"LeaHun","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16916375/medium/618520f0543b1e212ebc83d66b683d4b_default.png"},{"username":"jackwellerreal","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16919717/medium/37bbfdc03893f141133ccc619593266d.png"},{"username":"andrius.cim","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/16967845/medium/46028fc1a0ddfaaeebcb37b39739625d_default.png"},{"username":"xjxexrxrxyx","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17041412/medium/d34d664166db6fb25579bca9ff3b50b4.jpeg"},{"username":"bilhal.fellah","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17044572/medium/d1ec6f17e4aa013e9eededc83778d2c6.png"},{"username":"the_octo","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17058060/medium/7423ab3a4cabb67f5decb2e2dfa2b675_default.png"},{"username":"BamesJond","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17075846/medium/128d7ffd40254c8e376f45678e2fc620_default.png"},{"username":"Kornikus","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17134240/medium/d7a42b2c30db46ff152699ca01f9e11a_default.png"},{"username":"xoxyuxu","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17176526/medium/108055aa24343043de852e412bec74be.png"},{"username":"cryptodntsleep","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/17249408/medium/2bd0f716f062632f78085b3828a72b6d_default.png"}] \ No newline at end of file diff --git a/tooling/eslint/package.json b/tooling/eslint/package.json index 5805c09d5..97f57a2eb 100644 --- a/tooling/eslint/package.json +++ b/tooling/eslint/package.json @@ -17,14 +17,14 @@ }, "prettier": "@homarr/prettier-config", "dependencies": { - "@next/eslint-plugin-next": "15.4.5", + "@next/eslint-plugin-next": "15.4.6", "eslint-config-prettier": "^10.1.8", "eslint-config-turbo": "^2.5.5", "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^5.2.0", - "typescript-eslint": "^8.38.0" + "typescript-eslint": "^8.39.0" }, "devDependencies": { "@homarr/prettier-config": "workspace:^0.1.0", diff --git a/tooling/github/setup/action.yml b/tooling/github/setup/action.yml index e5a50b4ce..04c4d30b8 100644 --- a/tooling/github/setup/action.yml +++ b/tooling/github/setup/action.yml @@ -7,11 +7,11 @@ runs: - uses: pnpm/action-setup@v4 - uses: actions/setup-node@v4 with: - node-version: 22 + node-version: 22.18.0 cache: "pnpm" - shell: bash run: pnpm add -g turbo - shell: bash - run: pnpm install + run: pnpm install --frozen-lockfile diff --git a/tooling/prettier/package.json b/tooling/prettier/package.json index 04518bc9c..a5e29ff74 100644 --- a/tooling/prettier/package.json +++ b/tooling/prettier/package.json @@ -10,7 +10,7 @@ }, "prettier": "@homarr/prettier-config", "dependencies": { - "@ianvs/prettier-plugin-sort-imports": "^4.5.1", + "@ianvs/prettier-plugin-sort-imports": "^4.6.1", "prettier": "^3.6.2" }, "devDependencies": { diff --git a/tsconfig.scripts.json b/tsconfig.scripts.json new file mode 100644 index 000000000..31524ab81 --- /dev/null +++ b/tsconfig.scripts.json @@ -0,0 +1,8 @@ +{ + "extends": "@homarr/tsconfig/base.json", + "compilerOptions": { + "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json" + }, + "include": ["scripts"], + "exclude": ["node_modules"] +}