diff --git a/.dockerignore b/.dockerignore index 698137cb..edbf8525 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 855f7af3..a274b610 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -1,4 +1,9 @@ -name: Docker CI +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. on: # schedule: @@ -23,40 +28,43 @@ 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: Setup Node.js + - + name: Install 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: @@ -72,55 +80,8 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Extract Docker metadata - id: meta - uses: docker/metadata-action@v5 - with: - 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 - - - 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 - + # 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 @@ -128,7 +89,6 @@ jobs: 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 @@ -136,12 +96,29 @@ jobs: 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 + with: + images: | + ${{ env.IMAGE_NAME }} + ghcr.io/${{ env.IMAGE_NAME }} + flavor: | + latest=auto + + # Build and push Docker image with Buildx (don't push on PR) + # https://github.com/docker/build-push-action - name: Build and push Docker image id: build-and-push uses: docker/build-push-action@v6 @@ -151,15 +128,18 @@ 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 - # https://github.com/docker/build-push-action/issues/252 / https://github.com/moby/buildkit/issues/1896 + # Temp fix + # 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/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0b4f5624..6cc46b47 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -9,14 +9,11 @@ repos: - id: check-yaml exclude: "(^mkdocs\\.yml$)" - id: check-added-large-files -- repo: https://github.com/rbubley/mirrors-prettier - rev: 'v3.3.3' +- repo: https://github.com/pre-commit/mirrors-prettier + rev: 'v3.0.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 new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/.prettierrc @@ -0,0 +1 @@ +{} diff --git a/.prettierrc.js b/.prettierrc.js deleted file mode 100644 index b48ef007..00000000 --- a/.prettierrc.js +++ /dev/null @@ -1,5 +0,0 @@ -const config = { - plugins: [require("prettier-plugin-organize-imports")], -}; - -module.exports = config; diff --git a/Dockerfile b/Dockerfile index 76008113..a08d22f5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,63 +1,67 @@ -# ========================= -# Builder Stage -# ========================= -FROM node:22-slim AS builder +# Install dependencies only when needed +FROM docker.io/node:22-alpine AS deps + WORKDIR /app -# Setup -RUN mkdir config -COPY . . +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 +WORKDIR /app + +RUN mkdir config -ARG CI ARG BUILDTIME ARG VERSION ARG REVISION -ENV CI=$CI -# 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 +COPY --link --from=deps /app/node_modules ./node_modules/ +COPY . . -# ========================= -# 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." +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." 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' -# Setup +ENV NODE_ENV=production + WORKDIR /app -# Copy some files from context +# 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 --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/ -# 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 -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 http://127.0.0.1:$PORT/api/healthcheck || exit 1 + CMD wget --no-verbose --tries=1 --spider --no-check-certificate 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 37a48fd8..70947a10 100644 --- a/docs/widgets/services/customapi.md +++ b/docs/widgets/services/customapi.md @@ -189,7 +189,6 @@ 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 new file mode 100644 index 00000000..3e8c82ad --- /dev/null +++ b/docs/widgets/services/hoarder.md @@ -0,0 +1,17 @@ +--- +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 80ff72ba..beb6d491 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) -- [Karakeep](karakeep.md) +- [Hoarder](hoarder.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 deleted file mode 100644 index a2902315..00000000 --- a/docs/widgets/services/karakeep.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -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 04b888c6..65022ac7 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/karakeep.md + - widgets/services/hoarder.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 f6968dc3..a1b5c7b3 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 9ac85840..7f0fbdf7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "homepage", - "version": "1.2.0", + "version": "1.1.1", "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": "^24.2.3", + "i18next": "^21.10.0", "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.4", + "next": "^15.2.3", "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": "^2.3.3", + "swr": "^1.3.0", "systeminformation": "^5.25.11", "tough-cookie": "^5.1.2", "urbackup-server-api": "^0.8.9", @@ -47,16 +47,15 @@ "@tailwindcss/forms": "^0.5.10", "@tailwindcss/postcss": "^4.0.9", "eslint": "^9.21.0", - "eslint-config-next": "^15.2.4", - "eslint-config-prettier": "^10.1.1", + "eslint-config-next": "^15.1.7", + "eslint-config-prettier": "^10.0.2", "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.3", + "postcss": "^8.5.2", "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 170e380e..2848e239 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,8 +33,8 @@ importers: specifier: ^5.2.0 version: 5.2.0 i18next: - specifier: ^24.2.3 - version: 24.2.3(typescript@5.7.3) + specifier: ^21.10.0 + version: 21.10.0 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.4 - version: 15.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^15.2.3 + version: 15.2.3(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.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) + 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) 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@24.2.3(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 11.18.6(i18next@21.10.0)(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: ^2.3.3 - version: 2.3.3(react@18.3.1) + specifier: ^1.3.0 + version: 1.3.0(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.2.4 - version: 15.2.4(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + specifier: ^15.1.7 + version: 15.1.7(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) eslint-config-prettier: - specifier: ^10.1.1 - version: 10.1.1(eslint@9.21.0(jiti@2.4.2)) + specifier: ^10.0.2 + version: 10.0.2(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-import: specifier: ^2.31.0 - 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)) + 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)) 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.1.1(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.0.2(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,14 +137,11 @@ importers: specifier: ^5.1.0 version: 5.1.0(eslint@9.21.0(jiti@2.4.2)) postcss: - specifier: ^8.5.3 - version: 8.5.3 + specifier: ^8.5.2 + version: 8.5.2 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) @@ -165,10 +162,6 @@ 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==} @@ -179,14 +172,8 @@ packages: '@dabh/diagnostics@2.0.3': resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} - '@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==} + '@emnapi/runtime@1.3.1': + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} '@eslint-community/eslint-utils@4.4.1': resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} @@ -194,12 +181,6 @@ 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} @@ -395,59 +376,56 @@ packages: '@kubernetes/client-node@1.0.0': resolution: {integrity: sha512-a8NSvFDSHKFZ0sR1hbPSf8IDFNJwctEU5RodSCNiq/moRXWmrdmqhb1RRQzF+l+TSBaDgHw3YsYNxxE92STBzw==} - '@napi-rs/wasm-runtime@0.2.8': - resolution: {integrity: sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==} + '@next/env@15.2.3': + resolution: {integrity: sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==} - '@next/env@15.2.4': - resolution: {integrity: sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==} + '@next/eslint-plugin-next@15.1.7': + resolution: {integrity: sha512-kRP7RjSxfTO13NE317ek3mSGzoZlI33nc/i5hs1KaWpK+egs85xg0DJ4p32QEiHnR0mVjuUfhRIun7awqfL7pQ==} - '@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==} + '@next/swc-darwin-arm64@15.2.3': + resolution: {integrity: sha512-uaBhA8aLbXLqwjnsHSkxs353WrRgQgiFjduDpc7YXEU0B54IKx3vU+cxQlYwPCyC8uYEEX7THhtQQsfHnvv8dw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.2.4': - resolution: {integrity: sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==} + '@next/swc-darwin-x64@15.2.3': + resolution: {integrity: sha512-pVwKvJ4Zk7h+4hwhqOUuMx7Ib02u3gDX3HXPKIShBi9JlYllI0nU6TWLbPT94dt7FSi6mSBhfc2JrHViwqbOdw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.2.4': - resolution: {integrity: sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==} + '@next/swc-linux-arm64-gnu@15.2.3': + resolution: {integrity: sha512-50ibWdn2RuFFkOEUmo9NCcQbbV9ViQOrUfG48zHBCONciHjaUKtHcYFiCwBVuzD08fzvzkWuuZkd4AqbvKO7UQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.2.4': - resolution: {integrity: sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==} + '@next/swc-linux-arm64-musl@15.2.3': + resolution: {integrity: sha512-2gAPA7P652D3HzR4cLyAuVYwYqjG0mt/3pHSWTCyKZq/N/dJcUAEoNQMyUmwTZWCJRKofB+JPuDVP2aD8w2J6Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.2.4': - resolution: {integrity: sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==} + '@next/swc-linux-x64-gnu@15.2.3': + resolution: {integrity: sha512-ODSKvrdMgAJOVU4qElflYy1KSZRM3M45JVbeZu42TINCMG3anp7YCBn80RkISV6bhzKwcUqLBAmOiWkaGtBA9w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.2.4': - resolution: {integrity: sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==} + '@next/swc-linux-x64-musl@15.2.3': + resolution: {integrity: sha512-ZR9kLwCWrlYxwEoytqPi1jhPd1TlsSJWAc+H/CJHmHkf2nD92MQpSRIURR1iNgA/kuFSdxB8xIPt4p/T78kwsg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.2.4': - resolution: {integrity: sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==} + '@next/swc-win32-arm64-msvc@15.2.3': + resolution: {integrity: sha512-+G2FrDcfm2YDbhDiObDU/qPriWeiz/9cRR0yMWJeTLGGX6/x8oryO3tt7HhodA1vZ8r2ddJPCjtLcpaVl7TE2Q==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.2.4': - resolution: {integrity: sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==} + '@next/swc-win32-x64-msvc@15.2.3': + resolution: {integrity: sha512-gHYS9tc+G2W0ZC8rBL+H6RdtXIyk40uLiaos0yj5US85FNhbFEndMA2nW3z47nzOWiSvXTZ5kBClc3rD0zJg0w==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -509,8 +487,8 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@rushstack/eslint-patch@1.11.0': - resolution: {integrity: sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==} + '@rushstack/eslint-patch@1.10.5': + resolution: {integrity: sha512-kkKUDVlII2DQiKy7UstOR1ErJP8kUKAQ4oa+SQtM0K+lPdmmjj0YnnxBgtTVYH7mUKtbsxeFC9y0AmK7Yb78/A==} '@sindresorhus/is@5.6.0': resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} @@ -616,9 +594,6 @@ 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==} @@ -688,128 +663,53 @@ packages: '@types/ws@8.5.14': resolution: {integrity: sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==} - '@typescript-eslint/eslint-plugin@8.29.0': - resolution: {integrity: sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==} + '@typescript-eslint/eslint-plugin@8.24.1': + resolution: {integrity: sha512-ll1StnKtBigWIGqvYDVuDmXJHVH4zLVot1yQ4fJtLpL7qacwkxJc1T0bptqw+miBQ/QfUbhl1TcQ4accW5KUyA==} 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.9.0' + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/parser@8.29.0': - resolution: {integrity: sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==} + '@typescript-eslint/parser@8.24.1': + resolution: {integrity: sha512-Tqoa05bu+t5s8CTZFaGpCH2ub3QeT9YDkXbPd3uQ4SfsLoh1/vv2GEYAioPoxCWJJNsenXlC88tRjwoHNts1oQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/scope-manager@8.29.0': - resolution: {integrity: sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==} + '@typescript-eslint/scope-manager@8.24.1': + resolution: {integrity: sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.29.0': - resolution: {integrity: sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==} + '@typescript-eslint/type-utils@8.24.1': + resolution: {integrity: sha512-/Do9fmNgCsQ+K4rCz0STI7lYB4phTtEXqqCAs3gZW0pnK7lWNkvWd5iW545GSmApm4AzmQXmSqXPO565B4WVrw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/types@8.29.0': - resolution: {integrity: sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==} + '@typescript-eslint/types@8.24.1': + resolution: {integrity: sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.29.0': - resolution: {integrity: sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==} + '@typescript-eslint/typescript-estree@8.24.1': + resolution: {integrity: sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/utils@8.29.0': - resolution: {integrity: sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==} + '@typescript-eslint/utils@8.24.1': + resolution: {integrity: sha512-OOcg3PMMQx9EXspId5iktsI3eMaXVwlhC8BvNnX6B5w9a4dVgpkQZuU8Hy67TolKcl+iFWq0XX+jbDGN4xWxjQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/visitor-keys@8.29.0': - resolution: {integrity: sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==} + '@typescript-eslint/visitor-keys@8.24.1': + resolution: {integrity: sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==} 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: @@ -982,8 +882,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001712: - resolution: {integrity: sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==} + caniuse-lite@1.0.30001706: + resolution: {integrity: sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -1187,10 +1087,6 @@ 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'} @@ -1295,8 +1191,8 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-next@15.2.4: - resolution: {integrity: sha512-v4gYjd4eYIme8qzaJItpR5MMBXJ0/YV07u7eb50kEnlEmX7yhOjdUdzz70v4fiINYRjLf8X8TbogF0k7wlz6sA==} + eslint-config-next@15.1.7: + resolution: {integrity: sha512-zXoMnYUIy3XHaAoOhrcYkT9UQWvXqWju2K7NNsmb5wd/7XESDwof61eUdW4QhERr3eJ9Ko/vnXqIrj8kk/drYw==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 typescript: '>=3.3.1' @@ -1304,8 +1200,8 @@ packages: typescript: optional: true - eslint-config-prettier@10.1.1: - resolution: {integrity: sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==} + eslint-config-prettier@10.0.2: + resolution: {integrity: sha512-1105/17ZIMjmCOJOPNfVdbXafLCLj3hPmkmB7dLgt7XsQ/zkxSuDerE/xgO3RxoHysR1N1whmquY0lSn2O0VLg==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -1313,8 +1209,8 @@ packages: eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - eslint-import-resolver-typescript@3.10.0: - resolution: {integrity: sha512-aV3/dVsT0/H9BtpNwbaqvl+0xGMRGzncLyhm793NFGvbwGGvzyAykqWZ8oZlZuGwuHkwJjhWJkG1cM3ynvd2pQ==} + eslint-import-resolver-typescript@3.8.2: + resolution: {integrity: sha512-o0nvXxsatYCDTzI1K5b3aYGQ6PjpDGJEVN86zqJw5SEewhmmggfRTotd2dqWr2t2zbeYpIEWGTCkgtUpIEIcaQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -1462,8 +1358,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + fastq@1.19.0: + resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} fdir@6.4.3: resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} @@ -1655,14 +1551,6 @@ 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==} @@ -1715,8 +1603,8 @@ packages: resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} - is-bun-module@2.0.0: - resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} + is-bun-module@1.3.0: + resolution: {integrity: sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==} is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} @@ -2072,6 +1960,11 @@ 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==} @@ -2082,8 +1975,8 @@ packages: next: '>= 10.0.0' react: '>= 16.8.0' - next@15.2.4: - resolution: {integrity: sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==} + next@15.2.3: + resolution: {integrity: sha512-x6eDkZxk2rPpu46E1ZVUWIBhYCLszmUY6fvHBFcbzJ9dD+qRX6vcHusaqqDlnY+VngKzKbAiG2iRCkPbmi8f7w==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -2239,8 +2132,8 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + postcss@8.5.2: + resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -2251,16 +2144,6 @@ 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'} @@ -2406,8 +2289,8 @@ packages: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rfc4648@1.5.4: @@ -2531,8 +2414,8 @@ packages: resolution: {integrity: sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==} engines: {node: '>=10.16.0'} - stable-hash@0.0.5: - resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} + stable-hash@0.0.4: + resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} stack-trace@0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} @@ -2629,10 +2512,10 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - swr@2.3.3: - resolution: {integrity: sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==} + swr@1.3.0: + resolution: {integrity: sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw==} peerDependencies: - react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^16.11.0 || ^17.0.0 || ^18.0.0 synckit@0.9.2: resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} @@ -2674,8 +2557,8 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tinyglobby@0.2.12: - resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + tinyglobby@0.2.11: + resolution: {integrity: sha512-32TmKeeKUahv0Go8WmQgiEp9Y21NuxjwjqiRC1nrUB51YacfSwuB44xgXD+HdIppmMRgjQNPdrHyA6vIybYZ+g==} engines: {node: '>=12.0.0'} tldts-core@6.1.82: @@ -2711,8 +2594,8 @@ packages: resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} engines: {node: '>= 14.0.0'} - ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + ts-api-utils@2.0.1: + resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -2762,20 +2645,12 @@ 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==} @@ -2895,10 +2770,6 @@ 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': {} @@ -2909,18 +2780,7 @@ snapshots: enabled: 2.0.0 kuler: 2.0.0 - '@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': + '@emnapi/runtime@1.3.1': dependencies: tslib: 2.8.1 optional: true @@ -2930,11 +2790,6 @@ 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': @@ -3070,7 +2925,7 @@ snapshots: '@img/sharp-wasm32@0.33.5': dependencies: - '@emnapi/runtime': 1.4.0 + '@emnapi/runtime': 1.3.1 optional: true '@img/sharp-win32-ia32@0.33.5': @@ -3127,41 +2982,34 @@ snapshots: - encoding - utf-8-validate - '@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/env@15.2.3': {} - '@next/env@15.2.4': {} - - '@next/eslint-plugin-next@15.2.4': + '@next/eslint-plugin-next@15.1.7': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.2.4': + '@next/swc-darwin-arm64@15.2.3': optional: true - '@next/swc-darwin-x64@15.2.4': + '@next/swc-darwin-x64@15.2.3': optional: true - '@next/swc-linux-arm64-gnu@15.2.4': + '@next/swc-linux-arm64-gnu@15.2.3': optional: true - '@next/swc-linux-arm64-musl@15.2.4': + '@next/swc-linux-arm64-musl@15.2.3': optional: true - '@next/swc-linux-x64-gnu@15.2.4': + '@next/swc-linux-x64-gnu@15.2.3': optional: true - '@next/swc-linux-x64-musl@15.2.4': + '@next/swc-linux-x64-musl@15.2.3': optional: true - '@next/swc-win32-arm64-msvc@15.2.4': + '@next/swc-win32-arm64-msvc@15.2.3': optional: true - '@next/swc-win32-x64-msvc@15.2.4': + '@next/swc-win32-x64-msvc@15.2.3': optional: true '@nodelib/fs.scandir@2.1.5': @@ -3174,7 +3022,7 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 + fastq: 1.19.0 '@nolyfill/is-core-module@1.0.39': {} @@ -3208,7 +3056,7 @@ snapshots: '@rtsao/scc@1.1.0': {} - '@rushstack/eslint-patch@1.11.0': {} + '@rushstack/eslint-patch@1.10.5': {} '@sindresorhus/is@5.6.0': {} @@ -3286,7 +3134,7 @@ snapshots: '@tailwindcss/node': 4.0.9 '@tailwindcss/oxide': 4.0.9 lightningcss: 1.29.1 - postcss: 8.5.3 + postcss: 8.5.2 tailwindcss: 4.0.9 '@tanstack/react-virtual@3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -3297,11 +3145,6 @@ 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': {} @@ -3371,130 +3214,83 @@ snapshots: dependencies: '@types/node': 22.13.4 - '@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/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)': dependencies: '@eslint-community/regexpp': 4.12.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 + '@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 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.1.0(typescript@5.7.3) + ts-api-utils: 2.0.1(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.29.0(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)': dependencies: - '@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 + '@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 debug: 4.4.0 eslint: 9.21.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.29.0': + '@typescript-eslint/scope-manager@8.24.1': dependencies: - '@typescript-eslint/types': 8.29.0 - '@typescript-eslint/visitor-keys': 8.29.0 + '@typescript-eslint/types': 8.24.1 + '@typescript-eslint/visitor-keys': 8.24.1 - '@typescript-eslint/type-utils@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@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) + '@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) debug: 4.4.0 eslint: 9.21.0(jiti@2.4.2) - ts-api-utils: 2.1.0(typescript@5.7.3) + ts-api-utils: 2.0.1(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.29.0': {} + '@typescript-eslint/types@8.24.1': {} - '@typescript-eslint/typescript-estree@8.29.0(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.24.1(typescript@5.7.3)': dependencies: - '@typescript-eslint/types': 8.29.0 - '@typescript-eslint/visitor-keys': 8.29.0 + '@typescript-eslint/types': 8.24.1 + '@typescript-eslint/visitor-keys': 8.24.1 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.1.0(typescript@5.7.3) + ts-api-utils: 2.0.1(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.29.0(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)': dependencies: - '@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-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: 9.21.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.29.0': + '@typescript-eslint/visitor-keys@8.24.1': dependencies: - '@typescript-eslint/types': 8.29.0 + '@typescript-eslint/types': 8.24.1 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 @@ -3695,7 +3491,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001712: {} + caniuse-lite@1.0.30001706: {} chalk@4.1.2: dependencies: @@ -3900,8 +3696,6 @@ snapshots: depd@2.0.0: {} - dequal@2.0.3: {} - detect-libc@1.0.3: {} detect-libc@2.0.3: @@ -3934,7 +3728,7 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.26.9 csstype: 3.1.3 dom-serializer@2.0.0: @@ -4082,16 +3876,16 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@15.2.4(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3): + eslint-config-next@15.1.7(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3): dependencies: - '@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) + '@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) eslint: 9.21.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - 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-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-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)) @@ -4102,7 +3896,7 @@ snapshots: - eslint-plugin-import-x - supports-color - eslint-config-prettier@10.1.1(eslint@9.21.0(jiti@2.4.2)): + eslint-config-prettier@10.0.2(eslint@9.21.0(jiti@2.4.2)): dependencies: eslint: 9.21.0(jiti@2.4.2) @@ -4114,33 +3908,33 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2)): + eslint-import-resolver-typescript@3.8.2(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: 2.0.0 - stable-hash: 0.0.5 - tinyglobby: 0.2.12 - unrs-resolver: 1.3.3 + is-bun-module: 1.3.0 + stable-hash: 0.0.4 + tinyglobby: 0.2.11 optionalDependencies: - 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-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)) transitivePeerDependencies: - supports-color - 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)): + 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)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.29.0(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) eslint: 9.21.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.8.2(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.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-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)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -4151,7 +3945,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.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)) + 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)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -4163,7 +3957,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.29.0(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) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -4188,14 +3982,14 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - 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): + 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): 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.1.1(eslint@9.21.0(jiti@2.4.2)) + eslint-config-prettier: 10.0.2(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-react-hooks@5.1.0(eslint@9.21.0(jiti@2.4.2)): dependencies: @@ -4321,9 +4115,9 @@ snapshots: fast-levenshtein@2.0.6: {} - fastq@1.19.1: + fastq@1.19.0: dependencies: - reusify: 1.1.0 + reusify: 1.0.4 fdir@6.4.3(picomatch@4.0.2): optionalDependencies: @@ -4539,13 +4333,7 @@ snapshots: i18next@21.10.0: dependencies: - '@babel/runtime': 7.27.0 - - i18next@24.2.3(typescript@5.7.3): - dependencies: - '@babel/runtime': 7.27.0 - optionalDependencies: - typescript: 5.7.3 + '@babel/runtime': 7.26.9 ical-date-parser@4.0.0: {} @@ -4599,7 +4387,7 @@ snapshots: call-bound: 1.0.3 has-tostringtag: 1.0.2 - is-bun-module@2.0.0: + is-bun-module@1.3.0: dependencies: semver: 7.7.1 @@ -4903,9 +4691,11 @@ snapshots: nanoid@3.3.11: {} + nanoid@3.3.8: {} + natural-compare@1.4.0: {} - 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): + 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): dependencies: '@babel/runtime': 7.26.9 '@types/hoist-non-react-statics': 3.3.6 @@ -4913,33 +4703,33 @@ snapshots: hoist-non-react-statics: 3.3.2 i18next: 21.10.0 i18next-fs-backend: 1.2.0 - next: 15.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 15.2.3(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.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@next/env': 15.2.4 + '@next/env': 15.2.3 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 - caniuse-lite: 1.0.30001712 + caniuse-lite: 1.0.30001706 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.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 + '@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 sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' @@ -5081,9 +4871,9 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.3: + postcss@8.5.2: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -5093,11 +4883,6 @@ 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: {} @@ -5164,15 +4949,6 @@ 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 @@ -5191,7 +4967,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.27.0 + '@babel/runtime': 7.26.9 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -5288,7 +5064,7 @@ snapshots: dependencies: lowercase-keys: 3.0.0 - reusify@1.1.0: {} + reusify@1.0.4: {} rfc4648@1.5.4: {} @@ -5450,7 +5226,7 @@ snapshots: cpu-features: 0.0.10 nan: 2.22.0 - stable-hash@0.0.5: {} + stable-hash@0.0.4: {} stack-trace@0.0.10: {} @@ -5560,11 +5336,9 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - swr@2.3.3(react@18.3.1): + swr@1.3.0(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: @@ -5612,7 +5386,7 @@ snapshots: tiny-invariant@1.3.3: {} - tinyglobby@0.2.12: + tinyglobby@0.2.11: dependencies: fdir: 6.4.3(picomatch@4.0.2) picomatch: 4.0.2 @@ -5643,7 +5417,7 @@ snapshots: triple-beam@1.4.1: {} - ts-api-utils@2.1.0(typescript@5.7.3): + ts-api-utils@2.0.1(typescript@5.7.3): dependencies: typescript: 5.7.3 @@ -5708,24 +5482,6 @@ 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 @@ -5737,10 +5493,6 @@ 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 fa71b238..bf1e5f9c 100644 --- a/public/locales/af/common.json +++ b/public/locales/af/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Batterylading", "timeleft": "Oorblywende Tyd" }, - "karakeep": { + "hoarder": { "bookmarks": "Boekmerke", "favorites": "Gunstelinge", "archived": "Geargiveer", diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json index dbe892aa..baa4d593 100644 --- a/public/locales/ar/common.json +++ b/public/locales/ar/common.json @@ -1024,7 +1024,7 @@ "bcharge": "شحن البطارية", "timeleft": "الوقت المتبقي" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json index ccb6f5bb..3c721bce 100644 --- a/public/locales/bg/common.json +++ b/public/locales/bg/common.json @@ -394,7 +394,7 @@ "strelaysrv": { "numActiveSessions": "Сесии", "numConnections": "Connections", - "dataRelayed": "", + "dataRelayed": "Relayed", "transferRate": "Скорост" }, "mastodon": { @@ -1002,7 +1002,7 @@ "argocd": { "apps": "Приложения", "synced": "Synced", - "outOfSync": "", + "outOfSync": "Out Of Sync", "healthy": "Здрав", "degraded": "Деградирани", "progressing": "Progressing", @@ -1024,7 +1024,7 @@ "bcharge": "Заряд на батерията", "timeleft": "Оставащо Време" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json index b70794b3..07b1f611 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" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json index 1d99ec95..e9a8061d 100644 --- a/public/locales/cs/common.json +++ b/public/locales/cs/common.json @@ -85,16 +85,16 @@ "ping": { "error": "Chyba", "ping": "Odezva", - "down": "Výpadek", - "up": "Běží", + "down": "Down", + "up": "Up", "not_available": "Není k dispozici" }, "siteMonitor": { "http_status": "Stav HTTP", "error": "Chyba", "response": "Odpověď", - "down": "Výpadek", - "up": "Běží", + "down": "Down", + "up": "Up", "not_available": "Není k dispozici" }, "emby": { @@ -144,13 +144,13 @@ "uptime": "Doba spuštění", "maxDown": "Max. Down", "maxUp": "Max. Up", - "down": "Výpadek", - "up": "Běží", + "down": "Down", + "up": "Up", "received": "Přijaté", "sent": "Odeslané", "externalIPAddress": "Ext. IP", - "externalIPv6Address": "Veřejná IPv6", - "externalIPv6Prefix": "Věřejná IPv6 prefix" + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Odesílání dat", @@ -178,7 +178,7 @@ "connectedAp": "Připojené APs", "activeUser": "Aktivní zařízení", "alerts": "Upozornění", - "connectedGateways": "Připojené brány", + "connectedGateways": "Connected gateways", "connectedSwitches": "Připojené přepínače" }, "nzbget": { @@ -229,8 +229,8 @@ "seed": "Seedované" }, "develancacheui": { - "cachehitbytes": "Byty nalezené v mezipaměti", - "cachemissbytes": "Byty nenalezené v mezipaměti" + "cachehitbytes": "Cache Hit Bytes", + "cachemissbytes": "Cache Miss Bytes" }, "downloadstation": { "download": "Stahování", @@ -287,7 +287,7 @@ "total": "Celkem", "connected": "", "new_devices": "", - "down_alerts": "Upozornění na výpadek" + "down_alerts": "Down Alerts" }, "pihole": { "queries": "Dotazy", @@ -313,13 +313,13 @@ }, "suwayomi": { "download": "Staženo", - "nondownload": "Nestaženo", + "nondownload": "Non-Downloaded", "read": "Přečteno", "unread": "Nepřečteno", - "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" + "downloadedread": "Downloaded & Read", + "downloadedunread": "Downloaded & Unread", + "nondownloadedread": "Non-Downloaded & Read", + "nondownloadedunread": "Non-Downloaded & Unread" }, "tailscale": { "address": "Adresa", @@ -337,15 +337,15 @@ }, "technitium": { "totalQueries": "Dotazy", - "totalNoError": "Úspěšně", - "totalServerFailure": "Chyby", - "totalNxDomain": "NX domény", - "totalRefused": "Odmítnuto", - "totalAuthoritative": "Autoritativní", - "totalRecursive": "Rekurzivní", - "totalCached": "V mezipaměti", + "totalNoError": "Success", + "totalServerFailure": "Failures", + "totalNxDomain": "NX Domains", + "totalRefused": "Refused", + "totalAuthoritative": "Authoritative", + "totalRecursive": "Recursive", + "totalCached": "Cached", "totalBlocked": "Blokováno", - "totalDropped": "Vynecháno", + "totalDropped": "Dropped", "totalClients": "Klienti" }, "tdarr": { @@ -434,7 +434,7 @@ "load": "Zatížení", "wait": "Počkejte prosím", "temp": "TEPLOTA", - "_temp": "Teplota", + "_temp": "Temp", "warn": "Varováni", "uptime": "BĚŽÍ", "total": "Celkem", @@ -442,12 +442,12 @@ "used": "Využité", "days": "d", "hours": "h", - "crit": "Kritické", + "crit": "Crit", "read": "Přečteno", - "write": "Zápis", - "gpu": "Grafická karta", - "mem": "Pamět RAM", - "swap": "Swap RAM" + "write": "Write", + "gpu": "GPU", + "mem": "Mem", + "swap": "Swap" }, "quicklaunch": { "bookmark": "Záložka", @@ -456,7 +456,7 @@ "custom": "Vlastní", "visit": "Navštivte", "url": "Odkaz", - "searchsuggestion": "Doporučení" + "searchsuggestion": "Suggestion" }, "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": "Běží", + "up": "Up", "pending": "Čeká", - "down": "Výpadek" + "down": "Down" }, "healthchecks": { "new": "Nové", - "up": "Běží", + "up": "Up", "grace": "V období odkladu", - "down": "Výpadek", + "down": "Down", "paused": "Pozastaveno", "status": "Stav", "last_ping": "Poslední ping", @@ -573,14 +573,14 @@ "hdhomerun": { "channels": "Kanály", "hd": "HD", - "tunerCount": "Tuner", - "channelNumber": "Kanál", - "channelNetwork": "Síť", - "signalStrength": "Síla", - "signalQuality": "Kvalita", - "symbolQuality": "Kvalita", + "tunerCount": "Tuners", + "channelNumber": "Channel", + "channelNetwork": "Network", + "signalStrength": "Strength", + "signalQuality": "Quality", + "symbolQuality": "Quality", "networkRate": "Přenosová rychlost", - "clientIP": "Klient" + "clientIP": "Client" }, "scrutiny": { "passed": "Úspěšné", @@ -592,12 +592,12 @@ "total": "Celkem" }, "peanut": { - "battery_charge": "Úroveň baterie", - "ups_load": "Zítěž UPS", - "ups_status": "Stav UPS", + "battery_charge": "Battery Charge", + "ups_load": "UPS Load", + "ups_status": "UPS Status", "online": "Online", - "on_battery": "Na baterii", - "low_battery": "Nízký stav baterie" + "on_battery": "On Battery", + "low_battery": "Low Battery" }, "nextdns": { "wait": "Čekejte prosím", @@ -615,9 +615,9 @@ "streams_xepg": "Kanály XEPG" }, "opendtu": { - "yieldDay": "Dnes", - "absolutePower": "Výkon", - "relativePower": "Výkon %", + "yieldDay": "Today", + "absolutePower": "Power", + "relativePower": "Power %", "limit": "Limit" }, "opnsense": { @@ -646,9 +646,9 @@ "load": "Prům. zatížení", "memory": "Využití paměti", "wanStatus": "Stav WAN", - "up": "Běží", - "down": "Výpadek", - "temp": "Teplota", + "up": "Up", + "down": "Down", + "temp": "Temp", "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": "Událost", + "incident": "Incident", "m": "m" }, "atsumeru": { "series": "Seriály", - "archives": "Archivy", - "chapters": "Kapitoly", - "categories": "Kategorie" + "archives": "Archives", + "chapters": "Chapters", + "categories": "Categories" }, "komga": { "libraries": "Knihovny", @@ -705,13 +705,13 @@ "time": "Čas" }, "firefly": { - "networth": "Čisté jmění", - "budget": "Rozpočet" + "networth": "Net Worth", + "budget": "Budget" }, "grafana": { "dashboards": "Nástěnky", "datasources": "Zdroje dat", - "totalalerts": "Celkový počet upozornění2", + "totalalerts": "Celkový počet upozornění", "alertstriggered": "Spuštěné výstrahy" }, "nextcloud": { @@ -749,7 +749,7 @@ "uptime": "Doba spuštění" }, "ghostfolio": { - "gross_percent_today": "Dnes", + "gross_percent_today": "Today", "gross_percent_1y": "Jeden rok", "gross_percent_max": "Za celou dobu" }, @@ -770,8 +770,8 @@ }, "calibreweb": { "books": "Knihy", - "authors": "Autoři", - "categories": "Kategorie", + "authors": "Authors", + "categories": "Categories", "series": "Seriály" }, "jdownloader": { @@ -785,44 +785,44 @@ "totalFiles": "Soubory" }, "azuredevops": { - "result": "Výsledek", + "result": "Result", "status": "Stav", - "buildId": "ID sestavení", - "succeeded": "Úspěšně", - "notStarted": "Nezahájeno", + "buildId": "Build ID", + "succeeded": "Succeeded", + "notStarted": "Not Started", "failed": "Selhalo", - "canceled": "Zrušeno", - "inProgress": "Probíhá", - "totalPrs": "Celkem PR", - "myPrs": "Moje PR", + "canceled": "Canceled", + "inProgress": "In Progress", + "totalPrs": "Total PRs", + "myPrs": "My PRs", "approved": "Schváleno" }, "gamedig": { "status": "Stav", "online": "Online", "offline": "Offline", - "name": "Jméno", - "map": "Mapa", - "currentPlayers": "Počet hráčů", + "name": "Name", + "map": "Map", + "currentPlayers": "Current players", "players": "Hráči", - "maxPlayers": "Maximální počet hráčů", - "bots": "Boti", + "maxPlayers": "Max players", + "bots": "Bots", "ping": "Odezva" }, "urbackup": { "ok": "Ok", - "errored": "Chyby", - "noRecent": "Zastaralý", - "totalUsed": "Využití úložiště" + "errored": "Errors", + "noRecent": "Out of Date", + "totalUsed": "Used Storage" }, "mealie": { - "recipes": "Recepty", + "recipes": "Recipes", "users": "Uživatelé", - "categories": "Kategorie", - "tags": "Štítky" + "categories": "Categories", + "tags": "Tags" }, "openmediavault": { - "downloading": "Stahování", + "downloading": "Downloading", "total": "Celkem", "running": "Běží", "stopped": "Zastaveno", @@ -831,95 +831,95 @@ }, "openwrt": { "uptime": "Doba spuštění", - "cpuLoad": "Prům. zatížení procesoru (5m)", - "up": "Běží", - "down": "Výpadek", - "bytesTx": "Přeneseno", + "cpuLoad": "CPU Load Avg (5m)", + "up": "Up", + "down": "Down", + "bytesTx": "Transmitted", "bytesRx": "Přijaté" }, "uptimerobot": { "status": "Stav", "uptime": "Doba spuštění", - "lastDown": "Poslední výpadek", - "downDuration": "Trvání výpadku", + "lastDown": "Last Downtime", + "downDuration": "Downtime Duration", "sitesUp": "Stránky Up", "sitesDown": "Stránky Down", "paused": "Pozastaveno", - "notyetchecked": "Zatím nezkontrolováno", - "up": "Běží", - "seemsdown": "Zdá se nedostupný", - "down": "Výpadek", + "notyetchecked": "Not Yet Checked", + "up": "Up", + "seemsdown": "Seems Down", + "down": "Down", "unknown": "Neznámý" }, "calendar": { - "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" + "inCinemas": "In cinemas", + "physicalRelease": "Physical release", + "digitalRelease": "Digital release", + "noEventsToday": "No events for today!", + "noEventsFound": "No events found" }, "romm": { - "platforms": "Platformy", - "totalRoms": "Hry", - "saves": "Uložené", - "states": "Stavy", - "screenshots": "Snímky obrazovky", - "totalfilesize": "Celková velikost" + "platforms": "Platforms", + "totalRoms": "Games", + "saves": "Saves", + "states": "States", + "screenshots": "Screenshots", + "totalfilesize": "Total Size" }, "mailcow": { "domains": "Domény", - "mailboxes": "E-mailové schránky", - "mails": "Maily", + "mailboxes": "Mailboxes", + "mails": "Mails", "storage": "Úložiště" }, "netdata": { - "warnings": "Upozornění", - "criticals": "Kritické" + "warnings": "Warnings", + "criticals": "Criticals" }, "plantit": { - "events": "Události", - "plants": "Rostliny", + "events": "Events", + "plants": "Plants", "photos": "Fotografie", - "species": "Druhy" + "species": "Species" }, "gitea": { - "notifications": "Oznámení", + "notifications": "Notifications", "issues": "Problémy", "pulls": "Pull Requests", - "repositories": "Repozitáře" + "repositories": "Repositories" }, "stash": { - "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", + "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", "movies": "Filmy", - "tags": "Štítky", - "oCount": "Počet O" + "tags": "Tags", + "oCount": "O Count" }, "tandoor": { "users": "Uživatelé", - "recipes": "Recepty", - "keywords": "Klíčová slova" + "recipes": "Recipes", + "keywords": "Keywords" }, "homebox": { - "items": "Položky", - "totalWithWarranty": "Se zárukou", - "locations": "Lokality", - "labels": "Štítky", + "items": "Items", + "totalWithWarranty": "With Warranty", + "locations": "Locations", + "labels": "Labels", "users": "Uživatelé", - "totalValue": "Celková hodnota" + "totalValue": "Total Value" }, "crowdsec": { "alerts": "Upozornění", - "bans": "Bany" + "bans": "Bans" }, "wgeasy": { "connected": "", @@ -928,10 +928,10 @@ "total": "Celkem" }, "swagdashboard": { - "proxied": "Přes proxy", - "auth": "S ověřením", - "outdated": "Zastaralé", - "banned": "Zabanován" + "proxied": "Proxied", + "auth": "With Auth", + "outdated": "Outdated", + "banned": "Banned" }, "myspeed": { "ping": "Odezva", @@ -939,46 +939,46 @@ "upload": "Nahrávání" }, "stocks": { - "stocks": "Akcie", - "loading": "Načítání", - "open": "Otevřeno - US trh", - "closed": "Uzavřeno - US trh", - "invalidConfiguration": "Neplatná konfigurace" + "stocks": "Stocks", + "loading": "Loading", + "open": "Open - US Market", + "closed": "Closed - US Market", + "invalidConfiguration": "Invalid Configuration" }, "frigate": { - "cameras": "Kamery", + "cameras": "Cameras", "uptime": "Doba spuštění", "version": "Verze" }, "linkwarden": { - "links": "Linky", - "collections": "Sbírky", - "tags": "Štítky" + "links": "Links", + "collections": "Collections", + "tags": "Tags" }, "zabbix": { - "unclassified": "Neklasifikováno", + "unclassified": "Not classified", "information": "Informace", - "warning": "Upozornění", - "average": "Průměr", - "high": "Vysoký", - "disaster": "Katastrofa" + "warning": "Warning", + "average": "Average", + "high": "High", + "disaster": "Disaster" }, "lubelogger": { - "vehicle": "Vozidlo", - "vehicles": "Vozidla", - "serviceRecords": "Servisní záznamy", - "reminders": "Připomenutí", - "nextReminder": "Další připomenutí", - "none": "Žádné" + "vehicle": "Vehicle", + "vehicles": "Vehicles", + "serviceRecords": "Service Records", + "reminders": "Reminders", + "nextReminder": "Next Reminder", + "none": "None" }, "vikunja": { - "projects": "Aktivní projekty", - "tasks7d": "Úkoly k dokončení tento týden", - "tasksOverdue": "Zpožděné úkoly", - "tasksInProgress": "Probíhají úkoly" + "projects": "Active Projects", + "tasks7d": "Tasks Due This Week", + "tasksOverdue": "Overdue Tasks", + "tasksInProgress": "Tasks In Progress" }, "headscale": { - "name": "Jméno", + "name": "Name", "address": "Adresa", "last_seen": "Naposledy viděno", "status": "Stav", @@ -986,10 +986,10 @@ "offline": "Offline" }, "beszel": { - "name": "Jméno", - "systems": "Systém", - "up": "Běží", - "down": "Výpadek", + "name": "Name", + "systems": "Systems", + "up": "Up", + "down": "Down", "paused": "Pozastaveno", "pending": "Čeká", "status": "Stav", @@ -997,50 +997,50 @@ "cpu": "CPU", "memory": "RAM", "disk": "Disk", - "network": "Síť" + "network": "NET" }, "argocd": { - "apps": "Aplikace", - "synced": "Synchronizováno", - "outOfSync": "Nesynchronizováno", + "apps": "Apps", + "synced": "Synced", + "outOfSync": "Out Of Sync", "healthy": "Zdravý", - "degraded": "Degradováno", - "progressing": "Probíhá", + "degraded": "Degraded", + "progressing": "Progressing", "missing": "Chybějící", - "suspended": "Pozastaveno" + "suspended": "Suspended" }, "spoolman": { - "loading": "Načítání" + "loading": "Loading" }, "gitlab": { - "groups": "Skupiny", + "groups": "Groups", "issues": "Problémy", - "merges": "Žádosti o sloučení", - "projects": "Projekty" + "merges": "Merge Requests", + "projects": "Projects" }, "apcups": { "status": "Stav", "load": "Zatížení", - "bcharge": "Úroveň baterie", + "bcharge": "Battery Charge", "timeleft": "Zbývající čas" }, - "karakeep": { - "bookmarks": "Záložky", - "favorites": "Oblíbené", - "archived": "Archivováno", - "highlights": "Zvýraznění", - "lists": "Seznamy", - "tags": "Štítky" + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tags" }, "slskd": { - "slskStatus": "Síť", + "slskStatus": "Network", "connected": "", "disconnected": "Odpojeno", - "updateStatus": "Aktualizace", + "updateStatus": "Update", "update_yes": "Dostupné", "update_no": "Žádné", - "downloads": "Stažení", - "uploads": "Nahrávání", + "downloads": "Downloads", + "uploads": "Uploads", "sharedFiles": "Soubory" } } diff --git a/public/locales/da/common.json b/public/locales/da/common.json index c7115af3..901d0ce4 100644 --- a/public/locales/da/common.json +++ b/public/locales/da/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Batteriniveau", "timeleft": "Resterende tid" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 6ea5a440..94fb91aa 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -665,8 +665,8 @@ "storage": "Speicher" }, "uptimekuma": { - "up": "Up", - "down": "Down", + "up": "Seiten verfügbar", + "down": "Seiten nicht verfügbar", "uptime": "Betriebszeit", "incident": "Vorfall", "m": "min" @@ -744,8 +744,8 @@ "targets_total": "Alle Ziele" }, "gatus": { - "up": "Up", - "down": "Down", + "up": "Seiten verfügbar", + "down": "Seiten nicht verfügbar", "uptime": "Betriebszeit" }, "ghostfolio": { @@ -842,8 +842,8 @@ "uptime": "Betriebszeit", "lastDown": "Letzter Ausfall", "downDuration": "Ausfalldauer", - "sitesUp": "Up", - "sitesDown": "Down", + "sitesUp": "Seiten verfügbar", + "sitesDown": "Seiten nicht verfügbar", "paused": "Pausiert", "notyetchecked": "Noch nicht geprüft", "up": "Online", @@ -1024,12 +1024,12 @@ "bcharge": "Akkuladung", "timeleft": "Verbleibende Zeit" }, - "karakeep": { - "bookmarks": "Bookmarks", - "favorites": "Favorites", - "archived": "Archived", + "hoarder": { + "bookmarks": "Lesezeichen", + "favorites": "Favoriten", + "archived": "Archiviert", "highlights": "Highlights", - "lists": "Lists", + "lists": "Listen", "tags": "Schlagwörter" }, "slskd": { diff --git a/public/locales/el/common.json b/public/locales/el/common.json index ea1539d9..b1cbe307 100644 --- a/public/locales/el/common.json +++ b/public/locales/el/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "Χρόνος που απομένει" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 09b9c2d3..4a9c33d5 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -1024,7 +1024,7 @@ "bcharge":"Battery Charge", "timeleft":"Time Left" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/eo/common.json b/public/locales/eo/common.json index f943d1c8..908bd124 100644 --- a/public/locales/eo/common.json +++ b/public/locales/eo/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "Time Left" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/es/common.json b/public/locales/es/common.json index 76b03275..a5ac67ed 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": "IPv6 ext.", - "externalIPv6Prefix": "Prefijo IPv6 ext." + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstream (desarrollo de software)", @@ -178,7 +178,7 @@ "connectedAp": "AP conectados", "activeUser": "Dispositivos activos", "alerts": "Alertas", - "connectedGateways": "Puertas de enlace conectadas", + "connectedGateways": "Connected gateways", "connectedSwitches": "Conmutadores conectados" }, "nzbget": { @@ -705,8 +705,8 @@ "time": "Tiempo" }, "firefly": { - "networth": "Patrimonio neto", - "budget": "Presupuesto" + "networth": "Net Worth", + "budget": "Budget" }, "grafana": { "dashboards": "Tableros", @@ -886,7 +886,7 @@ "notifications": "Notificaciones", "issues": "Números", "pulls": "Solicitudes de cambios", - "repositories": "Repositorios" + "repositories": "Repositories" }, "stash": { "scenes": "Escenas", @@ -1024,7 +1024,7 @@ "bcharge": "Carga de la batería", "timeleft": "Tiempo restante" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", @@ -1036,11 +1036,11 @@ "slskStatus": "Red", "connected": "Conectado", "disconnected": "Desconectado", - "updateStatus": "Actualización", + "updateStatus": "Update", "update_yes": "Disponible", "update_no": "Actualizado", - "downloads": "Descargas", - "uploads": "Subidas", + "downloads": "Downloads", + "uploads": "Uploads", "sharedFiles": "Archivos" } } diff --git a/public/locales/eu/common.json b/public/locales/eu/common.json index 02d1150c..f0654ebb 100644 --- a/public/locales/eu/common.json +++ b/public/locales/eu/common.json @@ -1024,12 +1024,12 @@ "bcharge": "Battery Charge", "timeleft": "Time Left" }, - "karakeep": { - "bookmarks": "Bookmarks", - "favorites": "Favorites", - "archived": "Archived", + "hoarder": { + "bookmarks": "Laster-markak", + "favorites": "Gogokoak", + "archived": "Artxibatuta", "highlights": "Highlights", - "lists": "Lists", + "lists": "Zerrendak", "tags": "Etiketak" }, "slskd": { diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json index 6139aea6..b1ff23b4 100644 --- a/public/locales/fi/common.json +++ b/public/locales/fi/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "Aikaa jäljellä" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index e7bc248a..f0cd54f6 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -85,16 +85,16 @@ "ping": { "error": "Erreur", "ping": "Latence", - "down": "Down", - "up": "Up", + "down": "Bas", + "up": "Haut", "not_available": "Non disponible" }, "siteMonitor": { "http_status": "Statut HTTP", "error": "Erreur", "response": "Réponse", - "down": "Down", - "up": "Up", + "down": "Bas", + "up": "Haut", "not_available": "Non disponible" }, "emby": { @@ -142,10 +142,10 @@ "connectionStatusDisconnected": "Déconnecté", "connectionStatusConnected": "Connecté", "uptime": "Démarré depuis", - "maxDown": "Max. Down", - "maxUp": "Max. Up", - "down": "Down", - "up": "Up", + "maxDown": "Max. Bas", + "maxUp": "Max. Haut", + "down": "Bas", + "up": "Haut", "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": "Up", + "up": "Haut", "pending": "En attente", - "down": "Down" + "down": "Bas" }, "healthchecks": { "new": "Nouveau", - "up": "Up", + "up": "Haut", "grace": "En Période de Grâce", - "down": "Down", + "down": "Bas", "paused": "En Pause", "status": "Statut", "last_ping": "Dernier Ping", @@ -646,8 +646,8 @@ "load": "Charge moy.", "memory": "Util. Mém.", "wanStatus": "Statut WAN", - "up": "Up", - "down": "Down", + "up": "Haut", + "down": "Bas", "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": "Up", - "down": "Down", + "up": "Haut", + "down": "Bas", "bytesTx": "Transmis", "bytesRx": "Reçu" }, @@ -846,9 +846,9 @@ "sitesDown": "Hors ligne", "paused": "En Pause", "notyetchecked": "Non vérifié", - "up": "Up", + "up": "Haut", "seemsdown": "Semble hors ligne", - "down": "Down", + "down": "Bas", "unknown": "Inconnu" }, "calendar": { @@ -886,7 +886,7 @@ "notifications": "Notifications", "issues": "Anomalies", "pulls": "Demandes de tirage", - "repositories": "Dépôts" + "repositories": "Repositories" }, "stash": { "scenes": "Scènes", @@ -988,8 +988,8 @@ "beszel": { "name": "Nom", "systems": "Systèmes", - "up": "Up", - "down": "Down", + "up": "Haut", + "down": "Bas", "paused": "En Pause", "pending": "En attente", "status": "Statut", @@ -1024,7 +1024,7 @@ "bcharge": "Charge de la batterie", "timeleft": "Temps restant" }, - "karakeep": { + "hoarder": { "bookmarks": "Marque-pages", "favorites": "Favoris", "archived": "Archivé", diff --git a/public/locales/he/common.json b/public/locales/he/common.json index fb338931..2751430c 100644 --- a/public/locales/he/common.json +++ b/public/locales/he/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "זמן שנותר" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json index 8897f217..19f419cd 100644 --- a/public/locales/hi/common.json +++ b/public/locales/hi/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "Time Left" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json index 036f746b..2b1c013c 100644 --- a/public/locales/hr/common.json +++ b/public/locales/hr/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Napunjenost baterije", "timeleft": "Preostalo vrijeme" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json index a3ab6bf8..f6b5e183 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ő" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/id/common.json b/public/locales/id/common.json index 9babbe5a..fa4d6459 100644 --- a/public/locales/id/common.json +++ b/public/locales/id/common.json @@ -1024,12 +1024,12 @@ "bcharge": "Sisa Baterai", "timeleft": "Sisa Waktu" }, - "karakeep": { - "bookmarks": "Bookmarks", - "favorites": "Favorites", - "archived": "Archived", - "highlights": "Highlights", - "lists": "Lists", + "hoarder": { + "bookmarks": "Markah", + "favorites": "Favorit", + "archived": "Diarsipkan", + "highlights": "Sorotan", + "lists": "Daftar", "tags": "Tag" }, "slskd": { diff --git a/public/locales/it/common.json b/public/locales/it/common.json index 6e870a09..4b0672f9 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": "IPv6 Esterno", - "externalIPv6Prefix": "Prefisso IPv6 Esterno" + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstream", @@ -178,7 +178,7 @@ "connectedAp": "AP Connessi", "activeUser": "Dispositivi attivi", "alerts": "Allarmi", - "connectedGateways": "Gateway connessi", + "connectedGateways": "Connected gateways", "connectedSwitches": "Switch connessi" }, "nzbget": { @@ -338,7 +338,7 @@ "technitium": { "totalQueries": "Richieste", "totalNoError": "Successo", - "totalServerFailure": "Fallimenti", + "totalServerFailure": "Failures", "totalNxDomain": "NX Domains", "totalRefused": "Refused", "totalAuthoritative": "Authoritative", @@ -943,7 +943,7 @@ "loading": "Caricamento", "open": "Open - US Market", "closed": "Closed - US Market", - "invalidConfiguration": "Configurazione non valida" + "invalidConfiguration": "Invalid Configuration" }, "frigate": { "cameras": "Cameras", @@ -959,7 +959,7 @@ "unclassified": "Not classified", "information": "Informazioni", "warning": "Warning", - "average": "Media", + "average": "Average", "high": "High", "disaster": "Disaster" }, @@ -987,7 +987,7 @@ }, "beszel": { "name": "Nome", - "systems": "Sistemi", + "systems": "Systems", "up": "Up", "down": "Down", "paused": "In Pausa", @@ -996,15 +996,15 @@ "updated": "Aggiornato", "cpu": "CPU", "memory": "MEM", - "disk": "Disco", + "disk": "Disk", "network": "NET" }, "argocd": { - "apps": "Applicazioni", - "synced": "Sincronizzato", - "outOfSync": "Non Sincronizzato", + "apps": "Apps", + "synced": "Synced", + "outOfSync": "Out Of Sync", "healthy": "Sano", - "degraded": "Degradato", + "degraded": "Degraded", "progressing": "Progressing", "missing": "Mancanti", "suspended": "Suspended" @@ -1013,10 +1013,10 @@ "loading": "Caricamento" }, "gitlab": { - "groups": "Gruppi", + "groups": "Groups", "issues": "Problemi", - "merges": "Richieste di merge", - "projects": "Progetti" + "merges": "Merge Requests", + "projects": "Projects" }, "apcups": { "status": "Stato", @@ -1024,12 +1024,12 @@ "bcharge": "Carica Batteria", "timeleft": "Tempo Rimanente" }, - "karakeep": { - "bookmarks": "Segnalibri", - "favorites": "Preferiti", + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", "archived": "Archived", "highlights": "Highlights", - "lists": "Liste", + "lists": "Lists", "tags": "Tag" }, "slskd": { @@ -1039,7 +1039,7 @@ "updateStatus": "Update", "update_yes": "Disponibili", "update_no": "Aggiornato", - "downloads": "Download", + "downloads": "Downloads", "uploads": "Uploads", "sharedFiles": "File" } diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json index 5e963a77..58869e84 100644 --- a/public/locales/ja/common.json +++ b/public/locales/ja/common.json @@ -1024,7 +1024,7 @@ "bcharge": "バッテリー充電", "timeleft": "残り時間" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/ko/common.json b/public/locales/ko/common.json index 8bfe4276..5f5523ff 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": "달", - "days": "일", - "hours": "시", - "minutes": "분", - "seconds": "초" + "months": "mo", + "days": "d", + "hours": "h", + "minutes": "m", + "seconds": "s" }, "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": "일", - "hours": "시", + "days": "d", + "hours": "h", "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": "순자산", - "budget": "예산" + "networth": "Net Worth", + "budget": "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": "남은 시간" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/lv/common.json b/public/locales/lv/common.json index 0238d143..85d9a359 100644 --- a/public/locales/lv/common.json +++ b/public/locales/lv/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "Atlikušais laiks" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json index 8c0e5509..4ebfd6d8 100644 --- a/public/locales/ms/common.json +++ b/public/locales/ms/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Bateri dicas", "timeleft": "Masa Tinggal" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index 63a2d50e..e26ad05e 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Batterij opladen", "timeleft": "Resterende Tijd" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/no/common.json b/public/locales/no/common.json index dee02141..67710fe1 100644 --- a/public/locales/no/common.json +++ b/public/locales/no/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Batteriladning", "timeleft": "Gjenstående tid" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index 3a956aaf..1316d5c9 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": "Zewn. IPv6", - "externalIPv6Prefix": "Zewn. prefiks IPv6" + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", @@ -705,8 +705,8 @@ "time": "Czas" }, "firefly": { - "networth": "Wartość netto", - "budget": "Budżet" + "networth": "Net Worth", + "budget": "Budget" }, "grafana": { "dashboards": "Panel główny", @@ -886,7 +886,7 @@ "notifications": "Powiadomienia", "issues": "Zgłoszenia", "pulls": "Żądania Pull", - "repositories": "Repozytoria" + "repositories": "Repositories" }, "stash": { "scenes": "Sceny", @@ -1024,12 +1024,12 @@ "bcharge": "Stan baterii", "timeleft": "Pozostało" }, - "karakeep": { - "bookmarks": "Zakładki", - "favorites": "Ulubione", - "archived": "Zarchiwizowane", - "highlights": "Wyróżnione", - "lists": "Listy", + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", "tags": "Tagi" }, "slskd": { diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index c392c17d..acbf2d96 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Carga da bateria", "timeleft": "Tempo Restante" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/pt_BR/common.json b/public/locales/pt_BR/common.json index ee426052..92a1dfcf 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": "Repositórios" + "repositories": "Repositories" }, "stash": { "scenes": "Cenas", @@ -1024,8 +1024,8 @@ "bcharge": "Carga da bateria", "timeleft": "Tempo restante" }, - "karakeep": { - "bookmarks": "Marcadores", + "hoarder": { + "bookmarks": "Favoritos", "favorites": "Favoritos", "archived": "Arquivados", "highlights": "Destaques", @@ -1036,7 +1036,7 @@ "slskStatus": "Rede", "connected": "Conectado", "disconnected": "Desconectado", - "updateStatus": "Atualize", + "updateStatus": "Update", "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 9dcd2921..b0eb7747 100644 --- a/public/locales/ro/common.json +++ b/public/locales/ro/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "Timp rămas" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index d6cabab4..e1e1a94f 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": "Осталось" }, - "karakeep": { + "hoarder": { "bookmarks": "Закладки", "favorites": "Избранное", - "archived": "Архив", + "archived": "Архивированное", "highlights": "События", "lists": "Список", "tags": "Теги" diff --git a/public/locales/sk/common.json b/public/locales/sk/common.json index a267ad81..9c154cce 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" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/sl/common.json b/public/locales/sl/common.json index ba6f07b9..a32aa0dd 100644 --- a/public/locales/sl/common.json +++ b/public/locales/sl/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Napolnjenost baterije", "timeleft": "Preostali čas" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json index 5314dc2b..4e3f5fb0 100644 --- a/public/locales/sr/common.json +++ b/public/locales/sr/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "Time Left" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index d389a937..caa18acd 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "Tid kvar" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/te/common.json b/public/locales/te/common.json index e980d4ba..e34d6fae 100644 --- a/public/locales/te/common.json +++ b/public/locales/te/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "మిగిలి వున్న సమయం" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/th/common.json b/public/locales/th/common.json index 1d88948b..b37b662d 100644 --- a/public/locales/th/common.json +++ b/public/locales/th/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Battery Charge", "timeleft": "Time Left" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json index 19bd4540..815b9150 100644 --- a/public/locales/tr/common.json +++ b/public/locales/tr/common.json @@ -1024,7 +1024,7 @@ "bcharge": "Pil Yüzdesi", "timeleft": "Kalan Zaman" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/uk/common.json b/public/locales/uk/common.json index 419d77c0..3412d591 100644 --- a/public/locales/uk/common.json +++ b/public/locales/uk/common.json @@ -120,7 +120,7 @@ "grid_power": "Сітка", "home_power": "Споживання", "charge_power": "Зарядний пристрій", - "kilowatt": "кВт" + "kilowatt": "kW" }, "flood": { "download": "Завантажено", @@ -149,8 +149,8 @@ "received": "Отримано", "sent": "Надіслано", "externalIPAddress": "Зовнішній IP", - "externalIPv6Address": "Зовнішній IPv6", - "externalIPv6Prefix": "Зовнішній Префікс IPv6-" + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Потоки", @@ -178,7 +178,7 @@ "connectedAp": "Підключені точки доступу", "activeUser": "Активні пристрої", "alerts": "Оповіщення", - "connectedGateways": "Підключені шлюзи", + "connectedGateways": "Connected gateways", "connectedSwitches": "Підключені перемикачі" }, "nzbget": { @@ -420,8 +420,8 @@ }, "authentik": { "users": "Користувачі", - "loginsLast24H": "Вхід (протягом доби)", - "failedLoginsLast24H": "Невдалі входи (протягом доби)" + "loginsLast24H": "Вхід (24 години)", + "failedLoginsLast24H": "Невдалі входи (24 години)" }, "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": "Невиконані завдання за останню добу", + "failed_tasks_24h": "Невиконані завдання 24 години", "cpu_usage": "ЦП", "memory_usage": "Пам'ять" }, @@ -705,8 +705,8 @@ "time": "Час" }, "firefly": { - "networth": "Чисті Активи", - "budget": "Бюджет" + "networth": "Net Worth", + "budget": "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": "Залишилось" }, - "karakeep": { - "bookmarks": "Закладки", - "favorites": "Обране", - "archived": "Заархівовані", - "highlights": "Основні моменти", - "lists": "Списки", + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", "tags": "Теги" }, "slskd": { "slskStatus": "Мережа", "connected": "З'єднано", "disconnected": "Відключено", - "updateStatus": "Оновити", + "updateStatus": "Update", "update_yes": "Доступно", "update_no": "Актуально", - "downloads": "Завантаження", - "uploads": "Вивантаження", + "downloads": "Downloads", + "uploads": "Uploads", "sharedFiles": "Файли" } } diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index efe0c9ab..7e8974f8 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" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json index 9dd81cfd..dfe604dd 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, bytes(bits: true; binary: true)}}", + "bibyterate": "{{value, rate(bits: false; binary: true)}}", "bitrate": "{{value, rate(bits: true)}}", - "bibitrate": "{{value, bytes(bits: true; binary: true)}}", + "bibitrate": "{{value, rate(bits: true; binary: true)}}", "percent": "{{value, percent}}", "number": "{{value, number}}", "ms": "{{value, number}}", @@ -120,7 +120,7 @@ "grid_power": "電網", "home_power": "電源使用率", "charge_power": "充電", - "kilowatt": "千瓦" + "kilowatt": "kW" }, "flood": { "download": "下載速率", @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "待辦的斷開", "connectionStatusDisconnecting": "正在中斷連線", "connectionStatusDisconnected": "連接已中斷", - "connectionStatusConnected": "已連線", + "connectionStatusConnected": "Connected", "uptime": "運行時間", "maxDown": "最大下載速率", "maxUp": "最大上傳速率", @@ -149,8 +149,8 @@ "received": "已接收", "sent": "已送出", "externalIPAddress": "外部 IP", - "externalIPv6Address": "外部 IP", - "externalIPv6Prefix": "擴展 IPv-前綴" + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "上行", @@ -178,7 +178,7 @@ "connectedAp": "已連接的存取點", "activeUser": "在線裝置", "alerts": "警示", - "connectedGateways": "已連繫的網關", + "connectedGateways": "Connected gateways", "connectedSwitches": "已連接的交換器" }, "nzbget": { @@ -229,8 +229,8 @@ "seed": "已完成下載" }, "develancacheui": { - "cachehitbytes": "快取未命中位元組", - "cachemissbytes": "快取未命中位元組" + "cachehitbytes": "Cache Hit Bytes", + "cachemissbytes": "Cache Miss Bytes" }, "downloadstation": { "download": "下載速率", @@ -285,9 +285,9 @@ }, "netalertx": { "total": "全部", - "connected": "已連線", - "new_devices": "新裝置", - "down_alerts": "離線警告" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "查詢", @@ -313,13 +313,13 @@ }, "suwayomi": { "download": "下載咗", - "nondownload": "已下載", + "nondownload": "Non-Downloaded", "read": "已讀", "unread": "未讀", - "downloadedread": "已下載且已閱讀", - "downloadedunread": "已下載且未閱讀", - "nondownloadedread": "未下載但已閱讀", - "nondownloadedunread": "未下載且未閱讀" + "downloadedread": "Downloaded & Read", + "downloadedunread": "Downloaded & Unread", + "nondownloadedread": "Non-Downloaded & Read", + "nondownloadedunread": "Non-Downloaded & Unread" }, "tailscale": { "address": "位址", @@ -337,15 +337,15 @@ }, "technitium": { "totalQueries": "查詢", - "totalNoError": "成功", - "totalServerFailure": "失敗", - "totalNxDomain": "網域", - "totalRefused": "對方拒投誠信", - "totalAuthoritative": "權威的", - "totalRecursive": "遞迴", - "totalCached": "快取", + "totalNoError": "Success", + "totalServerFailure": "Failures", + "totalNxDomain": "NX Domains", + "totalRefused": "Refused", + "totalAuthoritative": "Authoritative", + "totalRecursive": "Recursive", + "totalCached": "Cached", "totalBlocked": "封鎖", - "totalDropped": "丟棄", + "totalDropped": "Dropped", "totalClients": "客戶端" }, "tdarr": { @@ -705,8 +705,8 @@ "time": "時間" }, "firefly": { - "networth": "淨值", - "budget": "預算" + "networth": "Net Worth", + "budget": "Budget" }, "grafana": { "dashboards": "控制面板", @@ -860,16 +860,16 @@ }, "romm": { "platforms": "平台", - "totalRoms": "遊戲", - "saves": "已儲存", - "states": "州", - "screenshots": "螢幕截圖", - "totalfilesize": "大小總計" + "totalRoms": "Games", + "saves": "Saves", + "states": "States", + "screenshots": "Screenshots", + "totalfilesize": "Total Size" }, "mailcow": { "domains": "域", - "mailboxes": "信箱", - "mails": "郵件數", + "mailboxes": "Mailboxes", + "mails": "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": "已代理", - "auth": "已授權", - "outdated": "須更新", - "banned": "已封鎖" + "proxied": "Proxied", + "auth": "With Auth", + "outdated": "Outdated", + "banned": "Banned" }, "myspeed": { "ping": "延遲", @@ -939,43 +939,43 @@ "upload": "上傳速率" }, "stocks": { - "stocks": "股票", - "loading": "載入中 ", - "open": "美國市場已開放", - "closed": "美國市場已關閉", - "invalidConfiguration": "無效的設定" + "stocks": "Stocks", + "loading": "Loading", + "open": "Open - US Market", + "closed": "Closed - US Market", + "invalidConfiguration": "Invalid Configuration" }, "frigate": { - "cameras": " ", + "cameras": "Cameras", "uptime": "運行時間", "version": "版本" }, "linkwarden": { - "links": " ", - "collections": "收藏庫", + "links": "Links", + "collections": "Collections", "tags": "標籤" }, "zabbix": { - "unclassified": "未分類", + "unclassified": "Not classified", "information": "資訊", - "warning": "警告", - "average": "平均", - "high": "高優先權", - "disaster": "災難" + "warning": "Warning", + "average": "Average", + "high": "High", + "disaster": "Disaster" }, "lubelogger": { - "vehicle": "車輛", - "vehicles": "車輛", - "serviceRecords": "保養記錄", - "reminders": "提醒", - "nextReminder": "下一個提醒", - "none": "沒有" + "vehicle": "Vehicle", + "vehicles": "Vehicles", + "serviceRecords": "Service Records", + "reminders": "Reminders", + "nextReminder": "Next Reminder", + "none": "None" }, "vikunja": { - "projects": "正在應用的項目", - "tasks7d": "本週到期任務", - "tasksOverdue": "逾期處理", - "tasksInProgress": "正在執行的任務" + "projects": "Active Projects", + "tasks7d": "Tasks Due This Week", + "tasksOverdue": "Overdue Tasks", + "tasksInProgress": "Tasks In Progress" }, "headscale": { "name": "名稱", @@ -987,7 +987,7 @@ }, "beszel": { "name": "名稱", - "systems": "系統", + "systems": "Systems", "up": "在線", "down": "離線", "paused": "擱置中", @@ -996,27 +996,27 @@ "updated": "已更新", "cpu": "CPU", "memory": "記憶體", - "disk": "儲存空間", - "network": "網路" + "disk": "Disk", + "network": "NET" }, "argocd": { - "apps": "應用程式", - "synced": "已同步", - "outOfSync": "不同步", + "apps": "Apps", + "synced": "Synced", + "outOfSync": "Out Of Sync", "healthy": "健康", - "degraded": "已降級", - "progressing": "進度", + "degraded": "Degraded", + "progressing": "Progressing", "missing": "缺少", - "suspended": "暫停" + "suspended": "Suspended" }, "spoolman": { - "loading": "載入中 " + "loading": "Loading" }, "gitlab": { - "groups": "群組", + "groups": "Groups", "issues": "出版", - "merges": "合併請求", - "projects": "專" + "merges": "Merge Requests", + "projects": "Projects" }, "apcups": { "status": "狀況", @@ -1024,23 +1024,23 @@ "bcharge": "充電", "timeleft": "用時" }, - "karakeep": { - "bookmarks": "書籤", - "favorites": "我的最愛", - "archived": "已存檔", - "highlights": "標記", - "lists": "列表", + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", "tags": "標籤" }, "slskd": { "slskStatus": "網絡", - "connected": "已連線", + "connected": "Connected", "disconnected": "連接已中斷", - "updateStatus": "更新", + "updateStatus": "Update", "update_yes": "可用", "update_no": "已更新至最新", - "downloads": "下載", - "uploads": "上傳", + "downloads": "Downloads", + "uploads": "Uploads", "sharedFiles": "檔案" } } diff --git a/public/locales/zh-Hans/common.json b/public/locales/zh-Hans/common.json index be53b16b..064e2c1c 100644 --- a/public/locales/zh-Hans/common.json +++ b/public/locales/zh-Hans/common.json @@ -1024,7 +1024,7 @@ "bcharge": "充电中", "timeleft": "剩余时间" }, - "karakeep": { + "hoarder": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json index 7abcd3a2..eb1f7423 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, bytes(bits: true; binary: true)}}", + "bibyterate": "{{value, rate(bits: false; binary: true)}}", "bitrate": "{{value, rate(bits: true)}}", - "bibitrate": "{{value, bytes(bits: true; binary: true)}}", + "bibitrate": "{{value, rate(bits: true; binary: true)}}", "percent": "{{value, percent}}", "number": "{{value, number}}", "ms": "{{value, number}}", @@ -120,7 +120,7 @@ "grid_power": "電網", "home_power": "電源使用率", "charge_power": "充電", - "kilowatt": "千瓦" + "kilowatt": "kW" }, "flood": { "download": "下載速率", @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "待辦的斷開", "connectionStatusDisconnecting": "正在中斷連線", "connectionStatusDisconnected": "連接已中斷", - "connectionStatusConnected": "已連線", + "connectionStatusConnected": "Connected", "uptime": "運行時間", "maxDown": "最大下載速率", "maxUp": "最大上傳速率", @@ -149,8 +149,8 @@ "received": "已接收", "sent": "已送出", "externalIPAddress": "外部 IP", - "externalIPv6Address": "外部 IP", - "externalIPv6Prefix": "擴展 IPv-前綴" + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "上行", @@ -178,7 +178,7 @@ "connectedAp": "已連接的存取點", "activeUser": "在線裝置", "alerts": "警示", - "connectedGateways": "已連繫的網關", + "connectedGateways": "Connected gateways", "connectedSwitches": "已連接的交換器" }, "nzbget": { @@ -229,8 +229,8 @@ "seed": "已完成下載" }, "develancacheui": { - "cachehitbytes": "快取未命中位元組", - "cachemissbytes": "快取未命中位元組" + "cachehitbytes": "Cache Hit Bytes", + "cachemissbytes": "Cache Miss Bytes" }, "downloadstation": { "download": "下載速率", @@ -285,9 +285,9 @@ }, "netalertx": { "total": "全部", - "connected": "已連線", - "new_devices": "新裝置", - "down_alerts": "離線警告" + "connected": "Connected", + "new_devices": "New Devices", + "down_alerts": "Down Alerts" }, "pihole": { "queries": "查詢", @@ -313,13 +313,13 @@ }, "suwayomi": { "download": "已下載", - "nondownload": "已下載", + "nondownload": "Non-Downloaded", "read": "已讀", "unread": "未讀", - "downloadedread": "已下載且已閱讀", - "downloadedunread": "已下載且未閱讀", - "nondownloadedread": "未下載但已閱讀", - "nondownloadedunread": "未下載且未閱讀" + "downloadedread": "Downloaded & Read", + "downloadedunread": "Downloaded & Unread", + "nondownloadedread": "Non-Downloaded & Read", + "nondownloadedunread": "Non-Downloaded & Unread" }, "tailscale": { "address": "位址", @@ -337,15 +337,15 @@ }, "technitium": { "totalQueries": "查詢", - "totalNoError": "成功", - "totalServerFailure": "失敗", - "totalNxDomain": "網域", - "totalRefused": "對方拒投誠信", - "totalAuthoritative": "權威的", - "totalRecursive": "遞迴", - "totalCached": "快取", + "totalNoError": "Success", + "totalServerFailure": "Failures", + "totalNxDomain": "NX Domains", + "totalRefused": "Refused", + "totalAuthoritative": "Authoritative", + "totalRecursive": "Recursive", + "totalCached": "Cached", "totalBlocked": "已阻擋", - "totalDropped": "丟棄", + "totalDropped": "Dropped", "totalClients": "客戶端" }, "tdarr": { @@ -705,8 +705,8 @@ "time": "時間" }, "firefly": { - "networth": "淨值", - "budget": "預算" + "networth": "Net Worth", + "budget": "Budget" }, "grafana": { "dashboards": "控制面板", @@ -860,16 +860,16 @@ }, "romm": { "platforms": "平台", - "totalRoms": "遊戲", - "saves": "已儲存", - "states": "州", - "screenshots": "螢幕截圖", - "totalfilesize": "大小總計" + "totalRoms": "Games", + "saves": "Saves", + "states": "States", + "screenshots": "Screenshots", + "totalfilesize": "Total Size" }, "mailcow": { "domains": "網域", - "mailboxes": "信箱", - "mails": "郵件數", + "mailboxes": "Mailboxes", + "mails": "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": "已代理", - "auth": "已授權", - "outdated": "須更新", - "banned": "已封鎖" + "proxied": "Proxied", + "auth": "With Auth", + "outdated": "Outdated", + "banned": "Banned" }, "myspeed": { "ping": "延遲", @@ -939,43 +939,43 @@ "upload": "上傳速率" }, "stocks": { - "stocks": "股票", - "loading": "載入中 ", - "open": "美國市場已開放", - "closed": "美國市場已關閉", - "invalidConfiguration": "無效的設定" + "stocks": "Stocks", + "loading": "Loading", + "open": "Open - US Market", + "closed": "Closed - US Market", + "invalidConfiguration": "Invalid Configuration" }, "frigate": { - "cameras": " ", + "cameras": "Cameras", "uptime": "運行時間", "version": "版本" }, "linkwarden": { - "links": " ", - "collections": "收藏庫", + "links": "Links", + "collections": "Collections", "tags": "標籤" }, "zabbix": { - "unclassified": "未分類", + "unclassified": "Not classified", "information": "資訊", - "warning": "警告", - "average": "平均", - "high": "高優先權", - "disaster": "災難" + "warning": "Warning", + "average": "Average", + "high": "High", + "disaster": "Disaster" }, "lubelogger": { - "vehicle": "車輛", - "vehicles": "車輛", - "serviceRecords": "保養記錄", - "reminders": "提醒", - "nextReminder": "下一個提醒", - "none": "沒有" + "vehicle": "Vehicle", + "vehicles": "Vehicles", + "serviceRecords": "Service Records", + "reminders": "Reminders", + "nextReminder": "Next Reminder", + "none": "None" }, "vikunja": { - "projects": "正在應用的項目", - "tasks7d": "本週到期任務", - "tasksOverdue": "逾期處理", - "tasksInProgress": "正在執行的任務" + "projects": "Active Projects", + "tasks7d": "Tasks Due This Week", + "tasksOverdue": "Overdue Tasks", + "tasksInProgress": "Tasks In Progress" }, "headscale": { "name": "名稱", @@ -987,7 +987,7 @@ }, "beszel": { "name": "名稱", - "systems": "系統", + "systems": "Systems", "up": "在線", "down": "離線", "paused": "擱置中", @@ -996,27 +996,27 @@ "updated": "已更新", "cpu": "CPU", "memory": "記憶體", - "disk": "儲存空間", - "network": "網路" + "disk": "Disk", + "network": "NET" }, "argocd": { - "apps": "應用程式", - "synced": "已同步", - "outOfSync": "不同步", + "apps": "Apps", + "synced": "Synced", + "outOfSync": "Out Of Sync", "healthy": "健康", - "degraded": "已降級", - "progressing": "進度", + "degraded": "Degraded", + "progressing": "Progressing", "missing": "缺少", - "suspended": "暫停" + "suspended": "Suspended" }, "spoolman": { - "loading": "載入中 " + "loading": "Loading" }, "gitlab": { - "groups": "群組", + "groups": "Groups", "issues": "出版", - "merges": "合併請求", - "projects": "專" + "merges": "Merge Requests", + "projects": "Projects" }, "apcups": { "status": "狀態", @@ -1024,23 +1024,23 @@ "bcharge": "充電", "timeleft": "剩餘時間" }, - "karakeep": { - "bookmarks": "書籤", - "favorites": "我的最愛", - "archived": "已存檔", - "highlights": "標記", - "lists": "列表", + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", "tags": "標籤" }, "slskd": { "slskStatus": "網絡", - "connected": "已連線", + "connected": "Connected", "disconnected": "連接已中斷", - "updateStatus": "更新", + "updateStatus": "Update", "update_yes": "可觀看", "update_no": "已更新至最新", - "downloads": "下載", - "uploads": "上傳", + "downloads": "Downloads", + "uploads": "Uploads", "sharedFiles": "檔案" } } diff --git a/src/components/bookmarks/group.jsx b/src/components/bookmarks/group.jsx index 2334dad5..726f54e8 100644 --- a/src/components/bookmarks/group.jsx +++ b/src/components/bookmarks/group.jsx @@ -1,10 +1,10 @@ -import { Disclosure, Transition } from "@headlessui/react"; +import { useRef, useEffect } from "react"; 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 { Disclosure, Transition } from "@headlessui/react"; import { MdKeyboardArrowDown } from "react-icons/md"; +import ErrorBoundary from "components/errorboundry"; +import List from "components/bookmarks/list"; +import ResolvedIcon from "components/resolvedicon"; export default function BookmarksGroup({ bookmarks, diff --git a/src/components/bookmarks/item.jsx b/src/components/bookmarks/item.jsx index 7ea16bba..c9b84eac 100644 --- a/src/components/bookmarks/item.jsx +++ b/src/components/bookmarks/item.jsx @@ -1,7 +1,7 @@ -import classNames from "classnames"; -import ResolvedIcon from "components/resolvedicon"; import { useContext } from "react"; +import classNames from "classnames"; import { SettingsContext } from "utils/contexts/settings"; +import ResolvedIcon from "components/resolvedicon"; 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 8961d655..8221c799 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 { useContext, useEffect, useRef } from "react"; +import { useRef, useEffect, useContext } 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 5ed9ace7..b8d0b7ba 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,8 +204,7 @@ export default function QuickLaunch({ servicesAndBookmarks, searchString, setSea return () => { abortController.abort(); }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [searchString, servicesAndBookmarks, searchDescriptions, hideVisitURL, searchSuggestions, searchProvider, url]); + }, [searchString, servicesAndBookmarks, searchDescriptions, hideVisitURL, searchSuggestions, searchProvider, url, t]); const [hidden, setHidden] = useState(true); useEffect(() => { diff --git a/src/components/resolvedicon.jsx b/src/components/resolvedicon.jsx index 77ba9119..eb2a5c0d 100644 --- a/src/components/resolvedicon.jsx +++ b/src/components/resolvedicon.jsx @@ -1,5 +1,5 @@ -import Image from "next/image"; import { useContext } from "react"; +import Image from "next/image"; 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 e8e11d97..00b8a429 100644 --- a/src/components/services/dropdown.jsx +++ b/src/components/services/dropdown.jsx @@ -1,7 +1,7 @@ -import { Menu, Transition } from "@headlessui/react"; -import classNames from "classnames"; import { Fragment } from "react"; +import { Menu, Transition } from "@headlessui/react"; import { BiCog } from "react-icons/bi"; +import classNames from "classnames"; export default function Dropdown({ options, value, setValue }) { return ( diff --git a/src/components/services/group.jsx b/src/components/services/group.jsx index cad7b5aa..3e6327a4 100644 --- a/src/components/services/group.jsx +++ b/src/components/services/group.jsx @@ -1,9 +1,9 @@ -import { Disclosure, Transition } from "@headlessui/react"; +import { useRef, useEffect } from "react"; import classNames from "classnames"; -import ResolvedIcon from "components/resolvedicon"; -import List from "components/services/list"; -import { useEffect, useRef } from "react"; +import { Disclosure, Transition } from "@headlessui/react"; import { MdKeyboardArrowDown } from "react-icons/md"; +import List from "components/services/list"; +import ResolvedIcon from "components/resolvedicon"; import { columnMap } from "../../utils/layout/columns"; diff --git a/src/components/services/item.jsx b/src/components/services/item.jsx index 8e851611..72b0fd50 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 KubernetesStatus from "./kubernetes-status"; -import Ping from "./ping"; -import SiteMonitor from "./site-monitor"; import Status from "./status"; import Widget from "./widget"; +import Ping from "./ping"; +import SiteMonitor from "./site-monitor"; +import KubernetesStatus from "./kubernetes-status"; 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 e4ea958d..a256a2df 100644 --- a/src/components/services/kubernetes-status.jsx +++ b/src/components/services/kubernetes-status.jsx @@ -1,5 +1,5 @@ -import { t } from "i18next"; import useSWR from "swr"; +import { t } from "i18next"; 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 f8665e33..670f9d4b 100644 --- a/src/components/services/ping.jsx +++ b/src/components/services/ping.jsx @@ -1,4 +1,4 @@ -import { useTranslation } from "next-i18next"; +import { useTranslation } from "react-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 79496f65..4dceb44c 100644 --- a/src/components/services/site-monitor.jsx +++ b/src/components/services/site-monitor.jsx @@ -1,4 +1,4 @@ -import { useTranslation } from "next-i18next"; +import { useTranslation } from "react-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 2688ca0f..3a6f3b33 100644 --- a/src/components/services/status.jsx +++ b/src/components/services/status.jsx @@ -1,4 +1,4 @@ -import { useTranslation } from "next-i18next"; +import { useTranslation } from "react-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 6e3a6360..bda638a4 100644 --- a/src/components/services/widget.jsx +++ b/src/components/services/widget.jsx @@ -1,5 +1,5 @@ -import ErrorBoundary from "components/errorboundry"; import { useTranslation } from "next-i18next"; +import ErrorBoundary from "components/errorboundry"; import components from "widgets/components"; diff --git a/src/components/services/widget/block.jsx b/src/components/services/widget/block.jsx index 720140cc..8cd74aad 100644 --- a/src/components/services/widget/block.jsx +++ b/src/components/services/widget/block.jsx @@ -1,5 +1,5 @@ -import classNames from "classnames"; import { useTranslation } from "next-i18next"; +import classNames from "classnames"; 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 f5957382..9b10233c 100644 --- a/src/components/services/widget/container.jsx +++ b/src/components/services/widget/container.jsx @@ -3,11 +3,6 @@ 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); @@ -37,17 +32,7 @@ export default function Container({ error = false, children, service }) { if (!field.includes(".")) { fullField = `${type}.${field}`; } - 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; + return fullField === child?.props?.label; }), ); } diff --git a/src/components/services/widget/error.jsx b/src/components/services/widget/error.jsx index 0d4757d3..30c41283 100644 --- a/src/components/services/widget/error.jsx +++ b/src/components/services/widget/error.jsx @@ -1,4 +1,4 @@ -import { useTranslation } from "next-i18next"; +import { useTranslation } from "react-i18next"; import { IoAlertCircle } from "react-icons/io5"; function displayError(error) { diff --git a/src/components/tab.jsx b/src/components/tab.jsx index dc183fe4..2c3984c9 100644 --- a/src/components/tab.jsx +++ b/src/components/tab.jsx @@ -1,5 +1,5 @@ -import classNames from "classnames"; import { useContext } from "react"; +import classNames from "classnames"; import { TabContext } from "utils/contexts/tab"; function slugify(tabName) { diff --git a/src/components/toggles/color.jsx b/src/components/toggles/color.jsx index 7ea700ab..60cc8de8 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 946fb0a9..b8ee1eb8 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 { MdNewReleases } from "react-icons/md"; import useSWR from "swr"; +import { compareVersions, validate } from "compare-versions"; +import { MdNewReleases } from "react-icons/md"; const LATEST_RELEASE_CACHE_KEY = "latestRelease"; diff --git a/src/components/widgets/datetime/datetime.jsx b/src/components/widgets/datetime/datetime.jsx index b59cf809..a7aec5da 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 7f772808..0803b88c 100644 --- a/src/components/widgets/glances/glances.jsx +++ b/src/components/widgets/glances/glances.jsx @@ -1,9 +1,9 @@ -import classNames from "classnames"; -import { useTranslation } from "next-i18next"; +import useSWR from "swr"; import { useContext } from "react"; import { FaMemory, FaRegClock, FaThermometerHalf } from "react-icons/fa"; import { FiCpu, FiHardDrive } from "react-icons/fi"; -import useSWR from "swr"; +import { useTranslation } from "next-i18next"; +import classNames from "classnames"; 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 50b173bc..f7b101c7 100644 --- a/src/components/widgets/kubernetes/kubernetes.jsx +++ b/src/components/widgets/kubernetes/kubernetes.jsx @@ -1,8 +1,8 @@ -import { useTranslation } from "next-i18next"; import useSWR from "swr"; +import { useTranslation } from "next-i18next"; -import Container from "../widget/container"; import Error from "../widget/error"; +import Container from "../widget/container"; 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 aebb40f2..ba8f8b77 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 db68cd7b..22047e2c 100644 --- a/src/components/widgets/longhorn/longhorn.jsx +++ b/src/components/widgets/longhorn/longhorn.jsx @@ -1,7 +1,7 @@ import useSWR from "swr"; -import Container from "../widget/container"; import Error from "../widget/error"; +import Container from "../widget/container"; 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") { - return total; + if (node.id === "total" && total) { + return true; } if (!nodes) { return false; diff --git a/src/components/widgets/openmeteo/openmeteo.jsx b/src/components/widgets/openmeteo/openmeteo.jsx index a46f53ab..4d3e7e89 100644 --- a/src/components/widgets/openmeteo/openmeteo.jsx +++ b/src/components/widgets/openmeteo/openmeteo.jsx @@ -1,16 +1,16 @@ -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 { useState } from "react"; +import { WiCloudDown } from "react-icons/wi"; +import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; +import { useTranslation } from "next-i18next"; -import mapIcon from "../../../utils/weather/openmeteo-condition-map"; +import Error from "../widget/error"; import Container from "../widget/container"; import ContainerButton from "../widget/container_button"; -import Error from "../widget/error"; +import WidgetIcon from "../widget/widget_icon"; import PrimaryText from "../widget/primary_text"; import SecondaryText from "../widget/secondary_text"; -import WidgetIcon from "../widget/widget_icon"; +import mapIcon from "../../../utils/weather/openmeteo-condition-map"; function Widget({ options }) { const { t } = useTranslation(); diff --git a/src/components/widgets/openweathermap/weather.jsx b/src/components/widgets/openweathermap/weather.jsx index 3336ed4f..df0280e3 100644 --- a/src/components/widgets/openweathermap/weather.jsx +++ b/src/components/widgets/openweathermap/weather.jsx @@ -1,16 +1,16 @@ -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 { useState } from "react"; +import { WiCloudDown } from "react-icons/wi"; +import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; +import { useTranslation } from "next-i18next"; -import mapIcon from "../../../utils/weather/owm-condition-map"; +import Error from "../widget/error"; 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 1bea4af9..1963637d 100644 --- a/src/components/widgets/resources/cpu.jsx +++ b/src/components/widgets/resources/cpu.jsx @@ -1,9 +1,9 @@ -import { useTranslation } from "next-i18next"; -import { FiCpu } from "react-icons/fi"; import useSWR from "swr"; +import { FiCpu } from "react-icons/fi"; +import { useTranslation } from "next-i18next"; -import Error from "../widget/error"; import Resource from "../widget/resource"; +import Error from "../widget/error"; 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 248cd396..ef994c65 100644 --- a/src/components/widgets/resources/cputemp.jsx +++ b/src/components/widgets/resources/cputemp.jsx @@ -1,9 +1,9 @@ -import { useTranslation } from "next-i18next"; -import { FaThermometerHalf } from "react-icons/fa"; import useSWR from "swr"; +import { FaThermometerHalf } from "react-icons/fa"; +import { useTranslation } from "next-i18next"; -import Error from "../widget/error"; import Resource from "../widget/resource"; +import Error from "../widget/error"; 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 d5706ba5..15da7780 100644 --- a/src/components/widgets/resources/disk.jsx +++ b/src/components/widgets/resources/disk.jsx @@ -1,9 +1,9 @@ -import { useTranslation } from "next-i18next"; -import { FiHardDrive } from "react-icons/fi"; import useSWR from "swr"; +import { FiHardDrive } from "react-icons/fi"; +import { useTranslation } from "next-i18next"; -import Error from "../widget/error"; import Resource from "../widget/resource"; +import Error from "../widget/error"; 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 a8c82cbf..155b7ecb 100644 --- a/src/components/widgets/resources/memory.jsx +++ b/src/components/widgets/resources/memory.jsx @@ -1,9 +1,9 @@ -import { useTranslation } from "next-i18next"; -import { FaMemory } from "react-icons/fa"; import useSWR from "swr"; +import { FaMemory } from "react-icons/fa"; +import { useTranslation } from "next-i18next"; -import Error from "../widget/error"; import Resource from "../widget/resource"; +import Error from "../widget/error"; 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 48286030..a2a3acac 100644 --- a/src/components/widgets/resources/network.jsx +++ b/src/components/widgets/resources/network.jsx @@ -1,9 +1,9 @@ -import { useTranslation } from "next-i18next"; -import { FaNetworkWired } from "react-icons/fa"; import useSWR from "swr"; +import { FaNetworkWired } from "react-icons/fa"; +import { useTranslation } from "next-i18next"; -import Error from "../widget/error"; import Resource from "../widget/resource"; +import Error from "../widget/error"; 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 1002f98c..db26caa7 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 Cpu from "./cpu"; -import CpuTemp from "./cputemp"; import Disk from "./disk"; +import Cpu from "./cpu"; import Memory from "./memory"; -import Network from "./network"; +import CpuTemp from "./cputemp"; import Uptime from "./uptime"; +import Network from "./network"; 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 f21634c2..2fac0fcd 100644 --- a/src/components/widgets/resources/uptime.jsx +++ b/src/components/widgets/resources/uptime.jsx @@ -1,9 +1,9 @@ -import { useTranslation } from "next-i18next"; -import { FaRegClock } from "react-icons/fa"; import useSWR from "swr"; +import { FaRegClock } from "react-icons/fa"; +import { useTranslation } from "next-i18next"; -import Error from "../widget/error"; import Resource from "../widget/resource"; +import Error from "../widget/error"; 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 6699a374..e0564c48 100644 --- a/src/components/widgets/search/search.jsx +++ b/src/components/widgets/search/search.jsx @@ -1,10 +1,10 @@ -import { Combobox, Listbox, Transition } from "@headlessui/react"; -import classNames from "classnames"; +import { useState, useEffect, Fragment } from "react"; 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 { SiDuckduckgo, SiGoogle, SiBaidu, SiBrave } from "react-icons/si"; +import { BiLogoBing } from "react-icons/bi"; +import { Listbox, Transition, Combobox } from "@headlessui/react"; +import classNames from "classnames"; 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 e6657878..1a9018d3 100644 --- a/src/components/widgets/stocks/stocks.jsx +++ b/src/components/widgets/stocks/stocks.jsx @@ -1,13 +1,13 @@ -import { useTranslation } from "next-i18next"; -import { useState } from "react"; -import { FaChartLine } from "react-icons/fa6"; import useSWR from "swr"; +import { useState } from "react"; +import { useTranslation } from "next-i18next"; +import { FaChartLine } from "react-icons/fa6"; -import Container from "../widget/container"; import Error from "../widget/error"; +import Container from "../widget/container"; import PrimaryText from "../widget/primary_text"; -import Raw from "../widget/raw"; import WidgetIcon from "../widget/widget_icon"; +import Raw from "../widget/raw"; 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 09e6952f..5295dbb7 100644 --- a/src/components/widgets/unifi_console/unifi_console.jsx +++ b/src/components/widgets/unifi_console/unifi_console.jsx @@ -1,13 +1,13 @@ -import { useTranslation } from "next-i18next"; -import { BiCheckCircle, BiError, BiNetworkChart, BiWifi, BiXCircle } from "react-icons/bi"; +import { BiError, BiWifi, BiCheckCircle, BiXCircle, BiNetworkChart } from "react-icons/bi"; import { MdSettingsEthernet } from "react-icons/md"; +import { useTranslation } from "next-i18next"; import { SiUbiquiti } from "react-icons/si"; -import Container from "../widget/container"; import Error from "../widget/error"; -import PrimaryText from "../widget/primary_text"; +import Container from "../widget/container"; 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 98768963..4ebb08c5 100644 --- a/src/components/widgets/weather/weather.jsx +++ b/src/components/widgets/weather/weather.jsx @@ -1,16 +1,16 @@ -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 { useState } from "react"; +import { WiCloudDown } from "react-icons/wi"; +import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; +import { useTranslation } from "next-i18next"; -import mapIcon from "../../../utils/weather/condition-map"; -import Container from "../widget/container"; -import ContainerButton from "../widget/container_button"; import Error from "../widget/error"; +import Container from "../widget/container"; 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 ebc706ac..6cb48fde 100644 --- a/src/components/widgets/widget.jsx +++ b/src/components/widgets/widget.jsx @@ -1,5 +1,5 @@ -import ErrorBoundary from "components/errorboundry"; import dynamic from "next/dynamic"; +import ErrorBoundary from "components/errorboundry"; 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 fe6397e0..ae06d8ba 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 PrimaryText from "./primary_text"; -import Raw from "./raw"; -import SecondaryText from "./secondary_text"; import WidgetIcon from "./widget_icon"; +import PrimaryText from "./primary_text"; +import SecondaryText from "./secondary_text"; +import Raw from "./raw"; 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 e0802511..a6379081 100644 --- a/src/components/widgets/widget/container_button.jsx +++ b/src/components/widgets/widget/container_button.jsx @@ -1,4 +1,4 @@ -import { getAllClasses, getBottomBlock, getInnerBlock } from "./container"; +import { getAllClasses, getInnerBlock, getBottomBlock } 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 a9afef3a..68cbd64b 100644 --- a/src/components/widgets/widget/container_form.jsx +++ b/src/components/widgets/widget/container_form.jsx @@ -1,4 +1,4 @@ -import { getAllClasses, getBottomBlock, getInnerBlock } from "./container"; +import { getAllClasses, getInnerBlock, getBottomBlock } 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 a36f311c..6f157875 100644 --- a/src/components/widgets/widget/container_link.jsx +++ b/src/components/widgets/widget/container_link.jsx @@ -1,4 +1,4 @@ -import { getAllClasses, getBottomBlock, getInnerBlock } from "./container"; +import { getAllClasses, getInnerBlock, getBottomBlock } 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 e0e8b1e1..e454256f 100644 --- a/src/components/widgets/widget/error.jsx +++ b/src/components/widgets/widget/error.jsx @@ -1,4 +1,4 @@ -import { useTranslation } from "next-i18next"; +import { useTranslation } from "react-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 b9a48a41..2f594942 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 Raw from "./raw"; import Resource from "./resource"; +import Raw from "./raw"; 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 8e88f6b2..c5465a80 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/manrope.css"; import "styles/theme.css"; -import { SWRConfig } from "swr"; +import "styles/manrope.css"; 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 ece38aec..31083438 100644 --- a/src/pages/_document.jsx +++ b/src/pages/_document.jsx @@ -1,4 +1,4 @@ -import { Head, Html, Main, NextScript } from "next/document"; +import { Html, Head, 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 b69ddff5..6cb04698 100644 --- a/src/pages/api/config/[path].js +++ b/src/pages/api/config/[path].js @@ -1,5 +1,5 @@ -import fs from "fs"; import path from "path"; +import fs from "fs"; 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 33fb4ef5..992f9ea6 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 ab454183..3c89dc39 100644 --- a/src/pages/api/kubernetes/stats/[...service].js +++ b/src/pages/api/kubernetes/stats/[...service].js @@ -53,11 +53,9 @@ 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); @@ -68,32 +66,42 @@ export default async function handler(req, res) { }); }); - 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); + 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); + }); + }); } - return null; - }); - + return { + mem: depMem, + cpu: depCpu, + }; + }), + ); const stats = { mem: 0, cpu: 0, }; - - 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); - }); - }); - } - + podStatsList.forEach((podStat) => { + stats.mem += podStat.mem; + stats.cpu += podStat.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 01d0e8a5..372ace9d 100644 --- a/src/pages/api/releases.js +++ b/src/pages/api/releases.js @@ -1,5 +1,5 @@ -import createLogger from "utils/logger"; import { cachedRequest } from "utils/proxy/http"; +import createLogger from "utils/logger"; const logger = createLogger("releases"); diff --git a/src/pages/api/search/searchSuggestion.js b/src/pages/api/search/searchSuggestion.js index 13f3f301..209d1f2c 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 { widgetsFromConfig } from "utils/config/widget-helpers"; import { cachedRequest } from "utils/proxy/http"; +import { widgetsFromConfig } from "utils/config/widget-helpers"; 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 0cdf806f..3f8adc88 100644 --- a/src/pages/api/services/proxy.js +++ b/src/pages/api/services/proxy.js @@ -1,9 +1,9 @@ -import getServiceWidget from "utils/config/service-helpers"; -import createLogger from "utils/logger"; import { formatApiCall } from "utils/proxy/api-helpers"; +import createLogger from "utils/logger"; import genericProxyHandler from "utils/proxy/handlers/generic"; -import calendarProxyHandler from "widgets/calendar/proxy"; import widgets from "widgets/widgets"; +import calendarProxyHandler from "widgets/calendar/proxy"; +import getServiceWidget from "utils/config/service-helpers"; const logger = createLogger("servicesProxy"); diff --git a/src/pages/api/widgets/glances.js b/src/pages/api/widgets/glances.js index f0a3a7d9..199c133e 100644 --- a/src/pages/api/widgets/glances.js +++ b/src/pages/api/widgets/glances.js @@ -1,6 +1,6 @@ -import { getPrivateWidgetOptions } from "utils/config/widget-helpers"; -import createLogger from "utils/logger"; import { httpProxy } from "utils/proxy/http"; +import createLogger from "utils/logger"; +import { getPrivateWidgetOptions } from "utils/config/widget-helpers"; const logger = createLogger("glances"); diff --git a/src/pages/api/widgets/longhorn.js b/src/pages/api/widgets/longhorn.js index c45086bc..9126e937 100644 --- a/src/pages/api/widgets/longhorn.js +++ b/src/pages/api/widgets/longhorn.js @@ -1,6 +1,6 @@ -import { getSettings } from "../../../utils/config/config"; -import createLogger from "../../../utils/logger"; import { httpProxy } from "../../../utils/proxy/http"; +import createLogger from "../../../utils/logger"; +import { getSettings } from "../../../utils/config/config"; const logger = createLogger("longhorn"); diff --git a/src/pages/api/widgets/openweathermap.js b/src/pages/api/widgets/openweathermap.js index 993ee1f5..3bdc7a82 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 77881ad7..4e9f3f55 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 78418f74..9e63e48d 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 95c19dd3..11d7180e 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -1,33 +1,33 @@ /* eslint-disable react/no-array-index-key */ -import classNames from "classnames"; -import BookmarksGroup from "components/bookmarks/group"; -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 useSWR, { unstable_serialize as unstableSerialize, SWRConfig } from "swr"; import Head from "next/head"; -import { useRouter } from "next/router"; import Script from "next/script"; -import { useContext, useEffect, useMemo, useState } from "react"; +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 useSWR, { SWRConfig, unstable_serialize as unstableSerialize } from "swr"; +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 { ThemeContext } from "utils/contexts/theme"; +import ErrorBoundary from "components/errorboundry"; +import QuickLaunch from "components/quicklaunch"; 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 4ceb525f..480eca04 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, { CONF_DIR, getSettings, substituteEnvironmentVars } from "utils/config/config"; +import checkAndCopyConfig, { getSettings, substituteEnvironmentVars, CONF_DIR } 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 3f688842..18dedf62 100644 --- a/src/utils/config/config.js +++ b/src/utils/config/config.js @@ -1,9 +1,9 @@ /* eslint-disable no-console */ -import { copyFileSync, existsSync, mkdirSync, readFileSync } from "fs"; import { join } from "path"; +import { copyFileSync, existsSync, mkdirSync, readFileSync } from "fs"; -import yaml from "js-yaml"; import cache from "memory-cache"; +import yaml from "js-yaml"; const cacheKey = "homepageEnvironmentVariables"; const homepageVarPrefix = "HOMEPAGE_VAR_"; diff --git a/src/utils/config/docker.js b/src/utils/config/docker.js index ed1d3347..6ea728e9 100644 --- a/src/utils/config/docker.js +++ b/src/utils/config/docker.js @@ -1,5 +1,5 @@ -import { readFileSync } from "fs"; import path from "path"; +import { readFileSync } from "fs"; import yaml from "js-yaml"; diff --git a/src/utils/config/kubernetes.js b/src/utils/config/kubernetes.js index 680c408e..6d2fc17b 100644 --- a/src/utils/config/kubernetes.js +++ b/src/utils/config/kubernetes.js @@ -1,8 +1,8 @@ -import { readFileSync } from "fs"; import path from "path"; +import { readFileSync } from "fs"; -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 297e55a7..38e7a2bf 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 Docker from "dockerode"; import yaml from "js-yaml"; +import Docker from "dockerode"; +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,9 +362,6 @@ export function cleanServiceGroups(groups) { // proxmox node, - // proxmoxbackupserver - datastore, - // speedtest bitratePrecision, @@ -440,9 +437,6 @@ 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 bc16d605..d7d985f0 100644 --- a/src/utils/contexts/color.jsx +++ b/src/utils/contexts/color.jsx @@ -1,4 +1,4 @@ -import { createContext, useEffect, useMemo, useState } from "react"; +import { createContext, useState, useEffect, useMemo } from "react"; let lastColor = false; diff --git a/src/utils/contexts/settings.jsx b/src/utils/contexts/settings.jsx index 76451953..d6993b14 100644 --- a/src/utils/contexts/settings.jsx +++ b/src/utils/contexts/settings.jsx @@ -1,4 +1,4 @@ -import { createContext, useMemo, useState } from "react"; +import { createContext, useState, useMemo } from "react"; export const SettingsContext = createContext(); diff --git a/src/utils/contexts/tab.jsx b/src/utils/contexts/tab.jsx index 2a3d3457..8cd5d520 100644 --- a/src/utils/contexts/tab.jsx +++ b/src/utils/contexts/tab.jsx @@ -1,4 +1,4 @@ -import { createContext, useMemo, useState } from "react"; +import { createContext, useState, useMemo } from "react"; export const TabContext = createContext(); diff --git a/src/utils/contexts/theme.jsx b/src/utils/contexts/theme.jsx index 385eeaa2..85d613fc 100644 --- a/src/utils/contexts/theme.jsx +++ b/src/utils/contexts/theme.jsx @@ -1,4 +1,4 @@ -import { createContext, useEffect, useMemo, useState } from "react"; +import { createContext, useState, useEffect, useMemo } 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 a221e48e..3ad57ad0 100644 --- a/src/utils/hooks/window-focus.js +++ b/src/utils/hooks/window-focus.js @@ -1,4 +1,4 @@ -import { useEffect, useState } from "react"; +import { useState, useEffect } from "react"; const hasFocus = () => typeof document !== "undefined" && document.hasFocus(); diff --git a/src/utils/kubernetes/export.js b/src/utils/kubernetes/export.js index ae53aaca..ba41593e 100644 --- a/src/utils/kubernetes/export.js +++ b/src/utils/kubernetes/export.js @@ -1,7 +1,7 @@ -import listHttpRoute from "utils/kubernetes/httproute-list"; import listIngress from "utils/kubernetes/ingress-list"; -import { constructedServiceFromResource, isDiscoverable } from "utils/kubernetes/resource-helpers"; import listTraefikIngress from "utils/kubernetes/traefik-list"; +import listHttpRoute from "utils/kubernetes/httproute-list"; +import { isDiscoverable, constructedServiceFromResource } from "utils/kubernetes/resource-helpers"; const kubernetes = { listIngress, diff --git a/src/utils/kubernetes/ingress-list.js b/src/utils/kubernetes/ingress-list.js index 1cd9ca95..49b5d667 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 { getKubeConfig, getKubernetes } from "utils/config/kubernetes"; +import { getKubernetes, getKubeConfig } 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 c7d69751..df03bc83 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 * as shvl from "utils/config/shvl"; +import { substituteEnvironmentVars } from "utils/config/config"; import createLogger from "utils/logger"; +import * as shvl from "utils/config/shvl"; 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 f6e07241..0368629a 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 { ANNOTATION_BASE, checkCRD, getKubeConfig, getKubernetes } from "utils/config/kubernetes"; +import { getKubernetes, getKubeConfig, checkCRD, ANNOTATION_BASE } 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 017d44c9..056e919f 100644 --- a/src/utils/proxy/handlers/credentialed.js +++ b/src/utils/proxy/handlers/credentialed.js @@ -1,9 +1,9 @@ -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 { httpProxy } from "utils/proxy/http"; +import createLogger from "utils/logger"; +import { getSettings } from "utils/config/config"; import widgets from "widgets/widgets"; const logger = createLogger("credentialedProxyHandler"); @@ -42,7 +42,6 @@ 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 1914114c..4a71f704 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 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 { httpProxy } from "utils/proxy/http"; +import createLogger from "utils/logger"; 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 bdb10e02..f9fb1883 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 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 getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; 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 6fe98dce..030e53ba 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 1a22a7f7..f8d2dcce 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 { sanitizeErrorURL } from "./api-helpers"; import { addCookieToJar, setCookieHeader } from "./cookie-jar"; +import { sanitizeErrorURL } from "./api-helpers"; import createLogger from "utils/logger"; diff --git a/src/utils/proxy/validate-widget-data.js b/src/utils/proxy/validate-widget-data.js index de2a3c4e..8f865fe2 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 createLogger from "utils/logger"; import widgets from "widgets/widgets"; +import createLogger from "utils/logger"; const logger = createLogger("validateWidgetData"); diff --git a/src/widgets/adguard/component.jsx b/src/widgets/adguard/component.jsx index e5a7670a..6cb9175a 100644 --- a/src/widgets/adguard/component.jsx +++ b/src/widgets/adguard/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/apcups/component.jsx b/src/widgets/apcups/component.jsx index 85e621db..c1c26b5c 100644 --- a/src/widgets/apcups/component.jsx +++ b/src/widgets/apcups/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/apcups/proxy.js b/src/widgets/apcups/proxy.js index bf22730e..8e1d7ffc 100644 --- a/src/widgets/apcups/proxy.js +++ b/src/widgets/apcups/proxy.js @@ -1,5 +1,5 @@ -import { Buffer } from "node:buffer"; import net from "node:net"; +import { Buffer } from "node:buffer"; 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 f61bed43..d4283acf 100644 --- a/src/widgets/argocd/component.jsx +++ b/src/widgets/argocd/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/atsumeru/component.jsx b/src/widgets/atsumeru/component.jsx index 01cc8e46..2b87ac34 100644 --- a/src/widgets/atsumeru/component.jsx +++ b/src/widgets/atsumeru/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/audiobookshelf/component.jsx b/src/widgets/audiobookshelf/component.jsx index b410e1a7..0444b6b4 100755 --- a/src/widgets/audiobookshelf/component.jsx +++ b/src/widgets/audiobookshelf/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/audiobookshelf/proxy.js b/src/widgets/audiobookshelf/proxy.js index afff3ba9..1a89736b 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 edf5ece1..d4446551 100644 --- a/src/widgets/authentik/component.jsx +++ b/src/widgets/authentik/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/autobrr/component.jsx b/src/widgets/autobrr/component.jsx index 5454cd3c..a73a7d17 100644 --- a/src/widgets/autobrr/component.jsx +++ b/src/widgets/autobrr/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/azuredevops/component.jsx b/src/widgets/azuredevops/component.jsx index 7a36aab2..bfe9797f 100644 --- a/src/widgets/azuredevops/component.jsx +++ b/src/widgets/azuredevops/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/bazarr/component.jsx b/src/widgets/bazarr/component.jsx index f79ec206..120774fb 100644 --- a/src/widgets/bazarr/component.jsx +++ b/src/widgets/bazarr/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/bazarr/widget.js b/src/widgets/bazarr/widget.js index c54e38ad..5b89b2b4 100644 --- a/src/widgets/bazarr/widget.js +++ b/src/widgets/bazarr/widget.js @@ -1,5 +1,5 @@ -import { asJson } from "utils/proxy/api-helpers"; import genericProxyHandler from "utils/proxy/handlers/generic"; +import { asJson } from "utils/proxy/api-helpers"; const widget = { api: "{url}/api/{endpoint}/wanted?apikey={key}", diff --git a/src/widgets/beszel/component.jsx b/src/widgets/beszel/component.jsx index e80a9fab..a191c31f 100644 --- a/src/widgets/beszel/component.jsx +++ b/src/widgets/beszel/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/beszel/proxy.js b/src/widgets/beszel/proxy.js index 96dfc913..078e22c3 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 1613760d..60e71e9e 100644 --- a/src/widgets/caddy/component.jsx +++ b/src/widgets/caddy/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/calendar/agenda.jsx b/src/widgets/calendar/agenda.jsx index cb00c1d2..6a3be031 100644 --- a/src/widgets/calendar/agenda.jsx +++ b/src/widgets/calendar/agenda.jsx @@ -1,5 +1,5 @@ -import classNames from "classnames"; import { DateTime } from "luxon"; +import classNames from "classnames"; 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 0647d4ad..56858fad 100644 --- a/src/widgets/calendar/component.jsx +++ b/src/widgets/calendar/component.jsx @@ -1,12 +1,12 @@ -import Container from "components/services/widget/container"; +import { useEffect, useMemo, useState, useContext } from "react"; +import dynamic from "next/dynamic"; import { DateTime } from "luxon"; import { useTranslation } from "next-i18next"; -import dynamic from "next/dynamic"; -import { useContext, useEffect, useMemo, useState } from "react"; +import Container from "components/services/widget/container"; import { SettingsContext } from "utils/contexts/settings"; -import Agenda from "./agenda"; import Monthly from "./monthly"; +import Agenda from "./agenda"; 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 6ea2e1ae..754c6ee9 100644 --- a/src/widgets/calendar/event.jsx +++ b/src/widgets/calendar/event.jsx @@ -1,7 +1,7 @@ -import classNames from "classnames"; -import { DateTime } from "luxon"; -import { useTranslation } from "next-i18next"; import { useState } from "react"; +import { useTranslation } from "next-i18next"; +import { DateTime } from "luxon"; +import classNames from "classnames"; 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 46217977..77729982 100644 --- a/src/widgets/calendar/integrations/ical.jsx +++ b/src/widgets/calendar/integrations/ical.jsx @@ -1,11 +1,11 @@ -import { parseString } from "cal-parser"; import { DateTime } from "luxon"; -import { useTranslation } from "next-i18next"; +import { parseString } from "cal-parser"; import { useEffect } from "react"; +import { useTranslation } from "next-i18next"; import { RRule } from "rrule"; -import Error from "../../../components/services/widget/error"; import useWidgetAPI from "../../../utils/proxy/use-widget-api"; +import Error from "../../../components/services/widget/error"; // 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 65ad1da2..d4a6edbe 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 Error from "../../../components/services/widget/error"; import useWidgetAPI from "../../../utils/proxy/use-widget-api"; +import Error from "../../../components/services/widget/error"; 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 9c8880a9..945eadd9 100644 --- a/src/widgets/calendar/integrations/radarr.jsx +++ b/src/widgets/calendar/integrations/radarr.jsx @@ -1,9 +1,9 @@ import { DateTime } from "luxon"; -import { useTranslation } from "next-i18next"; import { useEffect } from "react"; +import { useTranslation } from "next-i18next"; -import Error from "../../../components/services/widget/error"; import useWidgetAPI from "../../../utils/proxy/use-widget-api"; +import Error from "../../../components/services/widget/error"; 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 4fe3872e..6ae919ef 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 Error from "../../../components/services/widget/error"; import useWidgetAPI from "../../../utils/proxy/use-widget-api"; +import Error from "../../../components/services/widget/error"; 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 abdec328..34cc679d 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 Error from "../../../components/services/widget/error"; import useWidgetAPI from "../../../utils/proxy/use-widget-api"; +import Error from "../../../components/services/widget/error"; 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 4e870261..7313232f 100644 --- a/src/widgets/calendar/monthly.jsx +++ b/src/widgets/calendar/monthly.jsx @@ -1,7 +1,7 @@ -import classNames from "classnames"; -import { DateTime, Info } from "luxon"; -import { useTranslation } from "next-i18next"; import { useMemo } from "react"; +import { DateTime, Info } from "luxon"; +import classNames from "classnames"; +import { useTranslation } from "next-i18next"; import Event, { compareDateTimezone } from "./event"; diff --git a/src/widgets/calendar/proxy.js b/src/widgets/calendar/proxy.js index c98441ee..d36f30c9 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 createLogger from "utils/logger"; import { httpProxy } from "utils/proxy/http"; +import createLogger from "utils/logger"; const logger = createLogger("calendarProxyHandler"); diff --git a/src/widgets/calibreweb/component.jsx b/src/widgets/calibreweb/component.jsx index be8424e5..c334d7d2 100644 --- a/src/widgets/calibreweb/component.jsx +++ b/src/widgets/calibreweb/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/changedetectionio/component.jsx b/src/widgets/changedetectionio/component.jsx index d7d7272b..a08f38d9 100644 --- a/src/widgets/changedetectionio/component.jsx +++ b/src/widgets/changedetectionio/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/channelsdvrserver/component.jsx b/src/widgets/channelsdvrserver/component.jsx index 79ca3f14..42202c05 100644 --- a/src/widgets/channelsdvrserver/component.jsx +++ b/src/widgets/channelsdvrserver/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/cloudflared/component.jsx b/src/widgets/cloudflared/component.jsx index 790a5f34..8825402c 100644 --- a/src/widgets/cloudflared/component.jsx +++ b/src/widgets/cloudflared/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/coinmarketcap/component.jsx b/src/widgets/coinmarketcap/component.jsx index fd9c030f..35a3401f 100644 --- a/src/widgets/coinmarketcap/component.jsx +++ b/src/widgets/coinmarketcap/component.jsx @@ -1,9 +1,9 @@ -import classNames from "classnames"; -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 { 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 useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/components.js b/src/widgets/components.js index 880c8222..148a626b 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -47,8 +47,7 @@ const components = { grafana: dynamic(() => import("./grafana/component")), hdhomerun: dynamic(() => import("./hdhomerun/component")), headscale: dynamic(() => import("./headscale/component")), - hoarder: dynamic(() => import("./karakeep/component")), - karakeep: dynamic(() => import("./karakeep/component")), + hoarder: dynamic(() => import("./hoarder/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 f567ad70..5bc34d1a 100644 --- a/src/widgets/crowdsec/component.jsx +++ b/src/widgets/crowdsec/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/crowdsec/proxy.js b/src/widgets/crowdsec/proxy.js index d3257fa6..85803845 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 f537e8da..7624c2f5 100644 --- a/src/widgets/customapi/component.jsx +++ b/src/widgets/customapi/component.jsx @@ -1,10 +1,10 @@ -import classNames from "classnames"; -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; import { useTranslation } from "next-i18next"; +import Container from "components/services/widget/container"; +import Block from "components/services/widget/block"; +import classNames from "classnames"; -import * as shvl from "utils/config/shvl"; import useWidgetAPI from "utils/proxy/use-widget-api"; +import * as shvl from "utils/config/shvl"; function getValue(field, data) { let value = data; @@ -243,17 +243,9 @@ export default function Component({ service }) {
) : ( listItems.map((item, index) => { - 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 itemName = shvl.get(item, name, ""); + const itemLabel = shvl.get(item, label, ""); + const itemUrl = target ? target.replace(/\{([^}]+)\}/g, (_, key) => item[key] || "") : 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"; @@ -267,14 +259,14 @@ export default function Component({ service }) { >
{itemName}
-
{formatValue(t, mappings, itemLabel)}
+
{itemLabel}
) : (
{itemName}
-
{formatValue(t, mappings, itemLabel)}
+
{itemLabel}
); diff --git a/src/widgets/deluge/component.jsx b/src/widgets/deluge/component.jsx index eb6ddfaa..510340b7 100644 --- a/src/widgets/deluge/component.jsx +++ b/src/widgets/deluge/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; import { useTranslation } from "next-i18next"; +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/deluge/proxy.js b/src/widgets/deluge/proxy.js index ef255160..0430a6ac 100644 --- a/src/widgets/deluge/proxy.js +++ b/src/widgets/deluge/proxy.js @@ -1,7 +1,7 @@ -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 getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; import widgets from "widgets/widgets"; const logger = createLogger("delugeProxyHandler"); diff --git a/src/widgets/develancacheui/component.jsx b/src/widgets/develancacheui/component.jsx index 61f608e1..4fc184ef 100644 --- a/src/widgets/develancacheui/component.jsx +++ b/src/widgets/develancacheui/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/diskstation/component.jsx b/src/widgets/diskstation/component.jsx index 0ca0b8ae..9c516af9 100644 --- a/src/widgets/diskstation/component.jsx +++ b/src/widgets/diskstation/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/docker/component.jsx b/src/widgets/docker/component.jsx index 6e05454f..074ce1eb 100644 --- a/src/widgets/docker/component.jsx +++ b/src/widgets/docker/component.jsx @@ -1,9 +1,9 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; -import { useTranslation } from "next-i18next"; import useSWR from "swr"; +import { useTranslation } from "next-i18next"; +import Container from "components/services/widget/container"; +import Block from "components/services/widget/block"; -import { calculateCPUPercent, calculateThroughput, calculateUsedMemory } from "./stats-helpers"; +import { calculateCPUPercent, calculateUsedMemory, calculateThroughput } 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 016f4953..0d9d8085 100644 --- a/src/widgets/downloadstation/component.jsx +++ b/src/widgets/downloadstation/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/emby/component.jsx b/src/widgets/emby/component.jsx index 88858da2..41220e22 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 e0f02089..6ed1b7b1 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 d0debdc3..2f086902 100644 --- a/src/widgets/evcc/component.jsx +++ b/src/widgets/evcc/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/fileflows/component.jsx b/src/widgets/fileflows/component.jsx index fdc75c6e..9b8e0794 100755 --- a/src/widgets/fileflows/component.jsx +++ b/src/widgets/fileflows/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/firefly/component.jsx b/src/widgets/firefly/component.jsx index af236a80..baff2304 100644 --- a/src/widgets/firefly/component.jsx +++ b/src/widgets/firefly/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/flood/component.jsx b/src/widgets/flood/component.jsx index 92a2b61a..44c03fd3 100644 --- a/src/widgets/flood/component.jsx +++ b/src/widgets/flood/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/flood/proxy.js b/src/widgets/flood/proxy.js index 5e5335ae..e0c10173 100644 --- a/src/widgets/flood/proxy.js +++ b/src/widgets/flood/proxy.js @@ -1,7 +1,7 @@ -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 getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; const logger = createLogger("floodProxyHandler"); diff --git a/src/widgets/freshrss/component.jsx b/src/widgets/freshrss/component.jsx index 70833e1d..c5029b8f 100644 --- a/src/widgets/freshrss/component.jsx +++ b/src/widgets/freshrss/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/freshrss/proxy.js b/src/widgets/freshrss/proxy.js index 6168db86..881094bd 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 ab67c461..a19a464a 100644 --- a/src/widgets/frigate/component.jsx +++ b/src/widgets/frigate/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/fritzbox/component.jsx b/src/widgets/fritzbox/component.jsx index d7928c20..c557ece5 100644 --- a/src/widgets/fritzbox/component.jsx +++ b/src/widgets/fritzbox/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/fritzbox/proxy.js b/src/widgets/fritzbox/proxy.js index c8c57fbc..20521560 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 5acd1b9c..1c127538 100644 --- a/src/widgets/gamedig/component.jsx +++ b/src/widgets/gamedig/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/gamedig/proxy.js b/src/widgets/gamedig/proxy.js index 79d7fa02..731bb445 100644 --- a/src/widgets/gamedig/proxy.js +++ b/src/widgets/gamedig/proxy.js @@ -1,7 +1,7 @@ import { GameDig } from "gamedig"; -import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import getServiceWidget from "utils/config/service-helpers"; const proxyName = "gamedigProxyHandler"; const logger = createLogger(proxyName); diff --git a/src/widgets/gatus/component.jsx b/src/widgets/gatus/component.jsx index 25aae239..668c0388 100644 --- a/src/widgets/gatus/component.jsx +++ b/src/widgets/gatus/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/ghostfolio/component.jsx b/src/widgets/ghostfolio/component.jsx index f2587586..524e30d9 100644 --- a/src/widgets/ghostfolio/component.jsx +++ b/src/widgets/ghostfolio/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/gitea/component.jsx b/src/widgets/gitea/component.jsx index 81b69d67..c45ded06 100644 --- a/src/widgets/gitea/component.jsx +++ b/src/widgets/gitea/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/gitlab/component.jsx b/src/widgets/gitlab/component.jsx index 4d2805ba..a012ee12 100644 --- a/src/widgets/gitlab/component.jsx +++ b/src/widgets/gitlab/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/glances/component.jsx b/src/widgets/glances/component.jsx index 4ca0cc72..bff31ac1 100644 --- a/src/widgets/glances/component.jsx +++ b/src/widgets/glances/component.jsx @@ -1,13 +1,13 @@ -import Containers from "./metrics/containers"; -import Cpu from "./metrics/cpu"; -import Disk from "./metrics/disk"; -import Fs from "./metrics/fs"; -import GPU from "./metrics/gpu"; -import Info from "./metrics/info"; import Memory from "./metrics/memory"; +import Cpu from "./metrics/cpu"; +import Sensor from "./metrics/sensor"; import Net from "./metrics/net"; import Process from "./metrics/process"; -import Sensor from "./metrics/sensor"; +import Disk from "./metrics/disk"; +import GPU from "./metrics/gpu"; +import Info from "./metrics/info"; +import Fs from "./metrics/fs"; +import Containers from "./metrics/containers"; 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 b919a92d..132fcc8e 100644 --- a/src/widgets/glances/components/chart.jsx +++ b/src/widgets/glances/components/chart.jsx @@ -1,5 +1,5 @@ import { PureComponent } from "react"; -import { Area, AreaChart, ResponsiveContainer, Tooltip } from "recharts"; +import { AreaChart, Area, 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 d6ec2076..5fabe755 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 { Area, AreaChart, ResponsiveContainer, Tooltip } from "recharts"; +import { AreaChart, Area, 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 7bcd5c46..0b6fb5f2 100644 --- a/src/widgets/glances/components/container.jsx +++ b/src/widgets/glances/components/container.jsx @@ -1,5 +1,5 @@ -import classNames from "classnames"; import { useContext } from "react"; +import classNames from "classnames"; 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 93ecbc28..4b7ac001 100644 --- a/src/widgets/glances/metrics/containers.jsx +++ b/src/widgets/glances/metrics/containers.jsx @@ -1,8 +1,8 @@ -import ResolvedIcon from "components/resolvedicon"; import { useTranslation } from "next-i18next"; +import ResolvedIcon from "components/resolvedicon"; -import Block from "../components/block"; import Container from "../components/container"; +import Block from "../components/block"; 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 3debf11a..e993fca9 100644 --- a/src/widgets/glances/metrics/cpu.jsx +++ b/src/widgets/glances/metrics/cpu.jsx @@ -1,9 +1,9 @@ -import { useTranslation } from "next-i18next"; import dynamic from "next/dynamic"; -import { useEffect, useState } from "react"; +import { useState, useEffect } from "react"; +import { useTranslation } from "next-i18next"; -import Block from "../components/block"; import Container from "../components/container"; +import Block from "../components/block"; 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 69dd2d99..0a459e07 100644 --- a/src/widgets/glances/metrics/disk.jsx +++ b/src/widgets/glances/metrics/disk.jsx @@ -1,9 +1,9 @@ -import { useTranslation } from "next-i18next"; import dynamic from "next/dynamic"; -import { useEffect, useState } from "react"; +import { useState, useEffect } from "react"; +import { useTranslation } from "next-i18next"; -import Block from "../components/block"; import Container from "../components/container"; +import Block from "../components/block"; 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 317a781f..4dd238e0 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 Block from "../components/block"; import Container from "../components/container"; +import Block from "../components/block"; 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 7eab536c..37b06ce3 100644 --- a/src/widgets/glances/metrics/gpu.jsx +++ b/src/widgets/glances/metrics/gpu.jsx @@ -1,9 +1,9 @@ -import { useTranslation } from "next-i18next"; import dynamic from "next/dynamic"; -import { useEffect, useState } from "react"; +import { useState, useEffect } from "react"; +import { useTranslation } from "next-i18next"; -import Block from "../components/block"; import Container from "../components/container"; +import Block from "../components/block"; 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 3c0ef429..5e969800 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 Block from "../components/block"; import Container from "../components/container"; +import Block from "../components/block"; 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 e5fbc350..8cfddb66 100644 --- a/src/widgets/glances/metrics/memory.jsx +++ b/src/widgets/glances/metrics/memory.jsx @@ -1,9 +1,9 @@ -import { useTranslation } from "next-i18next"; import dynamic from "next/dynamic"; -import { useEffect, useState } from "react"; +import { useState, useEffect } from "react"; +import { useTranslation } from "next-i18next"; -import Block from "../components/block"; import Container from "../components/container"; +import Block from "../components/block"; 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 2bdd491c..372c4ec6 100644 --- a/src/widgets/glances/metrics/net.jsx +++ b/src/widgets/glances/metrics/net.jsx @@ -1,9 +1,9 @@ -import { useTranslation } from "next-i18next"; import dynamic from "next/dynamic"; -import { useEffect, useState } from "react"; +import { useState, useEffect } from "react"; +import { useTranslation } from "next-i18next"; -import Block from "../components/block"; import Container from "../components/container"; +import Block from "../components/block"; 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 ad3fee54..06001e6e 100644 --- a/src/widgets/glances/metrics/process.jsx +++ b/src/widgets/glances/metrics/process.jsx @@ -1,8 +1,8 @@ -import ResolvedIcon from "components/resolvedicon"; import { useTranslation } from "next-i18next"; +import ResolvedIcon from "components/resolvedicon"; -import Block from "../components/block"; import Container from "../components/container"; +import Block from "../components/block"; 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 b5a16d10..3cb38c1c 100644 --- a/src/widgets/glances/metrics/sensor.jsx +++ b/src/widgets/glances/metrics/sensor.jsx @@ -1,9 +1,9 @@ -import { useTranslation } from "next-i18next"; import dynamic from "next/dynamic"; -import { useEffect, useState } from "react"; +import { useState, useEffect } from "react"; +import { useTranslation } from "next-i18next"; -import Block from "../components/block"; import Container from "../components/container"; +import Block from "../components/block"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/gluetun/component.jsx b/src/widgets/gluetun/component.jsx index f7128237..a834cb4c 100644 --- a/src/widgets/gluetun/component.jsx +++ b/src/widgets/gluetun/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/gotify/component.jsx b/src/widgets/gotify/component.jsx index 6cf9cea9..57b6b9c7 100644 --- a/src/widgets/gotify/component.jsx +++ b/src/widgets/gotify/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/grafana/component.jsx b/src/widgets/grafana/component.jsx index 82d6e5c9..859be017 100755 --- a/src/widgets/grafana/component.jsx +++ b/src/widgets/grafana/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/hdhomerun/component.jsx b/src/widgets/hdhomerun/component.jsx index 2532f92b..dd55013f 100644 --- a/src/widgets/hdhomerun/component.jsx +++ b/src/widgets/hdhomerun/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/headscale/component.jsx b/src/widgets/headscale/component.jsx index acee3a82..9d0da65b 100644 --- a/src/widgets/headscale/component.jsx +++ b/src/widgets/headscale/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/healthchecks/component.jsx b/src/widgets/healthchecks/component.jsx index b65f91c5..5fcef856 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 new file mode 100644 index 00000000..99497d6f --- /dev/null +++ b/src/widgets/hoarder/component.jsx @@ -0,0 +1,49 @@ +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/karakeep/widget.js b/src/widgets/hoarder/widget.js similarity index 84% rename from src/widgets/karakeep/widget.js rename to src/widgets/hoarder/widget.js index b005b04f..8a3cfef0 100644 --- a/src/widgets/karakeep/widget.js +++ b/src/widgets/hoarder/widget.js @@ -1,4 +1,5 @@ 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/homeassistant/component.jsx b/src/widgets/homeassistant/component.jsx index 1df415ae..5bd2f55c 100644 --- a/src/widgets/homeassistant/component.jsx +++ b/src/widgets/homeassistant/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/homeassistant/proxy.js b/src/widgets/homeassistant/proxy.js index 7702eb5d..e1f02ddb 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 4c550748..d5ca97be 100644 --- a/src/widgets/homebox/component.jsx +++ b/src/widgets/homebox/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/homebox/proxy.js b/src/widgets/homebox/proxy.js index 8a4550fc..c91ce552 100644 --- a/src/widgets/homebox/proxy.js +++ b/src/widgets/homebox/proxy.js @@ -1,9 +1,9 @@ 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 getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; const proxyName = "homeboxProxyHandler"; const sessionTokenCacheKey = `${proxyName}__sessionToken`; diff --git a/src/widgets/homebridge/component.jsx b/src/widgets/homebridge/component.jsx index 6201b70b..97896af1 100644 --- a/src/widgets/homebridge/component.jsx +++ b/src/widgets/homebridge/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/homebridge/proxy.js b/src/widgets/homebridge/proxy.js index 675e2976..4da9197b 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 9d2d60ca..01146771 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 a38cac1e..7f614797 100644 --- a/src/widgets/immich/component.jsx +++ b/src/widgets/immich/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/jackett/component.jsx b/src/widgets/jackett/component.jsx index 63e3e1c3..9c5ce0c5 100644 --- a/src/widgets/jackett/component.jsx +++ b/src/widgets/jackett/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/jackett/proxy.js b/src/widgets/jackett/proxy.js index 10e85175..035309b3 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 a7722c7c..6350faeb 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 d5d5ac3d..ae8c845c 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 { createEncryptionToken, decrypt, encrypt, sha256, uniqueRid, validateRid } from "./tools"; +import { sha256, uniqueRid, validateRid, createEncryptionToken, decrypt, encrypt } from "./tools"; import getServiceWidget from "utils/config/service-helpers"; -import createLogger from "utils/logger"; import { httpProxy } from "utils/proxy/http"; +import createLogger from "utils/logger"; const proxyName = "jdownloaderProxyHandler"; const logger = createLogger(proxyName); diff --git a/src/widgets/jellyseerr/component.jsx b/src/widgets/jellyseerr/component.jsx index d99fffdb..06456c4d 100644 --- a/src/widgets/jellyseerr/component.jsx +++ b/src/widgets/jellyseerr/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/karakeep/component.jsx b/src/widgets/karakeep/component.jsx deleted file mode 100644 index 8a74662d..00000000 --- a/src/widgets/karakeep/component.jsx +++ /dev/null @@ -1,49 +0,0 @@ -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/kavita/component.jsx b/src/widgets/kavita/component.jsx index 887b3bbe..df982328 100644 --- a/src/widgets/kavita/component.jsx +++ b/src/widgets/kavita/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/kavita/proxy.js b/src/widgets/kavita/proxy.js index cb3b3569..842e4b87 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 1e31b726..4272ddfc 100644 --- a/src/widgets/komga/component.jsx +++ b/src/widgets/komga/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/komga/proxy.js b/src/widgets/komga/proxy.js index b3d72690..a827f408 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 d022a545..92c6774c 100755 --- a/src/widgets/kopia/component.jsx +++ b/src/widgets/kopia/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/kubernetes/component.jsx b/src/widgets/kubernetes/component.jsx index d3587a59..b93e07fb 100644 --- a/src/widgets/kubernetes/component.jsx +++ b/src/widgets/kubernetes/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 useSWR from "swr"; +import { useTranslation } from "next-i18next"; +import Container from "components/services/widget/container"; +import Block from "components/services/widget/block"; export default function Component({ service }) { const { t } = useTranslation(); diff --git a/src/widgets/lidarr/component.jsx b/src/widgets/lidarr/component.jsx index 92f5b893..28295e57 100644 --- a/src/widgets/lidarr/component.jsx +++ b/src/widgets/lidarr/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/linkwarden/component.jsx b/src/widgets/linkwarden/component.jsx index b2b0d91a..8046faf9 100644 --- a/src/widgets/linkwarden/component.jsx +++ b/src/widgets/linkwarden/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; +import React, { useState, useEffect } from "react"; import Container from "components/services/widget/container"; -import { useEffect, useState } from "react"; +import Block from "components/services/widget/block"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/lubelogger/component.jsx b/src/widgets/lubelogger/component.jsx index 5ec88983..8a18f158 100644 --- a/src/widgets/lubelogger/component.jsx +++ b/src/widgets/lubelogger/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; +import { useTranslation } from "react-i18next"; import Container from "components/services/widget/container"; -import { useTranslation } from "next-i18next"; +import Block from "components/services/widget/block"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/mailcow/component.jsx b/src/widgets/mailcow/component.jsx index e5d9db65..96ef0e45 100644 --- a/src/widgets/mailcow/component.jsx +++ b/src/widgets/mailcow/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/mastodon/component.jsx b/src/widgets/mastodon/component.jsx index 3a5d9ab6..dbb36320 100644 --- a/src/widgets/mastodon/component.jsx +++ b/src/widgets/mastodon/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/mealie/component.jsx b/src/widgets/mealie/component.jsx index 4a558157..aa18c459 100644 --- a/src/widgets/mealie/component.jsx +++ b/src/widgets/mealie/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/medusa/component.jsx b/src/widgets/medusa/component.jsx index 88f55bcb..a5ea4ca1 100644 --- a/src/widgets/medusa/component.jsx +++ b/src/widgets/medusa/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/mikrotik/component.jsx b/src/widgets/mikrotik/component.jsx index 4bab6792..a34ce62f 100644 --- a/src/widgets/mikrotik/component.jsx +++ b/src/widgets/mikrotik/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/minecraft/component.jsx b/src/widgets/minecraft/component.jsx index 00c5f6f8..e277abb6 100644 --- a/src/widgets/minecraft/component.jsx +++ b/src/widgets/minecraft/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/minecraft/proxy.js b/src/widgets/minecraft/proxy.js index d1fe1463..5f238acb 100644 --- a/src/widgets/minecraft/proxy.js +++ b/src/widgets/minecraft/proxy.js @@ -1,7 +1,7 @@ import mc from "minecraftstatuspinger"; -import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import getServiceWidget from "utils/config/service-helpers"; const proxyName = "minecraftProxyHandler"; const logger = createLogger(proxyName); diff --git a/src/widgets/miniflux/component.jsx b/src/widgets/miniflux/component.jsx index 2cbbb254..5f5f649e 100644 --- a/src/widgets/miniflux/component.jsx +++ b/src/widgets/miniflux/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/moonraker/component.jsx b/src/widgets/moonraker/component.jsx index 238c8327..ed99e418 100644 --- a/src/widgets/moonraker/component.jsx +++ b/src/widgets/moonraker/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/mylar/component.jsx b/src/widgets/mylar/component.jsx index 95ec1aca..0306b1b6 100644 --- a/src/widgets/mylar/component.jsx +++ b/src/widgets/mylar/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/myspeed/component.jsx b/src/widgets/myspeed/component.jsx index dacd2b59..7de1b2b0 100644 --- a/src/widgets/myspeed/component.jsx +++ b/src/widgets/myspeed/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/navidrome/component.jsx b/src/widgets/navidrome/component.jsx index 6218e6d9..7a89f6ca 100644 --- a/src/widgets/navidrome/component.jsx +++ b/src/widgets/navidrome/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import { useTranslation } from "next-i18next"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/netalertx/component.jsx b/src/widgets/netalertx/component.jsx index 786db9a5..a52defd3 100644 --- a/src/widgets/netalertx/component.jsx +++ b/src/widgets/netalertx/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/netdata/component.jsx b/src/widgets/netdata/component.jsx index 2d04aa23..98d0f797 100644 --- a/src/widgets/netdata/component.jsx +++ b/src/widgets/netdata/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/nextcloud/component.jsx b/src/widgets/nextcloud/component.jsx index d1f1cac9..2989b6f4 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 45e01281..75c04a85 100644 --- a/src/widgets/nextdns/component.jsx +++ b/src/widgets/nextdns/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/npm/component.jsx b/src/widgets/npm/component.jsx index 54e123a8..1ffaf27e 100644 --- a/src/widgets/npm/component.jsx +++ b/src/widgets/npm/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/npm/proxy.js b/src/widgets/npm/proxy.js index 79307782..6c7ba09e 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 a11ac9da..4c0a9d48 100644 --- a/src/widgets/nzbget/component.jsx +++ b/src/widgets/nzbget/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/octoprint/component.jsx b/src/widgets/octoprint/component.jsx index e6b13809..21c3f7d0 100644 --- a/src/widgets/octoprint/component.jsx +++ b/src/widgets/octoprint/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/omada/component.jsx b/src/widgets/omada/component.jsx index bf301d81..0d76e1a1 100644 --- a/src/widgets/omada/component.jsx +++ b/src/widgets/omada/component.jsx @@ -1,8 +1,8 @@ import { useTranslation } from "next-i18next"; -import Block from "../../components/services/widget/block"; -import Container from "../../components/services/widget/container"; import useWidgetAPI from "../../utils/proxy/use-widget-api"; +import Container from "../../components/services/widget/container"; +import Block from "../../components/services/widget/block"; export default function Component({ service }) { const { t } = useTranslation(); diff --git a/src/widgets/omada/proxy.js b/src/widgets/omada/proxy.js index a5af47b2..f4da1293 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 859c01aa..3beb1198 100644 --- a/src/widgets/ombi/component.jsx +++ b/src/widgets/ombi/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/opendtu/component.jsx b/src/widgets/opendtu/component.jsx index c1b924b9..4fed88e4 100644 --- a/src/widgets/opendtu/component.jsx +++ b/src/widgets/opendtu/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/openmediavault/component.jsx b/src/widgets/openmediavault/component.jsx index c14581f9..bd34a750 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 7caf3426..22327b92 100644 --- a/src/widgets/openmediavault/methods/downloader_get_downloadlist.jsx +++ b/src/widgets/openmediavault/methods/downloader_get_downloadlist.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/openmediavault/methods/services_get_status.jsx b/src/widgets/openmediavault/methods/services_get_status.jsx index 7ab0f8c1..0579f41a 100644 --- a/src/widgets/openmediavault/methods/services_get_status.jsx +++ b/src/widgets/openmediavault/methods/services_get_status.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/openmediavault/methods/smart_get_list.jsx b/src/widgets/openmediavault/methods/smart_get_list.jsx index 4998c02f..6c812449 100644 --- a/src/widgets/openmediavault/methods/smart_get_list.jsx +++ b/src/widgets/openmediavault/methods/smart_get_list.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/openmediavault/proxy.js b/src/widgets/openmediavault/proxy.js index d2365f2b..9cda42e8 100644 --- a/src/widgets/openmediavault/proxy.js +++ b/src/widgets/openmediavault/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 { addCookieToJar, setCookieHeader } from "utils/proxy/cookie-jar"; 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 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 4f77036f..e02e3171 100644 --- a/src/widgets/openwrt/methods/interface.jsx +++ b/src/widgets/openwrt/methods/interface.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/openwrt/methods/system.jsx b/src/widgets/openwrt/methods/system.jsx index 55c0b005..56c3dc9e 100644 --- a/src/widgets/openwrt/methods/system.jsx +++ b/src/widgets/openwrt/methods/system.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/openwrt/proxy.js b/src/widgets/openwrt/proxy.js index 5db90790..0a0da3ff 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 1caaab47..b8a90d72 100644 --- a/src/widgets/opnsense/component.jsx +++ b/src/widgets/opnsense/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/overseerr/component.jsx b/src/widgets/overseerr/component.jsx index d5c64392..3ec66587 100644 --- a/src/widgets/overseerr/component.jsx +++ b/src/widgets/overseerr/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/paperlessngx/component.jsx b/src/widgets/paperlessngx/component.jsx index bafc2e99..6585d231 100644 --- a/src/widgets/paperlessngx/component.jsx +++ b/src/widgets/paperlessngx/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/peanut/component.jsx b/src/widgets/peanut/component.jsx index 54a293ad..bc0b739b 100644 --- a/src/widgets/peanut/component.jsx +++ b/src/widgets/peanut/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/pfsense/component.jsx b/src/widgets/pfsense/component.jsx index 9f43488b..18a54933 100644 --- a/src/widgets/pfsense/component.jsx +++ b/src/widgets/pfsense/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/photoprism/component.jsx b/src/widgets/photoprism/component.jsx index 21817a10..71772a7a 100644 --- a/src/widgets/photoprism/component.jsx +++ b/src/widgets/photoprism/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/photoprism/proxy.js b/src/widgets/photoprism/proxy.js index 1959817a..fe5096b3 100644 --- a/src/widgets/photoprism/proxy.js +++ b/src/widgets/photoprism/proxy.js @@ -1,7 +1,7 @@ -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 getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; const logger = createLogger("photoprismProxyHandler"); diff --git a/src/widgets/pihole/component.jsx b/src/widgets/pihole/component.jsx index 6895ab28..e065bf39 100644 --- a/src/widgets/pihole/component.jsx +++ b/src/widgets/pihole/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/pihole/proxy.js b/src/widgets/pihole/proxy.js index 75cd0fb5..2f2d9a88 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 d93304e7..af46e964 100644 --- a/src/widgets/plantit/component.jsx +++ b/src/widgets/plantit/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/plex/component.jsx b/src/widgets/plex/component.jsx index 153d57b5..688893d3 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 18ffc49b..c092ebaa 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 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 getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; import widgets from "widgets/widgets"; const proxyName = "plexProxyHandler"; diff --git a/src/widgets/portainer/component.jsx b/src/widgets/portainer/component.jsx index f8a89507..149707fc 100644 --- a/src/widgets/portainer/component.jsx +++ b/src/widgets/portainer/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/prometheus/component.jsx b/src/widgets/prometheus/component.jsx index 7b3722d0..003831e5 100644 --- a/src/widgets/prometheus/component.jsx +++ b/src/widgets/prometheus/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/prometheusmetric/component.jsx b/src/widgets/prometheusmetric/component.jsx index d58efde9..3ea20af0 100644 --- a/src/widgets/prometheusmetric/component.jsx +++ b/src/widgets/prometheusmetric/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/prowlarr/component.jsx b/src/widgets/prowlarr/component.jsx index e454c1a7..55f28634 100644 --- a/src/widgets/prowlarr/component.jsx +++ b/src/widgets/prowlarr/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; +import { useTranslation } from "react-i18next"; import Container from "components/services/widget/container"; -import { useTranslation } from "next-i18next"; +import Block from "components/services/widget/block"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/proxmox/component.jsx b/src/widgets/proxmox/component.jsx index 51762a73..fc4c728c 100644 --- a/src/widgets/proxmox/component.jsx +++ b/src/widgets/proxmox/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/proxmoxbackupserver/component.jsx b/src/widgets/proxmoxbackupserver/component.jsx index b13f8756..2eb12258 100644 --- a/src/widgets/proxmoxbackupserver/component.jsx +++ b/src/widgets/proxmoxbackupserver/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; @@ -29,18 +29,7 @@ export default function Component({ service }) { ); } - 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 datastoreUsage = datastoreData.data ? (datastoreData.data[0].used / datastoreData.data[0].total) * 100 : 0; 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 9a702eef..b1ccab8d 100644 --- a/src/widgets/pterodactyl/component.jsx +++ b/src/widgets/pterodactyl/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/pyload/component.jsx b/src/widgets/pyload/component.jsx index f618f75e..f0e58f52 100644 --- a/src/widgets/pyload/component.jsx +++ b/src/widgets/pyload/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/pyload/proxy.js b/src/widgets/pyload/proxy.js index 2a1949c1..a380c865 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 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"; +import { httpProxy } from "utils/proxy/http"; const proxyName = "pyloadProxyHandler"; const logger = createLogger(proxyName); diff --git a/src/widgets/qbittorrent/component.jsx b/src/widgets/qbittorrent/component.jsx index c9f64816..7fc47f99 100644 --- a/src/widgets/qbittorrent/component.jsx +++ b/src/widgets/qbittorrent/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; import { useTranslation } from "next-i18next"; +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/qbittorrent/proxy.js b/src/widgets/qbittorrent/proxy.js index 8f1874bf..aead7582 100644 --- a/src/widgets/qbittorrent/proxy.js +++ b/src/widgets/qbittorrent/proxy.js @@ -1,7 +1,7 @@ -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 getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; const logger = createLogger("qbittorrentProxyHandler"); diff --git a/src/widgets/qnap/component.jsx b/src/widgets/qnap/component.jsx index d7fdf8bc..79f3c8be 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 Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/qnap/proxy.js b/src/widgets/qnap/proxy.js index 1c5356ae..07917d28 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 bcf9301b..70ddcb33 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 4f71b8d9..7d370378 100644 --- a/src/widgets/radarr/widget.js +++ b/src/widgets/radarr/widget.js @@ -1,5 +1,5 @@ -import { asJson, jsonArrayFilter } from "utils/proxy/api-helpers"; import genericProxyHandler from "utils/proxy/handlers/generic"; +import { asJson, jsonArrayFilter } from "utils/proxy/api-helpers"; const widget = { api: "{url}/api/v3/{endpoint}?apikey={key}", diff --git a/src/widgets/readarr/component.jsx b/src/widgets/readarr/component.jsx index 845b7820..cbf68a4d 100644 --- a/src/widgets/readarr/component.jsx +++ b/src/widgets/readarr/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/readarr/widget.js b/src/widgets/readarr/widget.js index f786f0bc..58cc09c4 100644 --- a/src/widgets/readarr/widget.js +++ b/src/widgets/readarr/widget.js @@ -1,5 +1,5 @@ -import { jsonArrayFilter } from "utils/proxy/api-helpers"; import genericProxyHandler from "utils/proxy/handlers/generic"; +import { jsonArrayFilter } from "utils/proxy/api-helpers"; const widget = { api: "{url}/api/v1/{endpoint}?apikey={key}", diff --git a/src/widgets/romm/component.jsx b/src/widgets/romm/component.jsx index b0787fb3..5c6349d0 100644 --- a/src/widgets/romm/component.jsx +++ b/src/widgets/romm/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/rutorrent/component.jsx b/src/widgets/rutorrent/component.jsx index 245a786c..9d2ad4e2 100644 --- a/src/widgets/rutorrent/component.jsx +++ b/src/widgets/rutorrent/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/rutorrent/proxy.js b/src/widgets/rutorrent/proxy.js index 910f2311..e0ae44fe 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 9807dd93..5a9ba488 100644 --- a/src/widgets/sabnzbd/component.jsx +++ b/src/widgets/sabnzbd/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/scrutiny/component.jsx b/src/widgets/scrutiny/component.jsx index 2450a95e..f81a519c 100644 --- a/src/widgets/scrutiny/component.jsx +++ b/src/widgets/scrutiny/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/slskd/component.jsx b/src/widgets/slskd/component.jsx index 40a206b6..8c26d4e4 100644 --- a/src/widgets/slskd/component.jsx +++ b/src/widgets/slskd/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/slskd/widget.js b/src/widgets/slskd/widget.js index 3eedd356..fdea7738 100644 --- a/src/widgets/slskd/widget.js +++ b/src/widgets/slskd/widget.js @@ -1,4 +1,5 @@ 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 19cc2c12..725e6d66 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 1fcef8eb..acb4a551 100644 --- a/src/widgets/sonarr/widget.js +++ b/src/widgets/sonarr/widget.js @@ -1,5 +1,5 @@ -import { asJson } from "utils/proxy/api-helpers"; import genericProxyHandler from "utils/proxy/handlers/generic"; +import { asJson } from "utils/proxy/api-helpers"; const widget = { api: "{url}/api/v3/{endpoint}?apikey={key}", diff --git a/src/widgets/speedtest/component.jsx b/src/widgets/speedtest/component.jsx index 7be00aa2..e34f53ac 100644 --- a/src/widgets/speedtest/component.jsx +++ b/src/widgets/speedtest/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/spoolman/component.jsx b/src/widgets/spoolman/component.jsx index 62eb3a1d..b690f9c0 100644 --- a/src/widgets/spoolman/component.jsx +++ b/src/widgets/spoolman/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/stash/component.jsx b/src/widgets/stash/component.jsx index 965c6b59..e3986d4b 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 be471ddf..bcd3b110 100644 --- a/src/widgets/stocks/component.jsx +++ b/src/widgets/stocks/component.jsx @@ -1,7 +1,7 @@ -import classNames from "classnames"; -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; import { useTranslation } from "next-i18next"; +import classNames from "classnames"; +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/strelaysrv/component.jsx b/src/widgets/strelaysrv/component.jsx index 026e19b7..0aa70d88 100644 --- a/src/widgets/strelaysrv/component.jsx +++ b/src/widgets/strelaysrv/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/suwayomi/component.jsx b/src/widgets/suwayomi/component.jsx index 1cbd8c53..1a8625b9 100644 --- a/src/widgets/suwayomi/component.jsx +++ b/src/widgets/suwayomi/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/suwayomi/proxy.js b/src/widgets/suwayomi/proxy.js index 4df55b95..def811cc 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 4220e3c8..2b17278f 100644 --- a/src/widgets/swagdashboard/component.jsx +++ b/src/widgets/swagdashboard/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/tailscale/component.jsx b/src/widgets/tailscale/component.jsx index b95cb016..a6e76bed 100644 --- a/src/widgets/tailscale/component.jsx +++ b/src/widgets/tailscale/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/tandoor/component.jsx b/src/widgets/tandoor/component.jsx index 4a02d539..b31cad95 100644 --- a/src/widgets/tandoor/component.jsx +++ b/src/widgets/tandoor/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/tautulli/component.jsx b/src/widgets/tautulli/component.jsx index 3f6443dd..50e8295f 100644 --- a/src/widgets/tautulli/component.jsx +++ b/src/widgets/tautulli/component.jsx @@ -1,8 +1,8 @@ /* eslint-disable camelcase */ -import Container from "components/services/widget/container"; import { useTranslation } from "next-i18next"; -import { BsCpu, BsFillCpuFill, BsFillPlayFill, BsPauseFill } from "react-icons/bs"; +import { BsFillPlayFill, BsPauseFill, BsCpu, BsFillCpuFill } from "react-icons/bs"; import { MdOutlineSmartDisplay, MdSmartDisplay } from "react-icons/md"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/tdarr/component.jsx b/src/widgets/tdarr/component.jsx index 824a56b3..ce9d43fd 100644 --- a/src/widgets/tdarr/component.jsx +++ b/src/widgets/tdarr/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/tdarr/proxy.js b/src/widgets/tdarr/proxy.js index d6897dfc..88da30fd 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 fa221025..22f56e96 100644 --- a/src/widgets/technitium/component.jsx +++ b/src/widgets/technitium/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/technitium/widget.js b/src/widgets/technitium/widget.js index fc4577be..c3432a67 100644 --- a/src/widgets/technitium/widget.js +++ b/src/widgets/technitium/widget.js @@ -1,5 +1,5 @@ -import { asJson } from "utils/proxy/api-helpers"; import genericProxyHandler from "utils/proxy/handlers/generic"; +import { asJson } from "utils/proxy/api-helpers"; 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 e4b3b46b..598170fa 100644 --- a/src/widgets/traefik/component.jsx +++ b/src/widgets/traefik/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/transmission/component.jsx b/src/widgets/transmission/component.jsx index 474fe69f..bd19c52e 100644 --- a/src/widgets/transmission/component.jsx +++ b/src/widgets/transmission/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/transmission/proxy.js b/src/widgets/transmission/proxy.js index b0be7bac..8b8049bc 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 12ceef56..0e56bc91 100644 --- a/src/widgets/truenas/component.jsx +++ b/src/widgets/truenas/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; import { useTranslation } from "next-i18next"; +import Container from "components/services/widget/container"; +import Block from "components/services/widget/block"; 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 528114ed..d322753f 100644 --- a/src/widgets/truenas/widget.js +++ b/src/widgets/truenas/widget.js @@ -1,5 +1,5 @@ -import { asJson, jsonArrayFilter } from "utils/proxy/api-helpers"; import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; +import { asJson, jsonArrayFilter } from "utils/proxy/api-helpers"; const widget = { api: "{url}/api/v2.0/{endpoint}", diff --git a/src/widgets/tubearchivist/component.jsx b/src/widgets/tubearchivist/component.jsx index 427298e4..6af255cd 100644 --- a/src/widgets/tubearchivist/component.jsx +++ b/src/widgets/tubearchivist/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/unifi/component.jsx b/src/widgets/unifi/component.jsx index ad58d1d9..0c00b487 100644 --- a/src/widgets/unifi/component.jsx +++ b/src/widgets/unifi/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/unifi/proxy.js b/src/widgets/unifi/proxy.js index c932fc41..24be7dd9 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 12069e52..7cc8eec1 100644 --- a/src/widgets/unmanic/component.jsx +++ b/src/widgets/unmanic/component.jsx @@ -1,9 +1,9 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; import useWidgetAPI from "utils/proxy/use-widget-api"; +import { formatProxyUrl } from "utils/proxy/api-helpers"; export default function Component({ service }) { const { widget } = service; diff --git a/src/widgets/unmanic/widget.js b/src/widgets/unmanic/widget.js index ef4493e9..4c9713e4 100644 --- a/src/widgets/unmanic/widget.js +++ b/src/widgets/unmanic/widget.js @@ -1,5 +1,5 @@ -import { asJson } from "utils/proxy/api-helpers"; import genericProxyHandler from "utils/proxy/handlers/generic"; +import { asJson } from "utils/proxy/api-helpers"; const widget = { api: "{url}/unmanic/api/v2/{endpoint}", diff --git a/src/widgets/uptimekuma/component.jsx b/src/widgets/uptimekuma/component.jsx index e8a42e48..d044c255 100644 --- a/src/widgets/uptimekuma/component.jsx +++ b/src/widgets/uptimekuma/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/uptimerobot/component.jsx b/src/widgets/uptimerobot/component.jsx index a1f234c2..c18462ba 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 9d8f92ba..76769e13 100644 --- a/src/widgets/urbackup/component.jsx +++ b/src/widgets/urbackup/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/vikunja/component.jsx b/src/widgets/vikunja/component.jsx index 1afccd38..7f8efb41 100644 --- a/src/widgets/vikunja/component.jsx +++ b/src/widgets/vikunja/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/vikunja/widget.js b/src/widgets/vikunja/widget.js index 8e5e680a..9a192026 100644 --- a/src/widgets/vikunja/widget.js +++ b/src/widgets/vikunja/widget.js @@ -1,5 +1,5 @@ -import { asJson } from "utils/proxy/api-helpers"; 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/watchtower/component.jsx b/src/widgets/watchtower/component.jsx index 58b2a3f5..0bed9445 100644 --- a/src/widgets/watchtower/component.jsx +++ b/src/widgets/watchtower/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/watchtower/proxy.js b/src/widgets/watchtower/proxy.js index 484c3c7d..588d08ee 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 829b120d..eb42532e 100644 --- a/src/widgets/wgeasy/component.jsx +++ b/src/widgets/wgeasy/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/whatsupdocker/component.jsx b/src/widgets/whatsupdocker/component.jsx index cc3b5174..52afe09d 100644 --- a/src/widgets/whatsupdocker/component.jsx +++ b/src/widgets/whatsupdocker/component.jsx @@ -1,5 +1,5 @@ -import Block from "components/services/widget/block"; 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/widgets.js b/src/widgets/widgets.js index e183a9c6..21cff92b 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 healthchecks from "./healthchecks/widget"; +import hoarder from "./hoarder/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 jdownloader from "./jdownloader/widget"; import jellyseerr from "./jellyseerr/widget"; -import karakeep from "./karakeep/widget"; +import jdownloader from "./jdownloader/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,14 +78,15 @@ import octoprint from "./octoprint/widget"; import omada from "./omada/widget"; import ombi from "./ombi/widget"; import opendtu from "./opendtu/widget"; -import openmediavault from "./openmediavault/widget"; -import openwrt from "./openwrt/widget"; import opnsense from "./opnsense/widget"; import overseerr from "./overseerr/widget"; +import openmediavault from "./openmediavault/widget"; +import openwrt from "./openwrt/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"; @@ -94,14 +95,12 @@ 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"; @@ -112,27 +111,28 @@ import spoolman from "./spoolman/widget"; import stash from "./stash/widget"; import stocks from "./stocks/widget"; import strelaysrv from "./strelaysrv/widget"; -import suwayomi from "./suwayomi/widget"; import swagdashboard from "./swagdashboard/widget"; +import suwayomi from "./suwayomi/widget"; import tailscale from "./tailscale/widget"; import tandoor from "./tandoor/widget"; import tautulli from "./tautulli/widget"; -import tdarr from "./tdarr/widget"; import technitium from "./technitium/widget"; +import tdarr from "./tdarr/widget"; import traefik from "./traefik/widget"; import transmission from "./transmission/widget"; -import truenas from "./truenas/widget"; import tubearchivist from "./tubearchivist/widget"; +import truenas from "./truenas/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,8 +178,7 @@ const widgets = { grafana, hdhomerun, headscale, - hoarder: karakeep, - karakeep, + hoarder, homeassistant, homebox, homebridge, diff --git a/src/widgets/xteve/component.jsx b/src/widgets/xteve/component.jsx index 41f2beb0..9d514e75 100644 --- a/src/widgets/xteve/component.jsx +++ b/src/widgets/xteve/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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"; diff --git a/src/widgets/xteve/proxy.js b/src/widgets/xteve/proxy.js index 53d82bc4..453e3645 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 b6a5b20b..a2cc8168 100644 --- a/src/widgets/zabbix/component.jsx +++ b/src/widgets/zabbix/component.jsx @@ -1,6 +1,6 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; 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";