diff --git a/.dockerignore b/.dockerignore index edbf8525..698137cb 100644 --- a/.dockerignore +++ b/.dockerignore @@ -16,11 +16,11 @@ **/compose* **/Dockerfile* **/node_modules +!.next/standalone/node_modules **/npm-debug.log **/obj **/secrets.dev.yaml **/values.dev.yaml -**/.next README.md config/ k3d/ diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index a274b610..855f7af3 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -1,9 +1,4 @@ -name: Docker - -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. +name: Docker CI on: # schedule: @@ -28,43 +23,40 @@ on: workflow_dispatch: env: - # github.repository as / IMAGE_NAME: ${{ github.repository }} - jobs: pre-commit: name: Linting Checks runs-on: ubuntu-22.04 steps: - - - name: Checkout repository + - name: Checkout repository uses: actions/checkout@v4 - - - name: Install python + + - name: Install python uses: actions/setup-python@v5 with: python-version: 3.x - - - name: Check files + + - name: Check files uses: pre-commit/action@v3.0.1 - - - name: Install pnpm + + - name: Install pnpm uses: pnpm/action-setup@v4 with: version: 10 run_install: false - - - name: Install Node.js + + - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 20 cache: 'pnpm' - - - name: Install dependencies + + - name: Install dependencies run: pnpm install - - - name: Lint frontend + + - name: Lint frontend run: pnpm run lint build: @@ -80,33 +72,6 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - # Login to Docker Registry - # https://github.com/docker/login-action - - name: Log into registry ${{ env.REGISTRY }} - if: github.event_name != 'pull_request' - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Login to Docker Hub - if: github.event_name != 'pull_request' - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - # Setup QEMU - # https://github.com/marketplace/actions/docker-setup-buildx#with-qemu - - name: Setup QEMU - uses: docker/setup-qemu-action@v3.6.0 - - # Workaround: https://github.com/docker/build-push-action/issues/461 - - name: Setup Docker buildx - uses: docker/setup-buildx-action@v3 - - # Extract metadata (tags, labels) for Docker - # https://github.com/docker/metadata-action - name: Extract Docker metadata id: meta uses: docker/metadata-action@v5 @@ -114,11 +79,69 @@ jobs: images: | ${{ env.IMAGE_NAME }} ghcr.io/${{ env.IMAGE_NAME }} + tags: | + # Default tags + type=schedule,pattern=nightly + type=ref,event=branch + type=ref,event=tag + # Versioning tags + type=semver,pattern=v{{version}} + type=semver,pattern=v{{major}}.{{minor}} + type=semver,pattern=v{{major}} flavor: | latest=auto - # Build and push Docker image with Buildx (don't push on PR) - # https://github.com/docker/build-push-action + - name: Next.js build cache + uses: actions/cache@v4 + with: + path: .next/cache + key: nextjs-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('**/*.js', '**/*.jsx') }} + restore-keys: | + nextjs-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} + + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 10 + run_install: false + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + + - name: Build app + run: | + NEXT_PUBLIC_BUILDTIME="${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}" \ + NEXT_PUBLIC_VERSION="${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}" \ + NEXT_PUBLIC_REVISION="${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}" \ + pnpm run build + + - name: Log into registry ${{ env.REGISTRY }} + if: github.event_name != 'pull_request' + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Login to Docker Hub + if: github.event_name != 'pull_request' + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Setup QEMU + uses: docker/setup-qemu-action@v3.6.0 + + - name: Setup Docker buildx + uses: docker/setup-buildx-action@v3 + - name: Build and push Docker image id: build-and-push uses: docker/build-push-action@v6 @@ -128,18 +151,15 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} build-args: | + CI=true BUILDTIME=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }} VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} REVISION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }} - # https://github.com/docker/setup-qemu-action#about - # platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6 platforms: linux/amd64,linux/arm64 cache-from: type=local,src=/tmp/.buildx-cache cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max - # Temp fix - # https://github.com/docker/build-push-action/issues/252 - # https://github.com/moby/buildkit/issues/1896 + # https://github.com/docker/build-push-action/issues/252 / https://github.com/moby/buildkit/issues/1896 - name: Move cache run: | rm -rf /tmp/.buildx-cache diff --git a/.github/workflows/docs-publish.yml b/.github/workflows/docs-publish.yml index def1ee1e..5479e492 100644 --- a/.github/workflows/docs-publish.yml +++ b/.github/workflows/docs-publish.yml @@ -55,7 +55,7 @@ jobs: run: MKINSIDERS=false mkdocs build deploy: name: Build & Deploy - if: github.repository == 'gethomepage/homepage' && github.event_name != 'pull_request' + if: github.repository == 'gethomepage/homepage' && github.event_name != 'pull_request' && github.ref == 'refs/heads/main' runs-on: ubuntu-latest needs: - pre-commit diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6cc46b47..0b4f5624 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -9,11 +9,14 @@ repos: - id: check-yaml exclude: "(^mkdocs\\.yml$)" - id: check-added-large-files -- repo: https://github.com/pre-commit/mirrors-prettier - rev: 'v3.0.3' +- repo: https://github.com/rbubley/mirrors-prettier + rev: 'v3.3.3' hooks: - id: prettier types_or: - javascript - markdown - jsx + additional_dependencies: + - prettier@3.3.3 + - 'prettier-plugin-organize-imports@4.1.0' diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 0967ef42..00000000 --- a/.prettierrc +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 00000000..b48ef007 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,5 @@ +const config = { + plugins: [require("prettier-plugin-organize-imports")], +}; + +module.exports = config; diff --git a/Dockerfile b/Dockerfile index a08d22f5..76008113 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,67 +1,63 @@ -# Install dependencies only when needed -FROM docker.io/node:22-alpine AS deps - -WORKDIR /app - -COPY --link package.json pnpm-lock.yaml* ./ - -SHELL ["/bin/ash", "-xeo", "pipefail", "-c"] -RUN apk add --no-cache libc6-compat \ - && apk add --no-cache --virtual .gyp python3 make g++ \ - && npm install -g pnpm - -RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store pnpm fetch | grep -v "cross-device link not permitted\|Falling back to copying packages from store" - -RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store pnpm install -r --offline - -# Rebuild the source code only when needed -FROM docker.io/node:22-alpine AS builder +# ========================= +# Builder Stage +# ========================= +FROM node:22-slim AS builder WORKDIR /app +# Setup RUN mkdir config +COPY . . +ARG CI ARG BUILDTIME ARG VERSION ARG REVISION +ENV CI=$CI -COPY --link --from=deps /app/node_modules ./node_modules/ -COPY . . +# Install and build only outside CI +RUN if [ "$CI" != "true" ]; then \ + corepack enable && corepack prepare pnpm@latest --activate && \ + pnpm install --frozen-lockfile --prefer-offline && \ + NEXT_TELEMETRY_DISABLED=1 \ + NEXT_PUBLIC_BUILDTIME=$BUILDTIME \ + NEXT_PUBLIC_VERSION=$VERSION \ + NEXT_PUBLIC_REVISION=$REVISION \ + pnpm run build; \ + else \ + echo "✅ Using prebuilt app from CI context"; \ + fi -SHELL ["/bin/ash", "-xeo", "pipefail", "-c"] -RUN npm install -g pnpm \ - && pnpm run telemetry \ - && NEXT_PUBLIC_BUILDTIME=$BUILDTIME NEXT_PUBLIC_VERSION=$VERSION NEXT_PUBLIC_REVISION=$REVISION pnpm run build - -# Production image, copy all the files and run next -FROM docker.io/node:22-alpine AS runner -LABEL org.opencontainers.image.title "Homepage" -LABEL org.opencontainers.image.description "A self-hosted services landing page, with docker and service integrations." +# ========================= +# Runtime Stage +# ========================= +FROM node:22-alpine AS runner +LABEL org.opencontainers.image.title="Homepage" +LABEL org.opencontainers.image.description="A self-hosted services landing page, with docker and service integrations." LABEL org.opencontainers.image.url="https://github.com/di0ik/homepage-plus" LABEL org.opencontainers.image.documentation='https://github.com/gethomepage/homepage/wiki' LABEL org.opencontainers.image.source='https://github.com/di0ik/homepage-plus' LABEL org.opencontainers.image.licenses='Apache-2.0' -ENV NODE_ENV=production - +# Setup WORKDIR /app -# Copy files from context (this allows the files to copy before the builder stage is done). -COPY --link --chown=1000:1000 package.json next.config.js ./ +# Copy some files from context COPY --link --chown=1000:1000 /public ./public/ - -# Copy files from builder -COPY --link --from=builder --chown=1000:1000 /app/.next/standalone ./ -COPY --link --from=builder --chown=1000:1000 /app/.next/static/ ./.next/static/ COPY --link --chmod=755 docker-entrypoint.sh /usr/local/bin/ -RUN apk add --no-cache su-exec +# Copy only necessary files from the build stage +COPY --link --from=builder --chown=1000:1000 /app/.next/standalone/ ./ +COPY --link --from=builder --chown=1000:1000 /app/.next/static/ ./.next/static +RUN apk add --no-cache su-exec iputils-ping + +ENV NODE_ENV=production ENV HOSTNAME=0.0.0.0 ENV PORT=3000 EXPOSE $PORT HEALTHCHECK --interval=10s --timeout=3s --start-period=20s \ - CMD wget --no-verbose --tries=1 --spider --no-check-certificate http://127.0.0.1:$PORT/api/healthcheck || exit 1 + CMD wget --no-verbose --tries=1 --spider http://127.0.0.1:$PORT/api/healthcheck || exit 1 ENTRYPOINT ["docker-entrypoint.sh"] CMD ["node", "server.js"] diff --git a/docs/widgets/services/customapi.md b/docs/widgets/services/customapi.md index 70947a10..37a48fd8 100644 --- a/docs/widgets/services/customapi.md +++ b/docs/widgets/services/customapi.md @@ -189,6 +189,7 @@ widget: name: id # required, field in each item to use as the item name (left side) label: ip_address # required, field in each item to use as the item label (right side) limit: 5 # optional, limit the number of items to display + format: text # optional - format of the label field target: https://example.com/server/{id} # optional, makes items clickable with template support ``` diff --git a/docs/widgets/services/hoarder.md b/docs/widgets/services/hoarder.md deleted file mode 100644 index 3e8c82ad..00000000 --- a/docs/widgets/services/hoarder.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Hoarder -description: Hoarder Widget Configuration ---- - -Learn more about [Hoarder](https://hoarder.app). - -Generate an API key for your user at `User Settings > API Keys`. - -Allowed fields: `["bookmarks", "favorites", "archived", "highlights", "lists", "tags"]` (maximum of 4). - -```yaml -widget: - type: hoarder - url: http[s]://hoarder.host.or.ip[:port] - key: hoarderapikey -``` diff --git a/docs/widgets/services/index.md b/docs/widgets/services/index.md index beb6d491..80ff72ba 100644 --- a/docs/widgets/services/index.md +++ b/docs/widgets/services/index.md @@ -51,7 +51,7 @@ You can also find a list of all available service widgets in the sidebar navigat - [HDHomeRun](hdhomerun.md) - [Headscale](headscale.md) - [Healthchecks](healthchecks.md) -- [Hoarder](hoarder.md) +- [Karakeep](karakeep.md) - [Home Assistant](homeassistant.md) - [HomeBox](homebox.md) - [Homebridge](homebridge.md) diff --git a/docs/widgets/services/karakeep.md b/docs/widgets/services/karakeep.md new file mode 100644 index 00000000..a2902315 --- /dev/null +++ b/docs/widgets/services/karakeep.md @@ -0,0 +1,17 @@ +--- +title: Karakeep +description: Karakeep Widget Configuration +--- + +Learn more about [Karakeep](https://karakeep.app) (formerly known as Hoarder). + +Generate an API key for your user at `User Settings > API Keys`. + +Allowed fields: `["bookmarks", "favorites", "archived", "highlights", "lists", "tags"]` (maximum of 4). + +```yaml +widget: + type: karakeep + url: http[s]://karakeep.host.or.ip[:port] + key: karakeep_api_key +``` diff --git a/mkdocs.yml b/mkdocs.yml index 65022ac7..04b888c6 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -74,7 +74,7 @@ nav: - widgets/services/hdhomerun.md - widgets/services/headscale.md - widgets/services/healthchecks.md - - widgets/services/hoarder.md + - widgets/services/karakeep.md - widgets/services/homeassistant.md - widgets/services/homebox.md - widgets/services/homebridge.md diff --git a/next-i18next.config.js b/next-i18next.config.js index a1b5c7b3..f6968dc3 100644 --- a/next-i18next.config.js +++ b/next-i18next.config.js @@ -131,8 +131,8 @@ module.exports = { ? BIBIT_UNITS : BIT_UNITS : options.binary - ? BIBYTE_UNITS - : BYTE_UNITS; + ? BIBYTE_UNITS + : BYTE_UNITS; if (value === 0) return `0 ${sizes[0]}/s`; diff --git a/package.json b/package.json index ae9047c1..9ac85840 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "homepage", - "version": "1.1.0", + "version": "1.2.0", "private": true, "scripts": { "preinstall": "npx only-allow pnpm", @@ -19,13 +19,13 @@ "dockerode": "^4.0.4", "follow-redirects": "^1.15.9", "gamedig": "^5.2.0", - "i18next": "^21.10.0", + "i18next": "^24.2.3", "js-yaml": "^4.1.0", "json-rpc-2.0": "^1.7.0", "luxon": "^3.5.0", "memory-cache": "^0.2.0", "minecraftstatuspinger": "^1.2.2", - "next": "^15.2.3", + "next": "^15.2.4", "next-i18next": "^12.1.0", "ping": "^0.4.4", "pretty-bytes": "^6.1.1", @@ -36,7 +36,7 @@ "react-icons": "^5.4.0", "recharts": "^2.15.1", "rrule": "^2.8.1", - "swr": "^1.3.0", + "swr": "^2.3.3", "systeminformation": "^5.25.11", "tough-cookie": "^5.1.2", "urbackup-server-api": "^0.8.9", @@ -47,15 +47,16 @@ "@tailwindcss/forms": "^0.5.10", "@tailwindcss/postcss": "^4.0.9", "eslint": "^9.21.0", - "eslint-config-next": "^15.1.7", - "eslint-config-prettier": "^10.0.2", + "eslint-config-next": "^15.2.4", + "eslint-config-prettier": "^10.1.1", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-prettier": "^5.2.3", "eslint-plugin-react": "^7.37.4", "eslint-plugin-react-hooks": "^5.1.0", - "postcss": "^8.5.2", + "postcss": "^8.5.3", "prettier": "^3.5.2", + "prettier-plugin-organize-imports": "^4.1.0", "tailwind-scrollbar": "^4.0.1", "tailwindcss": "^4.0.9", "typescript": "^5.7.3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2848e239..170e380e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,8 +33,8 @@ importers: specifier: ^5.2.0 version: 5.2.0 i18next: - specifier: ^21.10.0 - version: 21.10.0 + specifier: ^24.2.3 + version: 24.2.3(typescript@5.7.3) js-yaml: specifier: ^4.1.0 version: 4.1.0 @@ -51,11 +51,11 @@ importers: specifier: ^1.2.2 version: 1.2.2 next: - specifier: ^15.2.3 - version: 15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^15.2.4 + version: 15.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-i18next: specifier: ^12.1.0 - version: 12.1.0(next@15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 12.1.0(next@15.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ping: specifier: ^0.4.4 version: 0.4.4 @@ -73,7 +73,7 @@ importers: version: 18.3.1(react@18.3.1) react-i18next: specifier: ^11.18.6 - version: 11.18.6(i18next@21.10.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 11.18.6(i18next@24.2.3(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-icons: specifier: ^5.4.0 version: 5.4.0(react@18.3.1) @@ -84,8 +84,8 @@ importers: specifier: ^2.8.1 version: 2.8.1 swr: - specifier: ^1.3.0 - version: 1.3.0(react@18.3.1) + specifier: ^2.3.3 + version: 2.3.3(react@18.3.1) systeminformation: specifier: ^5.25.11 version: 5.25.11 @@ -116,20 +116,20 @@ importers: specifier: ^9.21.0 version: 9.21.0(jiti@2.4.2) eslint-config-next: - specifier: ^15.1.7 - version: 15.1.7(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + specifier: ^15.2.4 + version: 15.2.4(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) eslint-config-prettier: - specifier: ^10.0.2 - version: 10.0.2(eslint@9.21.0(jiti@2.4.2)) + specifier: ^10.1.1 + version: 10.1.1(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-import: specifier: ^2.31.0 - version: 2.31.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2)) + version: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-jsx-a11y: specifier: ^6.10.2 version: 6.10.2(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-prettier: specifier: ^5.2.3 - version: 5.2.3(eslint-config-prettier@10.0.2(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2))(prettier@3.5.2) + version: 5.2.3(eslint-config-prettier@10.1.1(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2))(prettier@3.5.2) eslint-plugin-react: specifier: ^7.37.4 version: 7.37.4(eslint@9.21.0(jiti@2.4.2)) @@ -137,11 +137,14 @@ importers: specifier: ^5.1.0 version: 5.1.0(eslint@9.21.0(jiti@2.4.2)) postcss: - specifier: ^8.5.2 - version: 8.5.2 + specifier: ^8.5.3 + version: 8.5.3 prettier: specifier: ^3.5.2 version: 3.5.2 + prettier-plugin-organize-imports: + specifier: ^4.1.0 + version: 4.1.0(prettier@3.5.2)(typescript@5.7.3) tailwind-scrollbar: specifier: ^4.0.1 version: 4.0.1(react@18.3.1)(tailwindcss@4.0.9) @@ -162,6 +165,10 @@ packages: resolution: {integrity: sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.27.0': + resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} + engines: {node: '>=6.9.0'} + '@balena/dockerignore@1.0.2': resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} @@ -172,8 +179,14 @@ packages: '@dabh/diagnostics@2.0.3': resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} - '@emnapi/runtime@1.3.1': - resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + '@emnapi/core@1.4.0': + resolution: {integrity: sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==} + + '@emnapi/runtime@1.4.0': + resolution: {integrity: sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==} + + '@emnapi/wasi-threads@1.0.1': + resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} '@eslint-community/eslint-utils@4.4.1': resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} @@ -181,6 +194,12 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.5.1': + resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -376,56 +395,59 @@ packages: '@kubernetes/client-node@1.0.0': resolution: {integrity: sha512-a8NSvFDSHKFZ0sR1hbPSf8IDFNJwctEU5RodSCNiq/moRXWmrdmqhb1RRQzF+l+TSBaDgHw3YsYNxxE92STBzw==} - '@next/env@15.2.3': - resolution: {integrity: sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==} + '@napi-rs/wasm-runtime@0.2.8': + resolution: {integrity: sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==} - '@next/eslint-plugin-next@15.1.7': - resolution: {integrity: sha512-kRP7RjSxfTO13NE317ek3mSGzoZlI33nc/i5hs1KaWpK+egs85xg0DJ4p32QEiHnR0mVjuUfhRIun7awqfL7pQ==} + '@next/env@15.2.4': + resolution: {integrity: sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==} - '@next/swc-darwin-arm64@15.2.3': - resolution: {integrity: sha512-uaBhA8aLbXLqwjnsHSkxs353WrRgQgiFjduDpc7YXEU0B54IKx3vU+cxQlYwPCyC8uYEEX7THhtQQsfHnvv8dw==} + '@next/eslint-plugin-next@15.2.4': + resolution: {integrity: sha512-O8ScvKtnxkp8kL9TpJTTKnMqlkZnS+QxwoQnJwPGBxjBbzd6OVVPEJ5/pMNrktSyXQD/chEfzfFzYLM6JANOOQ==} + + '@next/swc-darwin-arm64@15.2.4': + resolution: {integrity: sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.2.3': - resolution: {integrity: sha512-pVwKvJ4Zk7h+4hwhqOUuMx7Ib02u3gDX3HXPKIShBi9JlYllI0nU6TWLbPT94dt7FSi6mSBhfc2JrHViwqbOdw==} + '@next/swc-darwin-x64@15.2.4': + resolution: {integrity: sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.2.3': - resolution: {integrity: sha512-50ibWdn2RuFFkOEUmo9NCcQbbV9ViQOrUfG48zHBCONciHjaUKtHcYFiCwBVuzD08fzvzkWuuZkd4AqbvKO7UQ==} + '@next/swc-linux-arm64-gnu@15.2.4': + resolution: {integrity: sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.2.3': - resolution: {integrity: sha512-2gAPA7P652D3HzR4cLyAuVYwYqjG0mt/3pHSWTCyKZq/N/dJcUAEoNQMyUmwTZWCJRKofB+JPuDVP2aD8w2J6Q==} + '@next/swc-linux-arm64-musl@15.2.4': + resolution: {integrity: sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.2.3': - resolution: {integrity: sha512-ODSKvrdMgAJOVU4qElflYy1KSZRM3M45JVbeZu42TINCMG3anp7YCBn80RkISV6bhzKwcUqLBAmOiWkaGtBA9w==} + '@next/swc-linux-x64-gnu@15.2.4': + resolution: {integrity: sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.2.3': - resolution: {integrity: sha512-ZR9kLwCWrlYxwEoytqPi1jhPd1TlsSJWAc+H/CJHmHkf2nD92MQpSRIURR1iNgA/kuFSdxB8xIPt4p/T78kwsg==} + '@next/swc-linux-x64-musl@15.2.4': + resolution: {integrity: sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.2.3': - resolution: {integrity: sha512-+G2FrDcfm2YDbhDiObDU/qPriWeiz/9cRR0yMWJeTLGGX6/x8oryO3tt7HhodA1vZ8r2ddJPCjtLcpaVl7TE2Q==} + '@next/swc-win32-arm64-msvc@15.2.4': + resolution: {integrity: sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.2.3': - resolution: {integrity: sha512-gHYS9tc+G2W0ZC8rBL+H6RdtXIyk40uLiaos0yj5US85FNhbFEndMA2nW3z47nzOWiSvXTZ5kBClc3rD0zJg0w==} + '@next/swc-win32-x64-msvc@15.2.4': + resolution: {integrity: sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -487,8 +509,8 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@rushstack/eslint-patch@1.10.5': - resolution: {integrity: sha512-kkKUDVlII2DQiKy7UstOR1ErJP8kUKAQ4oa+SQtM0K+lPdmmjj0YnnxBgtTVYH7mUKtbsxeFC9y0AmK7Yb78/A==} + '@rushstack/eslint-patch@1.11.0': + resolution: {integrity: sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==} '@sindresorhus/is@5.6.0': resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} @@ -594,6 +616,9 @@ packages: '@tanstack/virtual-core@3.13.0': resolution: {integrity: sha512-NBKJP3OIdmZY3COJdWkSonr50FMVIi+aj5ZJ7hI/DTpEKg2RMfo/KvP8A3B/zOSpMgIe52B5E2yn7rryULzA6g==} + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@types/d3-array@3.2.1': resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} @@ -663,53 +688,128 @@ packages: '@types/ws@8.5.14': resolution: {integrity: sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==} - '@typescript-eslint/eslint-plugin@8.24.1': - resolution: {integrity: sha512-ll1StnKtBigWIGqvYDVuDmXJHVH4zLVot1yQ4fJtLpL7qacwkxJc1T0bptqw+miBQ/QfUbhl1TcQ4accW5KUyA==} + '@typescript-eslint/eslint-plugin@8.29.0': + resolution: {integrity: sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.24.1': - resolution: {integrity: sha512-Tqoa05bu+t5s8CTZFaGpCH2ub3QeT9YDkXbPd3uQ4SfsLoh1/vv2GEYAioPoxCWJJNsenXlC88tRjwoHNts1oQ==} + '@typescript-eslint/parser@8.29.0': + resolution: {integrity: sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/scope-manager@8.24.1': - resolution: {integrity: sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==} + '@typescript-eslint/scope-manager@8.29.0': + resolution: {integrity: sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.24.1': - resolution: {integrity: sha512-/Do9fmNgCsQ+K4rCz0STI7lYB4phTtEXqqCAs3gZW0pnK7lWNkvWd5iW545GSmApm4AzmQXmSqXPO565B4WVrw==} + '@typescript-eslint/type-utils@8.29.0': + resolution: {integrity: sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.24.1': - resolution: {integrity: sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==} + '@typescript-eslint/types@8.29.0': + resolution: {integrity: sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.24.1': - resolution: {integrity: sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg==} + '@typescript-eslint/typescript-estree@8.29.0': + resolution: {integrity: sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.24.1': - resolution: {integrity: sha512-OOcg3PMMQx9EXspId5iktsI3eMaXVwlhC8BvNnX6B5w9a4dVgpkQZuU8Hy67TolKcl+iFWq0XX+jbDGN4xWxjQ==} + '@typescript-eslint/utils@8.29.0': + resolution: {integrity: sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@8.24.1': - resolution: {integrity: sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==} + '@typescript-eslint/visitor-keys@8.29.0': + resolution: {integrity: sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@unrs/resolver-binding-darwin-arm64@1.3.3': + resolution: {integrity: sha512-EpRILdWr3/xDa/7MoyfO7JuBIJqpBMphtu4+80BK1bRfFcniVT74h3Z7q1+WOc92FuIAYatB1vn9TJR67sORGw==} + cpu: [arm64] + os: [darwin] + + '@unrs/resolver-binding-darwin-x64@1.3.3': + resolution: {integrity: sha512-ntj/g7lPyqwinMJWZ+DKHBse8HhVxswGTmNgFKJtdgGub3M3zp5BSZ3bvMP+kBT6dnYJLSVlDqdwOq1P8i0+/g==} + cpu: [x64] + os: [darwin] + + '@unrs/resolver-binding-freebsd-x64@1.3.3': + resolution: {integrity: sha512-l6BT8f2CU821EW7U8hSUK8XPq4bmyTlt9Mn4ERrfjJNoCw0/JoHAh9amZZtV3cwC3bwwIat+GUnrcHTG9+qixw==} + cpu: [x64] + os: [freebsd] + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.3.3': + resolution: {integrity: sha512-8ScEc5a4y7oE2BonRvzJ+2GSkBaYWyh0/Ko4Q25e/ix6ANpJNhwEPZvCR6GVRmsQAYMIfQvYLdM6YEN+qRjnAQ==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm-musleabihf@1.3.3': + resolution: {integrity: sha512-8qQ6l1VTzLNd3xb2IEXISOKwMGXDCzY/UNy/7SovFW2Sp0K3YbL7Ao7R18v6SQkLqQlhhqSBIFRk+u6+qu5R5A==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-gnu@1.3.3': + resolution: {integrity: sha512-v81R2wjqcWXJlQY23byqYHt9221h4anQ6wwN64oMD/WAE+FmxPHFZee5bhRkNVtzqO/q7wki33VFWlhiADwUeQ==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-musl@1.3.3': + resolution: {integrity: sha512-cAOx/j0u5coMg4oct/BwMzvWJdVciVauUvsd+GQB/1FZYKQZmqPy0EjJzJGbVzFc6gbnfEcSqvQE6gvbGf2N8Q==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-ppc64-gnu@1.3.3': + resolution: {integrity: sha512-mq2blqwErgDJD4gtFDlTX/HZ7lNP8YCHYFij2gkXPtMzrXxPW1hOtxL6xg4NWxvnj4bppppb0W3s/buvM55yfg==} + cpu: [ppc64] + os: [linux] + + '@unrs/resolver-binding-linux-s390x-gnu@1.3.3': + resolution: {integrity: sha512-u0VRzfFYysarYHnztj2k2xr+eu9rmgoTUUgCCIT37Nr+j0A05Xk2c3RY8Mh5+DhCl2aYibihnaAEJHeR0UOFIQ==} + cpu: [s390x] + os: [linux] + + '@unrs/resolver-binding-linux-x64-gnu@1.3.3': + resolution: {integrity: sha512-OrVo5ZsG29kBF0Ug95a2KidS16PqAMmQNozM6InbquOfW/udouk063e25JVLqIBhHLB2WyBnixOQ19tmeC/hIg==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-linux-x64-musl@1.3.3': + resolution: {integrity: sha512-PYnmrwZ4HMp9SkrOhqPghY/aoL+Rtd4CQbr93GlrRTjK6kDzfMfgz3UH3jt6elrQAfupa1qyr1uXzeVmoEAxUA==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-wasm32-wasi@1.3.3': + resolution: {integrity: sha512-81AnQY6fShmktQw4hWDUIilsKSdvr/acdJ5azAreu2IWNlaJOKphJSsUVWE+yCk6kBMoQyG9ZHCb/krb5K0PEA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@unrs/resolver-binding-win32-arm64-msvc@1.3.3': + resolution: {integrity: sha512-X/42BMNw7cW6xrB9syuP5RusRnWGoq+IqvJO8IDpp/BZg64J1uuIW6qA/1Cl13Y4LyLXbJVYbYNSKwR/FiHEng==} + cpu: [arm64] + os: [win32] + + '@unrs/resolver-binding-win32-ia32-msvc@1.3.3': + resolution: {integrity: sha512-EGNnNGQxMU5aTN7js3ETYvuw882zcO+dsVjs+DwO2j/fRVKth87C8e2GzxW1L3+iWAXMyJhvFBKRavk9Og1Z6A==} + cpu: [ia32] + os: [win32] + + '@unrs/resolver-binding-win32-x64-msvc@1.3.3': + resolution: {integrity: sha512-GraLbYqOJcmW1qY3osB+2YIiD62nVf2/bVLHZmrb4t/YSUwE03l7TwcDJl08T/Tm3SVhepX8RQkpzWbag/Sb4w==} + cpu: [x64] + os: [win32] + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -882,8 +982,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001706: - resolution: {integrity: sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==} + caniuse-lite@1.0.30001712: + resolution: {integrity: sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -1087,6 +1187,10 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + detect-libc@1.0.3: resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} engines: {node: '>=0.10'} @@ -1191,8 +1295,8 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-next@15.1.7: - resolution: {integrity: sha512-zXoMnYUIy3XHaAoOhrcYkT9UQWvXqWju2K7NNsmb5wd/7XESDwof61eUdW4QhERr3eJ9Ko/vnXqIrj8kk/drYw==} + eslint-config-next@15.2.4: + resolution: {integrity: sha512-v4gYjd4eYIme8qzaJItpR5MMBXJ0/YV07u7eb50kEnlEmX7yhOjdUdzz70v4fiINYRjLf8X8TbogF0k7wlz6sA==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 typescript: '>=3.3.1' @@ -1200,8 +1304,8 @@ packages: typescript: optional: true - eslint-config-prettier@10.0.2: - resolution: {integrity: sha512-1105/17ZIMjmCOJOPNfVdbXafLCLj3hPmkmB7dLgt7XsQ/zkxSuDerE/xgO3RxoHysR1N1whmquY0lSn2O0VLg==} + eslint-config-prettier@10.1.1: + resolution: {integrity: sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -1209,8 +1313,8 @@ packages: eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - eslint-import-resolver-typescript@3.8.2: - resolution: {integrity: sha512-o0nvXxsatYCDTzI1K5b3aYGQ6PjpDGJEVN86zqJw5SEewhmmggfRTotd2dqWr2t2zbeYpIEWGTCkgtUpIEIcaQ==} + eslint-import-resolver-typescript@3.10.0: + resolution: {integrity: sha512-aV3/dVsT0/H9BtpNwbaqvl+0xGMRGzncLyhm793NFGvbwGGvzyAykqWZ8oZlZuGwuHkwJjhWJkG1cM3ynvd2pQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -1358,8 +1462,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fastq@1.19.0: - resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} fdir@6.4.3: resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} @@ -1551,6 +1655,14 @@ packages: i18next@21.10.0: resolution: {integrity: sha512-YeuIBmFsGjUfO3qBmMOc0rQaun4mIpGKET5WDwvu8lU7gvwpcariZLNtL0Fzj+zazcHUrlXHiptcFhBMFaxzfg==} + i18next@24.2.3: + resolution: {integrity: sha512-lfbf80OzkocvX7nmZtu7nSTNbrTYR52sLWxPtlXX1zAhVw8WEnFk4puUkCR4B1dNQwbSpEHHHemcZu//7EcB7A==} + peerDependencies: + typescript: ^5 + peerDependenciesMeta: + typescript: + optional: true + ical-date-parser@4.0.0: resolution: {integrity: sha512-XRCK/FU1akC2ZaJOdKIeZI6BLLgzWUuE0pegSrrkEva89GOan5mNkLVqCU4EMhCJ9nkG5TLWdMXrVX1fNAkFzw==} @@ -1603,8 +1715,8 @@ packages: resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} - is-bun-module@1.3.0: - resolution: {integrity: sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==} + is-bun-module@2.0.0: + resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} @@ -1960,11 +2072,6 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@3.3.8: - resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -1975,8 +2082,8 @@ packages: next: '>= 10.0.0' react: '>= 16.8.0' - next@15.2.3: - resolution: {integrity: sha512-x6eDkZxk2rPpu46E1ZVUWIBhYCLszmUY6fvHBFcbzJ9dD+qRX6vcHusaqqDlnY+VngKzKbAiG2iRCkPbmi8f7w==} + next@15.2.4: + resolution: {integrity: sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -2132,8 +2239,8 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.2: - resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -2144,6 +2251,16 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} + prettier-plugin-organize-imports@4.1.0: + resolution: {integrity: sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==} + peerDependencies: + prettier: '>=2.0' + typescript: '>=2.9' + vue-tsc: ^2.1.0 + peerDependenciesMeta: + vue-tsc: + optional: true + prettier@3.5.2: resolution: {integrity: sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==} engines: {node: '>=14'} @@ -2289,8 +2406,8 @@ packages: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rfc4648@1.5.4: @@ -2414,8 +2531,8 @@ packages: resolution: {integrity: sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==} engines: {node: '>=10.16.0'} - stable-hash@0.0.4: - resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} + stable-hash@0.0.5: + resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} stack-trace@0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} @@ -2512,10 +2629,10 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - swr@1.3.0: - resolution: {integrity: sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw==} + swr@2.3.3: + resolution: {integrity: sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==} peerDependencies: - react: ^16.11.0 || ^17.0.0 || ^18.0.0 + react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 synckit@0.9.2: resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} @@ -2557,8 +2674,8 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tinyglobby@0.2.11: - resolution: {integrity: sha512-32TmKeeKUahv0Go8WmQgiEp9Y21NuxjwjqiRC1nrUB51YacfSwuB44xgXD+HdIppmMRgjQNPdrHyA6vIybYZ+g==} + tinyglobby@0.2.12: + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} engines: {node: '>=12.0.0'} tldts-core@6.1.82: @@ -2594,8 +2711,8 @@ packages: resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} engines: {node: '>= 14.0.0'} - ts-api-utils@2.0.1: - resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -2645,12 +2762,20 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + unrs-resolver@1.3.3: + resolution: {integrity: sha512-PFLAGQzYlyjniXdbmQ3dnGMZJXX5yrl2YS4DLRfR3BhgUsE1zpRIrccp9XMOGRfIHpdFvCn/nr5N1KMVda4x3A==} + urbackup-server-api@0.8.9: resolution: {integrity: sha512-Igu6A0xSZeMsiN6PWT7zG4aD+iJR5fXT/j5+xwAvnD/vCNfvVrettIsXv6MftxOajvTmtlgaYu8KDoH1EJQ6DQ==} uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + use-sync-external-store@1.5.0: + resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -2770,6 +2895,10 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 + '@babel/runtime@7.27.0': + dependencies: + regenerator-runtime: 0.14.1 + '@balena/dockerignore@1.0.2': {} '@colors/colors@1.6.0': {} @@ -2780,7 +2909,18 @@ snapshots: enabled: 2.0.0 kuler: 2.0.0 - '@emnapi/runtime@1.3.1': + '@emnapi/core@1.4.0': + dependencies: + '@emnapi/wasi-threads': 1.0.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.4.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.0.1': dependencies: tslib: 2.8.1 optional: true @@ -2790,6 +2930,11 @@ snapshots: eslint: 9.21.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.5.1(eslint@9.21.0(jiti@2.4.2))': + dependencies: + eslint: 9.21.0(jiti@2.4.2) + eslint-visitor-keys: 3.4.3 + '@eslint-community/regexpp@4.12.1': {} '@eslint/config-array@0.19.2': @@ -2925,7 +3070,7 @@ snapshots: '@img/sharp-wasm32@0.33.5': dependencies: - '@emnapi/runtime': 1.3.1 + '@emnapi/runtime': 1.4.0 optional: true '@img/sharp-win32-ia32@0.33.5': @@ -2982,34 +3127,41 @@ snapshots: - encoding - utf-8-validate - '@next/env@15.2.3': {} + '@napi-rs/wasm-runtime@0.2.8': + dependencies: + '@emnapi/core': 1.4.0 + '@emnapi/runtime': 1.4.0 + '@tybys/wasm-util': 0.9.0 + optional: true - '@next/eslint-plugin-next@15.1.7': + '@next/env@15.2.4': {} + + '@next/eslint-plugin-next@15.2.4': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.2.3': + '@next/swc-darwin-arm64@15.2.4': optional: true - '@next/swc-darwin-x64@15.2.3': + '@next/swc-darwin-x64@15.2.4': optional: true - '@next/swc-linux-arm64-gnu@15.2.3': + '@next/swc-linux-arm64-gnu@15.2.4': optional: true - '@next/swc-linux-arm64-musl@15.2.3': + '@next/swc-linux-arm64-musl@15.2.4': optional: true - '@next/swc-linux-x64-gnu@15.2.3': + '@next/swc-linux-x64-gnu@15.2.4': optional: true - '@next/swc-linux-x64-musl@15.2.3': + '@next/swc-linux-x64-musl@15.2.4': optional: true - '@next/swc-win32-arm64-msvc@15.2.3': + '@next/swc-win32-arm64-msvc@15.2.4': optional: true - '@next/swc-win32-x64-msvc@15.2.3': + '@next/swc-win32-x64-msvc@15.2.4': optional: true '@nodelib/fs.scandir@2.1.5': @@ -3022,7 +3174,7 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.0 + fastq: 1.19.1 '@nolyfill/is-core-module@1.0.39': {} @@ -3056,7 +3208,7 @@ snapshots: '@rtsao/scc@1.1.0': {} - '@rushstack/eslint-patch@1.10.5': {} + '@rushstack/eslint-patch@1.11.0': {} '@sindresorhus/is@5.6.0': {} @@ -3134,7 +3286,7 @@ snapshots: '@tailwindcss/node': 4.0.9 '@tailwindcss/oxide': 4.0.9 lightningcss: 1.29.1 - postcss: 8.5.2 + postcss: 8.5.3 tailwindcss: 4.0.9 '@tanstack/react-virtual@3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -3145,6 +3297,11 @@ snapshots: '@tanstack/virtual-core@3.13.0': {} + '@tybys/wasm-util@0.9.0': + dependencies: + tslib: 2.8.1 + optional: true + '@types/d3-array@3.2.1': {} '@types/d3-color@3.1.3': {} @@ -3214,83 +3371,130 @@ snapshots: dependencies: '@types/node': 22.13.4 - '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/type-utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.24.1 + '@typescript-eslint/parser': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.29.0 + '@typescript-eslint/type-utils': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.29.0 eslint: 9.21.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 2.0.1(typescript@5.7.3) + ts-api-utils: 2.1.0(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.24.1 + '@typescript-eslint/scope-manager': 8.29.0 + '@typescript-eslint/types': 8.29.0 + '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.29.0 debug: 4.4.0 eslint: 9.21.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.24.1': + '@typescript-eslint/scope-manager@8.29.0': dependencies: - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/visitor-keys': 8.24.1 + '@typescript-eslint/types': 8.29.0 + '@typescript-eslint/visitor-keys': 8.29.0 - '@typescript-eslint/type-utils@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) debug: 4.4.0 eslint: 9.21.0(jiti@2.4.2) - ts-api-utils: 2.0.1(typescript@5.7.3) + ts-api-utils: 2.1.0(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.24.1': {} + '@typescript-eslint/types@8.29.0': {} - '@typescript-eslint/typescript-estree@8.24.1(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.29.0(typescript@5.7.3)': dependencies: - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/visitor-keys': 8.24.1 + '@typescript-eslint/types': 8.29.0 + '@typescript-eslint/visitor-keys': 8.29.0 debug: 4.4.0 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.1 - ts-api-utils: 2.0.1(typescript@5.7.3) + ts-api-utils: 2.1.0(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/utils@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) + '@eslint-community/eslint-utils': 4.5.1(eslint@9.21.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.29.0 + '@typescript-eslint/types': 8.29.0 + '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.7.3) eslint: 9.21.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.24.1': + '@typescript-eslint/visitor-keys@8.29.0': dependencies: - '@typescript-eslint/types': 8.24.1 + '@typescript-eslint/types': 8.29.0 eslint-visitor-keys: 4.2.0 + '@unrs/resolver-binding-darwin-arm64@1.3.3': + optional: true + + '@unrs/resolver-binding-darwin-x64@1.3.3': + optional: true + + '@unrs/resolver-binding-freebsd-x64@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-arm-musleabihf@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-arm64-gnu@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-arm64-musl@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-ppc64-gnu@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-s390x-gnu@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-x64-gnu@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-x64-musl@1.3.3': + optional: true + + '@unrs/resolver-binding-wasm32-wasi@1.3.3': + dependencies: + '@napi-rs/wasm-runtime': 0.2.8 + optional: true + + '@unrs/resolver-binding-win32-arm64-msvc@1.3.3': + optional: true + + '@unrs/resolver-binding-win32-ia32-msvc@1.3.3': + optional: true + + '@unrs/resolver-binding-win32-x64-msvc@1.3.3': + optional: true + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 @@ -3491,7 +3695,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001706: {} + caniuse-lite@1.0.30001712: {} chalk@4.1.2: dependencies: @@ -3696,6 +3900,8 @@ snapshots: depd@2.0.0: {} + dequal@2.0.3: {} + detect-libc@1.0.3: {} detect-libc@2.0.3: @@ -3728,7 +3934,7 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.26.9 + '@babel/runtime': 7.27.0 csstype: 3.1.3 dom-serializer@2.0.0: @@ -3876,16 +4082,16 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@15.1.7(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3): + eslint-config-next@15.2.4(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3): dependencies: - '@next/eslint-plugin-next': 15.1.7 - '@rushstack/eslint-patch': 1.10.5 - '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@next/eslint-plugin-next': 15.2.4 + '@rushstack/eslint-patch': 1.11.0 + '@typescript-eslint/eslint-plugin': 8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) eslint: 9.21.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.8.2(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-react: 7.37.4(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-react-hooks: 5.1.0(eslint@9.21.0(jiti@2.4.2)) @@ -3896,7 +4102,7 @@ snapshots: - eslint-plugin-import-x - supports-color - eslint-config-prettier@10.0.2(eslint@9.21.0(jiti@2.4.2)): + eslint-config-prettier@10.1.1(eslint@9.21.0(jiti@2.4.2)): dependencies: eslint: 9.21.0(jiti@2.4.2) @@ -3908,33 +4114,33 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.8.2(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2)): + eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.0 - enhanced-resolve: 5.18.1 eslint: 9.21.0(jiti@2.4.2) get-tsconfig: 4.10.0 - is-bun-module: 1.3.0 - stable-hash: 0.0.4 - tinyglobby: 0.2.11 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.12 + unrs-resolver: 1.3.3 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.21.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.21.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) eslint: 9.21.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.8.2(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.21.0(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -3945,7 +4151,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.21.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.21.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -3957,7 +4163,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -3982,14 +4188,14 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-prettier@5.2.3(eslint-config-prettier@10.0.2(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2))(prettier@3.5.2): + eslint-plugin-prettier@5.2.3(eslint-config-prettier@10.1.1(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2))(prettier@3.5.2): dependencies: eslint: 9.21.0(jiti@2.4.2) prettier: 3.5.2 prettier-linter-helpers: 1.0.0 synckit: 0.9.2 optionalDependencies: - eslint-config-prettier: 10.0.2(eslint@9.21.0(jiti@2.4.2)) + eslint-config-prettier: 10.1.1(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-react-hooks@5.1.0(eslint@9.21.0(jiti@2.4.2)): dependencies: @@ -4115,9 +4321,9 @@ snapshots: fast-levenshtein@2.0.6: {} - fastq@1.19.0: + fastq@1.19.1: dependencies: - reusify: 1.0.4 + reusify: 1.1.0 fdir@6.4.3(picomatch@4.0.2): optionalDependencies: @@ -4333,7 +4539,13 @@ snapshots: i18next@21.10.0: dependencies: - '@babel/runtime': 7.26.9 + '@babel/runtime': 7.27.0 + + i18next@24.2.3(typescript@5.7.3): + dependencies: + '@babel/runtime': 7.27.0 + optionalDependencies: + typescript: 5.7.3 ical-date-parser@4.0.0: {} @@ -4387,7 +4599,7 @@ snapshots: call-bound: 1.0.3 has-tostringtag: 1.0.2 - is-bun-module@1.3.0: + is-bun-module@2.0.0: dependencies: semver: 7.7.1 @@ -4691,11 +4903,9 @@ snapshots: nanoid@3.3.11: {} - nanoid@3.3.8: {} - natural-compare@1.4.0: {} - next-i18next@12.1.0(next@15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next-i18next@12.1.0(next@15.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.26.9 '@types/hoist-non-react-statics': 3.3.6 @@ -4703,33 +4913,33 @@ snapshots: hoist-non-react-statics: 3.3.2 i18next: 21.10.0 i18next-fs-backend: 1.2.0 - next: 15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 15.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-i18next: 11.18.6(i18next@21.10.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - react-dom - react-native - next@15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@15.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@next/env': 15.2.3 + '@next/env': 15.2.4 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 - caniuse-lite: 1.0.30001706 + caniuse-lite: 1.0.30001712 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) styled-jsx: 5.1.6(react@18.3.1) optionalDependencies: - '@next/swc-darwin-arm64': 15.2.3 - '@next/swc-darwin-x64': 15.2.3 - '@next/swc-linux-arm64-gnu': 15.2.3 - '@next/swc-linux-arm64-musl': 15.2.3 - '@next/swc-linux-x64-gnu': 15.2.3 - '@next/swc-linux-x64-musl': 15.2.3 - '@next/swc-win32-arm64-msvc': 15.2.3 - '@next/swc-win32-x64-msvc': 15.2.3 + '@next/swc-darwin-arm64': 15.2.4 + '@next/swc-darwin-x64': 15.2.4 + '@next/swc-linux-arm64-gnu': 15.2.4 + '@next/swc-linux-arm64-musl': 15.2.4 + '@next/swc-linux-x64-gnu': 15.2.4 + '@next/swc-linux-x64-musl': 15.2.4 + '@next/swc-win32-arm64-msvc': 15.2.4 + '@next/swc-win32-x64-msvc': 15.2.4 sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' @@ -4871,9 +5081,9 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.2: + postcss@8.5.3: dependencies: - nanoid: 3.3.8 + nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -4883,6 +5093,11 @@ snapshots: dependencies: fast-diff: 1.3.0 + prettier-plugin-organize-imports@4.1.0(prettier@3.5.2)(typescript@5.7.3): + dependencies: + prettier: 3.5.2 + typescript: 5.7.3 + prettier@3.5.2: {} pretty-bytes@6.1.1: {} @@ -4949,6 +5164,15 @@ snapshots: optionalDependencies: react-dom: 18.3.1(react@18.3.1) + react-i18next@11.18.6(i18next@24.2.3(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.9 + html-parse-stringify: 3.0.1 + i18next: 24.2.3(typescript@5.7.3) + react: 18.3.1 + optionalDependencies: + react-dom: 18.3.1(react@18.3.1) + react-icons@5.4.0(react@18.3.1): dependencies: react: 18.3.1 @@ -4967,7 +5191,7 @@ snapshots: react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.9 + '@babel/runtime': 7.27.0 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -5064,7 +5288,7 @@ snapshots: dependencies: lowercase-keys: 3.0.0 - reusify@1.0.4: {} + reusify@1.1.0: {} rfc4648@1.5.4: {} @@ -5226,7 +5450,7 @@ snapshots: cpu-features: 0.0.10 nan: 2.22.0 - stable-hash@0.0.4: {} + stable-hash@0.0.5: {} stack-trace@0.0.10: {} @@ -5336,9 +5560,11 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - swr@1.3.0(react@18.3.1): + swr@2.3.3(react@18.3.1): dependencies: + dequal: 2.0.3 react: 18.3.1 + use-sync-external-store: 1.5.0(react@18.3.1) synckit@0.9.2: dependencies: @@ -5386,7 +5612,7 @@ snapshots: tiny-invariant@1.3.3: {} - tinyglobby@0.2.11: + tinyglobby@0.2.12: dependencies: fdir: 6.4.3(picomatch@4.0.2) picomatch: 4.0.2 @@ -5417,7 +5643,7 @@ snapshots: triple-beam@1.4.1: {} - ts-api-utils@2.0.1(typescript@5.7.3): + ts-api-utils@2.1.0(typescript@5.7.3): dependencies: typescript: 5.7.3 @@ -5482,6 +5708,24 @@ snapshots: unpipe@1.0.0: {} + unrs-resolver@1.3.3: + optionalDependencies: + '@unrs/resolver-binding-darwin-arm64': 1.3.3 + '@unrs/resolver-binding-darwin-x64': 1.3.3 + '@unrs/resolver-binding-freebsd-x64': 1.3.3 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.3.3 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.3.3 + '@unrs/resolver-binding-linux-arm64-gnu': 1.3.3 + '@unrs/resolver-binding-linux-arm64-musl': 1.3.3 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.3.3 + '@unrs/resolver-binding-linux-s390x-gnu': 1.3.3 + '@unrs/resolver-binding-linux-x64-gnu': 1.3.3 + '@unrs/resolver-binding-linux-x64-musl': 1.3.3 + '@unrs/resolver-binding-wasm32-wasi': 1.3.3 + '@unrs/resolver-binding-win32-arm64-msvc': 1.3.3 + '@unrs/resolver-binding-win32-ia32-msvc': 1.3.3 + '@unrs/resolver-binding-win32-x64-msvc': 1.3.3 + urbackup-server-api@0.8.9: dependencies: async-mutex: 0.3.2 @@ -5493,6 +5737,10 @@ snapshots: dependencies: punycode: 2.3.1 + use-sync-external-store@1.5.0(react@18.3.1): + dependencies: + react: 18.3.1 + util-deprecate@1.0.2: {} uuid@10.0.0: {} diff --git a/public/locales/af/common.json b/public/locales/af/common.json index bf1e5f9c..fa71b238 100644 --- a/public/locales/af/common.json +++ b/public/locales/af/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Batterylading", "timeleft": "Oorblywende Tyd" }, - "hoarder": { + "karakeep": { "bookmarks": "Boekmerke", "favorites": "Gunstelinge", "archived": "Geargiveer", diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json index baa4d593..dbe892aa 100644 --- a/public/locales/ar/common.json +++ b/public/locales/ar/common.json @@ -1024,7 +1024,7 @@ "bcharge": "شحن البطارية", "timeleft": "الوقت المتبقي" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json index 3c721bce..ccb6f5bb 100644 --- a/public/locales/bg/common.json +++ b/public/locales/bg/common.json @@ -394,7 +394,7 @@ "strelaysrv": { "numActiveSessions": "Сесии", "numConnections": "Connections", - "dataRelayed": "Relayed", + "dataRelayed": "", "transferRate": "Скорост" }, "mastodon": { @@ -1002,7 +1002,7 @@ "argocd": { "apps": "Приложения", "synced": "Synced", - "outOfSync": "Out Of Sync", + "outOfSync": "", "healthy": "Здрав", "degraded": "Деградирани", "progressing": "Progressing", @@ -1024,7 +1024,7 @@ "bcharge": "Заряд на батерията", "timeleft": "Оставащо Време" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json index 07b1f611..b70794b3 100644 --- a/public/locales/ca/common.json +++ b/public/locales/ca/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Càrrega de la bateria", "timeleft": "Temps restant" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json index e9a8061d..1d99ec95 100644 --- a/public/locales/cs/common.json +++ b/public/locales/cs/common.json @@ -85,16 +85,16 @@ "ping": { "error": "Chyba", "ping": "Odezva", - "down": "Down", - "up": "Up", + "down": "Výpadek", + "up": "Běží", "not_available": "Není k dispozici" }, "siteMonitor": { "http_status": "Stav HTTP", "error": "Chyba", "response": "Odpověď", - "down": "Down", - "up": "Up", + "down": "Výpadek", + "up": "Běží", "not_available": "Není k dispozici" }, "emby": { @@ -144,13 +144,13 @@ "uptime": "Doba spuštění", "maxDown": "Max. Down", "maxUp": "Max. Up", - "down": "Down", - "up": "Up", + "down": "Výpadek", + "up": "Běží", "received": "Přijaté", "sent": "Odeslané", "externalIPAddress": "Ext. IP", - "externalIPv6Address": "Ext. IPv6", - "externalIPv6Prefix": "Ext. IPv6-Prefix" + "externalIPv6Address": "Veřejná IPv6", + "externalIPv6Prefix": "Věřejná IPv6 prefix" }, "caddy": { "upstreams": "Odesílání dat", @@ -178,7 +178,7 @@ "connectedAp": "Připojené APs", "activeUser": "Aktivní zařízení", "alerts": "Upozornění", - "connectedGateways": "Connected gateways", + "connectedGateways": "Připojené brány", "connectedSwitches": "Připojené přepínače" }, "nzbget": { @@ -229,8 +229,8 @@ "seed": "Seedované" }, "develancacheui": { - "cachehitbytes": "Cache Hit Bytes", - "cachemissbytes": "Cache Miss Bytes" + "cachehitbytes": "Byty nalezené v mezipaměti", + "cachemissbytes": "Byty nenalezené v mezipaměti" }, "downloadstation": { "download": "Stahování", @@ -287,7 +287,7 @@ "total": "Celkem", "connected": "", "new_devices": "", - "down_alerts": "Down Alerts" + "down_alerts": "Upozornění na výpadek" }, "pihole": { "queries": "Dotazy", @@ -313,13 +313,13 @@ }, "suwayomi": { "download": "Staženo", - "nondownload": "Non-Downloaded", + "nondownload": "Nestaženo", "read": "Přečteno", "unread": "Nepřečteno", - "downloadedread": "Downloaded & Read", - "downloadedunread": "Downloaded & Unread", - "nondownloadedread": "Non-Downloaded & Read", - "nondownloadedunread": "Non-Downloaded & Unread" + "downloadedread": "Staženo a přečteno", + "downloadedunread": "Staženo a nepřečteno", + "nondownloadedread": "Nestaženo a přečteno", + "nondownloadedunread": "Nestaženo a nepřečteno" }, "tailscale": { "address": "Adresa", @@ -337,15 +337,15 @@ }, "technitium": { "totalQueries": "Dotazy", - "totalNoError": "Success", - "totalServerFailure": "Failures", - "totalNxDomain": "NX Domains", - "totalRefused": "Refused", - "totalAuthoritative": "Authoritative", - "totalRecursive": "Recursive", - "totalCached": "Cached", + "totalNoError": "Úspěšně", + "totalServerFailure": "Chyby", + "totalNxDomain": "NX domény", + "totalRefused": "Odmítnuto", + "totalAuthoritative": "Autoritativní", + "totalRecursive": "Rekurzivní", + "totalCached": "V mezipaměti", "totalBlocked": "Blokováno", - "totalDropped": "Dropped", + "totalDropped": "Vynecháno", "totalClients": "Klienti" }, "tdarr": { @@ -434,7 +434,7 @@ "load": "Zatížení", "wait": "Počkejte prosím", "temp": "TEPLOTA", - "_temp": "Temp", + "_temp": "Teplota", "warn": "Varováni", "uptime": "BĚŽÍ", "total": "Celkem", @@ -442,12 +442,12 @@ "used": "Využité", "days": "d", "hours": "h", - "crit": "Crit", + "crit": "Kritické", "read": "Přečteno", - "write": "Write", - "gpu": "GPU", - "mem": "Mem", - "swap": "Swap" + "write": "Zápis", + "gpu": "Grafická karta", + "mem": "Pamět RAM", + "swap": "Swap RAM" }, "quicklaunch": { "bookmark": "Záložka", @@ -456,7 +456,7 @@ "custom": "Vlastní", "visit": "Navštivte", "url": "Odkaz", - "searchsuggestion": "Suggestion" + "searchsuggestion": "Doporučení" }, "wmo": { "0-day": "Slunečno", @@ -523,15 +523,15 @@ "up_to_date": "Žádné", "child_bridges": "Podřízené můstky", "child_bridges_status": "{{ok}}/{{total}}", - "up": "Up", + "up": "Běží", "pending": "Čeká", - "down": "Down" + "down": "Výpadek" }, "healthchecks": { "new": "Nové", - "up": "Up", + "up": "Běží", "grace": "V období odkladu", - "down": "Down", + "down": "Výpadek", "paused": "Pozastaveno", "status": "Stav", "last_ping": "Poslední ping", @@ -573,14 +573,14 @@ "hdhomerun": { "channels": "Kanály", "hd": "HD", - "tunerCount": "Tuners", - "channelNumber": "Channel", - "channelNetwork": "Network", - "signalStrength": "Strength", - "signalQuality": "Quality", - "symbolQuality": "Quality", + "tunerCount": "Tuner", + "channelNumber": "Kanál", + "channelNetwork": "Síť", + "signalStrength": "Síla", + "signalQuality": "Kvalita", + "symbolQuality": "Kvalita", "networkRate": "Přenosová rychlost", - "clientIP": "Client" + "clientIP": "Klient" }, "scrutiny": { "passed": "Úspěšné", @@ -592,12 +592,12 @@ "total": "Celkem" }, "peanut": { - "battery_charge": "Battery Charge", - "ups_load": "UPS Load", - "ups_status": "UPS Status", + "battery_charge": "Úroveň baterie", + "ups_load": "Zítěž UPS", + "ups_status": "Stav UPS", "online": "Online", - "on_battery": "On Battery", - "low_battery": "Low Battery" + "on_battery": "Na baterii", + "low_battery": "Nízký stav baterie" }, "nextdns": { "wait": "Čekejte prosím", @@ -615,9 +615,9 @@ "streams_xepg": "Kanály XEPG" }, "opendtu": { - "yieldDay": "Today", - "absolutePower": "Power", - "relativePower": "Power %", + "yieldDay": "Dnes", + "absolutePower": "Výkon", + "relativePower": "Výkon %", "limit": "Limit" }, "opnsense": { @@ -646,9 +646,9 @@ "load": "Prům. zatížení", "memory": "Využití paměti", "wanStatus": "Stav WAN", - "up": "Up", - "down": "Down", - "temp": "Temp", + "up": "Běží", + "down": "Výpadek", + "temp": "Teplota", "disk": "Využití disku", "wanIP": "IP WAN" }, @@ -668,14 +668,14 @@ "up": "Stránky Up", "down": "Stránky Down", "uptime": "Doba spuštění", - "incident": "Incident", + "incident": "Událost", "m": "m" }, "atsumeru": { "series": "Seriály", - "archives": "Archives", - "chapters": "Chapters", - "categories": "Categories" + "archives": "Archivy", + "chapters": "Kapitoly", + "categories": "Kategorie" }, "komga": { "libraries": "Knihovny", @@ -705,13 +705,13 @@ "time": "Čas" }, "firefly": { - "networth": "Net Worth", - "budget": "Budget" + "networth": "Čisté jmění", + "budget": "Rozpočet" }, "grafana": { "dashboards": "Nástěnky", "datasources": "Zdroje dat", - "totalalerts": "Celkový počet upozornění", + "totalalerts": "Celkový počet upozornění2", "alertstriggered": "Spuštěné výstrahy" }, "nextcloud": { @@ -749,7 +749,7 @@ "uptime": "Doba spuštění" }, "ghostfolio": { - "gross_percent_today": "Today", + "gross_percent_today": "Dnes", "gross_percent_1y": "Jeden rok", "gross_percent_max": "Za celou dobu" }, @@ -770,8 +770,8 @@ }, "calibreweb": { "books": "Knihy", - "authors": "Authors", - "categories": "Categories", + "authors": "Autoři", + "categories": "Kategorie", "series": "Seriály" }, "jdownloader": { @@ -785,44 +785,44 @@ "totalFiles": "Soubory" }, "azuredevops": { - "result": "Result", + "result": "Výsledek", "status": "Stav", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", + "buildId": "ID sestavení", + "succeeded": "Úspěšně", + "notStarted": "Nezahájeno", "failed": "Selhalo", - "canceled": "Canceled", - "inProgress": "In Progress", - "totalPrs": "Total PRs", - "myPrs": "My PRs", + "canceled": "Zrušeno", + "inProgress": "Probíhá", + "totalPrs": "Celkem PR", + "myPrs": "Moje PR", "approved": "Schváleno" }, "gamedig": { "status": "Stav", "online": "Online", "offline": "Offline", - "name": "Name", - "map": "Map", - "currentPlayers": "Current players", + "name": "Jméno", + "map": "Mapa", + "currentPlayers": "Počet hráčů", "players": "Hráči", - "maxPlayers": "Max players", - "bots": "Bots", + "maxPlayers": "Maximální počet hráčů", + "bots": "Boti", "ping": "Odezva" }, "urbackup": { "ok": "Ok", - "errored": "Errors", - "noRecent": "Out of Date", - "totalUsed": "Used Storage" + "errored": "Chyby", + "noRecent": "Zastaralý", + "totalUsed": "Využití úložiště" }, "mealie": { - "recipes": "Recipes", + "recipes": "Recepty", "users": "Uživatelé", - "categories": "Categories", - "tags": "Tags" + "categories": "Kategorie", + "tags": "Štítky" }, "openmediavault": { - "downloading": "Downloading", + "downloading": "Stahování", "total": "Celkem", "running": "Běží", "stopped": "Zastaveno", @@ -831,95 +831,95 @@ }, "openwrt": { "uptime": "Doba spuštění", - "cpuLoad": "CPU Load Avg (5m)", - "up": "Up", - "down": "Down", - "bytesTx": "Transmitted", + "cpuLoad": "Prům. zatížení procesoru (5m)", + "up": "Běží", + "down": "Výpadek", + "bytesTx": "Přeneseno", "bytesRx": "Přijaté" }, "uptimerobot": { "status": "Stav", "uptime": "Doba spuštění", - "lastDown": "Last Downtime", - "downDuration": "Downtime Duration", + "lastDown": "Poslední výpadek", + "downDuration": "Trvání výpadku", "sitesUp": "Stránky Up", "sitesDown": "Stránky Down", "paused": "Pozastaveno", - "notyetchecked": "Not Yet Checked", - "up": "Up", - "seemsdown": "Seems Down", - "down": "Down", + "notyetchecked": "Zatím nezkontrolováno", + "up": "Běží", + "seemsdown": "Zdá se nedostupný", + "down": "Výpadek", "unknown": "Neznámý" }, "calendar": { - "inCinemas": "In cinemas", - "physicalRelease": "Physical release", - "digitalRelease": "Digital release", - "noEventsToday": "No events for today!", - "noEventsFound": "No events found" + "inCinemas": "V kinech", + "physicalRelease": "Fyzické vydání", + "digitalRelease": "Digitální vydání", + "noEventsToday": "Pro dnešek žádné události!", + "noEventsFound": "Nemáte žádné události" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Games", - "saves": "Saves", - "states": "States", - "screenshots": "Screenshots", - "totalfilesize": "Total Size" + "platforms": "Platformy", + "totalRoms": "Hry", + "saves": "Uložené", + "states": "Stavy", + "screenshots": "Snímky obrazovky", + "totalfilesize": "Celková velikost" }, "mailcow": { "domains": "Domény", - "mailboxes": "Mailboxes", - "mails": "Mails", + "mailboxes": "E-mailové schránky", + "mails": "Maily", "storage": "Úložiště" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "Upozornění", + "criticals": "Kritické" }, "plantit": { - "events": "Events", - "plants": "Plants", + "events": "Události", + "plants": "Rostliny", "photos": "Fotografie", - "species": "Species" + "species": "Druhy" }, "gitea": { - "notifications": "Notifications", + "notifications": "Oznámení", "issues": "Problémy", "pulls": "Pull Requests", - "repositories": "Repositories" + "repositories": "Repozitáře" }, "stash": { - "scenes": "Scenes", - "scenesPlayed": "Scenes Played", - "playCount": "Total Plays", - "playDuration": "Time Watched", - "sceneSize": "Scenes Size", - "sceneDuration": "Scenes Duration", - "images": "Images", - "imageSize": "Images Size", - "galleries": "Galleries", - "performers": "Performers", - "studios": "Studios", + "scenes": "Scény", + "scenesPlayed": "Přehrané scény", + "playCount": "Celkový počet přehrání", + "playDuration": "Čas sledování", + "sceneSize": "Velikost scén", + "sceneDuration": "Délka scény", + "images": "Obrázky", + "imageSize": "Velikost obrázků", + "galleries": "Galerie", + "performers": "Herci", + "studios": "Studia", "movies": "Filmy", - "tags": "Tags", - "oCount": "O Count" + "tags": "Štítky", + "oCount": "Počet O" }, "tandoor": { "users": "Uživatelé", - "recipes": "Recipes", - "keywords": "Keywords" + "recipes": "Recepty", + "keywords": "Klíčová slova" }, "homebox": { - "items": "Items", - "totalWithWarranty": "With Warranty", - "locations": "Locations", - "labels": "Labels", + "items": "Položky", + "totalWithWarranty": "Se zárukou", + "locations": "Lokality", + "labels": "Štítky", "users": "Uživatelé", - "totalValue": "Total Value" + "totalValue": "Celková hodnota" }, "crowdsec": { "alerts": "Upozornění", - "bans": "Bans" + "bans": "Bany" }, "wgeasy": { "connected": "", @@ -928,10 +928,10 @@ "total": "Celkem" }, "swagdashboard": { - "proxied": "Proxied", - "auth": "With Auth", - "outdated": "Outdated", - "banned": "Banned" + "proxied": "Přes proxy", + "auth": "S ověřením", + "outdated": "Zastaralé", + "banned": "Zabanován" }, "myspeed": { "ping": "Odezva", @@ -939,46 +939,46 @@ "upload": "Nahrávání" }, "stocks": { - "stocks": "Stocks", - "loading": "Loading", - "open": "Open - US Market", - "closed": "Closed - US Market", - "invalidConfiguration": "Invalid Configuration" + "stocks": "Akcie", + "loading": "Načítání", + "open": "Otevřeno - US trh", + "closed": "Uzavřeno - US trh", + "invalidConfiguration": "Neplatná konfigurace" }, "frigate": { - "cameras": "Cameras", + "cameras": "Kamery", "uptime": "Doba spuštění", "version": "Verze" }, "linkwarden": { - "links": "Links", - "collections": "Collections", - "tags": "Tags" + "links": "Linky", + "collections": "Sbírky", + "tags": "Štítky" }, "zabbix": { - "unclassified": "Not classified", + "unclassified": "Neklasifikováno", "information": "Informace", - "warning": "Warning", - "average": "Average", - "high": "High", - "disaster": "Disaster" + "warning": "Upozornění", + "average": "Průměr", + "high": "Vysoký", + "disaster": "Katastrofa" }, "lubelogger": { - "vehicle": "Vehicle", - "vehicles": "Vehicles", - "serviceRecords": "Service Records", - "reminders": "Reminders", - "nextReminder": "Next Reminder", - "none": "None" + "vehicle": "Vozidlo", + "vehicles": "Vozidla", + "serviceRecords": "Servisní záznamy", + "reminders": "Připomenutí", + "nextReminder": "Další připomenutí", + "none": "Žádné" }, "vikunja": { - "projects": "Active Projects", - "tasks7d": "Tasks Due This Week", - "tasksOverdue": "Overdue Tasks", - "tasksInProgress": "Tasks In Progress" + "projects": "Aktivní projekty", + "tasks7d": "Úkoly k dokončení tento týden", + "tasksOverdue": "Zpožděné úkoly", + "tasksInProgress": "Probíhají úkoly" }, "headscale": { - "name": "Name", + "name": "Jméno", "address": "Adresa", "last_seen": "Naposledy viděno", "status": "Stav", @@ -986,10 +986,10 @@ "offline": "Offline" }, "beszel": { - "name": "Name", - "systems": "Systems", - "up": "Up", - "down": "Down", + "name": "Jméno", + "systems": "Systém", + "up": "Běží", + "down": "Výpadek", "paused": "Pozastaveno", "pending": "Čeká", "status": "Stav", @@ -997,50 +997,50 @@ "cpu": "CPU", "memory": "RAM", "disk": "Disk", - "network": "NET" + "network": "Síť" }, "argocd": { - "apps": "Apps", - "synced": "Synced", - "outOfSync": "Out Of Sync", + "apps": "Aplikace", + "synced": "Synchronizováno", + "outOfSync": "Nesynchronizováno", "healthy": "Zdravý", - "degraded": "Degraded", - "progressing": "Progressing", + "degraded": "Degradováno", + "progressing": "Probíhá", "missing": "Chybějící", - "suspended": "Suspended" + "suspended": "Pozastaveno" }, "spoolman": { - "loading": "Loading" + "loading": "Načítání" }, "gitlab": { - "groups": "Groups", + "groups": "Skupiny", "issues": "Problémy", - "merges": "Merge Requests", - "projects": "Projects" + "merges": "Žádosti o sloučení", + "projects": "Projekty" }, "apcups": { "status": "Stav", "load": "Zatížení", - "bcharge": "Battery Charge", + "bcharge": "Úroveň baterie", "timeleft": "Zbývající čas" }, - "hoarder": { - "bookmarks": "Bookmarks", - "favorites": "Favorites", - "archived": "Archived", - "highlights": "Highlights", - "lists": "Lists", - "tags": "Tags" + "karakeep": { + "bookmarks": "Záložky", + "favorites": "Oblíbené", + "archived": "Archivováno", + "highlights": "Zvýraznění", + "lists": "Seznamy", + "tags": "Štítky" }, "slskd": { - "slskStatus": "Network", + "slskStatus": "Síť", "connected": "", "disconnected": "Odpojeno", - "updateStatus": "Update", + "updateStatus": "Aktualizace", "update_yes": "Dostupné", "update_no": "Žádné", - "downloads": "Downloads", - "uploads": "Uploads", + "downloads": "Stažení", + "uploads": "Nahrávání", "sharedFiles": "Soubory" } } diff --git a/public/locales/da/common.json b/public/locales/da/common.json index 901d0ce4..c7115af3 100644 --- a/public/locales/da/common.json +++ b/public/locales/da/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Batteriniveau", "timeleft": "Resterende tid" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 94fb91aa..6ea5a440 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -665,8 +665,8 @@ "storage": "Speicher" }, "uptimekuma": { - "up": "Seiten verfügbar", - "down": "Seiten nicht verfügbar", + "up": "Up", + "down": "Down", "uptime": "Betriebszeit", "incident": "Vorfall", "m": "min" @@ -744,8 +744,8 @@ "targets_total": "Alle Ziele" }, "gatus": { - "up": "Seiten verfügbar", - "down": "Seiten nicht verfügbar", + "up": "Up", + "down": "Down", "uptime": "Betriebszeit" }, "ghostfolio": { @@ -842,8 +842,8 @@ "uptime": "Betriebszeit", "lastDown": "Letzter Ausfall", "downDuration": "Ausfalldauer", - "sitesUp": "Seiten verfügbar", - "sitesDown": "Seiten nicht verfügbar", + "sitesUp": "Up", + "sitesDown": "Down", "paused": "Pausiert", "notyetchecked": "Noch nicht geprüft", "up": "Online", @@ -1024,12 +1024,12 @@ "bcharge": "Akkuladung", "timeleft": "Verbleibende Zeit" }, - "hoarder": { - "bookmarks": "Lesezeichen", - "favorites": "Favoriten", - "archived": "Archiviert", + "karakeep": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", "highlights": "Highlights", - "lists": "Listen", + "lists": "Lists", "tags": "Schlagwörter" }, "slskd": { diff --git a/public/locales/el/common.json b/public/locales/el/common.json index b1cbe307..ea1539d9 100644 --- a/public/locales/el/common.json +++ b/public/locales/el/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "Χρόνος που απομένει" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 4a9c33d5..09b9c2d3 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -1024,7 +1024,7 @@ "bcharge":"Battery Charge", "timeleft":"Time Left" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/eo/common.json b/public/locales/eo/common.json index 908bd124..f943d1c8 100644 --- a/public/locales/eo/common.json +++ b/public/locales/eo/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "Time Left" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/es/common.json b/public/locales/es/common.json index a5ac67ed..76b03275 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -149,8 +149,8 @@ "received": "Recibido", "sent": "Enviado", "externalIPAddress": "IP ext.", - "externalIPv6Address": "Ext. IPv6", - "externalIPv6Prefix": "Ext. IPv6-Prefix" + "externalIPv6Address": "IPv6 ext.", + "externalIPv6Prefix": "Prefijo IPv6 ext." }, "caddy": { "upstreams": "Upstream (desarrollo de software)", @@ -178,7 +178,7 @@ "connectedAp": "AP conectados", "activeUser": "Dispositivos activos", "alerts": "Alertas", - "connectedGateways": "Connected gateways", + "connectedGateways": "Puertas de enlace conectadas", "connectedSwitches": "Conmutadores conectados" }, "nzbget": { @@ -705,8 +705,8 @@ "time": "Tiempo" }, "firefly": { - "networth": "Net Worth", - "budget": "Budget" + "networth": "Patrimonio neto", + "budget": "Presupuesto" }, "grafana": { "dashboards": "Tableros", @@ -886,7 +886,7 @@ "notifications": "Notificaciones", "issues": "Números", "pulls": "Solicitudes de cambios", - "repositories": "Repositories" + "repositories": "Repositorios" }, "stash": { "scenes": "Escenas", @@ -1024,7 +1024,7 @@ "bcharge": "Carga de la batería", "timeleft": "Tiempo restante" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", @@ -1036,11 +1036,11 @@ "slskStatus": "Red", "connected": "Conectado", "disconnected": "Desconectado", - "updateStatus": "Update", + "updateStatus": "Actualización", "update_yes": "Disponible", "update_no": "Actualizado", - "downloads": "Downloads", - "uploads": "Uploads", + "downloads": "Descargas", + "uploads": "Subidas", "sharedFiles": "Archivos" } } diff --git a/public/locales/eu/common.json b/public/locales/eu/common.json index f0654ebb..02d1150c 100644 --- a/public/locales/eu/common.json +++ b/public/locales/eu/common.json @@ -1024,12 +1024,12 @@ "bcharge": "Battery Charge", "timeleft": "Time Left" }, - "hoarder": { - "bookmarks": "Laster-markak", - "favorites": "Gogokoak", - "archived": "Artxibatuta", + "karakeep": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", "highlights": "Highlights", - "lists": "Zerrendak", + "lists": "Lists", "tags": "Etiketak" }, "slskd": { diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json index b1ff23b4..6139aea6 100644 --- a/public/locales/fi/common.json +++ b/public/locales/fi/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "Aikaa jäljellä" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index f0cd54f6..e7bc248a 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -85,16 +85,16 @@ "ping": { "error": "Erreur", "ping": "Latence", - "down": "Bas", - "up": "Haut", + "down": "Down", + "up": "Up", "not_available": "Non disponible" }, "siteMonitor": { "http_status": "Statut HTTP", "error": "Erreur", "response": "Réponse", - "down": "Bas", - "up": "Haut", + "down": "Down", + "up": "Up", "not_available": "Non disponible" }, "emby": { @@ -142,10 +142,10 @@ "connectionStatusDisconnected": "Déconnecté", "connectionStatusConnected": "Connecté", "uptime": "Démarré depuis", - "maxDown": "Max. Bas", - "maxUp": "Max. Haut", - "down": "Bas", - "up": "Haut", + "maxDown": "Max. Down", + "maxUp": "Max. Up", + "down": "Down", + "up": "Up", "received": "Reçu", "sent": "Envoyé", "externalIPAddress": "IP externe", @@ -523,15 +523,15 @@ "up_to_date": "À jour", "child_bridges": "Child Bridges", "child_bridges_status": "{{ok}}/{{total}}", - "up": "Haut", + "up": "Up", "pending": "En attente", - "down": "Bas" + "down": "Down" }, "healthchecks": { "new": "Nouveau", - "up": "Haut", + "up": "Up", "grace": "En Période de Grâce", - "down": "Bas", + "down": "Down", "paused": "En Pause", "status": "Statut", "last_ping": "Dernier Ping", @@ -646,8 +646,8 @@ "load": "Charge moy.", "memory": "Util. Mém.", "wanStatus": "Statut WAN", - "up": "Haut", - "down": "Bas", + "up": "Up", + "down": "Down", "temp": "Température", "disk": "Util. Disque", "wanIP": "IP WAN" @@ -832,8 +832,8 @@ "openwrt": { "uptime": "Démarré depuis", "cpuLoad": "Charge moyenne CPU (5 min)", - "up": "Haut", - "down": "Bas", + "up": "Up", + "down": "Down", "bytesTx": "Transmis", "bytesRx": "Reçu" }, @@ -846,9 +846,9 @@ "sitesDown": "Hors ligne", "paused": "En Pause", "notyetchecked": "Non vérifié", - "up": "Haut", + "up": "Up", "seemsdown": "Semble hors ligne", - "down": "Bas", + "down": "Down", "unknown": "Inconnu" }, "calendar": { @@ -886,7 +886,7 @@ "notifications": "Notifications", "issues": "Anomalies", "pulls": "Demandes de tirage", - "repositories": "Repositories" + "repositories": "Dépôts" }, "stash": { "scenes": "Scènes", @@ -988,8 +988,8 @@ "beszel": { "name": "Nom", "systems": "Systèmes", - "up": "Haut", - "down": "Bas", + "up": "Up", + "down": "Down", "paused": "En Pause", "pending": "En attente", "status": "Statut", @@ -1024,7 +1024,7 @@ "bcharge": "Charge de la batterie", "timeleft": "Temps restant" }, - "hoarder": { + "karakeep": { "bookmarks": "Marque-pages", "favorites": "Favoris", "archived": "Archivé", diff --git a/public/locales/he/common.json b/public/locales/he/common.json index 2751430c..fb338931 100644 --- a/public/locales/he/common.json +++ b/public/locales/he/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "זמן שנותר" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json index 19f419cd..8897f217 100644 --- a/public/locales/hi/common.json +++ b/public/locales/hi/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "Time Left" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json index 2b1c013c..036f746b 100644 --- a/public/locales/hr/common.json +++ b/public/locales/hr/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Napunjenost baterije", "timeleft": "Preostalo vrijeme" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json index f6b5e183..a3ab6bf8 100644 --- a/public/locales/hu/common.json +++ b/public/locales/hu/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Akku töltöttsége", "timeleft": "Hátralévő idő" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/id/common.json b/public/locales/id/common.json index fa4d6459..9babbe5a 100644 --- a/public/locales/id/common.json +++ b/public/locales/id/common.json @@ -1024,12 +1024,12 @@ "bcharge": "Sisa Baterai", "timeleft": "Sisa Waktu" }, - "hoarder": { - "bookmarks": "Markah", - "favorites": "Favorit", - "archived": "Diarsipkan", - "highlights": "Sorotan", - "lists": "Daftar", + "karakeep": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", "tags": "Tag" }, "slskd": { diff --git a/public/locales/it/common.json b/public/locales/it/common.json index 4b0672f9..6e870a09 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -149,8 +149,8 @@ "received": "Ricevuti", "sent": "Inviati", "externalIPAddress": "IP Esterno", - "externalIPv6Address": "Ext. IPv6", - "externalIPv6Prefix": "Ext. IPv6-Prefix" + "externalIPv6Address": "IPv6 Esterno", + "externalIPv6Prefix": "Prefisso IPv6 Esterno" }, "caddy": { "upstreams": "Upstream", @@ -178,7 +178,7 @@ "connectedAp": "AP Connessi", "activeUser": "Dispositivi attivi", "alerts": "Allarmi", - "connectedGateways": "Connected gateways", + "connectedGateways": "Gateway connessi", "connectedSwitches": "Switch connessi" }, "nzbget": { @@ -338,7 +338,7 @@ "technitium": { "totalQueries": "Richieste", "totalNoError": "Successo", - "totalServerFailure": "Failures", + "totalServerFailure": "Fallimenti", "totalNxDomain": "NX Domains", "totalRefused": "Refused", "totalAuthoritative": "Authoritative", @@ -943,7 +943,7 @@ "loading": "Caricamento", "open": "Open - US Market", "closed": "Closed - US Market", - "invalidConfiguration": "Invalid Configuration" + "invalidConfiguration": "Configurazione non valida" }, "frigate": { "cameras": "Cameras", @@ -959,7 +959,7 @@ "unclassified": "Not classified", "information": "Informazioni", "warning": "Warning", - "average": "Average", + "average": "Media", "high": "High", "disaster": "Disaster" }, @@ -987,7 +987,7 @@ }, "beszel": { "name": "Nome", - "systems": "Systems", + "systems": "Sistemi", "up": "Up", "down": "Down", "paused": "In Pausa", @@ -996,15 +996,15 @@ "updated": "Aggiornato", "cpu": "CPU", "memory": "MEM", - "disk": "Disk", + "disk": "Disco", "network": "NET" }, "argocd": { - "apps": "Apps", - "synced": "Synced", - "outOfSync": "Out Of Sync", + "apps": "Applicazioni", + "synced": "Sincronizzato", + "outOfSync": "Non Sincronizzato", "healthy": "Sano", - "degraded": "Degraded", + "degraded": "Degradato", "progressing": "Progressing", "missing": "Mancanti", "suspended": "Suspended" @@ -1013,10 +1013,10 @@ "loading": "Caricamento" }, "gitlab": { - "groups": "Groups", + "groups": "Gruppi", "issues": "Problemi", - "merges": "Merge Requests", - "projects": "Projects" + "merges": "Richieste di merge", + "projects": "Progetti" }, "apcups": { "status": "Stato", @@ -1024,12 +1024,12 @@ "bcharge": "Carica Batteria", "timeleft": "Tempo Rimanente" }, - "hoarder": { - "bookmarks": "Bookmarks", - "favorites": "Favorites", + "karakeep": { + "bookmarks": "Segnalibri", + "favorites": "Preferiti", "archived": "Archived", "highlights": "Highlights", - "lists": "Lists", + "lists": "Liste", "tags": "Tag" }, "slskd": { @@ -1039,7 +1039,7 @@ "updateStatus": "Update", "update_yes": "Disponibili", "update_no": "Aggiornato", - "downloads": "Downloads", + "downloads": "Download", "uploads": "Uploads", "sharedFiles": "File" } diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json index 58869e84..5e963a77 100644 --- a/public/locales/ja/common.json +++ b/public/locales/ja/common.json @@ -1024,7 +1024,7 @@ "bcharge": "バッテリー充電", "timeleft": "残り時間" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/ko/common.json b/public/locales/ko/common.json index 5f5523ff..8bfe4276 100644 --- a/public/locales/ko/common.json +++ b/public/locales/ko/common.json @@ -14,11 +14,11 @@ "date": "{{value, date}}", "relativeDate": "{{value, relativeDate}}", "duration": "{{value, duration}}", - "months": "mo", - "days": "d", - "hours": "h", - "minutes": "m", - "seconds": "s" + "months": "달", + "days": "일", + "hours": "시", + "minutes": "분", + "seconds": "초" }, "widget": { "missing_type": "없는 위젯 유형: {{type}}", @@ -51,7 +51,7 @@ }, "unifi": { "users": "사용자", - "uptime": "Uptime", + "uptime": "가동 시간", "days": "일", "wan": "WAN", "lan": "LAN", @@ -141,7 +141,7 @@ "connectionStatusDisconnecting": "연결을 끊는 중...", "connectionStatusDisconnected": "연결 끊김", "connectionStatusConnected": "연결됨", - "uptime": "Uptime", + "uptime": "가동 시간", "maxDown": "Max. Down", "maxUp": "Max. Up", "down": "Down", @@ -188,7 +188,7 @@ }, "plex": { "streams": "활성 스트림", - "albums": "Albums", + "albums": "앨범", "movies": "영화", "tv": "TV 쇼" }, @@ -440,8 +440,8 @@ "total": "총합", "free": "남음", "used": "사용", - "days": "d", - "hours": "h", + "days": "일", + "hours": "시", "crit": "Crit", "read": "읽음", "write": "쓰기", @@ -556,7 +556,7 @@ }, "truenas": { "load": "System Load", - "uptime": "Uptime", + "uptime": "가동 시간", "alerts": "경고" }, "pyload": { @@ -606,7 +606,7 @@ "mikrotik": { "cpuLoad": "CPU Load", "memoryUsed": "메모리 사용량", - "uptime": "Uptime", + "uptime": "가동 시간", "numberOfLeases": "Leases" }, "xteve": { @@ -667,9 +667,9 @@ "uptimekuma": { "up": "Sites Up", "down": "Sites Down", - "uptime": "Uptime", + "uptime": "가동 시간", "incident": "Incident", - "m": "m" + "m": "분" }, "atsumeru": { "series": "시리즈", @@ -684,7 +684,7 @@ }, "diskstation": { "days": "일", - "uptime": "Uptime", + "uptime": "가동 시간", "volumeAvailable": "이용 가능" }, "mylar": { @@ -693,7 +693,7 @@ "wanted": "요청" }, "photoprism": { - "albums": "Albums", + "albums": "앨범", "photos": "사진", "videos": "동영상", "people": "People" @@ -705,8 +705,8 @@ "time": "Time" }, "firefly": { - "networth": "Net Worth", - "budget": "Budget" + "networth": "순자산", + "budget": "예산" }, "grafana": { "dashboards": "대시보드", @@ -746,7 +746,7 @@ "gatus": { "up": "Sites Up", "down": "Sites Down", - "uptime": "Uptime" + "uptime": "가동 시간" }, "ghostfolio": { "gross_percent_today": "오늘", @@ -816,7 +816,7 @@ "totalUsed": "Used Storage" }, "mealie": { - "recipes": "Recipes", + "recipes": "레시피", "users": "사용자", "categories": "분류", "tags": "태그" @@ -830,7 +830,7 @@ "failed": "Failed" }, "openwrt": { - "uptime": "Uptime", + "uptime": "가동 시간", "cpuLoad": "CPU Load Avg (5m)", "up": "Up", "down": "Down", @@ -839,7 +839,7 @@ }, "uptimerobot": { "status": "상태", - "uptime": "Uptime", + "uptime": "가동 시간", "lastDown": "Last Downtime", "downDuration": "Downtime Duration", "sitesUp": "Sites Up", @@ -906,7 +906,7 @@ }, "tandoor": { "users": "사용자", - "recipes": "Recipes", + "recipes": "레시피", "keywords": "키워드" }, "homebox": { @@ -947,7 +947,7 @@ }, "frigate": { "cameras": "카메라", - "uptime": "Uptime", + "uptime": "가동 시간", "version": "버전" }, "linkwarden": { @@ -1024,7 +1024,7 @@ "bcharge": "배터리 충전 중", "timeleft": "남은 시간" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/lv/common.json b/public/locales/lv/common.json index 85d9a359..0238d143 100644 --- a/public/locales/lv/common.json +++ b/public/locales/lv/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "Atlikušais laiks" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json index 4ebfd6d8..8c0e5509 100644 --- a/public/locales/ms/common.json +++ b/public/locales/ms/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Bateri dicas", "timeleft": "Masa Tinggal" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index e26ad05e..63a2d50e 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Batterij opladen", "timeleft": "Resterende Tijd" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/no/common.json b/public/locales/no/common.json index 67710fe1..dee02141 100644 --- a/public/locales/no/common.json +++ b/public/locales/no/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Batteriladning", "timeleft": "Gjenstående tid" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index 1316d5c9..3a956aaf 100644 --- a/public/locales/pl/common.json +++ b/public/locales/pl/common.json @@ -149,8 +149,8 @@ "received": "Odebrane", "sent": "Wysłane", "externalIPAddress": "Pub. IP", - "externalIPv6Address": "Ext. IPv6", - "externalIPv6Prefix": "Ext. IPv6-Prefix" + "externalIPv6Address": "Zewn. IPv6", + "externalIPv6Prefix": "Zewn. prefiks IPv6" }, "caddy": { "upstreams": "Upstreams", @@ -705,8 +705,8 @@ "time": "Czas" }, "firefly": { - "networth": "Net Worth", - "budget": "Budget" + "networth": "Wartość netto", + "budget": "Budżet" }, "grafana": { "dashboards": "Panel główny", @@ -886,7 +886,7 @@ "notifications": "Powiadomienia", "issues": "Zgłoszenia", "pulls": "Żądania Pull", - "repositories": "Repositories" + "repositories": "Repozytoria" }, "stash": { "scenes": "Sceny", @@ -1024,12 +1024,12 @@ "bcharge": "Stan baterii", "timeleft": "Pozostało" }, - "hoarder": { - "bookmarks": "Bookmarks", - "favorites": "Favorites", - "archived": "Archived", - "highlights": "Highlights", - "lists": "Lists", + "karakeep": { + "bookmarks": "Zakładki", + "favorites": "Ulubione", + "archived": "Zarchiwizowane", + "highlights": "Wyróżnione", + "lists": "Listy", "tags": "Tagi" }, "slskd": { diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index acbf2d96..c392c17d 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Carga da bateria", "timeleft": "Tempo Restante" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/pt_BR/common.json b/public/locales/pt_BR/common.json index 92a1dfcf..ee426052 100644 --- a/public/locales/pt_BR/common.json +++ b/public/locales/pt_BR/common.json @@ -886,7 +886,7 @@ "notifications": "Notificações", "issues": "Problemas", "pulls": "Solicitações de Envio", - "repositories": "Repositories" + "repositories": "Repositórios" }, "stash": { "scenes": "Cenas", @@ -1024,8 +1024,8 @@ "bcharge": "Carga da bateria", "timeleft": "Tempo restante" }, - "hoarder": { - "bookmarks": "Favoritos", + "karakeep": { + "bookmarks": "Marcadores", "favorites": "Favoritos", "archived": "Arquivados", "highlights": "Destaques", @@ -1036,7 +1036,7 @@ "slskStatus": "Rede", "connected": "Conectado", "disconnected": "Desconectado", - "updateStatus": "Update", + "updateStatus": "Atualize", "update_yes": "Disponível", "update_no": "Atualizado", "downloads": "Transferências", diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json index b0eb7747..9dcd2921 100644 --- a/public/locales/ro/common.json +++ b/public/locales/ro/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "Timp rămas" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index e1e1a94f..d6cabab4 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -886,7 +886,7 @@ "notifications": "Уведомления", "issues": "Вопросы", "pulls": "Запросы на слияние (Pull Request)", - "repositories": "Repositories" + "repositories": "Репозитории" }, "stash": { "scenes": "Сцены", @@ -1024,10 +1024,10 @@ "bcharge": "Заряд батареи", "timeleft": "Осталось" }, - "hoarder": { + "karakeep": { "bookmarks": "Закладки", "favorites": "Избранное", - "archived": "Архивированное", + "archived": "Архив", "highlights": "События", "lists": "Список", "tags": "Теги" diff --git a/public/locales/sk/common.json b/public/locales/sk/common.json index 9c154cce..a267ad81 100644 --- a/public/locales/sk/common.json +++ b/public/locales/sk/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Nabitie batérie", "timeleft": "Zostávajúci čas" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/sl/common.json b/public/locales/sl/common.json index a32aa0dd..ba6f07b9 100644 --- a/public/locales/sl/common.json +++ b/public/locales/sl/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Napolnjenost baterije", "timeleft": "Preostali čas" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json index 4e3f5fb0..5314dc2b 100644 --- a/public/locales/sr/common.json +++ b/public/locales/sr/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "Time Left" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index caa18acd..d389a937 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "Tid kvar" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/te/common.json b/public/locales/te/common.json index e34d6fae..e980d4ba 100644 --- a/public/locales/te/common.json +++ b/public/locales/te/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "మిగిలి వున్న సమయం" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/th/common.json b/public/locales/th/common.json index b37b662d..1d88948b 100644 --- a/public/locales/th/common.json +++ b/public/locales/th/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "Time Left" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json index 815b9150..19bd4540 100644 --- a/public/locales/tr/common.json +++ b/public/locales/tr/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Pil Yüzdesi", "timeleft": "Kalan Zaman" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/uk/common.json b/public/locales/uk/common.json index 3412d591..419d77c0 100644 --- a/public/locales/uk/common.json +++ b/public/locales/uk/common.json @@ -120,7 +120,7 @@ "grid_power": "Сітка", "home_power": "Споживання", "charge_power": "Зарядний пристрій", - "kilowatt": "kW" + "kilowatt": "кВт" }, "flood": { "download": "Завантажено", @@ -149,8 +149,8 @@ "received": "Отримано", "sent": "Надіслано", "externalIPAddress": "Зовнішній IP", - "externalIPv6Address": "Ext. IPv6", - "externalIPv6Prefix": "Ext. IPv6-Prefix" + "externalIPv6Address": "Зовнішній IPv6", + "externalIPv6Prefix": "Зовнішній Префікс IPv6-" }, "caddy": { "upstreams": "Потоки", @@ -178,7 +178,7 @@ "connectedAp": "Підключені точки доступу", "activeUser": "Активні пристрої", "alerts": "Оповіщення", - "connectedGateways": "Connected gateways", + "connectedGateways": "Підключені шлюзи", "connectedSwitches": "Підключені перемикачі" }, "nzbget": { @@ -420,8 +420,8 @@ }, "authentik": { "users": "Користувачі", - "loginsLast24H": "Вхід (24 години)", - "failedLoginsLast24H": "Невдалі входи (24 години)" + "loginsLast24H": "Вхід (протягом доби)", + "failedLoginsLast24H": "Невдалі входи (протягом доби)" }, "proxmox": { "mem": "ОЗП", @@ -434,7 +434,7 @@ "load": "Завантаження", "wait": "Будь ласка, зачекайте", "temp": "Температура", - "_temp": "Темп.", + "_temp": "Температура", "warn": "Увага", "uptime": "Онлайн", "total": "Усього", @@ -616,7 +616,7 @@ }, "opendtu": { "yieldDay": "Сьогодні", - "absolutePower": "Абс. потуж.", + "absolutePower": "Потужність", "relativePower": "Заряд %", "limit": "Ліміт" }, @@ -648,13 +648,13 @@ "wanStatus": "Статус WAN", "up": "Онлайн", "down": "Офлайн", - "temp": "Темп.", + "temp": "Температура", "disk": "Використання диска", "wanIP": "WAN IP" }, "proxmoxbackupserver": { "datastore_usage": "Сховище даних", - "failed_tasks_24h": "Невиконані завдання 24 години", + "failed_tasks_24h": "Невиконані завдання за останню добу", "cpu_usage": "ЦП", "memory_usage": "Пам'ять" }, @@ -705,8 +705,8 @@ "time": "Час" }, "firefly": { - "networth": "Net Worth", - "budget": "Budget" + "networth": "Чисті Активи", + "budget": "Бюджет" }, "grafana": { "dashboards": "Інформаційні панелі", @@ -831,7 +831,7 @@ }, "openwrt": { "uptime": "Час роботи", - "cpuLoad": "Сер. навантаження ЦП (5 хв)", + "cpuLoad": "Сер. навантаження ЦП (\"5\" хв)", "up": "Онлайн", "down": "Офлайн", "bytesTx": "Передано", @@ -855,7 +855,7 @@ "inCinemas": "У кінотеатрах", "physicalRelease": "Фізичний реліз", "digitalRelease": "Цифровий реліз", - "noEventsToday": "Події на сьогодні відсутні", + "noEventsToday": "Події на сьогодні відсутні!", "noEventsFound": "Події не знайдено" }, "romm": { @@ -886,7 +886,7 @@ "notifications": "Сповіщення", "issues": "Питання", "pulls": "Pull-запити", - "repositories": "Repositories" + "repositories": "Репозиторії" }, "stash": { "scenes": "Сцени", @@ -1024,23 +1024,23 @@ "bcharge": "Заряд батареї", "timeleft": "Залишилось" }, - "hoarder": { - "bookmarks": "Bookmarks", - "favorites": "Favorites", - "archived": "Archived", - "highlights": "Highlights", - "lists": "Lists", + "karakeep": { + "bookmarks": "Закладки", + "favorites": "Обране", + "archived": "Заархівовані", + "highlights": "Основні моменти", + "lists": "Списки", "tags": "Теги" }, "slskd": { "slskStatus": "Мережа", "connected": "З'єднано", "disconnected": "Відключено", - "updateStatus": "Update", + "updateStatus": "Оновити", "update_yes": "Доступно", "update_no": "Актуально", - "downloads": "Downloads", - "uploads": "Uploads", + "downloads": "Завантаження", + "uploads": "Вивантаження", "sharedFiles": "Файли" } } diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index 7e8974f8..efe0c9ab 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "Thời gian còn lại" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json index dfe604dd..9dd81cfd 100644 --- a/public/locales/yue/common.json +++ b/public/locales/yue/common.json @@ -5,9 +5,9 @@ "bbytes": "{{value, bytes(binary: true)}}", "bbits": "{{value, bytes(bits: true; binary: true)}}", "byterate": "{{value, rate(bits: false)}}", - "bibyterate": "{{value, rate(bits: false; binary: true)}}", + "bibyterate": "{{value, bytes(bits: true; binary: true)}}", "bitrate": "{{value, rate(bits: true)}}", - "bibitrate": "{{value, rate(bits: true; binary: true)}}", + "bibitrate": "{{value, bytes(bits: true; binary: true)}}", "percent": "{{value, percent}}", "number": "{{value, number}}", "ms": "{{value, number}}", @@ -120,7 +120,7 @@ "grid_power": "電網", "home_power": "電源使用率", "charge_power": "充電", - "kilowatt": "kW" + "kilowatt": "千瓦" }, "flood": { "download": "下載速率", @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "待辦的斷開", "connectionStatusDisconnecting": "正在中斷連線", "connectionStatusDisconnected": "連接已中斷", - "connectionStatusConnected": "Connected", + "connectionStatusConnected": "已連線", "uptime": "運行時間", "maxDown": "最大下載速率", "maxUp": "最大上傳速率", @@ -149,8 +149,8 @@ "received": "已接收", "sent": "已送出", "externalIPAddress": "外部 IP", - "externalIPv6Address": "Ext. IPv6", - "externalIPv6Prefix": "Ext. IPv6-Prefix" + "externalIPv6Address": "外部 IP", + "externalIPv6Prefix": "擴展 IPv-前綴" }, "caddy": { "upstreams": "上行", @@ -178,7 +178,7 @@ "connectedAp": "已連接的存取點", "activeUser": "在線裝置", "alerts": "警示", - "connectedGateways": "Connected gateways", + "connectedGateways": "已連繫的網關", "connectedSwitches": "已連接的交換器" }, "nzbget": { @@ -229,8 +229,8 @@ "seed": "已完成下載" }, "develancacheui": { - "cachehitbytes": "Cache Hit Bytes", - "cachemissbytes": "Cache Miss Bytes" + "cachehitbytes": "快取未命中位元組", + "cachemissbytes": "快取未命中位元組" }, "downloadstation": { "download": "下載速率", @@ -285,9 +285,9 @@ }, "netalertx": { "total": "全部", - "connected": "Connected", - "new_devices": "New Devices", - "down_alerts": "Down Alerts" + "connected": "已連線", + "new_devices": "新裝置", + "down_alerts": "離線警告" }, "pihole": { "queries": "查詢", @@ -313,13 +313,13 @@ }, "suwayomi": { "download": "下載咗", - "nondownload": "Non-Downloaded", + "nondownload": "已下載", "read": "已讀", "unread": "未讀", - "downloadedread": "Downloaded & Read", - "downloadedunread": "Downloaded & Unread", - "nondownloadedread": "Non-Downloaded & Read", - "nondownloadedunread": "Non-Downloaded & Unread" + "downloadedread": "已下載且已閱讀", + "downloadedunread": "已下載且未閱讀", + "nondownloadedread": "未下載但已閱讀", + "nondownloadedunread": "未下載且未閱讀" }, "tailscale": { "address": "位址", @@ -337,15 +337,15 @@ }, "technitium": { "totalQueries": "查詢", - "totalNoError": "Success", - "totalServerFailure": "Failures", - "totalNxDomain": "NX Domains", - "totalRefused": "Refused", - "totalAuthoritative": "Authoritative", - "totalRecursive": "Recursive", - "totalCached": "Cached", + "totalNoError": "成功", + "totalServerFailure": "失敗", + "totalNxDomain": "網域", + "totalRefused": "對方拒投誠信", + "totalAuthoritative": "權威的", + "totalRecursive": "遞迴", + "totalCached": "快取", "totalBlocked": "封鎖", - "totalDropped": "Dropped", + "totalDropped": "丟棄", "totalClients": "客戶端" }, "tdarr": { @@ -705,8 +705,8 @@ "time": "時間" }, "firefly": { - "networth": "Net Worth", - "budget": "Budget" + "networth": "淨值", + "budget": "預算" }, "grafana": { "dashboards": "控制面板", @@ -860,16 +860,16 @@ }, "romm": { "platforms": "平台", - "totalRoms": "Games", - "saves": "Saves", - "states": "States", - "screenshots": "Screenshots", - "totalfilesize": "Total Size" + "totalRoms": "遊戲", + "saves": "已儲存", + "states": "州", + "screenshots": "螢幕截圖", + "totalfilesize": "大小總計" }, "mailcow": { "domains": "域", - "mailboxes": "Mailboxes", - "mails": "Mails", + "mailboxes": "信箱", + "mails": "郵件數", "storage": "儲存空間" }, "netdata": { @@ -886,7 +886,7 @@ "notifications": "信息", "issues": "出版", "pulls": "提取請求", - "repositories": "Repositories" + "repositories": "套件來源" }, "stash": { "scenes": "場景", @@ -922,16 +922,16 @@ "bans": "禁止" }, "wgeasy": { - "connected": "Connected", + "connected": "已連線", "enabled": "啟用", "disabled": "停用咗", "total": "全部" }, "swagdashboard": { - "proxied": "Proxied", - "auth": "With Auth", - "outdated": "Outdated", - "banned": "Banned" + "proxied": "已代理", + "auth": "已授權", + "outdated": "須更新", + "banned": "已封鎖" }, "myspeed": { "ping": "延遲", @@ -939,43 +939,43 @@ "upload": "上傳速率" }, "stocks": { - "stocks": "Stocks", - "loading": "Loading", - "open": "Open - US Market", - "closed": "Closed - US Market", - "invalidConfiguration": "Invalid Configuration" + "stocks": "股票", + "loading": "載入中 ", + "open": "美國市場已開放", + "closed": "美國市場已關閉", + "invalidConfiguration": "無效的設定" }, "frigate": { - "cameras": "Cameras", + "cameras": " ", "uptime": "運行時間", "version": "版本" }, "linkwarden": { - "links": "Links", - "collections": "Collections", + "links": " ", + "collections": "收藏庫", "tags": "標籤" }, "zabbix": { - "unclassified": "Not classified", + "unclassified": "未分類", "information": "資訊", - "warning": "Warning", - "average": "Average", - "high": "High", - "disaster": "Disaster" + "warning": "警告", + "average": "平均", + "high": "高優先權", + "disaster": "災難" }, "lubelogger": { - "vehicle": "Vehicle", - "vehicles": "Vehicles", - "serviceRecords": "Service Records", - "reminders": "Reminders", - "nextReminder": "Next Reminder", - "none": "None" + "vehicle": "車輛", + "vehicles": "車輛", + "serviceRecords": "保養記錄", + "reminders": "提醒", + "nextReminder": "下一個提醒", + "none": "沒有" }, "vikunja": { - "projects": "Active Projects", - "tasks7d": "Tasks Due This Week", - "tasksOverdue": "Overdue Tasks", - "tasksInProgress": "Tasks In Progress" + "projects": "正在應用的項目", + "tasks7d": "本週到期任務", + "tasksOverdue": "逾期處理", + "tasksInProgress": "正在執行的任務" }, "headscale": { "name": "名稱", @@ -987,7 +987,7 @@ }, "beszel": { "name": "名稱", - "systems": "Systems", + "systems": "系統", "up": "在線", "down": "離線", "paused": "擱置中", @@ -996,27 +996,27 @@ "updated": "已更新", "cpu": "CPU", "memory": "記憶體", - "disk": "Disk", - "network": "NET" + "disk": "儲存空間", + "network": "網路" }, "argocd": { - "apps": "Apps", - "synced": "Synced", - "outOfSync": "Out Of Sync", + "apps": "應用程式", + "synced": "已同步", + "outOfSync": "不同步", "healthy": "健康", - "degraded": "Degraded", - "progressing": "Progressing", + "degraded": "已降級", + "progressing": "進度", "missing": "缺少", - "suspended": "Suspended" + "suspended": "暫停" }, "spoolman": { - "loading": "Loading" + "loading": "載入中 " }, "gitlab": { - "groups": "Groups", + "groups": "群組", "issues": "出版", - "merges": "Merge Requests", - "projects": "Projects" + "merges": "合併請求", + "projects": "專" }, "apcups": { "status": "狀況", @@ -1024,23 +1024,23 @@ "bcharge": "充電", "timeleft": "用時" }, - "hoarder": { - "bookmarks": "Bookmarks", - "favorites": "Favorites", - "archived": "Archived", - "highlights": "Highlights", - "lists": "Lists", + "karakeep": { + "bookmarks": "書籤", + "favorites": "我的最愛", + "archived": "已存檔", + "highlights": "標記", + "lists": "列表", "tags": "標籤" }, "slskd": { "slskStatus": "網絡", - "connected": "Connected", + "connected": "已連線", "disconnected": "連接已中斷", - "updateStatus": "Update", + "updateStatus": "更新", "update_yes": "可用", "update_no": "已更新至最新", - "downloads": "Downloads", - "uploads": "Uploads", + "downloads": "下載", + "uploads": "上傳", "sharedFiles": "檔案" } } diff --git a/public/locales/zh-Hans/common.json b/public/locales/zh-Hans/common.json index 064e2c1c..be53b16b 100644 --- a/public/locales/zh-Hans/common.json +++ b/public/locales/zh-Hans/common.json @@ -1024,7 +1024,7 @@ "bcharge": "充电中", "timeleft": "剩余时间" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json index eb1f7423..7abcd3a2 100644 --- a/public/locales/zh-Hant/common.json +++ b/public/locales/zh-Hant/common.json @@ -5,9 +5,9 @@ "bbytes": "{{value, bytes(binary: true)}}", "bbits": "{{value, bytes(bits: true; binary: true)}}", "byterate": "{{value, rate(bits: false)}}", - "bibyterate": "{{value, rate(bits: false; binary: true)}}", + "bibyterate": "{{value, bytes(bits: true; binary: true)}}", "bitrate": "{{value, rate(bits: true)}}", - "bibitrate": "{{value, rate(bits: true; binary: true)}}", + "bibitrate": "{{value, bytes(bits: true; binary: true)}}", "percent": "{{value, percent}}", "number": "{{value, number}}", "ms": "{{value, number}}", @@ -120,7 +120,7 @@ "grid_power": "電網", "home_power": "電源使用率", "charge_power": "充電", - "kilowatt": "kW" + "kilowatt": "千瓦" }, "flood": { "download": "下載速率", @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "待辦的斷開", "connectionStatusDisconnecting": "正在中斷連線", "connectionStatusDisconnected": "連接已中斷", - "connectionStatusConnected": "Connected", + "connectionStatusConnected": "已連線", "uptime": "運行時間", "maxDown": "最大下載速率", "maxUp": "最大上傳速率", @@ -149,8 +149,8 @@ "received": "已接收", "sent": "已送出", "externalIPAddress": "外部 IP", - "externalIPv6Address": "Ext. IPv6", - "externalIPv6Prefix": "Ext. IPv6-Prefix" + "externalIPv6Address": "外部 IP", + "externalIPv6Prefix": "擴展 IPv-前綴" }, "caddy": { "upstreams": "上行", @@ -178,7 +178,7 @@ "connectedAp": "已連接的存取點", "activeUser": "在線裝置", "alerts": "警示", - "connectedGateways": "Connected gateways", + "connectedGateways": "已連繫的網關", "connectedSwitches": "已連接的交換器" }, "nzbget": { @@ -229,8 +229,8 @@ "seed": "已完成下載" }, "develancacheui": { - "cachehitbytes": "Cache Hit Bytes", - "cachemissbytes": "Cache Miss Bytes" + "cachehitbytes": "快取未命中位元組", + "cachemissbytes": "快取未命中位元組" }, "downloadstation": { "download": "下載速率", @@ -285,9 +285,9 @@ }, "netalertx": { "total": "全部", - "connected": "Connected", - "new_devices": "New Devices", - "down_alerts": "Down Alerts" + "connected": "已連線", + "new_devices": "新裝置", + "down_alerts": "離線警告" }, "pihole": { "queries": "查詢", @@ -313,13 +313,13 @@ }, "suwayomi": { "download": "已下載", - "nondownload": "Non-Downloaded", + "nondownload": "已下載", "read": "已讀", "unread": "未讀", - "downloadedread": "Downloaded & Read", - "downloadedunread": "Downloaded & Unread", - "nondownloadedread": "Non-Downloaded & Read", - "nondownloadedunread": "Non-Downloaded & Unread" + "downloadedread": "已下載且已閱讀", + "downloadedunread": "已下載且未閱讀", + "nondownloadedread": "未下載但已閱讀", + "nondownloadedunread": "未下載且未閱讀" }, "tailscale": { "address": "位址", @@ -337,15 +337,15 @@ }, "technitium": { "totalQueries": "查詢", - "totalNoError": "Success", - "totalServerFailure": "Failures", - "totalNxDomain": "NX Domains", - "totalRefused": "Refused", - "totalAuthoritative": "Authoritative", - "totalRecursive": "Recursive", - "totalCached": "Cached", + "totalNoError": "成功", + "totalServerFailure": "失敗", + "totalNxDomain": "網域", + "totalRefused": "對方拒投誠信", + "totalAuthoritative": "權威的", + "totalRecursive": "遞迴", + "totalCached": "快取", "totalBlocked": "已阻擋", - "totalDropped": "Dropped", + "totalDropped": "丟棄", "totalClients": "客戶端" }, "tdarr": { @@ -705,8 +705,8 @@ "time": "時間" }, "firefly": { - "networth": "Net Worth", - "budget": "Budget" + "networth": "淨值", + "budget": "預算" }, "grafana": { "dashboards": "控制面板", @@ -860,16 +860,16 @@ }, "romm": { "platforms": "平台", - "totalRoms": "Games", - "saves": "Saves", - "states": "States", - "screenshots": "Screenshots", - "totalfilesize": "Total Size" + "totalRoms": "遊戲", + "saves": "已儲存", + "states": "州", + "screenshots": "螢幕截圖", + "totalfilesize": "大小總計" }, "mailcow": { "domains": "網域", - "mailboxes": "Mailboxes", - "mails": "Mails", + "mailboxes": "信箱", + "mails": "郵件數", "storage": "儲存空間" }, "netdata": { @@ -886,7 +886,7 @@ "notifications": "信息", "issues": "出版", "pulls": "提取請求", - "repositories": "Repositories" + "repositories": "套件來源" }, "stash": { "scenes": "場景", @@ -922,16 +922,16 @@ "bans": "禁止" }, "wgeasy": { - "connected": "Connected", + "connected": "已連線", "enabled": "已啟用", "disabled": "已停用", "total": "全部" }, "swagdashboard": { - "proxied": "Proxied", - "auth": "With Auth", - "outdated": "Outdated", - "banned": "Banned" + "proxied": "已代理", + "auth": "已授權", + "outdated": "須更新", + "banned": "已封鎖" }, "myspeed": { "ping": "延遲", @@ -939,43 +939,43 @@ "upload": "上傳速率" }, "stocks": { - "stocks": "Stocks", - "loading": "Loading", - "open": "Open - US Market", - "closed": "Closed - US Market", - "invalidConfiguration": "Invalid Configuration" + "stocks": "股票", + "loading": "載入中 ", + "open": "美國市場已開放", + "closed": "美國市場已關閉", + "invalidConfiguration": "無效的設定" }, "frigate": { - "cameras": "Cameras", + "cameras": " ", "uptime": "運行時間", "version": "版本" }, "linkwarden": { - "links": "Links", - "collections": "Collections", + "links": " ", + "collections": "收藏庫", "tags": "標籤" }, "zabbix": { - "unclassified": "Not classified", + "unclassified": "未分類", "information": "資訊", - "warning": "Warning", - "average": "Average", - "high": "High", - "disaster": "Disaster" + "warning": "警告", + "average": "平均", + "high": "高優先權", + "disaster": "災難" }, "lubelogger": { - "vehicle": "Vehicle", - "vehicles": "Vehicles", - "serviceRecords": "Service Records", - "reminders": "Reminders", - "nextReminder": "Next Reminder", - "none": "None" + "vehicle": "車輛", + "vehicles": "車輛", + "serviceRecords": "保養記錄", + "reminders": "提醒", + "nextReminder": "下一個提醒", + "none": "沒有" }, "vikunja": { - "projects": "Active Projects", - "tasks7d": "Tasks Due This Week", - "tasksOverdue": "Overdue Tasks", - "tasksInProgress": "Tasks In Progress" + "projects": "正在應用的項目", + "tasks7d": "本週到期任務", + "tasksOverdue": "逾期處理", + "tasksInProgress": "正在執行的任務" }, "headscale": { "name": "名稱", @@ -987,7 +987,7 @@ }, "beszel": { "name": "名稱", - "systems": "Systems", + "systems": "系統", "up": "在線", "down": "離線", "paused": "擱置中", @@ -996,27 +996,27 @@ "updated": "已更新", "cpu": "CPU", "memory": "記憶體", - "disk": "Disk", - "network": "NET" + "disk": "儲存空間", + "network": "網路" }, "argocd": { - "apps": "Apps", - "synced": "Synced", - "outOfSync": "Out Of Sync", + "apps": "應用程式", + "synced": "已同步", + "outOfSync": "不同步", "healthy": "健康", - "degraded": "Degraded", - "progressing": "Progressing", + "degraded": "已降級", + "progressing": "進度", "missing": "缺少", - "suspended": "Suspended" + "suspended": "暫停" }, "spoolman": { - "loading": "Loading" + "loading": "載入中 " }, "gitlab": { - "groups": "Groups", + "groups": "群組", "issues": "出版", - "merges": "Merge Requests", - "projects": "Projects" + "merges": "合併請求", + "projects": "專" }, "apcups": { "status": "狀態", @@ -1024,23 +1024,23 @@ "bcharge": "充電", "timeleft": "剩餘時間" }, - "hoarder": { - "bookmarks": "Bookmarks", - "favorites": "Favorites", - "archived": "Archived", - "highlights": "Highlights", - "lists": "Lists", + "karakeep": { + "bookmarks": "書籤", + "favorites": "我的最愛", + "archived": "已存檔", + "highlights": "標記", + "lists": "列表", "tags": "標籤" }, "slskd": { "slskStatus": "網絡", - "connected": "Connected", + "connected": "已連線", "disconnected": "連接已中斷", - "updateStatus": "Update", + "updateStatus": "更新", "update_yes": "可觀看", "update_no": "已更新至最新", - "downloads": "Downloads", - "uploads": "Uploads", + "downloads": "下載", + "uploads": "上傳", "sharedFiles": "檔案" } } diff --git a/src/components/bookmarks/group.jsx b/src/components/bookmarks/group.jsx index 726f54e8..2334dad5 100644 --- a/src/components/bookmarks/group.jsx +++ b/src/components/bookmarks/group.jsx @@ -1,10 +1,10 @@ -import { useRef, useEffect } from "react"; -import classNames from "classnames"; import { Disclosure, Transition } from "@headlessui/react"; -import { MdKeyboardArrowDown } from "react-icons/md"; -import ErrorBoundary from "components/errorboundry"; +import classNames from "classnames"; import List from "components/bookmarks/list"; +import ErrorBoundary from "components/errorboundry"; import ResolvedIcon from "components/resolvedicon"; +import { useEffect, useRef } from "react"; +import { MdKeyboardArrowDown } from "react-icons/md"; export default function BookmarksGroup({ bookmarks, diff --git a/src/components/bookmarks/item.jsx b/src/components/bookmarks/item.jsx index c9b84eac..7ea16bba 100644 --- a/src/components/bookmarks/item.jsx +++ b/src/components/bookmarks/item.jsx @@ -1,7 +1,7 @@ -import { useContext } from "react"; import classNames from "classnames"; -import { SettingsContext } from "utils/contexts/settings"; import ResolvedIcon from "components/resolvedicon"; +import { useContext } from "react"; +import { SettingsContext } from "utils/contexts/settings"; export default function Item({ bookmark, iconOnly = false }) { const description = bookmark.description ?? new URL(bookmark.href).hostname; diff --git a/src/components/favicon.jsx b/src/components/favicon.jsx index 8221c799..8961d655 100644 --- a/src/components/favicon.jsx +++ b/src/components/favicon.jsx @@ -1,6 +1,6 @@ /* eslint-disable @next/next/no-img-element */ /* eslint-disable jsx-a11y/alt-text */ -import { useRef, useEffect, useContext } from "react"; +import { useContext, useEffect, useRef } from "react"; import { ColorContext } from "utils/contexts/color"; import themes from "utils/styles/themes"; diff --git a/src/components/quicklaunch.jsx b/src/components/quicklaunch.jsx index b8d0b7ba..5ed9ace7 100644 --- a/src/components/quicklaunch.jsx +++ b/src/components/quicklaunch.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "react-i18next"; -import { useEffect, useState, useRef, useCallback, useContext } from "react"; import classNames from "classnames"; +import { useTranslation } from "next-i18next"; +import { useCallback, useContext, useEffect, useRef, useState } from "react"; import useSWR from "swr"; import { SettingsContext } from "utils/contexts/settings"; @@ -53,7 +53,7 @@ export default function QuickLaunch({ servicesAndBookmarks, searchString, setSea const result = results[currentItemIndex]; window.open( result.href, - newWindow ? "_blank" : result.target ?? searchProvider?.target ?? settings.target ?? "_blank", + newWindow ? "_blank" : (result.target ?? searchProvider?.target ?? settings.target ?? "_blank"), "noreferrer", ); } @@ -204,7 +204,8 @@ export default function QuickLaunch({ servicesAndBookmarks, searchString, setSea return () => { abortController.abort(); }; - }, [searchString, servicesAndBookmarks, searchDescriptions, hideVisitURL, searchSuggestions, searchProvider, url, t]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [searchString, servicesAndBookmarks, searchDescriptions, hideVisitURL, searchSuggestions, searchProvider, url]); const [hidden, setHidden] = useState(true); useEffect(() => { diff --git a/src/components/resolvedicon.jsx b/src/components/resolvedicon.jsx index eb2a5c0d..77ba9119 100644 --- a/src/components/resolvedicon.jsx +++ b/src/components/resolvedicon.jsx @@ -1,5 +1,5 @@ -import { useContext } from "react"; import Image from "next/image"; +import { useContext } from "react"; import { SettingsContext } from "utils/contexts/settings"; import { ThemeContext } from "utils/contexts/theme"; diff --git a/src/components/services/dropdown.jsx b/src/components/services/dropdown.jsx index 00b8a429..e8e11d97 100644 --- a/src/components/services/dropdown.jsx +++ b/src/components/services/dropdown.jsx @@ -1,7 +1,7 @@ -import { Fragment } from "react"; import { Menu, Transition } from "@headlessui/react"; -import { BiCog } from "react-icons/bi"; import classNames from "classnames"; +import { Fragment } from "react"; +import { BiCog } from "react-icons/bi"; export default function Dropdown({ options, value, setValue }) { return ( diff --git a/src/components/services/group.jsx b/src/components/services/group.jsx index 3e6327a4..cad7b5aa 100644 --- a/src/components/services/group.jsx +++ b/src/components/services/group.jsx @@ -1,9 +1,9 @@ -import { useRef, useEffect } from "react"; -import classNames from "classnames"; import { Disclosure, Transition } from "@headlessui/react"; -import { MdKeyboardArrowDown } from "react-icons/md"; -import List from "components/services/list"; +import classNames from "classnames"; import ResolvedIcon from "components/resolvedicon"; +import List from "components/services/list"; +import { useEffect, useRef } from "react"; +import { MdKeyboardArrowDown } from "react-icons/md"; import { columnMap } from "../../utils/layout/columns"; diff --git a/src/components/services/item.jsx b/src/components/services/item.jsx index 72b0fd50..8e851611 100644 --- a/src/components/services/item.jsx +++ b/src/components/services/item.jsx @@ -1,15 +1,15 @@ import classNames from "classnames"; +import ResolvedIcon from "components/resolvedicon"; import { useContext, useState } from "react"; +import { SettingsContext } from "utils/contexts/settings"; import Docker from "widgets/docker/component"; import Kubernetes from "widgets/kubernetes/component"; -import { SettingsContext } from "utils/contexts/settings"; -import ResolvedIcon from "components/resolvedicon"; -import Status from "./status"; -import Widget from "./widget"; +import KubernetesStatus from "./kubernetes-status"; import Ping from "./ping"; import SiteMonitor from "./site-monitor"; -import KubernetesStatus from "./kubernetes-status"; +import Status from "./status"; +import Widget from "./widget"; export default function Item({ service, groupName, useEqualHeights }) { const hasLink = service.href && service.href !== "#"; diff --git a/src/components/services/kubernetes-status.jsx b/src/components/services/kubernetes-status.jsx index a256a2df..e4ea958d 100644 --- a/src/components/services/kubernetes-status.jsx +++ b/src/components/services/kubernetes-status.jsx @@ -1,5 +1,5 @@ -import useSWR from "swr"; import { t } from "i18next"; +import useSWR from "swr"; export default function KubernetesStatus({ service, style }) { const podSelectorString = service.podSelector !== undefined ? `podSelector=${service.podSelector}` : ""; diff --git a/src/components/services/ping.jsx b/src/components/services/ping.jsx index 670f9d4b..f8665e33 100644 --- a/src/components/services/ping.jsx +++ b/src/components/services/ping.jsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useTranslation } from "next-i18next"; import useSWR from "swr"; export default function Ping({ groupName, serviceName, style }) { diff --git a/src/components/services/site-monitor.jsx b/src/components/services/site-monitor.jsx index 4dceb44c..79496f65 100644 --- a/src/components/services/site-monitor.jsx +++ b/src/components/services/site-monitor.jsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useTranslation } from "next-i18next"; import useSWR from "swr"; export default function SiteMonitor({ groupName, serviceName, style }) { diff --git a/src/components/services/status.jsx b/src/components/services/status.jsx index 3a6f3b33..2688ca0f 100644 --- a/src/components/services/status.jsx +++ b/src/components/services/status.jsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useTranslation } from "next-i18next"; import useSWR from "swr"; export default function Status({ service, style }) { diff --git a/src/components/services/widget.jsx b/src/components/services/widget.jsx index bda638a4..6e3a6360 100644 --- a/src/components/services/widget.jsx +++ b/src/components/services/widget.jsx @@ -1,5 +1,5 @@ -import { useTranslation } from "next-i18next"; import ErrorBoundary from "components/errorboundry"; +import { useTranslation } from "next-i18next"; import components from "widgets/components"; diff --git a/src/components/services/widget/block.jsx b/src/components/services/widget/block.jsx index 8cd74aad..720140cc 100644 --- a/src/components/services/widget/block.jsx +++ b/src/components/services/widget/block.jsx @@ -1,5 +1,5 @@ -import { useTranslation } from "next-i18next"; import classNames from "classnames"; +import { useTranslation } from "next-i18next"; export default function Block({ value, label }) { const { t } = useTranslation(); diff --git a/src/components/services/widget/container.jsx b/src/components/services/widget/container.jsx index 9b10233c..f5957382 100644 --- a/src/components/services/widget/container.jsx +++ b/src/components/services/widget/container.jsx @@ -3,6 +3,11 @@ import { SettingsContext } from "utils/contexts/settings"; import Error from "./error"; +const ALIASED_WIDGETS = { + pialert: "netalertx", + hoarder: "karakeep", +}; + export default function Container({ error = false, children, service }) { const { settings } = useContext(SettingsContext); @@ -32,7 +37,17 @@ export default function Container({ error = false, children, service }) { if (!field.includes(".")) { fullField = `${type}.${field}`; } - return fullField === child?.props?.label; + let matches = fullField === child?.props?.label; + // check if the field is an 'alias' + if (matches) { + return true; + } else if (ALIASED_WIDGETS[type]) { + matches = fullField.replace(type, ALIASED_WIDGETS[type]) === child?.props?.label; + + return matches; + } + // no match + return false; }), ); } diff --git a/src/components/services/widget/error.jsx b/src/components/services/widget/error.jsx index 30c41283..0d4757d3 100644 --- a/src/components/services/widget/error.jsx +++ b/src/components/services/widget/error.jsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useTranslation } from "next-i18next"; import { IoAlertCircle } from "react-icons/io5"; function displayError(error) { diff --git a/src/components/tab.jsx b/src/components/tab.jsx index 2c3984c9..dc183fe4 100644 --- a/src/components/tab.jsx +++ b/src/components/tab.jsx @@ -1,5 +1,5 @@ -import { useContext } from "react"; import classNames from "classnames"; +import { useContext } from "react"; import { TabContext } from "utils/contexts/tab"; function slugify(tabName) { diff --git a/src/components/toggles/color.jsx b/src/components/toggles/color.jsx index 60cc8de8..7ea700ab 100644 --- a/src/components/toggles/color.jsx +++ b/src/components/toggles/color.jsx @@ -1,7 +1,7 @@ -import { useContext, Fragment } from "react"; -import { IoColorPalette } from "react-icons/io5"; import { Popover, Transition } from "@headlessui/react"; import classNames from "classnames"; +import { Fragment, useContext } from "react"; +import { IoColorPalette } from "react-icons/io5"; import { ColorContext } from "utils/contexts/color"; const colors = [ diff --git a/src/components/version.jsx b/src/components/version.jsx index b8ee1eb8..946fb0a9 100644 --- a/src/components/version.jsx +++ b/src/components/version.jsx @@ -1,8 +1,8 @@ +import { compareVersions, validate } from "compare-versions"; import cache from "memory-cache"; import { useTranslation } from "next-i18next"; -import useSWR from "swr"; -import { compareVersions, validate } from "compare-versions"; import { MdNewReleases } from "react-icons/md"; +import useSWR from "swr"; const LATEST_RELEASE_CACHE_KEY = "latestRelease"; diff --git a/src/components/widgets/datetime/datetime.jsx b/src/components/widgets/datetime/datetime.jsx index a7aec5da..b59cf809 100644 --- a/src/components/widgets/datetime/datetime.jsx +++ b/src/components/widgets/datetime/datetime.jsx @@ -1,5 +1,5 @@ -import { useState, useEffect } from "react"; import { useTranslation } from "next-i18next"; +import { useEffect, useState } from "react"; import Container from "../widget/container"; import Raw from "../widget/raw"; diff --git a/src/components/widgets/glances/glances.jsx b/src/components/widgets/glances/glances.jsx index 0803b88c..7f772808 100644 --- a/src/components/widgets/glances/glances.jsx +++ b/src/components/widgets/glances/glances.jsx @@ -1,9 +1,9 @@ -import useSWR from "swr"; +import classNames from "classnames"; +import { useTranslation } from "next-i18next"; import { useContext } from "react"; import { FaMemory, FaRegClock, FaThermometerHalf } from "react-icons/fa"; import { FiCpu, FiHardDrive } from "react-icons/fi"; -import { useTranslation } from "next-i18next"; -import classNames from "classnames"; +import useSWR from "swr"; import { SettingsContext } from "utils/contexts/settings"; import Error from "../widget/error"; diff --git a/src/components/widgets/kubernetes/kubernetes.jsx b/src/components/widgets/kubernetes/kubernetes.jsx index f7b101c7..50b173bc 100644 --- a/src/components/widgets/kubernetes/kubernetes.jsx +++ b/src/components/widgets/kubernetes/kubernetes.jsx @@ -1,8 +1,8 @@ -import useSWR from "swr"; import { useTranslation } from "next-i18next"; +import useSWR from "swr"; -import Error from "../widget/error"; import Container from "../widget/container"; +import Error from "../widget/error"; import Raw from "../widget/raw"; import Node from "./node"; diff --git a/src/components/widgets/kubernetes/node.jsx b/src/components/widgets/kubernetes/node.jsx index ba8f8b77..aebb40f2 100644 --- a/src/components/widgets/kubernetes/node.jsx +++ b/src/components/widgets/kubernetes/node.jsx @@ -1,7 +1,7 @@ +import { useTranslation } from "next-i18next"; import { FaMemory } from "react-icons/fa"; import { FiAlertTriangle, FiCpu, FiServer } from "react-icons/fi"; import { SiKubernetes } from "react-icons/si"; -import { useTranslation } from "next-i18next"; import UsageBar from "../resources/usage-bar"; diff --git a/src/components/widgets/longhorn/longhorn.jsx b/src/components/widgets/longhorn/longhorn.jsx index 22047e2c..db68cd7b 100644 --- a/src/components/widgets/longhorn/longhorn.jsx +++ b/src/components/widgets/longhorn/longhorn.jsx @@ -1,7 +1,7 @@ import useSWR from "swr"; -import Error from "../widget/error"; import Container from "../widget/container"; +import Error from "../widget/error"; import Raw from "../widget/raw"; import Node from "./node"; @@ -32,8 +32,8 @@ export default function Longhorn({ options }) {
{data.nodes .filter((node) => { - if (node.id === "total" && total) { - return true; + if (node.id === "total") { + return total; } if (!nodes) { return false; diff --git a/src/components/widgets/openmeteo/openmeteo.jsx b/src/components/widgets/openmeteo/openmeteo.jsx index 4d3e7e89..a46f53ab 100644 --- a/src/components/widgets/openmeteo/openmeteo.jsx +++ b/src/components/widgets/openmeteo/openmeteo.jsx @@ -1,16 +1,16 @@ -import useSWR from "swr"; -import { useState } from "react"; -import { WiCloudDown } from "react-icons/wi"; -import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; import { useTranslation } from "next-i18next"; +import { useState } from "react"; +import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; +import { WiCloudDown } from "react-icons/wi"; +import useSWR from "swr"; -import Error from "../widget/error"; +import mapIcon from "../../../utils/weather/openmeteo-condition-map"; import Container from "../widget/container"; import ContainerButton from "../widget/container_button"; -import WidgetIcon from "../widget/widget_icon"; +import Error from "../widget/error"; import PrimaryText from "../widget/primary_text"; import SecondaryText from "../widget/secondary_text"; -import mapIcon from "../../../utils/weather/openmeteo-condition-map"; +import WidgetIcon from "../widget/widget_icon"; function Widget({ options }) { const { t } = useTranslation(); diff --git a/src/components/widgets/openweathermap/weather.jsx b/src/components/widgets/openweathermap/weather.jsx index df0280e3..3336ed4f 100644 --- a/src/components/widgets/openweathermap/weather.jsx +++ b/src/components/widgets/openweathermap/weather.jsx @@ -1,16 +1,16 @@ -import useSWR from "swr"; -import { useState } from "react"; -import { WiCloudDown } from "react-icons/wi"; -import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; import { useTranslation } from "next-i18next"; +import { useState } from "react"; +import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; +import { WiCloudDown } from "react-icons/wi"; +import useSWR from "swr"; -import Error from "../widget/error"; +import mapIcon from "../../../utils/weather/owm-condition-map"; import Container from "../widget/container"; import ContainerButton from "../widget/container_button"; +import Error from "../widget/error"; import PrimaryText from "../widget/primary_text"; import SecondaryText from "../widget/secondary_text"; import WidgetIcon from "../widget/widget_icon"; -import mapIcon from "../../../utils/weather/owm-condition-map"; function Widget({ options }) { const { t, i18n } = useTranslation(); diff --git a/src/components/widgets/resources/cpu.jsx b/src/components/widgets/resources/cpu.jsx index 1963637d..1bea4af9 100644 --- a/src/components/widgets/resources/cpu.jsx +++ b/src/components/widgets/resources/cpu.jsx @@ -1,9 +1,9 @@ -import useSWR from "swr"; -import { FiCpu } from "react-icons/fi"; import { useTranslation } from "next-i18next"; +import { FiCpu } from "react-icons/fi"; +import useSWR from "swr"; -import Resource from "../widget/resource"; import Error from "../widget/error"; +import Resource from "../widget/resource"; export default function Cpu({ expanded, refresh = 1500 }) { const { t } = useTranslation(); diff --git a/src/components/widgets/resources/cputemp.jsx b/src/components/widgets/resources/cputemp.jsx index ef994c65..248cd396 100644 --- a/src/components/widgets/resources/cputemp.jsx +++ b/src/components/widgets/resources/cputemp.jsx @@ -1,9 +1,9 @@ -import useSWR from "swr"; -import { FaThermometerHalf } from "react-icons/fa"; import { useTranslation } from "next-i18next"; +import { FaThermometerHalf } from "react-icons/fa"; +import useSWR from "swr"; -import Resource from "../widget/resource"; import Error from "../widget/error"; +import Resource from "../widget/resource"; function convertToFahrenheit(t) { return (t * 9) / 5 + 32; diff --git a/src/components/widgets/resources/disk.jsx b/src/components/widgets/resources/disk.jsx index 15da7780..d5706ba5 100644 --- a/src/components/widgets/resources/disk.jsx +++ b/src/components/widgets/resources/disk.jsx @@ -1,9 +1,9 @@ -import useSWR from "swr"; -import { FiHardDrive } from "react-icons/fi"; import { useTranslation } from "next-i18next"; +import { FiHardDrive } from "react-icons/fi"; +import useSWR from "swr"; -import Resource from "../widget/resource"; import Error from "../widget/error"; +import Resource from "../widget/resource"; export default function Disk({ options, expanded, diskUnits, refresh = 1500 }) { const { t } = useTranslation(); diff --git a/src/components/widgets/resources/memory.jsx b/src/components/widgets/resources/memory.jsx index 155b7ecb..a8c82cbf 100644 --- a/src/components/widgets/resources/memory.jsx +++ b/src/components/widgets/resources/memory.jsx @@ -1,9 +1,9 @@ -import useSWR from "swr"; -import { FaMemory } from "react-icons/fa"; import { useTranslation } from "next-i18next"; +import { FaMemory } from "react-icons/fa"; +import useSWR from "swr"; -import Resource from "../widget/resource"; import Error from "../widget/error"; +import Resource from "../widget/resource"; export default function Memory({ expanded, refresh = 1500 }) { const { t } = useTranslation(); diff --git a/src/components/widgets/resources/network.jsx b/src/components/widgets/resources/network.jsx index a2a3acac..48286030 100644 --- a/src/components/widgets/resources/network.jsx +++ b/src/components/widgets/resources/network.jsx @@ -1,9 +1,9 @@ -import useSWR from "swr"; -import { FaNetworkWired } from "react-icons/fa"; import { useTranslation } from "next-i18next"; +import { FaNetworkWired } from "react-icons/fa"; +import useSWR from "swr"; -import Resource from "../widget/resource"; import Error from "../widget/error"; +import Resource from "../widget/resource"; export default function Network({ options, refresh = 1500 }) { const { t } = useTranslation(); diff --git a/src/components/widgets/resources/resources.jsx b/src/components/widgets/resources/resources.jsx index db26caa7..1002f98c 100644 --- a/src/components/widgets/resources/resources.jsx +++ b/src/components/widgets/resources/resources.jsx @@ -1,12 +1,12 @@ import Container from "../widget/container"; import Raw from "../widget/raw"; -import Disk from "./disk"; import Cpu from "./cpu"; -import Memory from "./memory"; import CpuTemp from "./cputemp"; -import Uptime from "./uptime"; +import Disk from "./disk"; +import Memory from "./memory"; import Network from "./network"; +import Uptime from "./uptime"; export default function Resources({ options }) { const { expanded, units, diskUnits, tempmin, tempmax } = options; diff --git a/src/components/widgets/resources/uptime.jsx b/src/components/widgets/resources/uptime.jsx index 2fac0fcd..f21634c2 100644 --- a/src/components/widgets/resources/uptime.jsx +++ b/src/components/widgets/resources/uptime.jsx @@ -1,9 +1,9 @@ -import useSWR from "swr"; -import { FaRegClock } from "react-icons/fa"; import { useTranslation } from "next-i18next"; +import { FaRegClock } from "react-icons/fa"; +import useSWR from "swr"; -import Resource from "../widget/resource"; import Error from "../widget/error"; +import Resource from "../widget/resource"; export default function Uptime({ refresh = 1500 }) { const { t } = useTranslation(); diff --git a/src/components/widgets/search/search.jsx b/src/components/widgets/search/search.jsx index e0564c48..6699a374 100644 --- a/src/components/widgets/search/search.jsx +++ b/src/components/widgets/search/search.jsx @@ -1,10 +1,10 @@ -import { useState, useEffect, Fragment } from "react"; -import { useTranslation } from "next-i18next"; -import { FiSearch } from "react-icons/fi"; -import { SiDuckduckgo, SiGoogle, SiBaidu, SiBrave } from "react-icons/si"; -import { BiLogoBing } from "react-icons/bi"; -import { Listbox, Transition, Combobox } from "@headlessui/react"; +import { Combobox, Listbox, Transition } from "@headlessui/react"; import classNames from "classnames"; +import { useTranslation } from "next-i18next"; +import { Fragment, useEffect, useState } from "react"; +import { BiLogoBing } from "react-icons/bi"; +import { FiSearch } from "react-icons/fi"; +import { SiBaidu, SiBrave, SiDuckduckgo, SiGoogle } from "react-icons/si"; import ContainerForm from "../widget/container_form"; import Raw from "../widget/raw"; diff --git a/src/components/widgets/stocks/stocks.jsx b/src/components/widgets/stocks/stocks.jsx index 1a9018d3..e6657878 100644 --- a/src/components/widgets/stocks/stocks.jsx +++ b/src/components/widgets/stocks/stocks.jsx @@ -1,13 +1,13 @@ -import useSWR from "swr"; -import { useState } from "react"; import { useTranslation } from "next-i18next"; +import { useState } from "react"; import { FaChartLine } from "react-icons/fa6"; +import useSWR from "swr"; -import Error from "../widget/error"; import Container from "../widget/container"; +import Error from "../widget/error"; import PrimaryText from "../widget/primary_text"; -import WidgetIcon from "../widget/widget_icon"; import Raw from "../widget/raw"; +import WidgetIcon from "../widget/widget_icon"; export default function Widget({ options }) { const { t, i18n } = useTranslation(); diff --git a/src/components/widgets/unifi_console/unifi_console.jsx b/src/components/widgets/unifi_console/unifi_console.jsx index 5295dbb7..09e6952f 100644 --- a/src/components/widgets/unifi_console/unifi_console.jsx +++ b/src/components/widgets/unifi_console/unifi_console.jsx @@ -1,13 +1,13 @@ -import { BiError, BiWifi, BiCheckCircle, BiXCircle, BiNetworkChart } from "react-icons/bi"; -import { MdSettingsEthernet } from "react-icons/md"; import { useTranslation } from "next-i18next"; +import { BiCheckCircle, BiError, BiNetworkChart, BiWifi, BiXCircle } from "react-icons/bi"; +import { MdSettingsEthernet } from "react-icons/md"; import { SiUbiquiti } from "react-icons/si"; -import Error from "../widget/error"; import Container from "../widget/container"; +import Error from "../widget/error"; +import PrimaryText from "../widget/primary_text"; import Raw from "../widget/raw"; import WidgetIcon from "../widget/widget_icon"; -import PrimaryText from "../widget/primary_text"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/components/widgets/weather/weather.jsx b/src/components/widgets/weather/weather.jsx index 4ebb08c5..98768963 100644 --- a/src/components/widgets/weather/weather.jsx +++ b/src/components/widgets/weather/weather.jsx @@ -1,16 +1,16 @@ -import useSWR from "swr"; -import { useState } from "react"; -import { WiCloudDown } from "react-icons/wi"; -import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; import { useTranslation } from "next-i18next"; +import { useState } from "react"; +import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; +import { WiCloudDown } from "react-icons/wi"; +import useSWR from "swr"; -import Error from "../widget/error"; +import mapIcon from "../../../utils/weather/condition-map"; import Container from "../widget/container"; +import ContainerButton from "../widget/container_button"; +import Error from "../widget/error"; import PrimaryText from "../widget/primary_text"; import SecondaryText from "../widget/secondary_text"; import WidgetIcon from "../widget/widget_icon"; -import ContainerButton from "../widget/container_button"; -import mapIcon from "../../../utils/weather/condition-map"; function Widget({ options }) { const { t, i18n } = useTranslation(); diff --git a/src/components/widgets/widget.jsx b/src/components/widgets/widget.jsx index 6cb48fde..ebc706ac 100644 --- a/src/components/widgets/widget.jsx +++ b/src/components/widgets/widget.jsx @@ -1,5 +1,5 @@ -import dynamic from "next/dynamic"; import ErrorBoundary from "components/errorboundry"; +import dynamic from "next/dynamic"; const widgetMappings = { weatherapi: dynamic(() => import("components/widgets/weather/weather")), diff --git a/src/components/widgets/widget/container.jsx b/src/components/widgets/widget/container.jsx index ae06d8ba..fe6397e0 100644 --- a/src/components/widgets/widget/container.jsx +++ b/src/components/widgets/widget/container.jsx @@ -2,10 +2,10 @@ import classNames from "classnames"; import { useContext } from "react"; import { SettingsContext } from "utils/contexts/settings"; -import WidgetIcon from "./widget_icon"; import PrimaryText from "./primary_text"; -import SecondaryText from "./secondary_text"; import Raw from "./raw"; +import SecondaryText from "./secondary_text"; +import WidgetIcon from "./widget_icon"; export function getAllClasses(options, additionalClassNames = "") { if (options?.style?.header === "boxedWidgets") { diff --git a/src/components/widgets/widget/container_button.jsx b/src/components/widgets/widget/container_button.jsx index a6379081..e0802511 100644 --- a/src/components/widgets/widget/container_button.jsx +++ b/src/components/widgets/widget/container_button.jsx @@ -1,4 +1,4 @@ -import { getAllClasses, getInnerBlock, getBottomBlock } from "./container"; +import { getAllClasses, getBottomBlock, getInnerBlock } from "./container"; export default function ContainerButton({ children = [], options, additionalClassNames = "", callback }) { return ( diff --git a/src/components/widgets/widget/container_form.jsx b/src/components/widgets/widget/container_form.jsx index 68cbd64b..a9afef3a 100644 --- a/src/components/widgets/widget/container_form.jsx +++ b/src/components/widgets/widget/container_form.jsx @@ -1,4 +1,4 @@ -import { getAllClasses, getInnerBlock, getBottomBlock } from "./container"; +import { getAllClasses, getBottomBlock, getInnerBlock } from "./container"; export default function ContainerForm({ children = [], options, additionalClassNames = "", callback }) { return ( diff --git a/src/components/widgets/widget/container_link.jsx b/src/components/widgets/widget/container_link.jsx index 6f157875..a36f311c 100644 --- a/src/components/widgets/widget/container_link.jsx +++ b/src/components/widgets/widget/container_link.jsx @@ -1,4 +1,4 @@ -import { getAllClasses, getInnerBlock, getBottomBlock } from "./container"; +import { getAllClasses, getBottomBlock, getInnerBlock } from "./container"; export default function ContainerLink({ children = [], options, additionalClassNames = "", target }) { return ( diff --git a/src/components/widgets/widget/error.jsx b/src/components/widgets/widget/error.jsx index e454256f..e0e8b1e1 100644 --- a/src/components/widgets/widget/error.jsx +++ b/src/components/widgets/widget/error.jsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useTranslation } from "next-i18next"; import { BiError } from "react-icons/bi"; import Container from "./container"; diff --git a/src/components/widgets/widget/resources.jsx b/src/components/widgets/widget/resources.jsx index 2f594942..b9a48a41 100644 --- a/src/components/widgets/widget/resources.jsx +++ b/src/components/widgets/widget/resources.jsx @@ -1,8 +1,8 @@ import classNames from "classnames"; import ContainerLink from "./container_link"; -import Resource from "./resource"; import Raw from "./raw"; +import Resource from "./resource"; import WidgetLabel from "./widget_label"; export default function Resources({ options, children, target, additionalClassNames }) { diff --git a/src/pages/_app.jsx b/src/pages/_app.jsx index c5465a80..8e88f6b2 100644 --- a/src/pages/_app.jsx +++ b/src/pages/_app.jsx @@ -1,14 +1,14 @@ /* eslint-disable react/jsx-props-no-spreading */ -import { SWRConfig } from "swr"; import { appWithTranslation } from "next-i18next"; import Head from "next/head"; import "styles/globals.css"; -import "styles/theme.css"; import "styles/manrope.css"; +import "styles/theme.css"; +import { SWRConfig } from "swr"; import { ColorProvider } from "utils/contexts/color"; -import { ThemeProvider } from "utils/contexts/theme"; import { SettingsProvider } from "utils/contexts/settings"; import { TabProvider } from "utils/contexts/tab"; +import { ThemeProvider } from "utils/contexts/theme"; import nextI18nextConfig from "../../next-i18next.config"; diff --git a/src/pages/_document.jsx b/src/pages/_document.jsx index 31083438..ece38aec 100644 --- a/src/pages/_document.jsx +++ b/src/pages/_document.jsx @@ -1,4 +1,4 @@ -import { Html, Head, Main, NextScript } from "next/document"; +import { Head, Html, Main, NextScript } from "next/document"; export default function Document() { return ( diff --git a/src/pages/api/config/[path].js b/src/pages/api/config/[path].js index 6cb04698..b69ddff5 100644 --- a/src/pages/api/config/[path].js +++ b/src/pages/api/config/[path].js @@ -1,5 +1,5 @@ -import path from "path"; import fs from "fs"; +import path from "path"; import { CONF_DIR } from "utils/config/config"; import createLogger from "utils/logger"; diff --git a/src/pages/api/hash.js b/src/pages/api/hash.js index 992f9ea6..33fb4ef5 100644 --- a/src/pages/api/hash.js +++ b/src/pages/api/hash.js @@ -1,6 +1,6 @@ -import { join } from "path"; import { createHash } from "crypto"; import { readFileSync } from "fs"; +import { join } from "path"; import checkAndCopyConfig, { CONF_DIR } from "utils/config/config"; diff --git a/src/pages/api/kubernetes/stats/[...service].js b/src/pages/api/kubernetes/stats/[...service].js index 3c89dc39..ab454183 100644 --- a/src/pages/api/kubernetes/stats/[...service].js +++ b/src/pages/api/kubernetes/stats/[...service].js @@ -53,9 +53,11 @@ export default async function handler(req, res) { return; } + const podNames = new Set(); let cpuLimit = 0; let memLimit = 0; pods.forEach((pod) => { + podNames.add(pod.metadata.name); pod.spec.containers.forEach((container) => { if (container?.resources?.limits?.cpu) { cpuLimit += parseCpu(container?.resources?.limits?.cpu); @@ -66,42 +68,32 @@ export default async function handler(req, res) { }); }); - const podStatsList = await Promise.all( - pods.map(async (pod) => { - let depMem = 0; - let depCpu = 0; - const podMetrics = await metricsApi - .getPodMetrics(namespace, pod.items) - .then((response) => response.items) - .catch((err) => { - // 404 generally means that the metrics have not been populated yet - if (err.statusCode !== 404) { - logger.error("Error getting pod metrics: %d %s %s", err.statusCode, err.body, err.response); - } - return null; - }); - if (podMetrics) { - podMetrics.forEach((metrics) => { - metrics.containers.forEach((container) => { - depMem += parseMemory(container.usage.memory); - depCpu += parseCpu(container.usage.cpu); - }); - }); + const namespaceMetrics = await metricsApi + .getPodMetrics(namespace) + .then((response) => response.items) + .catch((err) => { + // 404 generally means that the metrics have not been populated yet + if (err.statusCode !== 404) { + logger.error("Error getting pod metrics: %d %s %s", err.statusCode, err.body, err.response); } - return { - mem: depMem, - cpu: depCpu, - }; - }), - ); + return null; + }); + const stats = { mem: 0, cpu: 0, }; - podStatsList.forEach((podStat) => { - stats.mem += podStat.mem; - stats.cpu += podStat.cpu; - }); + + if (namespaceMetrics) { + const podMetrics = namespaceMetrics.filter((item) => podNames.has(item.metadata.name)); + podMetrics.forEach((metrics) => { + metrics.containers.forEach((container) => { + stats.mem += parseMemory(container.usage.memory); + stats.cpu += parseCpu(container.usage.cpu); + }); + }); + } + stats.cpuLimit = cpuLimit; stats.memLimit = memLimit; stats.cpuUsage = cpuLimit ? 100 * (stats.cpu / cpuLimit) : 0; diff --git a/src/pages/api/releases.js b/src/pages/api/releases.js index 372ace9d..01d0e8a5 100644 --- a/src/pages/api/releases.js +++ b/src/pages/api/releases.js @@ -1,5 +1,5 @@ -import { cachedRequest } from "utils/proxy/http"; import createLogger from "utils/logger"; +import { cachedRequest } from "utils/proxy/http"; const logger = createLogger("releases"); diff --git a/src/pages/api/search/searchSuggestion.js b/src/pages/api/search/searchSuggestion.js index 209d1f2c..13f3f301 100644 --- a/src/pages/api/search/searchSuggestion.js +++ b/src/pages/api/search/searchSuggestion.js @@ -1,8 +1,8 @@ import { searchProviders } from "components/widgets/search/search"; import { getSettings } from "utils/config/config"; -import { cachedRequest } from "utils/proxy/http"; import { widgetsFromConfig } from "utils/config/widget-helpers"; +import { cachedRequest } from "utils/proxy/http"; export default async function handler(req, res) { const { query, providerName } = req.query; diff --git a/src/pages/api/services/proxy.js b/src/pages/api/services/proxy.js index 3f8adc88..0cdf806f 100644 --- a/src/pages/api/services/proxy.js +++ b/src/pages/api/services/proxy.js @@ -1,9 +1,9 @@ -import { formatApiCall } from "utils/proxy/api-helpers"; -import createLogger from "utils/logger"; -import genericProxyHandler from "utils/proxy/handlers/generic"; -import widgets from "widgets/widgets"; -import calendarProxyHandler from "widgets/calendar/proxy"; import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import genericProxyHandler from "utils/proxy/handlers/generic"; +import calendarProxyHandler from "widgets/calendar/proxy"; +import widgets from "widgets/widgets"; const logger = createLogger("servicesProxy"); diff --git a/src/pages/api/widgets/glances.js b/src/pages/api/widgets/glances.js index 199c133e..f0a3a7d9 100644 --- a/src/pages/api/widgets/glances.js +++ b/src/pages/api/widgets/glances.js @@ -1,6 +1,6 @@ -import { httpProxy } from "utils/proxy/http"; -import createLogger from "utils/logger"; import { getPrivateWidgetOptions } from "utils/config/widget-helpers"; +import createLogger from "utils/logger"; +import { httpProxy } from "utils/proxy/http"; const logger = createLogger("glances"); diff --git a/src/pages/api/widgets/longhorn.js b/src/pages/api/widgets/longhorn.js index 9126e937..c45086bc 100644 --- a/src/pages/api/widgets/longhorn.js +++ b/src/pages/api/widgets/longhorn.js @@ -1,6 +1,6 @@ -import { httpProxy } from "../../../utils/proxy/http"; -import createLogger from "../../../utils/logger"; import { getSettings } from "../../../utils/config/config"; +import createLogger from "../../../utils/logger"; +import { httpProxy } from "../../../utils/proxy/http"; const logger = createLogger("longhorn"); diff --git a/src/pages/api/widgets/openweathermap.js b/src/pages/api/widgets/openweathermap.js index 3bdc7a82..993ee1f5 100644 --- a/src/pages/api/widgets/openweathermap.js +++ b/src/pages/api/widgets/openweathermap.js @@ -1,6 +1,6 @@ -import { cachedRequest } from "utils/proxy/http"; import { getSettings } from "utils/config/config"; import { getPrivateWidgetOptions } from "utils/config/widget-helpers"; +import { cachedRequest } from "utils/proxy/http"; export default async function handler(req, res) { const { latitude, longitude, units, provider, cache, lang, index } = req.query; diff --git a/src/pages/api/widgets/stocks.js b/src/pages/api/widgets/stocks.js index 4e9f3f55..77881ad7 100644 --- a/src/pages/api/widgets/stocks.js +++ b/src/pages/api/widgets/stocks.js @@ -1,6 +1,6 @@ -import { cachedRequest } from "utils/proxy/http"; import { getSettings } from "utils/config/config"; import createLogger from "utils/logger"; +import { cachedRequest } from "utils/proxy/http"; const logger = createLogger("stocks"); diff --git a/src/pages/api/widgets/weather.js b/src/pages/api/widgets/weather.js index 9e63e48d..78418f74 100644 --- a/src/pages/api/widgets/weather.js +++ b/src/pages/api/widgets/weather.js @@ -1,6 +1,6 @@ -import { cachedRequest } from "utils/proxy/http"; import { getSettings } from "utils/config/config"; import { getPrivateWidgetOptions } from "utils/config/widget-helpers"; +import { cachedRequest } from "utils/proxy/http"; export default async function handler(req, res) { const { latitude, longitude, provider, cache, lang, index } = req.query; diff --git a/src/pages/index.jsx b/src/pages/index.jsx index 11d7180e..95c19dd3 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -1,33 +1,33 @@ /* eslint-disable react/no-array-index-key */ -import useSWR, { unstable_serialize as unstableSerialize, SWRConfig } from "swr"; -import Head from "next/head"; -import Script from "next/script"; -import dynamic from "next/dynamic"; import classNames from "classnames"; -import { useTranslation } from "next-i18next"; -import { useEffect, useContext, useState, useMemo } from "react"; -import { BiError } from "react-icons/bi"; -import { serverSideTranslations } from "next-i18next/serverSideTranslations"; -import { useRouter } from "next/router"; -import Tab, { slugifyAndEncode } from "components/tab"; -import ServicesGroup from "components/services/group"; import BookmarksGroup from "components/bookmarks/group"; -import Widget from "components/widgets/widget"; -import Revalidate from "components/toggles/revalidate"; -import { ColorContext } from "utils/contexts/color"; -import { ThemeContext } from "utils/contexts/theme"; -import { SettingsContext } from "utils/contexts/settings"; -import { TabContext } from "utils/contexts/tab"; import ErrorBoundary from "components/errorboundry"; import QuickLaunch from "components/quicklaunch"; +import ServicesGroup from "components/services/group"; +import Tab, { slugifyAndEncode } from "components/tab"; +import Revalidate from "components/toggles/revalidate"; +import Widget from "components/widgets/widget"; +import { useTranslation } from "next-i18next"; +import { serverSideTranslations } from "next-i18next/serverSideTranslations"; +import dynamic from "next/dynamic"; +import Head from "next/head"; +import { useRouter } from "next/router"; +import Script from "next/script"; +import { useContext, useEffect, useMemo, useState } from "react"; +import { BiError } from "react-icons/bi"; +import useSWR, { SWRConfig, unstable_serialize as unstableSerialize } from "swr"; +import { ColorContext } from "utils/contexts/color"; +import { SettingsContext } from "utils/contexts/settings"; +import { TabContext } from "utils/contexts/tab"; +import { ThemeContext } from "utils/contexts/theme"; import { fetchWithIdentity, readIdentitySettings } from "utils/identity/identity-helpers"; import NullIdentityProvider from "utils/identity/null"; import { bookmarksResponse, servicesResponse, widgetsResponse } from "utils/config/api-response"; -import themes from "utils/styles/themes"; import { getSettings } from "utils/config/config"; import useWindowFocus from "utils/hooks/window-focus"; import createLogger from "utils/logger"; +import themes from "utils/styles/themes"; const ThemeToggle = dynamic(() => import("components/toggles/theme"), { ssr: false, diff --git a/src/utils/config/api-response.js b/src/utils/config/api-response.js index 480eca04..4ceb525f 100644 --- a/src/utils/config/api-response.js +++ b/src/utils/config/api-response.js @@ -4,13 +4,13 @@ import path from "path"; import yaml from "js-yaml"; -import checkAndCopyConfig, { getSettings, substituteEnvironmentVars, CONF_DIR } from "utils/config/config"; +import checkAndCopyConfig, { CONF_DIR, getSettings, substituteEnvironmentVars } from "utils/config/config"; import { + cleanServiceGroups, + findGroupByName, servicesFromConfig, servicesFromDocker, - cleanServiceGroups, servicesFromKubernetes, - findGroupByName, } from "utils/config/service-helpers"; import { cleanWidgetGroups, widgetsFromConfig } from "utils/config/widget-helpers"; import { filterAllowedBookmarks, filterAllowedServices, filterAllowedWidgets } from "utils/identity/identity-helpers"; diff --git a/src/utils/config/config.js b/src/utils/config/config.js index 18dedf62..3f688842 100644 --- a/src/utils/config/config.js +++ b/src/utils/config/config.js @@ -1,9 +1,9 @@ /* eslint-disable no-console */ -import { join } from "path"; import { copyFileSync, existsSync, mkdirSync, readFileSync } from "fs"; +import { join } from "path"; -import cache from "memory-cache"; import yaml from "js-yaml"; +import cache from "memory-cache"; const cacheKey = "homepageEnvironmentVariables"; const homepageVarPrefix = "HOMEPAGE_VAR_"; diff --git a/src/utils/config/docker.js b/src/utils/config/docker.js index 6ea728e9..ed1d3347 100644 --- a/src/utils/config/docker.js +++ b/src/utils/config/docker.js @@ -1,5 +1,5 @@ -import path from "path"; import { readFileSync } from "fs"; +import path from "path"; import yaml from "js-yaml"; diff --git a/src/utils/config/kubernetes.js b/src/utils/config/kubernetes.js index 6d2fc17b..680c408e 100644 --- a/src/utils/config/kubernetes.js +++ b/src/utils/config/kubernetes.js @@ -1,8 +1,8 @@ -import path from "path"; import { readFileSync } from "fs"; +import path from "path"; +import { ApiextensionsV1Api, KubeConfig } from "@kubernetes/client-node"; import yaml from "js-yaml"; -import { KubeConfig, ApiextensionsV1Api } from "@kubernetes/client-node"; import checkAndCopyConfig, { CONF_DIR, substituteEnvironmentVars } from "utils/config/config"; diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index 38e7a2bf..297e55a7 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -1,15 +1,15 @@ import { promises as fs } from "fs"; import path from "path"; -import yaml from "js-yaml"; import Docker from "dockerode"; +import yaml from "js-yaml"; -import createLogger from "utils/logger"; import checkAndCopyConfig, { CONF_DIR, getSettings, substituteEnvironmentVars } from "utils/config/config"; import getDockerArguments from "utils/config/docker"; -import kubernetes from "utils/kubernetes/export"; import { getKubeConfig } from "utils/config/kubernetes"; import * as shvl from "utils/config/shvl"; +import kubernetes from "utils/kubernetes/export"; +import createLogger from "utils/logger"; const logger = createLogger("service-helpers"); @@ -362,6 +362,9 @@ export function cleanServiceGroups(groups) { // proxmox node, + // proxmoxbackupserver + datastore, + // speedtest bitratePrecision, @@ -437,6 +440,9 @@ export function cleanServiceGroups(groups) { if (type === "proxmox") { if (node) widget.node = node; } + if (type === "proxmoxbackupserver") { + if (datastore) widget.datastore = datastore; + } if (type === "kubernetes") { if (namespace) widget.namespace = namespace; if (app) widget.app = app; diff --git a/src/utils/contexts/color.jsx b/src/utils/contexts/color.jsx index d7d985f0..bc16d605 100644 --- a/src/utils/contexts/color.jsx +++ b/src/utils/contexts/color.jsx @@ -1,4 +1,4 @@ -import { createContext, useState, useEffect, useMemo } from "react"; +import { createContext, useEffect, useMemo, useState } from "react"; let lastColor = false; diff --git a/src/utils/contexts/settings.jsx b/src/utils/contexts/settings.jsx index d6993b14..76451953 100644 --- a/src/utils/contexts/settings.jsx +++ b/src/utils/contexts/settings.jsx @@ -1,4 +1,4 @@ -import { createContext, useState, useMemo } from "react"; +import { createContext, useMemo, useState } from "react"; export const SettingsContext = createContext(); diff --git a/src/utils/contexts/tab.jsx b/src/utils/contexts/tab.jsx index 8cd5d520..2a3d3457 100644 --- a/src/utils/contexts/tab.jsx +++ b/src/utils/contexts/tab.jsx @@ -1,4 +1,4 @@ -import { createContext, useState, useMemo } from "react"; +import { createContext, useMemo, useState } from "react"; export const TabContext = createContext(); diff --git a/src/utils/contexts/theme.jsx b/src/utils/contexts/theme.jsx index 85d613fc..385eeaa2 100644 --- a/src/utils/contexts/theme.jsx +++ b/src/utils/contexts/theme.jsx @@ -1,4 +1,4 @@ -import { createContext, useState, useEffect, useMemo } from "react"; +import { createContext, useEffect, useMemo, useState } from "react"; const getInitialTheme = () => { if (typeof window !== "undefined" && window.localStorage) { diff --git a/src/utils/hooks/window-focus.js b/src/utils/hooks/window-focus.js index 3ad57ad0..a221e48e 100644 --- a/src/utils/hooks/window-focus.js +++ b/src/utils/hooks/window-focus.js @@ -1,4 +1,4 @@ -import { useState, useEffect } from "react"; +import { useEffect, useState } from "react"; const hasFocus = () => typeof document !== "undefined" && document.hasFocus(); diff --git a/src/utils/kubernetes/export.js b/src/utils/kubernetes/export.js index ba41593e..ae53aaca 100644 --- a/src/utils/kubernetes/export.js +++ b/src/utils/kubernetes/export.js @@ -1,7 +1,7 @@ -import listIngress from "utils/kubernetes/ingress-list"; -import listTraefikIngress from "utils/kubernetes/traefik-list"; import listHttpRoute from "utils/kubernetes/httproute-list"; -import { isDiscoverable, constructedServiceFromResource } from "utils/kubernetes/resource-helpers"; +import listIngress from "utils/kubernetes/ingress-list"; +import { constructedServiceFromResource, isDiscoverable } from "utils/kubernetes/resource-helpers"; +import listTraefikIngress from "utils/kubernetes/traefik-list"; const kubernetes = { listIngress, diff --git a/src/utils/kubernetes/ingress-list.js b/src/utils/kubernetes/ingress-list.js index 49b5d667..1cd9ca95 100644 --- a/src/utils/kubernetes/ingress-list.js +++ b/src/utils/kubernetes/ingress-list.js @@ -1,6 +1,6 @@ import { NetworkingV1Api } from "@kubernetes/client-node"; -import { getKubernetes, getKubeConfig } from "utils/config/kubernetes"; +import { getKubeConfig, getKubernetes } from "utils/config/kubernetes"; import createLogger from "utils/logger"; const logger = createLogger("ingress-list"); diff --git a/src/utils/kubernetes/resource-helpers.js b/src/utils/kubernetes/resource-helpers.js index df03bc83..c7d69751 100644 --- a/src/utils/kubernetes/resource-helpers.js +++ b/src/utils/kubernetes/resource-helpers.js @@ -1,15 +1,15 @@ import { CustomObjectsApi } from "@kubernetes/client-node"; +import { substituteEnvironmentVars } from "utils/config/config"; import { - getKubeConfig, ANNOTATION_BASE, ANNOTATION_WIDGET_BASE, + getKubeConfig, HTTPROUTE_API_GROUP, HTTPROUTE_API_VERSION, } from "utils/config/kubernetes"; -import { substituteEnvironmentVars } from "utils/config/config"; -import createLogger from "utils/logger"; import * as shvl from "utils/config/shvl"; +import createLogger from "utils/logger"; const logger = createLogger("resource-helpers"); const kc = getKubeConfig(); diff --git a/src/utils/kubernetes/traefik-list.js b/src/utils/kubernetes/traefik-list.js index 0368629a..f6e07241 100644 --- a/src/utils/kubernetes/traefik-list.js +++ b/src/utils/kubernetes/traefik-list.js @@ -1,6 +1,6 @@ import { CustomObjectsApi } from "@kubernetes/client-node"; -import { getKubernetes, getKubeConfig, checkCRD, ANNOTATION_BASE } from "utils/config/kubernetes"; +import { ANNOTATION_BASE, checkCRD, getKubeConfig, getKubernetes } from "utils/config/kubernetes"; import createLogger from "utils/logger"; const logger = createLogger("traefik-list"); diff --git a/src/utils/proxy/handlers/credentialed.js b/src/utils/proxy/handlers/credentialed.js index 056e919f..017d44c9 100644 --- a/src/utils/proxy/handlers/credentialed.js +++ b/src/utils/proxy/handlers/credentialed.js @@ -1,9 +1,9 @@ -import getServiceWidget from "utils/config/service-helpers"; -import { formatApiCall, sanitizeErrorURL } from "utils/proxy/api-helpers"; -import validateWidgetData from "utils/proxy/validate-widget-data"; -import { httpProxy } from "utils/proxy/http"; -import createLogger from "utils/logger"; import { getSettings } from "utils/config/config"; +import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; +import { formatApiCall, sanitizeErrorURL } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; +import validateWidgetData from "utils/proxy/validate-widget-data"; import widgets from "widgets/widgets"; const logger = createLogger("credentialedProxyHandler"); @@ -42,6 +42,7 @@ export default async function credentialedProxyHandler(req, res, map) { "ghostfolio", "headscale", "hoarder", + "karakeep", "linkwarden", "mealie", "netalertx", diff --git a/src/utils/proxy/handlers/generic.js b/src/utils/proxy/handlers/generic.js index 4a71f704..1914114c 100644 --- a/src/utils/proxy/handlers/generic.js +++ b/src/utils/proxy/handlers/generic.js @@ -1,8 +1,8 @@ import getServiceWidget from "utils/config/service-helpers"; -import { formatApiCall, sanitizeErrorURL } from "utils/proxy/api-helpers"; -import validateWidgetData from "utils/proxy/validate-widget-data"; -import { httpProxy } from "utils/proxy/http"; import createLogger from "utils/logger"; +import { formatApiCall, sanitizeErrorURL } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; +import validateWidgetData from "utils/proxy/validate-widget-data"; import widgets from "widgets/widgets"; const logger = createLogger("genericProxyHandler"); diff --git a/src/utils/proxy/handlers/jsonrpc.js b/src/utils/proxy/handlers/jsonrpc.js index f9fb1883..bdb10e02 100644 --- a/src/utils/proxy/handlers/jsonrpc.js +++ b/src/utils/proxy/handlers/jsonrpc.js @@ -1,9 +1,9 @@ import { JSONRPCClient, JSONRPCErrorException } from "json-rpc-2.0"; -import { formatApiCall } from "utils/proxy/api-helpers"; -import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const logger = createLogger("jsonrpcProxyHandler"); diff --git a/src/utils/proxy/handlers/synology.js b/src/utils/proxy/handlers/synology.js index 030e53ba..6fe98dce 100644 --- a/src/utils/proxy/handlers/synology.js +++ b/src/utils/proxy/handlers/synology.js @@ -1,9 +1,9 @@ import cache from "memory-cache"; import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; import { asJson, formatApiCall } from "utils/proxy/api-helpers"; import { httpProxy } from "utils/proxy/http"; -import createLogger from "utils/logger"; import widgets from "widgets/widgets"; const INFO_ENDPOINT = "{url}/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query"; diff --git a/src/utils/proxy/http.js b/src/utils/proxy/http.js index f8d2dcce..1a22a7f7 100644 --- a/src/utils/proxy/http.js +++ b/src/utils/proxy/http.js @@ -5,8 +5,8 @@ import { createUnzip, constants as zlibConstants } from "node:zlib"; import { http, https } from "follow-redirects"; import cache from "memory-cache"; -import { addCookieToJar, setCookieHeader } from "./cookie-jar"; import { sanitizeErrorURL } from "./api-helpers"; +import { addCookieToJar, setCookieHeader } from "./cookie-jar"; import createLogger from "utils/logger"; diff --git a/src/utils/proxy/validate-widget-data.js b/src/utils/proxy/validate-widget-data.js index 8f865fe2..de2a3c4e 100644 --- a/src/utils/proxy/validate-widget-data.js +++ b/src/utils/proxy/validate-widget-data.js @@ -1,6 +1,6 @@ /* eslint-disable no-console */ -import widgets from "widgets/widgets"; import createLogger from "utils/logger"; +import widgets from "widgets/widgets"; const logger = createLogger("validateWidgetData"); diff --git a/src/widgets/adguard/component.jsx b/src/widgets/adguard/component.jsx index 6cb9175a..e5a7670a 100644 --- a/src/widgets/adguard/component.jsx +++ b/src/widgets/adguard/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/apcups/component.jsx b/src/widgets/apcups/component.jsx index c1c26b5c..85e621db 100644 --- a/src/widgets/apcups/component.jsx +++ b/src/widgets/apcups/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/apcups/proxy.js b/src/widgets/apcups/proxy.js index 8e1d7ffc..bf22730e 100644 --- a/src/widgets/apcups/proxy.js +++ b/src/widgets/apcups/proxy.js @@ -1,5 +1,5 @@ -import net from "node:net"; import { Buffer } from "node:buffer"; +import net from "node:net"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; diff --git a/src/widgets/argocd/component.jsx b/src/widgets/argocd/component.jsx index d4283acf..f61bed43 100644 --- a/src/widgets/argocd/component.jsx +++ b/src/widgets/argocd/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/atsumeru/component.jsx b/src/widgets/atsumeru/component.jsx index 2b87ac34..01cc8e46 100644 --- a/src/widgets/atsumeru/component.jsx +++ b/src/widgets/atsumeru/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/audiobookshelf/component.jsx b/src/widgets/audiobookshelf/component.jsx index 0444b6b4..b410e1a7 100755 --- a/src/widgets/audiobookshelf/component.jsx +++ b/src/widgets/audiobookshelf/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/audiobookshelf/proxy.js b/src/widgets/audiobookshelf/proxy.js index 1a89736b..afff3ba9 100644 --- a/src/widgets/audiobookshelf/proxy.js +++ b/src/widgets/audiobookshelf/proxy.js @@ -1,7 +1,7 @@ -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "audiobookshelfProxyHandler"; diff --git a/src/widgets/authentik/component.jsx b/src/widgets/authentik/component.jsx index d4446551..edf5ece1 100644 --- a/src/widgets/authentik/component.jsx +++ b/src/widgets/authentik/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/autobrr/component.jsx b/src/widgets/autobrr/component.jsx index a73a7d17..5454cd3c 100644 --- a/src/widgets/autobrr/component.jsx +++ b/src/widgets/autobrr/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/azuredevops/component.jsx b/src/widgets/azuredevops/component.jsx index bfe9797f..7a36aab2 100644 --- a/src/widgets/azuredevops/component.jsx +++ b/src/widgets/azuredevops/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/bazarr/component.jsx b/src/widgets/bazarr/component.jsx index 120774fb..f79ec206 100644 --- a/src/widgets/bazarr/component.jsx +++ b/src/widgets/bazarr/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/bazarr/widget.js b/src/widgets/bazarr/widget.js index 5b89b2b4..c54e38ad 100644 --- a/src/widgets/bazarr/widget.js +++ b/src/widgets/bazarr/widget.js @@ -1,5 +1,5 @@ -import genericProxyHandler from "utils/proxy/handlers/generic"; import { asJson } from "utils/proxy/api-helpers"; +import genericProxyHandler from "utils/proxy/handlers/generic"; const widget = { api: "{url}/api/{endpoint}/wanted?apikey={key}", diff --git a/src/widgets/beszel/component.jsx b/src/widgets/beszel/component.jsx index a191c31f..e80a9fab 100644 --- a/src/widgets/beszel/component.jsx +++ b/src/widgets/beszel/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/beszel/proxy.js b/src/widgets/beszel/proxy.js index 078e22c3..96dfc913 100644 --- a/src/widgets/beszel/proxy.js +++ b/src/widgets/beszel/proxy.js @@ -1,10 +1,10 @@ import cache from "memory-cache"; import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; import { formatApiCall } from "utils/proxy/api-helpers"; import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; -import createLogger from "utils/logger"; const proxyName = "beszelProxyHandler"; const tokenCacheKey = `${proxyName}__token`; diff --git a/src/widgets/caddy/component.jsx b/src/widgets/caddy/component.jsx index 60e71e9e..1613760d 100644 --- a/src/widgets/caddy/component.jsx +++ b/src/widgets/caddy/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/calendar/agenda.jsx b/src/widgets/calendar/agenda.jsx index 6a3be031..cb00c1d2 100644 --- a/src/widgets/calendar/agenda.jsx +++ b/src/widgets/calendar/agenda.jsx @@ -1,5 +1,5 @@ -import { DateTime } from "luxon"; import classNames from "classnames"; +import { DateTime } from "luxon"; import { useTranslation } from "next-i18next"; import Event, { compareDateTimezone } from "./event"; diff --git a/src/widgets/calendar/component.jsx b/src/widgets/calendar/component.jsx index 56858fad..0647d4ad 100644 --- a/src/widgets/calendar/component.jsx +++ b/src/widgets/calendar/component.jsx @@ -1,12 +1,12 @@ -import { useEffect, useMemo, useState, useContext } from "react"; -import dynamic from "next/dynamic"; +import Container from "components/services/widget/container"; import { DateTime } from "luxon"; import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; +import dynamic from "next/dynamic"; +import { useContext, useEffect, useMemo, useState } from "react"; import { SettingsContext } from "utils/contexts/settings"; -import Monthly from "./monthly"; import Agenda from "./agenda"; +import Monthly from "./monthly"; const colorVariants = { // https://tailwindcss.com/docs/content-configuration#dynamic-class-names diff --git a/src/widgets/calendar/event.jsx b/src/widgets/calendar/event.jsx index 754c6ee9..6ea2e1ae 100644 --- a/src/widgets/calendar/event.jsx +++ b/src/widgets/calendar/event.jsx @@ -1,7 +1,7 @@ -import { useState } from "react"; -import { useTranslation } from "next-i18next"; -import { DateTime } from "luxon"; import classNames from "classnames"; +import { DateTime } from "luxon"; +import { useTranslation } from "next-i18next"; +import { useState } from "react"; import { IoMdCheckmarkCircleOutline } from "react-icons/io"; export default function Event({ event, colorVariants, showDate = false, showTime = false, showDateColumn = true }) { diff --git a/src/widgets/calendar/integrations/ical.jsx b/src/widgets/calendar/integrations/ical.jsx index 77729982..46217977 100644 --- a/src/widgets/calendar/integrations/ical.jsx +++ b/src/widgets/calendar/integrations/ical.jsx @@ -1,11 +1,11 @@ -import { DateTime } from "luxon"; import { parseString } from "cal-parser"; -import { useEffect } from "react"; +import { DateTime } from "luxon"; import { useTranslation } from "next-i18next"; +import { useEffect } from "react"; import { RRule } from "rrule"; -import useWidgetAPI from "../../../utils/proxy/use-widget-api"; import Error from "../../../components/services/widget/error"; +import useWidgetAPI from "../../../utils/proxy/use-widget-api"; // https://gist.github.com/jlevy/c246006675becc446360a798e2b2d781 function simpleHash(str) { diff --git a/src/widgets/calendar/integrations/lidarr.jsx b/src/widgets/calendar/integrations/lidarr.jsx index d4a6edbe..65ad1da2 100644 --- a/src/widgets/calendar/integrations/lidarr.jsx +++ b/src/widgets/calendar/integrations/lidarr.jsx @@ -1,8 +1,8 @@ import { DateTime } from "luxon"; import { useEffect } from "react"; -import useWidgetAPI from "../../../utils/proxy/use-widget-api"; import Error from "../../../components/services/widget/error"; +import useWidgetAPI from "../../../utils/proxy/use-widget-api"; export default function Integration({ config, params, setEvents, hideErrors = false }) { const { data: lidarrData, error: lidarrError } = useWidgetAPI(config, "calendar", { diff --git a/src/widgets/calendar/integrations/radarr.jsx b/src/widgets/calendar/integrations/radarr.jsx index 945eadd9..9c8880a9 100644 --- a/src/widgets/calendar/integrations/radarr.jsx +++ b/src/widgets/calendar/integrations/radarr.jsx @@ -1,9 +1,9 @@ import { DateTime } from "luxon"; -import { useEffect } from "react"; import { useTranslation } from "next-i18next"; +import { useEffect } from "react"; -import useWidgetAPI from "../../../utils/proxy/use-widget-api"; import Error from "../../../components/services/widget/error"; +import useWidgetAPI from "../../../utils/proxy/use-widget-api"; export default function Integration({ config, params, setEvents, hideErrors = false }) { const { t } = useTranslation(); diff --git a/src/widgets/calendar/integrations/readarr.jsx b/src/widgets/calendar/integrations/readarr.jsx index 6ae919ef..4fe3872e 100644 --- a/src/widgets/calendar/integrations/readarr.jsx +++ b/src/widgets/calendar/integrations/readarr.jsx @@ -1,8 +1,8 @@ import { DateTime } from "luxon"; import { useEffect } from "react"; -import useWidgetAPI from "../../../utils/proxy/use-widget-api"; import Error from "../../../components/services/widget/error"; +import useWidgetAPI from "../../../utils/proxy/use-widget-api"; export default function Integration({ config, params, setEvents, hideErrors = false }) { const { data: readarrData, error: readarrError } = useWidgetAPI(config, "calendar", { diff --git a/src/widgets/calendar/integrations/sonarr.jsx b/src/widgets/calendar/integrations/sonarr.jsx index 34cc679d..abdec328 100644 --- a/src/widgets/calendar/integrations/sonarr.jsx +++ b/src/widgets/calendar/integrations/sonarr.jsx @@ -1,8 +1,8 @@ import { DateTime } from "luxon"; import { useEffect } from "react"; -import useWidgetAPI from "../../../utils/proxy/use-widget-api"; import Error from "../../../components/services/widget/error"; +import useWidgetAPI from "../../../utils/proxy/use-widget-api"; export default function Integration({ config, params, setEvents, hideErrors = false }) { const { data: sonarrData, error: sonarrError } = useWidgetAPI(config, "calendar", { diff --git a/src/widgets/calendar/monthly.jsx b/src/widgets/calendar/monthly.jsx index 7313232f..4e870261 100644 --- a/src/widgets/calendar/monthly.jsx +++ b/src/widgets/calendar/monthly.jsx @@ -1,7 +1,7 @@ -import { useMemo } from "react"; -import { DateTime, Info } from "luxon"; import classNames from "classnames"; +import { DateTime, Info } from "luxon"; import { useTranslation } from "next-i18next"; +import { useMemo } from "react"; import Event, { compareDateTimezone } from "./event"; diff --git a/src/widgets/calendar/proxy.js b/src/widgets/calendar/proxy.js index d36f30c9..c98441ee 100644 --- a/src/widgets/calendar/proxy.js +++ b/src/widgets/calendar/proxy.js @@ -1,6 +1,6 @@ import getServiceWidget from "utils/config/service-helpers"; -import { httpProxy } from "utils/proxy/http"; import createLogger from "utils/logger"; +import { httpProxy } from "utils/proxy/http"; const logger = createLogger("calendarProxyHandler"); diff --git a/src/widgets/calibreweb/component.jsx b/src/widgets/calibreweb/component.jsx index c334d7d2..be8424e5 100644 --- a/src/widgets/calibreweb/component.jsx +++ b/src/widgets/calibreweb/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/changedetectionio/component.jsx b/src/widgets/changedetectionio/component.jsx index a08f38d9..d7d7272b 100644 --- a/src/widgets/changedetectionio/component.jsx +++ b/src/widgets/changedetectionio/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/channelsdvrserver/component.jsx b/src/widgets/channelsdvrserver/component.jsx index 42202c05..79ca3f14 100644 --- a/src/widgets/channelsdvrserver/component.jsx +++ b/src/widgets/channelsdvrserver/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/cloudflared/component.jsx b/src/widgets/cloudflared/component.jsx index 8825402c..790a5f34 100644 --- a/src/widgets/cloudflared/component.jsx +++ b/src/widgets/cloudflared/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/coinmarketcap/component.jsx b/src/widgets/coinmarketcap/component.jsx index 35a3401f..fd9c030f 100644 --- a/src/widgets/coinmarketcap/component.jsx +++ b/src/widgets/coinmarketcap/component.jsx @@ -1,9 +1,9 @@ -import { useState } from "react"; -import { useTranslation } from "next-i18next"; import classNames from "classnames"; -import Container from "components/services/widget/container"; -import Block from "components/services/widget/block"; import Dropdown from "components/services/dropdown"; +import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; +import { useState } from "react"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/components.js b/src/widgets/components.js index 148a626b..880c8222 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -47,7 +47,8 @@ const components = { grafana: dynamic(() => import("./grafana/component")), hdhomerun: dynamic(() => import("./hdhomerun/component")), headscale: dynamic(() => import("./headscale/component")), - hoarder: dynamic(() => import("./hoarder/component")), + hoarder: dynamic(() => import("./karakeep/component")), + karakeep: dynamic(() => import("./karakeep/component")), peanut: dynamic(() => import("./peanut/component")), homeassistant: dynamic(() => import("./homeassistant/component")), homebox: dynamic(() => import("./homebox/component")), diff --git a/src/widgets/crowdsec/component.jsx b/src/widgets/crowdsec/component.jsx index 5bc34d1a..f567ad70 100644 --- a/src/widgets/crowdsec/component.jsx +++ b/src/widgets/crowdsec/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/crowdsec/proxy.js b/src/widgets/crowdsec/proxy.js index 85803845..d3257fa6 100644 --- a/src/widgets/crowdsec/proxy.js +++ b/src/widgets/crowdsec/proxy.js @@ -1,9 +1,9 @@ import cache from "memory-cache"; -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "crowdsecProxyHandler"; diff --git a/src/widgets/customapi/component.jsx b/src/widgets/customapi/component.jsx index b8147caa..f537e8da 100644 --- a/src/widgets/customapi/component.jsx +++ b/src/widgets/customapi/component.jsx @@ -1,10 +1,10 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; -import Block from "components/services/widget/block"; import classNames from "classnames"; +import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; -import useWidgetAPI from "utils/proxy/use-widget-api"; import * as shvl from "utils/config/shvl"; +import useWidgetAPI from "utils/proxy/use-widget-api"; function getValue(field, data) { let value = data; @@ -18,7 +18,7 @@ function getValue(field, data) { // shvl is easier, everything else is kept for backwards compatibility. if (typeof field === "string") { - return shvl.get(data, field, null); + return shvl.get(data, field, null) ?? data[field] ?? null; } while (typeof lastField === "object") { @@ -243,9 +243,17 @@ export default function Component({ service }) {
) : ( listItems.map((item, index) => { - const itemName = shvl.get(item, name, ""); - const itemLabel = shvl.get(item, label, ""); - const itemUrl = target ? target.replace(/\{([^}]+)\}/g, (_, key) => item[key] || "") : null; + const itemName = shvl.get(item, name, item[name]) ?? ""; + const itemLabel = shvl.get(item, label, item[label]) ?? ""; + + const itemUrl = target + ? [...target.matchAll(/\{(.*?)\}/g)] + .map((match) => match[1]) + .reduce((url, targetTemplate) => { + const value = shvl.get(item, targetTemplate, item[targetTemplate]) ?? ""; + return url.replaceAll(`{${targetTemplate}}`, value); + }, target) + : null; const className = "bg-theme-200/50 dark:bg-theme-900/20 rounded-sm m-1 flex-1 flex flex-row items-center justify-between p-1 text-xs"; @@ -259,14 +267,14 @@ export default function Component({ service }) { >
{itemName}
-
{itemLabel}
+
{formatValue(t, mappings, itemLabel)}
) : (
{itemName}
-
{itemLabel}
+
{formatValue(t, mappings, itemLabel)}
); diff --git a/src/widgets/deluge/component.jsx b/src/widgets/deluge/component.jsx index 510340b7..eb6ddfaa 100644 --- a/src/widgets/deluge/component.jsx +++ b/src/widgets/deluge/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import QueueEntry from "../../components/widgets/queue/queueEntry"; diff --git a/src/widgets/deluge/proxy.js b/src/widgets/deluge/proxy.js index 0430a6ac..ef255160 100644 --- a/src/widgets/deluge/proxy.js +++ b/src/widgets/deluge/proxy.js @@ -1,7 +1,7 @@ -import { formatApiCall } from "utils/proxy/api-helpers"; -import { sendJsonRpcRequest } from "utils/proxy/handlers/jsonrpc"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { sendJsonRpcRequest } from "utils/proxy/handlers/jsonrpc"; import widgets from "widgets/widgets"; const logger = createLogger("delugeProxyHandler"); diff --git a/src/widgets/develancacheui/component.jsx b/src/widgets/develancacheui/component.jsx index 4fc184ef..61f608e1 100644 --- a/src/widgets/develancacheui/component.jsx +++ b/src/widgets/develancacheui/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/diskstation/component.jsx b/src/widgets/diskstation/component.jsx index 9c516af9..0ca0b8ae 100644 --- a/src/widgets/diskstation/component.jsx +++ b/src/widgets/diskstation/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/docker/component.jsx b/src/widgets/docker/component.jsx index 074ce1eb..6e05454f 100644 --- a/src/widgets/docker/component.jsx +++ b/src/widgets/docker/component.jsx @@ -1,9 +1,9 @@ -import useSWR from "swr"; -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; +import useSWR from "swr"; -import { calculateCPUPercent, calculateUsedMemory, calculateThroughput } from "./stats-helpers"; +import { calculateCPUPercent, calculateThroughput, calculateUsedMemory } from "./stats-helpers"; export default function Component({ service }) { const { t } = useTranslation(); diff --git a/src/widgets/downloadstation/component.jsx b/src/widgets/downloadstation/component.jsx index 0d9d8085..016f4953 100644 --- a/src/widgets/downloadstation/component.jsx +++ b/src/widgets/downloadstation/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/emby/component.jsx b/src/widgets/emby/component.jsx index 41220e22..88858da2 100644 --- a/src/widgets/emby/component.jsx +++ b/src/widgets/emby/component.jsx @@ -1,8 +1,8 @@ -import { useTranslation } from "next-i18next"; -import { BsVolumeMuteFill, BsFillPlayFill, BsPauseFill, BsCpu, BsFillCpuFill } from "react-icons/bs"; -import { MdOutlineSmartDisplay } from "react-icons/md"; import Block from "components/services/widget/block"; import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; +import { BsCpu, BsFillCpuFill, BsFillPlayFill, BsPauseFill, BsVolumeMuteFill } from "react-icons/bs"; +import { MdOutlineSmartDisplay } from "react-icons/md"; import { getURLSearchParams } from "utils/proxy/api-helpers"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/esphome/component.jsx b/src/widgets/esphome/component.jsx index 6ed1b7b1..e0f02089 100644 --- a/src/widgets/esphome/component.jsx +++ b/src/widgets/esphome/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; import Block from "components/services/widget/block"; import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/evcc/component.jsx b/src/widgets/evcc/component.jsx index 2f086902..d0debdc3 100644 --- a/src/widgets/evcc/component.jsx +++ b/src/widgets/evcc/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/fileflows/component.jsx b/src/widgets/fileflows/component.jsx index 9b8e0794..fdc75c6e 100755 --- a/src/widgets/fileflows/component.jsx +++ b/src/widgets/fileflows/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/firefly/component.jsx b/src/widgets/firefly/component.jsx index baff2304..af236a80 100644 --- a/src/widgets/firefly/component.jsx +++ b/src/widgets/firefly/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/flood/component.jsx b/src/widgets/flood/component.jsx index 44c03fd3..92a2b61a 100644 --- a/src/widgets/flood/component.jsx +++ b/src/widgets/flood/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/flood/proxy.js b/src/widgets/flood/proxy.js index e0c10173..5e5335ae 100644 --- a/src/widgets/flood/proxy.js +++ b/src/widgets/flood/proxy.js @@ -1,7 +1,7 @@ -import { formatApiCall } from "utils/proxy/api-helpers"; -import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; const logger = createLogger("floodProxyHandler"); diff --git a/src/widgets/freshrss/component.jsx b/src/widgets/freshrss/component.jsx index c5029b8f..70833e1d 100644 --- a/src/widgets/freshrss/component.jsx +++ b/src/widgets/freshrss/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/freshrss/proxy.js b/src/widgets/freshrss/proxy.js index 881094bd..6168db86 100644 --- a/src/widgets/freshrss/proxy.js +++ b/src/widgets/freshrss/proxy.js @@ -1,9 +1,9 @@ import cache from "memory-cache"; -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "freshrssProxyHandler"; diff --git a/src/widgets/frigate/component.jsx b/src/widgets/frigate/component.jsx index a19a464a..ab67c461 100644 --- a/src/widgets/frigate/component.jsx +++ b/src/widgets/frigate/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/fritzbox/component.jsx b/src/widgets/fritzbox/component.jsx index c557ece5..d7928c20 100644 --- a/src/widgets/fritzbox/component.jsx +++ b/src/widgets/fritzbox/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/fritzbox/proxy.js b/src/widgets/fritzbox/proxy.js index 20521560..c8c57fbc 100644 --- a/src/widgets/fritzbox/proxy.js +++ b/src/widgets/fritzbox/proxy.js @@ -2,9 +2,9 @@ import { xml2json } from "xml-js"; import { fritzboxDefaultFields } from "./component"; -import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { httpProxy } from "utils/proxy/http"; const logger = createLogger("fritzboxProxyHandler"); diff --git a/src/widgets/gamedig/component.jsx b/src/widgets/gamedig/component.jsx index 1c127538..5acd1b9c 100644 --- a/src/widgets/gamedig/component.jsx +++ b/src/widgets/gamedig/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/gamedig/proxy.js b/src/widgets/gamedig/proxy.js index 731bb445..79d7fa02 100644 --- a/src/widgets/gamedig/proxy.js +++ b/src/widgets/gamedig/proxy.js @@ -1,7 +1,7 @@ import { GameDig } from "gamedig"; -import createLogger from "utils/logger"; import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; const proxyName = "gamedigProxyHandler"; const logger = createLogger(proxyName); diff --git a/src/widgets/gatus/component.jsx b/src/widgets/gatus/component.jsx index 668c0388..25aae239 100644 --- a/src/widgets/gatus/component.jsx +++ b/src/widgets/gatus/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/ghostfolio/component.jsx b/src/widgets/ghostfolio/component.jsx index 524e30d9..f2587586 100644 --- a/src/widgets/ghostfolio/component.jsx +++ b/src/widgets/ghostfolio/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/gitea/component.jsx b/src/widgets/gitea/component.jsx index c45ded06..81b69d67 100644 --- a/src/widgets/gitea/component.jsx +++ b/src/widgets/gitea/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/gitlab/component.jsx b/src/widgets/gitlab/component.jsx index a012ee12..4d2805ba 100644 --- a/src/widgets/gitlab/component.jsx +++ b/src/widgets/gitlab/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/glances/component.jsx b/src/widgets/glances/component.jsx index bff31ac1..4ca0cc72 100644 --- a/src/widgets/glances/component.jsx +++ b/src/widgets/glances/component.jsx @@ -1,13 +1,13 @@ -import Memory from "./metrics/memory"; +import Containers from "./metrics/containers"; import Cpu from "./metrics/cpu"; -import Sensor from "./metrics/sensor"; -import Net from "./metrics/net"; -import Process from "./metrics/process"; import Disk from "./metrics/disk"; +import Fs from "./metrics/fs"; import GPU from "./metrics/gpu"; import Info from "./metrics/info"; -import Fs from "./metrics/fs"; -import Containers from "./metrics/containers"; +import Memory from "./metrics/memory"; +import Net from "./metrics/net"; +import Process from "./metrics/process"; +import Sensor from "./metrics/sensor"; export default function Component({ service }) { const { widget } = service; diff --git a/src/widgets/glances/components/chart.jsx b/src/widgets/glances/components/chart.jsx index 132fcc8e..b919a92d 100644 --- a/src/widgets/glances/components/chart.jsx +++ b/src/widgets/glances/components/chart.jsx @@ -1,5 +1,5 @@ import { PureComponent } from "react"; -import { AreaChart, Area, ResponsiveContainer, Tooltip } from "recharts"; +import { Area, AreaChart, ResponsiveContainer, Tooltip } from "recharts"; import CustomTooltip from "./custom_tooltip"; diff --git a/src/widgets/glances/components/chart_dual.jsx b/src/widgets/glances/components/chart_dual.jsx index 5fabe755..d6ec2076 100644 --- a/src/widgets/glances/components/chart_dual.jsx +++ b/src/widgets/glances/components/chart_dual.jsx @@ -1,5 +1,5 @@ import { PureComponent } from "react"; -import { AreaChart, Area, ResponsiveContainer, Tooltip } from "recharts"; +import { Area, AreaChart, ResponsiveContainer, Tooltip } from "recharts"; import CustomTooltip from "./custom_tooltip"; diff --git a/src/widgets/glances/components/container.jsx b/src/widgets/glances/components/container.jsx index 0b6fb5f2..7bcd5c46 100644 --- a/src/widgets/glances/components/container.jsx +++ b/src/widgets/glances/components/container.jsx @@ -1,5 +1,5 @@ -import { useContext } from "react"; import classNames from "classnames"; +import { useContext } from "react"; import { SettingsContext } from "utils/contexts/settings"; import Error from "./error"; diff --git a/src/widgets/glances/metrics/containers.jsx b/src/widgets/glances/metrics/containers.jsx index 4b7ac001..93ecbc28 100644 --- a/src/widgets/glances/metrics/containers.jsx +++ b/src/widgets/glances/metrics/containers.jsx @@ -1,8 +1,8 @@ -import { useTranslation } from "next-i18next"; import ResolvedIcon from "components/resolvedicon"; +import { useTranslation } from "next-i18next"; -import Container from "../components/container"; import Block from "../components/block"; +import Container from "../components/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/glances/metrics/cpu.jsx b/src/widgets/glances/metrics/cpu.jsx index e993fca9..3debf11a 100644 --- a/src/widgets/glances/metrics/cpu.jsx +++ b/src/widgets/glances/metrics/cpu.jsx @@ -1,9 +1,9 @@ -import dynamic from "next/dynamic"; -import { useState, useEffect } from "react"; import { useTranslation } from "next-i18next"; +import dynamic from "next/dynamic"; +import { useEffect, useState } from "react"; -import Container from "../components/container"; import Block from "../components/block"; +import Container from "../components/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/glances/metrics/disk.jsx b/src/widgets/glances/metrics/disk.jsx index 0a459e07..69dd2d99 100644 --- a/src/widgets/glances/metrics/disk.jsx +++ b/src/widgets/glances/metrics/disk.jsx @@ -1,9 +1,9 @@ -import dynamic from "next/dynamic"; -import { useState, useEffect } from "react"; import { useTranslation } from "next-i18next"; +import dynamic from "next/dynamic"; +import { useEffect, useState } from "react"; -import Container from "../components/container"; import Block from "../components/block"; +import Container from "../components/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/glances/metrics/fs.jsx b/src/widgets/glances/metrics/fs.jsx index 4dd238e0..317a781f 100644 --- a/src/widgets/glances/metrics/fs.jsx +++ b/src/widgets/glances/metrics/fs.jsx @@ -1,7 +1,7 @@ import { useTranslation } from "next-i18next"; -import Container from "../components/container"; import Block from "../components/block"; +import Container from "../components/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/glances/metrics/gpu.jsx b/src/widgets/glances/metrics/gpu.jsx index 37b06ce3..7eab536c 100644 --- a/src/widgets/glances/metrics/gpu.jsx +++ b/src/widgets/glances/metrics/gpu.jsx @@ -1,9 +1,9 @@ -import dynamic from "next/dynamic"; -import { useState, useEffect } from "react"; import { useTranslation } from "next-i18next"; +import dynamic from "next/dynamic"; +import { useEffect, useState } from "react"; -import Container from "../components/container"; import Block from "../components/block"; +import Container from "../components/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/glances/metrics/info.jsx b/src/widgets/glances/metrics/info.jsx index 5e969800..3c0ef429 100644 --- a/src/widgets/glances/metrics/info.jsx +++ b/src/widgets/glances/metrics/info.jsx @@ -1,7 +1,7 @@ import { useTranslation } from "next-i18next"; -import Container from "../components/container"; import Block from "../components/block"; +import Container from "../components/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/glances/metrics/memory.jsx b/src/widgets/glances/metrics/memory.jsx index 8cfddb66..e5fbc350 100644 --- a/src/widgets/glances/metrics/memory.jsx +++ b/src/widgets/glances/metrics/memory.jsx @@ -1,9 +1,9 @@ -import dynamic from "next/dynamic"; -import { useState, useEffect } from "react"; import { useTranslation } from "next-i18next"; +import dynamic from "next/dynamic"; +import { useEffect, useState } from "react"; -import Container from "../components/container"; import Block from "../components/block"; +import Container from "../components/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/glances/metrics/net.jsx b/src/widgets/glances/metrics/net.jsx index 372c4ec6..2bdd491c 100644 --- a/src/widgets/glances/metrics/net.jsx +++ b/src/widgets/glances/metrics/net.jsx @@ -1,9 +1,9 @@ -import dynamic from "next/dynamic"; -import { useState, useEffect } from "react"; import { useTranslation } from "next-i18next"; +import dynamic from "next/dynamic"; +import { useEffect, useState } from "react"; -import Container from "../components/container"; import Block from "../components/block"; +import Container from "../components/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/glances/metrics/process.jsx b/src/widgets/glances/metrics/process.jsx index 06001e6e..ad3fee54 100644 --- a/src/widgets/glances/metrics/process.jsx +++ b/src/widgets/glances/metrics/process.jsx @@ -1,8 +1,8 @@ -import { useTranslation } from "next-i18next"; import ResolvedIcon from "components/resolvedicon"; +import { useTranslation } from "next-i18next"; -import Container from "../components/container"; import Block from "../components/block"; +import Container from "../components/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/glances/metrics/sensor.jsx b/src/widgets/glances/metrics/sensor.jsx index 3cb38c1c..b5a16d10 100644 --- a/src/widgets/glances/metrics/sensor.jsx +++ b/src/widgets/glances/metrics/sensor.jsx @@ -1,9 +1,9 @@ -import dynamic from "next/dynamic"; -import { useState, useEffect } from "react"; import { useTranslation } from "next-i18next"; +import dynamic from "next/dynamic"; +import { useEffect, useState } from "react"; -import Container from "../components/container"; import Block from "../components/block"; +import Container from "../components/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/gluetun/component.jsx b/src/widgets/gluetun/component.jsx index a834cb4c..f7128237 100644 --- a/src/widgets/gluetun/component.jsx +++ b/src/widgets/gluetun/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/gotify/component.jsx b/src/widgets/gotify/component.jsx index 57b6b9c7..6cf9cea9 100644 --- a/src/widgets/gotify/component.jsx +++ b/src/widgets/gotify/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/grafana/component.jsx b/src/widgets/grafana/component.jsx index 859be017..82d6e5c9 100755 --- a/src/widgets/grafana/component.jsx +++ b/src/widgets/grafana/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/hdhomerun/component.jsx b/src/widgets/hdhomerun/component.jsx index dd55013f..2532f92b 100644 --- a/src/widgets/hdhomerun/component.jsx +++ b/src/widgets/hdhomerun/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/headscale/component.jsx b/src/widgets/headscale/component.jsx index 9d0da65b..acee3a82 100644 --- a/src/widgets/headscale/component.jsx +++ b/src/widgets/headscale/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/healthchecks/component.jsx b/src/widgets/healthchecks/component.jsx index 5fcef856..b65f91c5 100644 --- a/src/widgets/healthchecks/component.jsx +++ b/src/widgets/healthchecks/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; import Block from "components/services/widget/block"; import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import { i18n } from "../../../next-i18next.config"; diff --git a/src/widgets/hoarder/component.jsx b/src/widgets/hoarder/component.jsx deleted file mode 100644 index 99497d6f..00000000 --- a/src/widgets/hoarder/component.jsx +++ /dev/null @@ -1,49 +0,0 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; -import Block from "components/services/widget/block"; - -import useWidgetAPI from "utils/proxy/use-widget-api"; - -export const hoarderDefaultFields = ["bookmarks", "favorites", "archived", "highlights"]; -const MAX_ALLOWED_FIELDS = 4; - -export default function Component({ service }) { - const { t } = useTranslation(); - const { widget } = service; - - const { data: statsData, error: statsError } = useWidgetAPI(widget, "stats"); - - if (statsError) { - return ; - } - - if (!widget.fields || widget.fields.length === 0) { - widget.fields = hoarderDefaultFields; - } else if (widget.fields?.length > MAX_ALLOWED_FIELDS) { - widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS); - } - - if (!statsData) { - return ( - - - - - - - - - ); - } - - return ( - - - - - - - - - ); -} diff --git a/src/widgets/homeassistant/component.jsx b/src/widgets/homeassistant/component.jsx index 5bd2f55c..1df415ae 100644 --- a/src/widgets/homeassistant/component.jsx +++ b/src/widgets/homeassistant/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/homeassistant/proxy.js b/src/widgets/homeassistant/proxy.js index e1f02ddb..7702eb5d 100644 --- a/src/widgets/homeassistant/proxy.js +++ b/src/widgets/homeassistant/proxy.js @@ -1,6 +1,6 @@ -import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { httpProxy } from "utils/proxy/http"; const logger = createLogger("homeassistantProxyHandler"); diff --git a/src/widgets/homebox/component.jsx b/src/widgets/homebox/component.jsx index d5ca97be..4c550748 100644 --- a/src/widgets/homebox/component.jsx +++ b/src/widgets/homebox/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/homebox/proxy.js b/src/widgets/homebox/proxy.js index c91ce552..8a4550fc 100644 --- a/src/widgets/homebox/proxy.js +++ b/src/widgets/homebox/proxy.js @@ -1,9 +1,9 @@ import cache from "memory-cache"; -import { formatApiCall } from "utils/proxy/api-helpers"; -import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; const proxyName = "homeboxProxyHandler"; const sessionTokenCacheKey = `${proxyName}__sessionToken`; diff --git a/src/widgets/homebridge/component.jsx b/src/widgets/homebridge/component.jsx index 97896af1..6201b70b 100644 --- a/src/widgets/homebridge/component.jsx +++ b/src/widgets/homebridge/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/homebridge/proxy.js b/src/widgets/homebridge/proxy.js index 4da9197b..675e2976 100644 --- a/src/widgets/homebridge/proxy.js +++ b/src/widgets/homebridge/proxy.js @@ -1,9 +1,9 @@ import cache from "memory-cache"; -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "homebridgeProxyHandler"; diff --git a/src/widgets/iframe/component.jsx b/src/widgets/iframe/component.jsx index 01146771..9d2d60ca 100644 --- a/src/widgets/iframe/component.jsx +++ b/src/widgets/iframe/component.jsx @@ -1,6 +1,6 @@ -import { useState, useEffect } from "react"; import classNames from "classnames"; import Container from "components/services/widget/container"; +import { useEffect, useState } from "react"; export default function Component({ service }) { const [refreshTimer, setRefreshTimer] = useState(0); diff --git a/src/widgets/immich/component.jsx b/src/widgets/immich/component.jsx index 7f614797..a38cac1e 100644 --- a/src/widgets/immich/component.jsx +++ b/src/widgets/immich/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/jackett/component.jsx b/src/widgets/jackett/component.jsx index 9c5ce0c5..63e3e1c3 100644 --- a/src/widgets/jackett/component.jsx +++ b/src/widgets/jackett/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/jackett/proxy.js b/src/widgets/jackett/proxy.js index 035309b3..10e85175 100644 --- a/src/widgets/jackett/proxy.js +++ b/src/widgets/jackett/proxy.js @@ -1,7 +1,7 @@ -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const logger = createLogger("jackettProxyHandler"); diff --git a/src/widgets/jdownloader/component.jsx b/src/widgets/jdownloader/component.jsx index 6350faeb..a7722c7c 100644 --- a/src/widgets/jdownloader/component.jsx +++ b/src/widgets/jdownloader/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; import Block from "components/services/widget/block"; import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/jdownloader/proxy.js b/src/widgets/jdownloader/proxy.js index ae8c845c..d5d5ac3d 100644 --- a/src/widgets/jdownloader/proxy.js +++ b/src/widgets/jdownloader/proxy.js @@ -2,11 +2,11 @@ import crypto from "crypto"; import querystring from "querystring"; -import { sha256, uniqueRid, validateRid, createEncryptionToken, decrypt, encrypt } from "./tools"; +import { createEncryptionToken, decrypt, encrypt, sha256, uniqueRid, validateRid } from "./tools"; import getServiceWidget from "utils/config/service-helpers"; -import { httpProxy } from "utils/proxy/http"; import createLogger from "utils/logger"; +import { httpProxy } from "utils/proxy/http"; const proxyName = "jdownloaderProxyHandler"; const logger = createLogger(proxyName); diff --git a/src/widgets/jellyseerr/component.jsx b/src/widgets/jellyseerr/component.jsx index 06456c4d..d99fffdb 100644 --- a/src/widgets/jellyseerr/component.jsx +++ b/src/widgets/jellyseerr/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/karakeep/component.jsx b/src/widgets/karakeep/component.jsx new file mode 100644 index 00000000..8a74662d --- /dev/null +++ b/src/widgets/karakeep/component.jsx @@ -0,0 +1,49 @@ +import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; + +import useWidgetAPI from "utils/proxy/use-widget-api"; + +export const karakeepDefaultFields = ["bookmarks", "favorites", "archived", "highlights"]; +const MAX_ALLOWED_FIELDS = 4; + +export default function Component({ service }) { + const { t } = useTranslation(); + const { widget } = service; + + const { data: statsData, error: statsError } = useWidgetAPI(widget, "stats"); + + if (statsError) { + return ; + } + + if (!widget.fields || widget.fields.length === 0) { + widget.fields = karakeepDefaultFields; + } else if (widget.fields?.length > MAX_ALLOWED_FIELDS) { + widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS); + } + + if (!statsData) { + return ( + + + + + + + + + ); + } + + return ( + + + + + + + + + ); +} diff --git a/src/widgets/hoarder/widget.js b/src/widgets/karakeep/widget.js similarity index 84% rename from src/widgets/hoarder/widget.js rename to src/widgets/karakeep/widget.js index 8a3cfef0..b005b04f 100644 --- a/src/widgets/hoarder/widget.js +++ b/src/widgets/karakeep/widget.js @@ -1,5 +1,4 @@ import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; -import { asJson } from "utils/proxy/api-helpers"; const widget = { api: `{url}/api/v1/{endpoint}`, diff --git a/src/widgets/kavita/component.jsx b/src/widgets/kavita/component.jsx index df982328..887b3bbe 100644 --- a/src/widgets/kavita/component.jsx +++ b/src/widgets/kavita/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/kavita/proxy.js b/src/widgets/kavita/proxy.js index 842e4b87..cb3b3569 100644 --- a/src/widgets/kavita/proxy.js +++ b/src/widgets/kavita/proxy.js @@ -1,9 +1,9 @@ import cache from "memory-cache"; -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "kavitaProxyHandler"; diff --git a/src/widgets/komga/component.jsx b/src/widgets/komga/component.jsx index 4272ddfc..1e31b726 100644 --- a/src/widgets/komga/component.jsx +++ b/src/widgets/komga/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/komga/proxy.js b/src/widgets/komga/proxy.js index a827f408..b3d72690 100644 --- a/src/widgets/komga/proxy.js +++ b/src/widgets/komga/proxy.js @@ -1,8 +1,8 @@ import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; import { formatApiCall } from "utils/proxy/api-helpers"; import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; -import createLogger from "utils/logger"; const proxyName = "komgaProxyHandler"; const logger = createLogger(proxyName); diff --git a/src/widgets/kopia/component.jsx b/src/widgets/kopia/component.jsx index 92c6774c..d022a545 100755 --- a/src/widgets/kopia/component.jsx +++ b/src/widgets/kopia/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/kubernetes/component.jsx b/src/widgets/kubernetes/component.jsx index b93e07fb..d3587a59 100644 --- a/src/widgets/kubernetes/component.jsx +++ b/src/widgets/kubernetes/component.jsx @@ -1,7 +1,7 @@ -import useSWR from "swr"; -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; +import useSWR from "swr"; export default function Component({ service }) { const { t } = useTranslation(); diff --git a/src/widgets/lidarr/component.jsx b/src/widgets/lidarr/component.jsx index 28295e57..92f5b893 100644 --- a/src/widgets/lidarr/component.jsx +++ b/src/widgets/lidarr/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/linkwarden/component.jsx b/src/widgets/linkwarden/component.jsx index 8046faf9..b2b0d91a 100644 --- a/src/widgets/linkwarden/component.jsx +++ b/src/widgets/linkwarden/component.jsx @@ -1,6 +1,6 @@ -import React, { useState, useEffect } from "react"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useEffect, useState } from "react"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/lubelogger/component.jsx b/src/widgets/lubelogger/component.jsx index 8a18f158..5ec88983 100644 --- a/src/widgets/lubelogger/component.jsx +++ b/src/widgets/lubelogger/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "react-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/mailcow/component.jsx b/src/widgets/mailcow/component.jsx index 96ef0e45..e5d9db65 100644 --- a/src/widgets/mailcow/component.jsx +++ b/src/widgets/mailcow/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/mastodon/component.jsx b/src/widgets/mastodon/component.jsx index dbb36320..3a5d9ab6 100644 --- a/src/widgets/mastodon/component.jsx +++ b/src/widgets/mastodon/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/mealie/component.jsx b/src/widgets/mealie/component.jsx index aa18c459..4a558157 100644 --- a/src/widgets/mealie/component.jsx +++ b/src/widgets/mealie/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/medusa/component.jsx b/src/widgets/medusa/component.jsx index a5ea4ca1..88f55bcb 100644 --- a/src/widgets/medusa/component.jsx +++ b/src/widgets/medusa/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/mikrotik/component.jsx b/src/widgets/mikrotik/component.jsx index a34ce62f..4bab6792 100644 --- a/src/widgets/mikrotik/component.jsx +++ b/src/widgets/mikrotik/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/minecraft/component.jsx b/src/widgets/minecraft/component.jsx index e277abb6..00c5f6f8 100644 --- a/src/widgets/minecraft/component.jsx +++ b/src/widgets/minecraft/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/minecraft/proxy.js b/src/widgets/minecraft/proxy.js index 5f238acb..d1fe1463 100644 --- a/src/widgets/minecraft/proxy.js +++ b/src/widgets/minecraft/proxy.js @@ -1,7 +1,7 @@ import mc from "minecraftstatuspinger"; -import createLogger from "utils/logger"; import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; const proxyName = "minecraftProxyHandler"; const logger = createLogger(proxyName); diff --git a/src/widgets/miniflux/component.jsx b/src/widgets/miniflux/component.jsx index 5f5f649e..2cbbb254 100644 --- a/src/widgets/miniflux/component.jsx +++ b/src/widgets/miniflux/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/moonraker/component.jsx b/src/widgets/moonraker/component.jsx index ed99e418..238c8327 100644 --- a/src/widgets/moonraker/component.jsx +++ b/src/widgets/moonraker/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/mylar/component.jsx b/src/widgets/mylar/component.jsx index 0306b1b6..95ec1aca 100644 --- a/src/widgets/mylar/component.jsx +++ b/src/widgets/mylar/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/myspeed/component.jsx b/src/widgets/myspeed/component.jsx index 7de1b2b0..dacd2b59 100644 --- a/src/widgets/myspeed/component.jsx +++ b/src/widgets/myspeed/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/navidrome/component.jsx b/src/widgets/navidrome/component.jsx index 7a89f6ca..6218e6d9 100644 --- a/src/widgets/navidrome/component.jsx +++ b/src/widgets/navidrome/component.jsx @@ -1,5 +1,5 @@ -import { useTranslation } from "next-i18next"; import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/netalertx/component.jsx b/src/widgets/netalertx/component.jsx index a52defd3..786db9a5 100644 --- a/src/widgets/netalertx/component.jsx +++ b/src/widgets/netalertx/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/netdata/component.jsx b/src/widgets/netdata/component.jsx index 98d0f797..2d04aa23 100644 --- a/src/widgets/netdata/component.jsx +++ b/src/widgets/netdata/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/nextcloud/component.jsx b/src/widgets/nextcloud/component.jsx index 2989b6f4..d1f1cac9 100755 --- a/src/widgets/nextcloud/component.jsx +++ b/src/widgets/nextcloud/component.jsx @@ -1,7 +1,7 @@ +import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import { useTranslation } from "next-i18next"; import { useMemo } from "react"; -import Container from "components/services/widget/container"; -import Block from "components/services/widget/block"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/nextdns/component.jsx b/src/widgets/nextdns/component.jsx index 75c04a85..45e01281 100644 --- a/src/widgets/nextdns/component.jsx +++ b/src/widgets/nextdns/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/npm/component.jsx b/src/widgets/npm/component.jsx index 1ffaf27e..54e123a8 100644 --- a/src/widgets/npm/component.jsx +++ b/src/widgets/npm/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/npm/proxy.js b/src/widgets/npm/proxy.js index 6c7ba09e..79307782 100644 --- a/src/widgets/npm/proxy.js +++ b/src/widgets/npm/proxy.js @@ -1,10 +1,10 @@ import cache from "memory-cache"; import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; import { formatApiCall } from "utils/proxy/api-helpers"; import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; -import createLogger from "utils/logger"; const proxyName = "npmProxyHandler"; const tokenCacheKey = `${proxyName}__token`; diff --git a/src/widgets/nzbget/component.jsx b/src/widgets/nzbget/component.jsx index 4c0a9d48..a11ac9da 100644 --- a/src/widgets/nzbget/component.jsx +++ b/src/widgets/nzbget/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/octoprint/component.jsx b/src/widgets/octoprint/component.jsx index 21c3f7d0..e6b13809 100644 --- a/src/widgets/octoprint/component.jsx +++ b/src/widgets/octoprint/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/omada/component.jsx b/src/widgets/omada/component.jsx index 0d76e1a1..bf301d81 100644 --- a/src/widgets/omada/component.jsx +++ b/src/widgets/omada/component.jsx @@ -1,8 +1,8 @@ import { useTranslation } from "next-i18next"; -import useWidgetAPI from "../../utils/proxy/use-widget-api"; -import Container from "../../components/services/widget/container"; import Block from "../../components/services/widget/block"; +import Container from "../../components/services/widget/container"; +import useWidgetAPI from "../../utils/proxy/use-widget-api"; export default function Component({ service }) { const { t } = useTranslation(); diff --git a/src/widgets/omada/proxy.js b/src/widgets/omada/proxy.js index f4da1293..a5af47b2 100644 --- a/src/widgets/omada/proxy.js +++ b/src/widgets/omada/proxy.js @@ -1,6 +1,6 @@ -import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { httpProxy } from "utils/proxy/http"; const proxyName = "omadaProxyHandler"; diff --git a/src/widgets/ombi/component.jsx b/src/widgets/ombi/component.jsx index 3beb1198..859c01aa 100644 --- a/src/widgets/ombi/component.jsx +++ b/src/widgets/ombi/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/opendtu/component.jsx b/src/widgets/opendtu/component.jsx index 4fed88e4..c1b924b9 100644 --- a/src/widgets/opendtu/component.jsx +++ b/src/widgets/opendtu/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/openmediavault/component.jsx b/src/widgets/openmediavault/component.jsx index bd34a750..c14581f9 100644 --- a/src/widgets/openmediavault/component.jsx +++ b/src/widgets/openmediavault/component.jsx @@ -1,6 +1,6 @@ +import DownloaderGetDownloadList from "./methods/downloader_get_downloadlist"; import ServicesGetStatus from "./methods/services_get_status"; import SmartGetList from "./methods/smart_get_list"; -import DownloaderGetDownloadList from "./methods/downloader_get_downloadlist"; export default function Component({ service }) { switch (service.widget.method) { diff --git a/src/widgets/openmediavault/methods/downloader_get_downloadlist.jsx b/src/widgets/openmediavault/methods/downloader_get_downloadlist.jsx index 22327b92..7caf3426 100644 --- a/src/widgets/openmediavault/methods/downloader_get_downloadlist.jsx +++ b/src/widgets/openmediavault/methods/downloader_get_downloadlist.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/openmediavault/methods/services_get_status.jsx b/src/widgets/openmediavault/methods/services_get_status.jsx index 0579f41a..7ab0f8c1 100644 --- a/src/widgets/openmediavault/methods/services_get_status.jsx +++ b/src/widgets/openmediavault/methods/services_get_status.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/openmediavault/methods/smart_get_list.jsx b/src/widgets/openmediavault/methods/smart_get_list.jsx index 6c812449..4998c02f 100644 --- a/src/widgets/openmediavault/methods/smart_get_list.jsx +++ b/src/widgets/openmediavault/methods/smart_get_list.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/openmediavault/proxy.js b/src/widgets/openmediavault/proxy.js index 9cda42e8..d2365f2b 100644 --- a/src/widgets/openmediavault/proxy.js +++ b/src/widgets/openmediavault/proxy.js @@ -1,8 +1,8 @@ -import { formatApiCall } from "utils/proxy/api-helpers"; -import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; -import { addCookieToJar, setCookieHeader } from "utils/proxy/cookie-jar"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { addCookieToJar, setCookieHeader } from "utils/proxy/cookie-jar"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const PROXY_NAME = "OMVProxyHandler"; diff --git a/src/widgets/openwrt/methods/interface.jsx b/src/widgets/openwrt/methods/interface.jsx index e02e3171..4f77036f 100644 --- a/src/widgets/openwrt/methods/interface.jsx +++ b/src/widgets/openwrt/methods/interface.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/openwrt/methods/system.jsx b/src/widgets/openwrt/methods/system.jsx index 56c3dc9e..55c0b005 100644 --- a/src/widgets/openwrt/methods/system.jsx +++ b/src/widgets/openwrt/methods/system.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/openwrt/proxy.js b/src/widgets/openwrt/proxy.js index 0a0da3ff..5db90790 100644 --- a/src/widgets/openwrt/proxy.js +++ b/src/widgets/openwrt/proxy.js @@ -1,7 +1,7 @@ -import { sendJsonRpcRequest } from "utils/proxy/handlers/jsonrpc"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { sendJsonRpcRequest } from "utils/proxy/handlers/jsonrpc"; import widgets from "widgets/widgets"; const PROXY_NAME = "OpenWRTProxyHandler"; diff --git a/src/widgets/opnsense/component.jsx b/src/widgets/opnsense/component.jsx index b8a90d72..1caaab47 100644 --- a/src/widgets/opnsense/component.jsx +++ b/src/widgets/opnsense/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/overseerr/component.jsx b/src/widgets/overseerr/component.jsx index 3ec66587..d5c64392 100644 --- a/src/widgets/overseerr/component.jsx +++ b/src/widgets/overseerr/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/paperlessngx/component.jsx b/src/widgets/paperlessngx/component.jsx index 6585d231..bafc2e99 100644 --- a/src/widgets/paperlessngx/component.jsx +++ b/src/widgets/paperlessngx/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/peanut/component.jsx b/src/widgets/peanut/component.jsx index bc0b739b..54a293ad 100644 --- a/src/widgets/peanut/component.jsx +++ b/src/widgets/peanut/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/pfsense/component.jsx b/src/widgets/pfsense/component.jsx index 18a54933..9f43488b 100644 --- a/src/widgets/pfsense/component.jsx +++ b/src/widgets/pfsense/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/photoprism/component.jsx b/src/widgets/photoprism/component.jsx index 71772a7a..21817a10 100644 --- a/src/widgets/photoprism/component.jsx +++ b/src/widgets/photoprism/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/photoprism/proxy.js b/src/widgets/photoprism/proxy.js index fe5096b3..1959817a 100644 --- a/src/widgets/photoprism/proxy.js +++ b/src/widgets/photoprism/proxy.js @@ -1,7 +1,7 @@ -import { formatApiCall } from "utils/proxy/api-helpers"; -import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; const logger = createLogger("photoprismProxyHandler"); diff --git a/src/widgets/pihole/component.jsx b/src/widgets/pihole/component.jsx index e065bf39..6895ab28 100644 --- a/src/widgets/pihole/component.jsx +++ b/src/widgets/pihole/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/pihole/proxy.js b/src/widgets/pihole/proxy.js index 2f2d9a88..75cd0fb5 100644 --- a/src/widgets/pihole/proxy.js +++ b/src/widgets/pihole/proxy.js @@ -1,9 +1,9 @@ import cache from "memory-cache"; -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "piholeProxyHandler"; diff --git a/src/widgets/plantit/component.jsx b/src/widgets/plantit/component.jsx index af46e964..d93304e7 100644 --- a/src/widgets/plantit/component.jsx +++ b/src/widgets/plantit/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/plex/component.jsx b/src/widgets/plex/component.jsx index 688893d3..153d57b5 100644 --- a/src/widgets/plex/component.jsx +++ b/src/widgets/plex/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; import Block from "components/services/widget/block"; import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/plex/proxy.js b/src/widgets/plex/proxy.js index c092ebaa..18ffc49b 100644 --- a/src/widgets/plex/proxy.js +++ b/src/widgets/plex/proxy.js @@ -2,10 +2,10 @@ import cache from "memory-cache"; import { xml2json } from "xml-js"; -import { formatApiCall } from "utils/proxy/api-helpers"; -import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "plexProxyHandler"; diff --git a/src/widgets/portainer/component.jsx b/src/widgets/portainer/component.jsx index 149707fc..f8a89507 100644 --- a/src/widgets/portainer/component.jsx +++ b/src/widgets/portainer/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/prometheus/component.jsx b/src/widgets/prometheus/component.jsx index 003831e5..7b3722d0 100644 --- a/src/widgets/prometheus/component.jsx +++ b/src/widgets/prometheus/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/prometheusmetric/component.jsx b/src/widgets/prometheusmetric/component.jsx index 3ea20af0..d58efde9 100644 --- a/src/widgets/prometheusmetric/component.jsx +++ b/src/widgets/prometheusmetric/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/prowlarr/component.jsx b/src/widgets/prowlarr/component.jsx index 55f28634..e454c1a7 100644 --- a/src/widgets/prowlarr/component.jsx +++ b/src/widgets/prowlarr/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "react-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/proxmox/component.jsx b/src/widgets/proxmox/component.jsx index fc4c728c..51762a73 100644 --- a/src/widgets/proxmox/component.jsx +++ b/src/widgets/proxmox/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/proxmoxbackupserver/component.jsx b/src/widgets/proxmoxbackupserver/component.jsx index 2eb12258..b13f8756 100644 --- a/src/widgets/proxmoxbackupserver/component.jsx +++ b/src/widgets/proxmoxbackupserver/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; @@ -29,7 +29,18 @@ export default function Component({ service }) { ); } - const datastoreUsage = datastoreData.data ? (datastoreData.data[0].used / datastoreData.data[0].total) * 100 : 0; + const datastoreIndex = !!widget.datastore + ? datastoreData.data.findIndex(function (ds) { + return ds.store == widget.datastore; + }) + : -1; + const datastoreUsage = + datastoreIndex > -1 + ? (datastoreData.data[datastoreIndex].used / datastoreData.data[datastoreIndex].total) * 100 + : (datastoreData.data.reduce((sum, datastore) => sum + datastore.used, 0) / + datastoreData.data.reduce((sum, datastore) => sum + datastore.total, 0)) * + 100; + const cpuUsage = hostData.data.cpu * 100; const memoryUsage = (hostData.data.memory.used / hostData.data.memory.total) * 100; const failedTasks = tasksData.total >= 100 ? "99+" : tasksData.total; diff --git a/src/widgets/pterodactyl/component.jsx b/src/widgets/pterodactyl/component.jsx index b1ccab8d..9a702eef 100644 --- a/src/widgets/pterodactyl/component.jsx +++ b/src/widgets/pterodactyl/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/pyload/component.jsx b/src/widgets/pyload/component.jsx index f0e58f52..f618f75e 100644 --- a/src/widgets/pyload/component.jsx +++ b/src/widgets/pyload/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/pyload/proxy.js b/src/widgets/pyload/proxy.js index a380c865..2a1949c1 100644 --- a/src/widgets/pyload/proxy.js +++ b/src/widgets/pyload/proxy.js @@ -1,10 +1,10 @@ import cache from "memory-cache"; import getServiceWidget from "utils/config/service-helpers"; -import { formatApiCall } from "utils/proxy/api-helpers"; -import widgets from "widgets/widgets"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; import { httpProxy } from "utils/proxy/http"; +import widgets from "widgets/widgets"; const proxyName = "pyloadProxyHandler"; const logger = createLogger(proxyName); diff --git a/src/widgets/qbittorrent/component.jsx b/src/widgets/qbittorrent/component.jsx index 7fc47f99..c9f64816 100644 --- a/src/widgets/qbittorrent/component.jsx +++ b/src/widgets/qbittorrent/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import QueueEntry from "../../components/widgets/queue/queueEntry"; diff --git a/src/widgets/qbittorrent/proxy.js b/src/widgets/qbittorrent/proxy.js index aead7582..8f1874bf 100644 --- a/src/widgets/qbittorrent/proxy.js +++ b/src/widgets/qbittorrent/proxy.js @@ -1,7 +1,7 @@ -import { formatApiCall } from "utils/proxy/api-helpers"; -import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; const logger = createLogger("qbittorrentProxyHandler"); diff --git a/src/widgets/qnap/component.jsx b/src/widgets/qnap/component.jsx index 79f3c8be..d7fdf8bc 100644 --- a/src/widgets/qnap/component.jsx +++ b/src/widgets/qnap/component.jsx @@ -1,8 +1,8 @@ /* eslint no-underscore-dangle: ["error", { "allow": ["_text", "_cdata"] }] */ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/qnap/proxy.js b/src/widgets/qnap/proxy.js index 07917d28..1c5356ae 100644 --- a/src/widgets/qnap/proxy.js +++ b/src/widgets/qnap/proxy.js @@ -3,10 +3,10 @@ import cache from "memory-cache"; import { xml2json } from "xml-js"; -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; const proxyName = "qnapProxyHandler"; const sessionTokenCacheKey = `${proxyName}__sessionToken`; diff --git a/src/widgets/radarr/component.jsx b/src/widgets/radarr/component.jsx index 70ddcb33..bcf9301b 100644 --- a/src/widgets/radarr/component.jsx +++ b/src/widgets/radarr/component.jsx @@ -1,7 +1,7 @@ +import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import { useTranslation } from "next-i18next"; import { useCallback } from "react"; -import Container from "components/services/widget/container"; -import Block from "components/services/widget/block"; import QueueEntry from "../../components/widgets/queue/queueEntry"; diff --git a/src/widgets/radarr/widget.js b/src/widgets/radarr/widget.js index 7d370378..4f71b8d9 100644 --- a/src/widgets/radarr/widget.js +++ b/src/widgets/radarr/widget.js @@ -1,5 +1,5 @@ -import genericProxyHandler from "utils/proxy/handlers/generic"; import { asJson, jsonArrayFilter } from "utils/proxy/api-helpers"; +import genericProxyHandler from "utils/proxy/handlers/generic"; const widget = { api: "{url}/api/v3/{endpoint}?apikey={key}", diff --git a/src/widgets/readarr/component.jsx b/src/widgets/readarr/component.jsx index cbf68a4d..845b7820 100644 --- a/src/widgets/readarr/component.jsx +++ b/src/widgets/readarr/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/readarr/widget.js b/src/widgets/readarr/widget.js index 58cc09c4..f786f0bc 100644 --- a/src/widgets/readarr/widget.js +++ b/src/widgets/readarr/widget.js @@ -1,5 +1,5 @@ -import genericProxyHandler from "utils/proxy/handlers/generic"; import { jsonArrayFilter } from "utils/proxy/api-helpers"; +import genericProxyHandler from "utils/proxy/handlers/generic"; const widget = { api: "{url}/api/v1/{endpoint}?apikey={key}", diff --git a/src/widgets/romm/component.jsx b/src/widgets/romm/component.jsx index 5c6349d0..b0787fb3 100644 --- a/src/widgets/romm/component.jsx +++ b/src/widgets/romm/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/rutorrent/component.jsx b/src/widgets/rutorrent/component.jsx index 9d2ad4e2..245a786c 100644 --- a/src/widgets/rutorrent/component.jsx +++ b/src/widgets/rutorrent/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/rutorrent/proxy.js b/src/widgets/rutorrent/proxy.js index e0ae44fe..910f2311 100644 --- a/src/widgets/rutorrent/proxy.js +++ b/src/widgets/rutorrent/proxy.js @@ -1,8 +1,8 @@ import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; -import { formatApiCall } from "utils/proxy/api-helpers"; -import createLogger from "utils/logger"; const logger = createLogger("rutorrentProxyHandler"); diff --git a/src/widgets/sabnzbd/component.jsx b/src/widgets/sabnzbd/component.jsx index 5a9ba488..9807dd93 100644 --- a/src/widgets/sabnzbd/component.jsx +++ b/src/widgets/sabnzbd/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/scrutiny/component.jsx b/src/widgets/scrutiny/component.jsx index f81a519c..2450a95e 100644 --- a/src/widgets/scrutiny/component.jsx +++ b/src/widgets/scrutiny/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/slskd/component.jsx b/src/widgets/slskd/component.jsx index 8c26d4e4..40a206b6 100644 --- a/src/widgets/slskd/component.jsx +++ b/src/widgets/slskd/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/slskd/widget.js b/src/widgets/slskd/widget.js index fdea7738..3eedd356 100644 --- a/src/widgets/slskd/widget.js +++ b/src/widgets/slskd/widget.js @@ -1,5 +1,4 @@ import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; -import { asJson } from "utils/proxy/api-helpers"; const widget = { api: `{url}/api/v0/{endpoint}`, diff --git a/src/widgets/sonarr/component.jsx b/src/widgets/sonarr/component.jsx index 725e6d66..19cc2c12 100644 --- a/src/widgets/sonarr/component.jsx +++ b/src/widgets/sonarr/component.jsx @@ -1,7 +1,7 @@ +import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import { useTranslation } from "next-i18next"; import { useCallback } from "react"; -import Container from "components/services/widget/container"; -import Block from "components/services/widget/block"; import QueueEntry from "../../components/widgets/queue/queueEntry"; diff --git a/src/widgets/sonarr/widget.js b/src/widgets/sonarr/widget.js index acb4a551..1fcef8eb 100644 --- a/src/widgets/sonarr/widget.js +++ b/src/widgets/sonarr/widget.js @@ -1,5 +1,5 @@ -import genericProxyHandler from "utils/proxy/handlers/generic"; import { asJson } from "utils/proxy/api-helpers"; +import genericProxyHandler from "utils/proxy/handlers/generic"; const widget = { api: "{url}/api/v3/{endpoint}?apikey={key}", diff --git a/src/widgets/speedtest/component.jsx b/src/widgets/speedtest/component.jsx index e34f53ac..7be00aa2 100644 --- a/src/widgets/speedtest/component.jsx +++ b/src/widgets/speedtest/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/spoolman/component.jsx b/src/widgets/spoolman/component.jsx index b690f9c0..62eb3a1d 100644 --- a/src/widgets/spoolman/component.jsx +++ b/src/widgets/spoolman/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/stash/component.jsx b/src/widgets/stash/component.jsx index e3986d4b..965c6b59 100644 --- a/src/widgets/stash/component.jsx +++ b/src/widgets/stash/component.jsx @@ -1,7 +1,7 @@ +import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import { useTranslation } from "next-i18next"; import { useEffect, useState } from "react"; -import Container from "components/services/widget/container"; -import Block from "components/services/widget/block"; import { formatProxyUrl } from "utils/proxy/api-helpers"; diff --git a/src/widgets/stocks/component.jsx b/src/widgets/stocks/component.jsx index bcd3b110..be471ddf 100644 --- a/src/widgets/stocks/component.jsx +++ b/src/widgets/stocks/component.jsx @@ -1,7 +1,7 @@ -import { useTranslation } from "next-i18next"; import classNames from "classnames"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/strelaysrv/component.jsx b/src/widgets/strelaysrv/component.jsx index 0aa70d88..026e19b7 100644 --- a/src/widgets/strelaysrv/component.jsx +++ b/src/widgets/strelaysrv/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/suwayomi/component.jsx b/src/widgets/suwayomi/component.jsx index 1a8625b9..1cbd8c53 100644 --- a/src/widgets/suwayomi/component.jsx +++ b/src/widgets/suwayomi/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/suwayomi/proxy.js b/src/widgets/suwayomi/proxy.js index def811cc..4df55b95 100644 --- a/src/widgets/suwayomi/proxy.js +++ b/src/widgets/suwayomi/proxy.js @@ -1,7 +1,7 @@ -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "suwayomiProxyHandler"; diff --git a/src/widgets/swagdashboard/component.jsx b/src/widgets/swagdashboard/component.jsx index 2b17278f..4220e3c8 100644 --- a/src/widgets/swagdashboard/component.jsx +++ b/src/widgets/swagdashboard/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/tailscale/component.jsx b/src/widgets/tailscale/component.jsx index a6e76bed..b95cb016 100644 --- a/src/widgets/tailscale/component.jsx +++ b/src/widgets/tailscale/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/tandoor/component.jsx b/src/widgets/tandoor/component.jsx index b31cad95..4a02d539 100644 --- a/src/widgets/tandoor/component.jsx +++ b/src/widgets/tandoor/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/tautulli/component.jsx b/src/widgets/tautulli/component.jsx index 50e8295f..3f6443dd 100644 --- a/src/widgets/tautulli/component.jsx +++ b/src/widgets/tautulli/component.jsx @@ -1,8 +1,8 @@ /* eslint-disable camelcase */ -import { useTranslation } from "next-i18next"; -import { BsFillPlayFill, BsPauseFill, BsCpu, BsFillCpuFill } from "react-icons/bs"; -import { MdOutlineSmartDisplay, MdSmartDisplay } from "react-icons/md"; import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; +import { BsCpu, BsFillCpuFill, BsFillPlayFill, BsPauseFill } from "react-icons/bs"; +import { MdOutlineSmartDisplay, MdSmartDisplay } from "react-icons/md"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/tdarr/component.jsx b/src/widgets/tdarr/component.jsx index ce9d43fd..824a56b3 100644 --- a/src/widgets/tdarr/component.jsx +++ b/src/widgets/tdarr/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/tdarr/proxy.js b/src/widgets/tdarr/proxy.js index 88da30fd..d6897dfc 100644 --- a/src/widgets/tdarr/proxy.js +++ b/src/widgets/tdarr/proxy.js @@ -1,7 +1,7 @@ -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "tdarrProxyHandler"; diff --git a/src/widgets/technitium/component.jsx b/src/widgets/technitium/component.jsx index 22f56e96..fa221025 100644 --- a/src/widgets/technitium/component.jsx +++ b/src/widgets/technitium/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/technitium/widget.js b/src/widgets/technitium/widget.js index c3432a67..fc4577be 100644 --- a/src/widgets/technitium/widget.js +++ b/src/widgets/technitium/widget.js @@ -1,5 +1,5 @@ -import genericProxyHandler from "utils/proxy/handlers/generic"; import { asJson } from "utils/proxy/api-helpers"; +import genericProxyHandler from "utils/proxy/handlers/generic"; const widget = { api: "{url}/api/{endpoint}?token={key}&utc=true", diff --git a/src/widgets/traefik/component.jsx b/src/widgets/traefik/component.jsx index 598170fa..e4b3b46b 100644 --- a/src/widgets/traefik/component.jsx +++ b/src/widgets/traefik/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/transmission/component.jsx b/src/widgets/transmission/component.jsx index bd19c52e..474fe69f 100644 --- a/src/widgets/transmission/component.jsx +++ b/src/widgets/transmission/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/transmission/proxy.js b/src/widgets/transmission/proxy.js index 8b8049bc..b0be7bac 100644 --- a/src/widgets/transmission/proxy.js +++ b/src/widgets/transmission/proxy.js @@ -1,9 +1,9 @@ import cache from "memory-cache"; -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "transmissionProxyHandler"; diff --git a/src/widgets/truenas/component.jsx b/src/widgets/truenas/component.jsx index 0e56bc91..12ceef56 100644 --- a/src/widgets/truenas/component.jsx +++ b/src/widgets/truenas/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import Pool from "widgets/truenas/pool"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/truenas/widget.js b/src/widgets/truenas/widget.js index d322753f..528114ed 100644 --- a/src/widgets/truenas/widget.js +++ b/src/widgets/truenas/widget.js @@ -1,5 +1,5 @@ -import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; import { asJson, jsonArrayFilter } from "utils/proxy/api-helpers"; +import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; const widget = { api: "{url}/api/v2.0/{endpoint}", diff --git a/src/widgets/tubearchivist/component.jsx b/src/widgets/tubearchivist/component.jsx index 6af255cd..427298e4 100644 --- a/src/widgets/tubearchivist/component.jsx +++ b/src/widgets/tubearchivist/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/unifi/component.jsx b/src/widgets/unifi/component.jsx index 0c00b487..ad58d1d9 100644 --- a/src/widgets/unifi/component.jsx +++ b/src/widgets/unifi/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/unifi/proxy.js b/src/widgets/unifi/proxy.js index 24be7dd9..c932fc41 100644 --- a/src/widgets/unifi/proxy.js +++ b/src/widgets/unifi/proxy.js @@ -1,11 +1,11 @@ import cache from "memory-cache"; -import { formatApiCall } from "utils/proxy/api-helpers"; -import { httpProxy } from "utils/proxy/http"; -import { addCookieToJar, setCookieHeader } from "utils/proxy/cookie-jar"; import getServiceWidget from "utils/config/service-helpers"; import { getPrivateWidgetOptions } from "utils/config/widget-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { addCookieToJar, setCookieHeader } from "utils/proxy/cookie-jar"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const udmpPrefix = "/proxy/network"; diff --git a/src/widgets/unmanic/component.jsx b/src/widgets/unmanic/component.jsx index 7cc8eec1..12069e52 100644 --- a/src/widgets/unmanic/component.jsx +++ b/src/widgets/unmanic/component.jsx @@ -1,9 +1,9 @@ -import { useEffect, useState } from "react"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useEffect, useState } from "react"; -import useWidgetAPI from "utils/proxy/use-widget-api"; import { formatProxyUrl } from "utils/proxy/api-helpers"; +import useWidgetAPI from "utils/proxy/use-widget-api"; export default function Component({ service }) { const { widget } = service; diff --git a/src/widgets/unmanic/widget.js b/src/widgets/unmanic/widget.js index 4c9713e4..ef4493e9 100644 --- a/src/widgets/unmanic/widget.js +++ b/src/widgets/unmanic/widget.js @@ -1,5 +1,5 @@ -import genericProxyHandler from "utils/proxy/handlers/generic"; import { asJson } from "utils/proxy/api-helpers"; +import genericProxyHandler from "utils/proxy/handlers/generic"; const widget = { api: "{url}/unmanic/api/v2/{endpoint}", diff --git a/src/widgets/uptimekuma/component.jsx b/src/widgets/uptimekuma/component.jsx index d044c255..e8a42e48 100644 --- a/src/widgets/uptimekuma/component.jsx +++ b/src/widgets/uptimekuma/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/uptimerobot/component.jsx b/src/widgets/uptimerobot/component.jsx index c18462ba..a1f234c2 100644 --- a/src/widgets/uptimerobot/component.jsx +++ b/src/widgets/uptimerobot/component.jsx @@ -1,7 +1,7 @@ +import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import { useTranslation } from "next-i18next"; import { useEffect, useState } from "react"; -import Container from "components/services/widget/container"; -import Block from "components/services/widget/block"; import { formatProxyUrl } from "utils/proxy/api-helpers"; diff --git a/src/widgets/urbackup/component.jsx b/src/widgets/urbackup/component.jsx index 76769e13..9d8f92ba 100644 --- a/src/widgets/urbackup/component.jsx +++ b/src/widgets/urbackup/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/vikunja/component.jsx b/src/widgets/vikunja/component.jsx index 7f8efb41..1afccd38 100644 --- a/src/widgets/vikunja/component.jsx +++ b/src/widgets/vikunja/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/vikunja/widget.js b/src/widgets/vikunja/widget.js index 9a192026..8e5e680a 100644 --- a/src/widgets/vikunja/widget.js +++ b/src/widgets/vikunja/widget.js @@ -1,5 +1,5 @@ -import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; import { asJson } from "utils/proxy/api-helpers"; +import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; const widget = { api: `{url}/api/v1/{endpoint}`, diff --git a/src/widgets/watchtower/component.jsx b/src/widgets/watchtower/component.jsx index 0bed9445..58b2a3f5 100644 --- a/src/widgets/watchtower/component.jsx +++ b/src/widgets/watchtower/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/watchtower/proxy.js b/src/widgets/watchtower/proxy.js index 588d08ee..484c3c7d 100644 --- a/src/widgets/watchtower/proxy.js +++ b/src/widgets/watchtower/proxy.js @@ -1,7 +1,7 @@ -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "watchtowerProxyHandler"; diff --git a/src/widgets/wgeasy/component.jsx b/src/widgets/wgeasy/component.jsx index eb42532e..829b120d 100644 --- a/src/widgets/wgeasy/component.jsx +++ b/src/widgets/wgeasy/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/whatsupdocker/component.jsx b/src/widgets/whatsupdocker/component.jsx index 52afe09d..cc3b5174 100644 --- a/src/widgets/whatsupdocker/component.jsx +++ b/src/widgets/whatsupdocker/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index 21cff92b..e183a9c6 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -41,15 +41,15 @@ import gotify from "./gotify/widget"; import grafana from "./grafana/widget"; import hdhomerun from "./hdhomerun/widget"; import headscale from "./headscale/widget"; -import hoarder from "./hoarder/widget"; +import healthchecks from "./healthchecks/widget"; import homeassistant from "./homeassistant/widget"; import homebox from "./homebox/widget"; import homebridge from "./homebridge/widget"; -import healthchecks from "./healthchecks/widget"; import immich from "./immich/widget"; import jackett from "./jackett/widget"; -import jellyseerr from "./jellyseerr/widget"; import jdownloader from "./jdownloader/widget"; +import jellyseerr from "./jellyseerr/widget"; +import karakeep from "./karakeep/widget"; import kavita from "./kavita/widget"; import komga from "./komga/widget"; import kopia from "./kopia/widget"; @@ -60,9 +60,9 @@ import mailcow from "./mailcow/widget"; import mastodon from "./mastodon/widget"; import mealie from "./mealie/widget"; import medusa from "./medusa/widget"; +import mikrotik from "./mikrotik/widget"; import minecraft from "./minecraft/widget"; import miniflux from "./miniflux/widget"; -import mikrotik from "./mikrotik/widget"; import mjpeg from "./mjpeg/widget"; import moonraker from "./moonraker/widget"; import mylar from "./mylar/widget"; @@ -78,15 +78,14 @@ import octoprint from "./octoprint/widget"; import omada from "./omada/widget"; import ombi from "./ombi/widget"; import opendtu from "./opendtu/widget"; -import opnsense from "./opnsense/widget"; -import overseerr from "./overseerr/widget"; import openmediavault from "./openmediavault/widget"; import openwrt from "./openwrt/widget"; +import opnsense from "./opnsense/widget"; +import overseerr from "./overseerr/widget"; import paperlessngx from "./paperlessngx/widget"; import peanut from "./peanut/widget"; import pfsense from "./pfsense/widget"; import photoprism from "./photoprism/widget"; -import proxmoxbackupserver from "./proxmoxbackupserver/widget"; import pihole from "./pihole/widget"; import plantit from "./plantit/widget"; import plex from "./plex/widget"; @@ -95,12 +94,14 @@ import prometheus from "./prometheus/widget"; import prometheusmetric from "./prometheusmetric/widget"; import prowlarr from "./prowlarr/widget"; import proxmox from "./proxmox/widget"; +import proxmoxbackupserver from "./proxmoxbackupserver/widget"; import pterodactyl from "./pterodactyl/widget"; import pyload from "./pyload/widget"; import qbittorrent from "./qbittorrent/widget"; import qnap from "./qnap/widget"; import radarr from "./radarr/widget"; import readarr from "./readarr/widget"; +import romm from "./romm/widget"; import rutorrent from "./rutorrent/widget"; import sabnzbd from "./sabnzbd/widget"; import scrutiny from "./scrutiny/widget"; @@ -111,28 +112,27 @@ import spoolman from "./spoolman/widget"; import stash from "./stash/widget"; import stocks from "./stocks/widget"; import strelaysrv from "./strelaysrv/widget"; -import swagdashboard from "./swagdashboard/widget"; import suwayomi from "./suwayomi/widget"; +import swagdashboard from "./swagdashboard/widget"; import tailscale from "./tailscale/widget"; import tandoor from "./tandoor/widget"; import tautulli from "./tautulli/widget"; -import technitium from "./technitium/widget"; import tdarr from "./tdarr/widget"; +import technitium from "./technitium/widget"; import traefik from "./traefik/widget"; import transmission from "./transmission/widget"; -import tubearchivist from "./tubearchivist/widget"; import truenas from "./truenas/widget"; +import tubearchivist from "./tubearchivist/widget"; import unifi from "./unifi/widget"; import unmanic from "./unmanic/widget"; import uptimekuma from "./uptimekuma/widget"; import uptimerobot from "./uptimerobot/widget"; +import urbackup from "./urbackup/widget"; import vikunja from "./vikunja/widget"; import watchtower from "./watchtower/widget"; import wgeasy from "./wgeasy/widget"; import whatsupdocker from "./whatsupdocker/widget"; import xteve from "./xteve/widget"; -import urbackup from "./urbackup/widget"; -import romm from "./romm/widget"; import zabbix from "./zabbix/widget"; const widgets = { @@ -178,7 +178,8 @@ const widgets = { grafana, hdhomerun, headscale, - hoarder, + hoarder: karakeep, + karakeep, homeassistant, homebox, homebridge, diff --git a/src/widgets/xteve/component.jsx b/src/widgets/xteve/component.jsx index 9d514e75..41f2beb0 100644 --- a/src/widgets/xteve/component.jsx +++ b/src/widgets/xteve/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/xteve/proxy.js b/src/widgets/xteve/proxy.js index 453e3645..53d82bc4 100644 --- a/src/widgets/xteve/proxy.js +++ b/src/widgets/xteve/proxy.js @@ -1,8 +1,8 @@ +import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; import { formatApiCall } from "utils/proxy/api-helpers"; import { httpProxy } from "utils/proxy/http"; -import createLogger from "utils/logger"; import widgets from "widgets/widgets"; -import getServiceWidget from "utils/config/service-helpers"; const logger = createLogger("xteveProxyHandler"); diff --git a/src/widgets/zabbix/component.jsx b/src/widgets/zabbix/component.jsx index a2cc8168..b6a5b20b 100644 --- a/src/widgets/zabbix/component.jsx +++ b/src/widgets/zabbix/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api";